前言
开始之前先要安装库以及相应软件,过程省略,具体在官网:
CESM1.1.z User’s Guide
CESM Software/Operating System Prerequisites.
CESM各个版本:CESM Models
也可在github中下载:
GitHub-ESCOMP/CESM: The Community Earth System ModelThe Community Earth System Model.
正文
本文重点在于source code移植后的修改配置部分
假设模式位于 cesm1_1/
需要修改的文件均位于 cesm1_1/scripts/ccsm_utils/Machines 路径下
config_machines.xml
主要是修改关于机器的配置
添加以下部分 (根据自己服务器的配置/环境来配置。具体各项意义可见官网CESM Models | CESM1.1 Public Release)
1 | <machine MACH="ubuntu"> |
config_compilers.xml
关于编译器的配置
添加以下部分
1 | <compiler COMPILER="intel" MACH="ubuntu"> |
env_mach_specific.userdefined
将 env_mach_specific.userdefined 复制为 env_mach_specific.ubuntu
点后面(ubuntu)为之前设置的MACH名称
添加以下部分,注意 set 后面有=,且=前后有空格。setenv没有等号,只有空格
1 | set NETCDF_PATH = /usr/local/netcdf-ifort |
mkbatch.userdefined
将 mkbatch.userdefined 复制为 mkbatch.ubuntu
点后面依旧是之前设置的MACH名称
根据服务器提交作业的方式把qname=batch 为自己服务器的脚本提交方式,如 qname=qnormal,并把下方##的代码根据提交任务的脚本 去掉注释即可 (包括mpirun等等命令所在的行)
完成移植,进行测试。
测试1
此测试来自官方网站:Use Cases and FAQs
1 | cd cesm1_1/scripts |
此时可根据需要修改运行配置如大气模式用到的核数 NTASKS_ATM ….. (当前该变量值可通过以下命令查询到。)
1 | ./xmlquery NTASKS_ATM |
对于修改诸如模式要用的核数NTASKS_xxxxx、线程数NTHRDS_xxx等等env_mach_pes.xml中的变量,必须在./cesm_setup之前修改,如果setup之后修改,必须先./cesm_setup -clean,修改,然后重新./cesm_setup。
对于诸如任务重新提交时间STOP_OPTION等等其他变量,可在./cesm_setup之后修改
两种修改方式:
1 | 1 ./xmlchange NTASKS_ATM=64 (等价于 ./xmlchange -file env_mach_pes.xml -id NTASKS_ATM -val 64) |
2 直接vim修改env_mach_pes.xml 或是其余xml文件
同上,所有与运行相关的配置变量可在CESM Models | CESM1.1 Public Release通过对应xml文件查找到。
1 | ./cesm_setup |
生成测试脚本(测试本例子能否跑通)
1 | ./create_production_test |
如果没有问题(PASS)即可进行下一步
1 | cd ../case_official |
之后可在out文件中查看是否成功
测试2
创建一个分辨率为10°x15°,只运行大气模块的试验
1 | ./create_newcase -case coarse_amip -compset FAMIPC5 -res 10x15_10x15 -mach ubuntu |
生成测试的试运行脚本
1 | ./create_production_test |
修改运行设置
1 | cd ../coarse_amip |
设置例如积分时长,运行月份,变量输出频率的配置
对于自定义输出,可见: CAM: How do I customize CAM output fields?
在 user_nl_xxx 中修改xxx(如CAM,CLM…)模块的namelist设置,如cam模块变量输出频率见: CAM Component Model Namelist Variables
以user_nl_cam为例:
1 | ;history文件中所有变量的平均输出标志,两个值表示同时两种设置 |
修改后查询结果:
1 | ./preview_namelist |
然后在 CaseDocs/atm_in 查看设置的上述变量是否出现
运行并查看当前运行状态
1 | ./coarse_amip.run |
当前运行状态位于
1 | $CESMROOT/$CASENAME/run/xxx.log.yymmdd-hhmmss |
如 cesm1_1/coarse_amip/run/atm.log.220520-145438 模式积分完成后会被删除
运行结束
CCSM4/CESM1 OUTPUT FILENAME REQUIREMENTS
文件储存分为 short-term archiving 和 long-term archiving ,分别通过 env_run.xml 中 $DOUT_S 和 $DOUT_L_MS 来控制,输出路径分别为 $DOUT_S_ROOT 、 $DOUT_L_MSROOT
模式输出文件位于
1 | $CESMROOT/$CASENAME/output/xxx/ |
其中XXX表示如atm,ocn,ice等的分量模式输出
再下一级目录的
1 | hist/ init/ logs/ rest/ |
表示history,initial,logs,restart文件
在 CaseStatus 中最后一行看到 run SUCCESSFUL 并在相应路径有nc文件输出即为成功
踩坑记录
如果出现 Can’t locate Switch.pm in @INC 则是因为Perl5.1以上的版本问题,只需将已有的Switch.pm 文件复制到INC中一个路径即可
1 | sudo cp /opt/intel/oneapi/compiler/2021.2.0/linux/lib/oclfpga/host/linux64/bin/perl/lib/site_perl/5.30.3/Switch.pm /usr/share/perl/5.30/ |
无gmake的情况:ubuntu上取消了gmake(GNUmake),用make代替即可
1 | sudo ln -s /usr/bin/make /usr/bin/gmake |