おおまかな流れ
STEP 1. CaMa-Flood の catmxy ファイルを用意する
STEP 2. catmxy ファイルを用いて MATSIRO の格子番号のグリッドデータとラスターデータを作成する
STEP 3. STEP 2 で作成した MATSIRO のラスターデータを用いて MATSIRO と各種観測データとの間の変換テーブルを作成する
STEP 4. STEP 3で作成したテーブルを用いて MATSIRO の境界条件データを作成する
STEP 1. CaMa-Flood の catmxy ファイルを用意する
CaMa-Flood のパッケージに catmxy.bin あるいは 1min.catmxy.bin などの名前で流域形状格子を定義する高解像度のデータが入っていると思います。
解像度はバージョンやモデル解像度によって異なりますが、例えばモデル解像度が0.5度の場合は1minや15secなどのデータを使うのが良いと思います。
見つからない場合、あるいはパッケージに入っているものより高解像度のデータが必要な場合は山崎先生に問い合わせてみてください。
STEP 2. catmxy ファイルを用いて MATSIRO の格子番号のグリッドデータとラスターデータを作成する
SPRING のソースコードはコンパイル済みとします。
SPRING のディレクトリの絶対パスを ${DIR_SPRING} とします。
${DIR_SPRING}/set/make_cmf_mat/FLOW_v396_glb30min_untiled.conf
を参考にして設定ファイルを作成してください。
解像度等の設定とパスを変える必要があるかと思います。
設定ファイルの詳細は当該ページに記されていますが、ここで主な変数の意味を簡単に説明します。
----------------------------------------------------------------
dir: それより下に記述されたファイルの親ディレクトリ。何度でも指定でき、前の dir を上書きする。
(サンプルでは相対パスになっているが、絶対パスの方が楽かも)
[common]
nx_grid, ny_grid: モデル解像度
nx_raster_1deg, ny_raster_1deg: 1度あたりのラスターの数
[cama-flood]
fin_nextxy: CaMa-Flood のパッケージに入っている、グリッドの流下方向を記録した nextxy.bin というファイル
fin_catmxy: catmxy ファイル
fout_lndmsk_river (fout_lndmsk_noriv): 陸マスク。陸面グリッドに1,海洋グリッドに0を与えたグリッドデータ
fout_grdidx_river (fout_grdidx_noriv): 出力ファイル。河道有り陸面(河道無し陸面)における CaMa-Flood の格子番号のグリッドデータ
fout_rstidx_river (fout_rstidx_noriv): 同上、ただしグリッドデータではなくラスターデータ
catmxy_noriv_coastal: catmxy の河道無し陸面のインデックス(海岸沿いの小流域)
catmxy_noriv_inland: catmxy の河道無し陸面のインデックス(内陸消失点)
catmxy_ocean: catmxy の海洋のインデックス
catmxy には大きく分けて以下の3種類のインデックスがある。
1. 海洋 -9999
2. 河道有り陸面 正の値
3. 河道無し陸面 海洋のインデックス以外の負の値
バージョンによっては河道無し陸面が海岸沿いのものと内陸消失点とで区別されており、catmxy_noriv_coastal, catmxy_noriv_inland でそれぞれ指定できるが、最近のものは多分 -999 などで統一されているはず(データを確認されたし)。
nextxy_river_mouth: nextxy の河口のインデックス
nextxy_river_inland: nextxy の内陸消失点のインデックス
nextxy_ocean: nextxy の海洋のインデックス
こちらもおそらくサンプルのままで良いと思うが、必要に応じて書き換えてほしい。
idx_miss: 出力データにおける欠損値
[matsiro]
(cama-flood と重複するものは省略)
fout_lndmsk_river (fout_lndmsk_noriv): 河道有り陸面(河道無し陸面)のマスク。
4バイト浮動小数点数、ビッグエンディアンで出力するようになっているが、これは後で使う MATSIRO の境界条件を作成する Python スクリプトが陸マスクをこの形で読み込むようになっているため。
fout_grdidx_bnd_river (fout_grdidx_bnd_noriv): [3]で変換テーブル作成に用いる、河道有り陸面(河道無し陸面)の格子番号のグリッドデータ
fout_rstidx_bnd_river (fout_rstidx_bnd_noriv): 同上、ただしラスターデータ
fout_rstidx_bnd_river は MATSIRO のモデル格子のインデックスではなく、境界条件の作成に用いる変換テーブルを作成するためのデータである(インデックスの割り振り方が少し違う)。
MATSIRO と ILS の他のコンポーネントとの間の変換テーブルを作成する際には fout_rstidx_river の方を使う。
同じ種類のファイル(fout_lndmsk_river と fout_lndmsk_noriv など)は同じディレクトリに格納し、またファイル名は
land_mask_river.bin, land_mask_noriv.bin
のように river / noriv の部分以外は共通とすること。
[options]
編集不要
----------------------------------------------------------------
なお、catmxyファイルはFLOWのバージョンや解像度によってはタイル分割されていることがあります。3secの全球データなどはファイルサイズが大きすぎて扱いにくいためと思われます。こういった場合でもSPRINGを使って境界条件の作成に必要な変換テーブルを作成することはできますが、手順が複雑化すること、また一部スクリプトの改修が必要なことから、今のところその手順は解説していません。必要な時が来たら追加します。
設定ファイルを作成したら、 ${DIR_SPRING}/bin/ext/make_cmf_mat/main.exe を実行します。
設定ファイルは
./bin/ext/make_cmf_mat/main.exe set/make_cmf_mat/FLOW_v396_glb30min_untiled.conf
のようにしてコマンドライン引数で与えます。
この際、設定ファイル内のパスを相対パスで記述していると、実行したディレクトリを起点とした相対パスとして認識されます。
STEP 3. STEP 2 で作成した MATSIRO のラスターデータを用いて MATSIRO と各種観測データとの間の変換テーブルを作成する
${DIR_SPRING}/run/ils_bnd/ の sample/ を同じディレクトリ内にコピーします。名前は説明のため仮に glb30min とします。
$ cd ${DIR_SPRING}/run/ils_bnd
$ cp -r sample glb30min
glb30min/src/ の中にいくつかファイルとディレクトリがあります。
ユーザーが編集するのは make_conf.cfg です。
各変数の意味は以下のとおりです。
---------------------------------------------------------------
dir_spring: SPRING のトップディレクトリ(${DIR_SPRING})
dir_mat: MATSIRO の格子番号データが格納されたディレクトリ
(fmt_f_rstidx などを見て分かるとおり、このディレクトリの直下にファイルが無ければならないわけではない)
name_run: ランの名前。ここでは glb30min
fmt_f_rstidx: 格子番号のラスターデータ
fmt_f_grdidx: 格子番号のグリッドデータ
fmt_f_grdwgt: 格子の重みのグリッドデータ。今回は使わないので空文字列のままで良い
STEP 2 の設定ファイルの [matsiro] fout_rstidx_bnd_river, fout_grdidx_bnd_river などで設定したものがこの fmt_f_rstidx, fmt_f_grdidx に対応します。
nx_1deg_raster, ny_1deg_raster: 1度あたりのラスターの数
nx_raster, ny_raster: ラスターデータの形状
nx_grid, ny_grid: グリッドデータの形状
west, east, south, north: ラスターデータの領域
list_type_land: 陸面格子の種類。ここでは河川有り、河川無しをそれぞれ river, noriv と名付けている。
list_name_data: 各種観測データ。編集不要
dir_modis_coords (下の方にある): MODIS の格子のデータ
MODIS 格子は緯度経度格子ではなく菱形のような特殊な形をしているため、変換テーブルの作成には格子の頂点の座標データが必要となる。
isotope3: /home/nitta/work2022/MIROC-ILS/matsiro/modis_latlon
を適当な場所にコピーまたはリンクして、そのパスを dir_modis_coords で指定する。
※isotope3: 芳村研サーバー
---------------------------------------------------------------
make_conf.py を Python で実行して変換テーブルの作成に必要な設定ファイルを作成します。
glb30min/set/ に各観測データのための設定ファイルが作成されます。
続いて s01_regrid.sh を実行して変換テーブルを作成します。
data という環境変数で観測データの名前を指定してから実行します。観測データは make_conf.cfg の list_name_data で指定されている glcnmo, gtopo30, islscp1, modis の 4つです。
qsub を使う場合は
$ qsub -v data=glcnmo ./s01_regrid.sh
などとしてください。これを4つのデータそれぞれに対して実行します。
STEP 4. STEP 3で作成した変換テーブルを用いて MATSIRO の境界条件データを作成する
ここではILSのパッケージに用意されている、境界条件作成用のスクリプトを用います。
ILSのディレクトリの絶対パスを${DIR_ILS}とします。
まず、観測データを ${DIR_ILS}/data/ の下にリンクなどで持ってきます。
必要なデータとリンク元は以下のコマンドに示す通りで、全部で6つあります。リンク元はいずれも芳村研サーバーisotope3です。
リンクの名前もこのコマンドのとおりに付けてください。
$ cd ${DIR_ILS}/data
$ ln -s /data26/nitta/Data/GLCNMO/tiles glcnmo
$ ln -s /data34/nitta/Data/GTOPO30/tiles gtopo30
$ ln -s /data26/nitta/Data/HWSD/tiles hwsd
$ ln -s /data26/nitta/Data/ISLSCP1/ islscp1
$ ln -s /data26/nitta/Data/JRA55/tiles/ jra55
$ ln -s /data26/nitta/Data/MODIS/MCD15A2.005/data_miroc6/ modis_lai
次にSTEP 3で作成した変換テーブルを用意します。
${DIR_ILS}/src/map/ の下にディレクトリを作成します。ディレクトリ名は先ほどと同様ランの名前なので、ここでは glb30min とします。
そうしたらこの下にSTEP 3 で作成した変換テーブルをリンクなどで持ってきます。
ILSの境界条件作成に必要な変換テーブルはglcnmo, gtopo30, hwsd, islscp1, modisの5種類ですが、hwsd は格子系が gtopo30 と共通なので、新たに作る必要はありません。gtopo30 と同じところにリンクするなどしてください。
$ cd ${DIR_ILS}
$ mkdir src/map/glb30min
$ ln -s ${DIR_SPRING}/run/ils_bnd/glb30min/out/* src/map/glb30min/.
$ ln -s ${DIR_SPRING}/run/ils_bnd/glb30min/out/gtopo30 src/map/glb30min/hwsd
また境界条件の作成にはMATSIROの陸マスクも必要となります。
${DIR_ILS}/src/map/ の下にラン名のディレクトリ(glb30min)を作成し、その下に STEP 2でインデックスのデータと一緒に作成した陸マスク(設定ファイルで言うと [matsiro] の fout_lndmsk_river, fout_lndmsk_noriv)を持ってきます。
$ cd ${DIR_ILS}
$ mkdir src/map/glb30min
$ ln -s ${DIR_SPRING}/out/FLOW/matsiro/30min/land_mask_river.bin src/map/glb30min/land_mask_river.bin
$ ln -s ${DIR_SPRING}/out/FLOW/matsiro/30min/land_mask_noriv.bin src/map/glb30min/land_mask_noriv.bin
リンク元のファイル名はSTEP 2の設定ファイルで指定したファイル名に対応します。
リンク先の名前はland_mask_{tile}.binとしてください。tileは作成する境界条件データのタイルで、ここではriver, norivの2つ。河道無し陸面を扱わないならriverのみで良いです。
これでデータの用意は完了です。
${DIR_ILS}/src/bnd に移動して make_conf.py を実行します。
make_conf.cfg でパスなどを定めているので、必要に応じて変更してください。
----------------------------------------------------------------
ils_dir: ILS のディレクトリの絶対パス(${DIR_ILS})
run_name: ランの名前。ここではglb30min
data_dir: 各種観測データを置くディレクトリ。変更不要
map_dir: 変換テーブルを置くディレクトリ。変更不要
land_mask_dir: 陸マスクを置くディレクトリ。変更不要
output_tiles: 出力するデータのタイル。ここでは001から river, noriv に(河道無し陸面が不要な場合はriverのみでOK)
output_nx, output_ny: モデル解像度。全球0.1度ならそれぞれ3600, 1800
----------------------------------------------------------------