Held and Suarez (1994) 力学コア実験

Held and Suarez (1994) が提案した, 大気大循環モデルの力学過程を評価するための 実験を実行する方法を説明します.

この計算には以下の物理過程を用いています.

  • 軸対称温度分布に近づけるニュートン冷却
  • 下層のレイリー摩擦
  • 水蒸気に関する物理過程無し.
  • 乾燥対流調節

概要

本実験は海表面温度データ等の実験用データを用いないため, 以下の 3 つのステップで行います.

  • 実験用メインプログラム等のコンパイル
  • 実験用ディレクトリの用意
  • 初期値データの作成
  • 実験の実行

実験用メインプログラムのコンパイル

HS94 実験用ディレクトリに移動して, メインプログラムなどをコンパイルし, 実行ファイルを作成します.

$ cd execsrc/hs94                        
$ make all

実験用ディレクトリの用意

実行ファイルを走らせるとたくさんの NetCDF ファイルができるので, 実験用のディレクトリを作って, そこに入出力ファイルを置くようにすることをおすすめします. 例えば実験用ディレクトリとして ./exp を用意するには

$ mkdir exp ; cd exp
$ cp ../exp_setup_files/init_data_hs94_T21L20.conf .
$ cp ../exp_setup_files/dcpam_hs94_T21L20_short.conf .

と, 初期値生成用と実験用の設定ファイルをコピーしてきます.

初期値データファイルの作成

dcpam_init_data_hs94 と init_data_hs94_T21L20.conf を用いて初期値ファイル init_T21L20.nc を作成します.

$ ../dcpam_init_data_hs94 -N=init_data_hs94_T21L20.conf
                      : 
*** MESSAGE [restart_file_io] ***  ----- Initialization Messages -----
*** MESSAGE [restart_file_io] ***  Input::
*** MESSAGE [restart_file_io] ***    InputFile  = <Non>
*** MESSAGE [restart_file_io] ***    ** Initial data is generated in "initial_data" module
*** MESSAGE [restart_file_io] ***  Output::
*** MESSAGE [restart_file_io] ***    OutputFile = init_T21L20.nc
*** MESSAGE [restart_file_io] ***    IntTime    = 365. [day]
*** MESSAGE [restart_file_io] ***  -- version = $Name:  $$Id: restart_file_io.f90,v 1.26 2025/09/17 22:00:00 takepiro Exp $
*** MESSAGE [HistoryCreate1] ***  "init_T21L20.nc" is created (origin=0. [sec])
*** MESSAGE [HistoryClose] ***  "init_T21L20.nc" is closed

実験の実行

NAMELIST ファイル dcpam_hs94_T21L20.conf を用いて, 以下のように dcpam_main_hs94 を実行します.

$ ../dcpam_main_hs94 -N=dcpam_hs94_T21L20_short.conf

*** MESSAGE [dcpam_main] ***  Run: Held and Suarez (1994) benchmark test
                  :
*** MESSAGE [timeset] ***  ----- Initialization Messages -----
*** MESSAGE [timeset] ***    StartTime  = 0. [day]
*** MESSAGE [timeset] ***    EndTime    = 10. [day]
*** MESSAGE [timeset] ***    DelTime    = 30. [min]
*** MESSAGE [timeset] ***               = 1800. [sec]
                  :
                  :
