天气研究和预报 (WRF) 模型是一种中尺度数值天气预报系统,在全球范围内用于业务预报和研究目的。
从WRF4.4开始,wrf的代码编译方式有了较大的改变,开始使用GIT命令进行源源码同步,本例使用英特尔编译器2020U4安装 WRF 4.4 模型。
我想这个文档可能对于想要在 HPC 环境中从头开始安装 WRF 的人会有所帮助。使用intel编译器编译出来的程序,效率要高于gcc和gfortran编译出的程序,计算同样的domain会比较节约时间,提高程序性能。
安装环境物理主机:3台dell服务器,一台控制器+2台计算节点
共享存储:使用一台存储服务器共享NFS的方式,为了确保网络性能,采用Infiniband 100G互联
操作系统: CentOS 7.9 x86-64
编译器:intel parallel studio xe2020 u4 for Linux
需要的类库
- zlib
- libpng (if required)
- HDF5
- NetCDF
- JasPer
建议以上的类库都提前安装好,可以使用yum的epel的依赖库安装除了NETCDF之外的程序,如果你使用了yum安装方法,就需要跳过编译安装的相关说明,并且你要很清楚export的环境变量也会随之发生改变,建议都用编译的方式进行安装,按照我的方式进行。NETCDF是不可以用yum方式安装的。目前epel提供的安装包是4.3.1,即使安装正常,跟wrf4.4一起编译时会发生netcdf.inc找不到的问题:
Not found /home/wrf/wrf_libs_intel/include/netcdf.inc
设置intel编译器的环境变量
export CC=icc
export FC=ifort
export F90=ifort
export CXX=icpc
1. 安装zlib
mkdir wrf_install_intel
cd wrf_install_intel/
wget https://zlib.net/zlib-1.2.12.tar.gz
tar xvf zlib-1.2.11.tar.gz
cd zlib-1.2.12/
./configure --prefix=/home/wrf/wrf_libs_intel/
make
make install
2. 安装 libpng
wget https://onboardcloud.dl.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.gz
tar xvf libpng-1.6.37.tar.gz
cd libpng-1.6.37/
./configure --prefix=/home/wrf/wrf_libs_intel/
make
make install
3. 安装HDF5
cd ../
wget https://www.hdfgroup.org/package/hdf5-1-12-1-tar-gz/?wpdmdl=15727&refresh=629dc0d61e9841654505686 -O hdf5.1.12.1.tar.gz
tar xvf hdf5.1.12.1.tar.gz
cd hdf5*
./configure --prefix=/home/wrf/wrf_libs_intel/ --with-zlib=/home/wrf/wrf_libs_intel/ --enable-fortran
make
make install
4.安装NetCDF
mkdir wrf_install_intel cd wrf_install_intel/ wget https://zlib.net/zlib-1.2.12.tar.gz tar xvf zlib-1.2.11.tar.gz cd zlib-1.2.12/ ./configure --prefix=/home/wrf/wrf_libs_intel/ make make install
2. 安装 libpng
wget https://onboardcloud.dl.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.gz
tar xvf libpng-1.6.37.tar.gz
cd libpng-1.6.37/
./configure --prefix=/home/wrf/wrf_libs_intel/
make
make install
3. 安装HDF5
cd ../
wget https://www.hdfgroup.org/package/hdf5-1-12-1-tar-gz/?wpdmdl=15727&refresh=629dc0d61e9841654505686 -O hdf5.1.12.1.tar.gz
tar xvf hdf5.1.12.1.tar.gz
cd hdf5*
./configure --prefix=/home/wrf/wrf_libs_intel/ --with-zlib=/home/wrf/wrf_libs_intel/ --enable-fortran
make
make install
4.安装NetCDF
cd ../ wget https://www.hdfgroup.org/package/hdf5-1-12-1-tar-gz/?wpdmdl=15727&refresh=629dc0d61e9841654505686 -O hdf5.1.12.1.tar.gz tar xvf hdf5.1.12.1.tar.gz cd hdf5* ./configure --prefix=/home/wrf/wrf_libs_intel/ --with-zlib=/home/wrf/wrf_libs_intel/ --enable-fortran make make install
4.安装NetCDF
NetCDF下载主页:
netCDF Downloadshttps://downloads.unidata.ucar.edu/netcdf/在netcdf4.2之前C源码和Fortran源码是打包在一起的一个文件,4.2之后要分别下载,注意我们需要C和Fortran这两个版本都编译安装才能正常工作。
cd ../ wget https://downloads.unidata.ucar.edu/netcdf-c/4.8.1/netcdf-c-4.8.1.tar.gzwget https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-c-4.8。1.tar.gz tar xvf netcdf-c-4.8.1.tar.gz cd netcdf-c-4.8.1/ export LD_LIBRARY_PATH=/home/wrf/wrf_libs_intel/lib:$LD_LIBRARY_PATH export LDFLAGS=-L/home/wrf/wrf_libs_intel/lib export CPPFLAGS=-I/home/wrf/wrf_libs_intel/include ./configure --prefix=/home/wrf/wrf_libs_intel/ make make install cd ../ wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.5.4/netcdf-fortran-4.5.4.tar.gz tar xvf netcdf-fortran-4.5.4.tar.gz cd netcdf-fortran-4.5.3/ ./configure --prefix=/home/wrf/wrf_libs_intel/ make make install
5. Installing JasPer
cd ../
wget https://www.ece.uvic.ca/~frodo/jasper/software/jasper-1.900.29.tar.gz
tar xvf jasper-1.900.29.tar.gz
./configure --prefix=/home/wrf/wrf_libs_intel/
make
make install
如果有编译错误需要使用下面的命令修复后再重新编译安装:
sed -i 's/char *optstr/const char *optstr/g' src/libjasper/jpg/jpg_dummy.c
WRF安装
环境变量
获取wrf4.4的离线安装源文件
如果有编译错误需要使用下面的命令修复后再重新编译安装:
sed -i 's/char *optstr/const char *optstr/g' src/libjasper/jpg/jpg_dummy.c
从4.4版本起wrf使用git进行在线编译和源码同步:
WRF Model Source Code (WRF, WRFDA, & WRF-Chem):
**Beginning with V4.4, submodules are obtained during compile; therefore this command is required to obtain the WRF code.**
git clone --recursive-submodules https://github.com/wrf-model/WRF
Note: If compiling without internet access, or if you check out another branch other than ‘master,’ issue the following commands while connected to the internet.
git clone https://github.com/wrf-model/WRF.git
git submodule update --init --recursive
After this, you can go offline to compile. If you need to clean the code at any point, use ‘clean -aa’ instead of ‘clean -a’.
To obtain WRF code prior to V4.4, use the following command.
git clone https://github.com/wrf-model/WRF
需要在系统中安装git,可以使用yum install -y git* 的方式安装git工具
安装GIT工具后,使用下面的离线方式获取源码
export NETCDF=/home/wrf/wrf_libs_intel/ export HDF5=/home/wrf/wrf_libs_intel/ git clone https://github.com/wrf-model/WRF.git cd WRF git submodule update --init --recursive ./configure
Output:
checking for perl5... no
checking for perl... found /usr/local/bin/perl (perl)
Will use NETCDF in dir: /home/wrf/wrf_libs_intel/
Will use HDF5 in dir: /home/wrf/wrf_libs_intel/
PHDF5 not set in environment. Will configure WRF for use without.
Will use 'time' to report timing information
If you REALLY want Grib2 output from WRF, modify the arch/Config.pl script.
Right now you are not getting the Jasper lib, from the environment, compiled into WRF.
------------------------------------------------------------------------
Please select from among the following Linux x86_64 options:
1. (serial) 2. (smpar) 3. (dmpar) 4. (dm+sm) PGI (pgf90/gcc)
5. (serial) 6. (smpar) 7. (dmpar) 8. (dm+sm) PGI (pgf90/pgcc): SGI MPT
9. (serial) 10. (smpar) 11. (dmpar) 12. (dm+sm) PGI (pgf90/gcc): PGI accelerator
13. (serial) 14. (smpar) 15. (dmpar) 16. (dm+sm) INTEL (ifort/icc)
17. (dm+sm) INTEL (ifort/icc): Xeon Phi (MIC architecture)
18. (serial) 19. (smpar) 20. (dmpar) 21. (dm+sm) INTEL (ifort/icc): Xeon (SNB with AVX mods)
22. (serial) 23. (smpar) 24. (dmpar) 25. (dm+sm) INTEL (ifort/icc): SGI MPT
26. (serial) 27. (smpar) 28. (dmpar) 29. (dm+sm) INTEL (ifort/icc): IBM POE
30. (serial) 31. (dmpar) PATHSCALE (pathf90/pathcc)
32. (serial) 33. (smpar) 34. (dmpar) 35. (dm+sm) GNU (gfortran/gcc)
36. (serial) 37. (smpar) 38. (dmpar) 39. (dm+sm) IBM (xlf90_r/cc_r)
40. (serial) 41. (smpar) 42. (dmpar) 43. (dm+sm) PGI (ftn/gcc): Cray XC CLE
44. (serial) 45. (smpar) 46. (dmpar) 47. (dm+sm) CRAY CCE (ftn $(NOOMP)/cc): Cray XE and XC
48. (serial) 49. (smpar) 50. (dmpar) 51. (dm+sm) INTEL (ftn/icc): Cray XC
52. (serial) 53. (smpar) 54. (dmpar) 55. (dm+sm) PGI (pgf90/pgcc)
56. (serial) 57. (smpar) 58. (dmpar) 59. (dm+sm) PGI (pgf90/gcc): -f90=pgf90
60. (serial) 61. (smpar) 62. (dmpar) 63. (dm+sm) PGI (pgf90/pgcc): -f90=pgf90
64. (serial) 65. (smpar) 66. (dmpar) 67. (dm+sm) INTEL (ifort/icc): HSW/BDW
68. (serial) 69. (smpar) 70. (dmpar) 71. (dm+sm) INTEL (ifort/icc): KNL MIC
72. (serial) 73. (smpar) 74. (dmpar) 75. (dm+sm) FUJITSU (frtpx/fccpx): FX10/FX100 SPARC64 IXfx/Xlfx
Enter selection [1-75] : 20
------------------------------------------------------------------------
Compile for nesting? (1=basic, 2=preset moves, 3=vortex following) [default 1]:
Configuration successful!
------------------------------------------------------------------------
testing for fseeko and fseeko64
fseeko64 is supported
------------------------------------------------------------------------
...
编辑configure.wrf
需要用vim configure.wrf修改相关配置,改为下列的样子
DM_FC = mpiifort DM_CC = mpiicc CC_TOOLS = icc #注意:CC_TOOLS需要按照上面的方式修改。否则源码中的一个standard.c无法正常编译
Compile the code
./compile -j 4 em_real 2>&1 | tee compile.log
需要耐心等待,编译时间大约40分钟左右。
---> Executables successfully built <--- -rwxrwxr-x 1 wrf wrf 40691640 Jul 30 12:35 main/ndown.exe -rwxrwxr-x 1 wrf wrf 40572760 Jul 30 12:35 main/real.exe -rwxrwxr-x 1 wrf wrf 40048888 Jul 30 12:35 main/tc.exe -rwxrwxr-x 1 wrf wrf 44609360 Jul 30 12:35 main/wrf.exe ==========================================================================
如果未显示成功编译,需要重新调整配置或参数,重新执行编译,注意:如果重新编译需要先执行./clean -aa,不要使用./clean -a,./configure之后都需要重新修改configure.wrf文件。
参考内容:
Installing WRF from scratch in an HPC using Intel Compilers - Pratiman Homepage
WRF Modeling System Download: New User Registration



