编译和安装

安装I/O API

  1. 使用PuTTY工具,以root用户登录服务器。
  2. 执行以下命令使SMOKE安装运行在csh下。

    csh

  3. 执行以下命令设置环境变量。

    setenv SMK_HOME /path/to/SMOKE
    setenv LD_LIBRARY_PATH /path/to/BISHENG/bisheng-1.3.1/lib:/path/to/HMPI/hmpi-1.0.2/ompi/lib
    setenv PATH /path/to/HMPI/hmpi-1.0.2/hmpi/bin:/path/to/BISHENG/bisheng-1.3.1/bin:$PATH
    setenv LD_LIBRARY_PATH /path/to/NETCDF/lib:$LD_LIBRARY_PATH

  4. 执行以下命令将安装包复制到安装路径下。

    cp smoke_v47.gz $SMK_HOME
    cp smoke_v47.nctox.data.tar.gz $SMK_HOME
    cp smoke_install.csh $SMK_HOME
    cp ioapi-3.2.tar.gz $SMK_HOME
    cd $SMK_HOME
    source smoke_install_v47.csh
    setenv BIN Linux2_aarch64

  5. 执行以下命令解压并重命名ioapi。

    tar -xvf ioapi-3.2-2020111.tar.gz
    mv ioapi-3.2-2020111 ioapi-3.2

  6. 执行以下命令复制配置文件。

    cd ioapi-3.2
    cp ioapi/Makeinclude.Linux2_ia64gfort ioapi/Makeinclude.Linux2_aarch64

  7. 执行以下命令修改“Makeinclude.Linux2_aarch64”配置文件。

    1. 打开“Makeinclude.Linux2_aarch64”配置文件。
      vi ioapi/Makeinclude.Linux2_aarch64
    2. 按“i”进入编辑模式,修改编译器选项(必要时可用绝对路径)。
      CC = mpicc
      CXX = mpicxx
      FC = mpif90

      注释FSFLAGS关键字对应的行,如#FSFLAGS = -save。

    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  8. 执行以下命令复制Makefile。

    cp ioapi/Makefile.nocpl ioapi/Makefile

  9. 执行以下命令复制配置文件。

    cp m3tools/Makefile.nocpl m3tools/Makefile

  10. 执行以下命令修改“Makefile”配置文件。

    1. 打开“Makefile”配置文件。
      vi m3tools/Makefile
    2. 按“i”进入编辑模式,修改如下内容。
      LIBS = -L${OBJDIR} -lioapi -L/path/to/NETCDF/lib -lnetcdff –lnetcdf -L/path/to/HDF5/lib -lhdf5_hl -lhdf5 -lz $(OMPLIBS) $(ARCHLIB) $(ARCHLIBS)
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  11. 执行以下命令复制配置文件。

    cp Makefile.template Makefile

  12. 执行以下命令编辑配置文件。

    1. 打开配置文件。
      vi Makefile
    2. 按“i”进入编辑模式。
      修改如下内容并取消注释(若出现路径问题可以检查BASEDIR下的路径是否正确)。
      BIN = Linux2_aarch64
      BASEDIR = ${PWD}
      INSTALL = ${HOME}
      LIBINST = $(INSTALL)/$(BIN)
      BININST = $(INSTALL)/$(BIN)
      CPLMODE = nocpl
      IOAPIDEFS = "-DIOAPI_NCF4"

      修改NCFLIBS项:

      NCFLIBS = -L/path/to/NETCDF/lib -lnetcdff -lnetcdf -L/path/to/HDF5/lib -lhdf5_hl -lhdf5 -lz
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  13. 执行以下命令编译I/O API。

    make BIN=Linux2_aarch64

安装SMOKE

  1. 使用PuTTY工具,以root用户登录服务器。
  2. 执行以下命令进入“$SMK_HOME/subsys/smoke/assigns/”目录。

    cd $SMK_HOME/subsys/smoke/assigns/

  3. 执行以下命令修改“ASSIGNS.nctox.cmaq.cb05_soa.us12-nc”文件。

    1. 打开“ASSIGNS.nctox.cmaq.cb05_soa.us12-nc”文件。
      vi ASSIGNS.nctox.cmaq.cb05_soa.us12-nc
    2. 按“i”进入编辑模式,修改第25行内容。
      setenv BIN Linux2_aarch64

      执行3.a之后,按“Esc”键,输入“:set nu”,按“Enter”即可显示出行号。

    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  4. 执行以下命令修改“Makeinclude”文件。

    1. 打开“Makeinclude”文件。
      cd $SMK_HOME/subsys/smoke/src
      vi Makeinclude
    2. 按“i”进入编辑模式,修改如下内容(链接库若报错可以加上库所在的绝对路径,格式为-L/绝对路径)。
      INSTDIR = ${OBJDIR}/${BIN}
      #EFLAG = -extend-source 132 -zero
      EFLAG = -ffixed-line-length-132 -fno-backslash
      IOLIB = -L$(IOBIN) -lioapi -L/path/to/NETCDF/lib -lnetcdf -lnetcdff
      IOBASE  = ${SMK_HOME}/ ioapi-3.2
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  5. 执行以下命令修改“biog/normbeis361.f”文件。

    1. 打开“biog/normbeis361.f”文件。
      vi biog/normbeis361.f
    2. 按“i”进入编辑模式,修改第161行内容,将IS_AG、IS_TAG两个函数类型由“INTEGER”改为“LOGICAL”。

      执行5.a之后,按“Esc”键,输入“:set nu”,按“Enter”即可显示出行号。

    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  6. 执行以下命令修改“emutil/gentpro.f”文件。

    1. 打开“emutil/gentpro.f”文件。
      vi emutil/gentpro.f
    2. 按“i”进入编辑模式,修改第1663和1695行的代码。
      1663 (( PROF_MON( S,NP )), NP = 1,12 )
      1695 ( ( PROF_DAY( S,NP ) ), NP = 1,31 )

      执行6.a之后,按“Esc”键,输入“:set nu”,按“Enter”即可显示出行号。

    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  7. 执行以下命令创建目录。

    mkdir ${SMK_HOME}/subsys/smoke/${BIN}

  8. 执行以下命令运行编译。

    source $SMK_HOME/subsys/smoke/assigns/ASSIGNS.nctox.cmaq.cb05_soa.us12-nc
    make