一番簡単な例として、NetCDFのファイル名、次元、変数名、属性の全てがわかっている場合。
NetCDFのルーチンは、NetCDFファイルに対して操作を実行するとともにエラーがあったかどうかの値を返す。
だから、status = NetCDF関数といった書き方を多用する。
status = nf_open(hoge.nc,NF_NOWRITE,ncid)
nf_open関数によりNetCDFがオープンされる。
1つ目の引数にはファイル名(ここではhoge.nc)を指定する。
2つ目の引数では、NF_NOWRITEと指定することで読み込み専用にしている。
3つ目の引数では、NetCDF IDを指定する。ここでは、ncidという変数にNetCDF IDを代入している。ncidに代入されるのは整数である。
複数のNetCDFを同時に開くならば、ncid2,ncid3といったようなファイル数分のNetCDF IDを代入する変数を用意する必要がある。
NetCDFのIDはNetCDFファイルをクローズすると消去されるので、変数を繰り返し使いまわすことができる。
status = nf_close(ncid)
単純にクローズするNetCDFファイルのID、つまり変数(ここではncid)をしていするだけ。
クローズすると、割り当てられていたNetCDFのIDは消去される。
status = nf_inq_varid(ncid,hoge,varid)
変数のIDを取得するには
1つ目の引数として、NetCDFのID(ここではncid)を指定し、NetCDFファイルを指定する。
2つ目の引数として、変数IDを取得しようとする変数のNetCDF内での名前(ここではhoge)を指定する。これはncdumpで確認できる変数の名前である。
3つ目の引数として、変数IDを指定する。ここでは、varidという変数にNetCDF変数IDを代入している。仕組みは、NetCDF IDを指定する場合と同じである。
変数の読み込みには、変数の型を正しく指定する必要がある。
ncdumpで見たときの変数型 | nf_get_var関数 |
short | nf_get_var_INT2 |
floatまたはreal | nf_get_var_real |
double | nf_get_var_double |
例えば、Realの変数を持ってくるとすると
status = nf_get_var_real(ncid,varid,HOGE)
ここで、HOGEは、プログラム内での変数の名前である。
status = nf_get_att_real(ncid,varid,"scale_factor",scale_factor) status = nf_get_att_real(ncid2,varid,"add_offset",add_offset)
statusに入った値がエラーかどうかを判別するために以下のような書き方をする。
if (status .NE. nf_noerr) then write(6,*) nf_strerror(status) stop endif
これは、statusがnf_noerrでなかったらnf_strerror関数を実行してプログラムを停止するという意味である。
nf_noerrには0(整数ゼロ)が元々入っていて、エラーがなければstatusにも0が入るのでこのif文はスキップされる。
しかし、エラーがあった場合には0以外の数字がstatusに入る。
statusの値自体は、単に整数なのでnf_strerror関数を使うことでエラーメッセージに変換している。