非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章...

122

Transcript of 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章...

Page 1: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し
Page 2: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

非静力学モデルJMA-NHMの使い方

沢田雅洋

2007年 1月

Page 3: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し
Page 4: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3

目 次

第 1章 はじめに 5

第 2章 モデルの使用方法 7

1 全体の流れ・シェルの実行順序 . . . . . . . . . . . . . . . . . . . . 7

2 モデルのコンパイル . . . . . . . . . . . . . . . . . . . . . . . . . . 8

第 3章 地形の作成 13

1 地形作成ツールのコンパイル・使い方 . . . . . . . . . . . . . . . . 13

2 SRTMから地形を作成するツールのコンパイル・使い方 . . . . . . 18

3 地形の読み込み・描画・チェック . . . . . . . . . . . . . . . . . . . 19

4 地形・土地利用データの変換 optional . . . . . . . . . . . . . . . . . 20

5 SiB用の土地利用データの作成 optional . . . . . . . . . . . . . . . . 22

6 平らな地形の作成 -理想化実験用- . . . . . . . . . . . . . . . . . . . 24

7 プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

第 4章 初期値・境界値の作成 27

1 初期値・境界値に必要なデータの準備 . . . . . . . . . . . . . . . . 27

2 初期値・境界値の作り方-統一版 (mkinit) new . . . . . . . . . . . . 28

3 MSM-GPVでの初期値・境界値の作り方 やや new . . . . . . . . . . 34

4 MANALでの初期値・境界値の作り方 やや new . . . . . . . . . . . 39

5 JRAでの初期値・境界値の作り方 . . . . . . . . . . . . . . . . . . . 41

5.1 プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

6 中間ファイルの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . 45

7 初期値・境界値の作成 . . . . . . . . . . . . . . . . . . . . . . . . . 47

8 2重 (セルフ)ネストの仕方・NHMの出力とのつなげ方 (self-nesting,

or downscaling) new . . . . . . . . . . . . . . . . . . . . . . . . . . 49

8.1 プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

9 雲物理量を境界に与えるには . . . . . . . . . . . . . . . . . . . . . 52

10 理想化実験の初期値・境界値 . . . . . . . . . . . . . . . . . . . . . 55

11 初期値・境界値を読みたい、絵を書きたい . . . . . . . . . . . . . . 57

Page 5: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

12 リスタート(再計算)のやり方 . . . . . . . . . . . . . . . . . . . . 58

第 5章 モデルの実行 61

1 モデルの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

2 パラメータカード . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

3 実行条件(初期値、解像度、パラメータ)を変えたい . . . . . . . . 67

4 鉛直層の切り方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

第 6章 出力の変換と作図 69

1 データの変換の仕方 (nhm2grads) . . . . . . . . . . . . . . . . . . . 69

2 プログラム (nhm2grads) . . . . . . . . . . . . . . . . . . . . . . . . 71

3 データ変換 (nhm2nc) . . . . . . . . . . . . . . . . . . . . . . . . . . 73

4 プログラム (nhm2nc) . . . . . . . . . . . . . . . . . . . . . . . . . . 77

5 任意の鉛直断面への内挿 (nhm2ver) . . . . . . . . . . . . . . . . . . 79

6 鉛直方向の内挿(z*→ p-level, z-level, pt-level) . . . . . . . . . . . 82

7 p面、z面直接内挿 . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

8 データの可視化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

8.1 vis5d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

8.2 plotps 書き中. . . . . . . . . . . . . . . . . . . . . . . . . . . 94

第 7章 そのほか 99

1 シェル入門(ではない) . . . . . . . . . . . . . . . . . . . . . . . . 99

2 バイナリファイルの種類と読み書き . . . . . . . . . . . . . . . . . . 102

3 netcdfデータの読み書き . . . . . . . . . . . . . . . . . . . . . . . . 106

第 8章 物理過程 111

1 雲微物理過程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

2 積雲対流パラメタリゼーション(CP) . . . . . . . . . . . . . . . . 114

3 地表面・植生過程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

4 乱流混合過程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

5 放射過程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

第 9章 JMANHMの使用例・今後の課題? 119

1 講座内での使用例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

2 今後の (個人的)課題 . . . . . . . . . . . . . . . . . . . . . . . . . . 119

2.1 検証ツールの作成 (アメダス、衛星などとの比較) . . . . . . 120

2.2 モデル出力の調整 (検証用データの出力) . . . . . . . . . . . 121

2.3 モデルで使用するパラメータ・物理過程の最適化 . . . . . . 121

4

Page 6: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

5

第1章 はじめに

2009/11/20 加筆・修正このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述したものです。ただし、場所によってオリジナルのものとは違う設定や使い方をしているところがありますのでご注意を。(ds3用のマニュアルではないです!!!)かつ、一応自分用なので、説明不足なところがあります。jmanhm20091031.tgzが講座でダウンロード (cvs)したもので最新。実際は日々更新されています。jmanhm-

rel-02-00を基本とする。下記参照。jmanhm-rel-01-15とオプションが違う部分もあるので、古いバージョンを使っている方は要注意。

始めに大まかな流れを示すと、

1. 第 1章:モデルセットアップ&テストラン

2. 第 2章:地形の作成

3. 第 3章:初期値・境界値の作成

4. 第 4章:モデルの実行

5. 第 5章:出力の変換&作図

6. 第 6章:その他

7. 第 7章:物理過程

という感じです。最低限必要と思われる作業は、

1. 第 1章:モデルのコンパイル

2. 第 2章:gtopo30を使った地形作成

3. 第 3章:初期値・境界値の作成

4. 第 4章:モデルの実行

Page 7: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

5. 第 5章:grads形式に変換

です。2009/05/12 初期値の作成の仕方を、使用するデータに依らず統一するようにしました。初期値・境界値の作成を参照。

pdf版はこちら※ 2007年 6月 22日に jmanhm-rel-02-00が公開されました。かなりのオプションの追加がなされたようです。いずれ非静力のHP上に情報がアップされますが、知っている範囲について簡単に紹介。

• 乱流:Improved Mellor-Yamada Lavel3 の追加

• 放射:部分凝結スキームにより雲量 (雲水・雲氷量)を求め直接放射計算

• 雲物理:4-iceバルクモデル (雲氷、雪、あられ、ひょう)の実装予定

というところでしょうか。詳しくはパラメータカード参照。英語版 (english version,

not full): parameter card EN .

■ 古いメモ以下の記述は、現在のツールの内容と一致しない部分があります。

一応、jmanhm-rel-01-15を基本とする。初期値・境界値の作成において、ここでは JRAなどの全球データから作成することを念頭においています。DS3ではGPV-RSM(日本域)なので、もちろん異なるプログラム・シェルを使用します。なので、RSMから初期値・境界値を作成する際はDS3に関する記述を参考にして下さい。もちろん、どのデータを使おうと手順はほとんど一緒です。

6

Page 8: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

7

第2章 モデルの使用方法

1 全体の流れ・シェルの実行順序2009/11/20 加筆・修正

1. モデルセットアップ&テストラン

• tar zxvf jmanhm-rel-01-15.tgz

• make libfakempi.a

• sh configure -c config/pc/config.fujitsu Makefileの作成

• make fcst nfx モデル本体のコンパイル

• make step1 1 テストラン用の地形作成ツール

• sh set nhmdir.sh テストランのシェルのセットアップ

• sh orbel32.sh テストランの地形作成

• sh glmwv nfx.sh 線形山岳波のテストラン

• sh orbel snow.sh テストランの地形作成

• sh gsnow nfx.sh 地形性降水のテストラン

2. 地形の作成

• step3.sh (step2.sh は旧版)

3. 初期値・境界値の作成

• mkinit/script/sample jra.sh (JRAデータはあるものとする)

4. モデルの実行

• fcst.sh (4cast 72dx24.sh: ds3のみ)

Page 9: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. モデルのコンパイル

5. 出力の変換&作図

• sh n2gr.sh

全体の流れと主要なシェルを記述した。ディレクトリの移動などは書いていないので注意。シェル、ディレクトリなどの名前は大体はオリジナルに沿っている。ただし地形作成以降の手順については講座のツールに基づく。

Following processes are minimum needs for using JMANHM.

1. model setup

• make libfakempi.a

• sh configure -c config/pc/config.ifort  generate Makefile

• make fcst nfx  compile JMANHM

2. make orography: step3.sh

3. make initial & boundary data

• mkinit/script/sample jra.sh generate initial & boundary data for NHM

4. model run: fcst sample.sh

5. convert nhm-output to grads format: n2gr new.sh

2 モデルのコンパイルまずモデルの準備・コンパイル・テストラン(線形山岳波・地形性降水)まで。1つのシェル(/mnt/disk1/Tools/script/nhm setup.sh)とモデル本体(jmanhm20090610.tgz)を適当なディレクトリ(例えば tmp)にコピーして、

$ mkdir ./tmp/

$ cp ./nhm_setup.sh ./jmanhm20090610.tgz ./tmp/

$ sh nhm_setup.sh

で出来上がり。細かい手順はシェルの中参照。講座内ならうちのHPから”JMANHM

の並列実行の仕方”で検索。やや丁寧な並列実行の手順があります。コンパイルの前の”configure”実行時の注意点は、■ mpiの有無mpiを使用するならconfigureに使用するファイル(Module/Mk/config/pc/config.fujitsu

など)を適切に変更。

8

Page 10: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 2. モデルの使用方法

FC=frt ←モデルに使用するコンパイラLD=frt ←コンパイルした.oたちをまとめるリンカ(やや表現が正しくない)INC_MPI=${NHMDIR}/Module/Src/fakempi

LIB_MPI="-L${NHMDIR}/Module/Bin -lfakempi"

を以下のように変更。もちろん mpiを使用しないならそのままで OK。FC=mpif90

LD=mpif90

INC_MPI=/usr/local/include ← mpiをインストールしたパスLIB_MPI="-L${NHMDIR}/Module/Bin -L/usr/local/lib"

※ LIB_MPI="-L${NHMDIR}/Module/Bin -L/usr/local/lib -Vaxlib"← ifc用

mpi関連でエラーが出た場合$ulimit -s 40960 (適切なメモリサイズ)

$ulimit -s unlimited

など試す。ジョブが残っていたら”kill”で処理。あるいは、$ export P4 GLOBMEMSIZE=134217728

という環境変数を設定する。メモリサイズは適切に。

■ 使用するデータフォーマット現在、並列版NHMではNusdas形式が基本だが、以前のフォーマットであるmri

形式も使用できる。うちの講座ではmri形式が基本。なので、configureの前に、

# NuSDaS (pnusdas | system | fnusdas | other)

NUSDAS=pnusdas

を以下のように変更。# NuSDaS (pnusdas | system | fnusdas | other)

NUSDAS=fnusdas

configureに使用する設定ファイルはNhm/Module/Mk/config/

に様々なものが用意されている。適切なものを選ぶこと、あるいは修正すること。基本的に ifort, ifc, frt, pgf90, sxf90 に対応。

参考HP

並列版NHM:http://pfi.kishou.go.jp/nhm frm/nhm inf.htm 逐次版NHM:http://www.mri-jma.go.jp/Project/mrinpd/INDEXJ.htm

■ ifortでのコンパイル基本的に、$ sh configure -c config/pc/config.ifort

9

Page 11: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. モデルのコンパイル

でMakefileの作成はOK。これでコンパイルもできるはず。テストランもOK。ただし、ネストなど外部から初期値を与えて計算をする場合 (jra,manalなど)、計算が落ちることがあるかも(segmentation fault になる)。その場合、コンパイルオプションを付けるか (-heap-arrays)、以下のようにプログラムの修正が必要。

例えば、cadvuvw.f90など。real(r_size) :: vvl(nx,ny,nz), wwl(nx,ny,nz)

↓これを以下のように動的に配列を取ること。real(r_size), allocatable :: vvl(:,:,:), wwl(:,:,:)

...

allocate( vvl(nx,ny,nz), wwl(nx,ny,nz) )

subroutineの中で”intent”属性のものは勿論そのままで良い(real(4),intent(in) ::

data(nx,ny) など)。変数が多次元配列で動的でない場合に引っかかることがある。何故かは不明。frt(富士通コンパイラ)ならどちらでも問題なし。ただし、ifort

の方が 2~3割早い&フリーのコンパイラ。

※ ifortで実行したいけど結局どうするの?以下のディレクトリからファイルをコピーしてコンパイル&実行してみて下さい。/mnt/sky1/sawada/Nhm-v15/Module/Src/JMANHM/

jmanhm-rel-02-00を使いたい場合は以下から。/mnt/sky1/sawada/Nhm-v2-00/Module/Src/JMANHM/

もちろん、使用する際は自己責任でお願いします。v15の方はいろいろいじってあるかもしれないのでご注意ください。

■ 実行時のメモリサイズを小さくしたいけど…格子サイズを小さくして下さい。自分で何とかして下さい。というのが正論です。正しいか分かりませんが、”vardef.f90”の中の

integer(4), parameter :: r_size=kind(0.0d0) ←倍精度                     ↓integer(4), parameter :: r_size=kind(0.0e0) ←単精度

として下さい。使用メモリは半分くらいになるはずです。結果に影響するかどうかは自分で判断。

■ sx9(サイバーサイエンスセンター)でのコンパイルソースファイルは jmanhm-rel-02-00.tgzを使用して下さい。僕のディレクトリからコピーしたものを superで使用すると実行時エラーがでます。基本的に、WS

10

Page 12: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 2. モデルの使用方法

上での作業手順は同じ。$ sh configure -c config/mri/config.sx9

(/mnt/disk1/Nhm-v2-00/Module/Mk/config/mri/config.sx9)

を使用して下さい。mpiを使って、並列実行するときは config.sx9 mpiを使用。$ sh configure -c con-

fig/mri/config.sx9 mpi

(/mnt/disk1/Nhm-v2-00/Module/Mk/config/mri/config.sx9 mpi)

を使用して下さい。”config.sx9”は”config/mri/config.sx6 cross auto”と基本的にほぼ同じ。なので、$ sh configure -c config/mri/config.sx6 cross auto

でもMakefileの作成はOKのはず。上手くいかなかったら、この後、”Nhm/Module/Src/fakempi/mpif.h”

を”Nhm/Module/Src/JMANHM/”の中にコピーする。(libfakempi.aを使う場合を前提としている。mpiを使用するときはダメ) これをしないと、リンクするときにmpicomm.oに関連するエラーが出るかも知れません。ファイルをコピーしたら、もう一度make libfakempi.a, make fcst nfxを行って下さい。以下、”config.sx9”の中身。

# compiler

FC=sxf90 ← sxf90、mpi使用時は sxmpif90

FFLAGS=

CPP=cpp

CPPFLAGS="-P -C"

CC=sxc++ ← sxc++、mpi使用時は sxmpicc

CFLAGS=

LD=sxf90 ← sxf90、mpi使用時は sxmpif90

LDFLAGS=

AR=sxar

ARFLAGS=rv

# optimization option

OPT_C="-copp hmulti"

OPT_F="-dW -Cvopt -Pauto -Wf,-init heap=zero stack=zero,-pvctl fullmsg,-pvctl vwork=stack ←ちょっと変更OPT_C_PARA=${OPT_C}

OPT_F_PARA=${OPT_F}

OPT_C_PARA_FAST=${OPT_C}

OPT_F_PARA_FAST=${OPT_F}

11

Page 13: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. モデルのコンパイル

OPT_LD=

OPT_LD_PARA="-dW -Pauto"

# MPI

INC_MPI=/SX/usr/include

LIB_MPI=${LIB_MPI:-"-L${NHMDIR}/Module/Bin -lfakempi"} ← fakempi用に変更

■ 実行時の注意点出力されるバイナリの書式を、バイト単位にすること。基本はワード単位になっているので。F RECLUNIT=BYTE; export F RECLUNIT

■ 実行時のエラーログファイルに必ずエラーメッセージが出ます。それを参考に対処。対処方法は、エラーの出た箇所のみを最適化の仕方 (ベクトル化、並列化、ループの入れ替えなど)を変えるなど。以下、コンパイル指示行の例

!cdir vector/novector ←ループの自動ベクトル化の対象とする/しない!cdir concur/noconcur ←ループの自動並列化の対象とする/しない

スパコンについては こちら。おまけとして、配列数 (x,yの格子数)は奇数の方がいいかもしれません。経験上。

”Nhm/Module/Mk”の中にあるファイルconfigure : Makefileを作るためのシェルスクリプトと思ってください。ディレクトリ”config/”の中に configure用のパラメータファイルがあります。Makefile : モデルをコンパイルする際に必要なリンク、ソースファイルの位置などの関係付けを記述しているファイル。include.mk: 使用するコンパイラ、Makefileの拡張子 (.f90, .f とか)の関係付け。fcst nfx.mk : Makefileで使用される。むしろこれの方がMakefileの本体と思った方が正解かな?コンパイルオプション、ライブラリのリンクはここ。libfakempi.a: mpiを使わないときに使用。mpiのごまかし。step1 1.mk : テストラン用の地形作成。実際の地形作成には使えない。fcst 1.mk : 逐次版NHM。もちろんプログラムは更新されていません。

12

Page 14: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

13

第3章 地形の作成

2009/11/20 加筆・修正

1 地形作成ツールのコンパイル・使い方地形作成のためのシェルと設定ファイル、ソースファイルは以下にあります。

/mnt/disk1/Tools/topo_make/step3_lmn72dx6_sample.sh

/mnt/disk1/Tools/topo_make/src/

まず、コンパイルは、

$ cp -r /mnt/disk1/Tools/topo\_make/ ./

$ cd ./topo\_make/src/

$ make

でコンパイルはOK。本研究室では ifortを使用 (Makefile参照)。オプションなど(-assume byterecl)に注意すること。作成される実行ファイルは”step2, step3,

makeps”。他のコンパイラ (f90, frt, gfortranなど)を使用する場合は、オプションや実行時のパラメータに注意。step2(旧), step3(新)は地形作成用、makepsは地形描画用。

使用方法は、$ sh step3 lmn72dx6 sample.sh

以下、step3を使用した場合の namelistの設定例(step3 lmn72dx6 sample.sh)。

------------------------------------------------------------------------

&namdir

filedir_topo=’/mnt/tree2000/land-data/gtopo30/’ ← gtopo30のディレクトリfiledir_sl=’/mnt/tree2000/land-data/glcc/’ ←glccのディレクトリ

Page 15: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

1. 地形作成ツールのコンパイル・使い方

&end

&namdom

NX = 72, NY = 72, ←格子数 (number of grid)

NPROJC=’LMN ’, ←メルカトル、ランベルト、ポーラーステレオなど(map projection)

DX = 5000.0, DY = 5000.0, ←格子サイズ(length of grid [unit:m])

SLAT = 30.00, SLON = 140.00, ←基準となる緯度経度(standard lat/lon)

FLATC = 38.80, FLONC = 139.97 ←作成する地形の緯度経度の中心(center of map)

&end

------------------------------------------------------------------------

PSN: 北半球ポーラーステレオ (polar stereo projection in north hemisphere)

PSS: 南半球ポーラーステレオ (polar stereo projection in south hemisphere)

MER: メルカトル図法 (mercator projection)

LMN: 北半球ランベルト (lambert projection in north hemisphere)

LMS: 南半球ランベルト (lambert projection in south hemisphere)

LL : 緯度経度

step3.dx30.sh (step3.dx10.sh) などは地形作成の後、作成した地形ファイルを読み込んで描画します。描画には”plotps”(描画ライブラリ、非静力に付属)を使用しています。出力ファイル名は、この場合”fort.20”をリネームして”topo.ps”としている。作成した地形が期待通りかどうかすぐにチェックが可能。わざわざ gradsを開く必要がない。色のセンスはあまり良くない(上手く出来ん . . .)。■ gradsでの表示の仕方地形ファイル (org)や地表面パラメータファイル (ptgrd)を gradsで表示させるには、ctlに設定 (fileheader 20)を加える必要があります。地形ファイルを読む場合、下記に例。

-------------------------------------------------------------------

dset ^org_91dx5

undef 9.999e+20

options big_endian

fileheader 20

xdef 91 linear 0 1

ydef 91 linear 0 1

zdef 1 levels 1013

tdef 1 linear 00z01jan2006 1hr

vars 6

14

Page 16: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 3. 地形の作成

50

250

450

750

1050

1250

1450

28.00

29.00

30.00

31.00

32.00

33.00

34.00

35.00

36.00

37.00

128.00

129.00 130.00 131.00 132.00 133.00 134.00 135.00 136.00 137.00 138.00

Surface height [m]

図 3.1: plotpsを用いて作成した地形。

zs 0 99 ** zs

sl 0 99 ** sl

fcor3 0 99 ** fcor3

roughl 0 99 ** roughl

clat 0 99 ** latitude

clon 0 99 ** longitude

endvars

-------------------------------------------------------------------

fileheader 20はデータの最初 20byteをスキップするという意味。緯度経度は適当に書いています。地表面パラメータファイルを読む場合。

-------------------------------------------------------------------

dset ^ptgrd_91dx5_z60

undef 9.999e+20

options big_endian

fileheader 24

15

Page 17: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

1. 地形作成ツールのコンパイル・使い方

xdef 91 linear 0 1

ydef 91 linear 0 1

zdef 1 levels 1013

tdef 1 linear 00z01jan2006 1hr

vars 4

wet 0 99 ** wet

fktg 0 99 ** fktg

roctg 0 99 ** roctg

albed 0 99 ** albed

endvars

-------------------------------------------------------------------

fileheader 24はデータの最初 24byteをスキップするという意味。■ 地形作成に関する細かい設定 (advance setting)gtopo30の地形 (約 1km格子)を粗い格子でそのまま使うと、現実とは異なる地形になることがあります (表現が変ですが)。そこで、たいていの場合は平均化して使っています。それを決めているのは、step2-5.f90の中の imethodという変数です。imethod = 1: 地形のスムージング (周囲 0.5格子の範囲)。imethod = 2: 内挿した値を直接使用。imethod = 0(1と 2以外): スムージングするか内挿値を使うか適当に決める。

※追記 (2007.04.26)

近年、SRTM(http://www2.jpl.nasa.gov/srtm/)という標高データが公開されている。これは”3 arc-seconds, which is 1/1200th of a degree of latitude and longitude,

or about 90 meters.”ということで約 90m間隔のデータで、gtopo30の 10分の 1の解像度。日本国内なら国土地理院の数値地図(50m格子、講座で保有)の方が細かいが、全世界となるとこちらの方が有利。まぁ、そんな解像度、しばらく必要ないかもしれませんが。※追記 (2007.12.04)

上記のSRTMを使って地形を作るツールを準備しました。次のセクションを参照で。■ 旧式バージョンの一応メモ新しく使い始めたユーザは、とくに必要ないです。旧式バージョンは、

/mnt/raid1200/land-data/tool_ver2/step2.dx10.sh

/mnt/raid1200/land-data/tool_ver2/domain.card.LMN102.dx10

/mnt/raid1200/land-data/tool_ver2/src/

16

Page 18: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 3. 地形の作成

※追記(2007.04.26)ifortでも問題なく動作するようでした。ただし、オプションなど (-assume byterecl)

に注意すること。また、これらをそのままコピーした場合、コンパイルする際は一度”make clean”を行い、以前生成したオブジェクトファイル (*.o)を消しましょう。大抵引っかかります。あと、エンディアンも間違えないように (export F UFMTENDIAN=big)。

$ sh step2.dx10.sh

使い方は同じですが step2の場合、”domain.card.LMN102.dx10”で”filedir topo”の文字数を数える必要あり。step3の場合は”&namchara”という項目を無い (自動)。以下、step2を使用した場合の namelistの設定例(step2.dx10.sh)。

\&namchara ←"step3"を使用する場合、この項目は必要ない。\\

n\_ch\_filedir\_topo=32 ← filedir\_topoの文字数\\

n\_ch\_filedir\_sl=29 ← filedir\_slの文字数\\

\&end\\

\&namdir\\

filedir\_topo=’/mnt/raid1200/land-data/gtopo30/’ ← gtopo30のディレクトリ\\

filedir\_sl=’/mnt/raid1200/land-data/glcc/’ ←glccのディレクトリ\\

\&end\\

\&namdom\\

NX = 102, NY = 102, ←格子数 (number of grid)\\

NPROJC=’LMN ’, ←緯度経度、ランベルト、ポーラーステレオなど\\

DX = 10000.0, DY = 10000.0, ←格子サイズ(length of grid [unit:m])\\

SLAT = 32.50, SLON = 140.0, ←基準となる緯度経度(standard lat/lon)\\

FLATC = 32.5, FLONC = 130.5, ←作成する地形の緯度経度の中心(center of map)\\

XI = 61.0, XJ = 165.0, ←多分使わない (no need)\\

XLAT = 30.0, XLON = 140.0 ←多分使わない (no need)\\

\&end

17

Page 19: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. SRTMから地形を作成するツールのコンパイル・使い方2 SRTMから地形を作成するツールのコンパイル・使い方

SRTM = ”Shuttle Radar Topography Mission” だそうです。1km以下 (100mまでOKのはず)の地形を作成したい時に使用して下さい。使い方は”topo make/step2”などとほぼ同様。最低限必要なツールは、

/mnt/disk1/Tools/SRTM/step4.dx1.sh ←実行シェル/mnt/disk1/Tools/SRTM/src/     ←ソースプログラム

データの整備に必要なものは、

/mnt/disk1/Tools/SRTM/wget_strm.sh ← SRTMデータをダウンロード/mnt/disk1/Tools/SRTM/melt.sh    ← ZIPを解凍/mnt/disk1/Tools/SRTM/make_sea_link.sh ←海面のみの場合はリンクを張る

です。北緯 34-46度, 東経 132-144度くらいまでのデータは準備してある。まず、コンパイルは、

$ cp -r /mnt/disk1/Tools/SRTM/ ./

$ cd ./SRTM/src/

$ make

でコンパイルはOK。作成される実行ファイルは”step4, makeps”。以下、step4を使用した場合の namelistの設定例(step4.dx1.sh)。(シェルの中で直接パラメータを設定するので、domaincardは必要ない)

---------------------------------------------------------

export bindir="../bin"

${bindir}/step4 <<EOF

&namdir

filedir_topo=’/mnt/disk1/Tools/SRTM/data/’

&end

&namdom

NX =102, NY =102,

NPROJC=’LMN ’,

DX = 1000.0, DY = 1000.0,

SLAT = 32.5, SLON = 140.0,

18

Page 20: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

FLATC = 38.16, FLONC = 140.72

&end

EOF

---------------------------------------------------------

gtopo30を使って 1kmの地形を作った場合と SRTMを使って 1kmの地形を作った場合ではやや地形が異なります。どちらが正しいかは各自でご判断を。

(m)

SRTM gtopo30

図 3.2: SRTM(左図)と gtopo30(右図)による地形。

3 地形の読み込み・描画・チェックさて、作った地形が正しいかどうかチェックしたい場合はどうするか?当たり前ですが、作った地形データを読んで確かめればいいです。あるいは、gradsで表示させることも可能です。形作成ツールのコンパイル・使い方を参照。地形や初期値・境界値のフォーマットは”Nhm/Doc/Jp/fileformat/inputfile format.html” を見ましょう。あるいは以下で確認。http://wind.geophys.tohoku.ac.jp/ sawada/Nhm manual/inputfile format.html#mfhm

地形ファイルは標準的な grads形式ではありません。ご注意を。おまけに org(地形)+ ptgrd(土地利用,出力はしていない)を読むツールは/mnt/disk1/Tools/topo edit/script/read.sh

/mnt/disk1/Tools/topo edit/src/read topo2.f90

地形を読んで grads形式のファイルを出力。ctlは自分で作る。ちなみに”read.sh”

はファイルをリンクするだけで良い。格子数はプログラムで地形ファイル(org)から読み込む。入力ファイルと装置番号。

19

Page 21: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

4. 地形・土地利用データの変換 OPTIONAL

fort.25: ptgrd

fort.29: org

出力ファイルは以下の通り。

zs_check.grd: zs, sl, lat, lon のみ grads形式で出力。  そのほかは必要に応じて出力すること。check.ctl: zs, sl, lat, lon のみの grads用 ctlファイル。

ctlファイルは作成されるが変数に応じて編集すること。緯度経度は適当で(どうせ座標系が緯度経度に合わないので)。”gs/topo.gs”で標高は一応描けます。以下、例。

図 3.3: 作成した地形。

4 地形・土地利用データの変換 optional

この作業は詳細な土地利用を使用したいときのみ必要です!!

かつ、初期値・境界値 (org, ptgrd)を作成してから実行すること!!

初期値・境界値の作成をすると、地形ファイルも修正される(境界付近でスムージング)。これを読み込んで、土地利用データを利用する場合に以下のシェル・プ

20

Page 22: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

ログラムを使用。/mnt/disk1/Tools/topo edit/script/topo edit.sh

/mnt/disk1/Tools/topo edit/src/topo edit.f90

これは”初期値・境界値の作成”を行って後で行うこと。

入力ファイルは org, ptgrdの 2つ、それぞれ装置番号 29, 25にリンクすること。

fort.25: ptgrd (土地利用データ:蒸発効率、熱拡散係数、地表面熱容量、アルベド、地表面識別、都市熱、熱粗度長、1層目の熱拡散係数:io_flag=1のみ含む)。

fort.29: org (地形データ:標高、粗度、緯度経度など)。tohoku_veg.grd: 国土地理院で配布されている土地利用データ (3次メッシュ~100m)を 1byteの grads形式に変換したもの。

出力されるファイルは、

fort.35: ptgrd_new (ptgrdを修正したもの)

fort.39: org_new (orgを修正したもの)

で、上記のようにリンクしている。必要に応じて適当に名前を変更。○ 使用される値について修正される変数は粗度 (roughl)、蒸発効率 (wet)、熱拡散係数 (fktg)、地表面熱容量 (roctg)、アルベド (albed)の 5つです。これらの値は topo edit.f90の中のsubroutine (veg interp) で決められます。国土地理院の土地利用分布は 16種類に分かれているが、実質使用されているのは 11種類 (海も含む)。それぞれの土壌に応じて適当に値を決めています (参考にしたのは近藤純正先生の教科書、地表面に近い大気&水環境の気象学、及び講座の修論など)。もし、自分好みの地形・土地利用ファイルを作成したいなら”veg interp”の数字を変更すればいいだけです。見ればすぐ分かるはず。○ 使用の際の注意事項・日本域限定 (境くんがデータ作成)

・元データは100mに対し、作成するデータが1000mの場合、適切な補間 (平均)が必要です。理由は考えると分かりますよね、きっと。現在は 1500m格子用に代表的な地形の値を使用しています。これを変更するにはソースプログラム中の”dx=1500”

を”dx=1000”などと変更して下さい。

#!/bin/sh

### data directory (初期値・境界値データのあるディレクトリ)

21

Page 23: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

5. SIB用の土地利用データの作成 OPTIONAL

datadir=/mnt/sky1/sawada/initdata_102dx1.5_00UTC_20061204

export F_UFMTENDIAN=big ←バイナリの形式、要注意。

### compile & run (プログラムのコンパイル、ifortの場合"-assume byterecl"

は必要)

cd ./src/

if [ ! -f topo_edit ]; then

ifort -check -traceback -assume byterecl -o topo_edit topo_edit.f90

fi

##### links

if [ -f fort.25 ]; then rm fort.25 fort.29 ; fi

#### original topo & ptgrd file

ln -s $datadir/org.20040829 fort.29 ←地形、粗度データln -s $datadir/ptgrd.20040829 fort.25 ←土地利用 (アルベド、wetnessなど)データ## land-use data (vegetation data)  (国土地理院の土地利用データ)

ln -s /mnt/raid1200/topo_data/iveg_all.grd fort.60

./topo_edit ←変換ツールの実行

#### rename

## fort.35: new ptgrd file (land-use)

## fort.39: new topography file

mv fort.35 ptgrd_new ←モデルに使用する新しい土地利用データmv fort.39 org_new  ←モデルに使用する新しい地形データ

## clean

rm -f topo_edit fort.25 fort.29 fort.60 ←不要なファイルの消去

5 SiB用の土地利用データの作成 optional

この作業は SiBを使用したいときのみ必要です!!

はじめに、”/Nhm/Module/Src/PREPOST/nhmcst sib.f90”の284行目を以下のよ

22

Page 24: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

うに修正。まあ、好みの問題ですが。

!filein(1:19) = ’gtopo/land_sea_1km_’

filein(1:19) = ’ls1km/land_sea_1km_’

で、次はツールのコンパイル。

$ cd Nhm/Module/Mk

$ make nhmcst_sib_n01 ← SiB用の入力ファイルを作成するツール&地形作成

正常に nhmcst sib n01ができたら、以下のようなスクリプトを実行。

----- 以下、script -----------------------------------------------------------

###

bindir=Nhm/Module/Bin

### make link

ln -s /mnt/tree2000/land-data/gtopo30/ gtopo

ln -s /mnt/tree2000/land-data/glcc/ ls1km ←ファイルの修正が必要ln -s /mnt/tree2000/land-data/sib/gsib2_0ll.img glcc ←SiB用のデータ

#--- make topography data for NHM inpt ----------

export F_UFMTENDIAN=big

${bindir}/nhmcst_sib_n01 <<EOF

&namdom

NX = 102, NY = 102

NPROJC=’LMN ’,

DX = 5000.0, DY = 5000.0,

SLAT = 32.50, SLON = 140.00,

FLATC = 38.16, FLONC = 140.72,

&end

&namgrmax

grmax = 0.15,

mode_zs_smooth = ’2.0 average’

&end

&namgrdi

dxi=5000.0, dx1i=5000.0, dx2i=5000.0, ix1i=10, ix2i=20,

23

Page 25: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

6. 平らな地形の作成 -理想化実験用-

dyi=5000.0, dy1i=5000.0, dy2i=5000.0, iy1i=10, iy2i=20

&end

EOF

----- ここまで -----------------------------------------------------------

これを実行すると、GLCC SiBというファイルが作成される。必要なファイルはこれで出来上がり。以下、パラメータカードの節をそのまま。mswsys(1)が地表面過程のパラメータ。一の位が”9”の時、SiBを使用。SiBを使用するには以下の 2つのファイルが必要。fort.32: SiBに必要なデータ (GLCC SiB)、imt glcc sib(default:32)

fort.XX: SiBに必要なデータ (gsm.veg.v12.d)、imt gsm9603 veg=XX

などを設定する必要があります。gsm.veg.v12.dはGSM-MJ98で使用する SiB用の入力ファイル(小玉くんより)。NHMの実行シェルの中に以下のようにリンクを追加、

ln -s XXXX/GLCC-SiB fort.32

ln -s /mnt/tree2000/land-data/sib/gsm.veg.v12.d fort.42

及びパラメータカード (namelist)を設定すること。

&NAMFIL

IMT_MRI=62,ISTR_MRI=180,IMT_MRI_SIB=72,ISTR_MRI_SIB=180,

....

IMT_GLCC_SIB=32, ←追加IMT_GSM9603_VEG=42 ←追加

&END

6 平らな地形の作成 -理想化実験用-

理想的な環境場で実験を行いたいとき、例えば海上とか、地形なしとか。そのような時のための地形作成ツール。基本的に、jmanhmに付属しているテストケース (線形山岳波、地形性降水)で使用される地形ファイルと同じ。必要なファイルは、

/mnt/disk1/Tools/topo make/src/make topo.f90

/mnt/disk1/Tools/topo make/script/topo ideal.sh

の 2つ。以下にシェルの一部を示す。

24

Page 26: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

----- 以下、script -----------------------------------------------------------

cd $srcdir

ifort -assume byterecl -convert big_endian -o make_topo make_topo.f90

 ←コンパイルif [ ! -f make_topo ]; then

echo ’compile failed !!!’

exit

fi

cp make_topo $bindir/

cd $topodir

#--- make topography data for NHM inpt ----------

${bindir}/make_topo <<EOF

&NAMGRD

nx=102,ny=102,     ←計算領域 (地形)の格子数dx=10000.0,dy=10000.0, ←格子サイズslon=140.0,slat=15.0,  ←計算領域 (地形)の中心位置itype=0         ← f平面 (0)か b平面 (1)の選択

&END

EOF

----- ここまで -----------------------------------------------------------

自分で理想化した地形を作成したいときに参考にして下さい。地形ファイルのフォーマットは非常に簡単であることが分かるはずです。プログラムは 100行も無いです。

7 プログラム地形作成に使うプログラム。

step2-5.f90 : 本体、データ (gtopo30, glcc)の読み込みinterph2.f90: gtopo30の内挿計算latlon.f : 格子での緯度経度の計算latlon2.f : 格子での緯度経度の計算(半格子ずれ)

地形データの読み込みと PSファイル作成に使うプログラム。read topo make ps.f90 : 地形データ(topo or org みたいな名前)の読み込み

25

Page 27: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

7. プログラム

plotpswk.f : postscript を fortranで作成するためのライブラリ。気象研究所技術報告 第 44号参照このプログラムのみ置いているディレクトリが違います(srcplt)。

26

Page 28: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

27

第4章 初期値・境界値の作成

NHMで nesting simulation(downscaling simulation)を行うためには、初期値と境界値が必要。いろいろバージョンがあるので(ganal, ranal, manal, ncep, era,

fnl, gpv)、何を使用しているか把握しておくこと。初期値作成 (mkinit)

が最新。今後はこちらを主にメンテナンスします。(2009/05/07)

————————————————————

To run nesting (downscaling) simulation using NHM, initial and boundary data

are required. We can make initial and boundary data from various kind of data

(ganal, ranal, manal, ncep, era, jra, fnl, gpv), and then we can perform nesting

run with these data. Please see here Of course, we can use output of nhm as an

initial and boundary data. This simulation is called self-nesting.

1 初期値・境界値に必要なデータの準備以下の 3種類のデータを揃える。

• 3次元の大気データ(MSM/RSM/GSM-GPVなどの予報値, MANAL,GANAL

などの客観解析、JRA,ERA,NCEPなど再解析)

• sstデータ(OISST、MSST、MGDSST)

• 作成した地形データ

