笔者在安装构建NEMO(Nucleus forEuropeanModelling of theOcean)的时候苦于资料太少,花费了不少时间和精力,踩了不少坑。因此笔者将安装过程进行总结,以供大家参考。
1. 系统信息
OS信息:Linux black 5.15.0-89-generic #99-Ubuntu x86_64 GNU/Linux
安装路径:软件安装包放在: /home/czhang/softwarepkg
相关依赖软件安装在:/home/czhang/local
NEMO安装在:/home/czhang/NEMO
XIOS安装在:/home/czhang/xios
各软件安装版本如下:
curl-7.81.0
hdf5-1.14.3
mpich-4.2.0
netcdf-c-4.7.4
netcdf-fortran-4.5.3
pnetcdf-1.12.3
szip-2.1.1
zlib-1.2.11
2. 安装MPICH
在/home/czhang/local下创建mpich文件夹
$ tar -zxvf mpich-4.2.0.tar.gz
$ cd mpich-4.2.0
$ ./configure --prefix=/home/czhang/local/mpich
$ make
$ make install
安装后需要将mpich的相应路径添加到环境变量当中。
export LD_LIBRARY_PATH=/home/czhang/local/mpich/lib
export PATH=$PATH:/home/czhang/local/mpich/bin
也可以在.bashrc中,添加随后 source ~/.bashrc
3. 安装NetCDF
在/home/czhang/local下创建netcdf文件夹。安装的每一个依赖软件均需在其源代码目录下进行
(1)安装zlib
$ tar -zxvf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure --prefix=/home/czhang/local/netcdf
$ make
$ make install
(2)安装szip
$ tar -zxvf szip-2.1.1.tar.gz
$ cd szip-2.1.1
$ ./configure --prefix=/home/czhang/local/netcdf
$ make
$ make install
(3)安装curl
$ tar -zxvf curl-7.81.0.tar.gz
$ cd curl-7.81.0
$ ./configure --prefix=/home/czhang/local/netcdf -with-openssl # 这里要看自己系统上用的什么ssl
$ make
$ make install
(4)安装HDF5
$ tar -zxvf hdf5-1.14.3.tar.gz
$ cd hdf5-1.14.3
$ export CPPFLAGS=-I /home/czhang/local/netcdf/include
$ export LDFLAGS=-L /home/czhang/local/netcdf/lib
$ export LD_LIBRARY_PATH=/home/czhang/local/netcdf/lib
$ ./configure --prefix=/home/czhang/local/netcdf --enable-parallel --enable-fortran
$ make
$ make install
(5)安装PNetCDF
在/home/czhang/local下创建pnetcdf文件夹,pnetcdf安装在该文件夹中
$ tar -zxvf pnetcdf-1.12.3.tar.gz
$ cd pnetcdf-1.12.3
$ ./configure --prefix=/home/czhang/local/pnetcdf --enable-fortran --enable-large-file-test --enable-shared
$ make
$ make install
(6)安装NetCDF-C
$ tar -zxvf netcdf-c-4.7.4.tar.gz
$ cd netcdf-c-4.7.4
$ ./configure --prefix=/home/czhang/local/netcdf --enable-pnetcdf --enable-large-file-tests --enable-largefile --enable-parallel-tests --enable-shared --with-pic --disable-doxygen --enable-netcdf-4
$ make
$ make install
成功后会有 congratulations
(7)安装NetCDF-Fortran
$ tar -zxvf netcdf-fortran-4.5.3.tar.gz # 注意:该版本需要netcdf-c在4.7.4及以上
$ cd netcdf-fortran-4.5.3
$ export LIBS=-lnetcdf
$ ./configure --prefix=/home/czhang/local/netcdf --disable-static --enable-shared --with-pic --enable-parallel-tests --enable-large-file-tests --enable-largefile
$ make
$ make install
成功后会有 congratulations
安装完成后需要配置环境变量,笔者在 .bashrc 文件添加的内容如下:
export DIR=/home/czhang/local
export NETCDF=$DIR/netcdf
export MPI=$DIR/mpich
export PNETCDF=$DIR/pnetcdf
export CPPFLAGS="-I$MPI/include -I$NETCDF/include -I$PNETCDF/include"
export LDFLAGS="$LDFLAGS -L$NETCDF/lib -L$MPI/lib -L$PNETCDF/lib -I$NETCDF/include"
export FCFLAGS="-fallow-argument-mismatch"
export FFLAGS="-I$MPI/include -L$MPI/lib -I$NETCDF/include -fallow-argument-mismatch"
export NCDF_F_HOME=$NETCDF
export NCDF_C_HOME=$NETCDF
export HDF5_HOME=$NETCDF
export LD_LIBRARY_PATH=$MPI/lib:$NETCDF/lib:$PNETCDF/lib:$LD_LIBRARY_PATH
export PATH=$PATH:$MPI/bin:$NETCDF/bin:$NETCDF/include
export CC=mpicc #gcc
export CXX=mpicxx #g++
export FC=mpif90 #gfortran
export FCFLAGS="-m64 $FCFLAGS"
export F77=mpif77 #gfortran
export FFLAGS="-m64 $FFLAGS"
配置好了之后,检查一下版本和路径
4. 安装XIOS
提取并解析XIOS源代码,并将安装文件夹命名为xios。
svn co http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS2/trunk xios
在 xios/arch 目录下找到相应的架构配置文件并修改。笔者这里是用的GCC_LINUX,需要修改 .path, .env, .fcm 文件。
# arch-GCC_LINUX.env
export HDF5_INC_DIR=$HOME/local/netcdf/include #根据自己情况修改
export HDF5_LIB_DIR=$HOME/local/netcdf/lib #根据自己情况修改
export NETCDF_INC_DIR=$HOME/local/netcdf/include #根据自己情况修改
export NETCDF_LIB_DIR=$HOME/local/netcdf/lib #根据自己情况修改
export BOOST_INC_DIR=$HOME/boost
export BOOST_LIB_DIR=$HOME/boost
具体路径需要根据自己的安装路径做相应修改。
# arch-GCC_LINUX.fcm
################################################################################
################### Projet XIOS ###################
################################################################################
%CCOMPILER /home/czhang/local/mpich/bin/mpicc #根据自己情况修改
%FCOMPILER /home/czhang/local/mpich/bin/mpif90 #根据自己情况修改
%LINKER /home/czhang/local/mpich/bin/mpif90 #根据自己情况修改
%BASE_CFLAGS -w -std=c++11 -D__XIOS_EXCEPTION -D_GLIBCXX_USE_CXX11_ABI=0 -ffree-line-length-none #这个标志需要在原基础上添加一些东西
%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS
%DEV_CFLAGS -g -O2
%DEBUG_CFLAGS -g
%BASE_FFLAGS -D__NONE__
%PROD_FFLAGS -O3
%DEV_FFLAGS -g -O2
%DEBUG_FFLAGS -g
%BASE_INC -D__NONE__
%BASE_LD -lstdc++
%CPP cpp
%FPP cpp -P
%MAKE make
具体路径需要根据自己的安装路径做相应修改,FLAGS按照上述修改即可。
# arch-GCC_LINUX.path
NETCDF_INCDIR="-I $NETCDF_INC_DIR"
NETCDF_LIBDIR="-L $NETCDF_LIB_DIR"
NETCDF_LIB="-lnetcdff -lnetcdf"
MPI_INCDIR=""
MPI_LIBDIR=""
MPI_LIB=""
HDF5_INCDIR="-I $HDF5_INC_DIR"
HDF5_LIBDIR="-L $HDF5_LIB_DIR"
HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz"
以上只展示到了 HDF5 的设置,后面的不用改变。去除 lcurl 标志即可。
配置完成后就可以在xios源代码目录下进行编译了。输入命令:
./make_xios --full --arch GCC_LINUX -j 160 |& tee compile_log.txt
选用GCC_LINUX架构配置进行编译。-j 表示使用多少个线程进行编译,tee compile_log.txt 表示将编译产生的信息存储在txt文件中,这是为了出问题时方便查看。
XIOS编译的时间很长,同时编译完成后不会有成功或恭喜信息,看到 finished 并且没有 error 报错就说明完成了。
5. 安装并编译NEMO
创建NEMO文件夹,并将压缩包解压。编译NEMO之前同样需要修改架构配置文件。笔者这里使用的是linux_gfortran架构
在arch文件夹下找到 arch-linux_gfortran.fcm文件并修改
%NCDF_HOME /home/czhang/local/netcdf
%HDF5_HOME /home/czhang/local/netcdf
%NCDF_C_HOME /home/czhang/local/netcdf
%NCDF_F_HOME /home/czhang/local/netcdf
%XIOS_HOME /home/czhang/xios
%NCDF_INC -I%NCDF_F_HOME/include -I%NCDF_C_HOME/include -I%HDF5_HOME/include
%NCDF_LIB -L%NCDF_F_HOME/lib -lnetcdff -L%NCDF_C_HOME/lib -lnetcdf -lstdc++
%XIOS_INC -I%XIOS_HOME/inc
%XIOS_LIB -L%XIOS_HOME/lib -lxios -lstdc++
%OASIS_INC -I%OASIS_HOME/build/lib/mct -I%OASIS_HOME/build/lib/psmile.MPI1
%OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip
%CPP cpp -Dkey_nosignedzero
%FC mpif90 -c -cpp
%FCFLAGS -I/home/czhang/local/netcdf/include $(FCFLAGS) -fdefault-real-8 -O3 -funroll-all-loops -fcray-pointer -ffree-line-length-none -fallow-argument-mismatch -cpp
%FFLAGS %FCFLAGS
%LD mpif90
%LDFLAGS
%FPPFLAGS -P -C -traditional
%AR ar
%ARFLAGS rs
%MK make
%USER_INC %XIOS_INC %NCDF_INC
%USER_LIB %XIOS_LIB %NCDF_LIB
%CC cc
%CFLAGS -O0
在该配置文件中需要指明netcdf,hdf5,xios的路径
之后就可以进行NEMO 的编译。在源代码根目录进行:
./makenemo -m linux_gfortran -r GYRE_PISCES -n test1
之后就可以在cfgs文件夹下看到test1文件夹,其中包含 BLD, EXP00, MY_SRC, WORK, cpp_test1.fcm,在EXP00文件夹下有nemo执行程序
6. 运行NEMO
在EXP00文件夹下,有一些初始化的输入文件(namelist,用于输入的*.xml文件等),如果需要使用其他输入文件需要将他们放在这个文件夹中
$ cd cfgs/test1/EXP00/ # 进入EXP00文件夹中
$ mpirun -n $NPROCS ./nemo # $NPROCS 是指要运行的线程数 , mpirun是自己系统的MPI的封装接口
7. 对于NEMO的一些配置
7.1 更改输入输出文件路径
在namelist_ref文件中
cn_ocerst_indir = "./input" ! directory from which to read input ocean restarts
cn_ocerst_outdir = "./output_ocean_restart" ! directory in which to write output ocean restarts
在namelist_top_ref文件中
cn_trcrst_outdir = "./output_restart_trcrst" ! directory to which to write output passive tracer restarts
在file_def_nemo.xml文件中
<file_definition type="multiple_file" name="output_time/@expname@_@freq@_@startdate@_@enddate@" sync_freq="1mo" min_digits="4">
mesh_mask文件 和 ocean_output文件无法更改输出目录,除非修改NEMO源代码
7.2 部分参数的作用
! 在namelist_cfg文件中,调整分辨率
! jpiglo, jpjglo参数不应该出现在该文件中,不用调整
nn_GYRE = 25 ! GYRE resolution [1/degrees] 。分辨率(度)的倒数
ln_bench = .true. ! ! =T benchmark with gyre: the gridsize is kept constant。将NEMO用于作为Benchmark
jpkglo = 31 ! number of model levels。模拟时的模型层数或深度
rn_Dt = 7200. ! time step for the dynamics。设置模拟的时间步长
! 在namelist_ref文件中,调整用于MPI并行计算的网格点,将两个参数设置为0使得系统自动调整网格
jpni = 0 ! number of processors following i (set automatically if < 1), see also ln_listonly = T
jpnj = 0 ! number of processors following j (set automatically if < 1), see also ln_listonly = T
模型运行的信息在 ocean.output 文件中,通过该文件展示的信息来判断应该用多少MPI进程
References: