2004 年 3 月 20 日 地球流体電脳倶楽部
ここまでに示した例では 1 つのファイルに全ての変数と属性の出力を行いました. しかしながら複数のファイルへ出力することもできます.
ここでは 2 次元の熱対流を計算するプログラムを例に解説します. 出力する変数は 2 つ(流線関数と温度)です. 1 つのファイルに出力を行うプログラムが benard_1.f90, 2 つのファイルに分けて出力を行うプログラムが benard_2.f90 です.
benard_2.f90 では 29 行目で
type(GT_HISTORY) :: hst_psi, hst_temp
とし, それぞれ流線関数と温度を出力するファイルを示す GT_HISTORY 型構造体変数 hst_psi と hst_temp を宣言します.
次に 72 行目と 90 行目の HistoryCreate で出力ファイル psi.nc と temp.nc を作成します. このとき最後の引数には 29 行目で宣言した hst_psi と hst_temp を代入します.
112 行目から 115 行目までが出力です. HistoryPut の第 3 引数には HistoryCreate で指定したそれぞれの出力先ファイルに対応する GT_HISTORY 型構造体変数を代入します.
では, 実際に nc ファイルを作成してみましょう. benard_1.f90 と benard_2.f90 は c2pack モジュールを利用するので c2pack.f90を コンパイルしてモジュールにしておく必要があります.
また, c2pack は ISPACK のラッパーなので ISPACK もインストールされている必要があります.
ISPACK
からソースをダウンロードしてコンパイルし, できあがった
ISPACK のライブラリを適当な場所にインストールしてください.
ただし, Debian ユーザには .deb ファイルが用意されています.
SPMODEL の
必要なライブラリ
のページに, それぞれの Fortran コンパイラ毎の .deb
ファイルが用意されているので適宜インストールしてください.
c2pack.f90をダウンロードし, 下記のようにISPACKにリンクをはってコンパイルして下さい.
$ ifc -O -Qoption,ld,-Bdynamic -Vaxlib -w -c c2pack.f90 -L/usr/lib -lisp-ifc7
$ frt -Am -c c2pack.f90 -L/usr/lib -lisp-ffc4
c2pack.o と c2pack.mod が作成されば OK です.
では, benard_1.f90 をコンパイルしてみましょう.
$ ifc -I/usr/local/gt4f90io/include -O -Qoption,ld,-Bdynamic -Vaxlib -w benard_1.f90 c2pack.o \
-L/usr/lib -lisp-ifc7 \
-L/usr/local/gt4f90io/lib -lgt4f90io -L/usr/local/lib -lnetcdf
$ frt -I/usr/local/gt4f90io/include -Am benard_1.f90 c2pack.o \
-L/usr/lib -lisp-ffc4 \
-L/usr/local/gt4f90io/lib -lgt4f90io -L/usr/local/lib -lnetcdf
すると, 実行ファイルを a.out が作成されます. そこで,
$ ./a.out
と実行させると, benard_1.nc が作成されます.
では, 今度はbenard_2.f90 をコンパイルしてみましょう. コンパイルの仕方は benard_1.f90 と同様です.
できた実行ファイル a.out を実行してみましょう.
$ ./a.out
すると今度は, 温度と流線関数のデータがそれぞれ, temp.nc と psi.nc に出力されます.