WRF - 安装
本篇随笔将介绍 WRF 和 WPS 的环境配置、编译和安装
什么是 WRF ?
WRF (Weather Research and Forecasting Model) 是中尺度天气预报系统
组成:
- 2 dynamic cores (ARW and NMM)
ARW 由 NCAR 开发, NMM 由 NCEP 开发 - 1 数据同化系统
- 软件架构
官网:
- https://www.mmm.ucar.edu/wrf-release-information
- https://www.mmm.ucar.edu/weather-research-and-forecasting-Model
WRF 下载
参考:
https://www2.mmm.ucar.edu/wrf/users/download/get_sources_new.php
- 方式一
通过 git clone 从 github 克隆代码库
1 | git clone --recurse-submodules git@github.com:wrf-model/WRF.git |
复制到软件安装目录
1 | sudo cp -pr ~/WRF /usr/lib/ |
- 方式二
访问 github.com/wrf-model/WRF/releases 下载对应版本源代码
解压到目标目录
1 | sudo tar -zxf WRF-4.4.tar.gz --directory=/usr/lib/ |
WRF 目录的理解
源代码目录
- dyn_em :ARW dynamics cores
- external :外部包,包含 IO ,计时器和 MPI 等
- frame :包含 WRF 框架的模块
- inc :包含 'include' 文件
- main :包含主要的例行程序,如 wrf.F 和所有的可执行文件
- phys :包含所有的物理模块
- share :包含用于 WRF 中间层和 WRF I/O 的主要模块
- tools :存放开发人员的工具包
脚本
- clean :清理创建的文件和可执行文件的脚本
- configure :创建 configure.wrf 文件,为编译 WRF 做准备的脚本
- compile :编译 WRF 的脚本
其他
- arch :存放编译选项的目录
- run :用于运行 WRF 的目录
- test :包含几个测试案例,也可用于运行 WRF
- Makefile :Top–level makefile
- Registry :存放 WRF 注册表文件
WRF/WPS 环境测试
参考:
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php#STEP1
检查是否已经安装 gfortran
, gcc
和 cpp
1 | which gfortran |
如果都已安装,以上返回的应该是安装的路径
检查 gcc
的版本是否为4.6或更高版本
1 | gcc --version |
运行一些简单的测试
通过运行以下的简单测试来验证 fortran
编译器是否正确构建,以及是否与 C
编译器兼容
下载测试文件到 TESTS
目录中
1 | mkdir TESTS |
- 测试 1 :固定格式
Fortran
1 | gfortran TEST_1_fortran_only_fixed.f && ./a.out |
正确输出为:
1 | SUCCESS test 1 fortran only fixed format |
- 测试 2 :自由格式
Fortran
1 | gfortran TEST_2_fortran_only_free.f90 && ./a.out |
正确输出为:
1 | Assume Fortran 2003: has FLUSH, ALLOCATABLE derived type, and ISO C Binding |
- 测试 3 :
C
编译
1 | gcc TEST_3_c_only.c && ./a.out |
正确输出为:
1 | SUCCESS test 3 C only |
- 测试 4 :
Fortran
调用C
1 | gcc -c -m64 TEST_4_fortran+c_c.c |
正确输出为:
1 | C function called by Fortran |
- 测试 5 :
csh
脚本
1 | ./TEST_csh.csh |
正确输出为:
1 | SUCCESS csh test |
- 测试 6 :
perl
脚本
1 | ./TEST_perl.pl |
正确输出为:
1 | SUCCESS perl test |
- 测试 7 :
sh
脚本
1 | ./TEST_sh.sh |
正确输出为:
1 | SUCCESS sh test |
安装 WRF/WPS 编译相关软件
参考:
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php#STEP2
下载编译软件
下载网站:
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/
分别下载 netcdf
, mpich
, zlib
, libpng
和 Jasper
1 | wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/netcdf-4.1.3.tar.gz netcdf-4.1.3.tar.gz |
设置环境变量
1 | export DIR=/usr/bin |
安装 NetCDF4
https://www.unidata.ucar.edu/software/netcdf/
解压 netcdf-4.1.3.tar.gz 到 /usr/bin/netcdf-4.1.3
1 | sudo tar -xzvf netcdf-4.1.3.tar.gz --directory=/usr/bin/ |
检查是否安装成功:
1 | which ncdump |
正确输出为:
1 | /usr/bin/netcdf/bin/ncdump |
安装 MPICH
MPICH
用于 WRF 的并行构建
解压 mpich-3.0.4.tar.gz 到 /usr/bin/mpich-3.0.4
1 | sudo tar -xzvf mpich-3.0.4.tar.gz --directory=/usr/bin/ |
安装 zlib
zlib
是一个通用的数据压缩库,是 WPS ungrib
解码 GRIB 文件所必需的库
解压 zlib-1.2.12.tar.gz 到 /usr/bin/zlib-1.2.12
1 | sudo tar -xzvf zlib-1.2.12.tar.gz --directory=/usr/bin/ |
安装 libpng
http://www.libpng.org/pub/png/libpng.html
libpng
支持几乎所有 PNG (Portable Network Graphics) 功能,是 WPS ungrib
解码 GRIB 文件所必需的库,需要 zlib-1.2.5
或更高版本
解压 libpng-1.2.50.tar.gz 到 /usr/bin/libpng-1.2.50
1 | sudo tar -xzvf libpng-1.2.50.tar.gz --directory=/usr/bin/ |
安装 JasPer
https://ece.engr.uvic.ca/~frodo/jasper/
JasPer
是图像处理/编码工具包,是 WPS ungrib
解码 GRIB 文件所必需的库
解压 jasper-1.900.1.tar.gz 到 /usr/bin/jasper-1.900.1
1 | sudo tar -xzvf jasper-1.900.1.tar.gz --directory=/usr/bin/ |
编译软件兼容性测试
参考:
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php#STEP3
下载测试文件
1 | cd TESTS |
- 测试 1 :
Fortran
+C
+NetCDF
1 | cp ${NETCDF}/include/netcdf.inc . |
正确输出为:
1 | C function called by Fortran |
- 测试 2 :
Fortran
+C
+NetCDF
+MPI
1 | cp ${NETCDF}/include/netcdf.inc . |
正确输出为:
1 | C function called by Fortran |
安装和编译 WRF
参考:
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php#STEP4
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/Compile/wrf_compile3.php
安装 WRF
1 | cd /usr/lib/WRF |
编译 WRF
编译,并将输出和错误信息写入到 log.compile
中
1 | cd /usr/lib/WRF |
case_name | Type of case | case_name | Type of case |
---|---|---|---|
em_real | 3d real case | em_hill2d_x | 2d ideal case |
em_quarter_ss | 3d ideal case | em_squall2d_x | 2d ideal case |
em_b_wave | 3d ideal case | em_squall2d_y | 2d ideal case |
em_les | 3d ideal case | em_grav2d_x | 2d ideal case |
em_heldsuarez | 3d ideal case | em_seabreeze2d_x | 2d ideal case |
em_tropical_cyclone | 3d ideal case | em_scm_xy | 1d ideal case |
编译大约需要 20-30 分钟
编译成功后,会在 /usr/lib/WRF/main
目录下生成可执行文件 *.exe
1 | ls -ls ./main/*.exe |
如果编译的是 real case ,则生成的可执行文件为
1 | wrf.exe (model executable) |
如果编译的是 ideal case ,则生成的可执行文件为
1 | wrf.exe (model executable) |
安装编译 WPS
WPS (WRF Preprocessing System Source Code)
WPS 是 WRF 预处理系统,用于运行 真实模型 之前 输入预处理 工作,准备好必须的输入数据和模型参数后才能顺利运行模式
WPS 主要做了三件事:
- 定义模型运行空间(投影、范围、分辨率等)和嵌套关系(
geogrid
) - 从
GRIB
文件提取列在Vtable
气象要素场(ungrib
) - 将地表参数、气象要素插值到模拟区域,将风场旋转到 WRF 网格(
metgrid
)
graph LR;
A([静态地形数据]) --> B[geogrid];
D([GRIB 格点数据]) --> E[ungrid];
subgraph WPS;
B[geogrid] --> C[metgrid];
E[ungrid] --> C;
end;
C --> F([real]);
参考:
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php#STEP5
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/Compile/wps_compile1.php
下载 WPS
- 方式一
通过 git clone 从 github 克隆代码库:
1 | git clone --recurse-submodules git@github.com:wrf-model/WPS.git |
- 方式二
访问 github.com/wrf-model/WPS/releases 下载对应版本源代码
解压到目标目录
1 | sudo tar -zxf WPS-4.4.tar.gz --directory=/usr/lib/ |
WPS 目录的理解
源代码目录
- geogrid :包含创建静态数据(不随时间变化)的代码
计算每个格点的经纬度、地图比例尺和科里奥利力参数
对地形参数(地形、高度、土壤类别、地面反照率等)进行水平插值 - ungrib :包含解压 GRIB 数据的代码
从GRIB
文件提取列在Vtable
气象要素场,写成intermediate
格式 - metgrid :包含创建 WRF 的输入的代码
将ungrib
解码的气象场水平插值到geogrid
定义的网格上
将风场旋转到 WRF 网格,使得u
、v
风平行于x
轴和y
轴 - util :包含实用程序
脚本
- clean :清理创建的文件和可执行文件的脚本
- configure :创建 configure.wps 文件,配置环境,准备编译 WPS
- compile :编译 WPS 的脚本
- link_grib.csh :将 GRIB 文件链接到 WPS 目录的脚本
其他
- arch :收集编译选项的目录
- namelist.wps :将用于运行
geogrid.exe
、ungrib.exe
和metgrid.exe
的 WPS 名称列表 - namelist.wps-all_options :包含可以在
namelist.wps
文件中使用的所有其他选项的参考
安装 WPS
1 | cd /usr/lib/WPS |
编译 WPS
编译,并将输出和错误信息写入到 log.compile
中
1 | cd /usr/lib/WPS |
编译成功后,会在 /usr/lib/WPS
目录下生成可执行文件 *.exe
1 | ls -ls ./*.exe |
1 | geogrid.exe -> geogrid/src/geogrid.exe |
下载地形数据
WRF 模式能够创建理想化的模拟,如果要进行真实数据的案例,必须将模型创建在地球上的物理位置以及该位置的静态信息,这就需要一个包含地形和土地利用类别等信息的数据集
数据下载网址:
http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html
下载静态的地形数据后将数据解压到 /usr/share/WPS_GEOG/
中
1 | mkdir /usr/share/WPS_GEOG |
修改 /usr/lib/WPS/namelist.wps
中的地形数据路径
1 | cd /usr/lib/WPS/ |
下载好地形数据后,便可执行 geogrid.exe
程序,具体内容将在 运行 WPS 和 WRF 小节展开
1 | cd /usr/lib/WPS |
参考链接
https://www2.mmm.ucar.edu/wrf/users/download/get_sources_new.php
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/Introduction/start.php