金星大気放射対流平衡 (非定数比熱の理想気体/ファンデルワールス気体/非理想気体の熱力学を考慮した計算)
以下ではまず EOS-CG (Gernert and Span, 2016) を用いて熱力学量を計算して放射対流平衡を計算する方法を説明する. その上でページ下部で, ファンデルワールス気体, 非定数の理想気体の熱力学を用いて放射対流平衡を計算する方法を説明する.
放射対流平衡計算 (prog11.2)
prog11.2 を用いる.
$ cd prog11.2_calc_rce_realgas $ rm -f out/*
設定ファイルの準備
$ cp sample/Venus.calc_rce.conf calc_rce.conf $ cp sample/Venus.calc_rte.conf calc_rte.conf $ cp sample/Venus.planetconst.conf planetconst.conf $ cp sample/Venus.thermo_prop.conf thermo_prop.conf
- calc_rce.conf : 平衡計算の設定
ここでは下のように記述.
&rce_nml NTime = 1000000, OutputStep = 2000, DelTime = 43200.0d0, SurfHeatCap = 4.217d7, ! For example, use http://... KDOptPropNcFN = '../prog07.0v2_mkkdtbl/out/kdactblv2_Venus.nc', OutDir = "out", ! FlagConvection = .true. FlagMoistConvection = .false. ! FilterCoef = 0.0d0, ! FilterCoef = 1.0d-3, ! InitFileName = '../prog01.0_mkprofile_ascii/out/Venus_ProfB.nc', PressName = "Press", MolNumName = "MolNum", TempName = "Temp", VMRName = "VMR" ! FlagOutSpeFlux = .false. /
- 内容説明 (Earth.calc_rce.conf の説明)
- calc_rte.conf : 放射伝達方程式計算の設定 [変更なし]
- planetconst.conf : 惑星パラメータの設定 [変更なし]
- thermo_prop.conf : 状態方程式計算関係のパラメータ設定 [変更なし]
コンパイル
Makefile を下のように変更 (下のようになっていることを確認).
DEF = -DKDONLY -DTHERMOPROP_GS2016 -DKDV2
これにより, EOS-CG (Gernert and Span, 2016) の状態方程式を用いる.
コンパイル.
$ make
コンパイルが成功すると, 下の実行ファイルができる.
- calc_rce
実行
出力ディレクトリの準備
$ mkdir out
環境変数 (OpenMP 並列数) の指定
$ export OMP_NUM_THREADS=1
(これをやらないと意味なく並列に動作する. あるいはこれの代わりに ../MakefileInclude ないの FFLAGS から -fopenmp を削除しても良い.)
実行
$ ./calc_rce
Finish と表示されれば無事実行終了.
計算結果のファイルは以下.
- out/profileXXXXXX.nc : 大気プロファイル (XXXXXX はステップ数)
- out/fluxXXXXXX.nc : 放射加熱温度変化率
- out/tendenciesXXXXXX.nc : 加熱温度変化率
- out/tendencyXXXXXX.nc : 加熱温度変化率 (tendenciesXXXXXX.nc があるので不要かもしれない)
補足
かなり時間がかかるはず (数日間?) なので, バックグラウンドで実行することを勧める. 例えば,
$ ./calc_rce >& error.log &
のように.
また, 設定ファイル calc_rce.conf の
&rce_nml ... OutputStep = 2000, ! 出力ステップ間隔 ... /
で指定した時間ステップ間隔で結果のファイルが作られるため, 計算が終了するまでの時間を見積ることができる.
親ディレクトリに戻る
$ cd ..
補足: ファンデルワールス気体の熱力学を仮定して計算する方法
ファンデルワールス気体を仮定して計算する場合には, 上記の計算方法において, 下の部分を変更して計算すればよい.
プログラムの変更
src/thermo_prop/thermo_prop_vdWEOS.f90 の以下の部分を変更して, ファンデルワールス気体の性質を指定する.
data m_SubstName / "CO2", "H2O", "N2" / data m_SubstVMR / 0.965d0 , -1.0d100, 0.035d0 / data m_SubstMolWeight / 44.0098d-3, -1.0d100, 28.01348d-3 / data m_SubstCoefA0 / 3.66d-1 , -1.0d100, 1.37d-1 / data m_SubstCoefB0 / 4.28d-5 , -1.0d100, 3.86d-5 /
変数の意味は以下.
- m_SubstVMR : CO2, H2O, N2 の混合比
- m_SubstMolWeight : CO2, H2O, N2 の平均分子量
- m_SubstCoefA0 : CO2, H2O, N2 それぞれのファンデルワールス状態方程式の係数 A
- m_SubstCoefB0 : CO2, H2O, N2 それぞれのファンデルワールス状態方程式の係数 B
混合気体のファンデルワールス状態方程式の定数は, ファンデルワールス混合規則 (van der Waals mixing rule) によって計算される.
設定ファイルの準備
設定ファイルのうち, thermo_prop.conf で指定される変数 TPVMR は利用されないため, 指定の必要はない.
コンパイル
コンパイルオプションを変更する. Makefile を下のように変更 (下のようになっていることを確認).
DEF = -DKDONLY -DTHERMOPROP_vdWEOS
補足: 多項式近似した非定数定圧比熱を持つ理想気体の熱力学を仮定して計算する方法
多項式近似した非定数定圧比熱を持つ理想気体を仮定して計算する場合には, 上記の計算方法において, 下の部分を変更して計算すればよい.
プログラムの変更
src/thermo_prop/thermo_prop_ig_cplsf.f90 の以下の部分を変更して, 温度の二次関数で近似した比熱を指定する.
integer , parameter :: NCoef = 3 real(dp), save :: a_CPCoef(NCoef) real(dp), parameter :: Temp1 = 450.0d0 real(dp), parameter :: Temp2 = 300.0d0 data a_CPCoef / 989.0d0, 247.2d0, -52.92d0 /
変数の意味は以下.
- a_CPCoef(NCoef) : 温度の二次関数の係数
- Temp1 : 温度定数 1
- Temp2 : 温度定数 2
上記の変数を用いて, 比熱は下のように計算される.
Val = 0.0d0 do i = 1, NCoef Val = Val + a_CPCoef(i) * ( ( Temp - Temp1 ) / Temp2 )**( i-1 ) end do
なお, a_CPCoef(2) = 0, a_CPCoef(3) = 0 とすれば比熱は定数となる.
設定ファイルの準備
設定ファイルのうち, thermo_prop.conf で指定される変数 TPVMR は利用されないため, 指定の必要はない.
コンパイル
コンパイルオプションを変更する. Makefile を下のように変更 (下のようになっていることを確認).
DEF = -DKDONLY -DTHERMOPROP_IGCpLSF