MRI.COM

目次

prep/nest/topo

概要

MRI.COM ではネスティング計算を行うことができる。

境界値を与える低解像度モデル(親モデル)の中に 高解像度モデル(子モデル)領域を設定する。

格子は、速度点の間隔(トレーサー点が中心にある, T box)を奇数に分割する。

このディレクトリでは、作成済みの親モデルから、 ネスティッドグリッドの子モデルを作成する作業を行う。

最終出力

   vgrid.d, parapar.F90, parasub.F90, topo.d, hddiff.d, hdbuff.d

0. マシンにあわせて作業環境を整える: setup.sh

作業環境のセットアップを行うためにシェル・スクリプトを実行する。

 % sh setup.sh

作成されるもの

   gj-topo30_c.gr : 地形データへのリンク

1. 子モデルの格子情報(格子点数・間隔)を作成する

namelist.configure.in.par (親モデルのMXEライブラリ用namelistファイル)を用意する。

親モデルが矩形海盆の場合:

% cp ../../rectangle/namelist.configure.in ./namelist.configure.in.par
 namelist.configure.in.par の
    &topofile ftopo='topo.d' &end  を
    &topofile ftopo='topo_parent.d' &end  と書きかえて
% ln -s ../../rectangle/topo.d ./topo_parent.d

namelist.nestを編集し子モデルの領域(nest_para)やネスト率(mkngrids)などを決めて、コンパイルと実行を行う。

% cp sample/namelist.nest .
% edit namelist.nest
% make mkngrids
% ./mkngrids

子モデルの格子情報(格子点数・間隔)が作成される。

   general.txt   : configure.in や paranest.F90 への情報
   confignest.in : general.txt の内容を、parapar.F90.in -> parapar.F90,
                   parasub.F90.in -> parasub.F90 の入力情報となるように
                   したもの(作業 2. を参照)。
   vgrid.d  : 格子情報
   nest.d  : 3以降の作業に必要な一時出力

西と南の端では、ネストする、しないにかかわらず、2格子分の「のりしろ」が設定される。

東と北の境界では、ネストする場合には2つ、しない場合には1つの「のりしろ」が、コア領域の外側に設定されるようになっている。

mkngrids.F90は、グリッド分割の比率はx方向、y方向それぞれに一定としている。

変更したい場合には、irt, jrtを決める部分を編集する。

MXEのマージで衝突しないように、編集後のプログラムは別名にする。

2. ネスティングの境界値入出力の設定ファイルを作成する

1. の作業により作成される、confignest.in ファイルの内容を確認の上

 % sh mkparam.sh

とすると、parapar.F90.in から parapar.F90 が、parasub.F90.in から parasub.F90 が作成される。

作成されたファイルはMRI.COM実験で使うので MXE/exp/config_files/に移動する。

   parapar.F90 : 親モデルで境界値出力ランをするときのパラメータファイル
   parasub.F90 : 子モデルランをするときのパラメータファイル

3. 地形を機械的に作成する

namlist.configure.in (子モデルのMXEライブラリ用namelistファイル)を作成し、 namelist.nest を編集した後

namelist.nest
  &mkntopo l_use_parent_topo=.true. : 親モデルの地形をそのまま子モデルの地形とする
  &mkntopo l_smth_parent_topo=.true. : 親モデルの地形を平滑化して子モデルの地形とする
                    default         : gj-topo30_c.gr を使って子モデルの地形を作る

mkntopo をコンパイルし実行する。

% make mkntopo
% ./mkntopo

子モデルの地形(水深[cm]、海底が何層目か)が作成される。

      firsttpdt.dat: 4.で手作業により修正するためのsequential地形データ。
      topo_sub_1st.gd: direct accessの地形データ。

地形データを読み込むため、マシンのメモリに注意。 解像度30分のデータなら4GB必要。

4. 地形を手で修正する

仮想地形などの場合で手動修正の必要がなければ、ここはスキップ

スクリプトmanipulate_topo.shを実行する。

   % sh manipulate_topo.sh

GrADS が立ち上がるので地形の修正を行う。

(MRICOM2_4/mktopo-sj/README.mktopo-sj を参照。step2 にあたる。)

MRICOM2_4のmantopo_nest.gs をそのまま使う。

以下の地形ファイルが作成される。

   mantopo.gd: direct accessの地形データ。

5. 地形を仕上げる

地形が海洋モデルの実行条件を満たすように仕上げ作業を行う。

mantopo.gd(またはtopo_sub_1st.gd)に topoin.gd という名前でリンクを張り、 namelist.nest を編集した後、finishtopo をコンパイルし実行する。

% make finishtopo
% ./finishtopo

以下の地形ファイルが作成される。

   topo.d: MRI.COMで使用できるsequential地形データ。
   masku.d: U点の3次元マスク配列。direct access。
   maskt.d: T点の3次元マスク配列。direct access。

6. 水平拡散・粘性係数の分布を作成する

namelist.nest を編集して水平拡散・粘性係数の分布を作成する。

境界値を与える親モデルと子モデルの係数が滑らかに接続するように設定を行う。

現在は、境界から親モデルの5格子分は親モデルの値、 そこからさらに内側へ5格子で線型に子モデルの格子の値に 接続するようになっている。 (Smagorinskyでは粘性係数は無視される。)

 % make mkhddf
 % ./mkhddf

以下の水平拡散・粘性係数ファイルが作成される。

   hddiff.d: MRI.COMで使用できるsequentialデータ。
   hdts.d, hduv.d: 水平拡散と粘性のdirect access データ。

7. 境界域における境界値とモデルの寄与率データを作成する

buffer.F90 を編集して境界域における境界値とモデルの寄与率 データを作成する。

これは本来、境界から低解像度モデル1格子分内側で、境界値とモデルの値を重みつき平均で求めるために作成したものであるが、境界値は境界域で重み 1.0、高解像度モデル領域では 0.0 とすることを推奨する。

従って、プログラムの中身を大幅に変更する必要はない。

% make buffer
% ./buffer

以下の寄与率を示すファイルが作成される。

   hdbuff.d: MRI.COMで使用できるsequentialデータ。
   wbufu.d,wbuft.d : direct access データ。

8. ファイルを移動する

作成されたファイルを適当なディレクトリに移動する。

sample/move_file.sh が使えるかもしれない。