表題 二次元トレーサー移流モデル(剛体回転) 履歴 1997/11/20 小高正嗣 1998/01/20 小高正嗣 2011/06/27 小高正嗣 ●ファイル構成 ./Makefile.nag コンパイル用メイクファイル (Linux用 nag f90 コンパイラ対応) ./Makefile.ffc コンパイル用 Makefile (Linux用 Fujitsu f90 コンパイラ対応) ./Makefile.gft コンパイル用 Makefile (Linux用 gfortran コンパイラ対応) ./main.f90 メインプログラム ./param_module.f90 パラメータモジュール ./cal_module.f90 各種計算実行モジュール ./dcl_module.f90 dcl5 描画モジュール ●変数の格子配置 Arakawa C グリッド配置. ●メインルーチンのフローチャート 0. 各種モジュールの読み込み USE param_module USE cal_module USE dcl_module 1. 変数の定義 TRC_1 上流差分 TRC_2 二次中心差分 TRC_3 MPDATA TRC_4 FCT 2. 初期値の設定( 円錐形分布 ) 円筒分布も計算できるように追加(1998/01/20) 3. 描画の前処理( dennou_set ) 4. 初期値の描画( get_ptval, dennou_draw ) 5. メインループ 二次/四次中心差分, FCT を用いた計算では, 時間方向に 2次のルンゲクッタ(修正オイラー法)を用いている. MPDATA では時間方向に前進差分で計算. 6. 描画の終了( dennou_cls ) ●モジュール・サブルーチン説明 ./param_module.f90 機能 基本パラメータの設定. 注意 メインプログラムを含めた全てのルーチンに呼ばれる. 各ルーチンにおいて陽に定義されてないパラメータは 全てこのモジュールにおいて定義されている. ./cal_module.f90 ・get_dtrc_C2_2D 機能 二次中央差分による増分計算ルーチン. 呼出方法 call get_dtrc_C2_2D( u, v, TRC, DTRC ) パラメータ u (R) 流速1(in) v (R) 流速2(in) TRC (R) 変数(in) DTRC (R) 変数増分(out) 注意 内部で get_mval_2D, bound2 を呼ぶ. ・get_dtrc_C4_2D 機能 四次中央差分による増分計算ルーチン. 呼出方法 call get_dtrc_C4_2D( u, v, TRC, DTRC ) パラメータ get_dtrc_C2_2D に同じ. 注意 get_dtrc_C2_2D に同じ. ・get_dtrc_u1_2D 機能 一次上流差分による増分計算ルーチン. 呼出方法 call get_dtrc_u1_2D( u, v, TRC, DTRC ) パラメータ get_dtrc_C2_2D に同じ 注意 内部で bound2 を呼ぶ. get_dtrc_u_mpdata_2D から呼ばれる. ・get_dtrc_u_mpdata_2D 機能 MPDATA スキームのための反復計算用ルーチン. 呼出方法 call get_dtrc_u_mpdata_2D( u, v, TRC, \ udif, vdif, DTRC ) パラメータ u (R) 流速1(in) v (R) 流速2(in) TRC (R) 変数(in) udif (R) 拡散流速1(out) vdif (R) 拡散流速1(out) DTRC (R) 変数増分(out) 注意 内部で get_dtrc_u1_2D, get_mval_2D, get_mval_utov, get_mval_vtou, bound2 を呼ぶ. ・get_dtrc_fct_2D 機能 FCT スキームのための増分計算用ルーチン. 上流差分と2次中心差分を用いている. 呼出方法 call get_dtrc_fct_2D( u, v, TRC, DTRC ) パラメータ u (R) 流速1(in) v (R) 流速2(in) TRC (R) 変数(in) DTRC (R) 変数増分(out) 注意 内部で get_dtrc_u1_2D, bound2 を呼ぶ. また専用の内部計算ルーチン get_aflux, limit_aflux, get_limitval, get_cfact を呼ぶ. ・get_mval_2D 機能 半整数格子上のスカラー変数値計算ルーチン. 呼出方法 call get_mval_2D( val, mval_x, mval_y ) パラメータ val (R) 変数(in) mval_x (R) 変数(半整数格子上: 第1座標方向)(out) mval_y (R) 変数(半整数格子上: 第2座標方向)(out) 注意 get_dtrc_C2_2D, get_dtrc_C2_2D, get_dtrc_u_mpdata_2D から呼ばれる下位ルーチン 2 点平均だと計算不安定を起こしやすいので, 6 点平均で求めてある. ・get_mval_utov 機能 u 格子上変数の v 格子上変数値計算ルーチン. 呼出方法 call get_mval_utov( val_u, val_v ) パラメータ val_u (R) u 格子上変数(in) val_v (R) v 格子上変数(out) 注意 get_dtrc_u_mpdata_2D から呼ばれる下位ルーチン 周囲の 4 点の平均値を求めている. 境界で val_u を対称と仮定している. ・get_mval_vtou 機能 v 格子上変数の u 格子上変数値計算ルーチン. 呼出方法 call get_mval_vtou( val_v, val_u ) パラメータ val_v (R) v 格子上変数(in) val_u (R) u 格子上変数(out) 注意 get_dtrc_u_mpdata_2D から呼ばれる下位ルーチン 周囲の 4 点の平均値を求めている. 境界で val_v を対称と仮定している. ・get_plotval( val, pval ) 機能 座標格子点上のスカラー変数値計算ルーチン. 周囲の 4 点の平均値を求める. 呼出方法 call get_plotval( val, pval ) パラメータ val (R) 変数(in) pval (R) 変数(座標格子上)(out) ・bound2 機能 境界条件計算ルーチン. 呼出方法 call bound2( val ) パラメータ val (R) 変数(inout) 注意 各増分計算ルーチンからも呼ばれる. 壁で対称な条件を与えている. ./dcl_module.f90 ・dennou_set 機能 dcl5 の初期設定 呼出方法 call dennou_set(pictn) パラメータ pictnm (I) 1 画面に描く絵の数(in) 2: 2枚 4: 4枚 その他:1枚 ・dennou_draw 機能 dcl5 による 3D 描画 呼出方法 call dennou_draw( xplot, yplot, vplot, \ theader, header ) パラメータ xplot (R) 第1方向座標配列(in) yplot (R) 第2方向座標配列(in) vplot (R) 描画変数配列(in) theader (C) 時刻ヘッダー(in) header (C) ヘッダー(in) 注意 dcl5 のサンプルプログラム map3d6.f ($DCLDIR/demo/rakuraku/map3d/map3d6.f)を ほぼそのまま使用した. 但し全ての点を描画すると線が込むので半分に 間引いてある. ・dennou_cls 機能 dcl5 の終了 呼出方法 call dennou_cls