MITgcm 编译安装测试说明


科学计算软件编译安装方法说明 --- MITgcm 篇 (提供免费测试 QQ 178068275)

 

 

 

官网地址:

http://mitgcm.org/


截止目前(2017.5.4)最新版本:

MITgcm_c66g.tar.gz


下载:

http://mitgcm.org/public/source_code.html


最新版手册 

http://mitgcm.org/public/r2_manual/latest/


 

1. 什么是MITgcm?

麻省技术研究所的环流模式,模拟大尺度海洋环流。

 

2.  编译环境

Intel Compiler /GNU Compiler  + MPI Compiler


3. 安装 Intel Compiler 编译器,设置编译环境

如果使用的是Intel的CPU,建议使用Intel的编译器。

详细安装方法参见博客相关文章。

 

例如使用TH-1A的Intel 2013编译器编译,可以加载如下环境变量:

source /opt/intel/composer_xe_2013.0.079/bin/iccvars.sh intel64    
source /opt/intel/composer_xe_2013.0.079/bin/ifortvars.sh intel64  
source /opt/intel/composer_xe_2013.0.079/mkl/bin/mklvars.sh intel64  

4.安装 MPI Compiler,设置编译环境

编译并行版的程序需要并行编译器,例如MPI并行的程序需要MPI编译器,常用的MPI例如Intel MPI 、MPICH 、OPENMPI等。

不同的机器可能针对自身硬件进行MPI优化,天河系统的MPI是基于开源MPICH进行的二次开发优化,进而支持性能卓越的天河自主高速互联网络。

详细安装方法参见博客相关文章。

 

例如使用TH-1A的Intel 2013编译器编译的mpich,可以加载如下环境变量:

export MPI_HOME=/usr/local/mpi-intel2013    
export PATH=$MPI_HOME/bin:$PATH    
export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH  

 

5.编写-of指向的文件linux_amd64_ifort_mpich 


MITgcm_c66g/tools/build_options目录有很多已经写好的配置文件,它们是针对不同的编译环境而编写的,故我们针对TH-1A的系统环境,编写了适用于我们的配置文件,名称为:linux_amd64_ifort_mpich。


具体内容为:


#!/bin/bash
#
# $Header:
$HOME/software/MITgcm/MITgcm_c66b/tools/build_options/linux_amd64_ifort+mpich,v 1.0 2016/12/14 16:47:3 zhenggang $
# $Name: checkpoint66b ??? $#
# Build options for ifort with mpich on Linux AMD64 platform
#
# Tested on TH-1A (NeoKylin 3.2) with ifort 13.0.1 and mpich 3.0.4
#--------------------------------------------------------------------#
# CC FC F90C LINK
#--------------------------------------------------------------------#
MPI='true'
CC=mpicc
FC=mpif77
F90C=mpif90
LINK="$F90C -shared-intel -no-ipo"
#--------------------------------------------------------------------#
# DEFINES F90FIXEDFORMAT EXTENDED_SRC_FLAG GET_FC_VERSION OMPFLAG
#--------------------------------------------------------------------#
DEFINES='-DALLOW_USE_MPI -DALWAYS_USE_MPI -DWORDLENGTH=4'
F90FIXEDFORMAT='-fixed -Tf'
EXTENDED_SRC_FLAG='-132'
GET_FC_VERSION="--version"
OMPFLAG='-openmp'
#--------------------------------------------------------------------#
# CPP
#--------------------------------------------------------------------#
CPP='cpp -traditional -P'
#--------------------------------------------------------------------#
# NOOPTFLAGS NOOPTFILES
#--------------------------------------------------------------------#
NOOPTFLAGS='-O0 -g'
NOOPTFILES=''
#--------------------------------------------------------------------#
# CFLAGS
#--------------------------------------------------------------------#
PROCF='-xHost'
CFLAGS="-O3 -ip -m64 -no-offload -fno-alias -ansi-alias -override-limits $PROCF"
#--------------------------------------------------------------------#
# FFLAGS F90FLAGS
#--------------------------------------------------------------------#
# FFLAGS
# details in the end of this file
FFLAGS="$FFLAGS -m64 -convert big_endian -assume byterecl -mcmodel=medium
-shared-intel -no-offload -fno-alias -ansi-alias -override-limits $PROCF"
F90FLAGS="$FFLAGS"
#--------------------------------------------------------------------#
# F90OPTIM
#--------------------------------------------------------------------#
# from linux_amd64_ifort+impi
if test "x$IEEE" = x ; then #- with optimisation:
    FOPTIM="-O2 -align -ip -fp-model source $PROCF"
