声明1 本教程完全免费,请勿进行商业化
声明2 时间仓促,如果有错误或不足之处,欢迎批评指正
1. WRF的安装
官方安装教程:https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php
官方安装教程十分详细,但有一些细节对于初学者而言相对棘手,本文将进一步讨论WRF安装过程中需要注意的问题。
1.1 检验和安装基础包
检验指令:
which gfortran
which cpp
which gcc
which指令用于查找并显示给定命令软件(二进制文件)的绝对路径,这个指令非常实用,当一个命令有多个安装路径时,这个指令可以确定命令调用的路径。如果发现which没有返回结果,即PATH中缺失某个路径,则需要安装相应软件。当调用的路径不是你希望的路径时,需要在PATH左侧添加重新添加路径以调整路径优先级。
安装指令:
sudo apt-get install gfortran cpp gcc g++ m4 libcurl-dev libcurl4-openssl-dev libxml2 libxml2-dev libhdf5-dev
sudo是系统管理指令,可以暂时性地让普通用户获得一些超级权限。在个人你的计算机上,执行sudo命令需要当前Linux账户的密码,所以在注册时请务必记清账户密码;如果你已经是root超级用户,则你已经拥有了Linux系统全部的权限,不需要sudo便可以执行所有的命令;如果你在服务器上没有超级权限,无法执行安装命令,又缺少一些必要基础包,请联系你的管理员询问解决办法。
其他基础指令:ar head sed awk hostname sleep cat ln sort cd ls tar cp make touch cut mkdir tr expr mv uname file nm wc grep printf which gzip rm unzip curl ld locate
这些指令一般Linux系统自带,如果没有则使用apt-get自行安装;此外git指令也是需要的,下载地址https://git-scm.com/
1.2 WRF安装的目录结构
Build_WRF
|-- TESTS
|-- LIBRARIES
|-- WPS
|-- WRF
|-- DATA(输入场数据,位置可自选)
|-- GEOG(地表静态数据,位置可自选)
创建各目录
mkdir Build_WRF
cd Build_WRF
mkdir TESTS
mkdir LIBRARIES
添加目录位置变量,以简化指令的输入,这里的xxx由你自己服务器的情况而定
#export DIR=/home/xxx/Build_WRF
export DIR=`pwd`
echo $DIR #返回结果应该为/home/xxx/Build_WRF
1.3 测试编译器,进入测试目录,下载测试包并解压
cd $DIR/TESTS
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/Fortran_C_tests.tar
tar xvf Fortran_C_tests.tar
进行测试
gfortran TEST_1_fortran_only_fixed.f
./a.out
gfortran TEST_2_fortran_only_free.f90
./a.out
gcc TEST_3_c_only.c
./a.out
gcc -c -m64 TEST_4_fortran+c_c.c
gfortran -c -m64 TEST_4_fortran+c_f.f90
gfortran -m64 TEST_4_fortran+c_f.o TEST_4_fortran+c_c.o
./a.out
./TEST_csh.csh
./TEST_perl.pl
./TEST_sh.sh
一共有七项测试,均显示SUCCESS则表示成功。值得注意的是本文使用的编译器是GUN编译器,相应的C和Fortran编译器为gcc和gfortran。除此之外,还有一种Intel编译器,相应的C和Fortran编译器为icc和ifort。
1.4 进入依赖包目录,下载依赖包并解压
cd $DIR/LIBRARIES
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/netcdf-4.1.3.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/mpich-3.0.4.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/jasper-1.900.1.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/libpng-1.2.50.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/zlib-1.2.7.tar.gz
tar xvf netcdf-4.1.3.tar.gz
tar xvf mpich-3.0.4.tar.gz
tar xvf jasper-1.900.1.tar.gz
tar xvf libpng-1.2.50.tar.gz
tar xvf zlib-1.2.7.tar.gz
注意tar为Linux下的压缩打包工具,参数-x表示解压文件,参数-f指定文件名,参数-v表示显示处理过程,有时还有参数-z,表示调用gzip执行压缩或解压缩。所以有时该指令还写作tar xzvf或tar -xzvf,效果都是一样的。
2023/12/12更新
新版本的WRF支持netcdf4,相对与netcdf2文件体积大大缩小,但它的安装相对复杂。如果不是特别需要,可以设置以下变量取消使用nc4编译WRF
export NETCDF_classic=1
同时,本服务器的gfortran版本为4.8.5,而较新版的gfortran可能与netcdf-4.1.3冲突导致安装失败,因此我们建议安装新版本的netcdf-c和netcdf-fortran,唯一麻烦的是它们需要分开安装。如果你想安装包含nc4的新版netcdf或新版mpich,请参考本章最后倒数第二节新版netcdf-c和netcdf-fortran和mpich的安装(可选)
如果你感觉下面的流程过于复杂或者因某些错误安装失败,也完全可以选用诸如module load、conda和homebrew等方法,省时省力,只要编译WRF及WPS时不出现错误即可
##你也可以尝试使用conda安装
#conda install -c conda-forge libnetcdf netcdf-fortran mpich zlib libpng jasper gcc_linux-64 gxx_linux-64 gfortran_linux-64
##路径设置,此处请使用conda env list查看你的conda环境位置
#export CONDADIR=/home/xxx/anaconda3/envs/myenv
#export NETCDF=$CONDADIR
#export JASPERLIB=$CONDADIR/lib
#export JASPERINC=$CONDADIR/include
#export LDFLAGS=-L$CONDADIR/lib
#export CPPFLAGS=-I$CONDADIR/include
1.5 安装各个依赖包
安装netcdf:
cd $DIR/LIBRARIES/netcdf-4.1.3
./configure --prefix=$DIR/LIBRARIES/netcdf --disable-dap --disable-netcdf-4 --disable-shared
make
make install
注意,./configure->make->make install是安装软件包的通用方法, --prefix参数指定安装路径,make进行源代码编译,make install将将编译好的代码移动到安装路径中,即进行安装
添加路径:
export PATH=$DIR/LIBRARIES/netcdf/bin:$PATH
export NETCDF=$DIR/LIBRARIES/netcdf
这里 PATH=二进制文件路径:$PATH 就将相应软件的路径添加到PATH变量的左侧,从而可以让系统找到相应的指令。如果只是在命令行里使用export添加路径,这个路径只会生效一次,下次登陆时会失效。因此,这些export指令往往需要写在.bashrc中,这个文件会储存用户的个性化设置,并在Linux启动时自动加载所有指令。为了使路径永久生效,你可以将本文所有的export指令添加到.bashrc中。
输入 vi ~/.bashrc 就可以编辑该文件。这里的“.”表示隐藏文件,因此你在家目录(即/home/xxx,前面的波浪线就代表这个目录)下使用ls指令不会显示该文件,必须输入 ls -a 才可以看见。
vi是Linux下的文本编辑器,按i键可以进入编辑模式,这时你可以自由地进行编辑;按esc退出编辑模式,之后输入:q可退出,如果你已经修改了文件内容则需要输入:wq保存并退出或输入:q!强制退出不保存。修改后的.bashrc不会立即生效,还需要输入 source ~/.bashrc 使其生效,或者重启Linux。
安装mpich:
cd $DIR/LIBRARIES/mpich-3.0.4
./configure --prefix=$DIR/LIBRARIES/mpich
make
make install
添加路径:
export PATH=$DIR/LIBRARIES/mpich/bin:$PATH
安装zlib(如果之前已经安装zlib,则可跳过这一步):
cd $DIR/LIBRARIES/zlib-1.2.7
./configure --prefix=$DIR/LIBRARIES/grib2
make
make install
安装libpng:
cd $DIR/LIBRARIES/libpng-1.2.50
./configure --prefix=$DIR/LIBRARIES/grib2
make
make install
安装jasper:
cd $DIR/LIBRARIES/jasper-1.900.1
./configure --prefix=$DIR/LIBRARIES/grib2
make
make install
添加路径:
export JASPERLIB=$DIR/LIBRARIES/grib2/lib
export JASPERINC=$DIR/LIBRARIES/grib2/include
export LDFLAGS=-L$DIR/LIBRARIES/grib2/lib
export CPPFLAGS=-I$DIR/LIBRARIES/grib2/include
此时,你的LIBRARIES下应该至少有grib2 mpich netcdf三个文件夹,这说明你的依赖包安装成功,可以开始下一步的操作
1.6 兼容性测试,下载测试包并解压
cd $DIR/TESTS
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/Fortran_C_NETCDF_MPI_tests.tar
tar xvf Fortran_C_NETCDF_MPI_tests.tar
进行测试:
cp ${NETCDF}/include/netcdf.inc .
gfortran -c 01_fortran+c+netcdf_f.f
gcc -c 01_fortran+c+netcdf_c.c
gfortran 01_fortran+c+netcdf_f.o 01_fortran+c+netcdf_c.o -L${NETCDF}/lib -lnetcdff -lnetcdf
./a.out
cp ${NETCDF}/include/netcdf.inc .
mpif90 -c 02_fortran+c+netcdf+mpi_f.f
mpicc -c 02_fortran+c+netcdf+mpi_c.c
mpif90 02_fortran+c+netcdf+mpi_f.o 02_fortran+c+netcdf+mpi_c.o -L${NETCDF}/lib -lnetcdff -lnetcdf
mpirun ./a.out
一共有两项测试,分别测试刚刚安装的netcdf和mpich,均显示SUCCESS则表示成功
1.7 下载WPS和WRF
cd $DIR
git clone --recurse-submodules https://github.com/wrf-model/WRF
#或者下载较旧的版本。如果没有git指令一直失败,也可以下载再上传至服务器解压。注意不要下载不含Noah-MP的Source code
#wget https://github.com/wrf-model/WRF/releases/download/v4.4/v4.4.tar.gz
#或者下载更老的版本(不推荐)
#wget https://www2.mmm.ucar.edu/wrf/src/WRFV4.0.TAR.gz
#不要用下面这种写法!不添加--recurse-submodules参数可能导致Noah-MP模块缺失,导致安装失败
#git clone https://github.com/wrf-model/WRF
git clone https://github.com/wrf-model/WPS
编译WRF
cd $DIR/WRF
#如果使用nc4报错,请用--disable-netcdf-4重新编译netcdf,并设置export NETCDF_classic=1
#如果确实需要nc4,请直接用conda方法安装
#netcdf4的安装相对复杂,且经常出现无法链接库而报错的情况,如果大家有成功经验欢迎在评论区分享
./configure
./compile em_real &> log.compile
如果在$DIR/WRF/run 或 $DIR/WRF/test/em_real下成功生成四个exe文件,则表示安装成功
编译WPS
cd $DIR/WPS
./configure
./compile &> log.compile
如果在$DIR/WPS下成功生成三个exe文件,则表示安装成功。一定要注意,必须先成功编译WRF,才能编译WPS,顺序不能颠倒。如果编译WRF后配置WPS时仍提示No compiled WRF code found,则说明WPS找不到WRF的目录,请检查你的WRF文件夹的名称是否为WRF,或者设置WRF文件夹的路径:
export WRF_DIR=/home/xxx/Build_WRF/WRFV4.5.1
在WRF和WPS的./configure时会让你选择编译器和并行方式。最右侧一列为编译器,一般而言Intel编译器的效率比较高,但如果你没有,就只能选GUN了。并行方式有四种:serial(串行,即非并行)、smpar(内存共享并行)、dmpar(分布式并行)、dm+sm(同时使用dmpar和smpar),请根据你自己服务器的情况进行选择。
1.8 其他的需要的数据
要运行WPS和WRF,你还需要下载地表静态数据和驱动场数据,地表静态数据包含了地形、土壤类型等信息,分为Mandatory Static Data、Static Data for Specific Applications和Optional Static Data,如果没有特殊需要只下载Mandatory的即可,根据你的需求选择低分辨率或高分辨率;驱动场数据提供了模式的输入场,它本质上是一类再分析数据,因此有时也可以当作观测数据。不同机构提供了不同的输入场,可能会有一些细微的差别。你可以从WRF官网上下载,也可以去相应机构的官网上下载(比如本文就给出了ECMWF的ERA5数据,这也是公认的做得比较好的再分析数据。
地表静态数据:
http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html
输入场:
https://www2.mmm.ucar.edu/wrf/users/download/free_data.html
https://cds.climate.copernicus.eu/cdsapp#!/search?text=ERA5%20hourly%20data
新版netcdf-c和netcdf-fortran和mpich的安装(可选)
为了简便,上面使用的netcdf版本为4.1.3版。4.2版本以后netcdf-c和netcdf-fortran开始分开,需要分别进行安装。如果你想安装高版本的netcdf,则请参考以下教程:
2023/12/18更新 netcdf-c-4.7.2+netcdf-fortran-4.5.2安装教程(不支持nc4)
下载安装包:
cd $DIR/LIBRARIES
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/netcdf-c-4.7.2.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/netcdf-fortran-4.5.2.tar.gz
wget https://www.mpich.org/static/downloads/4.1.2/mpich-4.1.2.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/zlib-1.2.11.tar.gz
tar xvf netcdf-c-4.7.2.tar.gz
tar xvf netcdf-fortran-4.5.2.tar.gz
tar xvf mpich-4.1.2.tar.gz
tar xvf zlib-1.2.11.tar.gz
安装zlib:
cd $DIR/LIBRARIES/zlib-1.2.11
./configure --prefix=$DIR/LIBRARIES/grib2
make
make install
安装netcdf-c:
cd $DIR/LIBRARIES/netcdf-c-4.7.2
./configure --prefix=$DIR/LIBRARIES/netcdf --disable-dap --disable-netcdf4 --disable-shared
make
make install
添加路径:
export PATH=$DIR/LIBRARIES/netcdf/bin:$PATH
export NETCDF=$DIR/LIBRARIES/netcdf
安装netcdf-fortran:
cd $DIR/LIBRARIES/netcdf-fortran-4.5.2
./configure --prefix=$DIR/LIBRARIES/netcdf --disable-shared LIBS="-lnetcdf -lz" LDFLAGS="-L$DIR/LIBRARIES/netcdf/lib -L$DIR/LIBRARIES/grib2/lib" CPPFLAGS="-I$DIR/LIBRARIES/netcdf/include -I$DIR/LIBRARIES/grib2/include"
make
make install
安装mpich
cd $DIR/LIBRARIES/mpich-4.1.2
./configure --prefix=$DIR/LIBRARIES/mpich
make -j4 #加速编译
make install
添加路径:
export PATH=$DIR/LIBRARIES/mpich/bin:$PATH
2024/1/3更新 netcdf-c-4.9.2+netcdf-fortran-4.6.1+hdf5安装教程(支持nc4)
下载安装包:
cd $DIR/LIBRARIES
wget https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz
wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/zlib-1.2.11.tar.gz
wget https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.tar.gz
tar xvf netcdf-c-4.9.2.tar.gz
tar xvf netcdf-fortran-4.6.1.tar.gz
tar xvf zlib-1.2.11.tar.gz
tar xvf hdf5-1.14.3.tar.gz
安装zlib和hdf5:
#先安装zlib
cd $DIR/LIBRARIES/zlib-1.2.11
./configure --prefix=$DIR/LIBRARIES/grib2
make
make install
#安装hdf5
cd $DIR/LIBRARIES/hdf5-1.14.3
./configure --prefix=$DIR/LIBRARIES/hdf5 --enable-fortran --enable-cxx --with-zlib=$DIR/LIBRARIES/grib2
make -j4 #加速编译
make install
添加动态库:
export LD_LIBRARY_PATH=$DIR/LIBRARIES/grib2/lib:$DIR/LIBRARIES/hdf5/lib:$LD_LIBRARY_PATH
安装netcdf-c
cd $DIR/LIBRARIES/netcdf-c-4.9.2
./configure --prefix=$DIR/LIBRARIES/netcdf --enable-dap --enable-netcdf4 --enable-shared LDFLAGS="-L$DIR/LIBRARIES/hdf5/lib -L$DIR/LIBRARIES/grib2/lib" CPPFLAGS="-I$DIR/LIBRARIES/hdf5/include -I$DIR/LIBRARIES/grib2/include"
make
make install
添加路径和动态库:
export PATH=$DIR/LIBRARIES/netcdf/bin:$PATH
export NETCDF=$DIR/LIBRARIES/netcdf
export LD_LIBRARY_PATH=$DIR/LIBRARIES/netcdf/lib:$LD_LIBRARY_PATH
安装netcdf-fortran
cd $DIR/LIBRARIES/netcdf-fortran-4.6.1
./configure --prefix=$DIR/LIBRARIES/netcdf --enable-shared LIBS="-lnetcdf -lz" LDFLAGS="-L$DIR/LIBRARIES/netcdf/lib -L$DIR/LIBRARIES/grib2/lib" CPPFLAGS="-I$DIR/LIBRARIES/netcdf/include -I$DIR/LIBRARIES/grib2/include"
make
make install
#检查是否安装成功
nc-config --has-nc4
nf-config --has-nc4
注意,必须先成功安装netcdf-c,才能安装netcdf-fortran,顺序不能颠倒。如果你在安装netcdf时遇到问题,请先尝试使用问题5给出的方法解决;安装成功后,其他的zlib、libpng、jasper依赖包继续参照1.5节的教程安装。
如果你没有设定上述的一些参数,却依然可以正常安装,也不必担心,这说明你的软件包可以找到正确的路径。或者,你通过其他的一些教程安装成功,也是可以的。重点是能成功地进行安装,而不是用何种方法进行安装。
安装过程中可能遇到的问题
你在上面的安装过程中,可能遇到各种各样的问题,这里我们列举几个常见的问题以及它们的解决方法。
问题1 ./configure时权限不足 Permission denied
解决 用sudo,如:
sudo ./configure
问题2 mpich安装不成功The selected Fortran 90 compiler gfortran does not work with the selected Fortran 77 compiler gfortran.
或者configure: error: The Fortran compiler gfortran will not compile files that call the same routine with arguments of different types.
解决 mpich的版本过低,考虑降级gfortran(10以下)或安装最新版mpich新版netcdf-c和netcdf-fortran和mpich的安装(可选)
问题3 netcdf在./configure时报错curl configure: error: curl required for byte range support. Install curl or build without --enable-byterange.
解决 根据提示,安装curl库
sudo apt-get install libcurl-dev libcurl4-openssl-dev
或者使用–disable-byterange参数(不推荐)
./configure --prefix=$DIR/LIBRARIES/netcdf --disable-byterange
问题4 netcdf、mpich等在./configure时使用了错误的编译器,比如你在配置过程中频繁出现conda的gcc_linux-64
解决 请设置CC、FC等:
./configure --prefix=$DIR/LIBRARIES/netcdf --disable-dap --disable-netcdf-4 --disable-shared CC=gcc CXX=g++ FC=gfortran FCFLAGS=-m64 F77=gfortran F90=gfortran FFLAGS=-m64
比如,这里的CC=gcc就指定了C编译器为默认的gcc,如果希望使用其他路径的gcc就要写为CC=xxx/gcc或调整PATH的优先顺序。所有这一些参数要和./configure写在同一行,后面安装netcdf-fortran时的CPPFLAGS、LDFLAGS也是同理,不要分行写
问题5.1 netcdf-c在./configure时报错configure: error: Can’t find or link to the z library. Turn off netCDF-4 and DAP clients with --disable-netcdf-4 --disable-dap, or see config.log for errors
问题5.2 netcdf-fortran在./configure时报错configure: error: C compiler cannot create executables
或者checking for library containing nc_open… no configure: error: Could not link to netcdf C library. Please set LDFLAGS.
问题5.3 libpng在./configure时报错configure: error: zlib not installed
解决 这两个错误都是找不到zlib等库而无法链接-lz -lhdf5 -lcurl等导致的。有些服务器配置比较完善,自带zlib的环境,因此不会出现该错误;而有些服务器则不行。如果出现此类错误,请遵循以下方法:
- 先根据本教程安装zlib
- 在进行netcdf-c的./configure时,输入:
./configure --prefix=$DIR/LIBRARIES/netcdf --disable-dap --enable-netcdf-4 --disable-shared LDFLAGS="-L$DIR/LIBRARIES/hdf5/lib -L$DIR/LIBRARIES/grib2/lib" CPPFLAGS="-I$DIR/LIBRARIES/hdf5/include -I$DIR/LIBRARIES/grib2/include"
- 在进行netcdf-fortran的./configure时,将nc-config --libs的全部内容添加到LIBS或LDFLAGS中:
./configure --prefix=$DIR/LIBRARIES/netcdf --disable-shared LIBS="-lnetcdf -lz `nc-config --libs`" LDFLAGS="-L$DIR/LIBRARIES/netcdf/lib -L$DIR/LIBRARIES/grib2/lib" CPPFLAGS="-I$DIR/LIBRARIES/netcdf/include -I$DIR/LIBRARIES/grib2/include"
#上面代码应该等价于下面
#./configure --prefix=$DIR/LIBRARIES/netcdf --disable-shared LIBS="-L$DIR/LIBRARIES/hdf5/lib -lnetcdf -lhdf5_hl -lhdf5 -lm -lz -lcurl" LDFLAGS="-L$DIR/LIBRARIES/netcdf/lib -L$DIR/LIBRARIES/grib2/lib" CPPFLAGS="-I$DIR/LIBRARIES/netcdf/include -I$DIR/LIBRARIES/grib2/include"
- 在进行libpng的./configure时,输入:
./configure --prefix=$DIR/LIBRARIES/grib2 LDFLAGS=-L$DIR/LIBRARIES/grib2/lib CPPFLAGS=-I$DIR/LIBRARIES/grib2/include
此外,还请仔细检查你的$DIR和参数设置是否正确,切勿输错
总而言之,netcdf-fortran的安装可能是问题出现最多的环节之一。如果你有什么难以解决的问题,或者有什么补充建议,欢迎在评论区下方提出。
问题6 jasper在Darwin内核安装失败
解决 请参考Mac的WRF安装教程。注意,前面的这些软件包或者依赖库使用module load、conda或者homebrew安装也都是可以的,关键是需要找到他们的正确路径,并用export添加
问题7 WRF编译时出现问题 /mnt/c/Windows/System32/cmd.exe/ifort: Not a directory.
解决 显然你没有Intel编译器,请在./configure时选择GUN编译器,如果想使用Intel编译器请自行安装
问题8 WRF编译时出现问题Error Error Error NoahMP submodule files not populating WRF directories
解决 考虑下载最新版WRF,即添加–recurse-submodules参数
git clone --recurse-submodules https://github.com/wrf-model/WRF
问题9 WRF和WPS在./configure时不断刷屏
解决 重启你的Shell,所谓Shell就是你的操作界面
问题10 WRF在./configure时出现警告There are some IEEE Fortran 2003 features in WRF that your compiler does not recognize.
解决 这不是一个错误,但并不意味着就可以忽视。它提示你的Fortran版本太低,这可能会导致你之后的安装错误,如Problems building executables
问题11 WRF在./configure时出现错误NETCDF4 IO features are requested
解决 请查看WRF/tools/nc4_test.log文件寻找错误原因
如果出现类似以下错误
/usr/bin/ld: cannot find -lhdf5
/usr/bin/ld: cannot find -lhdf5_hl
说明找不到相应的库,需要把安装的hdf5库连接过去(需要权限):
sudo ln -s $DIR/LIBRARIES/hdf5/lib/libhdf5.so /usr/lib/libhdf5.so
sudo ln -s $DIR/LIBRARIES/hdf5/lib/libhdf5_hl.so /usr/lib/libhdf5_hl.so
如果实在无法解决,请尝试根据提示设置变量取消使用nc4,或者参考本文conda方法
export NETCDF_classic=1
问题12 WPS在./compile完成后,没有生成相应的exe文件
解决 如果你使用Intel编译器,除了在./configure时需要选择15之外,还可能需要在configure.wps里面修改下面两行:
DM_FC=mpiifort
DM_CC=mpiicc
当然,不同计算机的情况不同,遇到的问题更会是花样百出。安装WRF时可能出现的问题远不止这些,本文不可能全部列举出来。如果你遇到的问题在本文中没有提到,不要灰心,请仔细查看错误信息,弄清楚导致错误的原因,根据提示解决问题或者去网上搜索问题的解决方法。
2. WRF的运行
WRF的官方教程网址在这:https://www2.mmm.ucar.edu/wrf/users/docs/user_guide_v4/v4.4/contents.html
请仔细阅读该教程,尤其是第3章和第5章,其中详细地介绍了WPS和WRF的各种技术细节,本文只是简单介绍一些入门级的基础,想要进一步了解并熟悉WRF请务必阅读官方教程。
2.1 WPS和WRF运行的基本流程
WPS(WRF Preprocessing System)是WRF的前处理系统,WRF是数值计算程序,因此我们需要先运行WPS,再运行WRF,整体的流程如下所示(以ERA5输入场为例)。
运行WPS:
cd $DIR/WPS
#修改你的namelist.wps,这是你的主要工作之一
vi namelist.wps
#处理静态网格,生成geo_em*,这里的*表示通配符
./geogrid.exe
#链接变量表(以ERA5输入场为例)
ln -sf ungrib/Variable_Tables/Vtable.ECMWF Vtable
#ERA5输入场也可以使用ERA-Interim的Vtable
#ln -sf ungrib/Variable_Tables/Vtable.ERA-interim.pl Vtable
#导入输入场,会生成GRIBFILE*链接文件
./link_grib.csh ../DATA/era5*.grib
#“解构”grib文件,生成中间文件,中间文件的前缀可自定义,默认为FILE*
./ungrib.exe
#整合中间文件,生成气象场数据met_em*
./metgrid.exe
上面提到的Vtable为变量表,不同的输入场资料使用的Vtable不同。你可以用vi浏览一下这个表的内容,可以发现每一个变量都对应一个数字,这个数字就是grib文件的变量代号,ungrib.exe正是通过这个代号来确定变量的。nc格式的文件不能进行ungrib.exe,需要转化格式。CDS官网上的ERA5 single levels和pressure levels有许多变量,如果不知道需要下载哪些变量作为输入场,也可以参考这个表。
运行WRF:
cd $DIR/WRF/test/em_real
#修改你的namelist.input,这是你的主要工作之一
vi namelist.input
#将WPS生成的met_em*链接过来
ln -s ../../../WPS/met_em* ./
#生成wrfinput*(初始条件)和wrfbdy*(边界条件)
./real.exe
#进行数值积分,这里&表示后台运行
./wrf.exe &
在rsl.error.0000中你可以查看运行过程和错误信息,如果显示wrf: SUCCESS COMPLETE WRF,那么恭喜你运行成功,并且目录下生成的wrfout*文件就是输出结果。如果你感觉运行速度太慢,可以使用并行计算,需要注意的是,wrf.exe和metgrid.exe可以使用并行计算;ungrib.exe不能使用并行计算;real.exe理论上可以使用并行,但实际测试发现它的并行会出现一些问题,因此不建议使用并行计算;geogrid.exe处理时间很短,一般不需要使用并行计算。
2.2 namelist的设定
下面我们给出namelist.wps和namelist.input一些常用参数的简介,详细的内容请参考官网教程。
如果你想设置一层嵌套网格,则需要在namelist中用两列参数值分别给出母网格和嵌套网格的信息,列与列之间用逗号分隔;多层嵌套同理;如果你不想使用嵌套,使用一列参数值即可。
namelist.wps | |
---|---|
&share | |
wrf_core | WRF的框架,WRF可分为ARW(用于科学研究)和NMM(用于业务预报),两种,我们使用的是WRF-ARW,这里选’ARW’即可 |
max_dom | 网格(模拟域)总数 |
start_date end_date | 输入场数据起止时间 |
interval_seconds | 输入场数据间隔时间(时间分辨率),单位秒 |
&geogrid | |
parent_id | 嵌套网格的母网格编号,最外层网格设为1即可 |
parent_grid_ratio | 母网格与嵌套网格的格距比,最外层网格设为1 |
i_parent_start j_parent_start | 嵌套网格在母网格中的起始位置,最外层网格设为1即可 |
s_we s_sn | 东西、南北方向起始格点索引值,默认为1 |
e_we e_sn | 东西、南北方向终止格点索引值,一般也就是你的总格点数 |
dx dy | 东西(x)、南北(y)方向格距,单位米,不过WRF不支持矩形网格,这里这两个必须设为相同值 |
ref_lat ref_lon | 模拟域的中心经纬度 |
map_proj | 地图投影,常见的投影有兰勃特投影(更适用于中纬)、墨卡托投影(更适用于低纬)、极射赤面投影(更适用于高纬)、等距圆柱投影(绘图常用)等,具体请学习地图投影的相关知识,参考https://www2.mmm.ucar.edu/wrf/users/docs/user_guide_v4/v4.4/users_guide_chap3.html#_How_to_Run |
truelat1 truelat2 | 投影的标准纬度,投影平面与地球上纬线长度相同的纬度,即投影面与地球相切或相割处的纬度。对于兰勃特投影,若只设置truelat1不设置truelat2,则truelat2默认与truelat1相同;对于墨卡托投影,truelat2无效 |
stand_lon | 垂直参考经度,只对兰勃特投影有效,对于墨卡托投影无效,见后图 |
geog_data_path | 地表静态数据的目录位置 |
&ungrib | |
out_format | 中间文件的格式,这里选’WPS’即可,参考https://www2.mmm.ucar.edu/wrf/users/docs/user_guide_v4/v4.4/users_guide_chap3.html#_Writing_Meteorological_Data |
prefix | 中间文件前缀 |
&metgrid | |
fg_name | 要读取的中间文件的前缀,供metgrid.exe识别 |
io_form_metgrid | met_em*文件格式,默认为2(nc格式) |
namelist.input | |
---|---|
&time_control | |
start_year start_month start_day start_hours start_minute start_second | WRF模拟的起始时间(年月日时分秒) |
end_year end_month end_day end_hours end_minute end_second | WRF模拟的起始时间(年月日时分秒),我们的WRF-ARW只是用于做模型的研究的,而不能做业务预报,因此该时间范围不能超出输入场的时间范围 |
run_days run_hours run_minutes run_seconds | WRF模拟运行(日时分秒),其实只要设定了起止时间这些可以不设 |
interval_seconds | 设为与namelist.wps相同即可 |
history_interval | WRF输出结果的时间间隔,单位分钟 |
frames_per_outfile | 每个WRF输出文件中有几条时间记录 |
restart | 是否启用断点重启 |
restart_interval | 每隔多长时间生成一个重启文件,单位分钟,设为0则不生成重启文件 |
iofields_filename | 控制输出变量,参考https://www2.mmm.ucar.edu/wrf/users/docs/user_guide_v4/v4.4/users_guide_chap5.html#runtimeio |
&domains | |
time_step time_step_fract_num time_step_fract_den | 时间积分步长(整数分子分母),单位秒 |
e_we e_sn e_vert | e_vert为垂直方向终止格点索引值,其他同namelist.wps |
p_top_requested | 模式顶气压值,单位Pa |
num_metgrid_levels num_metgrid_soil_levels | met_em*文件的垂直层数和土壤层数,可以用ncdump -h或ncl_filedump命令查看 |
max_dom dx dy grid_id parent_id i_parent_start j_parent_start | grid_id为网格区域的编号,其他同namelist.wps |
parent_grid_ratio parent_time_step_ratio | parent_time_step_ratio为母网格与嵌套网格的时间积分步长比,最外层网格设为1 |
&physics | |
mp_physics | 微物理过程方案 |
cu_physics cudt | 积云参数化方案和积云方案调用时间间隔 |
ra_lw_physics ra_sw_physics radt | 长短波辐射方案和辐射方案调用时间间隔 |
bl_pbl_physics bldt | 边界层方案和边界层方案调用时间间隔 |
sf_sfclay_physics | 近地面层方案 |
sf_surface_physics | 陆面过程方案 |
运行过程中可能遇到的问题
你在WPS和WRF的运行过程中,可能遇到各种各样的问题,这里我们同样列举几个常见的问题以及它们的解决方法。如果本文的教程不能解决你的问题,请去网上搜索解决方法。
有一类问题是用户设置错误导致的,比如下面两个错误,分别是边界层方案和近地面方案不匹配以及模式顶气压设置过低(模式顶过高),你只需要根据提示修改相应的参数即可。
还有一类问题属于模型自身的问题,比如下面这个SSiB陆面方案,它的设置相对复杂,容易出现错误。如果你并非想专门地深入研究该方案,就请放弃使用该方案,换一个其他的可运行的陆面方案即可。这两类问题我们不过多讨论,下面我们看几个常见的特殊错误。
问题1 运行ungrib.exe出错:
\tI was expecting a Grib1 file, but this is a Grib2 file.
\tIt is possible this is because your GRIBFILE.XXX files
\tare not all of the same type.
\tWPS can handle both file types, but a separate ungrib
\tjob must be run for each Grib type.\n
解决 检查你的输入场grib文件。你在下载ERA5数据作为土壤地表近地面输入场时,应该下载ERA5 single levels而不是ERA5-Land。
问题2 运行wrf.exe出错:not enough info for a p sfc computation
解决 你的输入场缺失某些地表气压,请仔细检查输入场数据的完整性
*小技巧Tip:一般来说,如果输入场有多个文件,且它们的分割时长相同(如逐小时数据),则你可以通过文件大小来判断异常的输入场文件,文件过小则可能缺失某些变量和时间,文件过大则可能坐标网格不一致
问题3 运行wrf.exe时,出现内存错误:
Backtrace for this error:
#0 0x2ba24472eb9a in ???
解决 可能是你的时间积分步长设置过大,导致溢出。一般而言,数值计算的时间步长和空间步长需要匹配,即前者是后者的3~6倍(s/km),比如你的格距dxdy为10000m,时间步长time_step就要设为60s。
*注:在WRF较新的版本中,会直接提示时间步长过大
问题4 运行wrf.exe出错:the domain size is too small for this many processors, or the decomposition aspect ratio is poor.
解决 使用的并行数太多,减少一些
问题5 运行wrf.exe出错:not enough eta levels to reach p_top
解决 模式层数太少,请增大e_vert值
3. 前后处理工具
3.1 NCL
NCL(NCAR Command Language)是由美国大气研究中心(NCAR)开发的专门设计用于科学资料分析、科学数据处理以及科学数据可视化的一门解释型高级语言。常用在气象数据的处理和可视化上。
NCL官方网站:https://www.ncl.ucar.edu/
3.2 Python(+Matplotlib+Cartopy+Jupyter)(推荐)
众所周知,Python是一门很火的高级程序设计语言,也是当今主流编程语言之一。Matplotlib是Python的绘图库,与Cartopy包一起可以绘制许多精美的气象分析图,尤其再结合Jupyter Notebook可以随时保存结果,功能十分强大。NCL固然方便,但其开放性和发展性依然是远不及Python的。
Matplotlib官方示例:https://matplotlib.org/stable/tutorials/index.html
Cartopy官方示例:https://scitools.org.uk/cartopy/docs/latest/gallery/index.html
3.3 WRF Domain Wizard(推荐)
在设置namelist.wps时,一个首要问题就是确定模拟区域。你当然可以使用WPS自带的plotgrids_new.ncl绘制模拟域,但下面的WRF Domain Wizard软件更加方便,只需要轻轻几点,就可以框选出模拟区域,并确定参数信息。
*小Bug:在设置嵌套网格Nests时,NX和NY对应namelist.wps中的e_we和e_sn,但是它们的值有时是错误的,你需要点一下Edit按钮然后OK修正。判断e_we和e_sn是否正确就是看它们减1是否能被parent_grid_ratio整除(比如ratio为3,e_we或e_sn设为91是可以的,90则不行)
官方下载地址:https://www.esrl.noaa.gov/gsd/wrfportal/DomainWizard.html
此外WRF Domain Wizard还有网页版,更加便捷,如果只想要一个namelist.wps,而不想处理整个WPS,用网页版就足够了
网页版地址:https://jiririchter.github.io/WRFDomainWizard/
文章来源:https://www.toymoban.com/news/detail-469125.html
3.4 CDO(推荐)
CDO(Climate Data Operators)是一款功能极其强大的操作十分方便的通过命令行进行气象数据处理与分析的软件。它提供了700余个单独的操作符,可进行一系列的气象数据相关的操作。利用CDO,你可以对WRF的输出结果进行合并、插值、变量提取等一系列处理,十分便捷。
官方教程:https://code.mpimet.mpg.de/projects/cdo/wiki
几个常用的CDO指令:文章来源地址https://www.toymoban.com/news/detail-469125.html
#双线性插值
cdo remapbil,r360x180 infile outfile
#合并时间
cdo mergetime infile(s) outfile
#提取WRF变量2m温度
cdo select,name=T2 wrfout* outfile
#提取WRF变量2m相对湿度
cdo -b F32 -expr,'RH2=(Q2*PSFC)/(380.4*exp(17.27*(T2-273.15)/(T2-35.85)))*100' -select,name=Q2,PSFC,T2 wrfout* outfile
#提取WRF变量降水
cdo -deltat -expr,'PR=RAINNC+RAINC' -select,name=RAINNC,RAINC wrfout* outfile
#提取WRF变量经纬向风
cdo -expr,'UMET10=U10*COSALPHA-V10*SINALPHA;VMET10=V10*COSALPHA+U10*SINALPHA' -select,name=U10,V10,COSALPHA,SINALPHA wrfout* outfile
到了这里,关于WRF安装和运行的技术教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!