■ 大気の3次元データGPVデータは、筑波大のサーバ(http://gpvjma.ccs.hpcc.jp/ gpvjma/archive.html)あるいは、京都大のサーバ(http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/original)からMSM/RSM/GSMの予報値をダウンロードできる。RSM-GPVは(確か)Nusdus形式のためそのままでは使えない。ここではNusdas

→ netcdf形式→ grads形式

Page 29: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. 初期値・境界値の作り方-統一版 (MKINIT) NEW

と変換して中間ファイルにつなげる。近年のMSM/GSMは grib2形式なのでwgrib2が必要。JRA, ERA, NCEP の再解析データは講座内にアーカイブされている。MANALもある程度アーカイブされている。■ SSTデータOISSTは http://podaac.jpl.nasa.gov/products/product119.html からダウンロード可。講座内なら /mnt/raid2000/global data/oisst/ にアーカイブされている。ちなみに ds3では木~土以降はその前の週の水曜日の日付」のデータをダウンロードしている。MSSTは http://www.ocean.caos.tohoku.ac.jp/%7Emerge/sstbinary/actvalbm.cgi

MSSTに関しては「2日前」のデータをダウンロードするようにしています。JMA-

SSTは http://goos.kishou.go.jp/rrtdb/database.html

ただし、ユーザ登録が必要。■ 地形データ(3章の)地形の作成を参照。地形ファイルはMSM-GPVや JRAなどのデータに使用された地形と滑らかにつながる様、境界付近で処理します。

■ ダウンロード用のシェルMSM-GPVをダウンロードするスクリプトのサンプル。”/mnt/disk1/Tools/dl GPV/script/download gpv msm.sh”

基本的にはコマンド”wget”をループで回しているだけ。ds3用のスクリプト。

sh dl GPV/wget gpv past.sh 00UTC 20061012 20061011 10 12 10 11 20061011

20061011

とすればOK.

2 初期値・境界値の作り方-統一版 (mkinit) new

■ 概要 (2009/05/07)NHM用の初期値・境界値ファイルを作成するツール。○ 以前の初期値作成から、手順を簡略化。旧手順:MSM (MANAL/JRA/ERA)→中間ファイル→初期値 (uvptqファイル)

新手順:MSM (MANAL/JRA/ERA)→初期値 (uvptqファイル)

と、中間ファイルの作成を省略。○ これ 1つでいくつかのデータ (MANAL, MSM, JRA, ERA)を変換可能。

28

Page 30: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 4. 初期値・境界値の作成

かつ、namelist(fin type:実行時に与えるパラメータ)によって、使用する大気データをMANAL, MSM, JRA, ERA-interim の 4つから選択できる。ツールを使い分ける必要がない。■ ツールを動かすのに必要なファイル・地形ファイル (topo make参照) (fort.51)

・大気の 3次元データファイル (MANAL, MSM-GPV, JRA, ERA) (プログラムの中で指定されている)

・SSTファイル (oisst, msst, jmasst) (fort.200以降)

の3つ。MANALは有料 (講座内に一部アーカイブ)。MSMは一部アーカイブ、JRA

は一応フリー (講座内なら 1979年から最近 3日前くらいまでアーカイブ)、ERA-

interimは一応フリー (講座内なら 1989年から 2007/12/31までアーカイブ)。各データに対する地形ファイルも必要(実質、役に立っているかやや不明)、これは用意済。■ 必要なツール”/mnt/disk1/Tools/mkinit/”下にソースプログラム、シェル一式がある。stream,

breeze からのみアクセス可。以下、各ディレクトリについて。

ctl/ : MSM-GPV用の ctlファイル (gradsで可視化するのに使用)

script/ : データ変換を実行するシェルsrc/ : データ変換に使用するプログラムtopo/ : MANAL, MSM, JRA, ERAの地形ファイルと ctlファイル

■ 出力されるファイル

1. 初期値 (+境界値)ファイル (fort.23) (uvptq:風、気温、水蒸気 etc)

2. 地表面パラメータファイル (fort.25) (ptgrd:アルベド, wetness, 熱容量 etc)

3. 地形ファイル (fort.52) (org:標高、海陸、緯度経度、粗度)

それぞれのフォーマットの詳細はhttp://wind.geophys.tohoku.ac.jp/ sawada/Nhm manual/inputfile format.html

から。ここではそれぞれ、uvptq:mtuvの 1000位の値が”2” のフォーマットを使用。ptgrd:第 1レコードのみ。org:第 2レコードまで。その他、いくつか確認用にファイルや一時的なファイルが出力される。

29

Page 31: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. 初期値・境界値の作り方-統一版 (MKINIT) NEW

■ 手順以下の手順の中で、該当する部分を実行するだけでOK.

講座内なら使用するデータが揃っているので、シェルのパス (ディレクトリの位置)

やパラメータ (予報時間や解像度)を変更するだけで初期値を作成できるはず。○ MANALを使用する場合

1. gribを grads形式に変換 :sh grib2grads manal.sh

2. 初期値・境界値の作成 :sh sample manal.sh

○ MSM-GPVを使用する場合 (再現実験用~hindcast)

1. msmから初期値の取り出し:sh cnv grads hind.sh 2008081012

2. 初期値・境界値の作成 :sh sample msm.sh

○ JRAを使用する場合

1. 初期値・境界値の作成 :sh sample jra.sh

○ ERAを使用する場合

1. 初期値・境界値の作成 :sh sample era.sh

違う部分は、データ下準備の作業 (grib2grads manal.sh, cnv grads hind.shなど)

のみ。後半は同じ。無事できたら、モデル実行に。■ 各処理の補足上記のシェルの補足説明です。必要な部分を参照して下さい。中身については、実際にシェルを見た方が早いかと。○ grib2grads manal.sh:

grib形式のMANALを grads形式に変換。ランベルト図法。指定した日付の範囲を自動で変換する。sdate: 変換を始める日付を 10桁で表記 (YYYYMMDDHH)

edate: 変換を終える日付を 10桁で表記 (YYYYMMDDHH)

・シェルでの設定の仕方の例sdate=2004070100

edate=2004070212

というように日付を書く。この場合 2004年 7月 1日 00UTCから 2004年 7月 2日12UTCの36時間分 (13個のファイル)を変換。講座内 (/mnt/tree2000/manal data)

にデータがあれば即変換できる。データの時間間隔 (3 or 6 時間)に注意。

30

Page 32: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 4. 初期値・境界値の作成

date=‘date -d "${ymd} ${hr}:00 6 hour" +%Y%m%d%H‘

の”6 hour”を必要に応じて”3 hour”に変更。○ cnv grads hind.sh:

grib2形式のMSM-GPVを grads形式に変換。msm-gpvの解析値ならある程度用意済み@講座内。なので、即使えるはず。○ cnv grads fcst.sh:

grib2形式のMSM-GPVを grads形式に変換。上記の”hind”との違いは使用するデータに予報地を含むこと。msm-gpvの解析値・予報値ならある程度用意済み@講座内。なので、即使えるはず。○ sample manal.sh:

grads形式に変換されたmanalデータを読み込んで、初期値・境界値 (uvptq)を作成。その他、地表面パラメータファイル (ptgrd),地形ファイル (org)も作成し、合計 3つのファイルを作成。地形ファイルは側面で親 (MANAL, MSM, JRA, ERA)

の地形とつながる様に処理されたもの。uvptqには初期値の後に境界値 (初期値としても使用可)が同様の形式で含まれる。やっている事は、入力データから計算領域の切り出し (水平内挿+鉛直内挿)、鉛直はモデル座標に合わせて変換。相対湿度は水蒸気混合比に変換。tin(地面温度+海面水温), ptgrd(地表面温位)なども含まれる。

○ sample msm.sh:

grads形式に変換されたmsm-gpvデータを読み込んで、初期値・境界値 (uvptq)

を作成。その他 sample manal.shと同様。○ sample jra.sh:

grads形式に変換された jraデータを読み込んで、初期値・境界値 (uvptq)を作成。その他 sample manal.shと同様。jraデータは用意済み@講座内。○ sample era.sh:

grads形式に変換された eraデータを読み込んで、初期値・境界値 (uvptq)を作成。その他 sample manal.shと同様。era-interimデータは用意済み@講座内。■ プログラム何らかの修正・改良をしたい方向き。vardef.f90 : 実数の定義cons12.f90 : 定数宣言grd parm.f90 :

nflutlty3 c.f90 : 入出力や補間のサブルーチンmapproj.f90 : 座標変換 (緯度経度⇔格子点)などのサブルーチンgrdsub c.f90 :

31

Page 33: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. 初期値・境界値の作り方-統一版 (MKINIT) NEW

nfl uvptq.f90 : 本体、中間ファイルを読み込み、初期値境界値の出力read data.f90 : 入力データ (MANAL, JRAなど)の IO処理sst io tool.f90 : msstやOISST, JMA-SSTを読むmaxmin3sl.f90 : 最大値・最小値の出力

サブルーチンの殆どは”Module/Src/PREPOST/”にあるプログラム群を使用。一部変更。中間ファイルは作成しない。read data.f90で対応する処理をしている。対応していないデータ (NCEPなど)を初期値として使いたい場合、主にこのプログラムに追加すればOK.

■ namelistの説明

!----- ここから -------------------------------------------------

./nflmsm2008 <<EOF

&namnhmi

nx=100, ny=100, nz=38, ←格子数sloni=140.84, slati=38.26, ←基準緯度経度 (地形ファイルと同じものを使

用)

iwdth=5, imerg=5, grmax=0.2 ←地形の処理の仕方&end

&namgrdi

dxi=5000.0, dx1i=5000.0, dx2i=5000.0, ix1i=10, ix2i=20, ← x方向の格子間隔

dyi=5000.0, dy1i=5000.0, dy2i=5000.0, iy1i=10, iy2i=20, ← y方向の格子間隔

dzi= 760.0, dz1i= 40.0, dz2i= 760.0, iz1i=38, iz2i=38 ← z方向の格子間隔&end

&namnest

ktst=0, kten=15, ktdel=3, ←計算開始時間、終了時間、データ間隔 (固定)

&end

&namfile ← namelistの名前を変更した!注意fin_type=’manal’ ←使用するデータ (manal, msm, jra, era)

&end

&namsst

isw_sst=0, type=’FIX’ ← sstの種類、固定か時間変化するか&end

32

Page 34: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 4. 初期値・境界値の作成

EOF

!----- ここまで -------------------------------------------------

・ファイルのリンクの仕方。ln -s topo msm.grd fort.12 (MSMの地形ファイル)

ln -s org 100dx5 fort.51 (作成した地形ファイル)

ln -s oisst.20070704 fort.200 (sstファイル)

・SSTファイルは必要分にリンクすること。下記は書き方の例。msstの例。ln -s msst2007070412.raw fort.200

ln -s msst2007070512.raw fort.201

ln -s msst2007070612.raw fort.202

・mgdsst(jmasst)へのリンク例。ln -s mgdsst.Sep04 fort.200

ln -s mgdsst.Sep05 fort.201

ln -s mgdsst.Sep05 fort.202

ln -s mgdsst.Sep05 fort.203

ln -s mgdsst.Sep05 fort.204

・isw sstの設定。isw sst=0: msstを使用isw sst=1: oisstを使用isw sst=2: mgdsst(jmasst)を使用isw sst=3: mwir-sstを使用 (対応がやや怪しい)

■ エラー、変換ミス関係・エンディアン (endian)の設定ミス (little/big)。地形ファイル、入力ファイル、SST

ファイルそれぞれ endianが異なったりします。ファイルが読めない、というエラーの場合にありがち。・コンパイラのオプション設定ミス (ifortの場合, -assume bytereclが必要)

・文字コード (euc, jis, sjis, utf8)や改行コード (CR, LF)のミス。nkf, iconv

・計算領域が使用するデータのカバー域をはみ出ている。メッセージが出力されるはず。・ファイルのリンク先が間違っている。エラーメッセージに装置番号が出力されるはず。・シェルが止まらない (無限ループする)→ grmaxの値を大きくする (0.4-0.5)

33

Page 35: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3. MSM-GPVでの初期値・境界値の作り方 ややNEW

3 MSM-GPVでの初期値・境界値の作り方 ややnew

■ 手順・msm-gpvから初期値作成の手順。複数のデータから初期値 (解析値)のみ取り出す。再現実験用。

1. msm-gpvのダウンロード :  dl GPV/download gpv msm.sh

2. msmから初期値の取り出し :  dl GPV/cut anl.sh

3. 気圧面と地表面データの結合:  dl GPV/combine p s.sh

4. 中間ファイルの作成 : mkmedi msm/script/readmsm anl.sh

5. 初期値・境界値の作成 : mkinit msm/script/mkinit.sh

・初期値+予報値を取り出す。予報実験用。

1. msm-gpvのダウンロード :  dl GPV/download gpv msm.sh

2. msmから初期値の取り出し :  dl GPV/grib2grads.sh

3. 気圧面と地表面データの結合:  dl GPV/combine p s.sh

4. 中間ファイルの作成 : mkmedi msm/script/readmsm anl.sh

5. 初期値・境界値の作成 : mkinit msm/script/mkinit.sh

違う部分は、使用するデータ、つまりmsm-gpvからの切り出し方のみ。後半は同じ。ファイルのフォーマットは全く同じ。○ 各処理の補足

download gpv msm.sh:

MSM-GPVデータのダウンロード。指定した日付の範囲を自動でダウンロードする。sdate: ダウンロードを始める日付を 10桁で表記 (YYYYMMDDHH)

edate: ダウンロードを終える日付を 10桁で表記 (YYYYMMDDHH)

・シェルでの設定の仕方の例sdate=2007070100

edate=2007070212

というように日付を書く。この場合 2007年 7月 1日 00UTCから 2007年 7月 2日12UTCの 36時間分 (13個のファイル)をダウンロード。

34

Page 36: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

cut anl.sh:

シェルの日付設定の仕方は download gpv msm.shと同じ。combine p s.sh:

msmの気圧面と地表面データの格子数と格子サイズは異なるので、合わせる必要がある。それぞれの格子数は気圧面:241x253 (0.125 x0.100), 16層, 3時間おきの予報値地表面:481x505 (0.0625x0.050), 1層, 1時間おきの予報値なので、気圧面に合わせて地表面データを間引く。出力されるファイルは、u(東西風), v(南北風), t(気温), r(相対湿度), z(高度), p(地表面気圧)の 6つ。

readmsm anl.sh:

切り出した 6つのMSMデータを 1つのファイル (medi)にまとめる。その際に時刻の設定などをする。作成される中間ファイルには全領域データが 3時間おきに含まれる。ツールをまとめるのが面倒だったため、古い形式を引き継いでいる部分。”grads形式→初期値・境界値”とすればすっきり&分かり易くなるのですが…いずれ削除予定。が、grib2→ nuadas形式にできるなら (ので)、”nhmgrd n01”を使えばできるんですがね。これらのツールの存在意義が問われます。namelistは前節参照。

mkinit.sh:

中間ファイル (medi)を読み込んで初期値・境界値データ (uvptq)を作成。その他、地表面パラメータファイル (ptgrd), 地形ファイル (org)の計、3つのファイルができる。やっている事は、msmデータから計算領域の切り出し (水平内挿+鉛直内挿)、鉛直はモデル座標に合わせて変換。相対湿度は水蒸気の比湿に変換。tin(地面温度+海面水温), ptgrd(地表面温位)なども含まれる。uvptqには初期値の後に境界値 (初期値としても使用可)が同様の形式で含まれる。■ 必要なファイル

1. msm-gpvファイル(気圧面と地表面)

2. sstファイル

3. 作成した地形とmsmの地形ファイル

○MSM-GPVの気圧面と地表面データ:以下のようなファイル気圧面: Z C RJTD 20080722090000 MSM GPV Rjp L-pall FH00-15 grib2.bin

35

Page 37: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3. MSM-GPVでの初期値・境界値の作り方 ややNEW

地表面: Z C RJTD 20080722090000 MSM GPV Rjp Lsurf FH00-15 grib2.bin

筑波大のサーバ: http://gpvjma.ccs.hpcc.jp/ gpvjma/archive.html

京都大のサーバ: http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/original

○ SSTデータ:以下の sstデータに対応、しているかも。namelist(namsst: isw sst)で選択可。作成期間分のデータを準備すること。oisst: 1度格子、1週間おき、全球。対応済み。merged-sst: 0.05度格子、1日おき、日本域。対応済み。mgt-sst(jma-sst): 0.25度格子、1日おき、全球。おそらく対応済み。mwir-sst: 約 10km、1日おき、全球。おそらく対応済み。

○地形データ:以下の 2つのファイルMSM-GPVで使用される地形ファイル (TOPO.MSM 5Kを編集したもの)

作成した地形ファイル (org)

(3章の)地形の作成を参照。■ 出力されるファイル

1. 初期値 (+境界値)ファイル (uvptq:風、気温、水蒸気 etc)

2. 地表面パラメータファイル (ptgrd:アルベド, wetness, 熱容量 etc)

3. 地形ファイル (org:標高、海陸、緯度経度、粗度)

それぞれのフォーマットの詳細はhttp://www.mri-jma.go.jp/Project/Kashinhi seasia/nhminfo/nhmdoc/Doc/Jp/index.html

から。ここではそれぞれ、uvptq:mtuvの 1000位の値が”2” のフォーマットを使用。ptgrd:第 1レコードのみ。org:第 2レコードまで。その他、いくつか確認用にファイルや一時的なファイルが出力される。■ プログラム

readmsm2007.f90: grads形式のファイルを読み込み、中間ファイルを出力vardef.f90 : 実数の定義cons12.f90 : 定数宣言grd parm.f90 :

nflutlty3 c.f90 : 入出力や補間のサブルーチンmapproj.f90 : 座標変換 (緯度経度⇔格子点)などのサブルーチンgrdsub c.f90 :

36

Page 38: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

nflmsm2008 sst.f90 : 本体、中間ファイルを読み込み、初期値境界値の出力sst io tool.f90 : msstやOISST, JMA-SSTを読むmaxmin3sl.f90 : 最大値・最小値の出力

以前のバージョン (2007年)から変更。サブルーチンの殆どは”Module/Src/PREPOST/”

にあるプログラム群を使用。一部変更。

■ mkinitのnamelistの説明

!----- ここから -------------------------------------------------

./nflmsm2008 <<EOF

&namnhmi

nx=100, ny=100, nz=38, ←格子数:作成した地形ファイルに合わせるsloni=140.84, slati=38.26, ←基準緯度経度:作成した地形ファイルに合わ

せるiwdth=5, imerg=5, grmax=0.2 ←地形の処理の仕方

&end

&namgrdi

dxi=5000.0, dx1i=5000.0, dx2i=5000.0, ix1i=10, ix2i=20, ← x方向の格子間隔

dyi=5000.0, dy1i=5000.0, dy2i=5000.0, iy1i=10, iy2i=20, ← y方向の格子間隔

dzi= 760.0, dz1i= 40.0, dz2i= 760.0, iz1i=38, iz2i=38 ← z方向の格子間隔&end

&namnest

ktst=0, kten=15, ktdel=3, ←計算開始時間、終了時間、データ間隔 (固定)

&end

&namrom

nproo=’LL ’ ←変更必要なし (MSM-GPVは緯度経度データ)

&end

&namsst

isw_sst=0, type=’FIX’ ← sstの種類、固定か時間変化するか&end

EOF

37

Page 39: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3. MSM-GPVでの初期値・境界値の作り方 ややNEW

!----- ここまで -------------------------------------------------

・ファイルのリンクの仕方。ln -s msm medi fort.11 (中間ファイル)

ln -s zs ls2.dat fort.12 (MSMの地形ファイル)

ln -s org 100dx5 fort.51 (作成した地形ファイル)

ln -s oisst.20070704 fort.200 (sstファイル)

・SSTファイルは必要分にリンクすること。下記は書き方の例。msstの例。ln -s msst2007070412.raw fort.200

ln -s msst2007070512.raw fort.201

ln -s msst2007070612.raw fort.202

・mgdsst(jmasst)へのリンク例。ln -s mgdsst.Sep04 fort.200

ln -s mgdsst.Sep05 fort.201

ln -s mgdsst.Sep05 fort.202

ln -s mgdsst.Sep05 fort.203

ln -s mgdsst.Sep05 fort.204

・isw sstの設定。isw sst=0: msstを使用isw sst=1: oisstを使用isw sst=2: mgdsst(jmasst)を使用isw sst=3: mwir-sstを使用・namnestの設定。ktst:中間ファイルの初期値に対して、予報を開始する時間。通常は中間ファイル作成時と合わせる。kten:中間ファイルの初期値に対して、予報を終了する時間。通常は中間ファイル作成時と合わせる。ktdel:MSMのデータ間隔。”3”時間おき。古い場合は”6”時間おき。

■ エラー関係・エンディアン (endian)の設定ミス (little/big)

・コンパイラのオプション設定ミス (ifortの場合, -assume bytereclが必要)

・文字コード (euc, jis, sjis, utf8)や改行コード (CR, LF)のミス。nkf, iconvなどで変換。・計算領域がMSMのカバー域をはみ出ている。メッセージが出力されるはず。・ファイルのリンク先が間違っている。エラーメッセージに装置番号が出力されるはず。

38

Page 40: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

・シェルが止まらない (無限ループする)→ grmaxの値を大きくする (0.4-0.5)

4 MANALでの初期値・境界値の作り方 ややnew

2008/12/01に更新。前節のMSM-GPVを用いた初期値・境界値作成とほぼ同様のツールを使用。MANAL

を利用して初期値・境界値を作成。”/mnt/disk1/Tools/mkinit manal/”に必要なシェル、ソースプログラムがある。

1. sh script/grib2grads manal.sh ← gribを grads形式に変換

2. sh script/readmanal2007.sh  ←中間ファイルの作成

3. sh script/manal2nhm 2008.sh  ←初期値・境界値の作成

ソースファイルは/mnt/sky1/sawada/Nhm-v15/Tools/mkinit manal/src manal/*.f90

をコピーすれば良い(.f90のファイルのみ)。■grib2grads manal.sh以前のように、各変数ごとに分けずに、日付ごとに分ける。つまり、wgribですべての変数をそのまま変換するだけ。変換したファイルは必ず以下のような名前にすること(シェルをそのまま使えばよい)。m2003070100 ←年、月、日、時をそのまま名前につける。プログラムで直接ファイルを読むため、ファイル形式&名前は上記形式で。■ readmanal2007.sh以前のように各ファイルにリンクは張らない。export idir=$hmdir/manaldata/のように gribを gradsに変換したファイルの場所を指定するだけ。後は namelistの日付で勝手にファイルを拾う。■manal2nhm 2008.sh以下に、シェル(manal2nhm 2008.sh)の概要。必要なファイルは前節の mkinit msm と同様。

!----- ここから -------------------------------------------------

#------------------- compile -------------------------

cd ./src_manal/

ifort -O0 -assume byterecl sst_io_tool.f90 maxmin3sl.f90 grd_parm.f90 vardef.f90 cons12.f90 nflutlty3_c.f90 mapproj.f90 grdsub_c.f90 nflmanal2008.f90 -o nflmanal2008

39

Page 41: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

4. MANALでの初期値・境界値の作り方 ややNEW

### big_endian

export odir=/mnt/sky1/msst

ln -s ${odir}/msst2003070112.raw fort.200

ln -s ${odir}/msst2003070212.raw fort.201

ln -s ${odir}/msst2003070312.raw fort.202

ln -s ${odir}/msst2003070412.raw fort.203

ln -s ${odir}/msst2003070512.raw fort.204

ln -s ${odir}/msst2003070612.raw fort.205

export F_UFMTENDIAN="big:11,23,25,51,52,53,200,201,202,203,204,205,210,211"

./nflmanal2008 <<EOF

&namnhmi

nx=122, ny=122, nz=38,

sloni=140.00, slati=30.0,

iwdth=0, imerg=5, grmax=0.2

&end

&namgrdi

dxi=4000.0, dx1i=4000.0, dx2i=4000.0, ix1i=10, ix2i=20,

dyi=4000.0, dy1i=4000.0, dy2i=4000.0, iy1i=10, iy2i=20,

dzi= 760.0, dz1i= 40.0, dz2i= 760.0, iz1i=38, iz2i=38

&end

&namnest

ktst=0, kten=72, ktdel=6,

&end

&namrom

nproo=’LMN ’ ← MANALはランベルト図法&end

&namsst

isw_sst=0, type=’’

&end

40

Page 42: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

EOF

!----- ここまで -------------------------------------------------

namelistはmkinit msmとほぼ同様。また、以前のバージョンでは地表面の風 (us,vs@10m)がスカラー変数扱いになっているため、正しくありません。風成分は半格子ずらさないといけないので(staggard

格子 or Arakawa-C grid)。もちろん、大きな問題ではありませんが。■manalの概要メリット:日本域なら、10km格子の解析値を 2001年 3月~現在まで利用可。6 or

3時間おき。デメリット:当然日本以外は不可、年数が限られている。

■manal2nhm.shの修正個所(JRA,GANALやGPVと比べて)MANALは緯度経度座標ではなく、ランベルト図法のデータのため、プログラムの中で緯度経度を適切に計算する必要がある。具体的には、DELSM=10.e3 : MANALの格子サイズ(m) ⇔ 度ではない!

SLONM=140.0 : ランベルト図法の基準経度 ⇔ DELSMと同じではない!

XLONM=140.0 : MANALの基準経度 ⇔ 格子(1,1)の座標ではないXLATM=30.0 : MANALの基準緯度 ⇔ 格子(1,1)の座標ではないXIM=245.0 : MANALの基準経度の格子番号XJM=204.0 : MANALの基準緯度の格子番号これらの値を使って latlon というサブルーチンでランベルト図法での各格子での緯度経度を計算してくれる。

5 JRAでの初期値・境界値の作り方This tool is used for nesting simulation with JRA-25.

JRA25 or JCDAS を利用して初期値・境界値を作成。メリット:日本以外の全球どこでも、1979年~現在まで利用可。デメリット:格子が粗い(1.25度×1.25度×23層+地表面)数 kmまでダウンスケールするには 2,3重ネストは必要。解像度が同じ全球データ(ganalくらいかな?)なら使用可能。”/mnt/sky1/sawada/Nhm-

v15/Tools/mkinit jra/”に必要なシェル、ソースプログラムがある。JRA-25再解析 (+JCDAS)のデータは”/mnt/raid2000/JRA125/”の中にある。

41

Page 43: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

5. JRAでの初期値・境界値の作り方

JRAを用いた初期値作成の大まかな手順(2007/09/06)(how to make initial data using JRA-grads format data at our labs.)

1. sh script/read jra 2007.sh ←中間ファイルの作成

2. sh script/jra2nhm sst.sh ←初期値の作成

月や年をまたがってもOKのはずです。問題あったら連絡下さい。

※古いバージョンの場合の JRAを用いた初期値作成の大まかな手順。(how to make initial data using original JRA (grib format) data)

1. sh script/grib2grads jra.sh ←いずれ変更予定(grads形式で整備する予定)

2. sh script/readjra2006.sh  ←中間ファイルの作成

3. sh script/jra2nhm sst.sh  ←初期値の作成 (上記と同じ)

必要なデータはもちろん、JRA再解析 orJCDASと SSTデータ。

■ read jra 2007.shの実行に必要なこと以下、シェルの説明。最低限必要な部分だけ記述。

!----- ここから -------------------------------------------------

#!/bin/sh

export hmdir="/mnt/sky1/sawada/Nhm-v15/Tools/mkinit_jra"

export date=20070714 ←適当な日付 (名前に使うだけ)

export srcdir=${hmdir}/src_jra ←ソースファイルの場所export ifile=${hmdir}/jradata/jra.20070714 ←中間ファイルの名前export odir=${hmdir}/data/jra ←中間ファイルの出力ディレクトリ名export F_UFMTENDIAN="big:18"

cd ${srcdir}

ifort -assume byterecl read_jra_2007.f90 check_endian.f90 -o read_jra_2007

cp read_jra_2007 $odir/

cd $odir

./read_jra_2007 <<EOF

&namstdate ←初期値の開始時刻

42

Page 44: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

istdate(1)=2007,istdate(2)=7,istdate(3)=14,istdate(4)=0,istdate(5)=6

&end

&namendate ←初期値の終了時刻iendate(1)=2007,iendate(2)=7,iendate(3)=15,iendate(4)=0,iendate(5)=6

&end

&namnest ←作成する中間ファイルの時間ktst=0,kten=24,ktdel=6

&end

EOF

mv fort.18 ${odir}/jra_medi.$date ←出力される中間ファイルの名前!----- ここまで -------------------------------------------------

変更点は以下の 2点・入力ファイルにリンクを張る必要がなくなったこと・namelistから、データの読み込み時間 (namnndate)がなくなったこと

■ readjra2006.shの実行に必要なこと (旧)when you want to make initial data using original JRA data (grib format), this

script will be useful.

古いバージョン。入力ファイルの設定が必要。上記の新しいバージョンなら必要ない。必要な入力ファイルとその装置番号。各ファイルからこれらにリンクを張ること。ファイルは grads形式(直接探査形式)で、各変数ごとに準備。気圧面は23層。比湿は 12層のみ。

○入力データln -s ${ifile}.T_PRS fort.28 気圧面の温度ln -s ${ifile}.U_PRS fort.40 気圧面の東西風ln -s ${ifile}.V_PRS fort.52 気圧面の南北風ln -s ${ifile}.Z fort.64 気圧面のジオポテンシャル高度ln -s ${ifile}.RH_PRS fort.76 気圧面の比湿(12層のみ,相対湿度ではない!)

ln -s ${ifile}.P fort.88 海面気圧ln -s ${ifile}.T_2m fort.34 地表面(高度 2m)温度ln -s ${ifile}.U_10m fort.46 地表面(高度 10m)東西風ln -s ${ifile}.V_10m fort.58 地表面(高度 10m)南北風ln -s ${ifile}.RH_2m fort.82 地表面(高度 2m)比湿

■ jra2nhm sst.shの実行に必要なこと。必要な入力ファイルとプログラムで読み込むときの装置番号。各ファイルからこ

43

Page 45: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

5. JRAでの初期値・境界値の作り方

れらの装置番号にリンクを張ること。入力ファイルは基本的に”big endian”形式。

fort.11: JRAを使って作成された中間ファイルfort.12: 親 (JRA)モデルの地形、海陸分布fort.14: 親 (JRA)モデルの地形、使用していないので必要なしfort.51: 子 (inner)モデルの地形fort.200: OISSTの入力(装置番号 200以降、以下使い方の例)   ln -s oisst.20060726 fort.200

   ln -s oisst.20060802 fort.201

   ln -s oisst.20060809 fort.202

   ln -s oisst.20060816 fort.203

※OISSTデータの読み込みのバグを修正OISSTを読み込むとき、以前だと年をまたぐ場合 (e.x. 2004→ 2005)に処理が上手くいきませんでした (by Taku-chan)。それを適当に対処しました (2007/08/24)。修正したファイルは”ssmi sst.f”(ssmiの SSTを読むために作りましたが、現状は使用していません)。

○実行時に渡すパラメータ(namelist)の意味&NAMMAPO ←たぶんマップの設定、実質的に初期値の作成に関係ないはずSCALE=200.,FLSTP=30.,XSW=10.,YSW=10.

&END

&NAMROM ← map projection, LLNは緯度経度座標の意味NPROM=’LLN ’

&END

&NAMMAPI ← innerモデルの地形ファイルの図法の設定FLATSI=5.7, FLATNI=50.7, FLONWI=129.7, FLONEI=159.7, SCALEI=2000.,

SLONI=135.0, SLATI=32.5, FLSTPI=5., XSWI=20., YSWI=20., IFILEI=51,

NPROJC=’LMN’←ランベルト図法&END

&NAMORGI ← innerモデルの地形ファイルの設定FLATC=32.5, FLONC=135.0, DX=30000., DY=30000.,

THI=0.,NXIN=72, NYIN=72, IWDTH=$IWIDTH

&END

&NAMGRDI ← innerモデルの格子の設定DXI=30000., DX1I=30000., DX2I=30000., IX1I=10,IX2I=20,←X方向の格子DYI=30000., DY1I=30000., DY2I=30000., IY1I=10,IY2I=20,←Y方向の格子DZI=1120., DZ1I= 40., DZ2I=1120., IZ1I=38,IZ2I=38 ← Z方向の格子

44

Page 46: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

&END

&NAMNEST ←時間の設定KTST=0,  中間ファイルを使い始める時間KTEN=66, 中間ファイルを使い終わる時間KTDEL=6, 中間ファイルの時間間隔(h)&END

&namend1st ←中間ファイルの終了時刻(ここでは 2006年 8月 1日 24時)idate2(1)=2006,idate2(2)=8,idate2(3)=1,idate2(4)=24,idate2(5)=5

&end

5.1 プログラム

”/mnt/sky1/sawada/Nhm-v15/Tools/mkinit jra/”以下のファイルについて。readjra2006.f90: 本体。grads形式のファイルを読み込み、中間ファイルの出力 (旧)

read jra 2007.f90: 本体。JRAのファイルを読み込み、中間ファイルの出力 (真)

nfljra2006 sst.f: 本体。地形、中間ファイルを読み込み、初期値を出力。nflutlty2+2.f: 2次元内挿、鉛直方向の内挿、地形のスムージングなど。nflutnpd3.f: 座標系の変換(緯度経度⇔格子)など。”read jra 2007.f90”は”readjra2006.f90”を少し整理。”readjra2006.f90”は無駄に f90に書き換えてみる。自分が読みやすいように。いずれ中間ファイルを作らず、直接初期値を作成できるよう変更した方が楽かも。

6 中間ファイルの作成以下は、ds3用のmsm-gpvを用いた場合について簡単に記述。情報古いです。やることは 3つ。

1. ファイルの準備(rsm-gpv):  dl GPV/wget gpv past.sh

2. 中間ファイルの作成   : mkmedi/script/readrsm.sh

3. 初期値・境界値の作成  : mkinit/script/r2n 72dx24.sh

ds3の中にあるスクリプトを適切に書き換えれば、sh 4cast past pre.sh 00UTC 20061012 20061011 10 12 10 11 20061011 20061011

で上の 3つの作業&実行まで出来るっぽい。過去(2007/10/19)のds3はmsm-gpv

ではなく、rsm-gpvを使用していた。

45

Page 47: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

6. 中間ファイルの作成

シェルの使い方は以下の通り、sh $PREPRODIR/mkmedi/script/readrsm past.sh $SUFFIX $DATE t $DATE n

$mn t $dy t $mn n $dy n $DATE msst $DATE oisst

シェルの namelistの意味は、INIDATE: 用意したデータ (grads形式の各変数)開始時間 (UTC): 基準の日付となるISTDATE: 中間ファイルの開始時間 (UTC)

IENDATE: 中間ファイルの終了時間 (UTC)

時間の設定はUTC(協定世界時)であり、JST(日本標準時)ではないことに注意。例えば、2006年 10月 10日 00UTCの GPV-RSMをもとにして計算開始時間:

2006年 10月 10日 12UTC⇒ 計算終了時間:2006年 10月 11日 12UTC

&NAMNNDATE

INIDATE(1)=2006,INIDATE(2)=10,INIDATE(3)=10,

INIDATE(4)=00,INIDATE(5)=1

&END

&NAMSTDATE

ISTDATE(1)=2006,ISTDATE(2)=10,ISTDATE(3)=10,

ISTDATE(4)=12,ISTDATE(5)=1

&END

&NAMENDATE

IENDATE(1)=2006,IENDATE(2)=10,IENDATE(3)=11,

IENDATE(4)=12,IENDATE(5)=2

&END

&NAMNEST

KTST=0, KTEN=24, KTDEL=3,

&END

namelist:NAMNESTは以下の通り。

KTST=0, ←用意した中間ファイルの開始時間からの時間。KTEN=24, ←作成する中間ファイルの時間 (初期値からの予報時間)。KTDEL=3 ←用意したデータの時間間隔。

ISTDATEと IENDATEで設定された日付がKTST, KTEN, KTDELと合わない場合、readrsm2007.f90でエラーとなるように変更。プログラム

readmsm2007.f90: 本体、grads形式のファイルを読み込み、中間ファイルの出力

46

Page 48: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

(msm用)

readrsm2005.f(旧): 本体、grads形式のファイルを読み込み、中間ファイルの出力subfile.f: 使用していない中間ファイルのフォーマットソースファイルを見れば分かりますが…。readmsm2007.f90: subroutine readwrite を参照

integer :: ndate(5) ! 日付:年、月、日、時、曜日 (用意したデータの開始時間)

integer :: kt ! 初期値からの予報時間: time from initial date [hour]

integer :: nelm ! 要素数 (1): number of element

character(len=4) :: elm ! 要素名: element name

integer :: mdout ! 装置番号: device number of fortran

real(4) :: data(nx,ny) ! 出力変数write(mdout) ndate,kt,nelm,elm,data

7 初期値・境界値の作成シェルの使い方は以下の通り、

sh $PREPRODIR/mkinit/script/r2n 72dx24 past.sh $SUFFIX $DATE t $DATE n

$mn t $dy t $mn n $dy n $DATE msst $DATE oisst

情報が古いです。次節参照。を参照。namelistの設定の一部について(全部は面倒)

&NAMMAPI

FLATSI=0, FLATNI=0, FLONWI=0, FLONEI=0, SCALEI=2000.,

SLONI=140., SLATI=32.5, FLSTPI=5., XSWI=20., YSWI=20., IFILEI=51,

NPROJC=’LMN’

&END

&NAMORGI

FLATC=38.0, FLONC=138.0, DX=24000., DY=24000.,

THI=0.,NXIN=72, NYIN=72, IWDTH=$IWIDTH

&END

&NAMNEST

KTST=0, KTEN=24, KTDEL=3,

&END

&namend1st

47

Page 49: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

7. 初期値・境界値の作成

idate2(1)=2006,idate2(2)=10,idate2(3)=11,idate2(4)=12,idate2(5)=2

&end

SLON1, SLAT1 は基準緯度。地形ファイル作成時の値を使用。FLATC, FLONC は地形の中心位置。地形ファイル作成時の値を使用。KTST, KTEN, KTDEL は中間ファイル作成の時と同様でOK。namend1stは中間ファイルの終了時刻(あるいはそれ以降の時間ならとりあえず良し)。中間ファイルが 2つある場合に使用(よって、うちの講座では間違いなく使わない)。

初期値・境界値ファイルのフォーマット (uvptq)

最低限のフォーマットです。雲物理量をネストする場合は、ヘッダーにもう少し書き込まれます。もちろん、雲水なども書き込まれます。nflutlty3.f90: subroutine storuv を参照。

integer,intent(in) :: nx, ny, nz

real(4),intent(in) :: u(nx,ny,nz),v(nx,ny,nz),w(nx,ny,nz), &

& pt(nx,ny,nz),qv(nx,ny,nz), &

& ptgrd(nx,ny),ptgrdt(nx,ny),ptsea(nx,ny),pai(nx,ny)

real(4),intent(in) :: tin(nx,ny,4)

real(4),intent(in) :: pseam,pgrdm,ptopm

integer,intent(in) :: mtuv, kt

integer,intent(in) :: idate(5)

write( mtuv ) kt,mtuv,pseam,ptopm,idate,pgrdm

write( mtuv ) (((u(i,j,k),i=1,nx),j=1,ny),k=1,nz)

write( mtuv ) (((v(i,j,k),i=1,nx),j=1,ny),k=1,nz), &

& (((w(i,j,k),i=1,nx),j=1,ny),k=1,nz)

write( mtuv ) (((pt(i,j,k),i=1,nx),j=1,ny),k=1,nz)

write( mtuv ) (((qv(i,j,k),i=1,nx),j=1,ny),k=1,nz)

write( mtuv ) ptgrd,ptgrdt,ptsea,pai,tin

JMA-NHMでの初期値の読み込み方(日付)

pre.f90: subroutine nesting_initiation

call loaduv2(...kt,...idate,...)

call loaduvread1(ikt, mtuv, pseam, ptopm, idate, flgq, flgqn, flgv)

ios.f90: subroutine loaduv2(...kt,...idate,...)

48

Page 50: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

kt: 引数, idate: loaduvread1から入力ios.f90: subroutine loaduvread1(ikt, mtuv, pseam, ptopm, idate, flgq, flgqn, flgv)

read(mtuv) ikt, mtuvi, pseamd, ptopmd, idate

ikt: 初期値から読み込み, idate: 初期値から読み込みiktと kt(ktsto)が一致したところを初期値とする。

pre.f90: subroutine preparebd: 境界値の作成のため、必要な分の読み込みcall loaduv2()

○使用するファイルについて

PSDATA (fort.99) : 描画用 (A4サイズ、装置番号 20番を使用するという意味)

MAPJPN (fort.43) : 描画用 (日本の海岸線など、gnuplotで描けば分かる)

zs\_ls2.dat (fort.51) : RSMの標高データと海陸分布データ、要必要。msst${DATE_dby}12.raw : msstデータ (海面温度)、要必要。oisst.20070221 : oisstデータ (海面温度)、要必要。

PSDATA, MAPJPNは初期値・境界値を作成するのには必要ではない (但し、プログラムで読み込むのでリンクを貼らないとエラーが起きますが)。msst, oisstデータについては調べて下さいませ。○出力されるファイルについて

mv fort.23 uvptq ←初期値・境界値データmv fort.25 ptgrd ←地表面パラメータデータ(wetness, fktg, albed...)mv fort.52 org ←地形ファイル(側面付近でスムージング)mv fort.53 sst ← SSTデータ(使用していない)#mv fort.60 nfl.ps ←初期値・境界値の図(多分引っかかる)mv fort.36 ganal_average_p.txt ←入力(RSM)の平均気圧のモニタmv fort.620 sst_default ←???mv fort.630 sst_oiv2 ←???

8 2重(セルフ)ネストの仕方・NHMの出力とのつなげ方 (self-nesting, or downscaling) new

2009/1/28 renew.

This is a guidance for nesting with nhm-output (we call this self-nesting, or down-

scaling simulation).

49

Page 51: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

8. 2重 (セルフ)ネストの仕方・NHMの出力とのつなげ方 (SELF-NESTING, OR DOWNSCALING) NEW

■ 手順$ sh nest.sh

シェルを適切に設定後、実行するだけ。シェルの中身は下記に。moving domain用のシェル。$ sh nest moving test.sh

シェルを適切に設定後、実行するだけ。”imd sw=2” の時は専用プログラム (可変の移動速度用)が必要。試したい方は僕まで。テスト版なので。地形があると駄目。海上のみ。シェル、ソースプログラムは以下のディレクトリにある。

/mnt/disk1/Tools/nest/

あるいは、/mnt/disk1/Tools/nest/ (stream からのみ)

■ 必要なファイル必要な入力ファイルは 2つ。各ファイルから適切な装置番号にリンクを張ること。

fort.12: 親 (parent or outer)モデルの出力fort.51: 子 (child or inner)モデルの地形(nestingするための地形)fort.49: 親モデルの SST (現在は特に使用していない,修正すべき?)

fort.50: 親モデルの地形 (出力から地形を拾うので特に使用しないでも OK)

リンクの張り方の例。ln -s strmts2 fort.12

ln -s org 102dx5

など。■ 出力ファイル

fort.23: uvptq 初期値の本体fort.25: ptgrd 土地利用ファイルfort.52: org 地形ファイル(側面で親モデルの地形とつながるようスムージング処理)fort.300: 気圧のモニタcheck.grd: 作成した初期値の一部を grads形式で出力したもの。確認用。

シェルの中の変数(namelistに与える値、つまり格子数や解像度、緯度経度、予報時間など)を変えることで自分の好きなようにネストできるはず。

50

Page 52: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

&NAMGRDO ←親 (outer)モデルの格子設定NXO=72, NYO=72, NZO=38, ←親モデルの格子数DXO=30000.0, ← x方向の解像度 (m)

DYO=30000.0, ← y方向の解像度 (m)

DZO= 1120.0, DZ1O= 40.0, DZ2O= 1120.0, IZ1O=38, IZ2O=38, ← z方向の解像度&END

&NAMGRDI ←子 (inner)モデルの格子設定。水平・鉛直格子間隔を決めるNXI=102, NYI=102, NZI=38, ←子モデルの格子数DXI=10000.0, ← x方向の解像度 (m)

DYI=10000.0, ← y方向の解像度 (m)

DZI=1120.0, DZ1I= 40., DZ2I=1120.0, IZ1I=38, IZ2I=38, ←z方向の解像度&END

&NAMPROJ ←地形ファイルの設定NPROJC=’LMN ’, SLAT=32.5, SLON=135.0, ←地形ファイルの基準緯度経度IWDTH=5, IMERG=5, GRMAX=0.20 ←側面、勾配のスムージングの設定

&END

&NAMNEST ←予報時間、入力時刻の設定KTSTJ=1, KTENJ=18, KTSTRJ=1,  ←予報開始、終了、刻み間隔KTUNIT=3600.0, ←作成する初期値に対する、1つの刻み幅 (1KTSTRJ)の時間 (sec)

KTUNIT0=3600.0, ←親モデルの出力間隔 (sec)

&END

&NAMKDD ←ネストする物理量、出力していない変数は勿論使えない。KDD( 1)=1, KDD( 2)=1, KDD( 3)=1, KDD( 4)=2, KDD( 5)=1,←"1"が入力KDD( 6)=0, KDD( 7)=0, KDD( 8)=0, KDD( 9)=0, KDD(10)=1,

KDD(11)=0, KDD(12)=0, KDD(13)=0, KDD(14)=0, KDD(15)=0,

KDD(16)=0, KDD(17)=1, KDD(18)=0, KDD(19)=0, KDD(20)=0,

KDD(21)=0, KDD(22)=0, KDD(23)=0, KDD(24)=0,

KDD(25)=0, KDD(26)=1

&END

※注意事項・2008年 12月以前:KTSTJ=0(ITSTO=0)だと上手くいかない時があるかも。その際はKTSTJ> 0 (ITSTO> 0) とすること。・2009年 1月:修正されているはず。

51

Page 53: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

9. 雲物理量を境界に与えるには

・jmanhm-rel-01-15.tgzで使用すると、初期値・境界値の読み込みに失敗することがあります。雲物理の変数名が違うため (qh(ひょう),qg(あられ)など)。・jmanhm-rel-02-00.tgz をお使い下さい。・描画処理を除きました。本来ならチェックすべきですが、プログラムをすっきりさせるため。・入力変数を減らしました。楽するため。

8.1 プログラム

”/mnt/sky1/sawada/Nhm-v15/Tools/n2n/”以下のファイルについて。f90に書き換え済み。2009/1/28.

nflnn_2008.f90: 本体nflnn_2009_test.f90: 本体, moving domain用(計算領域の移動に対応)。テスト版。nflutlty3_c.f90: mkinitや mkinit_jraの nflutlty2+(2).fと同じnflutlqj3.f90: 内挿計算

sub.inter_pre: 内挿計算に必要な補間係数の準備sub.interp: 内挿計算sub.interpt: 温位の内挿計算sub.inter2d: 2次元内挿sub.read_header: 親モデルの結果から日付、地形情報の読み込みsub.loadmt5: 親モデルの結果からデータの読み込みsub.unpack: データの読み込み、(2Byte圧縮から)物理量に変換

%Tools/mkinit/srcplt/nflutplt2.f: 描画 (使用せず)

%Tools/mkinit/srcplt/plotpswk2.f: 描画ツール本体 (使用せず)

9 雲物理量を境界に与えるにはこの項目は既に古くなりました。前節の”nesting”に統合しました。ただし、パラメータカードの設定は要参考。

2重ネストした時に、雲物理量(雲水、雨水、雲氷、雪、あられ)を初期値・境界で引き継ぐための方法。test版。ほとんど前節の 2重ネストと使い方も、必要なファイル、中身も同じ。いづれまとめる予定(今のところ、バグがあったら嫌なのでソースファイル、シェルを別にしています)。

52

Page 54: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

※注意事項jmanhm-rel-02-00.tgzで使用すると、初期値・境界値の読み込みに失敗します。これは雲物理の変数が増えたため (雲水、雨水、雲氷、雪、あられ+ひょう)。かつ、あられの変数名が変更されているので (QH→ QG)、修正が必要。2007/7/27(by

Sakai-kun)

※捕捉事項jmanhm-rel-02-00.tgzに対応させました。その際、n2nの古いバージョンでやや不具合があったので修正しました。2007/7/28

■シェルの使い方$ sh ./script/n2n30-10 cld.sh $SPEC OUTER $SPEC INNER $DATE

で、実行時に与える変数は以下の通り。jmanhm-rel-02-00.tgzの場合、$ sh ./script/n2n5-1 cld v2.sh $SPEC OUTER $SPEC INNER $DATE

です。シェル(n2n30-10 cld.sh)の中で設定する namelistの意味は全く 2重ネストと同じ。書き方は同じだがNAMKDDの雲物理量のみ意味が異なる。つまり、

&NAMKDD ←ネストする物理量、出力していない変数は勿論使えない。KDD( 1)=1, KDD( 2)=1, KDD( 3)=1, KDD( 4)=2, KDD( 5)=1,

KDD( 6)=1, KDD( 7)=1, KDD( 8)=0, KDD( 9)=0, KDD(10)=1,

KDD(11)=0, KDD(12)=0, KDD(13)=1, KDD(14)=1, KDD(15)=1,

KDD(16)=0, KDD(17)=1, KDD(18)=0, KDD(19)=0, KDD(20)=0,

KDD(21)=0, KDD(22)=0, KDD(23)=0, KDD(24)=0,

KDD(25)=0, KDD(26)=1

&END

ここで、KDD(6), KDD(7), KDD(13), KDD(14), KDD(15)はそれぞれ雲水、雨水、雲氷、雪、あられ(qc, qr, qci, qs, qh)で、KDD(XX)=1 の場合、これらを初期値・境界値として準備する。(元々の nflnn sst.f90では例え”1”にしても雲は引き継がれない)初期値・境界値の作成はこれでOK。※注意事項jmanhm-rel-02-00.tgzではKDD(15)=QG(あられ)、KDD(20)=QH(氷)です。

■ parametercardの namelistの設定

&NAMNST ←ネストに関するパラメータの設定

53

Page 55: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

9. 雲物理量を境界に与えるには

KTSTO=0, KTENO=54, KTDTO=6, DTRATIO=3600.,

io_init_qc=1, ←雲水が初期値に含まれている場合io_init_qci=1, ←雲氷が初期値に含まれている場合io_init_qr=1, ←雨水が初期値に含まれている場合io_init_qs=1, ←雪が初期値に含まれている場合io_init_qh=1, ←あられが初期値に含まれている場合io_bndry_qc=1, ←雲水が境界値に含まれている場合io_bndry_qci=1, ←雲氷が境界値に含まれている場合io_bndry_qr=1, ←雨水が境界値に含まれている場合io_bndry_qs=1, ←雪が境界値に含まれている場合io_bndry_qh=1, ←あられが境界値に含まれている場合

&END

このように io init qc, io bndry qrなどを加えれば、初期値・境界値に雲物理量を使用できる(見ての通り、初期値と境界値でnamelistの設定が個別にある)。この他、凝結物の数密度(qnc, qnr, qnci, qns, qnh)、乱流エネルギーなどについても同様にして初期値・境界値に与えられるが、プログラム(nflutlty2+4.f, nflnn sst cld.f90)の修正が必要。namelistについては詳細は parametercardを参照。以下、使用するプログラム概要。

nflnn_sst_cld.f90: 本体、subroutineの引数を変更したためこれを修正nflutlty2+4.f: mkinitや mkinit_jraの nflutlty2+(2).fをやや修正nflutlqj.f: 内挿計算、やや修正, 2007/7/28

sub.interp2: XSFT,YSFTで内挿位置をずらして内挿計算sub.interpt2: 温位の内挿計算sub.inter2d: 2次元内挿sub.inter3d: 3次元内挿、使用しないと思うsub.loadmt3: データの読み込みの制御sub.loadmt4: データの読み込みの制御sub.storuv: データの書き出し、雲物理量を出力するためここを修正sub.unpack: データの読み込み、(2Byte圧縮から)物理量に変換

Tools/mkinit/srcplt/nflutplt2.f: 描画Tools/mkinit/srcplt/plotpswk2.f: 描画ツール本体以下、最新版の場合(n2n5-1\_cld\_v2.sh)

nflnn_sst_cld_v2.f90: 本体, jmanhm-rel-02-00用に修正nflutlty2+5.f: jmanhm-rel-02-00用に修正 (nflnn_sst_cld_v2.f90用)

sub.storuv: データの書き出しの修正

54

Page 56: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

初期値に雲水などを引き継いで計算した例を紹介。この図だけを見る限り初期の雲分布 (T=0h)は大きく違うが、T=6,12hではほとんど違いが見られない。気圧分布も同様。

初期値・境界値の作られ方 -プログラムの流れ-

プログラムを自分で修正したい方のためのメモ(つまり、自分用)。

nflnn_sst_cld_v2.f90: 本体, jmanhm-rel-02-00用に修正 |-- namelistの読み込み |-- パラメータの設定、日付の計算 |-- outer, innerの地形ファイルなどの読み込み |-- call stortg: ptgrdファイルの作成 |-- call loadmt4: (outerの)NHMの出力の読み込み |-- call inter2d, interp2: 内挿計算 |-- call storuv: uvptqファイルの作成 (初期値・境界値データ)

    |-- データフォーマットの診断 (flgq,flgqn,flgv)

10 理想化実験の初期値・境界値ある地形に、一様な環境場を与えて計算する方法。やり方は 2通り。

1. パラメータカードで環境場の鉛直プロファイルを与える方法2. 初期値・境界値を自分で適当に作って与える方法1.は簡単。2.は面倒だけど、少し凝った環境場 (水平シアを与えたり、時間変化させたり、など)を与えられる。ここでは、1.のみ記述。原理は山岳波や地形性降水のテストランと同じ。以下に、パラメータカードの記述の仕方を示す。必要な部分のみ。

!----- ここから -------------------------------------------------

...

&NAMMSW

MSWSYS( 1)=204, MSWSYS( 2)=1, MSWSYS( 3)=2, MSWSYS( 4)=2,

MSWSYS( 5)=2, MSWSYS( 6)=-2,MSWSYS( 7)=1, MSWSYS( 8)=11,

MSWSYS( 9)=3, MSWSYS(10)=0, MSWSYS(11)=0, MSWSYS(12)=2,

MSWSYS(13)=10, MSWSYS(14)=0, MSWSYS(15)=2, MSWSYS(16)=0,

MSWSYS(17)=5, MSWSYS(18)=-40, MSWSYS(19)=31001, MSWSYS(20)=2,

MSWSYS(21)=1, MSWSYS(22)=20, MSWSYS(23)=2, MSWSYS(24)=0,

55

Page 57: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

10. 理想化実験の初期値・境界値

MSWSYS(25)=1, MSWSYS(26)=0, MSWSYS(27)=0, MSWSYS(28)=40,

MSWSYS(29)=1, MSWSYS(30)=2

&END

...

&NAMVAL

RATIOI=1.0,RATIOO=1.0,RATIO2=1.0,RUVNI=1.0,RUVNO=1.0,

RUVN2=1.0, FNLTR=0.0,IDIFX=11,DIFNL=-2400.0,DIF2D=-2400.0,

DIFTG=-600.0,ASTFC=0.2, STDLON=140.0,STDLAT=15.0,

KZDST=29,KZDEN=36,

RLDMPX=-2400.0,RLDMPZ=-2400.0,RLDMPO=0.0,

PTGRDS=302.15,PTGRDR=0.0,PTGRDL=0.0,

ITGROW=0,UBIAS=0.0,VBIAS=0.0,ITSST=0,EOVER=0.5

&END

...

IN Z(M) U(M/S) V(M/S) PT(K) RH(%) QC(G/KG) QR(G/KG)

1 0.0 0.0 0.0 301.1 95.0 0.0 0.0

2 20.0 0.0 0.0 301.1 95.0 0.0 0.0

3 60.0 0.0 0.0 300.8 95.0 0.0 0.0

4 130.0 0.0 0.0 300.8 95.0 0.0 0.0

5 230.0 0.0 0.0 301.0 95.0 0.0 0.0

6 360.0 0.0 0.0 301.2 95.0 0.0 0.0

7 710.0 0.0 0.0 301.9 95.0 0.0 0.0

8 1180.0 0.0 0.0 304.5 95.0 0.0 0.0

9 2480.0 0.0 0.0 311.3 90.0 0.0 0.0

10 4260.0 0.0 0.0 320.5 90.0 0.0 0.0

11 5330.0 0.0 0.0 326.0 90.0 0.0 0.0

12 6520.0 0.0 0.0 331.8 80.0 0.0 0.0

13 7160.0 0.0 0.0 334.9 70.0 0.0 0.0

14 7830.0 0.0 0.0 337.5 60.0 0.0 0.0

15 8530.0 0.0 0.0 340.2 50.0 0.0 0.0

16 10810.0 0.0 0.0 347.6 40.0 0.0 0.0

17 11630.0 0.0 0.0 349.7 20.0 0.0 0.0

18 12480.0 0.0 0.0 352.1 5.0 0.0 0.0

19 15210.0 0.0 0.0 367.7 0.0 0.0 0.0

20 19270.0 0.0 0.0 451.3 0.0 0.0 0.0

21 24000.0 0.0 0.0 512.8 0.0 0.0 0.0

56

Page 58: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

22 26600.0 0.0 0.0 607.4 0.0 0.0 0.0

99

...

!----- ここまで -------------------------------------------------

&NAMMSWで側面境界にかかわる番号を適切に変更。MSWSYS(4), MSWSYS(5),

MSWSYS(7), MSWSYS(26)など。さらに、MSWSYS(12)=2とする。&NAMVALで ptgrds=300 (海面温位), ptgrdl=1 (陸面温位の偏差) などを与える。standalone initiationの場合、これらの設定が有効になる。以下、参照。

!----- ここから -------------------------------------------------

tgf.f90: subroutine tgf__tg_set_first

do jy = 1, ny

do ix = 1, nx

if (skind(ix, jy) == kind_sea) then

! sea

ptgrd(ix, jy) = ptgrds - ptrf

else

! land, snow, ice

ptgrd(ix, jy) = pt(ix, jy, 1, kto) + ptgrdl

end if

end do

end do

!----- ここまで -------------------------------------------------

IN Z(M) ... 以下の部分で、東西風、南北風、温位、相対湿度 (または比湿 [g/kg])、雲水、雨水の鉛直プロファイルを記述。これらが水平一様に与えられる。最下層は0m

とすること。あとはテストランと同じように実行するだけ。地形ファイルのみ準備すれば良い。放射スキームに必要なファイル (BANDCNX, band.dat, band2004.dat,

ozn t42l68 clm.dat)があればリンクを忘れずに。

11 初期値・境界値を読みたい、絵を書きたい一言、頑張ってプログラムを作って読んで下さい。と言いたいのですが、サンプルのシェル、ソースプログラムを以下に置いておきます。

57

Page 59: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

12. リスタート(再計算)のやり方

/mnt/sky1/sawada/Nhm-v15/Tools/read uvptq/src/read uvptq.f90

/mnt/sky1/sawada/Nhm-v15/Tools/read uvptq/script/read.sh

使い方はシェル (read.sh)の中を見れば分かると思います。出力ファイルuvptq.grd: 初期値・境界値ファイルの一部を grads形式に変換したものuvptq.ctl: 出力ファイル用の ctlファイル。緯度経度は全く持って適当

12 リスタート(再計算)のやり方ある意味、最低限の技術。パラメータカードをちょっと設定するだけでよい。

&NAMFIL

IMT_RS_OUT=72, ←リスタートファイルの装置番号 (使っていない番号)

ISTR_RS_OUT=1080, ←リスタートファイルの出力ステップ間隔...

&END

workディレクトリの中に”rest-000-001”というファイルが作られます。これがリスタートする際に入力するファイルとなります。

リスタートするには、パラメータカードを以下のように設定。

&NAMPAR

ITST=1080,... ←リスタートの開始ステップ (出力したステップ)

&END

&NAMFIL

IMT_RS_IN=82,... ←リスタートファイルの装置番号 (使っていない番号)

&END

MSWSYSは基本的に変えないこと。データの読み込みがずれることがあります。(特にMSWSYS(1), MSWSYS(13), MSWSYS(18), MSWSYS(19)など) これでリスタートできるはずです。

※但し、MSWSYS(18)=-2,-3,-4はうまくいきませんでした。再計算は出来るものの、結果が一致しません。原因はまだ調べ中。

58

Page 60: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

図 4.1: 初期値に親モデルから雲水、雨水、雲氷を引き継いだときのインパクト。colorが鉛直積算雲水量、contourが海面更正気圧。左図が与えていない場合、右図が与えた場合。上からT=0,6,12h。

59

Page 61: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し
Page 62: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

61

第5章 モデルの実行

1 モデルの実行オリジナルなら”Nhm/Ss/Pf/GRSM”にあるシェルを参考に書き換えて実行できる。つまり、$ cd Nhm/Ss/Pf/GRSM/

$ emacs grsm10238 nfx.sh

$ sh grsm10238 nfx.sh

でOK。”grsm10238 nfx.sh”はパス(ディレクトリ名)や初期値・境界値の名前を適切に変更すること。

うちの講座では(ds3)では、4cast-cron/execution/script/4cast 72dx24.sh

4cast-cron/execution/script/4cast 72dx24 past.sh

が実行シェルです。こちらを利用するならこれを変更。日付などを簡単に入力できる気がするので、便利かも。自分用は

/mnt/disk1/Nhm-v15/Ss/Pf/FCST/fcst sample.sh

モデルの実行に必要なファイルなどの簡単な説明。各装置番号にリンクを張ること (リンクの張り方はシェルの中を参照)。

○自分で準備するものfort.23: 初期値 (uvptq)、namelistの imt_iniで装置番号を決められるfort.25: 土地利用データ (ptgrd)、imt_ptgrd

fort.50: 地形データ (org)、imt_hm(defaultは 29番らしい)

fort.53: 海面水温データ (sst)、imt_sst(defaultは 53番), 不要。fort.32: SiBに必要なデータ(GLCC_SiB)、imt_glcc_sib(default:32)、mswsys(13)=9の場合のみ必要。parm_72dx30(名前は適当): 実行時に与えるパラメータファイル○用意されているもの。web上からダウンロード。あるいは、"/mnt/disk1/Nhm-v2-00/Const"

Page 63: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

1. モデルの実行

からコピー。fort.30: 放射に必要なデータ (BANDCNX)、imt_band、mswsys(13)=6~9の場合fort.31: 放射に必要なデータ(band.dat)、imt_band_gsm0103、mswsys(13)=10,11の場合fort.XX: SiBに必要なデータ(GSM9603.VEG or gsm.veg.v12.d)、imt_gsm9603_veg、mswsys(1)=9の場合

imt XXXはパラメータカードの中の namelistの変数名。モデルの実行時に出力されるファイルの説明。独自仕様で出力されるファイルについてはプログラムの中をチェックしましょう。

fort.21: ワークファイル (主に境界値)の出力、imt_bd

fort.62: モデルの結果の出力 (MRI形式)、imt_mri

fort.90: 各プロセスに要した計算時間の出力、imt_time

fort.90(大抵 ctime nfx.txtとリネームされる)を見ればモデルの計算時間が分かる。長期積分や大きな計算をするような場合はこれを目安に実験の計画を立てましょう。

○ パラメータカードに関する注意点ネストして計算する際、水平解像度、時間ステップを変えるだけでは不十分な場合があります。例えば、mswsys(16):風の成分の初期値、境界値の取り扱い(風?運動量?)mswsys(19):乱流クロージャーモデル(MYNN?Deardorff?)mswsys(22):対流パラメタリゼーション(必要 or not)など。他にも、NAMCLD(Kain-Fritsch 対流パラメタリゼーションに与えるパラメータ)cu lifetime min:深い対流のライフタイム(水平風が 1 格子を横切る時間)の最小値。単位は秒(例:900秒:5km)shallow lifetime:浅い対流のライフタイム(水平風が 1 格子を横切る時間)。単位は秒(例:600秒:5km)NAMRAD(放射スキーム MSWSYS(13)=¿10のときに与えるパラメータ:例外あり)CLD RD:雲量の診断の仕方。”0”: 相対湿度から診断、”1”: 予報した雲水、雲氷から診断、”3”: 部分凝結を考慮NAMVAL(その他の制御変数)ratioi, ratioo, ratio2, ruvni, ruvno, ruvn2:外部の値の重みなど。

62

Page 64: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 5. モデルの実行

■ 実行エラー for ”Team Segmentation fault”

出力されたログを見ましょう。大抵、${BINDIR}/fcst nfx ${PARMDIR}/parm 72dx24 mpi > log.fcst mpi

などと”log.”というファイルにモニタされているはず(この後、”/log/XXX/”みたいなディレクトリに移動させているかも、あるいは消しているかも)。これを見てどこまで動いたかチェック。入力で落ちたのか、パラメータカード(parm 72dx24 mpi

など)の読み込みで失敗したのか、日付が間違っていないか、計算が始まっているか . . .など。また、入力ファイル (org,uvptq...などの初期値ファイル)のエンディアンの設定が正しくない場合も有り得ます。

○ 入力ファイルが途中で終わっている、読み込みでエラーが出ているリンクのミス、入力ファイルの作成期間(何日分があるか)とパラメータカードとの不整合など。ありがち。エンディアンの設定ミス (big or little)も有り得ます。ログの出力結果がおかしい時など、要注意。使用したコンパイラによって実行時オプションが異なるので要注意 (富士通コンパイラ frtなど)。

○ timecard の日付のミス初期値・境界値に日付が入っており、それと timecardの日付を比べています。間違っていたら必ず出力に出ます。ちなみに timecardを用いない場合、日付のチェックはスキップされます。つまり、日付がたとえ想定しているものとずれていてもモデルは動く。ちなみに、日付が正しく表示されない場合はエンディアンの設定ミスの可能性大。あるいは、コンパイラの違いに注意 (ifort と frt で実行時オプションが異なる!環境変数が異なることもある!)。

○ segmentation fault

良く出力を見るしかないです。気長に。場合によってはメモリサイズが大き過ぎることがあります。$ ulimit -s unlimited (bashの場合)

と再度実行してみましょう。また、ネストする際、古いバージョンの”n2n”を使用して jmanhm-rel-02-00以降を使うとフォーマットが異なるため、計算が落ちます。新しい”n2n”を使用して下さい。ifortを使用している場合、PC(OS)環境によって大きなメモリサイズを使用する計算をすると落ちることがあります。この場合、”ulimit”では解決できない。ifortのバージョン 10以降なら、オプション”-heap-array”を付けて再コンパイル。バージョン 9以前なら、プログラムの書き換え(配列を動的に宣言する)が必要かも。詳しくは 1章の ifortでのコンパイル参照。

63

Page 65: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

1. モデルの実行

○ mpi関連でエラーが出た場合$ulimit -s 40960 (適切なメモリサイズ、値は場合に応じて)

など試す。ジョブが残っていたら”kill”で処理。経験上、smp(cpuが 2つ以上)のWSで大きなメモリサイズでモデルを実行すると落ちるらしい (mpich version1)。mpicomm.f90の一部を修正すれば上記の問題は解決(配列を allocateすれば良い)。mpiで大きなメモリサイズを実行してもOK。mpiの通信関連?で使用するメモリサイズが引っ掛かっていることもあります。その際はエラーメッセージに出るはず。export P4 GLOBMEMSIZE=134217728

などを実行シェルの中に書けばOK。メモリサイズの最大値はmpichをインストールしたときで決まる。基本は 256MBだったはず。

○ CFL条件

it= 11

estimated dtuv= 540.66458460212 at 2 71 29 it= 11 ←水平風のCFL

estimated dtw = 124.74612572233 at 22 60 2 it= 11 ←鉛直風のCFL

estimated dtg = 35.73517748443 at 32 69 2 it= 11 ←重力波のCFL

it= 12

estimated dtuv= 530.00000000000 at 58 45 2 it= 12

estimated dtw = 0.00000000000 at 59 45 2 it= 12

estimated dtg = 34.04271616602 at 67 46 2 it= 12

               格子位置 ( x, y, z)

となった時は大抵 CFLで引っかかったと思って下さい。”DT”を適切に変更。ちなみに上の数字は適当。

○ パラメータカード関連経験談。番号変えるだけで動くかも。できればちゃんと理由が知りたい。

mswsys(2, 4, 5):側面境界の計算法。放射条件の時うまくないと不安定に。他のパラメータとの兼ね合い。mswsys(13):放射仮定。地面傾斜を考慮した 9, 11, 13でよく引っかかることが。10番もたまに。mswsys(16):風の成分の初期値、境界値の取り扱い。運動量に密度をかけて値が小さくなり過ぎる。mswsys(17):重力波のスプリット。高解像度実験 (1km以下)で使用しないのが基本。

64

Page 66: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

mswsys(18):雲物理。マイナーな設定で引っかかることが。mswsys(19):乱流クロージャーモデル。まれに引っかかることが。mswsys(20):HIVIか HEVIか。mpi使用時に特に注意。2次元分割時は HIVIは駄目。mswsys(23):気圧の境界条件。SBCは 2次元分割未対応。と、IOエラーがたまに。

2 パラメータカードとても書き切れないです。なので以下のパラメータカードの詳細を参照。

http://wind.geophys.tohoku.ac.jp/ sawada/Nhm manual/namelists/fcst namelist.html

大まかに設定している内容は、モデルの水平・鉛直解像度、格子数、積分時間など使用するパラメタリゼーションの選択各パラメタリゼーションの詳細な値の設定出力する物理量の選択という感じ。

○ mpi使用時の注意点1次元分割(y方向のみ)は特に気にせずに。2次元分割する際はmswsys(20)=2

(HE-VI)とすること。かつ&NUMGRDの x num y num, z numを適切に変更すること。numはプログラムの中で宣言されている (ios.f90)ため、プログラムを修正後に再コンパイル(make fcst nfxなど)すること。沢田仕様の場合、numもnamelistから入力できるようにしている。(パラメータカードをそのまま使うとへちょります)

○ 放射計算mswsys(13)が放射スキームの種類。10,11 は”band.dat”が必要。ln -s band.dat fort.31 ←特に番号を指定しない場合(デフォルト)とすること。12,13は”band2004.dat”が必要。NAMRADのパラメータ”OZON=1”

を使う時は”ozn t42l68 clm.dat”

これらのファイルは、front:/home/u tohoku/Nhm/Const/

/mnt/sky1/sawada/Nhm-v15/Const/

のどちらかからコピーして下さい。

○ 境界条件 (SBC)についてパラメータカードのモードスイッチ、mswsys(23)=2 (気圧の境界条件) を使用

65

Page 67: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. パラメータカード

すると、上部、側面にレイリーダンピングを使用。これを mswsys(23)=12 などと設定すると、Spectral Boundary Coupling

(SBC)を使用することができる。この場合、気圧ではなく u, v, pt に波数の小さい成分 (波長の大きい成分、大規模スケールの構造)を親モデルから引き継ぐようにしますつまり、物理空間だけで境界条件を与えるのではなく、波数空間でもネスティングを行う (= SBC)。これによって現象の再現性を向上できる、らしい。式で書くと、

uout = uLout + uS

out に分離

uin = uLout + uS

out に分離

unewin = uL

out + uSin

outは親モデル (outer model or coarse mesh model), inは子モデル (inner model

or fine mesh model), Lは large scale成分 (計算領域に対する波数 6まで)、Sはsmall scale成分を表す。NHMにも SBCが組み込まれていましたが、現在の公開版 (jmanhm-rel-02-00.tgz)では正常に動作しませんでした。で、このバグを修正したソースファイルを以下に置いておく。※mpiを使用して 2次元分割して計算しても, 結果は一致。/mnt/sky1/sawada/nhm v2 ds3

== SBCのみ使用したい場合 ==

fft.f90, sbc.f90は上書き、nhmvar.f90, pre.f90, main.f90は適宜編集 (diffを使えば分かるかも) して下さい。SBCが必要かどうかは積分時間と計算領域のサイズ次第。長期積分用 (1日以上?)&大きいスケール用 (100km以上?)とか。狭い領域での高解像度の計算や数時間程度の積分ならあまり有り難味はないかと。== SBCの設定に関するパラメータ ==

SBCをかける波数 (6 = mm & nn, nhmvar.f90)、時間間隔 (50step = itbdSBC,

nhmvar.f90)、高度 (5000m : kms, pre.f90)はソースコード内で定義されてます。変更したい場合はソースコードを修正&再コンパイルして下さい。

○ 地表面過程:SiB(SImple Biosphere)を使用する場合mswsys(1)が地表面過程のパラメータ。一の位が”9”の時、SiBを使用。SiBを使用するには以下の 2つのファイルが必要。fort.32: SiBに必要なデータ (GLCC SiB)、imt glcc sib(default:32)

fort.XX: SiBに必要なデータ (gsm.veg.v12.d)、imt gsm9603 veg=XX

などを設定する必要があります。GLCC SiBは地形作成と似たような作業で出来る。gsm.veg.v12.dはGSM-MJ98で使用する SiB用の入力ファイル(小玉くんより)。GSM9603.VEGは気象庁 (?)で使用されている SiB用の入力ファイル(長澤さん

66

Page 68: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

より)。若干、中身が違うようです。

○ ネストする場合前節を参照。

3 実行条件(初期値、解像度、パラメータ)を変えたいテストランは動いたから、実行のさせ方(初期値・解像度・パラメータ)を変えたい時は、それぞれ変更すればよい。○ パラメータの変更一番これが単純だが、何が起きているか一番分かり辛いかも。前の節にも書いたようにパラメータカードの数字を変えれば良い。MSWSYSを変更すれば使用したいパラメタリゼーションを選択できる。より細かいパラメータを変更したい場合は、&NAMVAL: 側面境界条件、ダンピング、非線形拡散などの強さ&NAMCLD: 微物理過程、KF、Grell、湿潤対流調節&NAMRAD: 放射計算をそれぞれ変更すれば良い。前節も参照。○ 初期値の変更パラメータカードの変更も必要だが、初期値そのものの作り直しが必要。日付の変更を忘れずに。既に作成した初期値の中に予報時間が含まれているなら計算の開始時間(&NAMMSTの中のKTSTO)をずらすだけで良い。○ 解像度の変更パラメータカードのDX, DY, DXL, DXR, DYL, DYR, DZ, DZL, DZRなどの変更が必要。また、初期値の作り直しも必要。Z方向の格子間隔の決め方だが、まずDZの増分は (DZR-DZL)/(NZ-2) で最下層の格子間隔がDZR。つまり標準設定のままならば、DZL=40m, DZR=1120m, NZ=38 なので、(DZR-DZL)/(NZ-2) = 30m なので, DZ = 40, 70, 100,. . .1060, 1090, 1120m

となる。その際、初期値を作るのに必要なパラメータ(水平・鉛直格子)の変更を忘れずに。地形も作り直す。

4 鉛直層の切り方鉛直層がどのように設定されるかをチェックするツール。

/mnt/sky1/sawada/Nhm-v15/Tools/ver levels/script/check v2.sh

67

Page 69: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

4. 鉛直層の切り方

/mnt/sky1/sawada/Nhm-v15/Tools/ver levels/src/

使い方は、$ script/check v2.sh

でOK。中を見れば変数の設定はなんとなく分かるかと。と言いつつ、以下に概略。

!----- ここから -------------------------------------------------

### compile

cd $srcdir

ifort func.f90 ver_levels_v2.f90 ←コンパイル

cp a.out $wkdir

cd $wkdir

### run

./a.out <<EOF ←実行&numgrid

nz=61,  ←鉛直層の数dz=100, ← iz1と iz2の間の鉛直層の厚さ (m)

dzl=20.0, ←最下層の鉛直層の厚さ (m)

dzr=1000.0, ←最上層の鉛直層の厚さ (m)

iz1=18, ← 1層目から iz1まで dzlから dzまで線形に増加iz2=45 ← iz2から nzまで dzから dzrまで線形に増加

&end

EOF

mv fort.20 dz.txt ←出力結果!----- ここまで -------------------------------------------------

出力中の各変数はプログラム参照。

68

Page 70: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

69

第6章 出力の変換と作図

1 データの変換の仕方 (nhm2grads)

ここではNHMの出力がMRIフォーマットであるとします(講座標準)。Nusdas

形式の場合、”Tools/pandah”などを使うこと。こちらなら直接データを読んで作図することが出来る。※ nhm2ncに以降予定。よって、

MRI形式→ grads形式の変換を実行するシェルはds3:/home/test/4cast-cron/postprocess/script/n2gr 72dx24.sh

/mnt/sky1/sawada/Nhm-v15/Tools/nhm2grads/n2gr new.sh (自分用)

など参考。使い方は、$ n2gr new.sh 72dx24 00UTC (自分用)一応、側面に見られた不具合(変な値)は修正済み。原因は側面の内挿の不具合による。(2006/12/15) ※地形と 2,3次元物理量の格子位置がずれていたので修正(2007/02/07) Thanks. chen-san.

※ z*系の平面図は意味分からないのでなるべく p面, z面に変換した方が好ましいかと。鉛直方向の内挿か p面、z面直接内挿を参照。

※ nhm2gradsの更新 (2007.07.16)

2次元物理モニタの変換を追加しました。具体的には、U10 : 高度 10mの東西風V10 : 高度 10mの南北風TS : 地表面温度?SOLAR: 日射(dswb-uswb)DLWB : 全下向き長波放射@地表DSWB : 全下向き短波放射@地表ULWT : 全上向き長波放射@大気上端(OLRに相当)TSOLA : 積算した日射TDLWB : 積算した全下向き長波放射@地表

Page 71: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

1. データの変換の仕方 (NHM2GRADS)

CLL : 下層雲量?CLM : 中層雲量?CLH : 上層雲量?変換シェルの使い方は今まで通り。DSWB, ULWTはモデルの出力を追加している場合に使用可能。”/mnt/sky1/sawada/Nhm-v2-00/Module/Src/JMANHM/”

を使用すれば出力できる。個人的に追加したい場合は”rad3 uni both.f90, ios.f90,

main.f90”などを修正して下さい。また、新しいNHMを使用した場合、QH=ひょう、QG=あられとなります。勘違いしないように。まぁ、あまり見ないですかね?

namelistの設定はシェルを見ての通り。格子数、日付、中心位置などを適切に修正すること。これらはモデル実行時に使用したパラメータカードで分かるはず。NHMで出力されたファイルを”fort.62(mriフォーマットの output)”にリンクを張る。例えばln -s output 72dx24 00UTC 20061011 fort.62

以下、namelistの例。(古いバージョンより変数が一部増えているので注意)

----- 以下、script ---------------------------------------------------------

./nhm2grads <<EOF

&namgrd

nx0=72,ny0=72,nz0=38, ←実行したモデルの格子数itst=0,iten=3,itdt=60 ←変換を始めるステップ, 終了するステップ, ISTR_MRI

と同じ(ステップ数)&end

&namswitch

igoption1=2, itf=0 ←鉛直不等間隔なら"2"

&end

&namctl

goption1=’options big_endian’, ← ctlファイルのオプションgoption2=’no’, ←gtime0="18z${DATE_yD}${MONTH}${DATE_yY}" ← ctlファイルの日付

&end

&namgrads

cfile3d=’grads3d.ctl’,dfile3d=’grads3d.grd’ ←3次元データのgrads

70

Page 72: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

形式のファイル名cfile2d=’grads2d.ctl’,dfile2d=’grads2d.grd’ ←2次元データのgrads

形式のファイル名cfilezs=’gradszs.ctl’,dfilezs=’gradszs.grd’ ←地形データのgrads形

式のファイル名&end

&nammproj

mpsw=2, ←マップファクターのタイプ(MER,LMN,PSN)xlat=38.0,xlon=138.0, ←計算領域の中心位置slato=38.3,slono=141.0 ←基準位置

&end

&namelm

ival3d=1,2,3,4,5,6,7,16,17,18,

ival2d=1,2,3,4,5,6,7,10,11,12,

ivalzs=1,2,3,4

&end

EOF

※注意点、追加事項。

slato: 元々は"slono"しかなかったが mercatorに対応するため追加。mpsw=0: model格子でそのまま出力、つまり水平内挿をしない。

=1: mercator図法を考慮して内挿。=2: lambert図法を考慮して内挿。

2 プログラム (nhm2grads)

以下のディレクトリの中のプログラムについて/mnt/sky1/sawada/Nhm-v15/Tools/nhm2grads/

nhm2grads_new.f90: プログラム本体parm.f90 : 定数の宣言common.f90 : 共通の変数の宣言(dt, dx など)congrid.f90 : 格子数などの宣言(nx, nx2 など)chk.f90 : 最大値・最小値、undefのチェックなど

71

Page 73: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. プログラム (NHM2GRADS)

grads.f90 : ctlファイルの作成utility.f90 : NWPのツール。各緯度経度の格子、2次元内挿の計算。makval.f90 : MRI形式の読み込み、物理量に変換、z^{*}→ z(実地形)の変換(未使用)

注意点風 3成分(u, v, w)は元々は staggard grid上の値。つまり、スカラー量(気温や湿度、雲水など)と格子点位置が違います。出力する際に内挿して格子点位置を合わせています。出力される格子数は元の格子数より少なくなります。というのは、緯度経度座標に切り直すためです。図参照。もし、計算格子点そのまま出力したい場合は古いソースプログラム(nhm2grads new.f)を使用すること。

図 6.1: 地形と緯度経度。

鉛直方向には仮想の座標系(z*:地形に沿った座標系、terrain following)を使用しています。なので、実際の地形(z)と高さが異なります。地形に沿った座標系は、

z∗ =H(z − zs)

H − zs

(6.1)

72

Page 74: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

これを実際の高度に直すには

z = zs +H − zs

Hz∗ (6.2)

3 データ変換 (nhm2nc)

■ ツールの概要nhmの出力を grads形式か netcdf形式に変換するツール (nhm2gradsの拡張版と思ってもらえばOK)。最近、実験のサイズが大きくなってきたようなので、データを圧縮する 1つの方法として netcdfなら gradsで開けるので、使えるかな、と(ただし、3次元データのみ netcdf形式に対応)。model面 (zstar)出力ではなく、p

面、z面出力も直接出来ます。出力できる変数をモデルに含まれるものは全て可能にしました。(一部意味の分からない変数もありますが) ちなみに、前より動作がちょっと速いかもしれません。ついでに、バグも多いかもしれません。○ このツールで出来る事MRI形式の出力結果を grads形式 (バイナリ直接探査形式)、netcdf形式に変換格子座標 (ランベルト、ポーラーステレオなど)を緯度経度座標に変換(水平内挿)任意の緯度経度座標に変換(水平内挿)モデル面 (z*面)を p面、z面に変換(鉛直内挿)出力間隔の自動認識(実は itst, itdtとかを設定しないでも良いかも)○ このツールで出来ない事NUSDAS形式の変換温位面への変換■ 必要なファイル

ソースファイルとスクリプトは以下にあります。streamからのみアクセス可。/mnt/disk1/Tools/nhm2nc/src

/mnt/disk1/Tools/nhm2nc/script/

以下のファイルは古いので要注意。/mnt/sky1/sawada/Nhm-v15/Tools/nhm2nc/src

/mnt/sky1/sawada/Nhm-v15/Tools/nhm2nc/script/

以下、簡単な作業手順 (使い方: How to use nhm2nc)。

$ cd nhm2nc/src/

$ make

$ cd ../

$ sh script/sample.sh

73

Page 75: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3. データ変換 (NHM2NC)

■ シェルの具体例 簡単にシェル (sample.sh)に関するコメント。出力変数の一覧はシェルに付いています。

--------------------------------------------------------------------------

### link

ln -s output_122x1.5 fort.62 ← NHMの出力ファイルにリンク

### compile ← netcdfライブラリを使用してるのに注意cd ${SRCDIR}

make

nzvi=13 ← p面 or z面に内挿する際の層数。 ↓各気圧面 or各高度zref="1000.0, 975.0, 950.0, 925.0, 900.0, 850.0, 800.0, 750.0, 700.0, 650.0, 600.0, 550.0, 500.0 "

### run

./nhm2nc <<EOF

&namgrd ←格子数、時間ステップの設定nx=122,ny=122,nz=38,

itst=0,iten=24,itdt=600

&end

&nammap ←モデルに入力した地図投影法、緯度経度mprojc=’LMN’, ←地図投影法clat=38.35, clon=140.55, ←中心緯度経度slat=38.26, slon=140.84 ←基準緯度経度

&end

&namintp  ←出力 (変換)形式sw_mp=’LL’, ← lon-lat座標sw_vc=’p’, ←鉛直座標系 (p面, z面, model(zstar)面)

nzvi=$nzvi, ← p面か z面の場合の鉛直格子数zref=$zref, ← p面か z面の場合の各鉛直層レベルsw_fmt=’nc’ ← netcdf形式、grads形式 (gr)

&end

&namctl ← grads形式用のオプション設定

74

Page 76: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

goption1=’options big_endian’,

goption2=’no’,

&end

&namgrads ← grads形式用のファイル名cfile3d=’grads3d.ctl’,dfile3d=’grads3d.grd’

cfile2d=’grads2d.ctl’,dfile2d=’grads2d.grd’

cfilezs=’gradszs.ctl’,dfilezs=’gradszs.grd’

&end

&namelm ←出力する 3, 2変数ival3d=1, 2, 3, 4, 5, 6, 10, 11, 12,

ival2d=1, 2, 3, 8, 9, 10, 23, 24,

ivalzs=1, 2, 3, 4,

ivalad=4, 5, 6,

ivalvi=1, 2, 3, 5

end

EOF

--------------------------------------------------------------------------

■ namelistについての補足

&namgrd

nx,ny,nz : NHMで使用した格子数。itst,iten : データ変換の開始時間、終了時間、時間ステップ数を指定     (例:ITEND=1440,ISTR_MRI=180ならば iten=8)。省略可。itdt : モニター出力のステップ間隔 (ISTR_MRIに相当)。省略可。

itst,iten,itdtを省略すると 999step(+初期値)までの全ての時間を変換する。ctlファイルの時間数は 1000となる。

&nammap

mprojc : モデルで使用した地図投影法 ’LMN’=ランベルト, ’MER’=メルカトル,

’PSN’=ポーラーステレオ,

’GRID’=グリッド : テストラン用 (線形山岳波や地形性降水など)

clat,clon : 計算領域の中心緯度経度slat,slon : 基準緯度経度、ランベルト図法で使用。

75

Page 77: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3. データ変換 (NHM2NC)

&namintp  ←出力 (変換)形式の詳細な設定sw_mp : 変換したい (水平)座標系の指定.

’LL’=lon-lat座標 (デフォルト), 水平内挿する。’OR’ or ’GR’=モデルの座標 (格子)そのまま. 水平内挿なし。

sw_vc : 変換したい鉛直座標系の指定.

’p’=気圧面, ’z’=高度面, にそれぞれ鉛直内挿。’m’=モデル (zstar)面 (地形に沿っているので高度ではない!), 鉛直内挿

なし。sw_vc=’p’の時、第 1層にモデル面の 1層目を出力する。  よって、出力される鉛直層数は"nzvi+1"となる。確認用。nzvi : p面か z面の場合の鉛直格子数 (任意に設定)

zref : p面か z面の場合の各鉛直層レベル (任意に設定)

sw_fmt : 変換したデータの形式 ’nc’=netcdf形式, ’gr’=grads形式※以下の 6つの変数は sw_mp=’LL’ の時のみ有効。省略可。lonst, latst : 変換する領域を任意に指定。領域の南西 (左下)の緯度経度を指定。lonen, laten : 変換する領域を任意に指定。領域の北東 (右上)の緯度経度を指定。dlon, dlat : 緯度経度の間隔を任意に指定。例:緯度 [37.6-39.0], 経度 [139.6-141.4]の範囲を 0.01度で間隔で出力。

lonst=139.6, latst=37.6,

lonen=141.4, laten=39.0,

dlon=0.01, dlat=0.01

&namctl ← grads形式用のオプション設定goption1=’options big_endian’,

goption2=’no’,

time_unit : ’UTC’=UTCで初期時刻を出力、’JST’=JSTで初期時刻を出力(grads

的には正しくない)。

&namgrads ← grads形式用のファイル名. 省略可。cfile3d=’grads3d.ctl’, dfile3d=’grads3d.grd’(デフォルト)

cfile2d=’grads2d.ctl’, dfile2d=’grads2d.grd’(デフォルト)

cfilezs=’gradszs.ctl’, dfilezs=’gradszs.grd’(デフォルト)

nc3d=’nc3d.nc’ (デフォルト)

76

Page 78: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

&namelm ←出力 (変換)したい変数の指定ival3d: 3次元変数, モデルに格納されている 3次元変数ival2d: 2次元変数, モデルに格納されている 2次元変数ivalzs: 2次元変数, 地形関係ivalad: 3次元変数, 相対湿度、相当温位など計算値ivalvi: 2次元変数, 鉛直積算した各水物質量

シェルのサンプル。

sample.sh : 適当なサンプルsample_ds3_1.5.sh : DS3の 1.5km予報値の変換用サンプルlmwv_for_testrun.sh : 線形山岳波の計算結果の変換用サンプルgsnow_for_testrun.sh : 地形性降水の計算結果の変換用サンプルsample_mochi.sh : mochi用サンプルcheck_nc.sh : netcdfライブラリのパスが正しいかチェック。コンパイルチェック。

■ メモ今後、nhm2ncを中心に使う予定なので、nhm2gradsはメンテナンスはほぼ行いません。2008/6/3

4 プログラム (nhm2nc)

nhm2ncのディレクトリの中のプログラムについて/mnt/sky1/sawada/Nhm-v15/Tools/nhm2nc/src/

nhm2nc.f90 : プログラム本体nhmvar.f90 : 変数の宣言、動的メモリの確保、gradsの ctlファイル作成。

subroutine var_alloc(nx,ny,nz)

subroutine var_alloc_int(nxi,nyi,nz,nzvi)

subroutine init_parameter(numzs,num2d,num3d,numad,numvi,nvar,mprojc)

subroutine set_output_size(nx,ny,nz,nxi,nyi,nzvi, &

& nxen,nyen,nzst,nzen)

subroutine gr_init(numzs,num2d,num3d,numad,numvi,nxen,nyen,nzst,nzen, &

& goption1,goption2,time_unit,itst,iten,itdt,dt,idate, &

& cname_all,io_flag,cfilezs,cfile2d,cfile3d,dfilezs,dfile2d,dfile3d, &

& omt1,omt2,omt3,sw_fmt)

77

Page 79: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

4. プログラム (NHM2NC)

subroutine makectl(cname_all,io_flag,cfile,dfile,goption1,goption2, &

& time_unit,itst,iten,itdt,dt,idate,octl)

subroutine outputzs(cname_all,numzs,num2d,num3d,numad,numvi, &

& nxen,nyen,nnz,omt)

parm.f90 : 定数の宣言utility.f90 : NWPのツール。各緯度経度の格子、水平、鉛直方向の内挿の計算。

subroutine rltln(gi,gj,rlat,rlon,nprojc,dels,slat,slon,xi,xj,xlat,xlon )

subroutine ntransg2 (u,v,flatu,flonu,flatv,flonv, &

& nxi,nyi,nzi,slon,sloni,mprojc,mprom)

function cck(npro)

subroutine intpl2d(nx,ny,nxi,nyi,fi,fj,mask,wk,wki)

subroutine intpl3d(nx,ny,nz,nxi,nyi,fi,fj,mask,wk,wki)

subroutine zstar2z(nx,ny,nz,nzr,zr,zref,zs,cvar,wk,wkz)

subroutine sfc_val(nz,wk,zr,zref,zsfc,cvar,wkz)

subroutine zstar2prs(nx,ny,nz,nzp,prs,plev,psea,wk,wkp)

subroutine ver_int(nx,ny,nz,wk,wk2d)

io.f90 : MRI形式の読み込み、物理量に変換、z^{*}→ z(実地形)の変換 (未使用)

subroutine readwrite_nhm(itst,iten,itdt,imt,omt2,omt3,orec2,orec3, &

& nx,ny,nz,nxi,nyi,nzvi,nxen,nyen,nzst,nzen,nvar, &

& cname,io_flag)

subroutine read_header_nhm(imt,nx,ny,nz,nxi,nyi,nzvi,idate)

subroutine read_nhm(wk,io_flag_2d,io_flag_3d,io_flag_vi,cvar, &

& imt,nx,ny,nzo,it)

subroutine read_nhm_2d(imt,nx,ny,it)

subroutine read_nhm_prs(imt,nx,ny,nz,wk,prs)

subroutine convert_and_output_3d(wk,nx,ny,nz,nxi,nyi,nzvi, &

& nxen,nyen,nnz,nzst,nzen,nvar,iv,it,itst, &

& cvar,omt,orec)

subroutine convert_and_output_2d(wk,nx,ny,nz,nxi,nyi, &

& nxen,nyen,nnz,nzst,nzen,nvar,iv,it,itst, &

& cvar,omt,orec)

subroutine unpack(wk,mt,nx,ny,nz)

subroutine output(nxen,nyen,nz,orec,omt,wko)

subroutine cvar_io_check(nz,imt,io_flag,cname_all,itst,iten,itdt)

78

Page 80: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

subroutine copy_output_array(nx,ny,nz,nxen,nyen,nnz,nzst,nzen,wki,wko)

subroutine copy_wk_array(cname,nx,ny,nz,div,vor,epv,rh,ept,temp,wk)

subroutine copy_wk2d_vi(io_vi,nx,ny,wk2d)

subroutine date_cal(idate,ktsto)

subroutine skip_reading(imt,nzo)

tools.f90 : 変数の変換、マップファクターの計算subroutine conv_dns(wk,dns,nx,ny,nzo)

subroutine conv_mom_v(wk,dns,u,nx,ny,nzo,isw)

subroutine conv_prs(prs,pairf,wk,nx,ny,nzo)

subroutine makemoist(pt,qv,prs,rh,ept,temp,nx,ny,nz)

subroutine cfmap ( nx, ny, mprojc )

subroutine cfmap_core ( nx, ny, mprojc, projection. &

& slat1, slat2, flat, fmap )

nc_tools.f90 : netcdf関連の処理。subroutine nc_init(ncid,nc3d,nx,ny,nzst,nzen,itst,iten,itdt, &

& num2d,num3d,numad,numvi,nvar, idate,cvar,io_flag)

subroutine writetime(ncid,time_id,nt,time)

subroutine output_nc(ncid,var_id,nx,ny,nz,it,iwk)

subroutine conv_r4_to_i2(sw_vc,nx,ny,nz,vmin,vmax,wko,iwk)

subroutine nc_file_close(ncid)

subroutine check_err(iret)

■ メモ自分用メモ。モジュールを折角使っているのに、サブルーチンの引数多過ぎ。ガッカリなプログラムです。作者 (swd)のセンスが問われます。

5 任意の鉛直断面への内挿 (nhm2ver)

NHMの出力 (MRIフォーマット)から直接、任意の鉛直断面を切り出すツール(nhm2ver)。grads形式で出力。必要なプログラム、シェルは、/mnt/sky1/sawada/Nhm-v15/Tools/nhm2ver/

にある。

使い方は、はじめにプログラムをコンパイル。コンパイルが正常に出来たらシェル (nhm2ver.sh)を参照。以下、具体的な手順。

79

Page 81: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

5. 任意の鉛直断面への内挿 (NHM2VER)

$ cd nhm2ver/src/

$ make

$ cd ../

$ sh script/nhm2ver.sh

シェルの変数の意味は nhm2gradsや nhm2ncと大体同じ。以下にシェルの簡単な説明を記述。

---------------------------------------------------------------

#!/bin/sh

#### variable setting & directory

export date=20080112

export NHMDIR=/mnt/sky1/sawada/Nhm-v15

export VERDIR=${NHMDIR}/Tools/nhm2ver

export GPVDIR=/mnt/raid2000/ds3_data/output/${date}_18JST

export WKDIR=${VERDIR}/work_ds3_${date}\1,5km

export SRCDIR=${VERDIR}/src

####

if [ ! -d ${WKDIR} ]; then

mkdir -p ${WKDIR}

fi

cp ${SRCDIR}/nhm2ver ${WKDIR}/

cd ${WKDIR}/

#### link

ln -s ${GPVDIR}/output_122dx1.5 fort.62

lon_st=140.20

lon_en=140.92

lat_st=38.45

lat_en=38.05

nxi=200

nzvi=30

zref="10.0, 20.0, 40.0, 70.0, 100.0, 130.0, 160.0, 190.0, 220.0, 250.0, 300.0, 360.0, 420.0, 480.0, 540.0, 600.0, 680.0, 760.0, 840.0, 920.0, 1000.0, 1100.0, 1200.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0"

80

Page 82: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

#----- run ----------

time ./nhm2ver <<EOF

&namgrd

nx=122,ny=122,nz=38,

itst=0,iten=16,itdt=400

&end

&nammap

mprojc=’LMN’,

clat=38.38, clon=140.99,

slat=38.38, slon=140.00

&end

&namintp ←※下記に変数の設定補足sw_vc=’z’, ←鉛直座標の指定: "z" or "p"

nxi=$nxi, ←断面に沿った水平方向の格子数nzvi=$nzvi, ←鉛直方向の格子数zref=$zref, ←鉛直層のレベル, 単位: "m" or "hPa"

lon_cen=${lon_cen}, lat_cen=${lat_cen}, ←断面の中心位置distance=${distance}, angle=${angle} ←中心からの距離 (km), 角度

&end

&namgrads

cfile3d=’grads3d.ctl’,dfile3d=’grads3d.grd’

goption1=’options big_endian’,

goption2=’no’

&end

&namelm ←出力したい変数: ival3dは出力に含まれるもの,ivaladは計算するもの

ival3d( 1)=1, ival3d( 2)=2, ival3d( 3)=3, ival3d( 4)=4, ival3d( 5)=5,

ival3d( 6)=0, ival3d( 7)=0, ival3d( 8)=0, ival3d( 9)=0, ival3d(10)=0,

ivalad( 1)=1, ivalad( 2)=2, ivalad( 3)=3, ivalad( 4)=4, ivalad( 5)=5,

ivalad( 6)=6, ivalad( 7)=0, ivalad( 8)=0, ivalad( 9)=0, ivalad(10)=0

&end

81

Page 83: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

6. 鉛直方向の内挿(Z*→P-LEVEL, Z-LEVEL,PT-LEVEL)

EOF

---------------------------------------------------------------

■断面位置の設定の仕方 (2通り)どちらかの設定をすればよい。

○中心位置を決めて、そこからの距離と角度を指定する方法lat cen, lon cen: 断面の中心緯度経度distance: 中心からの距離 (単位:km)

angle: 断面の角度 (単位:度)。東が 0度、北が 90度、西が 180度 (-180度)、南が-90

度。

○断面の始点と終点の緯度経度を指定する方法lat st, lon st: 断面の始点の緯度経度 (x=1)

lat en, lon en: 断面の終点の緯度経度 (x=nxi)

6 鉛直方向の内挿(z*→p-level, z-level, pt-level)鉛直座標は z*なので、地形がある場合、水平断面を描くと異なる高度を表示することになる。つまり、gradsで”set z 10”とした場合、たとえ z=1460mでも地点によって実際の高度は異なる。そこで、同じ高度、あるいは同じ気圧面で水平面を表示したい場合は鉛直方向に内挿しなければならない。変換ツールは、

/mnt/sky1/sawada/Nhm-v15/Tools/zstar2prs/

の中の”src/”,”script/”をコピーして使えばOK。

鉛直座標変換シェルは主に以下のことを実行、設定します。1. gradsの ctlファイルから格子数、緯度経度、変数を読み取る。2. 気圧面内挿 (cver=p) or 高度面内挿 (cver=z) or 温位面内挿 (cver=t) が可能。3. 鉛直座標面 plev=”950.0 900.0 850.0 700.0...”のように設定。

鉛直座標変換のシェルの使い方”zstar2prs.sh”の中の概要を説明(一部省略)。

----- 以下、script ---------------------------------------------------------

#!/bin/sh

82

Page 84: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

### variable definition : 変数の設定export LANG=EN

export GRADSDIR=grads_72dx30_20050620

export HMDIR=/mnt/sky1/sawada/Nhm-v15/Tools/zstar2prs

export SRCDIR=${HMDIR}/src

export WKDIR=$HMDIR/work

if [ ! -d $WKDIR ]; then

mkdir -p $WKDIR

fi

### compile : プログラムのコンパイルcd $SRCDIR

ifort -assume byterecl -o read_grads_prs read_grads_prs.f90 interp.f90

if [ ! -f read_grads_prs ]; then

echo ’compile failed!!!’

exit

fi

cp read_grads_prs $WKDIR

### link: grads data <=> fort.XX : リンクを貼るcd $WKDIR

echo ${GRADSDIR}

if [ -f fort.13 ]; then

rm -f fort.11 fort.12 fort.13 fort.20 fort.51

fi

ln -s ${GRADSDIR}/grads3d.ctl fort.20 ← 3次元データの ctlファイルへリンクln -s ${GRADSDIR}/grads3d.grd fort.13 ← 3次元データの gradsファイルへリンクln -s ${GRADSDIR}/gradszs.grd fort.11 ←地形データの gradsファイルへリンク

83

Page 85: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

6. 鉛直方向の内挿(Z*→P-LEVEL, Z-LEVEL,PT-LEVEL)

### grid number setting (don’t edit) : ここは編集しない!nx=‘grep -i "xdef" fort.20 | gawk ’{print $2}’‘

ny=‘grep -i "ydef" fort.20 | gawk ’{print $2}’‘

nz=‘grep -i "zdef" fort.20 | gawk ’{print $2}’‘

nt=‘grep -i "tdef" fort.20 | gawk ’{print $2}’‘

nv=‘grep -i "vars" fort.20 |grep -v "endvars" | gawk ’{print $2}’‘

zlev=‘grep -i "zdef" fort.20 | gawk ’{print $2}’‘

ctl_line=‘wc -l fort.20|gawk ’{print $1}’‘

export F_UFMTENDIAN=big

### p-level or height-level (edit properly)

# number of vertical level

nzp=10 ←鉛直内挿する鉛直層の数

# type of vertical coordinate

cver=p ←鉛直座標の種類 p:気圧座標, z:高度座標, t:温位座標

#### each levels

## pressure [hPa] ↓内挿したい各等圧面plev="950.0, 900.0, 850.0, 800.0, 700.0, 600.0, 500.0, 400.0, 300.0, 200.0"

 ## height [m] ↓内挿したい各高度面#plev="100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 800.0, 1000.0, 1200.0, 1500.0, 2000.0, 30

00.0, 4000.0, 5000.0, 6000.0"

## isentropic [K] ↓内挿したい各温位面#plev="300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0"

### run

./read_grads_prs <<EOF >& log_zstar2prs ←内挿プログラムの実行&namgrd ←変換したい 3次元データの格子数など。編集しないこと!

nx=$nx, ny=$ny, nz=$nz, nt=$nt, nv3=$nv, nzp=${nzp}, ctl_l=$ctl_line

&end

&namver ←鉛直座標の種類、各鉛直面を指定。編集しないこと!cver=$cver,

84

Page 86: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

plev=$plev

&end

EOF

## move vertically interporated file

mv -f ./fort.51 ./grads_${cver}.grd

## create ctl_file ←鉛直内挿したファイルに対する ctlファイル。cd $WKDIR

undef_line=‘grep -ni "undef" fort.20|cut -c 1‘

undef_new="undef -9999.0"

zdef_line=‘grep -ni "zdef" fort.20|cut -c 1‘

zdef_new="zdef $nzp levels $plev"

sed s/grads3d/grads_${cver}/g < fort.20 > tmp1.txt

sed "${zdef_line}c ${zdef_new}" < tmp1.txt > tmp2.txt

sed "${undef_line}c ${undef_new}" < tmp2.txt > tmp3.txt

sed ’s/’$nz’/’$nzp’/g’ < tmp3.txt > grads_${cver}.ctl

### end

7 p面、z面直接内挿やっていることは nhm2gradsと鉛直方向の内挿を同時にしています。要するに、NHMの出力を直接 p面あるいは z面に変換します。変換ツールは、/mnt/sky1/sawada/Nhm-v15/Tools/nhm p int/

の中の”src/”,”script/”をコピーして使えばOK。ほとんど nhm2grads と同じ。ctl

ファイルは nhm2grads同様、作成される。(ちなみに僕はあまり必要ないので、やや大雑把です、バグ報告歓迎、修正大歓迎)

----- 以下、script -----------------------------------------------------------

#!/bin/bash

#---- for Intel compiler ---

export F_UFMTENDIAN=big

export LANG=EN

85

Page 87: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

7. P面、Z面直接内挿

export SPEC=72dx6

export SUFFIX=00UTC

export DATE_yY=2007

export DATE_yM=03

export DATE_yD=07

export MONTH=MAR

export DATE_y=${DATE_yY}${DATE_yM}${DATE_yD}

export LANG=EN

export NHMDIR=/mnt/sky1/sawada/Nhm-v15

export NtoGR=${NHMDIR}/Tools/nhm_p_int

export GPVDIR=/mnt/raid2000/ds3/4cast-cron/execution/output/72dx6/00UTC/output_${SPEC}_${SUFFIX}_${DATE_y}

export GRADSDIR=${NtoGR}/${SPEC}_${SUFFIX}_${DATE_y}

export SRCDIR=${NtoGR}/src

export MODDIR=${NtoGR}/module

#--- link ---

if [ ! -d $GRADSDIR ]; then

mkdir $GRADSDIR

fi

echo ${GRADSDIR}

cd ${GRADSDIR}

if [ -f fort.62 ]; then

rm fort.*

fi

ln -s ${GPVDIR}/output_4cast_${SPEC}_${SUFFIX}_${DATE_y} fort.62

#--- compile ---

cd ${SRCDIR}

ifort -o nhm_p_int -check all -traceback -assume byterecl parm.f90 common.f90 congrid.f90 var_mem.f90 chk.f90 grads.f90 utility.f90 makval.f90 nhm2grads_new.f90#ifort -o nhm_p_int -assume byterecl parm.f90 common.f90 congrid.f90 var_mem.f90 chk.f90 grads.f90 utility.f90 makval.f90 nhm2grads_new.f90

cp nhm_p_int ${GRADSDIR}

86

Page 88: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

cd ${GRADSDIR}

#----- run ----------

#exit

nzp=20 ←内挿する層数#pref="100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0"

 ← z面の例pref="980.0, 960.0, 940.0, 920.0, 900.0, 880.0, 860.0, 840.0, 820.0, 800.0, 750.0, 700.0, 650.0, 600.0, 550.0, 500.0, 450.0, 400.0, 350.0, 300.0"

 ← p面の例

#time ./nhm_p_int -Wl,-T <<EOF > log_nhm_p_int

time ./nhm_p_int <<EOF > log_nhm_p_int

&namgrd

nx=72,ny=72,nz=38,

itst=0,iten=20,itdt=150

&end

&namver ←新しく追加した namelist。鉛直方向の設定。上記で設定。iver=2,nzp=$nzp, ← p面か、z面の選択、内挿する層数。pref=$pref ←内挿する各 levelの設定。

&end

&namswitch

igoption1=2, itf=0

&end

&namctl

goption1=’options big_endian’,

goption2=’no’,

gtime0="18z${DATE_yD}${MONTH}${DATE_yY}"

&end

87

Page 89: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

7. P面、Z面直接内挿

&namgrads

cfile3d=’grads3d.ctl’,dfile3d=’grads3d.grd’

cfile2d=’grads2d.ctl’,dfile2d=’grads2d.grd’

cfilezs=’gradszs.ctl’,dfilezs=’gradszs.grd’

&end

&nammproj

mpsw=2,

xlat=38.3,xlon=140.5,

slato=38.3, slono=141.0

&end

&namelm

ival3d( 1)=1, ival3d( 2)=2, ival3d( 3)=3, ival3d( 4)=4, ival3d( 5)=6,

ival3d( 6)=7, ival3d( 7)=8, ival3d( 8)=9, ival3d( 9)=10, ival3d(10)=18,

ival3d(11)=5, ival3d(12)=0, ival3d(13)=0, ival3d(14)=0, ival3d(15)=0,

ival3d(16)=0, ival3d(17)=0, ival3d(18)=0, ival3d(19)=0, ival3d(20)=0,

ival3d(21)=0, ival3d(22)=0, ival3d(23)=0, ival3d(24)=0, ival3d(25)=0,

ival3d(26)=0,

ival2d( 1)=1, ival2d( 2)=2, ival2d( 3)=3, ival2d( 4)=11, ival2d( 5)=12,

ival2d( 6)=13, ival2d( 7)=16, ival2d( 8)=0, ival2d( 9)=0, ival2d(10)=0,

ival2d(11)=0, ival2d(12)=0, ival2d(13)=0, ival2d(14)=0, ival2d(15)=0,

ivalzs( 1)=1, ivalzs( 2)=2, ivalzs( 3)=3, ivalzs( 4)=4, ivalzs( 5)=0,

ivalzs( 6)=0, ivalzs( 7)=0,

&end

EOF

○気になるところ

• 下層の扱いが不十分。最下層(通常 20mかな)以下では undefになる(下層10mを出力したければ要修正)。

• 気圧面の場合、地形の下でも外挿した方がRSM,MSMと比べやすい?

• プログラムが汚くなった。バグ取りがややしづらい。

88

Page 90: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

8 データの可視化始めにmri形式→ grads形式の説明をしましたが、可視化ソフトは grads以外にも沢山あります。講座内で使用される(された)フリーのツールの例として、

• grads: 気象用の描画ツール

• gnuplot: 線が基本、等値線、3次元なども描ける

• ngraph: 線が基本、等値線は描ける、国産、日本語OK

• GMT: 地形などを描くのに優れている。等値線などもOK

• pgplot: fortran, c などのライブラリ

• dcl: 地球電脳ライブラリの可視化ツール、国産

• plotps: 非静力で使われる ps作成ライブラリ、簡単そう。

• ncarg: MM5などで使用、ライブラリ?

• vis5d: 3次元の等値面が描ける、プレゼン用の絵に良いかも

• IDV: 3次元の等値面が描ける、vis5dより高機能かも

• R: 基本は統計処理ソフト、超強力らしい

grads, gnuplot はドキュメントがweb上にかなりあるので、そちらを参考。GMT

もそこそこあります。pgplotはライブラリのため、使い慣れるまでやや面倒かも。慣れれば何でも出来そう。dclも pgplotと同様だが、国産なのでマニュアルが日本語でやや敷居が低いかも。ncargは謎。Rは統計処理に関して非常に優れている。日本語のマニュアル(メモ)もweb上にある。vis5d, plotps についてのみ簡単な解説をします。vis5dは個人的好み。上記のツールの中では等値面を描けるのはこれだけ。plotpsは日本語の正規のマニュアル「気象研究所技術報告 第 44号」を見るのが一番良い。非常に分かり易い。

8.1 vis5d

1. grads形式のデータを準備

2. grads形式 → vis5d形式 (v5dimport)

89

Page 91: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

8. データの可視化

3. vis5dで描画し、絵を調整

4. script (tcl) で適当に保存(手動で保存でも良い)

■インストール使用環境は”Vine Linux 3.2”、”vis5d+1.2.1”での話。ちなみに”vis5d+”に必要なライブラリとして”mesa”や”OpenGL”などの3次元描画用ライブラリを準備。”vis5d-

5.2.tgz”とかならば”Mesa”が含まれているのでそれを利用してもいいかも。但し古いので、コンパイルが失敗するかも (gcc3系になったため) vine linuxの場合ですが、OpenGLで代用できた気が。と、glutを入れておけばうまくいった気がします。

# apt-get install XOrg-libs XOrg-devel XOrg-gl-devel

# apt-get install glut glut-devel

このあとは、

# tar zxvf vis5d+-1.2.1.tar.gz

# sh configure ← Makefileの作成# make ←ソースコンパイル# make install ←出来た実行ファイルのインストール

でOK(vis5d+の場合)。Centos 4.4? でのインストール始めに、”sh configure” としたときに、”checking for X ... no”というメッセージが出て、Makefikeが作れない場合は、”/usr/X11R6/include/X11/Intrinsic.h” というファイルがないというエラーログ(config.logの中)があるはず。そもそも”xorg-

x11-devel”がないと/usr/X11R6/include/が空っぽですが。そこで、

# yum install xorg-x11-Mesa-libGL glut glut-devel xorg-x11-devel

でX関係で必要なパッケージをインストール (パッケージの確認は”rpm -qa—grep

xorg-x11” などで)。この後は同じ作業、

# sh configure ← Makefileの作成# make ←ソースコンパイル# make install ←出来た実行ファイルのインストール

で良し→ streamにインストールしておきました。■データの作成まずサンプルを以下のリンクに置いておきます。始めに使い勝手を知りたい人の

90

Page 92: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

ため。vis5dは基本的に vis5d専用のフォーマットにしなければならない。しかし、grads形式のデータを変換するツール(v5dimport)があるのでそれで簡単に変換可能。もちろん、任意のデータを読み込んで変換するためのライブラリ&サンプルプログラムがあります。$ v5dimport -path

と入力し、”Read file...”をクリックし gradsの ctlファイルを読み込む(ctlを選んでOKをクリック。ダブルクリックは出来ない)。Rows:, Columns: Max Levels:

が正しいことを確認したら、”File name”の入力スペース上にマウスを合わせ、適当なファイル名を入力し、Makeをクリック。これで grads形式→ vis5d形式の変換が行われる。※変換ができない時、エラーが出た時。大抵、変換が上手くいかないのは ctlファイルが不適切なときです(gradsを使用する上では問題ない場合でも)。以下、ctlファイルの修正の仕方について。

options template yrev

と”options”の項目を書くと引っかかります。以下のように分けて書きます。

options template

options yrev

鉛直座標が気圧面だったら基本的に問題ないですが(小数点が入ると失敗するかも)、Z座標、つまり不等間隔の高度が入っていると異常と見なされて変換が正常に出来ません。非静力の場合、たいてい鉛直不等間隔でしょうから、引っかかるはず。そこで、ZDEF 36 LEVELS 0.02 0.06 0.13 0.23 0.36 0.52 0.71 0.93 1.18 1.46 1.77 2.11 2.48

2.88 3.31 3.77 4.26 4.78 5.33 5.91 6.52 7.16 7.83 8.53 9.26 10.02 10.81 11.63 12.48

13.36 14.27 15.21 16.18 17.18 18.21 19.27

などの場合、とりあえずうその高度に書き換えて変換してしまい、それから高度を修正します。

ZDEF 36 linear 0.0 1.0

などとします。次に高度データを修正するには v5deditを使います。$ v5dedit hoge.v5d

とすると、”5. Vertical coordinate system”とあるので、”5”を入力して enter.

Current vertical coordinate system:

0. Linear, equally spaced km

1. Bottom Bound = 0 km

2. Level Increment = 0.1 km

91

Page 93: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

8. データの可視化

とでるので、”0”を入力して鉛直座標系の変更をします。

Vertical coordinate systems:

1. Generic linear, equally spaced

2. Linear, equally spaced km

3. Linear, unequally spaced km

4. Pressure, unequally spaced mb

と出るので、”3”を選択し鉛直に不等間隔格子(km単位)を選びます。この後、”q”

を 2回押して ”Save changes made (y/n)?” と聞かれたら”y”と入力すれば保存されます。ここまでは鉛直座標系を修正しただけ。次に高度の値を修正する。ほとんど同様の手順。$ v5dedit hoge.v5d

と入力して、”5”を入力すると、鉛直層数の分だけ選択肢があるのが分かるはず。これを 1つ 1つ選択して直せばOK。つまり、”5”→”1”→”0.02(1層目の高度)”

→”2”→”0.06(2層目の高度)”. . .→”36”→”19.27(36層目の高度)”→”q”→”q”

→”y”

という感じになる。正直面倒です。なので、シェルスクリプトで一度フォーマットを作ってしまいましょう。以下、シェルの例。http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/v5d z convert.shを参照。

----- 以下、script -----------------------------------------------------------

#!/bin/sh

v5dedit test.v5d <<EOF

5 ←鉛直座標系の修正0 ←座標系の選択3 ←不等間隔格子の選択1 ← 1層目の変更を選択

0.02 ← 1層目の正しい高度の入力2 ← 2層目の変更を選択

0.06 ← 2層目の正しい高度の入力3 ← 3層目の変更を選択

0.13 ← 3層目の正しい高度の入力...

...

...

32 ← 32層目の変更を選択

92

Page 94: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

15.21 ← 33層目の正しい高度の入力33 ← 33層目の変更を選択16.18 ← 33層目の正しい高度の入力q ←座標系の修正モードを exit

q ←ファイルの修正モードを exit

y ←変更した結果を保存

EOF

■使い方コマンドは、$ vis5d hoge.v5d

だけ。オプションをいろいろつけるなら、$ vis5d hoge.v5d -hirestopo -projection spherical -mbs 300

-hirestopo: 高解像度の地形を使用、やや動作が重い。-projection spherical: 球面上に図を投影する。他は lambert, stereoなど-mbs 300: 使用するメモリサイズが 300MBという意味。データ量の 3倍が目安

メモリが足りないと、使用中に絵が表示されなくなることが多々あります。以下、こんな絵が描けます。

Vis5dを起動するとウィンドウが 3つくらい(2つは操作用、1つは表示用)開きます。適当にボタンを押す”Contour Horiz”,”Colored Vert”など。そのあと”AN-

IMATE”を押せばアニメーションが見られます。雲のモクモクは”Isosurf”(等値面の描画)の変数名を押して新たな”Vis5d Control Panel”が出るので、それでしきい値を調整して”OK”を押す。色は”Isosurf”の変数名を右クリックしてRGBおよび透過を調整します。■vis5dのスクリプト(tcl)ある決まった動作をさせたい、例えばある角度で見たい、ある拡大率で見たい、連続して図を保存したい(アニメーションの作成)などをしたい時は tclというスクリプト言語を用います。正直良く分かっていないので、元々あったサンプルを少し修正したものを紹介。以下 grads, ctl, v5d, tclなどのサンプル。一部すでにないかも。

1. 台風の理想化実験の結果:凝結物の等値面 24MB

http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/cloud.gif

2. JRA再解析:温度の等値面 (200K、195K) 1.8MB

http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/temp global.gif

93

Page 95: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

8. データの可視化

図 6.2: vis5dで全凝結物量の等値面を描画。0.5g/kg(灰色、やや透過), 1.0g/kg(水色)

台風の理想化実験の結果:gradsの ctlファイル、dataファイル、それを vis5d形式に変換したファイル。http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/qt samp.ctl

http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/qt samp.grd 103MB

http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/qt samp.v5d 25MB

JRAの気温を変換したもの。1年分http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/t.v5d 85MB

vis5dの鉛直座標を書き換えるためのスクリプトの例 (MM5なら多分必要なし)

http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/v5d z convert.sh

vis5dのスクリプト (tcl)のサンプルhttp://wind.geophys.tohoku.ac.jp/ sawada/vis5d/movie.tcl

http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/movie rot.tcl

http://wind.geophys.tohoku.ac.jp/ sawada/vis5d/iso anim.ctl

8.2 plotps 書き中. . .

使う理由は、

94

Page 96: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

• データを読み込めばどんな形式でも描画可能。わざわざ gradsを開く必要が無い。ctlファイルもいらない

• 鉛直座標に Z*, σ座標系をそのまま使える。

• マニュアルが日本語。日本語の入力も可能らしい。

欠点は、

• 関数を callして全て自分で書かなければならない。面倒。

• 違う水平・鉛直断面を描くにはいちいちデータを読み込まなければならない。gradsで”set x, set y”にあたる作業が面倒。

で、これは非静力に付属している描画ツール。fortranのライブラリ。postscriptを直接出力。あちこち(kplot, pandah, mridraw...)で使用されているみたい。基本的に必要なものは”Nhm/Module/Src/PREPOST/plotpswk.f”だけ。サブルーチンそのものの解説はしません。マニュアルがあるのでそちらを参照。ここでは、実際にこの描画ツールを使用している部分を抜き出してどう使われているかをメモするだけ。○ 水平面(contour, shade, hatchなど)を書きたい

”topo make/script/step3.dx30.sh”で使用される”read topo make ps.f90”の描画部分について説明、以下の通り。

! --- plot postscript image

call spsa4v(20) ←装置番号 20番で psファイルを出力call setdrw(x0,y0,xfct/real(nx-1),yfct/real(ny-1)) 

    (↑図の位置、大きさ。(x0,y0)が図の左下の位置、(xfct,yfct)が図の大きさで、それを 1格子辺りの大きさに直している)

call setbar(1,x0+xfct*1.02,y0,x0+xfct*1.07,y0+yfct*0.7,yfct*0.03)

    (↑カラーバーの設定。x0~y0+yfct*0.7はカラーバーの左下の (x,y)

と右上の (x,y)、yfct*0.03は文字の大きさ)call ashade(zs,nx,nx,ny,50.0,1500.0,100.0, 0,786,0)

    (↑塗りつぶし。zsが配列データ、nx,nyは配列の大きさ、50~1500までを 100間隔で描画、0,786,0は色の設定)

call penx(10107) ! line type, thick, color ←コンターやラインの線種の設定。線のタイプ、太さ、色

call contr(zs,nx,nx,ny,100.0,1500.0,100.0)

95

Page 97: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

8. データの可視化

    (↑コンターの描画。nx,nyは配列の大きさ、100~1500までを 100間隔で描画)

call penx(10507) ←コンターやラインの線種の設定。線のタイプ、太さ、色call contr(sl,nx,nx,ny,0.5,0.5,1.0)

    (↑コンターの描画)call penx(10107) ←コンターやラインの線種の設定call setval(-3, 1.0, 0.0, -1.0, yfct*0.7, 3.0, 4.0) ←コンターのラ

ベルの設定call contr(flatit,nx,nx,ny,stlat,lat_max,dlat) ←経度のコンター、stlat

から lat_maxまで dlat間隔のコンターを描画call contr(flongi,nx,nx,ny,stlon,lon_max,dlon) ←緯度のコンター、stlon

から lon_maxまで dlat間隔のコンターを描画name = "Surface height [m]" ! input caption ←文字を変数に入力clen = len(trim(name)); print*,’clen:’,clen ! number of character 

←文字数のカウントcall symbol(x0,y0+yfct*1.01,yfct*0.03,name,0.0,clen) ←文字を描画、

文字の位置、文字数、角度など! call showpage ! = plot(0.0,0.0,5) ←次のページに移るcall endofps ← psファイルの書き込みを終了! --- plot postscript image end

ここでは (x0,y0)が図の左下の位置、(xfct,yfct)が図の大きさ。これらを基本にそれぞれの位置を適当に決める。”contr”,”ashade”の”nx,nx,ny”の始めの”nx”が配列の大きさ、2個目の”nx”は使用する領域の大きさ。線種や色はマニュアル参照。○ 鉛直断面を書きたい

”/mnt/sky1/sawada/Nhm-v15/Tools/vertical/”の中の”read grads3d.f90” の描画部分参照。

! --- plot with postscript

min_val = minval(wkzs(:,:,6)) ←コンターや塗りつぶしの最小値max_val = maxval(wkzs(:,:,6)) ←コンターや塗りつぶしの最大値dval = max_val - min_val

beki = int(log10(dval))

cint = nint(dval/10.0**beki) ←コンター間隔、小さい桁を適当に四捨五入st_val = int( (min_val + 0.5*cint)/10.0**beki )*10.0**beki

print*,’dval,beki,cint:’,dval,beki,cint

96

Page 98: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

! ---

call factor(1.0) ←拡大率call penx(10307) ←線種write( it_char, ’(I10)’ ) it

name = "Time="//trim(adjustl(it_char)) ←描き込む文字print*,’time:’,name

clen = len(trim(name)); print*,’clen:’,clen ←描き込む文字数call symbol( x0,y0+yfct*1.01,4.0,name,0.0,clen ) ←文字の描画call setdrw( x0,y0,xfct/real(nxi2-1),yfct/real(nz-1) ) ←図の設定call setdxdy(-3,1.0,z_km,zsfc_i*0.001,nxi2,nz,horg*0.001,0.0,9) ! [km]

call setbar(1,x0+xfct*1.02,y0,x0+xfct*1.05,y0+yfct*0.9,xfct*0.02) ←カラーバーcall ashade(wkzs(:,:,6),nxi2,nxi2,nz,st_val,max_val,cint,1,1,-1) ←塗りつぶし

! --- x-axis --- ← x軸の描画、軸の刻み線&ラベルを自分で設定do i = 0,8

dx = xfct * real(i)/real(8)

call plot(x0+dx,y0,3)  ←ペンを上げて (x0+dx,y0)に移動call plot(x0+dx,y0-yfct*0.03,2) ←ペンを下げて(x0+dx,y0-yfct*0.03)

に移動write(name,’(I5)’) (i-4)*10

clen = len(trim(name))

call symbol(x0+dx-xfct*0.04,y0-yfct*0.13,3.3,name,0.0,clen) ←軸のラベルenddo

! --- y-axis --- ← y軸の描画、軸の刻み線&ラベルを自分で設定yaxis = aint(yfct/2/2)

iy = int(yaxis)

do i = 0,iy

dy = 4.0 * yaxis * real(i)/real(iy)

call plot(x0,y0+dy,3)  ←ペンを上げて (x0,y0+dy)に移動call plot(x0-yfct*0.03,y0+dy,2)  ←ペンを下げて(x0-yfct*0.03,y0+dy)

に移動write(name,’(I5)’) int(i)*2

clen = len(trim(name))

97

Page 99: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

8. データの可視化

call symbol(x0-xfct*0.07,y0+dy-yfct*0.02,3.3,name,0.0,clen) ←軸のラベルenddo

図 6.3: 風の経度-高度断面。灰色の部分が地形。

98

Page 100: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

99

第7章 そのほか

1. シェル入門

2. バイナリファイルの種類と読み書き

1 シェル入門(ではない)要するに、コマンドの羅列です。自分的にはそれ以上表現の仕様がない。入門と言いつつ、面倒なので実践編。NHMの実行 shellをサンプルに。”#”はコメントを意味します(つまり、実行されない)。例えば、$ sh fcst test.sh 72dx24 00UTC   と実行した場合、

----- 以下、script -----------------------------------------------------------

#!/bin/sh -evx

set -e -v -x ←"-v"コマンドを 1行ごとに表示、        "-x"コマンド名と引数を"+"に続いて表示### date & variable definition

SPEC=$1  ←シェル実行時の引数の 1個目(72dx24がはいる)SUFFIX=$2 ←シェル実行時の引数の 2個目(00UTCがはいる)DATE=‘date -d ’today’ +\%Y\%m\%d‘

NAME=${SPEC}_${SUFFIX}_${DATE} ←変数 DATEに値を入力FORT=fort. ←変数 FORTに値を入力NHMDIR=/mnt/sky1/sawada/Nhm-v15 ←変数の入力CSTDIR=${NHMDIR}/Const ←${NHMDIR}は入力された値を使用するという意味。

LOGDIR=${NHMDIR}/Log/Pf/FCST

BINDIR=${NHMDIR}/Module/Bin

PARMDIR=${NHMDIR}/Parm/Pf/FCST

BCDDIR=/mnt/sky1/sawada/initdata_${NAME}

WKDIR=${NHMDIR}/Data/Pf/FCST/work_${SPEC}

Page 101: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

1. シェル入門(ではない)

### mkdir

if [ ! -d ${WKDIR} ]; then mkdir -p ${WKDIR} ; fi if [ ! -d ${LOGDIR} ]; then mkdir -p ${LOGDIR} ; fi

   ↑ディレクトリがなかったらそのディレクトリを作る。    "if~fi"は条件分岐、"!"は否定系、"-d"はディレクトリの有無。###################################################################

# file link

cd $WKDIR ←ディレクトリの移動

rm -f ${FORT}* ← fort.*の削除ln -s $BCDDIR/uvptq$NAME ${FORT}23 ←初期値に fort.23をリンク。ln -s $BCDDIR/ptgrd$NAME ${FORT}25

ln -s $BCDDIR/org$NAME ${FORT}50

ln -s $CSTDIR/BANDCNX ${FORT}30

ln -s $CSTDIR/band.dat ${FORT}31

  ↑ fort.*にリンクを張るのは fortranでの入力ファイル名が   "fort.装置番号"となるから。

###################################################################

echo ’#### Time integration started ####’

###################################################################

echo "2006 08 01 00 01" > timecard ←"echo"で出力、それを">"で"timecard"

に保存。export F_UFMTENDIAN="big" ←環境変数の設定   "export"を使用して変数を宣言すると子プロセスに引き継がれる。   ただし、ここでは特に意味は無いかと。${BINDIR}/fcst_nfx < ${PARMDIR}/parm_${SPEC} > log.fcst_mpi.$$

  ↑モデルの実行、parm_72dx24というファイルを与えている。log.fcst.mpi.$$というファイルに端末に出力されるモニタを保存。"$$"はシェルを実行した時のプロセス番号。

###################################################################

##### POST PROCESS

###################################################################

mv ${FORT}62 $WKDIR/output.$NAME ←ファイルの移動mv log.* $LOGDIR

100

Page 102: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 7. そのほか

rm -f ${FORT}* ← fort.*を削除cd $HOME

# JOB END

一部、記述を省いています。あんまり説明になっていないかも。変数の頭に”$”が付くと、変数に入力した値が使える。ちなみに”${}”も基本的には意味は同じ。‘date‘ と ’date’ では全く意味が違います。良く使われるし、間違いやすいので要注意。よく使うコマンド、シェルのみ簡単に列挙。

echo "hoge":"hoge"と出力するexport YEAR=2007:変数の宣言、子シェル (シェルの中で起動したシェル)の中でも有効。ln -s AAA BBB:AAAというファイル (ディレクトリ)に BBBという名前でリンクを張る。ショートカットみたいなもの。cd :ディレクトリの移動rm -f:ファイルの強制削除mv :ファイルの移動、名前の変更if []; then:条件分岐 ! :否定系、[]内の条件が成り立たない場合に真 -d:ディレクトリの有無、有なら真

-f:ファイルの有無、有なら真./hoge.exe << EOF :EOFでくくられたパラメータを hoge.exeに渡す。

hoge1 hoge2 hoge3

EOF

使い方、意味の分からないシェルコマンドは以下のHPなどを参照日経 linuxコマンド集日経 linuxコマンド逆引き集linuxコマンド集 ITpro

シェルスクリプト (Bash)

Bash(これが分かれば何でも出来る?)

これらにない場合は google で調べてみましょう。

101

Page 103: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. バイナリファイルの種類と読み書き

2 バイナリファイルの種類と読み書きバイナリ形式とはテキストとして読めない形式のファイル全般。要するに”0”

と”1”で表記されたもの(というのは変ですが)。再解析、客観解析、モデルの出力、grads形式、netcdf形式、どれにしてもバイナリファイルです(これもちょっと表現が変ですが)。ここで注意したいのは、バイナリの中にも何種類か形式があるということ。1つはエンディアン(big/little-endian)、もう1つは直接探査(direct)、順番探査(sequential)です。(正しくは同列に扱うべきではないですが・・・)

■ エンディアン(endian):バイトオーダ(byte order)

バイナリは”0”と”1”の羅列。その並び方(byte order)によって big-endianかlittle-endianが決まる。具体的には、”1234ABCD”という 16進数の 4byteデータの扱いがどう違うかと言うと、12 34 AB CD : big endian

CD AB 34 12 : little endian

という方式の違いのことです。”12”や”CD”でそれぞれ 1byte。ちなみに、  12(16

進数)=0001 0010(2進数) です。byte order は使用する PCで決まる。もちろんどの機種でも変換は出来る。little-endian: Intel(うちの講座のWS), DEC Alphaなど。big-endian: NEC-SX, Sun SPARC, Mac?など。という感じ。で、具体的にどう変換するかですが主に、

• 環境変数で endian(byte order)を決める。

• コンパイラで決める。

• fortranで 1byteづつ読んで、自分で変換する。

という方法があります。いちばん簡単なのは環境変数。ただし、f77は使用できないかも。ifort(ifc), frt, pgf, gfortran, g95(?)は使用可能。

$ export F_UFMTENDIAN=big ← big endian

$ export F_UFMTENDIAN=little ← little endian

$ export F_UFMTENDIAN="big;little 10,20" ←基本は big, 装置番号 10,20

は littleで扱う。セミコロンを絶対に付けること。

102

Page 104: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

装置番号とは fortranでいう、open(10,file=”hoge”,form=”unformatted”)の”10”

のことです。コンパイラでの変換の仕方ですが、コンパイルオプションに以下のように加えます。$ ifort -convert big endian ← big endian

$ ifort -convert little endian ← little endian

gfortranの場合、$ gfortran -fconvert=big endian ← big endian

$ gfortran -fconvert=little endian ← little endian

frt(f90)ではコンパイルはいつも通りに行い、実行時にオプションを付けます。$ ./a.out -Wl,-T (講座のWSで付けると big endian扱いになる)

$ ./a.out -Wl,-T10,20 ←装置番号 10,20のみ big endian

pgf90(pgf77)ではコンパイルオプションを加える。$ pgf90 -byteswapio ←講座内のWSならば big endianの扱いになる。こんなところでしょうか。■ プログラムでの変換の仕方の例以下、無保証で。文法違反 (引数を渡す際、型を変換)なので、コンパイラによってエラーが出るかと。program read

implicit none

integer(4) :: header, ist, ien

!

open(10,file=’hoge.bin’,form=’unformatted’,access=’direct’,recl=1*4)

read(10,rec=1) header

read(10,rec=2) ist

read(10,rec=3) ien

print*,’original : ’,header, ist, ien

call change(header)

call change(ist)

call change(ien)

print*,’changed : ’,header, ist, ien

end program read

subroutine change(c)

implicit none

character(len=1) :: c(1:4), c_tmp(1:4)

103

Page 105: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. バイナリファイルの種類と読み書き

integer :: i

do i = 1,4

c_tmp(5-i) = c(i)

enddo

do i = 1,4

c(i) = c_tmp(i)

enddo

return

end subroutine change

■ sequential/direct access

fortranの参考書のデータ入出力の項を参照。簡単にsequential access(順番探査):  ファイルを先頭から順番に読む。JMA-NHM

の入出力するファイルはこの形式が多い。direct access(直接探査):  ファイルのレコード (record)の番号を指定してどの位置のデータでも直接読める。gradsはこの形式を利用 (オプションで変更可能”options sequential”)。具体的な違いは、5個の実数(5×4byte=20byte)をそれぞれ出力すると、sequential: HHHH 1111 2222 3333 4444 5555 FFFF ← (5+2)×4byte

direct: 1111 2222 3333 4444 5555 ← 5×4byte

上記はイメージです。HHHH, FFFF はそれぞれヘッダーとフッダー、合わせて8byte。1111, . . . 5555はそれぞれ 4byteのデータ(1文字 1byteというイメージ)。つまり、sequentialは必ず 8byte増える。ちなみにヘッダーとフッダーにはデータ数が記録されている(はず)ので、この場合は整数型で”5”があるはず。で、fortranで読み書きするには、

sequentialなら、open(10,file="hoge.bin",form="unformatted",access="sequential")

read(10) hogehoge

directなら、open(10,file="hoge.bin",form="unformatted",access="direct",recl=10*4)

read(10,rec=1) hogehoge

104

Page 106: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

とファイルを開く(読む場合も書き込む場合も)。見ての通り、access=”sequential/direct”

でアクセス方式を決める。direct access の場合、もう 1つ余計な recl=10*4 というのが付いている。これは 1recordのデータの大きさ(record length)を表わしている。*4は 4byteの意味。2byte, 1byteデータを扱いたければ”*2”,”*1”とすればよい。例えば、4byteづつデータを読みたければ”recl=1*4”、72×72格子のデータを一度に読みたければ、”recl=72*72*4”と書けばよい。コンパイル、実行は endianと違って特に気にしないで良いが、ifortを使用するときのみ要注意。基本的に以下のようにコンパイルすること。$ ifort -assume byterecl hoge.f90

こうしないと、”recl”が byte単位ではなく、word単位になってしまう.

ちなみに、sequentialのファイルは direct accessでも読むことは出来るので、間違えないよう要注意。

■ CFL条件の計算

ios.f90: sub.set ns で計算。dtuv, dtw, dtgのそれぞれの計算の仕方。プログラムの中での大雑把な計算順序を示しています。

rdxdy2ix,jy = (fmap1ix,jy × vrdx)2 + (fmap2ix,jy × vrdy)2 (7.1)

dtwrk = (udiag sc2ix,jy + vdiag sc2

ix,jy) × rdxdyix,jy (7.2)

dtuv = 1/√

max(dtwrk) (7.3)

dtwrk = abs(wdiag scix,jy) × vrdz2kz × g2invwix,jy,kz (7.4)

dtw = 1/√

max(dtwrk) (7.5)

dptdz = (ptix,jy,kz+1 − ptix,jy,kz) × vrdz2 × g2invw (7.6)

bn = g/(ptrf + ptix,jy,kz) × dptdz (7.7)

udiag_sc: スカラー量の位置での東西風速の値vdiag_sc: スカラー量の位置での南北風速の値wdiag_sc: スカラー量の位置での鉛直風速の値pt: 温位ptrf: 温位の基本場の値(300K)fmap: マップファクターg2inv, g2invw: terrain followingの変換に伴う因子vrdx, vrdy, vrdz2: 格子幅の逆数g: 重力加速度

105

Page 107: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3. NETCDFデータの読み書き

■ エラー関係?

ifort: error: could not find directory in which g++ resides

環境変数GXX ROOTを設定すること。$ gcc –print-search-dirs

$ export GXX ROOT=/usr/lib/gcc/x86 64-redhat-linux/3.4.6/

3 netcdfデータの読み書きgradsで読める netcdfはCOARDS形式に準拠するもの。なので、書き出しはこれに従うとする。ncgen, ncdumpを使用して netcdfファイルの内容表示、プログラム作成も可能。netcdfの利点・欠点は(僕個人で思うこと)、

• (利点)  1つのファイルに緯度経度、格子数などの情報とデータそのものを一緒に記述できる。

• (利点) データを圧縮できる。scale, offsetなどももちろん設定できる。

• (利点)  gradsで読める。 

• (欠点) 読み書きがやや面倒(netcdfがインストールされている必要がある)。 

• (欠点)  gribの方が圧縮効率が良い。 

• (欠点)  templateを使いたい時、やや面倒。

そんな訳でこの項目の存在意義が疑わしいですが、データ量が多過ぎて困っている方、netcdfを使えば grads形式(4byte)の約半分のサイズに圧縮可能です。(本音は gradsでも 2byte整数使えますが・・・、NHMの出力は 2byte整数ですが・・・)以下に grads形式のファイルを netcdf形式に変換するツールの使い方を紹介。

gradsの ctlファイルからフォーマットはある程度自動で読み込みます (詳細は下記参照)。templateを使っている場合、shellでループさせて下さい。そういう仕様です。標準的な ctlファイルなら問題ないはず(nhm2gradsで作成したものはOK)。(ctlファイルを読み込むのに namelistで値を渡すのはあほっぽいが気にせずに)

必要なツールは以下の 2つのみ。/mnt/sky1/sawada/Nhm-v15/Tools/netcdf/src/grads2nc.f90

/mnt/sky1/sawada/Nhm-v15/Tools/netcdf/script/g2nc.sh

106

Page 108: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

プログラムとシェル。

fort.10: gradsデータへのリンクfort.20: ctlファイルへのリンクoutput.nc: netcdf形式に変換したファイル

もし、”segmentation fault”が出たら。。。たいていの場合、メモリの stackサイズ不足。$ ulimit -s unlimited

と入力してから再実行する (bashの場合、ログインした端末で一度しか使えません)。以下、シェル(g2nc.sh)のサンプル。

----- 以下、script -----------------------------------------------------------

#!/bin/sh

export F_UFMTENDIAN=big:10

### data directory

datadir=/mnt/sky1/sawada/Nhm-v15/Tools/nhm2grads/72dx6_00UTC_20070307/

wkdir=$datadir/nc

if [ ! -f $wkdir ]; then

mkdir -p $wkdir/

fi

### grads control file

ctl="${datadir}/grads3d.ctl"

cd ./src

rm -f grads2nc

### compile

ifort -check -traceback -assume byterecl -o grads2nc grads2nc.f90 -lnetcdf -L/usr/local/netcdf/lib/ -I/usr/local/netcdf/include/

## check

if [ ! -f grads2nc ]; then

echo ’compile failed!!!’

exit

fi

cp grads2nc $wkdir/

107

Page 109: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3. NETCDFデータの読み書き

cd $wkdir/

### link grads control file

rm fort.20

ln -s $ctl fort.20 ← ctlファイルに fort.20のリンクを張る

### link

rm fort.10

file=${datadir}/grads3d.grd

ln -s $file fort.10 ← gradsデータに fort.10のリンクを張る

### existance and size check for grads data file: dont edit below section

if [ ! -s $file ]; then

echo ’file not found or zero !!!’

elif [ -s $file ]; then

echo ’file exist’

### control file of grads

nx=‘grep -i "xdef" $ctl |gawk ’{print $2}’‘

ny=‘grep -i "ydef" $ctl |gawk ’{print $2}’‘

nz=‘grep -i "zdef" $ctl |gawk ’{print $2}’‘

nt=‘grep -i "tdef" $ctl |gawk ’{print $2}’‘

nvar=‘grep -i "vars" $ctl |grep -vi "end"|gawk ’{print $2}’‘

echo $nx $ny $nz $nt $nvar

### run

./grads2nc <<EOF

&namctl

nx=${nx}, ny=${ny}, nz=${nz}, nt=${nt}, nvar=${nvar} num=${num}

&end

EOF

### rename: edit if you want to use another file name.

mv output.nc grads3d.nc

### file exist check

108

Page 110: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

fi

○ ctlファイルの読み込みについて緯度、経度は”linear”のみ対応。鉛直格子は”levels”のみ対応。単位が kmになっているが気にせずに。日付は初期時、時間間隔 (日,時,分まで対応。月単位の間隔は未対応)を読み込める。変数は全て読み込み変換する。変数によって鉛直格子数が違う場合は未対応。templateを使用している場合、各ファイルは 1stepのみのデータと仮定。

で、netcdf→ gradsの変換は・・・各個人でお願いします。gradsでも出来るし。

109

Page 111: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し
Page 112: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

111

第8章 物理過程

モデルに含まれる物理過程の概要、プログラム、計算の流れなど。もちろん、全部書ける訳がない。

• 雲微物理過程

• 積雲対流パラメタリゼーション(いちおう雲微物理と分けました)

• 地表面・植生過程

• 乱流混合過程

• 放射過程

という感じです。

1 雲微物理過程cloud physics, microphysics のこと。積雲対流パラメタリゼーションはまた別。ここでは雲の直接計算する過程(バルク法)についてのみ。Lin et al 1983; Ikawa

et al 1989; Murakami 1990, 1994 などが基になっているはず。細かいところでいろいろ修正されている。最新版 (jmanhm-rel-01-15: 2006/9/15)は 2moment(混合比と数密度を予報)の 5カテゴリ(雲水、雨水、雲氷、雪、あられ)を考慮している。3class(雲氷、雪、あられ)と言ったりもする。warm rain

名前の通り、暖かい雨、氷が生成・消滅する過程を含まない過程のこと。

プログラム

main.f90

call cptqvn(cpt.f90)

! ----- cloud physics

call cldphn

call cdtv2

Page 113: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

1. 雲微物理過程

call koenig2

2moment(1moment) slope parameter of qc & qr + fall velocity

call clcwr1 : accretion

(call clcwr2 : accretion for warm rain)

slope parameter of qs (pn0s)

slope parameter of qs (pn0h)

fall velocity of qs & qh

fall velocity of qns & qnh

fall velocity of qnr

ventilation coefficient for qs & qh

call clrshn

accretion (p_g__ac_r_i & p_ng__ac_i_r)

p_g__ac_r_s & p_ng__ac_r_s or p_g_frz_r & p_ng_frz_r

call clvshn : p_s__dep_v & p_g__dep_v

sw_rat_g_s_racs & sw_g_dep

p_i__nud_v

call cpice2

pqcw & pqci & pqs & pqh & pqv & ppt & pqns & pqnh & pqncw & pqnr

call cvrsh1 : warm rain

fall velocity : tv_i

call ctrvf2_2 : eular scheme -- fall velocity

(call ctrvfa : analytical scheme -- fall velocity)

(call ctrvd2_2 : box-lagrangian -- fall velocity)

call ltrbc

call adj2d1

call datmdfy

call monit_store_2d

! ----- data check

call chkmn30

call datmdfy_a2b_x

call datmdfy_a2b_y

! ----- compute qv(qc...qh...qnh) : adv, diff...

call cqs2(cqs.f90)

call cadve3m, cadve1m, cadvqn, cadvup

call chkmn3

call rldamp3

112

Page 114: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 8. 物理過程

call dampcn

call trb__calc_hdif

call kakusa

(call cdifet)

call damptg : targeted diffusion for moisture

call osaveh2

call chkmnqc

call extrx2,extry2

call qs_modify

call adj2d1

call datmdfy

call tsmoth2

call cqs3(cqs.f90)

call adjnum_2

! -----

call cpt5

! -----

call tsmoth2

! ----- cumulus parametarization

call adjust

call asjust

call grell_main

call kf_eta_cps

! -----

call monit_store_2d

! -----

call tsmoth2

! ----- saturation adjustment

call adjqvh_3

長過ぎる・・・でもフォローし切れていない。

プログラムcldprm.f90: 雲物理関係の定数cld.f90: 雲物理の計算、本体ice.f90: 氷過程の計算cqs.f90: 移流、拡散の計算ctrv.f90: 落下速度

113

Page 115: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. 積雲対流パラメタリゼーション(CP)

2 積雲対流パラメタリゼーション(CP)自分用メモ。「気象研究ノート 台風-解析と予報-」より。必要性として、格子点値としては飽和していなくても格子間隔以下のスケールで積雲対流により熱や水蒸気などの鉛直輸送や降水が生じている、ことが挙げられる(Molinari and Dudek 1992)。CPを考慮しないと、モデルの格子間隔スケールで不安定が増大し、少数の格子点に降水が集中する grid point storm が生じることが指摘されている。

5~40km程度のメソモデルで微物理過程を使用すると、降水の立ち上がりが遅くなる、最終的な降水を過大評価する傾向がある(Kato and Saito 1995; Weisman

et al. 1997)。原因として、格子点値として飽和するまで降水が生じないことが直接的な原因。また、格子間隔以下の熱力学効果がモデル大気に反映されないと対流システムの時間発展が遅れること、非静力学効果や降水粒子の蒸発が適正に評価されないことも原因の可能性。

CPが不要となる水平解像度は 0.1kmとか 1kmなどと言われるが、根拠はない。(1kmだと deep convectionなどの熱帯の対流は表現できるかもしれないが、貿易風帯にできる層積雲などは水平スケールが小さいため、1kmでは不十分→「部分凝結の必要性」という個人的な印象、)

CPの必要性に関連して、加熱率 Q1(apparent heat source)、乾燥率 Q2(ap-

parent moisture sink)の鉛直分布が似ていれば加熱は局所的な凝結で生じておりCPは必要ないが、Q1と Q2の分布が異なるようだと必要(Molinari and Dudek

1986)。

Q1 = π̄

(∂θ̄

∂t+ V̄ · ∇θ̄ + w̄

∂θ̄

∂z

)(8.1)

Q2 = π̄

(∂q̄

∂t+ V̄ · ∇q̄ + w̄

∂q̄

∂z

)(8.2)

あるいは Pielke 2001より、∣∣∣∣w̄ ∂θ̄

∂z

∣∣∣∣ ≫ w′′ ∂θ

′′

∂zand

∣∣∣∣w̄ ∂q̄

∂z

∣∣∣∣ ≫ w′′ ∂q

′′

∂z(8.3)

つまり、熱と水蒸気の鉛直輸送がサブグリッドスケールより解像スケールが支配的である場合は、CPを無視しても (使用しなくても)妥当かもしれない。そのような状況は飽和したハリケーン環境場で見られる。改善の方向性、CPの評価方法として、物理的初期値化を用いる(Kasahara et

al. 1996 )。物理的初期値化では水蒸気はモデルで使用するCPが観測された降水強度を実現するように修正されるが、修正された水蒸気場は用いる CPによってかなり異なる。降水強度と水蒸気場の詳細な観測があればスキームの評価が可能。

114

Page 116: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

ちなみに水蒸気や熱の輸送と違って、運動量の輸送をパラメータ化しているCP

は少ない運動量輸送は台風の強度や上層の渦構造に大きな影響を与える(Challa

and Preffer 1990; Dengler and Reeder 1997)。

3 地表面・植生過程地表面(あるいは植生や海洋)と大気との相互作用を表現する過程。基本的にバルク法で計算されている。講座ではたいていMSWSYS(1)=204:陸は Louis(1桁目の数字)、海はKondo(1974)(2桁目の数字)が使われる。最近 (2007年後半)では、MSWSYS(1)=1255

1桁目の数字: 陸上の地表面 fluxの bulk係数の計算方法:Beljaars and Holtslag

2桁目の数字: 海上の地表面 fluxの bulk係数の計算方法:Beljaars and Holtslag

3桁目の数字: 気孔抵抗、wetnessの時間変化を使用する4桁目の数字: 海面粗度の決め方:Beljaars

バルク法は大まかには、

FM = −Cm|V10m|(Vb − Vs) (8.4)

Fθ = −Ch|V10m|(θb − θs) (8.5)

Fqv = −Cq|V10m|(Qvb − Qvs) (8.6)

という式。FM , Fθ, Fqv は運動量、温位、水蒸気フラックス。Cm, Cθ, Cq はバルク係数、V10mは高度 10mの水平風速、b はモデル最下層の物理量、s は地表面の物理量。各スキームの違いは大抵、バルク係数の見積もり方の違いとなる。プログラム、離散式

surface_flux3.f90

sub.calc_surface_flux

sf_pt_w(ix, jy) = - c_h(ix, jy) &

& * v_abs_a(ix, jy) * (pt(ix, jy, kz_a, kt) - ptgrd(ix, jy))

sf_qv_w(ix, jy) = - c_q(ix, jy) &

& * v_abs_a(ix, jy) * (qv(ix, jy, kz_a, kt) - qvgrd(ix, jy))

! vw(wv) point

sf_v_w(ix, jy) = - ((c_m(ix, jy) + c_m(ix, jy_m)) * 0.5d0) &

& * v_abs_a_v(ix, jy) * (vdiag_vc(ix, jy, kz_a, kt) + v_s)

! wu(uw) point

sf_w_u(ix, jy) = - ((c_m(ix, jy) + c_m(ix - 1, jy)) * 0.5d0) &

115

Page 117: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

3. 地表面・植生過程

& * v_abs_a_u(ix, jy) * (udiag_vc(ix, jy, kz_a, kt) + u_s)

Kondo (1975) に従うと抵抗係数は例えば、

Cm = 0.52 + 0.073U10m U10m < 25ms−1 (8.7)

という感じで計算される。ただし、モデルではより場合分けがなされています(風速の強さ、大気の不安定度に依存)。

wetnessの時間変化(降水の後の潜熱増加とか、晴天時に逆に潜熱減少)を考慮するとより現実的?(モデル自体は対応可)(非静力WS2005, p35)雪面はうちの講座で使用する場合、全く考慮していない(モデル自体は対応可)。都市の排熱も考慮していない(モデル自体は対応可)、与える熱量の適切なデータが必要。植生キャノピー、都市キャノピーみたいなものは含まれていない。

jmanhm-rel-01-15 では SiB(Simple Biosphere model)が導入されているので、陸上ではこちらがメインになる?まだテスト段階?長期積分しないとあまり効いてこない気がしたけど、1日未満の積分でも状況によっては大きく差が出るかも。海面では、波齢、波形などで粗度が大きく変わるはず(wave modelとカップルが必要?)。Sea spray の効果は?

参考文献

J. F. Louis, M. Tiedtke and J. F. Geleyn, 1982 :

Workshop on Planetary Boundary Layer Parameterization, 59 - 79.

J. Kondo, 1975 : Boundary-Layer Met., 9, 91 - 112.

116

Page 118: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

4 乱流混合過程

∂E

∂t= −adv.E +

gKh

θ

∂θ

∂z− ΣΣu

′iu

′i

∂ui

∂xj

− CeE32

l+ dif.E (8.8)

u′iu

′j = Km

(∂ui

∂xj

+∂uj

∂xi

)+

2

3δijE (8.9)

Km = CmlE12 運動量の拡散係数 (8.10)

Ke = 2Km 乱流エネルギーの拡散係数 (8.11)

Kh =Km

Pr熱・水蒸気・雲の拡散係数 (8.12)

1

l=

1

κ(z − zs)+

1

l∞混合長の逆数 (8.13)

l∞ = ∆s for Nl ≤ 0 (8.14)

l∞ = min(∆s,0.76E1/2

Nl

) for Nl > 0 (8.15)

Ce = 0.19 + 0.74l

∆s(8.16)

1

Pr= 1 + 2

l

∆sプラントル数の逆数 (8.17)

Cm = 0.1 (8.18)

(8.19)

水平格子と鉛直格子の比(アスペクト比)が大きいとき(鉛直層が薄いとき)、解像できる渦は非等方、平べったい渦しか扱えない(あまり表現は正しくない)。つまり、水平方向で表現しなければならないサブグリッドスケールの効果は鉛直方向に比べて大きい渦が含まれる、要するに混合長が必然的に長くならないといけないはず。そこで、水平方向と鉛直方向の混合長の定義は以下のようにしている。

lz = lz (8.20)

lx = ly =√

∆x2 + ∆y2 (8.21)

但し、これをこのまま使うと境界層内では鉛直方向で表現する渦(混合距離)が小さ過ぎて乱流拡散による鉛直輸送が弱くなる傾向がある。そこで境界層内ではSun and Chang 1986に従って鉛直方向の混合距離を見積もる。

lz = 0.25 × 1.8hpbl

(1 − exp

(− 4z

hpbl

)− 0.0003exp

(8z

hpbl

))(8.22)

117

Page 119: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

5. 放射過程

これはワンガラでの観測に基づいて得られた経験式。境界層の高さ hpbl が高ければ渦の大きさ(混合長)がそれに応じて大きくなる。(本来はここで使用されている乱流モデルは等方性を仮定していた気がするので、上記の表現は正しくないかもしれない)

W. Y. Sun and C. Z. Chang, 1986

: J. Climate Appl. Meteor., 25, 1445 - 1453.

5 放射過程

118

Page 120: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

119

第9章 JMANHMの使用例・今後の課題?

1 講座内での使用例• ヤマセ・下層雲・カリフォルニア沖 (DYCOMS2?)

• 宮城県での高解像度予報

• (宮城県での)領域モデルによる長期解析

• 宮城県の降雪

• フロリダでの海陸風

• 都市域での集中豪雨

• チベット高原での降水現象

• 清川だし

• 山岳波、蔵王おろし

• 台風 (事例&理想化)

2 今後の (個人的)課題• 検証ツールの作成 (アメダス、衛星などとの比較)

• モデル出力の調整 (検証用データの出力)

• モデルで使用するパラメータ・物理過程の最適化

Page 121: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

2. 今後の (個人的)課題

2.1 検証ツールの作成 (アメダス、衛星などとの比較)

■アメダスとの比較データの場所:/mnt/tree2000/AMEDAS  (小玉くん作成)

データ概要:各地点での風向・風速・気温・降水量・日照時間・湿度・気圧比較:各地点、時間別、日別での統計的傾向(RMSE、相関係数、偏差)○アメダス地点への内挿ツール (com amedas)

必要なファイルは、/mnt/sky1/sawada/Nhm-v15/Tools/com amedas/src

/mnt/sky1/sawada/Nhm-v15/Tools/com amedas/script

で良いはず。使い方の手順は、

$ sh script/interp_amedas.sh 102dx5 20080301 18JST ←内挿計算$ sh script/com_amedas.sh ←アメダスとの比較 (平均誤差、RMSEなど)

$ sh script/check_zero_com_file.sh ←データの無いファイルを削除

interp amedas.sh:

fort.15にリンクしたアメダス地点リストを読み込んで、NHMの計算結果から直接内挿計算する。内挿する値は高度 1.5mの気温、降水量、ある範囲の降水量、高度 10mの風、下向き短波放射、下向き長波放射、下、中、上層雲量の 10変数を、各地点についてテキストファイルで出力。その際、領域外は自動的に除外する (はず)。出力される内挿値の日付は計算結果のファイルから読み取られる。もし、計算する際の設定が正しくない場合は日付もずれる。com amedas.sh:

interp amedas.shで作成した内挿値とアメダス観測値を読み込み、各時間、各日で比較。気温と風速、風向のみ。■レーダーアメダスとの比較レーダーアメダスのデータや変換 (デコード)ツールは以下に貯められている。/mnt/tree2000/gpv/radar/data/

/mnt/tree2000/gpv/radar/script/

など。降水量は 1kmメッシュ、エコー頂は 2.5kmメッシュでどちらも 10分間隔である。■衛星データとの比較データの場所;/mnt/raid1200/未定データ概要:MTSAT-1の可視、赤外、水蒸気の輝度温度比較:空間分布の統計的傾向(RMSE、相関分布)

120

Page 122: 非静力学モデルJMA-NHMwind.geophys.tohoku.ac.jp › ~sawada › main › main.pdf5 第1章 はじめに 2009/11/20 加筆・修正 このマニュアル(?)は非静力モデルの使い方、及びモデルに関するメモを記述し

第 9. JMANHMの使用例・今後の課題?

2.2 モデル出力の調整 (検証用データの出力)

jmanhm-rel-02-00では物理モニタ(出力できる変数)が増加したので、それに合わせてパラメータカードを変更、及び nhm2grads ( nhm2grads )を修正する必要がある。例えば、solar(下向き短波放射)、dlwb(下向き長波放射)、CLL、CLM、CLH(雲量)などが追加。

2.3 モデルで使用するパラメータ・物理過程の最適化

モデルの更新に伴い物理過程が強化されたので、解像度に合わせて適切な物理過程の選択、及びパラメータの最適化が必要。乱流:Deardorff(1973)スキームで乱流エネルギーを診断⇒ Improved Mellor-Yamada

Lavel3 (MYNN)

混合層の発達の仕方、風速の鉛直プロファイルから適切かどうか評価できるといいな放射:CLD RD=0 (相対湿度から雲量を診断) ⇒ CLD RD=3 (部分凝結スキームによって雲量、雲水・雲氷量を求め直接放射計算)

地表面温度の時間変化、長波+短波放射、OLRの比較から適切かどうか評価できるといいな

他にも細かい部分がいろいろあると思いますが。

121