Version 4から、入出力はNetCDF4になっています.
WRF全体について、詳しくはWRF MODEL USER'S PAGE を参照のこと.
WRFの現実的設定の計算では、
1) まずWPS (WRF Preprocessing System)で客観解析データ、地形データ等を処理して、入力データ(met_em.d0*..., )を作ります.
2) WRFの実行の際は、met_em.d0*....データから境界値、初期値(wrfbdy_d01, wrfinput_d0*) を作ります(real.exeの実行)
3) その後時間積分して計算を実行します(wrf.exeの実行).
4) 計算結果(wrfout_d0*....) を可視化します.
以下、OS: Ubuntu 22.04.3 LTSでのインストールから実行の手順を記します .
以下のshell scriptt をダウンロードして適当なdirectoryで実行. WRF4.6.1_Install.bash $bash WRF4.6.1_Install.bash とするだけでOK (地形データや、必要なライブラリなども同時にインストールされます). directoryの Build_WRF/ 以下にWRF-4.6.1-ARW, WPS-4.6.0, WPS_GEOG が作られます. インストール先を指定する際は、script内の以下の三行を適宜修正すればよい. cd ~ (home directryに移動) mkdir Build_WRF cd Build_WRF |
以下、gfortranを使ったWRFのコンパイル $ cd Build_WRF/WRF-4.6.1-ARW $ ./configure Enter selection[1-83]: と聞かれるので、 GNU (gfortran/gcc) の dmpar (dmpar= distributed memory option : MPI 並列) に対応する番号 (=34) を入力. 次に Compile for nesting? (1=basic, 2=preset moves, 3=vortex following) [default 1]: と聞かれますが、ここでは 1 としてください. また、WRFV3/Registry/ 以下にある Registry.EM_COMMON (出力する変数を指定 するファイル)は必要に応じて修正して使いますが、とりあえず、そのまま使います. $ ./compile em_real >& compile.log & #最初のコンパイルには結構時間がかかります. $ cd main $ ls -l 4つの.exeファイル (ndown.exe, real.exe, tc.exe, wrf.exe) ができているか確認すること. できていなければコンパイルは失敗しているので log ファイルをチェック. コンパイルに失敗した場合、logファイル(compile.log)を見て原因を調べて、 $ ./clean -a (実行形式を全てremoveする) として、やり直すこと. インストール後に、一部のプログラム(subroutine) を改変してcompileする際は、 ./clean -a は行わなくて良い. 改変した部分のみcompileしてくれます (時間が短くて済みます). |
[maro@shear7 WPS]$ ./configure Enter selection[1-44]: と聞かれるので、1 を入力 (Linix x86_65, gfortran (serial) $ emacs configure.wps & # configure.wpsを編集 WRF_DIR = のところを、自分のWRFのdirectory WRF_DIR = ../WRF-4.6.1-ARW に変更します(フルパスで書いても良い). [maro@shear7 WPS]$ ./compile #コンパイルは数分でできます。 [maro@shear7 WPS]$ ls -l 3つの.exeファイル(geogrid.exe,metgrid.exe, ungrib.exe)ができてることを 確認すること. できていなければコンパイルは失敗. 以上で作成した WRF, WPSの実行形式にリンクを貼って使うことにします. |
以下、客観解析データとしてNCEP GDAS/FNL 0.25 Degree Global Tropospheric Analyses NCEP GDAS/FNL 0.25 Degree Global Tropospheric Analyses (海面水温データも含まれている) を使用する場合について記す. このサイトから、ファイルを指定してダウンロードしても良いが、ちょっと面倒なので、 以下のshell scriptでデータの日付を適宜書き換えて使う. gdex-download.csh 注意: 特定の事例の再現実験では、見たい日時の数日前後の分も含めて、 データをダウンロードして保存しておくと良い. 適当なデータ保存用directoryを作って、そこで $csh gdex-download.csh とすればOK. 以下、user maroさんが、/home/maro/DATA/GDAS_FNL/202301/以下にデータをダウンロードしたとします. |
(以下、user maroさんが、/home/maro/WPS/WPS_202301/以下で、WRF用のデータを作ります)
$ cd /home/maro/WPS/WPS_202301 #
$ ln -sf /**/Build-WRF/WPS-4.6.0/* . # 実行形式などリンクを貼る.
$ emacs namelist.wps & # 期間、領域、格子サイズなどを設定するファイルを編集.
とりあえず以下のものをコピーして適宜編集して使うこと(geog_data_pathは自分の地形データの場所:
/home/maro/Build_WRF/WPS_GEOG/に変更すること)
namelist.wps
編集したnamelist.wpsはどこかに保存しておき、以降はそれをコピーして適宜 編集すると良い.
namelist.wpsの説明>
注意: start_date (end_date)は、あとでWRFで計算することになると思われる期間より
前(後)にとっておき、長めにデータを処理しておくと後で二度手間にならない.
例えば、9月10日の事例に着目して計算する場合、start_dateは 9月8日、end_dateは9月12日
とかにしておけば良い.
$ ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable
$ ./link_grib.csh /home/maro/DATA/GDAS_FNL/202301/gdas
$ ./ungrib.exe
$ ls -l
FILE:yyyy-mm-dd_hh ができていることを確認
*地形データの処理
$ ./geogrid.exe
$ ls -l
geo_em.d01.nc, geo_em.d02.nc ... ができていることを確認.
$ ./metgrid.exe
$ ls -l
met_em.d01.yyyy-mm-dd....ができていることを確認.
$ ncdump -h met_em.d01.....(fileはどれでもよい) | more
として、冒頭に出てくる
num_metgrid_levels の値 (古いFNLデータの場合は27、最近のデータは32、さらに最近のデータは34になっている)
num_st_layers, num_st_layers の値 (古いFNLデータは2, 最近のデータは4になっている)
を確認しておくこと。
以下でWRFを実行する際の制御ファイル namelist.inputの中の
num_metgrid_levels, num_metgrid_soil_levels
の値は、それぞれこれらの値に合せること。
|
(以下、user maroさんが、/home/maro/WRF/em_202301/以下で、WRFを実行します) $ cd /home/maro/WRF/em_202301 # $ ln -sf /user/maro/Build-WRF/WRF-PS-4.6.0/test/em_real/* . # 実行形式などリンクを貼る. $ rm namelist.input (Build-WRF/WRF-PS-4.6.0/test/em_real/のnamelist.inputは使用しない) $ emacs namelist.input & # 計算の設定ファイルを編集、とりあえず以下のものをコピーして適宜変更して使うこと. namelist.input 注意: em_real/以下のdefaultのnamelist.inputは書き換えるべきところが非常に多いので、 一度作った namelist.inputは保存しておき、以降はそれを適宜編集して使うと良い. namelist.inputの説明(よく変更する箇所のみ) 各変数の意味はWRF Users Guide documentationにまとめられています. 注意: いきなり最初から Nestingして高解像度の大規模な計算をすると計算時間がかかるし、いろいろ 設定の間違いをしたりするので、始めは格子の粗い一番外側の領域のみで計算して (namelist.input中で max_dom = 1とする)、最後まで計算できるか確認し、その結果を見てみると良い. この段階で初期時刻等を変えて計算を実行して、良さそうな設定を見つけ、その後Nesting計算する ようにしたほうが良い. $ ln -sf /home/maro/WPS/WPS_202301/met_em.d0* . # WPSで作った入力データ(met_em.d0...)にリンクする. $ ./real.exe # WRF計算用の初期値、境界値などの作成 $ ls -l wrfbdy_d01 (側面境界値データ, d01のみ), wrfinput_d01, wrfinput_d02, ... (初期値+底面境界データ, max_domで指定した領域の数だけできる) ができていることを確認. 海面水温をupdateする設定の場合、 wrflowinp_d01, wrflowinp_d02, ...(時間変化する海面水温データ, max_domで指定した領域の数だけできる) もできます. $ mpirun -n 16 ./wrf.exe < /dev/null & # 計算開始 -n 16 は 16並列計算. # 各PCの CPU coreの数は $ cat /proc/cpuinfo で確認できます. $ ls -l 計算がされていれば、wrfout_d01....という出力ができます(多重Nestingの場合 wrfout_d01.., wrfout_d02...). ちゃんと計算されているか、1ステップの計算にどのくらい時間がかかっているかチェックするには、ログファイル rsl.out.00**, rsl.error.00** (16並列計算の場合、**は00〜15)を $ tail -f rsl.out.0000 $ tail -f rsl.error.0000 などとして見れば分かります. 注: 例えば、namelist.input中の time_step の設定が長すぎたりすると、 ONE OF THE PROCESSES TERMINATED BADLY: CLEANING UP APPLICATION TERMINATED WITH THE EXIT STRING: Killed (signal 9) と出て計算が止まります. rsl.out.00** もしくはrsl.error.00** をチェックすると d01 2015-09-08_00:16:40 22 points exceeded cfl=2 in domain d01 at time 2015-09-08_00:16:40 hours d01 2015-09-08_00:16:40 MAX AT i,j,k: 96 120 43 vert_cfl,w,d(eta)= 2.974685 -0.2250476 3.1409189E-02 などと出ており、CFL条件が満たされてない旨のメッセージが確認できますので、 その場合はtime_stepを短かくして計算すること. *風速、地形、鉛直格子間隔などの条件によるが、time_step はd01の格子サイズが X kmなら、3X〜5X (sec) 程度にすると良い (これより短いぶんには問題ないですが、その分計算時間がかかるのでそれとの兼ね合いで). |