この文書は, dcpam5 を用いて手軽に実験を 行うためのチュートリアルです.
dcpam5 インストールガイド を参考に, dcpam5 のビルドを行ってください. 「ビルドの手引き」の「ソースコードのコンパイル」まで行ってください.
動作チェックを行っている, もしくは行ったことのある いくつかのコンパイラに関する注意書きです.
他のコンパイラについても当てはまる場合があるかもしれませんので, 下記の動作チェックがうまく行かない場合にはご一読ください.
サンプルとして用意されている 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/dcpam5/src/main]:
  Directory in which NAMELIST files are prepared
    [/home/dcpam/work/dcpam5/src/main]:
  Save F90/95 source code files? [Y/n]:
  Directory in which source code files are prepared
    [/home/dcpam/work/dcpam5/src]:
                :
*** Setup of "testXX" is complete ***
testXX というディレクトリが作成され, その中に 実行ファイルや NAMELIST ファイル, ソースコードがコピーされます. testXX ディレクトリ内に移動してください.
$ cd testXX
実行ファイルとして dcpam_hs94, init_data などが用意されている はずです. 以下のように dcpam_hs94 を実行してください. コマンドラインオプションとして "-h" や "--help" を指定することで, 解像度や出力されるファイル名の一覧が表示されます.
$ ./dcpam_hs94
 *** MESSAGE [dcpam_hs94] ***  History files are created.
 *** MESSAGE [dcpam_hs94] ***  Restart file "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 "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 として 出力されます. また, リスタートファイルが restart.nc として出力されます. これらは gtool4 NetCDF 規約 に基づく NetCDF ファイルです. 可視化や解析には 電脳 Ruby プロジェクト において開発されているツールを使用してください.
計算設定を変更するには NAMELIST ファイルを使用してください. サンプルとして dcpam_hs94_T42L20.nml を用意しています. これらのファイルの中身を変更し, 以下のように実行 ファイルのオプション -N (または --namelist) において指定してください.
$ ./dcpam_hs94 -N=dcpam_hs94_T42L20.nml
 *** MESSAGE [timeset] ***  NAMELIST group "timeset_nml" is loaded from "dcpam_hs94_T42L20.nml".
 *** MESSAGE [timeset] ***  ----- Initialization Messages -----
 *** MESSAGE [timeset] ***    StartTime  = 0. [day]
 *** MESSAGE [timeset] ***    EndTime    = 1200. [day]
 *** MESSAGE [timeset] ***    DelTime    = 30. [min]
 *** MESSAGE [timeset] ***               = 1800. [sec]
 *** MESSAGE [timeset] ***    PredictInt = 1. [day]
 *** MESSAGE [timeset] ***    CpuTimeMoniter = T
 *** MESSAGE [timeset] ***  -- version = $Id: index.rd,v 1.2 2008-11-08 19:03:20 morikawa Exp $
 *** MESSAGE [gridset] ***  NAMELIST group "gridset_nml" is loaded from "dcpam_hs94_T42L20.nml".
 *** MESSAGE [gridset] ***  ----- Initialization Messages -----
 *** MESSAGE [gridset] ***    nmax = 42
 *** MESSAGE [gridset] ***    imax = 128
 *** MESSAGE [gridset] ***    jmax = 64
 *** MESSAGE [gridset] ***    kmax = 20
            :
NAMELIST ファイルを読み込む場合, 上記のように NAMELIST 変数群の読み込み に関する情報が出力されます.
上記の実験では, 初期値データは実行プログラムによって内部で作成されていました. 以下では, 初期値データをファイルに出力する方法を記します.
まず, 上記の作業と同様に practice ディレクトリへ移動し, make コマンド で実験用ディレクトリを作成してください. その後, 作成された実験用 ディレクトリへ移動してください.
初期値データファイル生成プログラムのサンプルとして init_data が 用意されています. また, NAMELIST ファイルのサンプルとして, init_data_T10L8.nml などを 用意しています. init_data_T10L8.nml を編集後, 以下のように実行してください. コマンドラインオプションとして "-h" や "--help" を指定することで, 解像度や出力されるファイル名の一覧が表示されます.
$ ./init_data -N=init_data_T10L8.nml
デフォルトでは, "init.nc" という名前のファイルが出力されます. このファイルを初期値データとして入力する方法に関しては, 初期値データ・リスタートデータファイルの入力 を参照してください.
ファイルから初期値データ, もしくはリスタートデータを読み込む際には, NAMELIST ファイルを編集してください. NAMELIST ファイルの 以下の部分を変更してください.
&restart_file_io_nml
  InputFile = 'init.nc',    ! 入力するリスタートデータのファイル名
                            ! filename of input restart data
            :
