---
title: 编译和安装
description: "1. 使用PuTTY工具，以root用户登录服务器。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengfvcom_02_0009.html
sourcePath: /source/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengfvcom_02_0009.html
indexId: 8858d866a62e02d5313f49ab28c48e61bbeec2cf6d783fb178c5b769eab6074f67
---
# 编译和安装

#### 操作步骤

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. 执行以下命令配置相关文件。

  a. 复制“make.inc_example”文件为“make.inc”。

```
cp Examples/Estuary/make.inc_example FVCOM_source/make.inc
```


  b. 创建“make.inc”文件软链接。

```
ln -sf FVCOM_source/make.inc ./
```


  c. 编辑“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. 执行以下命令创建编译环境变量文件。

  a. 创建环境变量文件。

    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”保存并退出编辑。
  b. 加载环境变量。

```
s
ource env-fvcom.sh
```


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

  a. 进入METIS安装路径。

```
cd ./METIS_source
```


  b. 解压METIS安装包。

```
tar -zxvf metis.tgz
```


  c. 将“metis-4.0.patch”补丁文件复制至当前目录。

```
cp
/
path/to/METIS
/
metis-4.0.patch ./
```


  d. 进入“metis”目录并运行补丁文件。

```
cd metis
patch -p2 < ../metis-4.0.patch
```


  e. 创建相应目录。

```
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
```


  f. 编译安装METIS库。

```
make -j
make install
```


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

  a. 进入julian安装路径。

```
cd ../../FVCOM_source/libs
```


  b. 解压julian.tgz安装包。

```
tar -zxvf julian.tgz
```


  c. 进入解压后路径。

```
cd julian
```


  d. 编译安装。

```
make -j
make install
```


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

  a. 进入FVCOM安装路径。

```
cd
/path/to/FVCOM
/
FVCOM4.1/FVCOM_source
```


  b. 编辑“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”保存并退出编辑。
  c. 分别修改“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
```


  d. 编译安装主程序。

```
make
```


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