构建 Case 与输入数据管理
介绍 case.build、构建日志、EXEROOT、RUNDIR 与 check_input_data 的关系。
构建 Case 与输入数据管理
case.build 用于构建 CESM 可执行文件。它会生成组件 namelist、构建公共库和组件库,并最终在 $EXEROOT 下生成模型可执行文件。构建阶段也是输入数据检查的重要节点。
1. 执行构建
进入 case 目录:
cd $CASEROOT
执行:
./case.build
如平台建议在计算节点构建,应使用平台提供的交互式或队列编译方式,不要在登录节点长时间占用资源。
2. 构建阶段会做什么
case.build 通常会完成以下工作:
- 在
$RUNDIR和$CASEROOT/CaseDocs生成组件 namelist。 - 构建 coupler 和公共支持库,例如
mct、pio、gptl、csm_share。 - 构建各活动组件和数据组件所需的库。
- 在
$EXEROOT下生成模型可执行文件,例如cesm.exe。
查询构建和运行目录:
./xmlquery EXEROOT,RUNDIR,BLDDIR
3. 构建日志
构建日志通常位于 $BLDDIR,文件名形如:
atm.bldlog.YYYYMMDD-HHMMSS
ice.bldlog.YYYYMMDD-HHMMSS
cpl.bldlog.YYYYMMDD-HHMMSS
如果日志文件被压缩为 .gz,通常表示对应组件构建成功。若构建失败,应优先查看最后一个未压缩或最新的组件构建日志。
4. 输入数据检查
CESM 需要的输入数据由具体 compset 和 resolution 决定。不要手动下载整个输入数据仓库。可在 case 目录中执行:
./check_input_data
如果缺少数据:
./check_input_data --download
check_input_data 会根据 Buildconf/$component.input_data_list 中的文件清单检查 $DIN_LOC_ROOT。对于共享集群,建议多个用户使用统一的 $DIN_LOC_ROOT,以减少重复下载和存储浪费。
5. 重新构建
如果修改了 env_build.xml、Macros.cmake、编译选项,或在 SourceMods/src.* 中加入代码,建议清理后重新构建:
./case.build --clean-all
./case.build
如果只修改 PE layout,有时不需要完整清理,但当不确定依赖关系是否已变化时,应采用更保守的重新构建策略。
6. 学习提示
构建失败时应优先查看最新的组件构建日志,并确认 $EXEROOT、$RUNDIR 与 $CASEROOT 的区别。初学者经常在 $CASEROOT 中寻找可执行文件或历史输出,但这些文件通常位于构建目录、运行目录或归档目录。
官方参考
- CIME Building a Case: https://esmci.github.io/cime/versions/master/html/users_guide/building-a-case.html
- CESM2 Downloading Input Data: https://escomp.github.io/CESM/versions/cesm2.1/html/downloading_cesm.html