全部產品
Search
文件中心

Elastic High Performance Computing:使用WRF軟體進行氣象類比計算

更新時間:Jul 06, 2024

本文介紹如何使用E-HPC叢集運行WRF軟體進行氣象類比計算。

背景資訊

WRF(Weather Research and Forecasting)採用新一代中尺度天氣預報模式,是氣象行業廣泛應用的開源氣象類比軟體。它為研究大氣過程提供了大量選項,並可以在多種計算平台運行。更多資訊,請參見WRF官網WRF

準備工作

  1. 建立E-HPC叢集。具體操作,請參見使用嚮導建立叢集

    配置叢集時,軟硬體參數配置如下:

    參數

    說明

    硬體參數

    部署方式為標準,包含2個管控節點,1個計算節點和1個登入節點,均採用ecs.c7.large執行個體規格,配置為2 vCPU,4 GiB記憶體,Ice Lake處理器,2.7 GHz。

    軟體參數

    鏡像選擇CentOS 7.6公用鏡像,調度器選擇slurm,開啟VNC開關。

  2. 建立叢集使用者。具體操作,請參見系統管理使用者

    本文使用的樣本使用者名稱為wrftest,許可權組為sudo許可權組。

  3. 在叢集中安裝WRF相關軟體。具體操作,請參見安裝與卸載軟體

    需安裝的軟體如下:

    • wrf-mpich,版本為3.8.1。

    • mpich,版本為3.2。

  4. 在叢集中安裝NCL。

    NCL用於處理和可視化氣象資料,具體安裝方式請參見Installing NCL

    說明

    由於CentOS鏡像預設安裝的Python版本較低,安裝NCL前,您需要升級Python。Python的下載地址請參見Python下載

步驟一:運行geogrid.exe

geogrid.exe用於確定類比地區,並把靜態地形資料插值到網格點。

  1. 登入E-HPC叢集。

    登入時,請使用具有sudo許可權的使用者。具體操作,請參見登入叢集

  2. 查看叢集是否已安裝WRF相關軟體。

    export MODULEPATH=/opt/ehpcmodulefiles/
    module avail

    預期返回如下:

    ----------------------------------------------------------------------------------------------------------- /opt/ehpcmodulefiles/ ------------------------------------------------------------------------------------------------------------
    mpich/3.2       vnc             wrf-mpich/3.8.1
  3. 載入WRF軟體環境。

    module load wrf-mpich/3.8.1 mpich/3.2
    echo $WPSHOME $WRFHOME
  4. 將安裝的WPS和WRF軟體拷貝到工作目錄。

    說明

    請將命令中的$WPSCOPYHOME$WRFCOPYHOME替換為實際的工作目錄,本文使用/home/wrftest作為樣本。操作後,該目錄下將產生WPS和WRFV3兩個目錄。

    cp -r $WPSHOME $WPSCOPYHOME
    cp -r $WRFHOME $WRFCOPYHOME
  5. 進入WPS目錄,然後下載並解壓地表資料。

    說明

    本樣本中地表資料使用geog_complete.tar.gz,您也可以根據需要下載其他地表資料。更多資訊,請參見WRF官網

    cd /home/wrftest/WPS
    wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_complete.tar.gz
    tar -zxvf geog_complete.tar.gz
  6. 連結到GEOGRID.TBL檔案。

    GEOGRID.TBL檔案定義了geogrid.exe需要插值到網格點上的各靜態地理資料集參數。

    ln -s geogrid/GEOGRID.TBL GEOGRID.TBL
  7. 修改namelist.wps檔案。

    namelist是WPS(WRF Preprocessing System,WRF預先處理系統)中的一個共用檔案,該檔案按照各個程式(geogrid.exe、ungrib.exe、metgrid.exe)所需要參數的不同分成三個部分(&geogrid、&ungrib、&metgrid)及一個共用部分(&share),分別定義了WPS模組所需要的各種參數。如下樣本為推薦配置,未提及的參數保持預設即可。詳細的namelist.wps檔案參數及說明,請參見namelist.wps

    說明
    • 本樣本中,namelist.wps檔案存放在/home/wrftest/WPS目錄下。

    • 在namelist.wps檔案中,請使用!作為注釋標識。

    !共用部分
    &share   
    !wrf_core:選擇WRF dynamical core,有'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:類比網格數(粗網格+嵌套網格),本樣本中包含一個粗網格
    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',
    
    !定義地區的柵格尺寸,本樣本中網格解析度為30km
    dx = 30000,     
    dy = 30000,
    
    !定義投影方式,關於投影方式說明可以參考WRF官網
    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產生的可供metgrid讀取的檔案格式,有'WPS'、'SI'、'MM5'三種格式,預設值為'WPS'
    out_format = 'WPS', 
    !prefix:ungrib產生的中間檔案路徑和檔案首碼名
    prefix = 'FILE'
    /
     
    !metgrid部分 
    &metgrid  
    !fg_name:ungrib程式產生的檔案
    fg_name = 'FILE', 
    !io_form_metgrid:metgrid產生的檔案格式
    !支援三種格式1(binary,尾碼名.int)、2(net CDF,尾碼名.nc)、3(Grib1,尾碼名.gr1)
    !預設值:2
    io_form_metgrid = 2
    /
  8. 將靜態地形資料插值到網格點。

    ./geogrid.exe

    運行geogrid.exe成功後,會在/home/wrftes/WPS目錄下產生geo_em.d0N.nc地形檔案,預期返回結果如下:

    WRF-1.png

