この文書は, dcpam5 を用いて手軽に実験を 行うためのチュートリアルです.
dcpam5 では入出力するファイルとして Gtool4 NetCDF 規約 に基づいた NetCDF データを扱います.
数値実験の結果を解析・可視化するためには, NetCDF データを取り扱うことのできる解析・可視化ツールが必要です. ここでは, 電脳 Ruby プロジェクト から提供される GUI (グラフィカルユーザインターフェース) 解析・可視化ツール GAVE を用いた例を紹介します. この他にも, より解析・可視化についてより自在に設定を行うことが CUI (キャラクターユーザインターフェース) ツール GPhys (チュートリアル) などもあるため, 実際に解析・可視化を行う際には, 適宜選んで使用してください.
なお, 上記のツール以外にも NetCDF を扱える可視化ツール (例えば, GrADS や IDL など) でも可視化が可能であるはずです.
電脳Ruby謹製品 インストールガイド を参照してください.
dcpam5 インストールガイド を参考に, dcpam5 のビルドを行ってください. 「ビルドの手引き」の「ソースコードのコンパイル」まで行ってください.
ビルドが完了すると, "src/main" ディレクトリ以下に, dcpam_main, init_data, sst_data といった実行ファイルが作成されます. またこのディレクトリには, いくつかのサンプル NAMELIST ファイル (拡張子が .nml のファイル) が用意されています.
$ ls src/main dcpam_ape_T21L16.nml dcpam_ape_T42L16.nml dcpam_hs94_T21L20.nml dcpam_hs94_T42L20.nml dcpam_main dcpam_main.F90 init_data init_data.F90 init_data_T21L16.nml init_data_T42L16.nml sst_data sst_data.F90 sst_data_T21.nml sst_data_T42.nml :
動作チェックを行っている, もしくは行ったことのある いくつかのコンパイラに関する注意書きです.
他のコンパイラについても当てはまる場合があるかもしれませんので, 下記の動作チェックがうまく行かない場合にはご一読ください.
Held and Suarez (1994) (参考文献 参照) が提案した, 物理過程に依存しない大気大循環モデルの力学過程を評価するための ベンチマーク計算を実行する方法を説明します.
dcpam5 では力学過程および Held and Suarez (1994) にて提案された ニュートン冷却とレイリー摩擦のみを計算する実行ファイルとして dcpam_main.F90 を用意しています. dcpam5 のビルド にてこのプログラムのコンパイルは完了している はずなので, これを用いて実験を行います.
practice ディレクトリに移動してください.
$ cd practice
そのディレクトリ内で, make コマンドを実行してください. 自動的に実行ファイルや NAMELIST ファイルがコピーされます. make コマンド入力後, まずディレクトリ名を適宜入力してください. (下記の例では hs94-exp としています). それ以降の質問はとりあえずそのまま Enter キーを入力してください.
$ make ****** Setup a directory for a experiment ****** Enter directory name [testXX]: hs94-exp Directory in which executable files are prepared [../src/main]: Directory in which NAMELIST files are prepared [../src/main]: Save F90/95 source code files? [y/N]: : *** Setup of "hs94-exp" is complete ***
hs94-exp というディレクトリが作成され, その中に 実行ファイルや NAMELIST ファイル, ソースコードがコピーされます. hs94-exp ディレクトリ内に移動してください.
$ cd hs94-exp
実行ファイル "dcpam_main" と NAMELIST ファイル dcpam_hs94_T21L20.nml を用いて, 以下のように dcpam_main を実行してください. プログラム終了には数分〜数十分かかります.
(なお, クロスコンパイル環境では以下の方法でプログラムを 実行することはできないので注意してください. その場合の実行方法 に関しては, その環境でのプログラム実行マニュアルなどを参照ください. )
$ ./dcpam_main -N=dcpam_hs94_T21L20.nml | tee hs94.log *** 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
この場合, 7 日分の時間積分が行われます. 空間解像度は T21L20 (経度格子点数 64, 緯度点数 32, 鉛直層数 20) です. 計算結果は U.nc や Temp.nc として出力されます. また, リスタートファイルが restart.nc として出力されます.
本来, この積分時間と空間解像度はベンチマークとしては小さすぎ, 短すぎます. Held and Suarez (1994) では空間解像度は T42L20 (経度格子点 128, 緯度格子点 64, 鉛直層 20) 相当で, 1200 日の時間積分が行われています.
出力データの情報を参照する際には, NetCDF ライブラリに含まれる ncdump コマンドを使用します. これは dcpam5 をインストールするにあたり ビルドおよびインストール済みのはずです.
U.nc の情報を参照する場合には以下のようにコマンド入力して下さい. 表示される行数が多いため, 表示内容を パイプでページャ more に渡して います.
$ ncdump -h U.nc | more
表示内容を簡単に説明します.
データファイルに含まれる次元変数のリストです. 数値はその次元変数のデータ数です.
netcdf U { dimensions: lon = 64 ; lat = 32 ; sig = 20 ; sigm = 21 ; time = UNLIMITED ; // (11 currently)
データファイルに含まれる次元変数・従属変数に関するメタデータです. 'float' はそのデータが単精度実数であることを表します. 倍精度実数である場合は 'double', 整数である場合は 'int' となります. その後ろに 変数(依存する次元変数) が表示されます.
variables: float lon(lon) ; lon:long_name = "longitude" ; lon:units = "degree_east" ; lon:standard_name = "longitude" ; lon:gt_calc_weight = "lon_weight" ; : float time(time) ; time:long_name = "time" ; time:units = "day" ; : float U(time, sig, lat, lon) ; U:long_name = "eastward wind" ; U:units = "m s-1" ;
データファイル全体に付加される大域属性です. ファイルの規約 (Conventions) や表題, データソース, 作成日時などが 登録されています.
// global attributes: :Conventions = "http://www.gfd-dennou.org/library/gtool4/conventions/" ; :gt_version = "4.3" ; :title = "Held and Suarez (1994) benchmark test ..." ; :source = "dcpam5 (http://www.gfd-dennou.org/library/dcpam)" ; :institution = "GFD Dennou Club (http://www.gfd-dennou.org)" ; :history = "2008-11-29T22:01:10+09:00 unknown> gtool_history: HistoryCreate\n", "" ; }
データ本体を参照する場合は以下のようにコマンド入力してください.
$ ncdump Temp.nc | more
以下のようにデータが表示されます.
data: lon = 0, 5.625, 11.25, 16.875, 22.5, 28.125, 33.75, 39.375, 45, 50.625, 56.25, 61.875, 67.5, 73.125, 78.75, 84.375, 90, 95.625, 101.25, 106.875, 112.5, 118.125, 123.75, 129.375, 135, ... lat = -85.76059, -80.26878, -74.74454, -69.21297, -63.67863, -58.14296, -52.60653, -47.06964, -41.53246, -35.99508, -30.45755, -24.91993, -19.38223, -13.84448, -8.306703, ... : Temp = 249.9899, 249.9622, 249.9368, 249.9154, 249.8999, 249.8913, 249.8905, 249.8973, 249.9113, 249.9315, 249.9562, 249.9835, 250.0113, 250.0375, 250.0599, 250.0769, 250.0871, 250.0898, 250.0847, 250.0722, 250.0533, 250.0295, 250.0026, 249.9747, 249.948, 249.9245, 249.9062, 249.8943, 249.8899, 249.8932, 249.9041, 249.9217, 249.9899, 249.9658, 249.9432, 249.9233, 249.9073, 249.8962, 249.8905, 249.8907, 249.8967, 249.9081, 249.9244, 249.9445, 249.9672, 249.9913, 250.0153, 250.0378, 250.0575, 250.0732, 250.084, 250.0894, 250.0889, 250.0825, 250.0708, 250.0543, 250.034, 250.0112, 249.987, 249.9631, 249.9407, 249.9212, 249.9058, 249.8952,
得られたいくつかのデータを可視化してみます. 以下では, GAVE を用いた可視化の方法を例に挙げます. まず gave を起動してください.
$ gave
以下のようなウィンドウが表示されます.
[File] -> [Open] からデータファイルを選択します. ここでは TempEQHs94.nc を選択します. これは Held and Suarez (1994) で提案されるニュートン冷却に使用される 平衡温度です. ファイルがオープンされたら, 以下のように設定して, [draw] をクリックしてください.
以下のような図が表示されます. 地上の赤道で 300 K 強で, 高緯度に行くにつれ, また上空に行くにつれ温度が減少している分布となっていることが分かります.
次に, 東西風速の変化を見てみます. [File] -> [Open] から U.nc を読み込みます. 今度は以下のように設定し, [draw] をクリックしてください.
以下のような図が表示されます. これは最も地表面に近い層での 東西風速です. 初期には全領域で風速 0 m/s でしたが, 赤道および中緯度で徐々に西向きの風が生じていることが分かります. (U は東向きの風なので, 負の場合には西向きの風を表します).
最後に, 上空での東西風速を見てみます. [Tools] -> [Dimensions] から次元を設定するウィンドウを表示します. ここで, [sig] の値を 0.2 付近に設定し, 再度 [draw] をクリックしてください.
以下のような図が表示されます. これはおおよそ気圧 200 hPa での 東西風速です. 初期には全領域で風速 0 m/s でしたが, 緯度±40°を中心にで徐々に東向きの風が生じていることが分かります.
計算時の設定は標準出力へと表示されます. 実行: 乾燥大気での力学過程ベンチマーク計算 (Held and Suarez, 1994) では tee コマンドにより, 出力された情報を標準出力と "hs94.log" ファイルに 書きだしたため, この "hs94.log" をテキストヴューアで眺めてみましょう.
$ more hs94.log
以下では, 表示される内容の一部を解説します.
計算開始時刻, 終了時刻, 時間ステップ, 終了予測時刻表示間隔, CPU 時間計測のオンオフです. timeset モジュール で管理されています.
|*** MESSAGE [timeset] *** ----- Initialization Messages ----- |*** MESSAGE [timeset] *** StartTime = 0. [day] |*** MESSAGE [timeset] *** EndTime = 10. [day] |*** MESSAGE [timeset] *** DelTime = 30. [min] |*** MESSAGE [timeset] *** = 1800. [sec] |*** MESSAGE [timeset] *** PredictInt = 6. [hrs] |*** MESSAGE [timeset] *** CpuTimeMoniter = T |*** MESSAGE [timeset] *** -- version = ...
実験の表題, データソース, データを作成した人/組織です. これらは出力データの大域属性へと与えられます. fileset モジュール で管理されています.
|*** 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 ...
最大全波数, 経度格子点数, 緯度格子点数, 鉛直層数です. gridset モジュール で管理されています.
|*** MESSAGE [gridset] *** ----- Initialization Messages ----- |*** MESSAGE [gridset] *** nmax = 21 |*** MESSAGE [gridset] *** imax = 64 |*** MESSAGE [gridset] *** jmax = 32 |*** MESSAGE [gridset] *** kmax = 20 |*** MESSAGE [gridset] *** -- version ...
物理定数です. constants モジュール で管理されています. 各値の詳細はこのモジュールのマニュアルを参照してください.
|*** MESSAGE [constants] *** ----- Initialization Messages ----- |*** MESSAGE [constants] *** PI = 3.141592653589793 |*** MESSAGE [constants] *** GasRUniv = 8.314 |*** MESSAGE [constants] *** StB = 0.567E-07 |*** MESSAGE [constants] *** FKarm = 0.4 |*** MESSAGE [constants] *** RPlanet = 6371000. |*** MESSAGE [constants] *** Omega = 0.7292106590880652E-04 |*** MESSAGE [constants] *** Grav = 9.800000000000001 |*** MESSAGE [constants] *** CpDry = 1004.6 |*** MESSAGE [constants] *** MolWtDry = 0.28964E-01 |*** MESSAGE [constants] *** GasRDry = 287.0459881231874 |*** MESSAGE [constants] *** CpWet = 1810. |*** MESSAGE [constants] *** MolWtWet = 0.1801528E-01 |*** MESSAGE [constants] *** GasRWet = 461.4971291037386 |*** MESSAGE [constants] *** LatentHeat = 2500000. |*** MESSAGE [constants] *** EpsV = 0.6219886755972932 |*** MESSAGE [constants] *** -- version ...
リスタートデータの入出力に関する情報です. restart_file_io モジュール で管理されています. 各値の詳細はこのモジュールのマニュアルを参照してください.
|*** 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 = restart.nc |*** MESSAGE [restart_file_io] *** IntTime = 1. [day] |*** MESSAGE [restart_file_io] *** -- version ...
ヒストリデータの出力に関する情報です. ヒストリデータの出力には gtool5 Fortran 90/95 ライブラリ の gtool_historyauto モジュールを用いており, 下記は gtool_historyauto モジュールによって出力されるメッセージです. 各値の意味などは, 出力設定の変更 を参照してください.
|*** MESSAGE [HistAuto] *** ----- "gtool_historyauto_nml" is not loaded" ----- |*** MESSAGE [HistAuto] *** Global Settings: |*** MESSAGE [HistAuto] *** AllOutput = T |*** MESSAGE [HistAuto] *** FilePrefix = |*** MESSAGE [HistAuto] *** Interval = 1. [day] |*** MESSAGE [HistAuto] *** Precision = float |*** MESSAGE [HistAuto] *** TimeAverage = F |*** MESSAGE [HistAuto] *** Origin = 0. [sec] |*** MESSAGE [HistAuto] *** Terminus = 10. [day] |*** MESSAGE [HistAuto] *** SliceStart = (/ 1, 1, 1, 1, 1 /) |*** MESSAGE [HistAuto] *** SliceEnd = (/ -1, -1, -1, -1, -1 /) |*** MESSAGE [HistAuto] *** SliceStride = (/ 1, 1, 1, 1, 1 /) |*** MESSAGE [HistAuto] *** SpaceAverage = (/ F, F, F, F, F /) |*** MESSAGE [HistAuto] *** NewFileInterval = -1 [day] |*** MESSAGE [HistAuto] ***
力学過程の設定に関する情報です. dynamics_hspl_vas83 モジュール で管理されています. 各値の詳細はこのモジュールのマニュアルを参照してください.
|*** MESSAGE [dynamics_hspl_vas83] *** ----- Initialization Messages ----- |*** MESSAGE [dynamics_hspl_vas83] *** TimeIntegScheme = Semi-implicit |*** MESSAGE [dynamics_hspl_vas83] *** EFoldTime = 0.1 [day] |*** MESSAGE [dynamics_hspl_vas83] *** VisOrder = 8 |*** MESSAGE [dynamics_hspl_vas83] *** VisCoef = 0.214573634546703E+43 |*** MESSAGE [dynamics_hspl_vas83] *** RefTemp = 300. |*** MESSAGE [dynamics_hspl_vas83] *** -- version ...
計算設定を変更するには NAMELIST ファイルを編集してください. サンプルとして dcpam_hs94_T21L20.nml を用意しています. このファイルを元に NAMELIST ファイルを作成してください. 以下は dcpam_hs94_T21L20.nml の一部です.
#= dcpam_hs94 プログラム用 NAMELIST ファイル (T21L20 用) #= NAMELIST file for "dcpam_hs94" # &dcpam_main_nml FlagAPE = .false., ! 物理過程 (APE) 計算オン/オフ. ! Physical processes (APE) calculation on/off. FlagHS94 = .true. ! Held and Suarez (1994) 強制オン/オフ. ! Held and Suarez (1994) forcing on/off. / &fileset_nml FileTitle = 'Held and Suarez (1994) benchmark test', ! 出力データファイルの表題. ! Title of output data files FileSource = 'dcpam5 (http://www.gfd-dennou.org/library/dcpam)', ! データファイル作成の手段. ! Source of data file FileInstitution = 'GFD Dennou Club (http://www.gfd-dennou.org)' ! データファイルを最終的に変更した組織/個人. ! Institution or person that changes data files for the last time / &gridset_nml nmax = 21, ! 最大全波数. ! Maximum truncated wavenumber imax = 64, ! 経度格子点数. ! Number of grid points in longitude jmax = 32, ! 緯度格子点数. ! Number of grid points in latitude kmax = 20 ! 鉛直層数. ! Number of vertical level / :
積分時間について変更してみましょう. エディタを用いて, dcpam_hs94_T21L20.nml の ×et_nml の EndTimeValue を以下のように変更してください.
×et_nml : EndTimeValue = 20.0, ! 計算終了時刻. ! End time of calculation EndTimeUnit = 'day', ! 計算開始時刻の単位. ! Unit of end time of calculation
この NAMELIST ファイルを読み込ませて dcpam_main を実行することにより, 20 日分の計算が行われます.
編集が終わったら, 以下のように オプション -N (または --namelist) に NAMELIST ファイルを指定しつつ, 実行コマンドを入力してください.
$ ./dcpam_main -N=dcpam_hs94_T21L20.nml | tee hs94-T21L20.log *** MESSAGE [timeset] *** NAMELIST group "timeset_nml" is loaded from "dcpam_hs94_T21L20.nml". *** MESSAGE [timeset] *** ----- Initialization Messages ----- *** MESSAGE [timeset] *** StartTime = 0. [day] *** MESSAGE [timeset] *** EndTime = 20. [day] *** MESSAGE [timeset] *** DelTime = 30. [min] *** MESSAGE [timeset] *** = 1800. [sec] *** MESSAGE [timeset] *** PredictInt = 6. [hrs] *** MESSAGE [timeset] *** CpuTimeMoniter = T *** MESSAGE [timeset] *** -- version = .... :
この他にも dcpam_hs94_T21L20.nml に記述されている "&xxxxxx_nml" という NAMELIST 変数群名は, それぞれモジュール xxxxxx で 管理される設定値です. dcpam5 で管理される NAMELIST 変数群名のリストおよび 各設定値の詳細については dcpam5 NAMELIST から参照可能です. 一通りの設定値がサンプルとして記述されている dcpam_hs94_T42L20.nml も用意しているので, こちらも参照ください.
>ool_historyauto_nml に関しては 出力設定の変更 を参照してください.
解析用のヒストリデータの出力に関する設定は以下の >ool_historyauto_nml を編集することで行います.
! ヒストリデータ出力の全体設定 ! Global settings about history data output ! >ool_historyauto_nml IntValue = 1.0, ! ヒストリデータの出力間隔の数値. ! 負の値を与えると, 出力を抑止します. ! ! Numerical value for interval of history data output ! Negative values suppresses output. IntUnit = 'day', ! ヒストリデータの出力間隔の単位. ! Unit for interval of history data output Precision = 'float', ! 単精度 ! ヒストリデータの精度. ! Precision of history data FilePrefix = '', ! ヒストリデータのファイル名の接頭詞. ! Prefixes of history data filenames / ! ! ヒストリデータ出力の個別設定 ! Individual settings about history data output ! >ool_historyauto_nml Name = 'U, V, Temp, Ps, QVap, Vor, Div, SigDot, DPiDt' / >ool_historyauto_nml Name = 'Mass, KinEngy, IntEngy, PotEngy, LatEngy, TotEngy, Enstro', SpaceAverage = .true., .true., .true., .true., .true. /
それぞれの設定項目について以下に記します. より詳しい説明については, gtool5 チュートリアル: 多数のファイル出力を行うモデルでのデータ出力 -- 設定可能な項目 を参照ください.
Name を指定しない, もしくは空文字を与えた場合, それは全ての変数に対するデフォルト設定となります. その場合にのみ有効な項目として以下のものがあります.
以下では, 出力する変数を U (東西風速), V (南北風速), Temp (温度), Ps (地表面気圧), SigDot (鉛直風) のみとし, 出力の間隔を 3 時間にしてみましょう. また, ファイルを "data01" というディレクトリ以下に作成してみましょう.
再びエディタを用いて, dcpam_hs94_T21L20.nml の >ool_historyauto_nml を以下のように変更してください.
! ヒストリデータ出力の全体設定 ! Global settings about history data output ! >ool_historyauto_nml IntValue = 3.0, IntUnit = 'hrs', Precision = 'float', FilePrefix = 'data01/', / ! ! ヒストリデータ出力の個別設定 ! Individual settings about history data output ! >ool_historyauto_nml Name = 'U, V, Temp, Ps, SigDot' /
実行の前に, データの出力先であるディレクトリを作成します.
$ mkdir data01
プログラムを実行してください.
$ ./dcpam_main -N=dcpam_hs94_T21L20.nml | tee hs94-T21L20.log
以下のようなメッセージが表示されるとともに, "data01" ディレクトリ以下に 5 つのデータが出力されます.
|*** MESSAGE [HistAuto] *** ----- "gtool_historyauto_nml" is loaded from "dcpam_hs94_T21L20.nml" ----- |*** MESSAGE [HistAuto] *** Global Settings: |*** MESSAGE [HistAuto] *** AllOutput = F |*** MESSAGE [HistAuto] *** FilePrefix = data01/ |*** MESSAGE [HistAuto] *** Interval = 3. [hrs] |*** MESSAGE [HistAuto] *** Precision = float |*** MESSAGE [HistAuto] *** TimeAverage = F |*** MESSAGE [HistAuto] *** : |*** MESSAGE [HistAuto] *** Individual Settings: |*** MESSAGE [HistAuto] *** Name = U, V, Temp, Ps, SigDot |*** MESSAGE [HistAuto] *** File = data03/<Name>.nc |*** MESSAGE [HistAuto] *** Interval = 3. [hrs] |*** MESSAGE [HistAuto] *** Precision = float
"data01" ディレクトリ以下の出力ファイルを眺めてみましょう. 次元変数 "time" に関する情報を参照すると, 設定の変更 に合わせて出力間隔が変更されたことがわかります.
$ ncdump data01/U.nc |more netcdf U { dimensions: lon = 64 ; lat = 32 ; sig = 20 ; sigm = 21 ; time = UNLIMITED ; // (161 currently) : float time(time) ; time:long_name = "time" ; time:units = "hrs" ; ^^^ ← 単位が hrs に // global attributes: : data: : time = 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, ...;
この他にも, 変数ごとに個別に出力設定を変更するといったことも可能です. 詳しくは gtool5 チュートリアル: 多数のファイル出力を行うモデルでのデータ出力 を参照ください.
上記の実験では, 初期値データは実行プログラムによって内部で作成されていました. 以下では, 初期値データをファイルに出力する方法を記します.
初期値データファイル生成プログラムのサンプルとして init_data.F90 が用意されており, これは dcpam5 のビルド にてコンパイルされ実行ファイル "init_data" として 作業ディレクトリに用意されているはずです.
また, NAMELIST ファイルのサンプルとして, init_data_T21L20.nml などを用意しています. この NAMELIST ファイルを編集したした後, 以下のように実行してください.
$ ./init_data -N=init_data_T21L20.nml
この例の場合には, "init_T21L20.nc" という名前のファイルが出力されます. このファイルを初期値データとして入力する方法に関しては, 初期値データ・リスタートデータファイルの入力 を参照してください.
ファイルから初期値データ, もしくはリスタートデータを読み込む際には, 実行時に読み込まれる NAMELIST ファイルの以下の項目を変更してください.
&restart_file_io_nml InputFile = 'init_T21L20.nc', ! 入力する初期値/リスタートデータのファイル名 ! filename of input initial/restart data : /
"InputFile" の部分に初期値データもしくはリスタートデータのファイル名を 指定します.
NAMELIST ファイルを変更後, 以下のようにその NAMELIST ファイルを -N もしくは --namelist オプションに指定して実験を始めてください.
$ ./dcpam_main -N=dcpam_hs94_T21L20.nml | tee hs94.log
実験が開始されると, 以下のようなデータ入力のメッセージが表示されます.
|*** MESSAGE [restart_file_io] *** ----- Initialization Messages ----- |*** MESSAGE [restart_file_io] *** Input:: |*** MESSAGE [restart_file_io] *** InputFile = init_T21L20.nc |*** MESSAGE [restart_file_io] *** Output:: |*** MESSAGE [restart_file_io] *** OutputFile = restart.nc |*** MESSAGE [restart_file_io] *** IntTime = 100. [day] |*** MESSAGE [restart_file_io] *** -- version = ...
r |ikawa Exp $
|*** MESSAGE [HistoryGetDouble3] *** Input init_T21L20.nc@U,time=0. |*** MESSAGE [HistoryGetDouble3] *** Input init_T21L20.nc@V,time=0. |*** MESSAGE [HistoryGetDouble3] *** Input init_T21L20.nc@Temp,time=0. |*** MESSAGE [HistoryGetDouble3] *** Input init_T21L20.nc@QVap,time=0. |*** MESSAGE [HistoryGetDouble2] *** Input init_T21L20.nc@Ps,time=0. |*** MESSAGE [restart_file_io] *** Initial data (not restart data) is input from a data file "init_T21L20.nc". *
B | (t-dt) and *N (t) are same.
次に, 惑星表面が全て水であるような条件 (水惑星) で実験を行う方法を説明します.
この計算では, 上記で計算した力学過程に, 以下の物理過程を加えています.
practice ディレクトリに移動してください.
$ cd practice
そのディレクトリ内で, make コマンドを実行してください. 自動的に実行ファイルや NAMELIST ファイルがコピーされます. make コマンド入力後, まずディレクトリ名を適宜入力してください. (下記の例では ape-exp としています). それ以降の質問はとりあえずそのまま Enter キーを入力してください.
$ make ****** Setup a directory for a experiment ****** Enter directory name [testXX]: ape-exp Directory in which executable files are prepared [../src/main]: :
そしてそのディレクトリに移動します.
$ cd ape-exp
init_data と init_data_T21L16.nml を用いて初期値ファイル init_T21L16.nc を作成します.
$ ./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_main, dcpam_ape_T21L16.nml を用いて実験を実施します. 解像度 T21L16, 時間ステップ 20 分で 10 日分計算を行います. リスタートデータ, 地表面リスタートデータといくつかのヒストリデータ ファイルが出力されます.
$ ./dcpam_main -N=dcpam_ape_T21L16.nml | tee ape.log
初期値データ, 地表面データ, 実験設定を変更する場合には, 上記の実行に際して, init_data_T21L16.nml, sst_data_T21.nml, dcpam_ape_T21L16.nml を変更してください.
上記の初期値データを元に, 1000 日分の計算を行った際のリスタートデータを 以下に用意してあります. このデータを用いてリスタートを行ってみましょう.
上記のページから "ape-T21L16-restart.nc" をダウンロードしてください. そして, "dcpam_ape_T21L16.nml" の ×et_nml と &restart_file_io を以下のように変更してください.
×et_nml StartTimeValue = 1000.0, ! 計算開始時刻. ! Start time of calculation StartTimeUnit = 'day', ! 計算開始時刻の単位. ! Unit of start time of calculation EndTimeValue = 1010.0, ! 計算終了時刻. ! End time of calculation EndTimeUnit = 'day', ! 計算開始時刻の単位. ! Unit of end time of calculation : &restart_file_io_nml InputFile = 'ape-T21L16-restart.nc', ! 入力するリスタートデータのファイル名 ! filename of input restart data :
以下のコマンドで実行を行ってください.
$ ./dcpam_main -N=dcpam_ape_T21L16.nml | tee ape.log
この結果得られる Vor.nc の変数 Vor を GAVE で開くと 以下のような渦度の分布が表示されます.
※ 作成中 ※
※ 作成中 ※
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" というサフィックスが付加 されたファイル名に変更されます.