在Linux上移植CESM1.0.3模式

通用地球系统模式(Community Earth System Model, CESM)是由美国国家大气中心于2010年发布的新一代地球系统模式,是目前最先进、使用最广泛的地球系统模式之一。本文以CESM1.0.3为例,介绍CESM模式在Linux上的移植方法。本文内容参考该贴:成功移植CESM模式(介绍)——Porting CESM via user defined machine files

一、准备工作

移植之前首先需要安装netCDF、intel-Fortran与impi。此外,需提前下载模式运行需要的inputdata,可利用svn在该网址下载:https://svn-ccsm-inputdata.cgd.ucar.edu/trunk/inputdata

二、开始移植

1、建立Machine

首先将模式拷贝至目录中,进入cesm1_0_3/scripts/ccsm_utils/Machines目录,首先打开config_machines.xml,在文件末尾添加自己的机器信息,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<machine MACH="the"
DESC="the, os is Linux, 12 pes/node, batch system is something about IBM"
EXEROOT="/gpfsES/geo/the/cesm_amoc/$CASE"
OBJROOT="$EXEROOT"
INCROOT="$EXEROOT/lib/include"
DIN_LOC_ROOT_CSMDATA="/gpfsES/geo/the/CESM/inputdata"
DIN_LOC_ROOT_CLMQIAN="/gpfsES/geo/the/CESM/inputdata/atm/datm7/atm_forcing.datm7.Qian.T62.c080727"
DOUT_S_ROOT="/gpfsES/geo/the/cesm_amoc/Archive/$CASE"
DOUT_L_HTAR="TRUE"
DOUT_L_MSROOT="UNSET"
CCSM_BASELINE="UNSET"
CCSM_CPRNC="UNSET"
OS="Linux"
BATCHQUERY="qstat"
BATCHSUBMIT="qsub"
GMAKE_J="1"
MAX_TASKS_PER_NODE="12"
MPISERIAL_SUPPORT="FALSE" />

其中MACH字段为机器名,EXEROOT为之后建立的case目录,DIN_LOC_ROOT_CSMDATA为inputdata目录,DOUT_S_ROOT为模式结果输出目录。

之后复制Machines文件夹中的env_machopts.###、Macros.###、mkbatch.###并将拓展名修改为自己的机器名,再打开env_machopts、Macros文件,修改其中netCDF、mpi等路径以适应当前系统。最后打开mkbatch文件,修改mach为新建的机器名。

2、生成(create)Case

进入/cesm1_0_3/scripts目录下,执行以下指令:

1
./create_newcase -case ~/cesm_amoc/mask_2004 -compset B1850 -res T31_g37 -mach the

其中-case后参数为case路径,-res后为分辨率,-mach后为机器名。-compset和-res的设置参数可参考CESM用户手册。

3、配置(configure)Case

进入Case目录下,打开env_conf.xml,修改以下参数:

1
2
3
4
5
6
7
8
9
10
11
<!--"Run initialization type, valid values: startup,hybrid,branch (char) " -->
<entry id="RUN_TYPE" value="hybrid" />
<!--"Run start date (yyyy-mm-dd). Only used for startup or hybrid runs (char) " -->
<entry id="RUN_STARTDATE" value="0001-01-01" />
<!--"Reference case for hybrid or branch runs (char) " -->
<entry id="RUN_REFCASE" value="xiao845" />
<!--"Reference date for hybrid or branch runs (yyyy-mm-dd) (char) " -->
<entry id="RUN_REFDATE" value="2004-01-01" />

参数意义在备注中已有介绍。其中,只有RUN_TYPE为hybrid和branch时后两个参数有意义。

之后打开env_mach_pes.xml文件,配置好你所要使用的cpu核心数。

再打开env_run.xml文件,设置模式运行年份,例如:

1
2
3
4
5
<!--"sets the run length with STOP_N and STOP_DATE, valid values: none,never,nsteps,nstep,nseconds,nsecond,nminutes,nminute,nhours,nhour,ndays,nday,nmonths,nmonth,nyears,nyear,date,ifdays0,end (char) " -->
<entry id="STOP_OPTION" value="nyears" />
<!--"sets the run length with STOP_OPTION and STOP_DATE (integer) " -->
<entry id="STOP_N" value="2000" />

上面设置为模式持续模拟2000年。

修改完毕后,执行以下指令保存配置:

1
./configure -case

若需重新配置,需使用-cleanall指令删除之前的配置并初始化。

4、构建(building)Case

在Case目录中打开新生成的Buildconf目录,打开cam.buildnml.csh文件以修改模式运行参数以及导入的强迫场路径等信息。若之前RUN_TYPE为hybrid和branch,还需要向Case根目录的run文件夹拷贝参照试验的rest文件。

上述工作完成后,返回Case根目录,执行以下指令执行build:

1
./mask_2004.the.build

之后若需重新配置,需首先执行./mask_2004.the.clean_build清除build。

5、提交作业

build完成后,执行以下指令即可提交作业:

1
./mask_2004.the.submit

之后通过qstat可以查询任务运行状态,qdel停止任务,任务若出错停止可以在Case的run目录查询错误log文件。