CESM 1.2.0

应用介绍

通用地球系统模式(CESM)是美国国家大气研究中心最新推出的地球系统耦合模式,对解决气候(地球)系统建模中所涉及的新挑战和新问题具有很大的帮助。

使用指南

安装CESM所需的前置软件

CESM 1.2.0所需要的前置软件有:zlibhdf5以及netcdf,上述软件可以用intel或者pgi进行编译,这里以intel编译为例。

  1. 首先,在用户根目录下的.bashrc文件中定义intel编译器,这里以学校服务器上安装好的intel2020编译器为例,也可以用自己安装的intel编译器。

    #INTEL
    source /opt/intel/compilers_and_libraries_2020.1.217/linux/bin/compilervars.sh inteL64
    source /opt/intel/compilers_and_libraries_2020.1.217/linux/mpi/intel64/bin/mpivars.sh intel64
    source /opt/intel/compilers_and_libraries_2020.1.217/linux/mkl/bin/mklvars.sh inte164
    

    .bashrc文件中添加以上代码,保存退出,输入source .bashrc以让上述改动生效,之后可以输入which icc看改动是否生效;

  2. 接着,用intel编译zlib

    首先解压源码包:

    tar -xf zlib-1.2.8
    

    然后可以在用户目录下创建一个zlib的安装目录:

    mkdir /home/*/Tools/hdf5-1.8.9-intel
    

    然后进入之前解压的目录中,输入下列命令以定义intel编译器:

    export CC=icc
    export CFLAGS='-O3 -xHost -ip'
    

    然后输入下列命令:

    ./configure --prefix=/home/*/Tools/hdf5-1.8.9-intel
    

    注解

    *--prefix即为软件安装目录

    该命令执行完后按顺序输入makemake check以及make install,同时注意每个命令输完之后是否出错,若无出错,即zlib安装完成。

  3. 接着,用intel编译hdf5:

    与上面安装zlib过程类似,首先解压hdf5的源码包,进入解压完的目录,定义编译器:

    export CC=icc
    export CXX=icpc
    export CFLAGS='-O3 -ip -no-prec-div -xSSSE3'
    export CXXFLAGS='-O3 -ip -no-prec-div -xSSSE3'
    export F77=ifort
    export FC=ifort
    export F90=ifort
    export FFLAGS='-O3 -ip -no-prec-div -xSSSE3'
    export CPP='icc -E'
    export CXXCPP='icpc -E'
    

    然后输入:

    ./configure --prefix=/home/*/Tools/hdf5-1.8.9-intel --enable-fortran --enable-cxx --enable-debug=all --with-zlib=/home/*/Tools/hdf5-1.8.9-intel
    

    注解

    *--with-zlib为之前安装zlib的目录

    上述命令执行完后,按顺序执行make check以及make install,同时注意是否存在错误,若无出错,即hdf5安装完成。

  4. 最后,用intel编译netcdf:

    这里以4.1.3版本的netcdf为例,因为安装比较简单,而4.4版本之后fortranc要单独安装。

    首先,依然是解压netcdf的源码包,同时创建一个安装目录:

    mkdir /home/*/Tools/netcdf-4.1.3-intel
    

    然后定义编译器:

    export CC=icc
    export CXX=icpc
    export CFLAGS='-O3 -ip -no-prec-div -xSSSE3'
    export CXXFLAGS='-O3 -ip -no-prec-div -xSSSE3'
    export F77=ifort
    export FC=ifort
    export F90=ifort
    export FFLAGS='-O3 -ip -no-prec-div -xSSSE3'
    export CPP='icc -E'
    export CXXCPP='icpc -E'
    export CPPFLAGS='-I/home/*/Tools/hdf5-1.8.9-intel/include'
    export LDFLAGS='-L/home/*/Tools/hdf5-1.8.9-intel/lib'
    

    注意,最后这两条是之前安装hdf5的目录。

    之后,执行:

    ./configure --prefix=/home/*/Tools/netcdf-4.1.3-intel --disable-dap CC=icc  FC=ifort  F77=ifort  CXX=icpc
    

    运行完之后按顺序输入makemake check以及make install。同时注意每个命令输完之后是否出错,若无出错,即netcdf安装完成。

    netcdf安装完之后,我们需要在.bashrc文件中加入netcdf的路径。同上面定义intel编译器的过程类似:

    #NETCDF
    export NETCDF=/home/xum17/Tools/netcdf-4.1.3-intel
    export NC_INC=$NETCDF/include
    export NC_LIB=$NETCDF/lib
    export PATH=$NETCDF/bin:$PATH
    export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH
    

    .bashrc文件中添加以上代码,保存退出,输入source .bashrc以让上述改动生效,之后可以输入which ncdump看改动是否生效。至此,CESM 1.2.0需要的前置软件便已全部安装完成。

获取模式源代码及移植

输入下列命令:

svn co https://svn-ccsm-release.cgd.ucar.edu/model_versions/cesm1_2_0 cesm1_2_0

然后输入学校服务器账户的密码,接着是ncar的用户名和密码,分别是:guesteserfriendly,之后就会开始下载CESM 1.2.0的源代码。

下载完成后,需要对模式源码进行一些修改方可使用。

首先,进入该目录cesm1_2_0/scripts/ccsm_utils/Machines,编辑config_machines.xml,如下图所示:

config machines

其中RUNDIR为实验运行目录,EXEROOT 为生成exe文件的目录,DIN_LOC_ROOT为模式初始场数据目录。可以根据自身需求对上述的路径进行调整。

其次,编辑Makefile,在该文件的61%处添加一个-lnetcdff,如下图所示:

makefile

然后执行cp mkbatch.userdefined mkbatch.ibmintel以及cp env_mach_specific.userdefined env_mach_specific.ibmintel

接着编辑env_mach_specific.ibmintel,在该文件中定义netcdf的环境变量,如下图所示:

netcdf setenv

最后编辑config_compilers.xml,大致在该文件27%的位置,即intel编译器位置,按照下图进行修改:

config compilers

至此,CESM模式已经移植成功。

创建实验及提交作业

移植成功后,到scripts 目录下,首先运行:

./create_newcase -case control -res f19_g16 -compset FWSC –mach ibmintel

其中,-case为实验名称,-res为水平分辨率,-compset为调用模块(参见http://www.cesm.ucar.edu/models/cesm1.2/cesm/doc/modelnl/compsets.html),–mach为前面定义的机器名称,按照上面的步骤做下来即为ibmintel

运行成功后,到scripts下面的该实验目录下面,首先运行./cesm_setup,再运行./{实验名称}.build,注意该过程中是否出错,若无出错,即实验创建成功。

之后找到前面定义的实验创建目录中的实验,进入该文件夹中的run目录,对实验进行自定义,如:输入输出,之后便可以运行该实验了。

要运行该实验,首先创建一个提交脚本slurm.job,如下图所示:

slurm job

其中--nodes 为调用节点数,--ntasks-per-node为每个节点上调用的核数,--job-name为作业名称,LD_LIBRARY_PATHintelmpinetcdf的库文件目录,根据自身需求对上述的路径进行调整。

创建好提交脚本后,即可用sbatch 脚本名将作业提交到slurm作业系统上了。可以用squeue | grep 用户名查看自己的作业状态,如下图所示:

squeue grep user

上图中从左到右分别是,作业ID,选用路线(cpu,gpu),作业名称,用户名,作业状态(R为运行,P为排队),已运行时间,调用节点数以及调用节点序号。可以用bkill 作业ID杀死作业。

常见问题