编译和安装

操作步骤

  1. 使用PuTTY工具,以root用户登录服务器。
  2. 执行以下命令创建主程序安装目录。

    mkdir -p /path/to/FVCOM

  3. 执行以下命令复制安装包至主程序安装目录。

    cp fvcom-4.1.tar.gz /path/to/FVCOM

  4. 执行以下命令进入主程序安装目录。

    cd /path/to/FVCOM

  5. 执行以下命令解压安装包。

    tar -xvf fvcom-4.1.tar.gz

  6. 执行以下命令配置相关文件。

    1. 复制“make.inc_example”文件为“make.inc”
      cp Examples/Estuary/make.inc_example FVCOM_source/make.inc
    2. 创建“make.inc”文件软链接。
      ln -sf FVCOM_source/make.inc ./
    3. 编辑“make.inc”文件。
      1. 打开“make.inc”文件。
        vi make.inc
      2. 按“i”进入编辑模式,修改以下内容。
        第51行:
        TOPDIR = /path/to/FVCOM/FVCOM4.1/FVCOM_source
        第79、80行:
        LIBDIR = -L$(INSTALLDIR)/lib -L../METIS_source/metis -L./libs/julian
        INCDIR = -I$(INSTALLDIR)/include -I../METIS_source/metis -I./libs/julian
        第97行:
        IOLIBS = -L/path/to/NETCDF/lib -L/path/to/HDF5/lib -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz -lcurl -lm
        第98行:
        IOINCS = -I/path/to/NETCDF/include -I/path/to/HDF5/include
        注释掉并添加以下内容:
        #  Intel/MPI Compiler Definitions (SMAST)      
        #--------------------------------------------------------------------------
        #         CPP      = /usr/bin/cpp
        #         COMPILER = -DIFORT
        #         CC       = mpicc
        #         CXX      = mpicxx
        #         CFLAGS   = -O3
        #         FC       = mpif90
        #         DEBFLGS  = -check all traceback
        # Use 'OPT = -O0 -g'  for fast compile to test the make
        # Use 'OPT = -xP' for fast run on em64t (Hydra and Guppy)
        # Use 'OPT = -xN' for fast run on ia32 (Salmon and Minke)
        #         OPT      = -O0 –g
        #         OPT      = -axN –xN
        #         OPT      = -O3
         
        #  gfortran defs
        #--------------------------------------------------------------------------
                  CPP      = /usr/bin/cpp
                  COMPILER = -DGFORTRAN
                  CC       = mpicc
                  CXX      = mpicxx
                  FC       = mpif90
                  DEBFLGS  = 
                  OPT      = -O3 -ffixed-line-length-none -ffree-form -ffree-line-length-none
                  CLIB     =
      3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  7. 执行以下命令创建编译环境变量文件。

    1. 创建环境变量文件。
      1. 创建环境变量文件。
        vi env-fvcom.sh
      2. 按“i”进入编辑模式,添加如下内容。
        export GCC_HOME=/path/to/GNU
        export PATH=$GCC_HOME/bin:$PATH
        export LD_LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64:$LD_LIBRARY_PATH
        export MPI_HOME=/path/to/OPENMPI
        export PATH=$MPI_HOME/bin:$PATH
        export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH
        export HDF5=/path/to/HDF5
        export PATH=$HDF5/bin:$PATH
        export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH
        export NETCDF=/path/to/NETCDF
        export PATH=$NETCDF/bin:$PATH
        export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH
      3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    2. 加载环境变量。
      source env-fvcom.sh

  8. 执行以下命令编译METIS库。

    1. 进入METIS安装路径。
      cd ./METIS_source
    2. 解压METIS安装包。
      tar -zxvf metis.tgz
    3. “metis-4.0.patch”补丁文件复制至当前目录。
      cp /path/to/METIS/metis-4.0.patch ./
    4. 进入“metis”目录并运行补丁文件。
      cd metis
      patch -p2 < ../metis-4.0.patch
    5. 创建相应目录。
      mkdir -p /path/to/FVCOM/FVCOM4.1/FVCOM_source/libs/install/lib
      mkdir -p /path/to/FVCOM/FVCOM4.1/FVCOM_source/libs/install/include
      mkdir -p /path/to/FVCOM/FVCOM4.1/FVCOM_source/libs/install/bin
    6. 编译安装METIS库。
      make -j
      make install

  9. 执行以下命令编译julian库。

    1. 进入julian安装路径。
      cd ../../FVCOM_source/libs
    2. 解压julian.tgz安装包。
      tar -zxvf julian.tgz
    3. 进入解压后路径。
      cd julian
    4. 编译安装。
      make -j
      make install

  10. 执行以下命令编译安装FVCOM主程序。

    1. 进入FVCOM安装路径。
      cd  /path/to/FVCOM/FVCOM4.1/FVCOM_source
    2. 编辑“mod_newinp.F”文件。
      1. 打开“mod_newinp.F”文件。
        vi mod_newinp.F
      2. 按“i”进入编辑模式,修改如下内容。
        第一个“contains”语句添加如下内容:
        !----------------------------------------
        ! functions
        !----------------------------------------
        
        contains
          Character( Len = 256 ) Function N_Fmt( c , n )
            Character( Len = * ) , Intent( IN ) :: c
            Integer , Intent( IN ) :: n
            integer :: i , j
            character( len = 16 ) :: cn
            i = index( c , '<' )
            j = index( c , '>' )
            write( cn , '(g0)' ) n
            N_Fmt = c(:i-1) // Trim(adjustL(cn)) // c(j+1:)
          End Function N_Fmt

        第352行:

        修改前:
        write(*,'(A20,<size>F10.4)')trim(argname)//': ',fval(1:SIZE)
        修改后:
        write(*,N_Fmt('(A20,<size>F10.4)',SIZE))trim(argname)//': ',fval(1:SIZE)

        第421行:

        修改前:
        write(*,'(A20,<size>I10)')trim(argname)//': ',ival(1:SIZE)
        修改后:
        write(*,N_Fmt('(A20,<size>I10)',SIZE))trim(argname)//': ',ival(1:SIZE)

        第494行:

        修改前:
        write(*,'(A20,<size>L10)')trim(argname)//': ',cval(1:SIZE)
        修改后:
        write(*,N_Fmt('(A20,<size>L10)',SIZE))trim(argname)//': ',cval(1:SIZE)

        第567行:

        修改前:
        write(*,'(A20,<size>A10)')trim(argname)//': ',sval(1:SIZE)
        修改后:
        write(*,N_Fmt('(A20,<size>A10)',SIZE))trim(argname)//': ',sval(1:SIZE)
      3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    3. 分别修改“mod_scal.F”“internal_step.F”“adv_t.F”“adv_s.F”文件,对文件中以“IF(BACKWARD_ADVECTION”开头的语句进行相应修改,修改“==”“.eqv.”,修改“/=”“.neqv”.。
      sed -i 's/\/=\.TRUE\./\.neqv\.\.TRUE\./g' mod_scal.F
      sed -i 's/==\.TRUE/\.eqv\.\.TRUE/g' internal_step.F
      sed -i 's/==\.FALSE\./\.eqv\.\.FALSE\./g' adv_t.F
      sed -i 's/==\.FALSE\./\.eqv\.\.FALSE\./g' adv_s.F
    4. 编译安装主程序。
      make

      安装成功后,可使用ll命令在当前目录查看生成的可执行文件“fvcom”