使用WRF软件进行气象模拟计算

更新时间:
复制 MD 格式

本文介绍如何使用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. 将安装的WPSWRF软件拷贝到工作目录。

    说明

    请将命令中的$WPSCOPYHOME$WRFCOPYHOME替换为实际的工作目录,本文使用/home/wrftest作为示例。操作后,该目录下将生成WPSWRFV3两个目录。

    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文件。

    namelistWPS(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地形文件,预期返回结果如下:

    [wrftest@login0 WPS]$ ./geogrid.exe
    Parsed 25 entries in GEOGRID.TBL
    Processing domain 1 of 1
      Processing XLAT and XLONG
      Processing MAPFAC
      Processing F and E
      Processing ROTANG
      Processing LANDUSEF
      Calculating landmask from LANDUSEF ( WATER =  17  21 )
      Processing HGT_M
      Processing SOILTEMP
      Processing SOILCTOP
      Processing SCT_DOM
      Processing SOILCBOT
      Processing SCB_DOM
      Processing ALBEDO12M
      Processing GREENFRAC
      Processing LAI12M
      Processing SNOALB
      Processing SLOPECAT
      Processing SLOPECAT
      Processing CON
      Processing VAR
      Processing OA1
      Processing OA2
      Processing OA3
      Processing OA4
      Processing OL1
      Processing OL2
      Processing OL3
      Processing OL4
      Processing VAR_SSO
      Processing LAKE_DEPTH
      Processing URB_PARAM
    
    Optional fields not processed by geogrid:
      IMPERV (priority=1, resolution='default', path='/home/wrftest/WPS/geog/nlcd2011_imp_ll_9s/')
      CANFRA (priority=1, resolution='default', path='/home/wrftest/WPS/geog/nlcd2011_can_ll_9s/')
    
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !  Successful completion of geogrid.    !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

步骤二:运行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。

    本示例使用的VtableVtable.GFS,您可以根据需要使用其他的Vtable。

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

    ./ungrib.exe

    运行ungrib.exe成功后,会在/home/wrftest/WPS目录下生成FILE:YYYY-MM-DD_hh*文件,预期返回结果如下:

    20.0  X        X        X        X        X
    
       10.0  X        X        X        X        X
    
    --------------------------------------------------------------------------
    Subroutine DATINT: Interpolating 3-d files to fill in any missing data...
    Looking for data at time 2005-08-28_00
    Found file:      FILE:2005-08-28_00
    Looking for data at time 2005-08-28_06
    Found file:      FILE:2005-08-28_06
    Looking for data at time 2005-08-28_12
    Found file:      FILE:2005-08-28_12
    Looking for data at time 2005-08-28_18
    Found file:      FILE:2005-08-28_18
    Looking for data at time 2005-08-29_00
    Found file:      FILE:2005-08-29_00
    End Subroutine DATINT.
    
    **********
    Deleting temporary files created by ungrib...
    **********
    
    Deleting file:   ./PFILE:2005-08-28_00
    Deleting file:   ./PFILE:2005-08-28_06
    Deleting file:   ./PFILE:2005-08-28_12
    Deleting file:   ./PFILE:2005-08-28_18
    Deleting file:   ./PFILE:2005-08-29_00
    
    **********
    Done deleting temporary files.
    **********
    
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !  Successful completion of ungrib.   !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

步骤三:运行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文件,预期返回结果如下:

    [wrftest@login0 WPS]$ ./metgrid.exe
    Processing domain 1 of 1
    Processing 2005-08-28_00
      FILE
    Processing 2005-08-28_06
      FILE
    Processing 2005-08-28_12
      FILE
    Processing 2005-08-28_18
      FILE
    Processing 2005-08-29_00
      FILE
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !  Successful completion of metgrid.  !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

步骤五:运行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