ハイブリッドスペクトルモデル NM01(洗濯機モデル)
本プログラムは, 浅水系における渦ロスビー波の時間発展をシミュレートする数値モデルである.
本モデルの定式化などの詳細はマニュアル PDFを参照. 軸対称流に組み込まれた非軸対称成分の時間発展を計算する.
ファイル構成は以下のようになっている.
make_init.f90 -> 動径方向の軸対称流分布を作成する. 実行時に作成する分布ファイルの名前を入力するよう問われるので, 適当な名称を入力. solver.f90 -> ソルバプログラム. make_init で作成した軸対称流ファイルをもとに, namelist.nml の init_n で設定された 波数の非軸対称成分を初期擾乱として, その時間発展を計算する.
プログラムの実行
依存プログラム
- 必須
STPK, NetCDF, gtool5
- 描画用のオプション
DCLAF90, DCL
NetCDF 形式で出力されるので, それを描画するツールがあれば, 何でも OK.
Mkinclude の編集
- 親ディレクトリに存在する Mkinclude を自身の環境に合わせて適宜編集して下さい.
プログラムのコンパイル
$ make
でプリプロセッサ, メインソルバがコンパイルされ,
make_init, VRWS
が生成される.
また, オプションとして, 描画用プログラム (DCL, DCLAF90 必須) をコンパイルする場合は,
$ make draw
で draw プログラムが作成される.
プログラムの実行
プリプロセッサの実行
make_init
は初期データ作成のために必要なだけであり, 別途独自にデータを用意する場合はこれを実行する必要はない.
ここでは, 何もない状態から始めることを想定している.
namelist の編集
同梱ファイルに namelist.nml というファイルが入っている. これは, ソルバプログラムで用いられるネームリストファイルである.
nr = 98 ! radial grid number hnt = 90 ! tangential truncation wavenumber ! tangential grid number is equal to "2 * hnt + 1" nt = 20000 ! calculating time step rmin = 0.0 ! radial center [default] dr = 5000.0 ! radial grid interval [m] dt = 0.5 ! time interval [s] dmpstp = 500 ! dumping time step ! dumping time interval is equal to "dmpstp * dt" finame = "initial.nc" ! data for axisymmetric profiles foname = "result.nc" ! result data ni = 10000 ! radial grid number in "finame" nl_flag = .false. ! flag of non-linear term ! "false" is not calculating a non linear terms r_dmp = 800000.0 ! effective radius for Rayleigh damping ! the damping is forced outside this radius time_flag = '2' ! time scheme : ! [1] = 4th order's Runge-Kutta ! [2] = Leap Frog ! [3] = 1th Explicit Euler force_flag = 'ooxoxoxxxx' ! forcing flag ! 'o' = calculating, 'x' = neglecting ! force_flag(1:1) = linear advection term ! force_flag(2:2) = corioli term ! force_flag(3:3) = diffusion term ! force_flag(4:4) = Reiley dumping term ! force_flag(5:5) = non-linear advection term ! force_flag(6:6) = centifugal force term ! force_flag(7:7) = divergence term [only "depth"] ! force_flag(8:8) = gravity wave term ! force_flag(9:9) = temporary value [not using] ! force_flag(10:10) = temporary value [not using] diff_r = 1.0 ! radial diffusion coefficient [m^2/s] diff_t = 1.0 ! tangential diffusion coefficient [m^2/s] init_n = 1 ! initial non-axisymmtric wave number
実際の実行
以下の順番で実行する.
$ ./make_init $ export OMP_NUM_THREADS=[number] # ここは openMP 並列機能を用いる場合のみ. $ ./VRWS < namelist.nml
以上で結果が foname に指定されたファイルに作成されている.
データの詳細は NetCDF のヘッダー情報参照.
描画オプション
オプションとして同梱されている描画プログラム draw の実行についても記述しておく.
namelist の編集
draw_polar.nml という名称のファイルは draw_polar 用のネームリストファイルである.
fig_type = 1 ! 図の出力装置 '1' = X, '2' = PS, '3' = Tek, '4' = png nx = 98 ! 動径方向の格子点数 ny = 181 ! 接線方向の格子点数 nt = 200 ! ダンプされている時間ステップ数 dt = 250.0 ! ダンプされている時間間隔 [s] xmin = 0.0 ! 描画領域の内径 [m] xmax = 500000.0 ! 描画領域の外径 [m] ymin = 0.0 ! 接線方向の描画領域 [degree] ymax = 360.0 ! 接線方向の描画領域 [degree] fname = 'result.nc' ! 出力ファイル txtname = '' ! テキストファイル [使用しない] cont_val = 'up' ! 等値線で描く変数 shade_val = 'vp' ! カラーで描く変数 vx_val = '' ! x 方向成分の矢印変数 vy_val = '' ! y 方向成分の矢印変数 cmin = -1.0 ! 等値線の最小値 cmax = 1.0 ! 等値線の最大値 smin = -1.0 ! カラーの最小値 smax = 1.0 ! カラーの最大値 x_axis = 'r' ! x 方向の軸の名前 y_axis = 'theta' ! y 方向の軸の名前 sfact = 1.0 ! カラーのスケールファクター cfact = 1.0 ! 等値線のスケールファクター vxfact = 1.0 ! x 方向の矢印のスケールファクター vyfact = 1.0 ! y 方向の矢印のスケールファクター
これらを設定し,
$ ./draw_polar < draw_polar.nml
を実行すると, 例えば, 以下のようなグラフが描画される.
- 実行例
- コンターが動径風, シェードが接線風の非軸対称成分.
- 上記のネームリストの設定で行った計算.