k 分布作成 : k 分布作成

地球大気の k 分布作成の方法を説明する.

混合比可変 k 分布作成用大気プロファイルの準備 (prog06.1)

$ cd prog06.1_sort_ac_many_mpi

設定ファイルの準備

$ cp sample/Earth.varvmr.mkprofile.conf mkprofile.conf
  • mkprofile.conf : 入出力ファイルの設定

    &molecule_nml
      MolNum(1:3)             = 1, 2, 3,
      VMR(1:3)                = 3*0.0d0,
      NcFNVMR                 = "",
      FlagVMRSetFromFile(1:3) = 3*.false.
    /
    &range_nml
      PressMax    = 1.0d6,
      PressMin    = 1.0d-4,
      NPress      = 101,
      TempMin = 100.0d0,
      TempMax = 400.0d0
      NTemp   =  13,
      KeyMol1Num  = 1
      NVMRKeyMol1 = 8,
      VMRsKeyMol1 = 0.0d0, 1.0d-7, 1.0d-6, 1.0d-5, 1.0d-4, 1.0d-3, 1.0d-2, 1.0d-1,
      KeyMol2Num  = 2,
      NVMRKeyMol2 = 6,
      VMRsKeyMol2 = 200.0d-6, 300.0d-6, 400.0d-6, 500.0d-6, 600.0d-6, 700.0d-6,
      KeyMol3Num  = 3,
      NVMRKeyMol3 = 4,
      VMRsKeyMol3 = 1.0d-8, 1.0d-7, 1.0d-6, 1.0d-5,
    /

実行

$ mkdir data_profile
$ ../prog05.1_calc_ac_many_mpi/mkprofile

実行後にできるファイルは以下.

  • data_profile/Profile_T-001_M01-001_M02-001_M03-001.nc のようなファイル
  • data_profile/VariableRange.nc

k 分布作成 (prog06.1)

$ rm -f out/*

設定ファイルの準備

$ cp sample/Earth.varvmr-small.file.conf file.conf
$ cp sample/Earth.varvmr.many.conf many.conf
$ cp sample/Earth.varvmr.sort_ac.conf sort_ac.conf
  • file.conf : 入出力ファイルの設定 [変更なし]
  • many.conf : パラメータ範囲の設定

    &many_nml
      iTemps    = 1, iTempe    =  13,
      Mol1Num   = 1,
      iVMRMol1s = 1, iVMRMol1e = 8,
      Mol2Num   = 2,
      iVMRMol2s = 1, iVMRMol2e = 6,
      Mol3Num   = 3,
      iVMRMol3s = 1, iVMRMol3e = 4
    /
  • sort_ac.conf : 計算条件の設定

    &star_nml
      StrSpeNcFN = "../prog02.3_calc_stellarspectrum/out/solar_flux_Gueymard2004_1366.1Wm-2.nc"
    /
    &band_mode_nml
      iBands =  0,
      iBande =  0,
      iModes = 10,
      iModee = 10
    /
    &flag_nml
      FlagChkConstVMR      = .false.,
    /
    &gauss_region_nml
      NGaussReg = 2,
      GaussRegBnds = 0.0d0, 0.98d0, 1.0d0
    !  GaussRegBnds = 0.0d0, 0.95d0, 1.0d0
    /
    &band_nml
      NBand = 20,
      WNBnds    = 10.0d2, 100.0d2, 300.0d2, 400.0d2, 600.0d2, 700.0d2, 800.0d2, 1000.0d2, 1100.0d2, 1500.0d2, 2200.0d2, 2500.0d2, 3500.0d2, 4500.0d2, 5500.0d2, 14500.0d2, 20500.0d2, 30500.0d2, 32500.0d2, 34500.0d2, 50000.0d2,
    !
      KeyMolNum = 1, 2, 3
      !
      BandNBin  = 16
    /
    &flag_nml
      FlagChkConstVMR      = .false.,
    /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=1,GaussRegNBins(1:2)=2,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=2,GaussRegNBins(1:2)=5,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=3,GaussRegNBins(1:2)=4,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=4,GaussRegNBins(1:2)=4,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=5,GaussRegNBins(1:2)=6,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=6,GaussRegNBins(1:2)=6,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=7,GaussRegNBins(1:2)=4,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=8,GaussRegNBins(1:2)=4,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=9,GaussRegNBins(1:2)=7,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=10,GaussRegNBins(1:2)=3,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=11,GaussRegNBins(1:2)=4,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=12,GaussRegNBins(1:2)=2,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=13,GaussRegNBins(1:2)=6,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=14,GaussRegNBins(1:2)=4,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=15,GaussRegNBins(1:2)=8,2 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=16,GaussRegNBins(1:2)=5,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=17,GaussRegNBins(1:2)=2,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=18,GaussRegNBins(1:2)=1,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=19,GaussRegNBins(1:2)=1,1 /
    &band_exception_nml KeyMolNum=1,2,3 BandNum=20,GaussRegNBins(1:2)=1,1 /

コンパイル

コンパイル

$ make

コンパイルが成功すると, 下の実行ファイルができる.

  • sort_ac_many

実行

逐次実行

$ ./sort_ac_many

標準出力に Finish と表示されれば無事実行終了. 計算結果は

out/ac_T-001_M01-001_M02-001_M03-001-00-10.nc など.

[今後の為に] 並列実行

ここの例では比較的短時間で計算が終了する. 今後 k 分布作成の回数が増えた場合には, 以下のように MPI を用いて並列実行すると良い.

$ mpiexec -n 16 ./sort_ac_many >& tee error.log &

標準出力に Finish と表示されれば無事実行終了. 計算結果は

out/ac_T-001_M01-001_M02-001_M03-001-00-10.nc など.

親ディレクトリに戻る

$ cd ..