else
    if test "x$DEVEL" = x ; then #- no optimisation + IEEE :
        FOPTIM="-O0 -fp-model source -noalign $PROCF"
    else #- development/check options:
        FOPTIM="-O0 -noalign -g -traceback $PROCF"
        NOOPTFLAGS=$FOPTIM
        NOOPTFILES='adread_adwrite.F mdsio_rw_field.F mdsio_rw_slice.F'
        FOPTIM="$FOPTIM -warn all -warn nounused"
        FOPTIM="$FOPTIM -fpe0 -ftz -fp-stack-check -check all -ftrapuv"
    fi
fi
F90OPTIM=$FOPTIM
#--------------------------------------------------------------------#
# set net-cdf / MPIetc.
#--------------------------------------------------------------------#
# for TH-1A
INCLUDEDIRS=''
INCLUDES=''
LIBS=''
# --------------------------
# NETCDF DIRECTORIES
# --------------------------
HDF5_HOME=/vol-th/software/io_tools/hdf5/mpi/1.8.11
NETCDF_HOME=/vol-th/software/io_tools/netcdf/mpi/4.1.2
INCLUDES="-I$NETCDF_HOME/include -I$HDF5_HOME/include"
LIBS="-L$NETCDF_HOME/lib -lnetcdff -lnetcdf -I$HDF5_HOME/include -lhdf5_hl -lhdf5"
# -----------------------
# INCLUDE MPI DIRECTORIES
# -----------------------
# mpich3.0.4-intel2013
MPI_HOME=/usr/local/mpi-intel2013
INCLUDES="$INCLUDES -I$MPI_HOME/include"
INCLUDEDIRS="$INCLUDEDIRS $MPI_HOME/include"
LIBS="$LIBS -L$MPI_INC_DIR -lmpich"
#- used for parallel (MPI) DIVA
MPIINCLUDEDIR="$MPI_INC_DIR


大家可以针对build_options中提供的模板以及自己机器的配置,修改一个适合自己机器的模板内容,也欢迎讨论交流。


6.编译

以exp2为例:

cd /path/to/MITgcm_c66g/verification/exp2/build
../../../tools/genmake2 -mods=../code -mpi -of=../../../tools/build_options/linux_amd64_ifort_mpich
make depend
make


编译后生成可执行文件:

mitgcmuv

7.单核本地测试

先声明环境变量(注意区分文件系统),这个针对相关库不在默认路径的情况(例如netcdf库)。如果不设置环境,容易出现找不到动态库的情况。

export LD_LIBRARY_PATH=/vol-th/software/io_tools/netcdf/mpi/4.1.2/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/vol-th/software/io_tools/hdf5/mpi/1.8.11/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/vol-th/intel_composer_xe_2013.0.079_lib:/vol-th/lib:$LD_LIBRARY_PATH


运行测试算例:

