登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册 
 
 
 
x
 
 本帖最后由 kermit 于 2025-5-10 12:32 编辑  
WRF数值模式大多需要在高性能Linux集群上运行,但有时我们也想要在自己的个人电脑上学习WRF或者做一些简单的天气模拟。以往我们在Windows环境下运行WRF大多使用容器或者虚拟机或者子系统。但它们往往不够便携,还需要花时间配置各种环境,对于初学者的门槛也很高。 
 为了让WRF在Windows下运行更简便,Kermit Chen开发了 Piggy_Packages ,它基于Cygwin 深度定制,解压即用。它不仅可以运行WRF,还可以运行NCL、CDO、NCO、Ncview、Panoply、MET、UPP、ESMF、RTTOV等各种Linux下好用的气象软件。  
 
 
——————系统需求—————— 
64位版本的Windows 10 (22H2) 、Windows 11 ARM版本的Windows 11;  
请注意,随着Windows 10支持周期的结束,对于 Windows 10 的支持将很快被移除。  
Windows 11 已经内置了Windows Terminal,您无需额外安装。  
~~~~~~~~~~~~~~~~~~~~~~~ 
下载地址【没有气象家园账号的同学,可以加入Piggy气象科学交流QQ群852983715获取下载地址喔】 
 
 
 
~~~~~~~~~~~~~~~~~~~~~~~ 
简要教程~~  
下面以运行WPS为例带大家体验一下Cygwin WRF4.6.1 
首先下载并解压缩 Piggy_Packages 然后右键管理员身份运行Piggy-Bash.sh 或者 Piggy-Zsh.sh 
Piggy-Bash.sh 提供一种简约经典的交互方式;而Piggy-Zsh.sh 提供一种现代炫酷的交互方式。 
(Win10 用户使用Piggy-Zsh.sh需要安装Windows Terminal,下载地址见上文,否则会很丑) 
首次启动时会进行环境部署,需要几分钟时间。 
 
 
Piggy_Packages Version 2025.1 的WRF数值模式安装在/pp_model/WRF-4.6.1 现在我们切换到切换到该目录: 目录结构如下: - /pp_model/WRF-4.6.1
 
 - ├── download_geog.sh # 高精度地形数据下载脚本
 
 - ├── RTTOV # 快速辐射传输模式(v12.1),用于WRFDA卫星资料同化
 
 - ├── WPS # WRF前处理系统
 
 - ├── WPS_GEOG # 静态地形数据(低精度)
 
 - ├── WRF -> WRF-REAL # 指向 WRF-REAL 的软链接
 
 - ├── WRF-Chem # WRF化学模式
 
 - ├── WRFDA # WRF同化系统
 
 - ├── WRF-FIRE # WRF火灾模式
 
 - ├── WRF-Hydro # WRF水文模式
 
 - ├── WRFPLUS # WRF切线性和伴随模式,用于敏感性试验和WRFDA四维变分
 
 - ├── WRF-REAL # WRF 中尺度大气模式
 
 - └── WRF-VF # WRF 中尺度大气模式(启用vortex following)
 
  复制代码 请注意,WRF目录下的RTTOV为WRFDA兼容版本,我们在/pp_module/module/gcc-15.1.0/RTTOV-14.0目录下提供了一个更新版本的RTTOV。 
1)地形数据下载: 
Piggy_Packages 已经内置了低精度地形数据,对于学习使用已经足够,但是如果您想要更好的模拟结果,您可以通过download_geog.sh脚本下载高精度(解压后约29GB)和可选的完整地形数据(解压后约200GB)。
  
2)WPS和WRF运行 
让我们返回HOME目录 然后将WPS和WRF拷贝过来:
 - cp -r /pp_model/WRF-4.6.1/WPS ~/
 
 - cp -r /pp_model/WRF-4.6.1/WRF-REAL ~/WRF
 
  复制代码 
进入WPS目录: 用记事本或VS Code打开namelist.wps: (请注意,虽然它的后缀是wps,但是请勿使用金山WPS Office 或者Microsoft Word打开) 提示:如果您安装了VS Code,并在安装时选择了将VS Code添加到PATH,上述命令将默认使用VS Code 打开;否则将使用记事本打开。 
 
清空文件中原有内容,将以下内容粘贴进去:
 - &share
 
 -  wrf_core = 'ARW',
 
 -  max_dom = 3,
 
 -  start_date = '2025-05-01_00:00:00','2025-05-01_00:00:00','2025-05-01_00:00:00'
 
 -  end_date = '2025-05-01_18:00:00','2025-05-01_18:00:00','2025-05-01_18:00:00'
 
 -  interval_seconds = 10800,
 
 -  io_form_geogrid = 2,
 
 - /
 
  
