[GFD Dennou Club | deepconv Project] [deepconv Reference Manual]
この文書は deeoconv/arare の利用の手引である. ここでは インストール の手引 により, すでにソースコードのコンパイル と実行プログラムのインストールは終了しているものとし, 自分で基本場と初 期条件を設定し実行する方法について簡単に解説する. デフォルトの設定を用 いて実行する方法についてはごくらく deepconvを参 照されたい.
実行プログラムはソースツリーディレクトリ (ここでは /work/deepconv に展開されているとする) 直下の bin ディレクトリ以下にあるとする.
deepconv/arare の計算設定を行う NAMELIST ファイルのサンプルは src/sample_nml に置かれています. これらを基にして NAMLIST ファイルを作成します.
初期値生成用の設定項目
arare_init-data.conf
実験設定項目
arare.conf
サーマルの上昇 (凝結なし, 乱流: Klemp and Wilhelmson)
arare-thermal-dry_init-data.conf arare-thermal-dry.conf
サーマルの上昇 (凝結: Kessler, H2O のみ, 乱流: Klemp and Wilhelmson)
arare-thermal-moist_init-data.conf arare-thermal-moist.conf
サーマルの上昇 [木星版] (凝結: Kessler, H2O, NH3, NH4SH, 乱流: Klemp and Wilhelmson)
arare-jupiter_init-data.conf arare-jupiter.conf
サーマルの上昇 [火星版] (凝結: 拡散成長, 乱流: Klemp and Wilhelmson)
arare-mars_init-data.conf arare-mars.conf
Takemi (2007) の初期値
arare-takemi_init-data.conf
Yamasaki (1983) の初期値
arare-yamasaki_init-data.conf
前バージョン (deepconv/arare4) のヒストリーファイルから初期値生成
arare-from-arare4_init-data.conf
基本場と初期値作成プログラムは src/main/arare_init-data.f90 です. プログラムの前半で基本場を, 後半で擾乱場の初期値を設定しています.
基本場の設定を行う部分は以下のように記述されている.
case (IDBasic[FlagBasic]) call MessageNotiy("M", "main", "Making Initial data..." ) ! 基本場の温度, 気圧, モル分率を決める z_TempBZ = ... z_PressBZ = ... zf_MolFr = ... ! 残りの基本場の値を決める call DetermineBZ case(... ... end select
任意の基本場を与えて計算を行いたい場合は, 既存の case 文による選択肢を コピーし, 必要に応じて温度(z_TempBZ), 気圧(z_PressBZ), モル分率 (zf_MolFr)を与えればよい. FlagBasic には既存のフラグ名と重ならない名前 を与え, 初期値作成用の NAMLIST ファイルにおいて NAMELIST 変数 initialdata_nml の FlagBasic にその名前を指定する.
具体的な基本場の与え方は src/env/ 以下のプログラムを参考にするとよい.
上端と下端の温度(TempTop, TempSfc), 温度勾配(DTDz)を与え, 静水圧平衡に ある基本場を与える場合(大気成分は一種類).
case(IDBasicBaker1998) call MessageNotify( "M", "main", "Making Initial data named Baker1998..." ) ! DTDz を設定する DTDz = ... ! 温度場の設定 z_TempBZ(nz) = Ttop - DTDz(nz) * z_dz(nz) * 0.5 do k = nz-1, 1, -1 z_TempBZ(k) = z_TempBZ(k+1) - DTDz(k+1) * (z_dz(k+1) + z_dz(k)) *0.5 end do ! 気圧場の設定(静水圧) z_PressBZ(1) = PressSfc - & & (Grav * PressSfc * z_dz(1) * 5.0d-1) / (GasRDry * TempSfc) do k = 2, nz z_PressBZ(k) = z_PressBZ(k-1) - (Grav * z_PressBZ(k-1) * z_dz(k-1)) & & / ( GasRDry * z_TempBZ(k-1) ) end do ! モル分率の設定 zf_MolFr = 0.0d0 ! 残りの基本場の値を決める call DetermineBZ end select
擾乱場の設定も基本場と同様 case 文を用いて行われている.
select case(IDDisturbPTemp) case(IDDisturbPTemp[FlagDisturbPTemp]) ... case(... ... end select case select case(IDDisturbExner) case(IDDisturbExner[FlagDisturbExner]) ... end select case
擾乱場は NAMELIST ファイルにおいて変数 FlagDisturb(変数名)の値が指定さ れていない場合 0 が代入されるようになっている. 基本場を設定する場合と同 様に case 文の選択肢を必要に応じてコピーし, 初期擾乱を設定する. FlagDisturb(変数名) には既存のフラグ名と重ならない名前を与え, 初期値作 成用の NAMLIST ファイルにおいて NAMELIST 変数 initialdata_nml の FlagDisturb(変数名) にその名前を指定する.
arare_init-data.f90 の編集が終ったらコンパイルし, NAMELIST ファイルにし かるべき値を指定して実行する. ここでは初期値生成用 NAMLIST ファイルを arare_init-data.conf, 実行用 NAMLIST ファイルを arare.conf としています.
初期値作成
$ ./bin/arare_init-data -N=arare_init-data.conf
実行
$ ./bin/arare -N=arare.conf