*** MESSAGE [fileset] ***  ----- Initialization Messages -----
*** MESSAGE [fileset] ***    FileTitle       = Held and Suarez (1994) benchmark test
*** MESSAGE [fileset] ***    FileSource      = dcpam5 (http://www.gfd-dennou.org/library/dcpam)
*** MESSAGE [fileset] ***    FileInstitution = GFD Dennou Club (http://www.gfd-dennou.org)
*** MESSAGE [fileset] ***  -- version = ....
*** MESSAGE [gridset] ***  ----- Initialization Messages -----
*** MESSAGE [gridset] ***    nmax = 21
*** MESSAGE [gridset] ***    imax = 64
*** MESSAGE [gridset] ***    jmax = 32
*** MESSAGE [gridset] ***    kmax = 20
*** MESSAGE [gridset] ***  -- version = ....
                  : 

########## PREDICTION OF CALCULATION ###########
Start Date             2009-03-06T08:26:41+09:00
Current Date           2009-03-06T08:26:45+09:00
Progress     20.00%  [*****                    ]
Remaining CPU TIME      0.160000E+02
Completion Date        2009-03-06T08:27:01+09:00

                  :

############## CPU TIME SUMMARY ################
held_suarez_1994       0.165611E+01
dynamics_hspl_vas83    0.191452E+02
timefilter_asselin19   0.264027E+00
others                 0.896038E+00
------------------------------------------------
       TOTAL TIME =    0.219614E+02

この場合, 10 日分の時間積分が行われます. 空間解像度は T21L20 (経度格子点数 64, 緯度点数 32, 鉛直層数 20) です. 計算結果は U.nc や Temp.nc として出力されます. また, リスタートファイルが rst.nc として出力されます.

結果の描画

10 日後における東西風と温度の東西平均分布は以下の図のようになります. これらの図は GPhys パッケージに同梱されている gpview というコマンドを 使って以下のようにして描いた図です.

$ gpview U.nc@U,time=10 --mean lon --int 1 --noannotate
$ gpview Temp.nc@Temp,time=10 --mean lon --int 5 --noannotate

解析・可視化のもう少し詳しい方法についてはこちらを参照してください.

データの保存

実験ディレクトリに作成された計算結果を保存しておきたい場合には データ用ディレクトリ(例えば data01)を作成し, ファイルを移動させて整理しておきましょう.

$ mkdir data01
$ mv *.conf *.nc *.log data01/

なお, 計算結果を計算実行時にサブディレクトリへ出力することも可能です. 実験設定の変更の出力設定の変更を参照し, NAMELIST "&gtool_historyauto_nml" の変数 "FilePrefix" による設定を試してみて下さい.

MPI 並列計算〜より本格的な実験のために

より長い時間積分を MPI 4 並列計算で行ってみましょう. これまでに計算したデータを別ディレクトリに避けておいてから 長時間積分用(1000 日)の設定ファイルをコピーしてきます.

$ cp ../exp_setup_files/dcpam_hs94_T21L20.conf .

並列用の初期値を作成します. 名前の最後が _mpi となっているものが MPI 並列計算用の実行ファイルです.

$ mpirun -n 4 ../dcpam_init_data_hs94_mpi -N=init_data_hs94_T21L20.conf

mpirun が並列計算実行コマンド, -n 4 が 4 並列計算であることを指定するオプションです. これらのコマンドとオプションは用いているコンパイラとシステムによって変えてください. 1 CPU 計算の場合と違って init_T21L20_rank000000.nc から init_T21L20_rank000003.nc まで 4 つに分割された初期値データファイルが作成されます.

長時間積分を実行します. 時間がかかるので出力を dcpam_hs94_T21L20.log にリダイレクトします.

$ mpirun -n 4 ../dcpam_main_hs94_mpi -N=dcpam_hs94_T21L20.conf >& dcpam_hs94_T21L20.log &
$ tail -f dcpam_hs94_T21L20.log

計算の進行状況を見るには tail コマンドを用いるのが便利です. tail コマンドから抜けるには Ctrl-C を入力します.

各変数の出力も *_rank000000.nc から *_rank000003.nc まで 4 つに分割されて出力されます. 1000 日後の結果を gpview で描画したものが以下の図です. ファイル指定を *_rank00000\*.nc とすることで分割されたファイルを読み込み結合することができます.

$ gpview U_rank00000\*.nc@U,time=1000 --mean lon --int 2 --noannotate
$ gpview Temp_rank00000\*.nc@Temp,time=1000 --mean lon --int 5 --noannotate

Held and Suarez (1994) では空間解像度は T63L20 (経度格子点 192, 緯度格子点 96, 鉛直層 20) 相当で, 1200 日の時間積分が行われています.

参考文献