/
"InputFile" の部分に初期値データもしくはリスタートデータのファイル名を 指定します.
NAMELIST ファイルを変更後, 以下のようにその NAMELIST ファイルを -N もしくは --namelist オプションに指定して実験を始めてください.
$ ./dcpam_hs94 -N=dcpam_hs94_TXXLXX.nml
実験が開始されると, 以下のようなデータ入力のメッセージが表示されるはずです. 確認してください.
|*** MESSAGE [HistoryGetDouble3] *** Input init.nc@UB,time=10.0 |*** MESSAGE [HistoryGetDouble3] *** Input init.nc@UN,time=10.0 |*** MESSAGE [HistoryGetDouble3] *** Input init.nc@VB,time=10.0 |*** MESSAGE [HistoryGetDouble3] *** Input init.nc@VN,time=10.0 |*** MESSAGE [HistoryGetDouble3] *** Input init.nc@TempB,time=10.0 |*** MESSAGE [HistoryGetDouble3] *** Input init.nc@TempN,time=10.0 |*** MESSAGE [HistoryGetDouble3] *** Input init.nc@QVapB,time=10.0 |*** MESSAGE [HistoryGetDouble3] *** Input init.nc@QVapN,time=10.0 |*** MESSAGE [HistoryGetDouble2] *** Input init.nc@PsB,time=10.0 |*** MESSAGE [HistoryGetDouble2] *** Input init.nc@PsN,time=10.0
src ディレクトリ以下の編集を行った場合, 以下のようにすることで practice 以下の実験用ディレクトリの内容を簡単に更新することが 可能です. なお, src 以下の Fortran 90/95 プログラムの変更を 行う際には らくらく dcpam5 (製作中) を参照してください.
まず, practice 以下の実験用ディレクトリへ移動します.
$ cd practice/testXX
以下のコマンドを入力します. 更新するか問われるので, "Y" を 入力します.
$ make update Update directory "testXX" ? [y/N]: Y
src ディレクトリ内で更新されたファイルが practice/testXX に コピーされます. 古いファイルは ".bak.XX" というサフィックスが付加 されたファイル名に変更されます.
次に, 簡単な物理過程を導入した場合のテスト実験の方法を 説明します.
(なお, クロスコンパイル環境では以下の方法でプログラムを 実行することはできないので注意してください. その場合の実行方法 に関しては, その環境でのプログラム実行マニュアルなどを参照ください. )
practice ディレクトリに移動してください.
$ cd practice
そのディレクトリ内で, make コマンドを実行して実行ファイルを コピーしてください. ディレクトリ名を適宜入力してください. それ以降の質問はとりあえずそのまま Enter キーを入力してください.
$ make
****** Setup a directory for a experiment ******
  Enter directory name [testXX]: ape-test
  Directory in which executable files are prepared
    [/home/dcpam/work/dcpam5/src/main]: 
          :
そしてそのディレクトリに移動し, init_data と init_data_T21L16.nml を用いて初期値ファイル init_T21L16.nc を作成します.
$ cd ape-test
$ ./init_data -N=init_data_T21L16.nml
                       : 
 *** MESSAGE [restart_file_io] ***  ----- Initialization Messages -----
 *** MESSAGE [restart_file_io] ***  Input::
 *** MESSAGE [restart_file_io] ***    InputFile  =
 *** MESSAGE [restart_file_io] ***  Output::
 *** MESSAGE [restart_file_io] ***    OutputFile = init_T21L16.nc
 *** MESSAGE [restart_file_io] ***    IntTime    = 1. [day]
 *** MESSAGE [HistoryCreate3] ***  "init_T21L16.nc" is created (origin=0. [day])
 *** MESSAGE [initial_data] ***  NAMELIST group "initial_data_nml" is loaded from "init_data_T21L16.nml".
 *** MESSAGE [initial_data] ***  NAMELIST group "initial_data_nml" is loaded from "init_data_T21L16.nml".
 *** MESSAGE [initial_data] ***  ----- Initialization Messages -----
 *** MESSAGE [initial_data] ***    Pattern = Small Disturbance of Temperature
 *** MESSAGE [initial_data] ***    TempAvr = 280.
 *** MESSAGE [initial_data] ***    PsAvr   = 100000.
 *** MESSAGE [initial_data] ***    QVapAvr = 0.1E-09
 *** MESSAGE [HistoryClose] ***  "init_T21L16.nc" is closed
次に, sst_data と sst_data_T21.nml を用いて, 地表面データ sst_T21.nc を作成します.
$ ./sst_data -N=sst_data_T21.nml
                       :
 *** MESSAGE [restart_surftemp_io] ***  ----- Initialization Messages -----
 *** MESSAGE [restart_surftemp_io] ***  Input::
 *** MESSAGE [restart_surftemp_io] ***    InputFile  =
 *** MESSAGE [restart_surftemp_io] ***    InputName  = SurfTemp
 *** MESSAGE [restart_surftemp_io] ***  Output::
 *** MESSAGE [restart_surftemp_io] ***    OutputFile = sst_T21.nc
 *** MESSAGE [restart_surftemp_io] ***    IntTime    = 1. [day]
 *** MESSAGE [HistoryCreate3] ***  "sst_T21.nc" is created (origin=0. [day])
 *** MESSAGE [surface_data] ***  NAMELIST group "surface_data_nml" is loaded from "sst_data_T21.nml".
 *** MESSAGE [surface_data] ***  NAMELIST group "surface_data_nml" is loaded from "sst_data_T21.nml".
 *** MESSAGE [surface_data] ***  ----- Initialization Messages -----
 *** MESSAGE [surface_data] ***    Pattern = Hosaka et al. (1998)
 *** MESSAGE [surface_data] ***    SurfTemp     = 302.
 *** MESSAGE [surface_data] ***    Albedo       = 0.15
 *** MESSAGE [surface_data] ***    HumidCoeff   = 1.
 *** MESSAGE [surface_data] ***    RoughLength  = 0.1E-03
 *** MESSAGE [surface_data] ***    HeatCapacity = 0.
 *** MESSAGE [surface_data] ***    TempFlux     = 0.
 *** MESSAGE [surface_data] ***    SurfCond     = 0
 *** MESSAGE [HistoryClose] ***  "sst_T21.nc" is closed
最後に dcpam_ape, dcpam_ape_T21L16.nml を用いて実行します. 解像度 T21L16, 時間ステップ 20 分で 7 日分計算を行います. リスタートデータ, 地表面リスタートデータといくつかのヒストリデータ ファイルが出力されます.
$ ./dcpam_ape -N=dcpam_ape_T21L16.nml
初期値データ, 地表面データ, 実験設定を変更する場合には, 上記の実行に際して, init_data_T21L16.nml, sst_data_T21.nml, dcpam_ape_T21L16.nml を変更してください.
