DCPAM 並列計算結果の結合

DCPAM で MPI (Message Passing Interface) を用いて行った並列計算の結果は分割されているため, 解析のためにはファイルを結合すると後々楽である.

計算結果の分割されたファイルを結合する方法は二つ用意してある.

  • Fortran プログラムを用いる方法
  • ruby スクリプトを用いる方法

前者の方が実行が速いが, 後者の方が扱いは簡単かもしれない. どちらの方法を用いても良い. 下では, 惑星表面圧力 (Ps) のファイルの結合について説明するが, 他の変数についても同じようにすれば結合したファイルを作ることができる.

いずれの方法を用いる場合も, 結合したファイルを使って図を描き, 計算結果が正しくなっているか, 正しく結合できているかを確認すると良い.

Fortran プログラムを用いる方法

このプログラムを用いることで結合することができる.

上記のファイルをダウンロードし, 展開し, コンパイルして設定して用いれば良い.

コンパイル

展開後のディレクトリ内で以下を実行する.

$ make

結果として生成される merge_ncf が実行ファイルである. また, この実行ファイルは merge.nml を設定ファイルとして読み込む.

設定

(詳細は util_merge-2011-03-28-2/README.jp.rd を参照すること.)

4 並列で実行した結果のファイル Ps_rank000000.nc, Ps_rank000001.nc, Ps_rank000002.nc, Ps_rank000003.nc を結合する場合を考える.

merge.nml に下を記述する.

&proc nprocs = 4 /
&item  varname = 'Ps', inncfn = 'Ps.nc'   /

varname は変数名, inncfn は入力ファイル名 (ただし, "_rank??????" を除いたもの) である.

注意: 利用するディレクトリ構造を考慮して, 入力ファイル名を記述すること. (別ディレクトリで実行するならばディレクトリ名も必要.)

実行

$ ./merge_ncf

正しく実行されれば Ps.nc ファイルが生成される.

ruby スクリプトを用いる方法

このスクリプトを用いることで結合することができる.

上記のファイルをダウンロードして用いれば良い.

実行

$ ruby merge-2021-09-17.nc Ps.nc

結合する元ファイルは Ps_rank000000.nc, Ps_rank000001.nc, ... であるが, 上記で指定する引数には "_rank000000" の文字列は不要である. 正しく実行されれば Ps.nc ファイルが生成される.