前へ | 目次へ | 次へ

ステップ3 - 複数のファイルに出力

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_psihst_temp を宣言します.

次に 72 行目と 90 行目の HistoryCreate で出力ファイル psi.nc と temp.nc を作成します. このとき最後の引数には 29 行目で宣言した hst_psihst_temp を代入します.

112 行目から 115 行目までが出力です. HistoryPut の第 3 引数には HistoryCreate で指定したそれぞれの出力先ファイルに対応する GT_HISTORY 型構造体変数を代入します.

では, 実際に nc ファイルを作成してみましょう. benard_1.f90benard_2.f90 は c2pack モジュールを利用するので c2pack.f90を コンパイルしてモジュールにしておく必要があります.

また, c2pack は ISPACK のラッパーなので ISPACK もインストールされている必要があります.

ISPACK のインストール

ISPACK からソースをダウンロードしてコンパイルし, できあがった ISPACK のライブラリを適当な場所にインストールしてください.

ただし, Debian ユーザには .deb ファイルが用意されています. SPMODEL 必要なライブラリ のページに, それぞれの Fortran コンパイラ毎の .deb ファイルが用意されているので適宜インストールしてください.

c2pack のコンパイル

c2pack.f90をダウンロードし, 下記のようにISPACKにリンクをはってコンパイルして下さい.

・ IFC の場合 (赤字は適宜変更して下さい.)

 $ ifc -O -Qoption,ld,-Bdynamic -Vaxlib -w -c c2pack.f90 -L/usr/lib -lisp-ifc7

・ FRT の場合 (赤字は適宜変更して下さい.)

 $ frt -Am -c c2pack.f90 -L/usr/lib -lisp-ffc4

c2pack.o と c2pack.mod が作成されば OK です.

benard_1.f90 のコンパイル

では, benard_1.f90 をコンパイルしてみましょう.

・ IFC の場合 (赤字は適宜変更して下さい.)

 $ 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 の場合 (赤字は適宜変更して下さい.)

 $ 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_2.f90 をコンパイルしてみましょう. コンパイルの仕方は benard_1.f90 と同様です.

できた実行ファイル a.out を実行してみましょう.

$ ./a.out

すると今度は, 温度と流線関数のデータがそれぞれ, temp.nc と psi.nc に出力されます.


前へ | 目次へ | 次へ