構築した金星大気 k 分布テーブルを用いた計算

構築した k 分布テーブルを用いて金星大気の計算を実施する方法を説明する.

k 分布テーブルの準備

構築した k 分布テーブルを配置. 例えば, 上の data_Earth ディレクトリ内に配置する.

$ cd <TOPDIR>/data_Venus
$ cp <somewhere>/kdactblv2_Venus.nc .

計算ディレクトリの準備

$ mkdir practice
$ cd practice
$ mkdir test_Venus_radiation_gen
$ cd test_Venus_radiation_gen

プログラムの準備

$ cp ../../src/main/dcpam_init_data .
$ cp ../../src/main/dcpam_init_data_surface .
$ cp ../../src/main/dcpam_main .

設定ファイルの準備

ダウンロード

  • こちらにある下の三つのファイルをダウンロード.
    • init_data_V_T21L52.conf : 大気初期値設定ファイル
    • surface_data_V_T21.conf : 惑星表面初期値設定ファイル
    • dcpam_V_T21L52.conf : 実行設定ファイル

書き換え

  • 上でダウンロードした dcpam_V_T21L52.conf 内の 'sp_for_Venus_T021_MGN_truncT018_P16.nc' などのファイル名・パスを適切に書き換える.

補足

  • 使用する放射モデルは, dcpam_V_T21L52.conf 内の &dcpam_main_nml の RadModel で指定している.

    &dcpam_main_nml
      ...
      RadModel = 'Venus',
      ...
    /
  • 放射モデルに関わることは, dcpam_V_T21L52.conf の以下で指定している.

    &rad_Venus_V1_nml
      WaveNumAlbedoSwitch = 7700.0d2,
      KDOptPropNcFN       = "../../../data_Venus/kdactblv2_Venus_radmodels2-2025-02-09_fixvmr_dwn00.5e2+05.0e2_076IPs.nc",
      ProfileNcFN         = "../../../data_Venus/Venus_ProfB.nc",
    !  NCalcInterval = 12, ! failed
    !  NCalcInterval = 6,
      NCalcInterval = 1,
    /

計算の実行

初期値用ディレクトリ生成

$ mkdir 0000

大気初期値生成

$ mpiexec -n 16 ./dcpam_init_data -N=init_data_V_T21L52.conf

惑星表面初期値生成

$ mpiexec -n 16 ./dcpam_init_data_surface -N=surface_data_V_T21.conf

計算実行

$ mpiexec -n 16 ./dcpam_main -N=dcpam_V_T21L52.conf < /dev/null >& error.log &

終了するまでにはとても時間がかかる (上記 dcpam_V_T21L52.conf の設定では 5000 地球日積分).

この放射モデルの DCPAM へのインターフェースルーチンには OpenMP の指示行を入れているため, 放射計算に関しては MPI と OpenMP でのハイブリッド並列で計算できる. 具体的には, DCPAM の MPI が緯度方向に分割するのに対して, 放射モデルインターフェースは分割された緯度帯内の格子点を OpenMP で分割して計算する. したがって, 計算コアを多数利用できる場合には, 実行時に OMP_NUM_THREADS に 1 以上の値を指定して OpenMP での並列計算も行うと良い. ただし, DCPAM の物理過程は OpenMP で並列化されているわけではないため, モデル全体としてハイブリッド並列で計算されているわけではない. (それでも放射計算の計算コストがとても大きいため実行時間は減ることが期待できる.)

計算結果