步驟二:運行ungrib.exe

ungrib.exe用於從GRIB格式的氣象資料中提取所需要的氣象要素場。

  1. 下載並解壓Katrina氣象資料。

    說明

    本樣本中氣象資料為Katrina.tar.gz,請下載Katrina.tar.gz。您也可以根據需要下載其他氣象資料,更多資訊,請參見氣象資料

    cd /home/wrftest/WPS
    wget http://www2.mmm.ucar.edu/wrf/TUTORIAL_DATA/Katrina.tar.gz
    tar -zxvf Katrina.tar.gz
  2. 通過link_grib.csh指令碼連結氣象資料。

    ./link_grib.csh /home/wrftest/WPS/Katrina/avn*
  3. 選擇氣象資料相應的Vtable。

    本樣本使用的Vtable為Vtable.GFS,您可以根據需要使用其他的Vtable。

    ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable
  4. 提取所需要的氣象要素場。

    ./ungrib.exe

    運行ungrib.exe成功後,會在/home/wrftest/WPS目錄下產生FILE:YYYY-MM-DD_hh*檔案,預期返回結果如下:

    WRF-2.png

步驟三:運行metgrid.exe

metgrid.exe用於將ungrib.exe提取出的氣象場資料水平插值到由geogrid.exe確定的網格點上。

  1. 連結到GEOGRID.TBL檔案。

    GEOGRID.TBL檔案定義了metgrid.exe如何將氣象資料水平插值到網格點上。

    cd /home/wrftest/WPS
    ln -s metgrid/METGRID.TBL.ARW METGRID.TBL
  2. 將氣象場資料水平插值到由geogrid確定的網格點上。

    ./metgrid.exe

    運行metgrid.exe成功後,會在/home/wrftes/WPS目錄下產生met_em.d0N.yyyy-mm-dd_hh:mm:ss.nc檔案,預期返回結果如下:

    WRF-3.png

步驟五:運行wrf.exe

wrf.exe用於輸出天氣預測資料。

  1. 串連WPS的處理結果。

    cd /home/wrftest/WRFV3
    ln -s /home/wrftest/WPS/met_em.d01.2005-08-2*.
  2. 修改namelist.input檔案。

    cd /home/wrftest/WRFV3/run
    vim namelist.input

    namelist.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,
    /
  3. 初始化類比資料。

    ./real.exe

    運行real.exe成功後,會在/home/wrftest/WRFV3/run目錄下產生wrfinput_d01、wrfbdy_d01檔案。

  4. 輸出天氣預測資料。

    1. 編寫作業指令碼。

      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
    2. 提交作業。

      sbatch wrf.slurm

      作業運行成功後,會在/home/wrftest/WRFV3/run目錄下產生wrfout_d01_[date]檔案,例如wrfout_d01_2005-08-28_00:00:00。

  5. 使用NCL映像化WRF運行結果。

    樣本如下:

    WRF