Neale and Hoskins (2000) によって提案された, 惑星表面が全て水であるような条件 (水惑星) で実験を行う方法を説明します.
この計算には以下の物理過程を用いています.
本実験では, 海表面温度のデータが必要です. したがって, 実験の実行は以下の 4 つのステップで行います.
dcpam5 の数値実験はソースツリー内部では行わず ソースツリーとは別の外部ディレクトリにて行うことを推奨いたします.
まず dcpam5 ソースのトップディレクトリ(以下の例では dcpam5-YYYYMMDD とする)に移動してください. 以下では dcpam5 ソースディレクトリの隣に ../dcpma5-exp/ape-nh00-exp ディレクトリを作成し, そこで実験を行うことにします. 次のように ../dcpam5-exp/ape-nh00-exp ディレクトリを作成し, 移動してください.
$ mkdir -p ../dcpa5-exp/ape-nh00-exp $ cd ../dcpa5-exp/ape-nh00-exp
次に, このディレクトリに実行ファイルと設定ファイル置き場を作成します.
$ mkdir bin $ mkdir conf
最後に作成したディレクトリに実行ファイルと設定ファイルをコピーします.
$ cp ../../dcpam5-YYYYMMDD/src/main/dcpam_main bin $ cp ../../dcpam5-YYYYMMDD/src/main/init_data bin $ cp ../../dcpam5-YYYYMMDD/src/main/sst_data bin $ cp ../../dcpam5-YYYYMMDD/exp_setup_files/*.conf conf
なお, 実行ファイルと設定ファイル (NAMELIST ファイル) があれば, どのディレクトリにおいても計算を行うことができます.
init_data と init_data_APE_NH00_T42L22.conf を用いて初期値ファイル init_T42L22.nc を作成します.
$ ./bin/init_data -N=./conf/init_data_APE_NH00_T42L22.conf *** MESSAGE [init_data] *** Run: Initial data generation *** MESSAGE [init_data] *** -- version = $Name: dcpam5-20121110 $$Id: exp-APE-NH00.rd,v 1.3 2012-10-08 13:27:52 yot Exp $ *** MESSAGE [namelist_util] *** ----- Initialization Messages ----- *** MESSAGE [namelist_util] *** MaxNmlArySize = 256 *** MESSAGE [namelist_util] *** -- version = $Name: dcpam5-20121110 $$Id: exp-APE-NH00.rd,v 1.3 2012-10-08 13:27:52 yot Exp $ *** MESSAGE [timeset] *** NAMELIST group "timeset_nml" is loaded from "./conf/init_data_APE_NH00_T42L22.conf". : *** MESSAGE [initial_data] *** PsAvr = 101080. *** MESSAGE [initial_data] *** QVapAvr = 0. *** MESSAGE [initial_data] *** Ueq = 0. *** MESSAGE [initial_data] *** *** MESSAGE [initial_data] *** -- version = $Name: dcpam5-20121110 $$Id: exp-APE-NH00.rd,v 1.3 2012-10-08 13:27:52 yot Exp $ *** MESSAGE [HistoryClose] *** "init_T42L22.nc" is closed ############## CPU TIME SUMMARY ################ others 0.400020E-01 ------------------------------------------------ TOTAL TIME = 0.400020E-01
実験用データとして, オゾン分布のデータを 以下に用意してあります.
上記のページから "O3_NH00_T042.nc" をダウンロードして, 実験を行うディレクトリに置いてください.
次に, sst_data と sst_data_APE_NH00_T42.conf を用いて, 海水面データ sst_T42.nc を作成します.
$ ./bin/sst_data -N=./conf/sst_data_APE_NH00_T42.conf *** MESSAGE [sst_data] *** Run: SST data generation *** MESSAGE [sst_data] *** -- version = $Name: dcpam5-20121110 $$Id: exp-APE-NH00.rd,v 1.3 2012-10-08 13:27:52 yot Exp $ *** MESSAGE [namelist_util] *** ----- Initialization Messages ----- *** MESSAGE [namelist_util] *** MaxNmlArySize = 256 *** MESSAGE [namelist_util] *** -- version = $Name: dcpam5-20121110 $$Id: exp-APE-NH00.rd,v 1.3 2012-10-08 13:27:52 yot Exp $ *** MESSAGE [timeset] *** NAMELIST group "timeset_nml" is loaded from "./conf/sst_data_APE_NH00_T42.conf". : *** MESSAGE [surface_data] *** SoilHeatCap = 2100000. *** MESSAGE [surface_data] *** SoilHeatDiffCoef = 1.2 *** MESSAGE [surface_data] *** -- version = $Name: dcpam5-20121110 $$Id: exp-APE-NH00.rd,v 1.3 2012-10-08 13:27:52 yot Exp $ *** MESSAGE [HistoryClose] *** "sst_T42.nc" is closed ############## CPU TIME SUMMARY ################ others 0.400000E-02 ------------------------------------------------ TOTAL TIME = 0.400000E-02
最後に dcpam_main, dcpam_APE_NH00_T42L22.conf を用いて実験を実施します. 解像度 T42L22, 時間ステップ 12 分で 2 日分計算を行います. リスタートデータ, 地表面リスタートデータといくつかのヒストリデータ ファイルが出力されます.
$ ./bin/dcpam_main -N=./conf/dcpam_APE_NH00_T42L22.conf | tee ape-nh00.log
初期値データ, 地表面データ, 実験設定を変更する場合には, 上記の実行に際して conf ディレクトリ内の init_data_APE_NH00_T42L22.conf, sst_data_APE_NH00_T42.conf, dcpam_APE_NH00_T42L22.conf を変更してください.
2 日後における温度の東西平均分布は以下の図のようになります.
この図は, Gphys を 用いて, 下の処理によって描画しています.
まず irb を起動. $ irb 以下のような irb のプロンプトが表示されます. irb(main):001:0> このプロンプトに, 以下のようにコマンドを打ちます. 左端の数字は行番号で, 打つ必要はありません. 1: require "numru/ggraph" 2: include NumRu 3: gphys = GPhys::IO.open('Temp.nc', 'Temp') 4: DCL.gropn(1) 5: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7) 6: GGraph.tone( gphys.mean('lon').cut('time'=>2) ) 7: GGraph.color_bar 8: DCL.grcls irb のプロンプトにおいて quit と打つと irb を終了することができます.
この計算で用いている初期値は等温静止大気です. この計算で用いている大気 (ほぼ地球大気) は, 2 日間では準定常状態には達しませんので, 上記の図はスピンアップ中の状態を表しています.
解析・可視化のもう少し詳しい方法についてはこちらを参照してください.
実験ディレクトリに作成された計算結果を保存しておきたい場合には データ用ディレクトリ(例えば data01)を作成し, ファイルを移動させて整理しておきましょう.
$ mkdir data01 $ mv *.nc *.log data01/
なお, 計算結果を計算実行時にサブディレクトリへ出力することも可能です. 実験設定の変更の出力設定の変更を参照し, NAMELIST ">ool_historyauto_nml" の変数 "FilePrefix" による設定を試してみて下さい.