このトピックでは、気象シミュレーションのために Elastic High Performance Computing (E-HPC) クラスターで Weather Research and Forecasting Model (WRF) を実行する方法について説明します。
背景情報
WRF は、大気研究と運用予報アプリケーションの両方のために設計された次世代メソスケール数値天気予報システムです。 WRF は、実際の大気条件または理想化された条件に基づいてシミュレーションを作成できます。 WRF は、並列計算を可能にし、システムの拡張性を提供するソフトウェアアーキテクチャを使用しています。 このモデルは、幅広い気象アプリケーションで使用できます。 詳細については、WRF 公式 Web サイトをご覧ください。
準備
E-HPC クラスターを作成します。 詳細については、「ウィザードを使用してクラスターを作成する」をご参照ください。
E-HPC クラスターのパラメーターを構成します。次の表にパラメーターを示します。
パラメーター
説明
ハードウェア設定
2 つの管理ノード、1 つの計算ノード、および 1 つのログオンノードで構成される標準クラスターをデプロイします。すべてのノードは ecs.c7.large Elastic Compute Service (ECS) インスタンスです。各インスタンスには 2 個の vCPU、4 GiB のメモリ、および 1 つの 2.7 GHz 第3世代 Intel Xeon Scalable (Ice Lake) プロセッサーが搭載されています。
ソフトウェア設定
CentOS 7.6 パブリックイメージと Slurm スケジューラーをデプロイします。 VNC をオンにします。
クラスターユーザーを作成します。 詳細については、「ユーザーを管理する」をご参照ください。
この例では、ユーザー名 wrftest と権限グループ sudo を使用します。
クラスターに WRF と MPICH をインストールします。 詳細については、「ソフトウェアをインストールおよびアンインストールする」をご参照ください。
次のソフトウェアをインストールします。
WRF-MPICH V3.8.1
MPICH V3.2
クラスターに NCL をインストールします。
NCL は、気象データを処理および視覚化するために使用されます。 NCL のインストール方法については、「NCL のインストール」をご覧ください。
説明デフォルトでは、CentOS イメージには以前のバージョンの Python がインストールされています。 NCL をインストールする前に、Python をアップグレードする必要があります。 Python のダウンロード方法については、「Python のダウンロード」をご覧ください。
手順 1:geogrid.exe を実行する
geogrid.exe プログラムは、シミュレーションドメインを定義し、静的な地理データをドメインに水平方向に補間します。
クラスターにログオンします。
sudo ユーザーとしてクラスターにログオンします。 詳細については、「クラスターにログオンする」をご参照ください。
WRF の必要なソフトウェアがクラスターにインストールされているかどうかを確認します。
export MODULEPATH=/opt/ehpcmodulefiles/ module avail次のコードは、返される出力の例を示しています。
----------------------------------------------------------------------------------------------------------- /opt/ehpcmodulefiles/ ------------------------------------------------------------------------------------------------------------ mpich/3.2 vnc wrf-mpich/3.8.1WRF ソフトウェア環境を読み込みます。
module load wrf-mpich/3.8.1 mpich/3.2 echo $WPSHOME $WRFHOMEインストールされている WRF Preprocessing System (WPS) と WRF ソフトウェアを作業ディレクトリにコピーします。
説明コマンドの
$WPSCOPYHOMEと$WRFCOPYHOMEを実際の作業ディレクトリに置き換えます。このトピックでは、/home/wrftestを例として使用します。 WPS ディレクトリと WRFV3 ディレクトリが作業ディレクトリに生成されます。cp -r $WPSHOME $WPSCOPYHOME cp -r $WRFHOME $WRFCOPYHOMEWPS ディレクトリに移動し、地理データファイルをダウンロードして解凍します。
説明この例では、geog_complete.tar.gz ファイルを使用します。ビジネス要件に基づいて別の地理データファイルをダウンロードできます。 詳細については、WRF 公式 Web サイトをご覧ください。
cd /home/wrftest/WPS wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_complete.tar.gz tar -zxvf geog_complete.tar.gzGEOGRID.TBL ファイルをリンクします。
GEOGRID.TBL ファイルは、&geogrid によって補間されるフィールドを決定します。
ln -s geogrid/GEOGRID.TBL GEOGRID.TBLnamelist.wps ファイルを編集します。
namelist.wps ファイルは WPS の共有ファイルです。このファイルは、geogrid.exe、ungrib.exe、metgrid.exe などのメインプログラムのパラメーターを構成するために使用されます。各メインプログラムには、&geogrid、&ungrib、&metgrid という名前の排他的な namelist レコードがあります。3 つのプログラムには、&share という名前のグループレコードがあります。次の例は、必須パラメーターの推奨値を示しています。次の例で説明されていないパラメーターについては、デフォルト値を使用します。 namelist.wps ファイルのパラメーターとパラメーターの説明については、WRF 公式 Web サイトをご覧ください。
説明この例では、namelist.wps ファイルは
/home/wrftest/WPS ディレクトリにあります。!を使用して namelist.wps ファイルのコメントを示します。
! &share のリクエストパラメーター。 &share ! wrf_core: WRF ダイナミカルコアを指定します。有効な値: ARW と NMM。デフォルト値: ARW。 wrf_core = 'ARW', ! start_date: シミュレーションの開始時刻を指定します。 start_date = '2005-08-28_00:00:00', ! end_date: シミュレーションの終了時刻を指定します。 end_date = '2005-08-29_00:00:00', interval_seconds = 21600, ! max_dom: ネストを含むモデルドメインの総数を指定します。この例では、このパラメーターは 1 に設定されています。 max_dom = 1, ! # io_form_geogrid: geogrid 出力ファイルの形式を指定します。 io_form_geogrid = 2, / ! &geogrid のリクエストパラメーター。 ! # 親ドメイン、親からネストへのドメイン、グリッドサイズ比、地図投影などの情報を指定します。 &geogrid parent_id = 1, parent_grid_ratio = 1, i_parent_start = 1, j_parent_start = 1, ! 西東方向と南北方向のグリッドポイント数を指定します。この例では、値を 98 と 70 に設定します。 e_we = 98, e_sn = 70, geog_data_res = 'default', ! 西東方向と南北方向のグリッド長を指定します。単位: メートル。この例では、値を 30000 と 30000 に設定します。 dx = 30000, dy = 30000, ! 投影モードを指定します。詳細については、WRF 公式 Web サイトをご覧ください。 map_proj = 'mercator' ! ドメイン内の既知の場所の緯度と経度を指定します。 ref_lat = 25.00, ref_lon = -89.00, ! 地図投影のパラメーターを指定します。値は投影によって異なります。 truelat1 = 0.0, truelat2 = 0.0, stand_lon = -89.0, ! geog_data_path = '静的地理データのパス' geog_data_path = '/home/wrftest/WPS/geog' / ! &ungrib のリクエストパラメーター。 &ungrib ! out_format: ungrib.exe によって生成され、metgrid.exe で読み取る中間ファイルの形式を指定します。有効な値: WPS、SI、MM5。デフォルト値: WPS。 out_format = 'WPS', ! prefix: 中間ファイルのプレフィックスを指定します。プレフィックスにはパスを含めることができます。 prefix = 'FILE' / ! &metgrid のリクエストパラメーター。 &metgrid ! fg_name: ungrib.exe によって生成されたファイルの名前を指定します。 fg_name = 'FILE', ! io_form_metgrid: metgrid.exe 出力ファイルの形式を指定します。 ! 有効な値: 1、2、3。1 は拡張子が .int のバイナリファイルを示します。2 は拡張子が .nc の NetCDF ファイルを示します。3 は拡張子が .gr1 の GRIB1 ファイルを示します。 ! デフォルト値: 2。 io_form_metgrid = 2 /静的地理データをモデルドメインに補間します。
./geogrid.exegeogrid.exe を実行すると、geo_em.d0N.nc ファイルが
/home/wrftest/WPSディレクトリに生成されます。次のコードは、返される出力の例を示しています。
手順 2:ungrib.exe を実行する
ungrib.exe プログラムは、GRIB ファイルから気象フィールドを抽出します。
ハリケーン・カトリーナの気象データファイルをダウンロードして解凍します。
説明この例では、Katrina.tar.gz ファイルを使用します。 Katrina.tar.gz をダウンロードするには、Katrina.tar.gz をクリックします。ビジネス要件に基づいて別の地理データファイルをダウンロードできます。 詳細については、WRF 公式 Web サイトをご覧ください。
cd /home/wrftest/WPS wget http://www2.mmm.ucar.edu/wrf/TUTORIAL_DATA/Katrina.tar.gz tar -zxvf Katrina.tar.gz次の link_grib.csh スクリプトを実行して、気象データをリンクします。
./link_grib.csh /home/wrftest/WPS/Katrina/avn*データファイルの Vtable をリンクします。
この例では、Vtable.GFS を使用します。ビジネス要件に基づいて別の Vtable を選択できます。
ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable必要な気象フィールドを抽出します。
./ungrib.exeungrib.exe を実行すると、FILE:YYYY-MM-DD_hh* ファイルが
/home/wrftes/WPSディレクトリに生成されます。次のコードは、返される出力の例を示しています。
手順 3:metgrid.exe を実行する
metgrid.exe プログラムは、geogrid.exe によって決定されたモデルドメインに気象フィールドを水平方向に補間します。
GEOGRID.TBL ファイルをリンクします。
GEOGRID.TBL ファイルは、metgrid.exe が気象フィールドをモデルドメインに水平方向に補間する方法を定義します。
cd /home/wrftest/WPS ln -s metgrid/METGRID.TBL.ARW METGRID.TBLgeogrid.exe によって決定されたモデルドメインに気象フィールドを水平方向に補間します。
./metgrid.exemetgrid.exe を実行すると、met_em.d0N.yyyy-mm-dd_hh:mm:ss.nc ファイルが
/home/wrftes/WPSディレクトリに生成されます。次のコードは、返される出力の例を示しています。
手順 5:wrf.exe を実行する
wrf.exe プログラムは、予報データを保存します。
WPS の処理結果をインポートします。
cd /home/wrftest/WRFV3 ln -s /home/wrftest/WPS/met_em.d01.2005-08-2*.namelist.input ファイルを編集します。
cd /home/wrftest/WRFV3/run vim namelist.inputnamelist.input ファイルの &time_control および &domains に関連するパラメーターは、namelist.wps ファイルのパラメーターと同じである必要があります。このトピックでは、次のサンプル構成が使用されます。 namelist.input ファイルのパラメーターについては、「namelist.input」をご覧ください。
&time_control run_days = 0, run_hours = 12, run_minutes = 0, run_seconds = 0, start_year = 2005, 2005, 2005, start_month = 08, 08, 08, start_day = 28, 28, 28, start_hour = 00, 00, 00, start_minute = 00, 00, 00, start_second = 00, 00, 00, end_year = 2005, 2005, 2005, end_month = 08, 08, 08, end_day = 29, 29, 29, end_hour = 00, 00, 00, end_minute = 00, 00, 00, end_second = 00, 00, 00, interval_seconds = 21600 input_from_file = .true.,.true.,.true., history_interval = 180, 60, 60, frames_per_outfile = 1000, 1000, 1000, restart = .false., restart_interval = 5000, io_form_history = 2 io_form_restart = 2 io_form_input = 2 io_form_boundary = 2 debug_level = 0 iofields_filename = "extraoutput_d01.txt" / &domains time_step = 180, time_step_fract_num = 0, time_step_fract_den = 1, max_dom = 1, e_we = 98, 112, 94, e_sn = 70, 97, 91, e_vert = 30, 30, 30, p_top_requested = 5000, num_metgrid_levels = 27, num_metgrid_soil_levels = 4, dx = 30000, 10000, 3333.33, dy = 30000, 10000, 3333.33, grid_id = 1, 2, 3, parent_id = 0, 1, 2, i_parent_start = 1, 31, 30, j_parent_start = 1, 17, 30, parent_grid_ratio = 1, 3, 3, parent_time_step_ratio = 1, 3, 3, feedback = 1, smooth_option = 0, / &physics mp_physics = 6, 6, 6, ra_lw_physics = 4, 4, 4, ra_sw_physics = 4, 4, 4, radt = 10, 10, 10, sf_sfclay_physics = 1, 1, 1, sf_surface_physics = 2, 2, 2, bl_pbl_physics = 1, 1, 1, bldt = 0, 0, 0, cu_physics = 0, 0, 0, cudt = 0, 0, 0, isfflx = 1, ifsnow = 0, icloud = 1, surface_input_source = 1, num_soil_layers = 4, sf_urban_physics = 0, 0, 0, / &fdda / &dynamics w_damping = 0, diff_opt = 1, 1, 1, km_opt = 4, 4, 4, diff_6th_opt = 0, 0, 0, diff_6th_factor = 0.12, 0.12, 0.12, base_temp = 290. damp_opt = 0, zdamp = 5000., 5000., 5000., dampcoef = 0.2, 0.2, 0.2 khdif = 0, 0, 0, kvdif = 0, 0, 0, non_hydrostatic = .true., .true., .true., moist_adv_opt = 1, 1, 1, scalar_adv_opt = 1, 1, 1, / &bdy_control spec_bdy_width = 5, spec_zone = 1, relax_zone = 4, specified = .true., .false.,.false., nested = .false., .true., .true., / &grib2 / &namelist_quilt nio_tasks_per_group = 0, nio_groups = 1, /シミュレーションデータを初期化します。
./real.exereal.exe を実行すると、wrfinput_d01 ファイルと wrfbdy_d01 ファイルが
/home/wrftest/WRFV3/runディレクトリに生成されます。予報データをエクスポートします。
ジョブスクリプトを作成します。
vim wrf.slurm次の例は、wrf.slurm の内容を示しています。
#!/bin/bash #SBATCH -N 1 #SBATCH -n 2 #SBATCH --cpus-per-task=1 #SBATCH -J wrf-test #SBATCH -o wrf_test.log module load wrf-mpich/3.8.1 mpich/3.2 mpirun -np 2 -ppn 1 -bind-to core:1 /home/wrftest/WRFV3/run/wrf.exeジョブを送信します。
sbatch wrf.slurmジョブを実行すると、wrfout_d01_[date] 形式の名前を持つファイルが
/home/wrftest/WRFV3/runディレクトリに生成されます。例: wrfout_d01_2005-08-28_00:00:00。
WRF 結果の NCAR Graphics 画像を作成します。
サンプルコード:
