编译和安装

操作步骤

  1. 使用PuTTY工具,以root用户登录服务器。
  2. 执行以下命令解压WRF安装包。

    cd /path/to/WRF
    tar -xvf WRF-3.8.1.tar.gz

  3. 执行以下命令进入WRF源码目录。

    cd WRF-3.8.1

  4. 执行以下命令修改“arch/configure_new.defaults”文件。

    1. 打开“arch/configure_new.defaults”文件。
      vim arch/configure_new.defaults
    2. 按“i”进入编辑模式,在第1856行之前添加如下内容。
      ################################################## #########
      #ARCH   Linux   aarch64,gnu OpenMPI #serial smpar dmpar dm+sm
      DESCRIPTION     =       GNU ($SFC/$SCC)
      DMPARALLEL      =        1
      OMPCPP          =        -D_OPENMP
      OMP             =        -fopenmp
      OMPCC           =        -fopenmp
      SFC             =       gfortran
      SCC             =       gcc
      CCOMP           =       gcc
      DM_FC           =       mpif90 -f90=$(SFC)
      DM_CC           =       mpicc -cc=$(SCC) -DMPI2_SUPPORT
      FC              =       CONFIGURE_FC
      CC              =       CONFIGURE_CC
      LD              =       $(FC)
      RWORDSIZE       =       CONFIGURE_RWORDSIZE
      PROMOTION       =       #-fdefault-real-8
      ARCH_LOCAL      =       -DNONSTANDARD_SYSTEM_SUBR  -DWRF_USE_CLM
      CFLAGS_LOCAL    =       -w -O3 -c -march=armv8.2-a -L/path/to/MATH/lib -lmathlib
      LDFLAGS_LOCAL   =
      CPLUSPLUSLIB    =
      ESMF_LDFLAG     =      $(CPLUSPLUSLIB)
      FCOPTIM         =       -O3 -ftree-vectorize -funroll-loops -march=armv8.2-a -L/path/to/MATH/lib -lmathlib
      FCREDUCEDOPT    =       $(FCOPTIM)
      FCNOOPT         =       -O0
      FCDEBUG         =       # -g $(FCNOOPT)  # -fbacktrace -ggdb-fcheck=bounds,do,mem,pointer -ffpe-trap=invalid,zero,overflow
      FORMAT_FIXED    =       -ffixed-form
      FORMAT_FREE     =       -ffree-form -ffree-line-length-none
      FCSUFFIX        =
      BYTESWAPIO      =       -fconvert=big-endian -frecord-marker=4
      FCBASEOPTS_NO_G =       -w $(FORMAT_FREE) $(BYTESWAPIO)
      FCBASEOPTS      =       $(FCBASEOPTS_NO_G) $(FCDEBUG)
      MODULE_SRCH_FLAG =
      TRADFLAG        =      -traditional
      CPP             =      /lib/cpp -P
      AR              =      ar
      ARFLAGS         =      ru
      M4              =      m4 -G
      RANLIB          =      ranlib
      RLFLAGS         =
      CC_TOOLS        =      $(SCC)
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  5. 执行以下命令设置编译前环境。

    export WRFIO_NCD_LARGE_FILE_SUPPORT=1
    export NETCDF=/path/to/NETCDF
    export HDF5=/path/to/HDF5
    export PNETCDF=/path/to/PNETCDF
    export CPPFLAGS="-I$HDF5/include -I$PNETCDF/include -I$NETCDF/include"
    export LDFLAGS="-L$HDF5/lib -L$PNETCDF/lib -L$NETCDF/lib -lnetcdf -lnetcdff -lpnetcdf -lhdf5_hl -lhdf5 -lz"

  6. 执行以下命令安装tirpc。

    yum install libtirpc-devel
    export C_INCLUDE_PATH=/usr/include/tirpc
    export CPLUS_INCLUDE_PATH=/usr/include/tirpc

  7. 执行以下命令开始生成配置文件。

    echo 4 | ./configure

  8. 执行以下命令修改“./configure.wrf”文件。

    1. 打开“./configure.wrf”文件。
      vim ./configure.wrf
    2. 按“i”进入编辑模式,找到"LIB_EXTERNAL",大约在第209行,在末尾加上"-ltirpc"。
       LIB_EXTERNAL    = \
                            -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf -L/path/to/NETCDF/lib -lnetcdff -lnetcdf  -L$(WRF_SRC_ROOT_DIR)/external/io_pnetcdf -lwrfio_pnf -L/path/to/PNETCDF/lib -lpnetcdf   -L/path/to/HDF5/lib -lhdf5_fortran -lhdf5 -lm -lz -ltirpc
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  9. 执行以下命令修改“./phys/module_cu_g3.F”文件。

    1. 打开“./phys/module_cu_g3.F”文件。
      vim ./phys/module_cu_g3.F
    2. 按“i”进入编辑模式,修改第3125行的内容。
      integer,  dimension (33) :: seed
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

    在WRF 4.1.2版本安装过程中,本步骤可省略。

  10. 执行以下命令加载编译器和OpenMPI环境变量。

    export PATH=/path/to/GNU/bin:/path/to/OPENMPI/bin:$PATH
    export LD_LIBRARY_PATH=/path/to/GNU/lib64:/path/to/OPENMPI/lib:$LD_LIBRARY_PATH

    如果此前已经声明过编译器和OpenMPI的环境变量,本步骤可省略。

  11. 执行以下命令进行编译安装。

    ./compile -j 16 em_real 2>&1 | tee -a compile.log

    如果编译中出现"Fatal Error: Cannot open module file ‘module_initialize_real.mod’ for reading at (1): No such file or directory",但module_initialize_real.mod文件确实已经在main目录下生成了,再次执行命令./compile -j 16 em_real 2>&1 | tee -a compile.log即可完成编译。

    编译结束后回显如下图。

  12. 执行以下命令验证是否安装成功。

    ls main

    回显如下图,生成了“wrf.exe”可执行文件,表明安装成功,主程序安装时间在10分钟左右。