WRF安装和运行的技术教程

这篇具有很好参考价值的文章主要介绍了WRF安装和运行的技术教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明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。
WRF安装和运行的技术教程

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将将编译好的代码移动到安装路径中,即进行安装
WRF安装和运行的技术教程

netcdf的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三个文件夹,这说明你的依赖包安装成功,可以开始下一步的操作
WRF安装和运行的技术教程

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则表示成功
WRF安装和运行的技术教程

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文件,则表示安装成功
WRF安装和运行的技术教程

编译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安装和运行的技术教程

在WRF和WPS的./configure时会让你选择编译器和并行方式。最右侧一列为编译器,一般而言Intel编译器的效率比较高,但如果你没有,就只能选GUN了。并行方式有四种:serial(串行,即非并行)、smpar(内存共享并行)、dmpar(分布式并行)、dm+sm(同时使用dmpar和smpar),请根据你自己服务器的情况进行选择。
WRF安装和运行的技术教程

WRF的./configure,我的服务器上选择34

WRF安装和运行的技术教程

WPS的./configure,我的服务器上选择3

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的环境,因此不会出现该错误;而有些服务器则不行。如果出现此类错误,请遵循以下方法:

  1. 先根据本教程安装zlib
  2. 在进行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"
  1. 在进行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"
  1. 在进行libpng的./configure时,输入:
./configure --prefix=$DIR/LIBRARIES/grib2 LDFLAGS=-L$DIR/LIBRARIES/grib2/lib CPPFLAGS=-I$DIR/LIBRARIES/grib2/include

此外,还请仔细检查你的$DIR和参数设置是否正确,切勿输错
WRF安装和运行的技术教程
WRF安装和运行的技术教程
总而言之,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编译器请自行安装
WRF安装和运行的技术教程

问题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

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
WRF安装和运行的技术教程

问题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 

WRF安装和运行的技术教程

问题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安装和运行的技术教程

运行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 陆面过程方案

WRF安装和运行的技术教程

stand_lon分别设为102和108时的模拟区域,可见标准经度设为多少,哪一条经线就是“竖直”的,这两张图是用WPS自带的工具绘制的,位置在$DIR/WPS/util/plotgrids_new.ncl

运行过程中可能遇到的问题

你在WPS和WRF的运行过程中,可能遇到各种各样的问题,这里我们同样列举几个常见的问题以及它们的解决方法。如果本文的教程不能解决你的问题,请去网上搜索解决方法。
有一类问题是用户设置错误导致的,比如下面两个错误,分别是边界层方案和近地面方案不匹配以及模式顶气压设置过低(模式顶过高),你只需要根据提示修改相应的参数即可。
WRF安装和运行的技术教程

还有一类问题属于模型自身的问题,比如下面这个SSiB陆面方案,它的设置相对复杂,容易出现错误。如果你并非想专门地深入研究该方案,就请放弃使用该方案,换一个其他的可运行的陆面方案即可。这两类问题我们不过多讨论,下面我们看几个常见的特殊错误。
WRF安装和运行的技术教程

问题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:一般来说,如果输入场有多个文件,且它们的分割时长相同(如逐小时数据),则你可以通过文件大小来判断异常的输入场文件,文件过小则可能缺失某些变量和时间,文件过大则可能坐标网格不一致
WRF安装和运行的技术教程

问题3 运行wrf.exe时,出现内存错误:
Backtrace for this error:
#0 0x2ba24472eb9a in ???
解决 可能是你的时间积分步长设置过大,导致溢出。一般而言,数值计算的时间步长和空间步长需要匹配,即前者是后者的3~6倍(s/km),比如你的格距dxdy为10000m,时间步长time_step就要设为60s。
WRF安装和运行的技术教程
*注:在WRF较新的版本中,会直接提示时间步长过大
WRF安装和运行的技术教程

问题4 运行wrf.exe出错:the domain size is too small for this many processors, or the decomposition aspect ratio is poor.
解决 使用的并行数太多,减少一些
WRF安装和运行的技术教程

问题5 运行wrf.exe出错:not enough eta levels to reach p_top
解决 模式层数太少,请增大e_vert值
WRF安装和运行的技术教程

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
WRF安装和运行的技术教程

