冷気外出流シミュレーションモデル (WK04)
本プログラムは, 水平鉛直 2 次元流における冷気外出流をシミュレーションする数値モデルである(参考文献 : Weisman and Klemp 2004).
本モデルの定式化などの詳細はマニュアル PDFを参照. 流線関数ー渦度法を用いて渦度・浮力の時間発展と流線関数を計算する.
ファイル構成は以下のようになっている.
solver.f90 -> ソルバプログラム. namelist.nml の finame で設定された初期データを元に, 渦度の時間発展を計算する.
プログラムの実行
依存プログラム
- 必須
STPK, NetCDF, gtool5
- 描画用のオプション
DCLAF90, DCL
NetCDF 形式で出力されるので, それを描画するツールがあれば, 何でも OK.
Mkinclude の編集
- 親ディレクトリに存在する Mkinclude を自身の環境に合わせて適宜編集して下さい.
プログラムのコンパイル
$ make
でメインソルバがコンパイルされ,
WK04
が生成される.
また, オプションとして, 描画用プログラム (DCL, DCLAF90 必須) をコンパイルする場合は,
$ make draw
で draw_anim プログラムが作成される.
プログラムの実行
namelist の編集
同梱ファイルに namelist.nml というファイルが入っている. これは, ソルバプログラムで用いられるネームリストファイルである.
nx = 960 ! X-coordinate grid number ny = 80 ! Y-coordinate grid number nt = 10000 ! calculating time step xmin = -12.0 ! X-coordinate original point ymin = 0.0 ! Y-coordinate original point dx = 0.025 ! X-coordinate grid interval [m] dy = 0.025 ! Y-coordinate grid interval [m] dt = 0.001 ! time interval [s] dmpstp = 100 ! dumping time step ! dumping time interval is equal to "dmpstp * dt" finame = "" ! initial data file name. ! if there is no, automatically, ! being made by the program. foname = "result.nc" ! result data inner_file = 'colum.txt' ! inner boundary file time_flag = '1' ! time scheme : ! [1] = 4th order's Runge-Kutta ! [2] = Leap Frog ! [3] = 1th Explicit Euler undef = -999.0 ! undefined value init_type = 'psi' ! the tpe of initial value. ! 'psi' = strem line, 'omg' = vorticity. ubar = 0.5 ! mean flow [m/s] eps = 1.0e-3 ! convergent condition for poisson solver nu = 0.002 ! diffusion coefficient
実際の実行
以下の順番で実行する.
$ export OMP_NUM_THREADS=[number] # ここは openMP 並列機能を用いる場合のみ. $ ./WK04 < namelist.nml
以上で結果が foname に指定されたファイルに作成されている.
データの詳細は NetCDF のヘッダー情報参照.
描画オプション
オプションとして同梱されている描画プログラム draw_anim の実行についても記述しておく.
namelist の編集
draw.nml という名称のファイルは draw_anim 用のネームリストファイルである.
fig_type = 1 ! 固定値 nx = 400 ! x 方向の格子点数 ny = 100 ! x 方向の格子点数 nt = 101 ! ダンプされている時間ステップ数 dt = 1.0 ! ダンプされている時間間隔 [s] xmin = 0.0 ! 描画する x 方向の左端 xmax = 40.0 ! 描画する x 方向の右端 ymin = 0.0 ! 描画する y 方向の下端 ymax = 10.0 ! 描画する y 方向の上端 fname = 'result.nc' ! 出力ファイル名 txtname = '' ! テキストファイル [使用しない] cont_val = 'psi' ! 等値線で描く変数 shade_val = 'omega' ! カラーで描く変数 vx_val = '' ! x 方向の矢印ベクトル成分 vy_val = '' ! y 方向の矢印ベクトル成分 cmin = -5.0 ! 等値線の下限値 cmax = 5.0 ! 等値線の上限値 smin = -1.0 ! カラーの下限値 smax = 1.0 ! カラーの上限値 x_axis = 'x' ! x 軸の名前 y_axis = 'y' ! y 軸の名前 sfact = 1.0 ! カラーのスケールファクター cfact = 1.0 ! 等値線のスケールファクター vxfact = 1.0 ! x 方向の矢印のスケールファクター vyfact = 1.0 ! x 方向の矢印のスケールファクター undef = -999.0 ! 未定義値 vx = 0.2, 0.8 ! x 方向の viewport 左右端 vy = 0.4, 0.6 ! y 方向の viewport 上下端 clev = 10, 80 ! 等値線の本数とカラーのレベル数 cmap = 4 ! dcl のカラーマップナンバー
これらを設定し,
$ ./draw_anim < draw.nml
を実行すると, 例えば, 以下のようなグラフが描画される.
- 実行例
- コンターが水平渦度, シェードが浮力.
- 上記のネームリストの設定で行った計算.