本节及以下章节将提供更多关于 CIME 案例控制系统基本命令的详细信息:create_newcase、case.setup、case.build 和 case.submit。在支持的系统上,您仅使用这 4 个命令即可配置、构建和运行许多复杂的气候模型配置。
要检查您的设备是否受支持,请尝试:
$ query_config --machines
如果您不在开箱即用的 CIME 支持平台上,您需要在继续之前将 CIME 移植到您的系统。
2.1. 调用 create_newcase
创建基于 CIME 的实验的第一步是使用 create_newcase 。
在帮助文本中查看 create_newcase 的选项。:
$ create_newcase --help
create_newcase 所需的唯一参数是:
$ create_newcase --case CASENAME --compset COMPSET --res GRID
创建 CIME 实验或案例至少需要指定一个 compset、一个模型网格和一个案例目录。CIME 支持开箱即用的组件集 、 模型网格和硬件平台 (机器)。
警告
--case
参数必须是字符串,且不能包含以下任何特殊字符> + * ? < > { } [ ] ~ ` @ :
--case
参数用于定义您的用例名称,这是一个非常重要的元数据,将用于文件名、内部元数据和目录路径。CASEROOT
是 create_newcase 将创建的目录,其名称与 CASENAME
相同。如果 CASENAME
仅是名称(不是路径),CASEROOT
将在您执行 create_newcase 的目录中创建。如果 CASENAME
是相对路径或绝对路径,CASEROOT
将在那里创建,用例的名称将是路径的最后一部分。
2.2. 调用 create_newcase 的结果
假设 create_newcase 被如下调用。这里,$CIMEROOT 是 CIME 分发的根目录的完整路径名:
$ cd $CIMEROOT/scripts
$ create_newcase --case ~/cime/example1 --compset A --res f09_g16_rx1
在示例中,该命令创建一个 $CASEROOT
目录:~/cime/example1
。如果该目录已存在,则会打印警告并中止命令。
在 --case
的参数中,案例名称取自最后一个斜杠之后的部分——因此这里的案例名称是 example1
。
create_newcase 的输出包括诸如信息等。
-
组件集长名称是
2000_DATM%NYF_SLND_DICE%SSMI_DOCN%DOM_DROF%NYF_SGLC_SWAV
-
网格集是
a%0.9x1.25_l%0.9x1.25_oi%gx1v6_r%r05_m%gx1v6_g%null_w%null
create_newcase 在 $CASEROOT
中安装文件,这些文件将用于构建和运行模型,并可选择在目标平台上归档案例。
运行 create_newcase 在 $CASEROOT
中创建以下脚本、文件和目录:
用户脚本
-
用于构建组件和工具库以及模型可执行文件的脚本。
-
执行 namelist 基线操作(比较、生成或两者都执行)的脚本。”
-
case.qstatus
查询任何队列系统的队列的脚本。
-
用于设置案例(创建 case.run 脚本、宏文件和 user_nl_xxx 文件)的脚本。
-
用于使用机器的批处理队列系统提交案例运行的脚本。
-
用于验证大小写是否设置正确的脚本。
-
用于检查各种输入数据集并将它们移至正确位置的脚本。
-
查询和修改每个组件模型的 NTASKS、ROOTPE 和 NTHRDS 的脚本。
-
用户在运行模型前查看其组件 namelists 的脚本,位于
$CASEROOT/CaseDocs
。 -
用于用户查看批量提交和 mpirun 命令的脚本。”
-
用于修改 xml 文件中的值的脚本。
-
查询 xml 文件中值的脚本。
XML 文件
-
env_archive.xml
定义发送到短期存档的文件模式。您可以随时编辑此文件。您 CANNOT 使用 xmlchange 来修改此文件中的变量。”
-
env_batch.xml
设置批处理系统设置,如墙钟时间和队列名称。”
-
env_build.xml
设置模型构建设置。这包括组件分辨率和组件编译时配置选项。更改此文件后,您必须运行 case.build 命令。
-
env_case.xml
create_newcase 设置的参数
-
env_mach_pes.xml
设置组件机器特定的处理器布局(参见更改 pe 布局)。此处的设置对负载均衡良好的模拟至关重要(参见负载均衡 )。
-
env_mach_specific.xml
为构建和/或运行设置一系列机器特定的环境变量。您 不能 使用 xmlchange 来修改此文件中的变量。
-
env_run.xml
设置运行时设置,如运行长度、重启频率、耦合器诊断输出以及短期和长期归档。此文件可以在作业开始前的任何时间进行编辑。
-
env_workflow.xml
设置运行时工作流的参数。
用户源修改目录
-
SourceMods
顶层目录,包含每个 compset 组件的子目录,你可以在其中放置该组件的修改源代码。你也可以在这里放置修改后的 buildnml 和 buildlib 脚本。”
来源
-
README.case
详细说明 create_newcase 使用的文件。这是一个跟踪运行时问题和变更的好地方。”
-
CaseStatus
包含当前案件所执行操作列表的文件。
不可修改的工作目录
-
Buildconf,
包含生成组件名称列表和组件及工具库(例如 PIO 或 MCT)脚本的工 作目录。你永远不需要编辑此目录的内容。
-
LockedFiles/
存放不应更改文件副本的工作目录。某些 xml 文件在使用变量后会被锁定且不再更改(见下文)。
-
Tools/
包含支持实用脚本的工作目录。你永远不需要编辑这个目录的内容。”
2.3. 案例目录中的锁定文件
$CASEROOT
xml 文件的组织方式是,在变量在其他脚本系统部分解析(使用)后,可以在某些点上锁定这些变量。
CIME 通过在 $CASEROOT/LockedFiles
中锁定文件,并禁止你修改该文件来实现这一点,除非根据文件类型,你调用 case.setup –clean 或 case.build –clean 。
CIME 会根据以下规则锁定你的 $CASEROOT
文件:
-
在 create_newcase 后锁定 env_case.xml 中的变量。
env_case.xml 文件永远无法解锁。
-
在 case.setup 后锁定 env_mach_pes.xml 中的变量。
要解锁 env_mach_pes.xml,请运行 case.setup –clean 。
-
在 case.build 完成后锁定 env_build.xml 中的变量。
要解锁 env_build.xml,运行 case.build –clean
-
env_run.xml、env_batch.xml 和 env_archive.xml 中的变量永远不会被锁定,而且大多数变量可以随时更改。
-
env_batch.xml 文件中存在一些例外情况。
2.4. 向 create_newcase 添加 –user-mods-dir 参数
用户可能希望通过 user_nl_xxx
文件修改、某些组件的 SourceMods
以及 xmlchange 命令的组合来定制目标案例。例如,用户可能希望基于一组共同的 namelist、源代码和/或案例 xml 设置来执行一系列实验。与其每次生成新的实验 CASEROOT
时都进行这些更改,用户可以在本地磁盘上创建一个包含一组更改的目录,这些更改将应用于每个案例。
例如,该目录可以包含以下文件:
$ user_nl_cpl
$ shell_commands (this would contain ./xmlchange commands)
$ SourceMods/src.cam/dyncomp.F90
需要注意的是,包含 xmlchange 命令的文件必须命名为 shell_commands
,才能在案例创建时被识别和执行。
组件目录的结构不需要与组件源代码中的结构相同。例如,如果用户想要修改 CAM 源代码中的 src/dynamics/eul/dyncomp.F90
文件,应该直接将修改后的文件放入目录 SourceMods/src.cam
中。无需模仿源代码结构,例如 SourceMods/src.cam/dynamics/eul
。
当用户使用 --user-mods-dir
参数调用 create_newcase,并指向包含这些修改的目录的完整路径名时,CASEROOT
将被创建并应用这些修改。