WRF全称Weather Research and Forecasting Model, 是一个天气研究与预报模型.可以用来进行精细尺度的天气模拟与预报。本文将从一个初学者的角度从零开始介绍WRF的使用方法。打算写一个系列,这篇先写WRF程序的编译安装。
注意:不同版本的WRF之间会有细微差异,本文使用的 WRF 版本是 3.6.1
1.简介
WRF模拟系统主要包含WPS和WRF两部分模块:
WPS模块全称为WRF Pre-processing System,即WRF预处理系统,用来为WRF模型准备输入数据;如果只是做理想实验(idealized modeling),就不需要用WPS处理真实数据。但是理想实验不在本文介绍范围内,本文介绍的是进行真实数据模拟的操作。
WRF模块就是数值求解的模块,它有两个版本:ARW(Advanced Research WRF) 和 NMM(Nonhydrostatic Mesoscale Model)。大多数研究者主要用的都是ARW版本,本文所有的介绍也都基于ARW版本。
除了WPS与WRF两大核心模块外,WRF系统还有很多附加模块:比如用于数据同化的WRF-DA,用于化学传输的WRF-chem,用于林火模拟的WRF-fire。本文不会涉及到这些高级功能。
2.准备工作
2.1准备*nux系统
安装WRF需要在Linux/Unix操作系统中进行,Linux/Unix 操作系统的安装过程不在本文介绍范围内。推荐阅读《鸟哥的Linux私房菜》
安装好 Linux/Unix 操作系统后,就需要安装 WRF 依赖的软件库。
接下来的操作会假设读者具备基本的Linux操作与代码编译安装知识。
(注意:各个WRF版本的依赖库安装不一致,本文介绍的是最新版本 WRF 3.6.1 的安装过程)
2.2 zlib库准备
第一个要安装的是 zlib 库,官网是http://www.zlib.net,当然也可以通过Linux各种发行版的包管理器(pacman, apt-get, yum 等)直接安装
2.3 hdf5库准备
接下来要安装 HDF5 库,官网是 http://www.hdfgroup.org/HDF5, 下载 HDF5-1.8.13 版本的代码即可,
将代码解压,进入代码目录,按照如下命令配置
./configure --prefix=/PATH/TO/HDF5 --with-zlib=/PATH/TO/ZLIB/
其中/PATH/TO/ZLIB/替换成 zlib的安装位置,如果是通过包管理器安装的,就可以不用写 –with-zlib=/PATH/TO/ZLIB/ 选项。
还有 /PATH/TO/HDF5要替换成 hdf5 即将安装的位置。
./configure命令执行完无错误之后,再执行命令
make install
即可顺利编译安装。
2.4 netcdf-c 与 netcdf-fortran 的安装
netcdf 代码下载地址为 http://www.unidata.ucar.edu/downloads/netcdf/index.jsp
最新版的netcdf 把c和fortran的代码拆分出来了,但是WRF的编译依赖于netcdf-fortran,而netcdf-fortran的安装依赖与netcdf-c,因此这两个库都需要安装。
较老版本的WRF安装教程仍然旧版本的netcdf描述操作过程,这些操作在新版本的WRF编译中可能会出错,所以看各个教程时一定要注意教程里使用的WRF和netcdf版本。本文叙述的netcdf版本为 netcdf-4.3.2.tar.gz 和 netcdf-fortran-4.4.1.tar.gz
首先,下载了netcdf-4.3.2.tar.gz (即netcdf-c)的代码后,解压代码,进入代码目录,使用以下命令配置
./configure --prefix=/PATH/TO/NETCDF --enable-netcdf-4 LDFLAGS="-L/PATH/TO/HDF5/lib" CPPFLAGS="-I/PATH/TO/HDF5/include"
其中 /PATH/TO/NETCDF 需要替换为你即将安装netcdf的路径,/PATH/TO/HDF5/ 要替换为刚刚hdf5 的安装路径
然后使用命令
make install
编译安装即可
接下来下载 netcdf-fortran 源代码,解压代码,进入代码目录,使用以下命令配置
./configure --prefix=/PATH/TO/NETCDF LDFLAGS="-L/PATH/TO/NETCDF/lib" CPPFLAGS="-I/PATH/TO/NETCDF/include" FC=gfortran
其中 /PATH/TO/NETCDF 是 netcdf的安装路径,跟上一步的路径一致;FC=gfortran设置了系统的fortran编译器,如果不是gfortran而是 ifort 或者 f90 等,则进行相应的替换。
配置好之后,使用命令
make install
即可安装
3. WRF/ARW的编译安装
首先在 http://www2.mmm.ucar.edu/wrf/src/ 找到 WRF最新版的源代码,文件名通常是 WRFVx.x.x.TAR.gz。当然,数字越大越新
然后解压代码:
tar WRFVx.x.x.TAR.gz
进入代码目录
cd WRFV3
设置环境变量 NETCDF 到刚刚安装好的netcdf目录
export NETCDF=/Path/to/NetCDF/
然后执行命令
./configure
进行配置,会出现很多编译选项供选择。每一个选项的前半部分通常是在描述编译器与运行环境,根据计算机实际情况选择即可。后半部分是并行选项:
serial 表示串行计算;
smpar 表示内存共享并行计算(shared memory option),即使用openMP,大部分多核电脑都支持这项功能;
dmpar 表示分布式并行计算(distributed memory option),即使用MPI 进行并行计算,主要用在计算集群,单个电脑就没必要用了;
dm+sm 表示同时使用openMP与MPI两种并行方式.
根据实际需要选择即可,最保险的方法就是选择 serial,不过这样编译出来的程序运行最慢
选择完编译选项后,会出现提示选择嵌套选项,一般就选 basic 选项即可
执行完./configure 顺利配置后,即可使用 ./compile 命令开始编译。单独执行 ./compile命令会看到各种编译选项。本文只介绍使用WRF进行真实情景模拟的操作,因此只需要使用命令
./compile em_real >& compile.log
就可以开始编译了,编译结果会输出到 compile.log
如果编译正常,在main目录下会看到ndown.exe, nup.exe, real.exe, tc.exe, wrf.exe这5个可执行程序
如果遇到以下错误:
start_em.f90:209.60: ALLOCATE( clat_glob(ids:ide,jds:jde), STAT=alloc_status, ERRMSG=alloc_err_ 1 Error: Syntax error in DEALLOCATE statement at (1)
可能是因为使用的fortran编译器不支持ALLOCATE函数的ERRMSG参数,修改源代码文件中的start_em.F中的代码,去掉
, ERRMSG=alloc_err_message
并重新编译即可。
4. WPS(WRF预处理系统)的编译安装
首先在 http://www2.mmm.ucar.edu/wrf/src/ 找到 WPS最新版的源代码,文件名通常是 WPSVx.x.x.TAR.gz。当然,数字越大越新
然后解压代码:
tar xzvf WPSV3.6.1.TAR.gz
进入代码目录
cd WPS
注意:WPS编译时会在相同目录下寻找已经编译好的WRF目录,也就是说,源代码目录 WPS 要跟 WRFV3 放在同一个父目录下
4.1. 准备依赖包
WPS安装依赖 libpng, jasper,libjpeg, zlib 这几个库。所以在编译WPS前,要先确保这些库已经安装在电脑上。
然后设置系统环境变量 JASPERLIB 与 JASPERINC,要确保 $JASPERLIB/路径下有 libjasper.a, libpng.a 和 libz.a 这三个文件,且 $JASPERINC/ 路径下有 jasper/ 目录, png.h 和 zlib.h两个文件。
如果这三个库是通过包管理器安装的,那么JASPERLIB 很有可能就是 /usr/local/lib, /usr/lib 或者/lib 之类的目录;对应的,JASPERINC很有可能是 /usr/include 或者 /usr/local/include 之一,如果都找不到,可以用Linux的locate 或者find命令来搜索这些文件在哪。如果这些文件分散在不同目录,则要把它们复制到一起并配置环境变量 JASPERLIB 与 JASPERINC。然后执行 ./configure进行配置
如果觉得上面的设置环境变量 JASPERLIB 与 JASPERINC很麻烦,也可以使用替代方案,即不设置环境变量,直接在WPS目录运行./configure,这时会生成配置文件 congfiure.wps,打开该配置文件,找到COMPRESSION_LIBS 和 COMPRESSION_INC,配置选项,手动修改:
COMPRESSION_LIBS = -L/PATH/TO/jasper/lib/ -L/PATH/TO/libjpeg/lib/ -L/PATH/TO/libpng/lib -ljasper -lpng -lz COMPRESSION_INC = -I/PATH/TO/jasper/include/ -L/PATH/TO/libjpeg/lib/ -I/PATH/TO/libpng/include/
其中的 /PATH/TO/jasper,/PATH/TO/libjpeg,/PATH/TO/libpng 就是相应的库的路径。
4.2. 编译
./configure 执行成功或者 configure.wps 修改完毕后,即可开始执行命令
./compile
开始编译,如果编译成功,最后会在WPS代码根目录得到以下三个程序链接,
geogrid.exe -> geogrid/src/geogrid.exe
ungrib.exe -> ungrib/src/ungrib.exe
metgrid.exe -> metgrid/src/metgrid.exe
如果遇到其他编译错误,可以通过修改 configure.wps 文件的相关内容消除错误
至于如何使用模型,将在下一篇文章中继续讲
你好!我在安装netcdf-fortran时出错了,不知道什么原因,如下,希望能得到帮助!
[root@dell netcdf-fortran-4.4.1]# make install
Making install in fortran
make[1]: 进入目录“/home/dell/PGI/netcdf-fortran-4.4.1/fortran”
pgf90 -DHAVE_CONFIG_H -I. -I.. -I../libsrc -I/usr/local/include -g -c -o module_netcdf_nc_data.o module_netcdf_nc_data.F90
PGF90-S-0081-Illegal selector – KIND value must be non-negative (module_netcdf_nc_data.F90: 175)
PGF90-S-0081-Illegal selector – KIND value must be non-negative (module_netcdf_nc_data.F90: 175)
0 inform, 0 warnings, 2 severes, 0 fatal for netcdf_nc_data
make[1]: *** [module_netcdf_nc_data.o] 错误 2
make[1]: 离开目录“/home/dell/PGI/netcdf-fortran-4.4.1/fortran”
make: *** [install-recursive] 错误 1
我没用过 pgf90,可能是编译器问题,参考下这几个网页内容吧:
http://www.unidata.ucar.edu/support/help/MailArchives/netcdf/msg12741.html
http://www.unidata.ucar.edu/support/help/MailArchives/netcdf/msg12746.html
老师我是本科纯菜鸟,我想问下您2.3安装hdf5库时执行的 ./configure命令是怎么回事呢?因为解压缩过后的hdf5库里面并没有可配置的文件啊。另外您在2.2zlib库准备中说“直接安装”,但是我直接执行make install,反馈说“no rules to make a target”。。。求助!
这属于linux基本操作的问题。建议先系统补一下Linux知识吧,比如鸟哥的Linux私房菜
嗯,好的谢谢您给我提供这么完整的学习资源。我刚刚学习了一章。我会继续学习。
但现在我时间有点紧张,所以还是想问下: 您在2.3hdf5配置中说的:“将代码解压,进入代码目录,按照如下命令配置:./configure 。。。。。” 是怎么回事,因为解压过后的hdf5目录下没有可供配置的文件啊。只有“bin、build、copying、include、lib、README、RELEASE.txt和share”。
(zlib解压包倒是可以找出可执行的configure。)
“bin、build、copying、include、lib、README、RELEASE.txt和share”……看上去像是已经编译好的二进制文件(bin包),如果系统兼容也没问题;我这里下载的源代码包(src包),比如这个:http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.14.tar.gz
学长你好,我安装了支持包zlib,libpng,jasper,netcdf(4.13版本,还没有分开c和fortran),openmpi,编译环境是GNU gfortran+gcc,但是我在对wrf配置时会有2个warning,之后在./compile em_real时也是报错,有很多,第一部分是
“/lib/cpp -P -traditional -DEM_CORE=1 -DNMM_CORE=0 -DNMM_MAX_DIM=2600 -DCOAMPS_CORE=0 -DDA_CORE=0 -DEXP_CORE=0 -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNONSTANDARD_SYSTEM_SUBR -DWRF_USE_CLM -DNO_IEEE_MODULE -DNO_ISO_C_SUPPORT -DDM_PARALLEL -DNETCDF -DUSE_ALLOCATABLES -DGRIB1 -DINTIO -DLIMIT_ARGS -DCONFIG_BUF_LEN=65536 -DMAX_DOMAINS_F=21 -DMAX_HISTORY=25 -DNMM_NEST=0 test_io_idx.F90 > test_io_idx.f
time mpif90 -w -ffree-form -ffree-line-length-none -fconvert=big-endian -frecord-marker=4 -o module_internal_header_util.o -c module_internal_header_util.f
mpicc -DFSEEKO64_OK -o io_int_idx.o -c -w io_int_idx.c
: error #5149: Illegal character in statement label field [M]
: error #5149: Illegal character in statement label field [O]
: error #5149: Illegal character in statement label field [D]
: error #5149: Illegal character in statement label field [U]
: error #5149: Illegal character in statement label field [L]
: error #5118: First statement in file must not be continued”
请问您知道如何解决吗
4.13版本 的 netcdf 太老了,跟新版本的 wrf 在一起会出现各种奇怪的问题。
要么全部用最新版本的代码;要么都用旧版本的代码。新旧搭配确实会出问题
问题解决了,已成功安装。我装了新的intel编译器,不过之前那个问题应该是因为configure。wrf文件中配置有点问题。谢谢
您好!我 在MIC上平台 ”Linux x86_64 i486 i586 i686, Xeon Phi (MIC architecture) ifort compiler with icc (dm+sm)“编译em_b_wave, 最终编译完后,在main下产生了ideal.exe和wrf.exe,
然后我切换到 run下,执行:./ideal.exe 但是显示如下信息,这是怎么回事?希望您能不吝赐教!
./ideal.exe: cannot execute binary file
因为原生模式编译的WRF是不能在CPU上运行的。。。。。
老师你好。wrf已经安装成功,安装wps,./compile后只生成了ungrib.exe,另外两个没有,该怎么解决?
仔细检查 ./compile 的运行结果,应该有某行出现 error 字样,根据错误信息寻找解决方案
博主好,你这篇博客对我帮助非常大呀,感谢!
这里说三个我遇到的问题:
1. 安装netcdf的时候,–enable-netcdf-4这个选项可以写成–disable-netcdf-4,这样就不需要hdfs5支持了,虽然我不知道这两个东西都是干啥的..
2. 编译WPS的时候,configure列表里边的编译器看上去都不太接地气,我选了gfortran,因为貌似挺多编译器可以兼容gfortran。mpich里好像就提供,但是configure自动生成的参数不能用,需要删除-f90=gfortran
也就是把生成的configure.wps里
DM_FC = mpif90 -f90=gfortran
那一行修改成
DM_FC = mpif90
3. 如果自己用源码升级过glibc,那编译WRF的时候,会提示XDR族的函数支持找不到,这个挺扯蛋的,我还在找原因想办法,简单的做法就是,不要用源码升级glibc..
欢迎交流 🙂
1. HDF5也是一种数据格式,用来存储气象数据,有可能会被用到。
2. 可能因为你安装的gfortran的版本太老,不支持f90?最好从头到尾都统一用最新版编译器
3. ……系统核心库就不要乱更新了,最好还是让包管理器管理吧
你好,谢谢你的文章。我是WRF初学者,我有一个很简单的问题:是不是WRF-ARW只能用来做研究而不能做预报,而WRF-NMM是专门用来做预报用的?
不好意思,我也是初学者。我所理解的是这些模型用来研究或者预报是某种行业惯例,各个模块根据特定的用途进行了相应的优化。具体细节我也不太清楚……
楼主你好,我按照你的步骤安装HDF5,为什么总出现will never be executed呢? 这样是不是就没装成功,该怎么解决呢?谢谢博主!
抱歉没有遇到过这个问题,建议尝试在 stackoverflow.com 上搜索解决方案
老师您好,
我刚接触wrf这块,今天安装了一下这个环境 ,centos 6.5 x64的VMware虚拟机
1. 安装了zlib、hdf5、netcdf-c、 netcdf-fortran 等依赖包
2. WRF下载的是最新的3.8.1版本,WPS也是3.8.1版本
3. 编译安装WRF的时候,第一次我1-71选项的时候我选择的是1,因为需要使用PGI (pgf90/gcc)编译,我安装了pgi,编译后mian下没有出现exe文件;我换了32 ,使用 GNU (gfortran/gcc)编译,也是一样,未出现exe文件,日志中也未报错
4. 编译安装WPS的时候,选择1. Linux x86_64, gfortran (serial)后,compile完成后,目录下只有ungrib.exe,未出现其他的两个exe文件
请问我目前这个环境是哪里有问题呢,请指点,谢谢!
搞定了,谢谢
你好,我也遇到了同样的问题不知道应该怎么解决呢?请问您是怎么解决的
请问你怎么搞定,我现在出现了这个问题
您好,我想问一下这个问题您是怎么解决的,非常感谢
老师您好,我刚刚接触wrf,我在编译安装WPS的时候,选择1. Linux x86_64, gfortran (serial)后,basic compile完成后,目录下只有ungrib.exe,不知道具体该怎么解决,configure.wps文件中也都经过了修改。请您不吝指教!另请教您是否安装过wrfda
你可以编译的时候,日志存下来分析。怀疑是环境变量没有设置好,你可以再检查下。
环境变量如果设置没问题,wrfda可以一次性装成功,configure完以后,要注意修改configure.wrf里面的FORMAT_FIXED和FORMAT_FREE,分别在后面添加上-cpp
修改前:
FORMAT_FIXED = -ffixed-form
FORMAT_FREE = -ffree-form -ffree-line-length-none
修改后:
FORMAT_FIXED = -ffixed-form -cpp
FORMAT_FREE = -ffree-form -cpp -ffree-line-length-none
今天又无意中看到当年本科毕业时由于经验不足的我对博主的提问,以及博主的耐心解答,还是感触颇深。
当年初涉足linux,又碰到转wrf这么个麻烦的毕业课题,还好有博主的帮助才顺利完成了论文内容,虽然研究浅显,有诸多不足,但确确实实是开启了我linux探索之门。
如今我也有了好几年的深度学习开发经验,一切是基于linux环境开发完成的,一路磕磕绊绊走来,再也不是小白了,欣慰。觉得无论博主现在置身何方,从事何种行业吧,都想再次感谢博主当年伸手相助。
感谢留言,博主现在也做上了深度学习😂握个手
博主请问如何将水汽含量卫星反演数据同化进wrf?
“COMPRESSION_INC = -I/PATH/TO/jasper/include/ -L/PATH/TO/libjpeg/lib/ -I/PATH/TO/libpng/include/”
这里-L/PATH/TO/libjpeg/lib/是不是写错了?应该是-I/PATH/TO/libjpeg/include/吧
你好,WRF在运行./compile em_real 命令后,出现了这个错误,
Makefile:53: recipe for target ‘configcheck’ failed
make: *** [configcheck] Error 1
请问这个怎么解决呢?
我在编译wrf时也遇到这个问题了,请问这个问题您解决了吗?
您好,我是大气科学专业的,能否加个微信方便沟通~
老师,WRF可以做气象插值吗?就是气象站插值成格网数据。