MIgcm编译安装教程
# MITgcm 安装说明
# 简介
麻省技术研究所的环流模式,模拟大尺度海洋环流。
# 下载
MITgcm_c66b.tar.gz 02-Dec-2016 00:14 115M
地址:
# 编译
# 依赖说明
编译mitgcm需要如下环境:
- intel / gnu compiler
- mpi compiler
- netcdf
- *lapack库
# 配置环境
# 1. intel / gnu compiler
我们使用系统安装好的Intel2013编译器,加载方式为:
module add Intel_compiler/13.0
# 2. mpi compiler
我们使用系统安装好的 mpich 编译器,加载方式为:
module add MPI/mpich/intel2013
# 3.netcdf
我们使用系统安装好的、与上述编译器配套的netcdf版本,加载方式为:
module add netcdf/4.4
module add hdf5/1.8.11 # 因为netcdf4默认需要hdf5
2
# 4.lapack(默认不需要)
我们使用系统安装好的lapack版本,加载方式为:
module add lapack/3.8.0
# 生成makefile
以用户的一个test_code
为例,进行说明。
(1)添加genmake2命令搜索路径
我们找到解压缩后的MITgcm_c66b/tools
文件夹,里面有一个gmake2
命令。我们将该命令所在路径添加到PATH
环境变量中。
cd MITgcm_c66b/tools # 使用cd命令进入解压缩的tools文件夹(自己找一下)
export PATH=`pwd`:$PATH # 执行export命令把当前文件夹添加到PATH环境变量中
2
提示
对于LAPACK而言,默认是开启了SKIP_LAPACK_CHECK=t
选项,跳过检查。如果想打开,需要修改genmake2
命令中的内容:
# comment this line out to enable lapack test
# SKIP_LAPACK_CHECK=t
2
然后在下面的配置文件中添加LAPACK库相关的内容。
此处我们可以忽略这个Can we create LAPACK-enabled binaries... no
的问题
(2)进入算例文件夹
cd test_code # 用户自己知道在哪
ls # 列出文件, 比如会显示: build code run 等文件夹
cd build # 进入build文件夹
2
3
(3)创建编译配置文件
我们以解压后的MITgcm_c66b/tools/build_options
目录中linux_ia32_ifort11
文件为模板,进行修改,创建适合于当前编译环境下的配置文件linux_config_th1a
,文件内容如下:
#!/bin/bash
MPI="true"
CC="mpicc"
FC="mpif77"
F90C="mpif90"
LINK="$F90C -shared-intel -no-ipo"
DEFINES='-DALLOW_USE_MPI -DALWAYS_USE_MPI -DWORDLENGTH=4 -DNML_TERMINATOR'
F90FIXEDFORMAT='-fixed -Tf'
EXTENDED_SRC_FLAG='-132'
GET_FC_VERSION="--version"
OMPFLAG='-openmp'
CPP='cpp -traditional -P'
NOOPTFLAGS='-O0 -g'
NOOPTFILES=''
PROCF='-xHost'
CFLAGS="-O3 -ip -m64 -no-offload -fno-alias -ansi-alias -override-limits $PROCF"
FFLAGS="$FFLAGS -m64 -convert big_endian -assume byterecl -mcmodel=medium -shared-intel -no-offload -fno-alias -ansi-alias -override-limits $PROCF"
F90FLAGS="$FFLAGS"
F90OPTIM=$"-O2 -align -ip -fp-model source $PROCF"
INCLUDEDIRS=''
INCLUDES=''
LIBS=''
INCLUDES='-I/vol-th/software/io_tools/netcdf/mpi/4.1.2/lib/include'
LIBS='-L/vol-th/software/io_tools/netcdf/mpi/4.1.2/lib -lnetcdff -lnetcdf'
INCLUDES="$INCLUDES -I/vol-th/software/io_tools/hdf5/mpi/1.8.11/include"
LIBS="$LIBS -L/vol-th/software/io_tools/hdf5/mpi/1.8.11/lib -lhdf5_hl -lhdf5"
LIBS="$LIBS -lpthread"
MPI_INC_DIR='/usr/local/mpi-intel2013/include'
INCLUDES="$INCLUDES -I$MPI_INC_DIR"
INCLUDEDIRS="$INCLUDEDIRS $MPI_INC_DIR"
LIBS="$LIBS -L$MPI_INC_DIR -lmpich"
MPIINCLUDEDIR="$MPI_INC_DIR"
LIBS="$LIBS -L/vol-th/software/libraries/lapack/3.8.0/lib64 -llapack -lblas" # lapack on
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
提示
linux_amd64_ifort_mpich_th1a
文件放在build文件夹即可。放别的文件夹也行,一会儿能找到就行。
(4)使用genmake2
命令创建makefile
genmake2 -mods=../code -mpi -of=./linux_config_th1a
说明:
gmake2
是生成makefile的命令,如果找不到该命令,可以参考上文将程序所在路径添加到PATH环境变量中,或者找到后在使用时给出绝对路径。-modes=../code
指明源码路径位置。通常算例目录结构为build code run
这几个文件夹放一起。-mpi
指明编译mpi版本-of=./linux_config_th1a指明使用当前目录下的
linux_config_th1a`脚本当做配置文件
# 执行make命令
生成makefile文件后,我们执行编译命令:
make depend
make -j 12
2
经过耐心等待,编译完成后会生成名为mitgcmuv
的可执行文件
# 配置运行环境
由于编译完成的可执行程序需要在运行时寻找动态库,因此我们可以选择:
(1)将相关动态库的路径写入~/.bashrc
文件,这样每次启动就可以自动加载。但是这样可能会在多用户多种库版本需求是造成冲突,因此不十分推荐。
(2)将相关动态库的路径写入任务提交脚本,这样就保证了多个任务之间的独立性。
相关库路径内容如下:
LUSTRE=`echo $HOME | awk -F / '{print $2}'`
export LD_LIBRARY_PATH=/$LUSTRE/software/io_tools/netcdf/mpi/4.1.2/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/$LUSTRE/software/io_tools/hdf5/mpi/1.8.11/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/$LUSTRE/intel2013_lib:/vol-th/lib:$LD_LIBRARY_PATH
2
3
4
# 提交任务测试
以上步骤完成后,我们可以开始进行算例测试了。
我们编写一个提交脚本文件sub.sh
,内容类似:
#!/bin/bash
# mitgcm
export PATH=/path/to/case/build:$PATH # !!! 需要修改为刚才编译的build文件夹
# libs
LUSTRE=`echo $HOME | awk -F / '{print $2}'`
export LD_LIBRARY_PATH=/$LUSTRE/software/io_tools/netcdf/mpi/4.1.2/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/$LUSTRE/software/io_tools/hdf5/mpi/1.8.11/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/$LUSTRE/intel2013_lib:/vol-th/lib:$LD_LIBRARY_PATH
# run
yhrun -N 2 -n 24 -p debug mitgcmuv
2
3
4
5
6
7
8
9
10
说明:
- 请按需要调整最后一行命令。
-N
节点数,-n
总核数,-p
运行分区名。详情请参考用户手册提交作业部分。
注意
- 请注意修改脚本的相关路径,否则找不到可执行程序
- 不同算例编译时就确定了需要的核数,例如
nPx*nPy= 24
,请使用相同的核数进行提交运行
然后使用yhbatch
命令提交作业:
yhbatch -N 2 -n 24 -p debug mitgcmuv
成功提交后,可以使用yhq
命令查看作业状态,可以在提交目录查看如STDOUT.0000
等文件,检查运行结果。