- &geogrid
 
 -  parent_id = 1, 1, 2,
 
 -  parent_grid_ratio = 1, 3, 3,
 
 -  i_parent_start = 1, 40, 17,
 
 -  j_parent_start = 1, 26, 21,
 
 -  e_we = 81, 49, 55,
 
 -  e_sn = 57, 49, 55,
 
 -  geog_data_res = 'lowres','lowres','lowres',
 
 -  dx = 81000,
 
 -  dy = 81000,
 
 -  map_proj = 'lambert',
 
 -  ref_lat = 35,
 
 -  ref_lon = 110,
 
 -  truelat1 = 30,
 
 -  truelat2 = 60,
 
 -  stand_lon = 116.397,
 
 -  geog_data_path = '/pp_model/WRF-4.6.1/WPS_GEOG/'
 
 - /
 
  
- &ungrib
 
 -  out_format = 'WPS',
 
 -  prefix = 'FILE',
 
 - /
 
  
- &metgrid
 
 -  fg_name = 'FILE'
 
 -  io_form_metgrid = 2, 
 
 - /
 
 
  复制代码 【可选】如果您已经下载了高精度地形数据,您可以将:
 -  geog_data_res = 'lowres','lowres','lowres',
 
  复制代码 更改为:
 -  geog_data_res = 'highres','highres','highres',
 
  复制代码 
 
更改完之后,您可以输入以下命令可视化WRF模拟区域:
 - ncl util/plotgrids_new.ncl
 
  复制代码 
 
 
(点击图像以关闭图窗) 
 
接下来我们运行geogrid.exe将地形数据插值到模式网格上: 
 - mpirun -np $NUMBER_OF_PROCESSORS ./geogrid.exe
 
  复制代码 $NUMBER_OF_PROCESSORS 为您的CPU核心数量,也可以任意指定不高于您CPU核心数量的值(下同),例如:
 - mpirun -np 4 ./geogrid.exe
 
  复制代码 
下面我们用ungrib.exe解码和提取背景场资料。首先从 https://pan.baidu.com/s/1uiSDnEcsSwERz2l6sEGKOQ?pwd=1234 下载一些FNL背景场文件; 
然后输入一下命令在资源管理器中打开HOME目录: 打开之后,将下载的FNL背景场文件拷贝进去。 
 
使用链接脚本将背景场文件链接到WPS所在目录:
 - ./link_grib.csh ~/fnl_*.grib2
 
  复制代码 
由于我们使用的FNL背景场,它和GFS同源,因此我们需要适用于GFS的Vtable,将它链接到当前目录下。Vtable的作用在于告诉ungrib.exe需要提取哪些变量,以及这些变量的GRIB编码信息。
 - ln -s ungrib/Variable_Tables/Vtable.GFS Vtable
 
  复制代码 然后我们运行ungrib.exe进行背景场数据的解码和提取。
  
请注意,ungrib.exe无法使用mpirun并行运行。 
运行完成后将会生成FILE:开头的文件。 
 
metgrid.exe的作用是将ungrib.exe提取出的背景场信息水平插值到模式网格上,并且与geogrid.exe插值的地形数据结合,生成模式的输入数据。
 - mpirun -np $NUMBER_OF_PROCESSORS ./metgrid.exe
 
  复制代码 运行成功后,将会生成met_em.开头的文件。 
 
让我们切换到WRF运行目录:
  
 
将metgrid.exe的输出数据链接到此处:
  
 
然后我们编辑WRF的配置文件namelist.input: 清除文件中的所有内容,然后将下方内容粘贴进去:
 -  &time_control
 
 -  run_days                            = 0,
 
 -  run_hours                           = 18,
 
 -  run_minutes                         = 0,
 
 -  run_seconds                         = 0,
 
 -  start_year                          = 2025, 2025, 2025,
 
 -  start_month                         = 05,   05,   05,
 
 -  start_day                           = 01,   01,   01,
 
 -  start_hour                          = 00,   00,   00,
 
 -  end_year                            = 2025, 2025, 2025,
 
 -  end_month                           = 05,   05,   05,
 
 -  end_day                             = 01,   01,   01,
 
 -  end_hour                            = 18,   18,   18,
 
 -  interval_seconds                    = 10800
 
 -  input_from_file                     = .true.,.true.,.true.,
 
 -  history_interval                    = 60,  60,  60,
 
 -  frames_per_outfile                  = 1, 1, 1,
 
 -  restart                             = .false.,
 
 -  restart_interval                    = 7200,
 
 -  io_form_history                     = 2
 
 -  io_form_restart                     = 2
 
 -  io_form_input                       = 2
 
 -  io_form_boundary                    = 2
 
 -  /
 
  
-  &domains
 
 -  time_step                           = 90,
 
 -  time_step_fract_num                 = 0,
 
 -  time_step_fract_den                 = 1,
 
 -  max_dom                             = 3,
 
 -  e_we                                = 81, 49, 55,
 
 -  e_sn                                = 57, 49, 55,
 
 -  e_vert                              = 45, 45, 45,
 
 -  dzstretch_s                         = 1.1
 
 -  p_top_requested                     = 5000,
 
 -  num_metgrid_levels                  = 34,
 
 -  num_metgrid_soil_levels             = 4,
 
 -  dx                                  = 81000,
 
 -  dy                                  = 81000,
 
 -  grid_id                             = 1,     2,     3,
 
 -  parent_id                           = 1, 1, 2,
 
 -  i_parent_start                      = 1, 40, 17,
 
 -  j_parent_start                      = 1, 26, 21,
 
 -  parent_grid_ratio                   = 1, 3, 3,
 
 -  parent_time_step_ratio              = 1, 1, 1,
 
 -  feedback                            = 1,
 
 -  smooth_option                       = 0
 
 -  /
 
  
-  &physics
 
 -  physics_suite                       = 'CONUS'
 
 -  mp_physics                          = -1,    -1,
 
 -  cu_physics                          = -1,    -1,
 
 -  ra_lw_physics                       = -1,    -1,
 
 -  ra_sw_physics                       = -1,    -1,
 
 -  bl_pbl_physics                      = -1,    -1,
 
 -  sf_sfclay_physics                   = -1,    -1,
 
 -  sf_surface_physics                  = -1,    -1,
 
 -  radt                                = 15,    15,
 
 -  bldt                                = 0,     0,
 
 -  cudt                                = 0,     0,
 
 -  icloud                              = 1,
 
 -  num_land_cat                        = 21,
 
 -  sf_urban_physics                    = 0,     0,
 
 -  fractional_seaice                   = 1,
 
 -  /
 
  
-  &fdda
 
 -  /
 
  
-  &dynamics
 
 -  hybrid_opt                          = 2, 
 
 -  w_damping                           = 0,
 
 -  diff_opt                            = 2,      2,
 
 -  km_opt                              = 4,      4,
 
 -  diff_6th_opt                        = 0,      0,
 
 -  diff_6th_factor                     = 0.12,   0.12,
 
 -  base_temp                           = 290.
 
 -  damp_opt                            = 3,
 
 -  zdamp                               = 5000.,  5000.,
 
 -  dampcoef                            = 0.2,    0.2,
 
 -  khdif                               = 0,      0,
 
 -  kvdif                               = 0,      0,
 
 -  non_hydrostatic                     = .true., .true.,
 
 -  moist_adv_opt                       = 1,      1,
 
 -  scalar_adv_opt                      = 1,      1,
 
 -  gwd_opt                             = 1,      0,
 
 -  /
 
  
-  &bdy_control
 
 -  spec_bdy_width                      = 5,
 
 -  specified                           = .true.
 
 -  /
 
  
-  &grib2
 
 -  /
 
  
-  &namelist_quilt
 
 -  nio_tasks_per_group = 0,
 
 -  nio_groups = 1,
 
 -  /
 
 
  复制代码 
 
real.exe用于将metgrid.exe的输出在垂直方向上插值到模式网格,生成真实的三维大气结构场。
 - mpirun -np $NUMBER_OF_PROCESSORS ./real.exe
 
  复制代码 提示:由于我们的d03区域很小,使用的核心数建议不超过16,否则会出现区域不够分割的错误。 
real.exe运行后将会生成WRF的初始场wrfinput_*和边界场wrfbdy_*文件。 
 
下面正式开始运行WRF数值模式:
 - mpirun -np $NUMBER_OF_PROCESSORS ./wrf.exe
 
  复制代码 WRF数值模式运行是一个非常耗时的工作,运行上述命令之后,您可以开启一个新的Piggy_Packages 终端,显示WRF运行进度。 
开启新终端之后,输入: 
 - tail -f ~/WRF/run/rsl.out.0000
 
  复制代码 
 
WRF运行结束后,将会生成wrfout开头的结果文件。 
 
3)WRF运行结果的可视化 
wrfout开头的结果文件为NetCDF格式,因此,您可以使用Ncview或者Panoply来可视化这些文件。
 - ncview wrfout_d01_2025-05-01_18:00:00
 
  复制代码- Panoply wrfout_d01_2025-05-01_18:00:00
 
  复制代码 
 
 
 
 
帖子推荐:【原创资源】全国超高精度海拔高程数据 
http://bbs.06climate.com/forum.php?mod=viewthread&tid=104420&fromuid=113111 
如想了解 Piggy_Packages 的更多功能,请查看这篇帖子: 
Piggy_Packages 气象科研常用软件集合 
http://bbs.06climate.com/forum.php?mod=viewthread&tid=104814&fromuid=113111 
 
——————技术支持—————— 
~欢迎加入Piggy气象科学交流QQ群852983715学习交流~ 
 
 
 
 
 
 
 
 
 
 |