この文書は, dcpam4 を用いて手軽に実験を 行うためのチュートリアルです.
dcpam4 インストールガイド を参考に, dcpam4 のビルドを行ってください. 「ビルドの手引き」の「ソースコードのコンパイル」まで行ってください.
動作チェックを行っている, もしくは行ったことのある いくつかのコンパイラに関する注意書きです.
他のコンパイラについても当てはまる場合があるかもしれませんので, 下記の動作チェックがうまく行かない場合にはご一読ください.
サンプルとして用意されている Held and Suarez (1994) のベンチマーク実験を 行う方法を説明します.
practice ディレクトリに移動してください.
$ cd practice
そのディレクトリ内で, make コマンドを実行してください. いくつか質問がありますが, とりあえずそのまま Enter キーを入力してください.
$ make ****** Setup a directory for a experiment ****** Enter directory name [testXX]: Directory in which executable files are prepared [/home/dcpam/work/dcpam4/src/main]: Directory in which NAMELIST files are prepared [/home/dcpam/work/dcpam4/src/main]: Save F90/95 source code files? [Y/n]: Directory in which source code files are prepared [/home/dcpam/work/dcpam4/src]: : *** Setup of "testXX" is complete ***
testXX というディレクトリが作成され, その中に 実行ファイルや NAMELIST ファイル, ソースコードがコピーされます. testXX ディレクトリ内に移動してください.
$ cd testXX
実行ファイルとして dcpam_hs94, init_sample などが用意されている はずです. 以下のように dcpam_hs94 を実行してください. コマンドラインオプションとして "-h" や "--help" を指定することで, 解像度や出力されるファイル名の一覧が表示されます.
$ ./dcpam_hs94 *** MESSAGE [dcpam_hs94] *** History files are created. *** MESSAGE [dcpam_hs94] *** Restart file "dcpam_hs94_restart.nc" is created. *** MESSAGE [dcpam_hs94] *** History data (time=0.125 days) is output. *** MESSAGE [dcpam_hs94] *** Restart data (time=1440. minute - 20. minute, and 1440. minute) is output to "dcpam_hs94_restart.nc" ########## PREDICTION OF CALCULATION ########### Start Date 2007-07-30T17:25:25+09:00 Current Date 2007-07-30T17:25:35+09:00 Progress 14.29% [*** ] Remaining CPU TIME 0.580000E+02 Completion Date 2007-07-30T17:26:33+09:00 : ############## CPU TIME SUMMARY ################ Setup 0.223517E-09 HistoryGet 0.223517E-09 HistoryPut 0.679995E+00 Dynamics 0.133000E+02 Phyisics 0.342000E+01 TimeFilter 0.209997E+00 ------------------------------------------------ TOTAL TIME = 0.176100E+02
とりあえず 7 日分の計算が行われ, 結果が U.nc や Temp.nc として 出力されます. また, リスタートファイルが dcpam_hs94_restart.nc として出力されます. これらは gtool4 NetCDF 規約 に基づく NetCDF ファイルです. 可視化や解析には 電脳 Ruby プロジェクト において開発されているツールを使用してください.
計算設定を変更するには NAMELIST ファイルを使用してください. サンプルとして dcpam_hs94_T10L12.nml や dcpam_hs94_T21L12.nml を用意しています. これらのファイルの中身を変更し, 以下のように実行 ファイルのオプション -N (または --namelist) において指定してください.
$ ./dcpam_hs94 -N=dcpam_hs94_T10L12.nml *** MESSAGE [dcpam_hs94] *** NAMELIST group "dcpam_hs94_grid_nml" is loaded from "dcpam_hs94_T10L12.nml". &DCPAM_HS94_GRID_NML NMAX = 10, IMAX = 32, JMAX = 16, KMAX = 12 / *** MESSAGE [dcpam_hs94] *** NAMELIST group "dcpam_hs94_time_nml" is loaded from "dcpam_hs94_T10L12.nml". &DCPAM_HS94_TIME_NML START_TIME_VALUE = 0.000000000000000E+000, START_TIME_UNIT = sec , DELTA_TIME_VALUE = 20.0000000000000 , DELTA_TIME_UNIT = minute , TOTAL_TIME_VALUE = 7.00000000000000 , TOTAL_TIME_UNIT = day , PREDICT_SHOW_INTERVAL_VALUE = 1.00000000000000 , PREDICT_SHOW_INTERVAL_UNIT = days / :
NAMELIST ファイルを読み込む場合, 上記のように NAMELIST 変数群の読み込み に関する情報が出力されます.
上記の実験では, 初期値データは実行プログラムによって内部で作成されていました. 以下では, 初期値データをファイルに出力する方法を記します.
まず, 上記の作業と同様に practice ディレクトリへ移動し, make コマンド で実験用ディレクトリを作成してください. その後, 作成された実験用 ディレクトリへ移動してください.
初期値データファイル生成プログラムのサンプルとして init_sample が 用意されています. 以下のように実行してください. コマンドラインオプションとして "-h" や "--help" を指定することで, 解像度や出力されるファイル名の一覧が表示されます.
$ ./init_sample
デフォルトでは, "init_T10L12.nc" という名前のファイルが出力されます. このファイルを初期値データとして入力する方法に関しては, 初期値データ・リスタートデータファイルの入力 を参照してください.
ファイルから初期値データ, もしくはリスタートデータを読み込む際には, NAMELIST ファイルを編集してください. dcpam_hs94 用の NAMELIST ファイルは dcpam_hs94_TXXLXX.nml です. このファイルに書かれている "dcpam_hs94_initdata_nml" という NAMELIST 変数群にデータの入力に 関する情報を与えます.
&dcpam_hs94_initdata_nml initial_data_prepared = .false., !!$ initial_data_prepared = .true., ! 初期値データの有無. ! Presence or absence of initial data init_nc = 'init.nc', !!$ init_nc = 'dcpam_hs94_restart.nc', ! 初期値データ netCDF ファイル. ! NetCDF file for initial data init_nc_time_varname = '', !!$ init_nc_time_varname = 'time', ! 時刻の変数名. ! 空にした場合, データ入力時に時刻指定を ! 行いません. ! ! Variable name of time. ! If this variable is null character, ! time is not specified when data is input. ! init_nc_timeB = -90.0, ! 初期値データ ( $ t-\Delta t $ ) の時刻. ! Time of initial data ( $ t-\Delta t $ ) init_nc_timeN = 0.0 ! 初期値データ ( $ t $ ) の時刻. ! Time of initial data ( $ t $ ) /
"initial_data_prepared" を .true. に変更し, "init_nc" に初期値データもしくはリスタートデータのファイル名を指定します. 初期値データのように時刻次元が含まれないデータを読み込む場合には, "init_nc_time_varname" は空にしてください. 一方で時刻次元が含まれるリスタートデータを読み込む場合には 時刻次元の変数名 (デフォルトは "time") を指定してください. "init_nc_time_varname" に時刻の変数名を与えた場合, "init_nc_timeB" と "init_nc_timeN" にそれぞれ, ステップ t - Δt の 時刻と, ステップ t の時刻を与えてください.
NAMELIST ファイルを変更後, 以下のようにその NAMELIST ファイルを -N もしくは --namelist オプションに指定して実験を始めてください.
$ ./dcpam_hs94 -N=dcpam_hs94_TXXLXX.nml
実験が開始されると, 以下のようなデータ入力のメッセージが表示されるはずです. 確認してください.
|*** MESSAGE [HistoryGetDouble1] *** Input init_T10L12.nc@lon |*** MESSAGE [HistoryGetDouble1] *** Input init_T10L12.nc@lat |*** MESSAGE [HistoryGetDouble1] *** Input init_T10L12.nc@sig |*** MESSAGE [HistoryGetDouble1] *** Input init_T10L12.nc@sigm |*** MESSAGE [HistoryGetDouble3] *** Input init_T10L12.nc@Vor,time=0.0 |*** MESSAGE [HistoryGetDouble3] *** Input init_T10L12.nc@Vor,time=6.0 |*** MESSAGE [HistoryGetDouble3] *** Input init_T10L12.nc@Div,time=0.0 |*** MESSAGE [HistoryGetDouble3] *** Input init_T10L12.nc@Div,time=6.0 |*** MESSAGE [HistoryGetDouble3] *** Input init_T10L12.nc@Temp,time=0.0 |*** MESSAGE [HistoryGetDouble3] *** Input init_T10L12.nc@Temp,time=6.0 |*** MESSAGE [HistoryGetDouble3] *** Input init_T10L12.nc@QVap,time=0.0 |*** MESSAGE [HistoryGetDouble3] *** Input init_T10L12.nc@QVap,time=6.0 |*** MESSAGE [HistoryGetDouble2] *** Input init_T10L12.nc@Ps,time=0.0 |*** MESSAGE [HistoryGetDouble2] *** Input init_T10L12.nc@Ps,time=6.0
src ディレクトリ以下の編集を行った場合, 以下のようにすることで practice 以下の実験用ディレクトリの内容を簡単に更新することが 可能です. なお, src 以下の Fortran 90/95 プログラムの変更を 行う際には らくらく dcpam4 (製作中) を参照してください.
まず, practice 以下の実験用ディレクトリへ移動します.
$ cd practice/testXX
以下のコマンドを入力します. 更新するか問われるので, "Y" を 入力します.
$ make update Update directory "testXX" ? [y/N]: Y
src ディレクトリ内で更新されたファイルが practice/testXX に コピーされます. 古いファイルは ".bak.XX" というサフィックスが付加 されたファイル名に変更されます.