NetCDF Tips
NetCDFライブラリを,環境:Vine 3.1 & Intel fortran 8.1にインストールした例を紹介します.
1. NetCDFのホームページ
http://www.unidata.ucar.edu/software/netcdf/で,netcdf.tar.Z (ver. 3.6.0)をダウンロードする.
2. 展開する.(以下の作業はrootで行った)
# tar -xzvf netcdf.tar.Z できたディレクトリに移動する.
# cd netcdf-3.6.0-p1/src/
3. 環境変数の設定をする.ここではhttp://www.unidata.ucar.edu/software/netcdf/docs/other-builds.htmlの「Linux x86 with Intel ifort 8.1 fortran compiler」
を参考にした.
# export FC=ifort
# export F90=ifort
# export FFLAGS="-O -mp"
# export CPPFLAGS="-DNDEBUG -DpgiFortran"
4. configureを実行する./usr/local/netcdf-3.6.0はインストールする場所.
# ./configure --prefix=/usr/local/netcdf-3.6.0
5. makeでインストールする.
# make
# mkdir /usr/local/netcdf-3.6.0
# make install
6. 再び,環境変数の設定をする./etc/profileに以下を書き込む.
PATH="$PATH:/usr/local/netcdf-3.6.0/bin/"
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/netcdf-3.6.0/lib"
export PATH LD_LIBRARY_PATH
NetCDFのファイルを読み込んだ例を紹介します.
ここではAvisoのFTPサイト
ftp://ftp.cls.fr/pub/oceano/AVISO/SSH/duacs/global/dt/msla/merged/にある,
海表面高度偏差データファイル「hh_msla_oer_merged_h_15627.nc」を読み込みます.
まず,ファイルについての情報を得るために,
$ ncdump -c hh_msla_oer_merged_h_15627.nc | less
とします.すると出力の初めの内容は以下の通りになっています.
海表面高度偏差を得るのに必要な情報は,赤で囲んだ2箇所の部分にあります.
まず,上の四角で囲んだ部分から,緯度方向のグリッド数(NbLatitudes)が915,
経度方向のグリッド数(NbLongitudes)が1080であることが判ります.
次に,下の四角で囲んだ部分から,データの型が単精度(float)で,
変数名が「Grid_0001」でグリッド数が(1080×915),
欠損値が1.8446744e+19f,正確な変数名は「H」,単位が「cm」
であることが判ります.
Fortranの読み込みプログラム例 netcdf_example.f90 を示します.
重要なことはinclude文によるnetcdf.incの読み込みと,NetCDFライブラリの使い方です.
このプログラム中で使用されているNetCDFライブラリは次の5つです.
- nf_open :ファイルをopenします.2つ目の引数nf_nowriteは読み込み専用を意味します.
- nf_inq_varid:読み込む変数のID(rhid)を取得します.2つ目の引数varは,先ほどのncdumpで得た変数名「Grid_0001」を入れます.
- nf_get_var_real:実際に変数の値をすべてを読み込みます.この場合,配列slaに値は格納されます.
- nf_close:ファイルをcloseします.
- nf_strerror:ライブラリの実行でエラーがあったあと気にエラーメッセージを表示します.
このプログラムをコンパイルするには,
$ ifort netcdf_example.f90 -L/usr/local/netcdf-3.6.0/lib -lnetcdf
とします.指定するディレクトリはインストールした場所により異なります.
netCDFユーザガイド日本語版
@地球流体電脳倶楽部