NCL和Python绘制的云南地区ERA5的2m温度分布

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安装和运行的技术教程
此外WRF Domain Wizard还有网页版,更加便捷,如果只想要一个namelist.wps,而不想处理整个WPS,用网页版就足够了
网页版地址:https://jiririchter.github.io/WRFDomainWizard/
WRF安装和运行的技术教程

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 电脑黑客技术新手入门,自学黑客技术入门教程

    最近经常有小伙伴联系我说要学黑客技术,当然目的各种各样,有的就是觉得黑客很酷,单纯想要学技术,还有的就是想找人帮忙攻击赌博网站或者监听别人的电话(以女朋友的电话居多),对于想要单纯学技术的朋友我很欢迎他们问我问题,但对于那些想做违法事情的人我

    2024年02月10日
    浏览(45)
  • 【云计算学习教程】云计算虚拟化技术和容器技术详解_云计算虚拟化技术与容器技术

    这跟交通网络很相似,连接两个城市的交通网络具备的第一个功能就是汽车从一个城市到达另一个城市;第二个功能是控制到底走哪条线路最好。前者就是由公路组成的交通网络,后者就是交通控制系统。 下面我们再来看看传统的网络设备(比如一台路由器)的逻辑分层结构

    2024年04月22日
    浏览(56)
  • 区块链技术入门教程

    区块链是一项令人兴奋和有前途的技术,你也许看到过这些频繁在社交媒体、新闻频道上冒出的新名词:智能合约、代币(通证)、Web3、DeFi、DAO 组织。 如果你还不是很明白他们的意思,这份免费区块链基础教程就是为你(小白们)准备的。 接下是教程页面截图: 这份教程

    2024年02月09日
    浏览(39)
  • 【日志技术】附Logback入门教程

    什么是日志?其实可以通过下面几个问题来了解的。 系统系统能记住某些数据被谁操作,比如被谁删除了? 想分析用户浏览系统的具体情况,比如挖掘用户的具体喜好? 当系统在开发中或者上线后出现了Bug,崩溃了,该通过什么去分析,定位Bug? 而日志就可以帮我们解决以

    2024年02月05日
    浏览(37)
  • ArcGIS、ENVI、InVEST、FRAGSTATS技术教程

    专题一 空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 专题二 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化:地图符号与注记 2.4 研究区示意图制作

    2024年02月13日
    浏览(41)
  • 全流程R语言Meta分析核心技术教程

    详情点击链接:全流程R语言Meta分析核心技术教程 一, Meta分析的选题与检索 1、Meta分析的选题与文献检索 1)什么是Meta分析? 2)Meta分析的选题策略 3)精确检索策略,如何检索全、检索准 4)文献的管理与清洗,如何制定文献纳入排除标准 5)文献数据获取技巧,研究课题探索及科

    2024年02月11日
    浏览(40)
  • 学习区块链经典教程:区块链技术与应用

    我的新书 《Android App开发入门与实战》 已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 本课程主要讲解区块链的基本概念和实现原理,面向具有计算机相关的基础知识,对区块链技术和应用感兴趣的同学。通过这门课的学习,能够掌握比特币、以太坊等区块链

    2024年02月12日
    浏览(34)
  • RabbitMQ系列教程消息中间件技术精讲

    作者:禅与计算机程序设计艺术 消息中间件(Message Queue,MQ)是一种分布式应用间通信的组件。它可以在不同的系统之间传递消息、数据或指令。在现代IT架构中,越来越多的应用需要相互通信,所以出现了消息队列的概念。RabbitMQ是一个开源的AMQP实现,是一个可靠、可扩展

    2024年02月06日
    浏览(43)
  • 基于R语言lavaan结构方程模型(SEM)技术教程

    原文链接:基于R语言lavaan结构方程模型(SEM)技术教程 https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==mid=2247596681idx=4sn=08753dd4d3e7bc492d750c0f06bba1b2chksm=fa823b6ecdf5b278ca0b94213391b5a222d1776743609cd3d14bfbddf2623795f0a8edadf4e6token=1464653739lang=zh_CN#rd 前沿  结构方程模型(Sructural Equation Modeling,SEM)是分析

    2024年04月14日
    浏览(34)
  • kafka到mysql技术选型,jdk视频教程

    1、什么是B/S架构?什么是C/S架构 2、Java都有哪些开发平台? 3、什么是JDK?什么是JRE? 4、Java语言有哪些特点 5、面向对象和面向过程的区别 6、什么是数据结构? 7、Java的数据结构有哪些? 8、什么是OOP? 9、类与对象的关系? 10、Java中有几种数据类型 11、标识符的命名规则。

    2024年03月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包