cd ../run
cp ../input/* ./
cp ../build/mitgcmuv ./
./mitgcmuv > output.txt


8.多核测试

如果是普通的集群,那么使用通常的mpirun命令即可,如果有作业管理系统,编写作业提交脚本即可。下面举例说明如何在TH-1A系统下提交作业计算:

1)编写提交脚本sub.sh

#!/bin/bash  
yhrun -N 2 -n 24 -p debug ./mitgcmuv > output.txt

说明:

-N 节点数;-n 核数;-p 分区;./mitgcmuv 为刚刚编译的可执行文件;output.txt 为定向输出文件。


2)提交任务

yhbatch -N 2 -n 24-p debug sub.sh  


3)查看输出
计算完成后会在output.txt文件中生成结果文件。


欢迎交流!



  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 海洋数值模式是通过对海洋物理、化学和生物过程进行数值模拟,来预测海洋现象和变化的工具。对于不同的海洋现象,应该采用对应的海洋数值模式,以便更精确地进行预报。 以下是一些常见的海洋现象及推荐的数值模式: 1. 海洋温度和海表面高度:使用海洋大气耦合模式(例如在中国常用的FVCOM模式)和海洋环流模式(例如ROMS模式)。 2. 海洋波浪:使用波浪数值模式(例如SWAN模式)。 3. 潮汐:使用潮汐数值模式(例如TPXO模式)。 4. 海洋酸化:使用海洋生态模式(例如NEMURO模式)和海洋碳循环模式(例如CESM模式)。 5. 海洋风暴潮:使用风暴潮数值模式(例如ADCIRC模式)。 需要注意的是,不同的数值模式有其各自的优缺点和适用范围,同时也需要根据预报需求和数据可用性进行选择。 ### 回答2: 在预报不同海洋现象时,应根据具体现象的特点和需求来选择合适的海洋数值模式。海洋数值模式是通过数学方程描述海洋物理过程,模拟海洋状态和变化的工具。 对于海浪预报,可采用基于波浪动力学理论的数值模式,如WAM (WINDS WAVE MODELLING)模式、SWAN (SIMULATING WAVES NEARSHORE)模式等。这些模式能够根据风场和海底地形等参数,计算波浪的传播、变形和衰减等过程,准确预报海浪的高度、周期和方向等信息,为海上、近岸、沿岸等任务提供支持。 对于海流预报,可采用基于海洋动力学理论的数值模式,如ROMS (REGIONAL OCEAN MODELING SYSTEM)模式、HYCOM (HYBRID COORDINATED OCEAN MODEL)模式等。这些模式能够模拟海流的产生、传输和演变过程,预报海流的强度、方向和变化趋势等信息,为航海、渔业、海洋工程等提供参考。 对于海洋温度和盐度预报,可采用基于海洋热力学和海洋化学理论的数值模式,如MITgcm (MASSACHUSETTS INSTITUTE OF TECHNOLOGY GENERAL CIRCULATION MODEL)模式、NEMO (NORTH ATLANTIC AND ARCTIC MODELING FRAMEWORK)模式等。这些模式能够模拟海洋的热盐环流和混合过程,预报海洋的温度、盐度和密度等信息,对海洋环境、气候变化等研究具有重要意义。 当预报的海洋现象涉及多个物理过程交互作用时,还可以使用耦合模式,将不同的数值模式进行耦合,模拟海洋的综合变化。这样能够更精确地预报海洋现象的时空分布和演变过程,提高预报的准确性和全球覆盖范围。 总之,在预报不同海洋现象时,应根据具体的需求和研究目标,选择合适的海洋数值模式,以实现准确、可靠的预报结果。 ### 回答3: 在预报不同海洋现象时,应该根据具体情况选择合适的海洋数值模式进行预报。 首先,对于海洋温度和盐度的预报,可以采用海洋通用循环模式(OGCM)来模拟海洋的动力和物理过程。OGCM能够模拟海洋的水循环、热量传输和盐分输运,可以准确预测海洋的温度分布和盐度分布。 其次,对于海洋风和波浪的预报,可以使用海洋风场数值模式和海洋波浪数值模式。海洋风场数值模式可以模拟风对海洋的作用,预测海面风速和风向的变化,从而预报海洋表面流场的分布。海洋波浪数值模式可以模拟波浪的传播和变形过程,预报海洋的波浪高度、波长和波向等参数。 此外,对于海洋潮汐的预报,可以使用潮汐模式。潮汐模式能够计算海洋潮汐的周期、振幅和相位等信息,预测潮汐的变化规律,对于海洋工程和航海等应用具有重要意义。 最后,对于海洋环境的预报,可以综合运用以上各种数值模式,例如同时预报海洋风、波浪和潮汐的变化情况,对海洋环境的变化进行全面分析和预测。 总之,对于不同的海洋现象,我们应该根据需求选择适合的海洋数值模式进行预报,以提高预报的准确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值