ここでは、WRFの出力データ(wrfout_d*...)をGrADSで可視化するための graphical package ARWpostについて説明します. 詳細はWRF ARW Online TutorialのGraphics/ARWpost を参照すること.
以下、インストールから実行の手順を記します.
初めての場合(New Users)、ユーザー登録が必要となります. 次回(Returning Users) からは、メールアドレスを入力するだけでダウンロードできます. ダウンロードページに入ってPost Processingのリンクをクリック、 ARWpost Version 3.1 をダウンロードすること. 以下、user maroが作業用directory grads/ 以下に ARWpostをインストールする例を書きます.
ARWpost のインストール
[maro@shear7 grads]$ export NETCDF="/usr/local/netcdf-3.6.3" (csh ならsetenv NETCDF /usr/local/netcdf-3.6.3) [maro@shear7 grads]$ tar xvf ARWpost_V3.tar.gz [maro@shear7 grads]$ cd ARWpost [maro@shear7 ARWpost]$ ./configure Enter selection[1-3]: と聞かれるので、2 (=Intel compilter)を入力. [maro@shear7 ARWpost]$ emacs configure.arwp FFLAGS = -FR -convert big_endian F77FLAGS = -convert big_endian を FFLAGS = -O3 -FR -convert big_endian -mcmodel=large -shared-intel F77FLAGS = -O3 -convert big_endian -mcmodel=large -shared-intel に書き換える(場合によってはsegmentation faultが出ることがあるので) [maro@shear7 ARWpost]$ ./compile ARWpost.exe ができているか確認すること. |
実行
[maro@shear7 ARWpost]$ cd .. [maro@shear7 grads]$ mkdir em_20150910 # いずれ多くの実験をすることになるので、個々の実験用のdirectoryを作成すると混乱がないです. [maro@shear7 grads]$ cp -rf ARWpost/* em_20150910/. #丸ごとコピーしてしまう. [maro@shear7 grads]$ cd em_20150910/ [maro@shear7 em_20150910]$ emacs nameist.ARWpost # namelist.ARWpostの編集 とりあえず以下のものをコピーして,適宜変更して使うこと. namelist.ARWpost namelist.ARWpostはWRFの計算結果(wrfout_d0*....)をGrADSデータ化して 出力する際の(時刻、高度、出力変数 などの)制御ファイル. namelist.ARWpostの簡単な説明 一度作った namelist.ARWpostは保存しておき、以降はそれを適宜編集して使うと良い. 詳細はWRF ARW Online TutorialのARWpostの説明 を参照すること. [maro@shear7 em_20150910]$ ulimit -s 819200000 # 忘れないこと.これをしないと、データが大きい場合 「セグメンテーション違反です(コアダンプ)」と出ます. [maro@shear7 em_20150910]$./ARWpost.exe # 処理開始 (処理にはしばらく時間がかかります.) [maro@shear7 em_20150910]$ ls -l # 指定したgradsデータと.ctlファイル ができているか確認. あとは通常通り、GrADSで表示してみればよい. どんな物理量があるか、ctlファイルを見て確認してください. 注意) geopotential 高度(m)は ( PH + PHB ) / 9.81 温位 (K)は T + 300 気圧(hPa)は ( P + PB ) * 0.01 地表面気圧は psfc 地上風速(高度10mの風速)は U10, V10 地上気温、地上比湿(高度2m)は T2, Q2 で表されます. (注意) 経験上、二次診断量のcape を他の大量の変数と一緒に出力しようとすると forrtl: severe (174): SIGSEGV, segmentation fault occurred と出る場合があります.この手のエラーは通常 ulimit -s 819200000 で対応できるのですが、うまくいかないこともあります. そんな時は、他の変数とは別にcapeのみ出力すること. (注意) ARWpostで作成されるGrADSのデータの水平方向の数は(e_we-1, e_sn-1) (e_we, e_snはWRFのnamelist.input 中で指定されているもの)になります. ARWpostでできるctlファイルを見ると、mercator図法で表示するために dset ^domain_1.dat options byteswapped undef 1.e30 title OUTPUT FROM WRF V3.5.1 MODEL pdef 150 150 lcc 46.000 -131.500 75.500 75.500 60.00000 30.00000 -131.50000 18000.000 18000.000 xdef 576 linear -154.88091 0.08108108 ydef 339 linear 31.67547 0.08108108 のようになっていますが、この場合、x,y方向のデータ数は 150 150, 格子間隔は18000 m, 18000 m であることを表しています. ある点が領域中の何番目の格子点にあたるか調べるには、 pdef 150 150 lcc ...18000.000 の行を削除して、 xdef 150 linear 1.0 1.0 ydef 150 linear 1.0 1.0 として表示してみれば分かります。 同様に、ある点が領域中の何kmの位置にあたるか調べるには xdef 150 linear 0.0 18. ydef 150 linear 0.0 18. として表示してみれば分かります。 |
以上の作業により、WRFのデータをGrADS化してデータを図示することができる ようになりました. さらにデータを処理・解析する際は、 1. まずARWpostにより必要な変数をGrADSのデータ(書式なしバイナリ)として書き出す. 2. その後、そのバイナリデータを自分で作成したプログラムで読み込んで処理し、 GrADSデータとして出力 (表示用ctlファイルは適宜作成すること). の順で行えば良い. 必要な変数を書き出すには、namelist.ARWpostにおいて、 plot='list' fields='U,V,W, .... (必要な変数のみ; 標準変数は大文字, 二次診断量は小文字)' とすれば良い. なお、データを読み込む際には、必ずGrADSのデータを作成した際にできる ctlファイルの中身を確認し、その順番で変数を読み込むようにすること。 (変数の順番は、必ずしもfields=' ' で指定した順番と一致しないので) 以下は GrADSのデータを読み込んで、解析するためのサンプル プログラムです。自分の問題に合わせ、改変して使用すること。 (プログラム冒頭に説明が書いてあります) 0. 基本的な絵を描くサンプル gs(grads script) ファイルの例 (サンプルGrADSデータ, ctlファイルも入っています. 展開してREADMEを読んでください) gs_sample.tar.gz 1. 単純にデータ (ここではU,V,W,RAINNCVのみ) を読みこんで、そのまま書き出すプログラム(データの読み書きの参考のため) readwrite.f 2. 相当温位などを計算するプログラム calc-te_THOM.f [mp_physics=8 (Thompson) 用] calc-te_WSM6.f [mp_phyisics=6 (WSM6) 用] calc-ctt.f [雲頂の温度、気圧、高度を計算] 3. 座標変換(座標系を回転and/or移動)して、相当温位や安定度などいろんな変数を計算するプログラム transgrid_THOM.f [mp_physics=8 (Thompson) 用] transgrid_THOM.ctl [表示用 .ctl ファイル] transgrid_WSM6.f [mp_physics=6 (WSM6) 用] transgrid_WSM6.ctl [表示用 .ctlファイル] 4. Ertelの渦位を等圧面で計算するプログラム calc-EPV.f domain_1_PV_output.dat [出力データサンプル] domain_1_PV_output.ctl [表示用.ctl ファイルサンプル] |
なお、配列が大きいと、 relocation truncated to fit: R_X86_64_32S against `.bss' のようなメッセージが出力され、コンパイルできない。 その場合、オプション -mcmodel=large -shared-intel を追加 [maro@shear7] ifort -convert big_endian -mcmodel=large -shared-intel -o a.out hogehoge.f 実行してSegmentation faultなどのエラーがでたら、コンパイル時にオプション -traceback -g を追加することで発生箇所(行番号)を表示できる. (ただし、計算時間は3-4倍かかるので、通常時はこのオプションは付けないこと) |