CIME 和符合 CIME 标准的组件主要使用 Fortran 参数表来控制运行时选项。一些组件使用其他基于文本的文件来设置运行时选项。
所有符合 CIME 标准的组件使用 buildnml 脚本生成其输入变量文件,该脚本通常位于组件的 cime_config 目录(或 config_file.xml 中设置的其它位置)。buildnml 可能会调用其它脚本来完成输入文件的构建。
例如,CIME 数据大气模型(DATM)使用脚本**$CIMEROOT/components/data_comps/datm/cime_config/buildnml** 生成 namelists。
您可以通过两种方式自定义模型的参数表:
-
通过编辑 $CASEROOT/user_nl_xxx 文件
这些文件应通过键值对进行修改,这些键值对对应于新的 namelist 或输入数据设置。它们使用 Fortran namelist 的语法。
-
通过调用 xmlchange 修改
$CASEROOT
中的 xml 变量这些变量中的许多会被模型转换为 Fortran namelist 值以供输入。在一个耦合系统中需要在模型之间协调的变量(例如运行多少步)通常位于一个 CIME xml 文件中。
你可以通过运行 preview_namelists 从 $CASEROOT
生成组件名称列表。
这会导致在 $CASEROOT/CaseDocs/
创建组件名称列表(例如,atm_in、lnd_in 等)。
警告
CaseDocs
中的名称文件仅供用户参考,并且不应编辑,因为它们每次调用 preview_namelists 和 case.submit 时都会被覆盖,并且运行时读取的文件不是CaseDocs
中的文件。
7.1. 自定义驱动输入变量
驱动输入的 namelist/变量包含在文件中,分别是 drv_in、drv_flds_in 和 seq_maps.rc。请注意,seq_maps.rc 的文件格式与其他两个输入文件不同。
所有驱动 namelist 变量都在文件**$CIMEROOT/src/drivers/mct/cime_config/namelist_definition_drv.xml** 中定义。
只能通过修改 xml 变量来改变的变量会带有 entry 属性 modify_via_xml="xml_variable_name
。
其他所有驱动 namelist 变量可以通过在 user_nl_cpl
的末尾添加关键字值对来修改。
例如,要将 eps_frac
的驱动器 namelist 值改为 1.0e-15
,将以下行添加到 user_nl_cpl
的末尾:
eps_frac = 1.0e-15
另一方面,要更改起始年/月/日的驱动器 namelist 值,从 start_ymd
改为 18500901
,使用以下命令:
$ ./xmlchange RUN_STARTDATE=1850-09-01
注意
要查看更改结果,调用 preview_namelists 并验证新值出现在 CaseDocs/drv_in 中。
7.1.1. 设置多年运行
这显示了从所有组件的“冷启动”开始进行多年度模拟所需的全部步骤。本例中的 compset 和分辨率适用于 CESM 完全耦合案例,但其他模型和案例的步骤类似。
-
在你的 $HOME 目录下创建一个名为 EXAMPLE_CASE 的新案例。
$ cd $CIME/scripts $ ./create_newcase --case ~/EXAMPLE_CASE --compset B1850 --res f09_g17
-
通过运行
./pelayout
检查 pe-layout。确保它适合你的机器。如果不适合,使用 xmlchange 或 pelayout 来修改你的 pe-layout。然后设置你的案例并构建可执行文件。$ cd ~/EXAMPLE_CASE $ ./case.setup $ ./case.build
警告
case.build 脚本可能是计算密集型的,可能不适合在登录节点上运行。作为替代方案,你可以将这个作业提交到交互式队列。例如,在 NCAR cheyenne 平台上,你可以使用 qcmd – ./case.build 来完成这个操作。
-
在你的案例目录中,设置作业运行 12 个模型月,设置 wallclock 时间,然后提交作业。
$ ./xmlchange STOP_OPTION=nmonths $ ./xmlchange STOP_N=12 $ ./xmlchange JOB_WALLCLOCK_TIME=06:00 --subgroup case.run $ ./case.submit
-
确保运行成功。
你应该在你的运行目录或通过
$DOUT_S_ROOT
设置的短期归档目录中的cpl.log
文件末尾看到以下行或类似内容。(seq_mct_drv): =============== SUCCESSFUL TERMINATION OF CPL7-cesm ===============
-
在同一案例目录下,将案例设置为重新提交10次,使其总共运行11年(包括初始年份),然后重新提交案例。(注意:重新提交将自动将运行设置为继续运行)。
$ ./xmlchange RESUBMIT=10 $ ./case.submit
默认情况下,重新提交的运行不会在之前的运行完成之前提交。根据本例中配置的 10 个 1 年运行,CIME 将首先提交一个 1 年的作业,当该作业完成后,它将提交另一个 1 年的作业。任何时候队列中只有一个作业。要更改此行为,并一次性提交所有作业(使用批处理依赖关系,以便一次只运行一个作业),请使用命令:
$ ./case.submit --resubmit-immediate
7.1.2. 设置 branch 或 hybrid 模式运行
branch 或 hybrid 模式运行使用先前运行的初始化数据。这里是一个假设了有效负载平衡场景的示例。
- 设置branch 或 hybrid 模式运行的第一步是创建一个新案例。以下假设使用 CESM compset 和 resolution。
$ cd $CIMEROOT/scripts
$ create_newcase --case ~/NEW_CASE --compset B1850 --res f09_g17
$ cd ~/NEW_CASE
- 对于 branch 模式运行,使用以下 xmlchange 命令将 NEW_CASE 设置为从 EXAMPLE_CASE 在 0001-02-01 分支。
$ ./xmlchange RUN_TYPE=branch
$ ./xmlchange RUN_REFCASE=EXAMPLE_CASE
$ ./xmlchange RUN_REFDATE=0001-02-01
- 对于 hybrid 模式运行,使用以下 xmlchange 命令从 EXAMPLE_CASE 启动 NEW_CASE,起始时间为 0001-02-01。
$ ./xmlchange RUN_TYPE=hybrid
$ ./xmlchange RUN_REFCASE=EXAMPLE_CASE
$ ./xmlchange RUN_REFDATE=0001-02-01
对于 branch 模式,NEW_CASE 的 env_run.xml 文件应与 EXAMPLE_CASE 的文件相同,除了 $RUN_TYPE
设置。
此外,EXAMPLE_CASE 中 user_nl_<component> 文件引入的修改应在 NEW_CASE 中重新引入。
- 接下来,设置并构建 Case 的可执行文件。
$ ./case.setup
$ ./case.build
- 在
$RUNDIR
中预置必要的重启/初始数据。假设在本例中,它已创建在此处显示的/rest/0001-02-01-00000 目录中:
$ cd $RUNDIR $ cp /user/archive/EXAMPLE\_CASE/rest/0001-02-01-00000/\* .
假设您已经有一个有效的负载均衡场景。返回案例目录,将作业设置为运行 12 个模型月,然后提交作业。
$ cd ~/NEW_CASE
$ ./xmlchange STOP_OPTION=nmonths
$ ./xmlchange STOP_N=12
$ ./xmlchange JOB_WALLCLOCK_TIME=06:00
$ ./case.submit
- 确保运行成功(见上述说明),然后将运行更改为连续运行。将其设置为重新提交 10 次,以便总共运行 11 年(包括初始年),然后重新提交案例。
$ ./xmlchange CONTINUE_RUN=TRUE
$ ./xmlchange RESUMIT=10
$ ./case.submit
7.2. 自定义数据模型输入变量和流文件
每个数据模型都可以使用自己的 namelist 进行运行时配置。
7.2.1. 数据大气层(DATM)
DATM 在数据大气层概述中详细讨论。DATM 可以通过更改其 namelist 输入文件或流文件进行用户自定义。DATM 的 namelist 文件是 datm_in(或 datm_in_NNN 用于多个实例)。
-
要修改 datm_in 或 datm_in_NNN,为用户希>望添加到
$CASEROOT
中的 user_nl_datm 文件或 user_nl_datm_NNN 文件末尾的 namelist 变更,添加相应的关键字/值对。 -
要修改 DATM 流文件的内容,首先运行 preview_namelists 列出 CaseDocs/目录中的 streams.txt 文件。然后,在同一目录中:
-
为文件添加前缀“user_”并复制。
$ cp datm.streams.txt.<extension> user_datm.streams.txt.<extension>
-
更改文件权限使其可写。
$ chmod 644 user_datm.streams.txt<extension>
-
编辑 user_datm.streams.txt.* 文件。
-
示例
如果流 txt 文件是 datm.streams.txt.CORE2_NYF.GISS,修改后的副本应该是 user_datm.streams.txt.CORE2_NYF.GISS。在再次调用 preview_namelists 后,你的修改应该会出现在 CaseDocs/datm.streams.txt.CORE2_NYF.GISS 中。
7.2.2. 数据海洋 (DOCN)
DOCN 在数据海洋概述中详细讨论(当前链接已损坏)。DOCN 可以通过更改其 namelist 输入或其流文件进行用户自定义。DOCN 的 namelist 文件是 docn_in(或 docn_in_NNN 用于多个实例)。
-
要修改 docn_in 或 docn_in_NNN,在文件末尾的
$CASEROOT
处添加您想要进行的 namelist 更改的适当关键字/值对。 -
要修改 DOCN 流文件的内容,首先运行 preview_namelists 列出 CaseDocs/ 目录中的 streams.txt 文件。然后在同一目录中:
-
为文件添加前缀“user_”并复制。
$ cp docn.streams.txt.<extension> user_docn.streams.txt.<extension>
-
更改文件权限使其可写。
$ chmod 644 user_docn.streams.txt<extension>
-
编辑 user_docn.streams.txt.* 文件。
-
示例
例如,如果流文本文件是 docn.stream.txt.prescribed,修改后的副本应该是 user_docn.streams.txt.prescribed。更改此文件后,再次调用 preview_namelists,您的修改将出现在 CaseDocs/docn.streams.txt.prescribed 中。
7.2.3. 数据海冰 (DICE)
DICE 在数据海冰概述中详细讨论(当前链接已损坏)。DICE 可以通过更改其 namelist 输入或其流文件进行用户自定义。DICE 的 namelist 文件是 dice_in (对于多个实例是 dice_in_NNN ),其值可以通过编辑 $CASEROOT
文件 user_nl_dice(对于多个实例是 user_nl_dice_NNN )进行更改。
-
要修改 dice_in 或 dice_in_NNN,在文件末尾的
$CASEROOT
处添加您希望进行的 namelist 更改的适当关键字/值对。 -
要修改 DICE 流文件的内容,首先运行 preview_namelists 以列出 CaseDocs/ 目录中的 streams.txt 文件。然后,在同一目录中:
-
为文件添加前缀“user_”并复制。
$ cp dice.streams.txt.<extension> user_dice.streams.txt.<extension>
-
更改文件权限使其可写。
$ chmod 644 user_dice.streams.txt<extension>
-
编辑 user_dice.streams.txt.* 文件。
-
7.2.4. 数据陆地 (DLND)
DLND 在数据陆地概述中有详细讨论(链接当前已损坏)。DLND 可以通过更改其命名列表输入或其流文件进行用户自定义。DLND 的命名列表文件是 dlnd_in (对于多个实例是 dlnd_in_NNN ),其值可以通过编辑 $CASEROOT
文件 user_nl_dlnd (对于多个实例是 user_nl_dlnd_NNN )来更改。
-
要修改 dlnd_in 或 dlnd_in_NNN,在
$CASEROOT
文件末尾添加您想要进行的命名列表更改的适当关键字/值对。 -
要修改 DLND 流文件的内容,首先运行 preview_namelists 列出 CaseDocs/ 目录中的 streams.txt 文件。然后在同一目录下:
-
为文件添加前缀“user_”并复制。
$ cp dlnd.streams.txt.<extension> user_dlnd.streams.txt.<extension>
-
更改文件权限使其可写。
$ chmod 644 user_dlnd.streams.txt<extension>
-
编辑 user_dlnd.streams.txt.*文件。
-
7.2.5. 数据河流 (DROF)
DROF 在数据河流概述中有详细讨论(当前链接已损坏)。DROF 可以通过更改其 namelist 输入或其流文件进行用户自定义。DROF 的 namelist 文件是 drof_in (对于多个实例是 drof_in_NNN ),其值可以通过编辑 $CASEROOT
文件 user_nl_drof (对于多个实例是 user_nl_drof_NNN )来更改。
-
要修改 drof_in 或 drof_in_NNN,在
$CASEROOT
文件末尾添加您想要进行的 namelist 更改的相应关键字/值对。 -
要修改 DROF 流文件的 contents,首先运行 preview_namelists 以列出 CaseDocs/ 目录中的 streams.txt 文件。然后,在同一目录中:
-
为文件添加前缀“user_”并复制。
$ cp drof.streams.txt.<extension> user_drof.streams.txt.<extension>
-
更改文件权限使其可写。
$ chmod 644 user_drof.streams.txt<extension>
-
编辑 user_drof.streams.txt.* 文件。
-
7.3. 自定义 CESM 特定活动组件的 namelist 设置
7.3.1. CAM
CIME 调用 $SRCROOT/components/cam/cime_config/buildnml 来生成 CAM 的 namelist 变量。
CAM-specific 的 CIME xml 变量设置在 $SRCROOT/components/cam/cime_config/config_component.xml 中,并由 CAM 的 buildnml 脚本用来生成 namelist。
有关 namelist 设置的完整文档,请参阅 CAM namelist 变量。
要修改 CAM 的 namelist 设置,在 $CASEROOT/user_nl_cam 文件的末尾添加相应的关键字/值对。(参见该文件顶部的每个文件的文档。)
例如,要将太阳常数改为 1363.27,修改 user_nl_cam 文件,在末尾添加以下行:
solar_const=1363.27
要查看结果,调用 preview_namelists 并验证新值出现在 CaseDocs/atm_in 中。
7.3.2. CLM
CIME 调用 $SRCROOT/components/clm/cime_config/buildnml 来生成 CLM 的 namelist 变量。
CLM-specific的 CIME xml 变量设置在 $SRCROOT/components/clm/cime_config/config_component.xml 中,并由 CLM 的 buildnml 脚本用来生成 namelist。
有关 namelist 设置的完整文档,请参阅 CLM namelist 变量。
要修改 CLM namelist 设置,在 $CASEROOT/user_nl_clm 文件的末尾添加相应的关键字/值对。
要查看结果,调用 preview_namelists 并验证更改是否正确显示在 CaseDocs/lnd_in 中。
7.3.3. MOSART
CIME 调用 $SRCROOT/components/mosart/cime_config/buildnml 来生成 MOSART namelist 变量。
要修改 MOSART namelist 设置,在 $CASEROOT/user_nl_rtm 文件的末尾添加相应的关键字/值对。
要查看您更改的结果,请调用 preview_namelists 并验证更改是否正确显示在 CaseDocs/rof_in 中。
7.3.4. CICE
CIME 调用 $SRCROOT/components/cice/cime_config/buildnml 来生成 CICE namelist 变量。
有关 namelist 设置的完整文档,请参阅 CICE namelist 变量。
要修改 CICE 的 namelist 设置,在 $CASEROOT/user_nl_cice 文件的末尾添加相应的关键字/值对。(请参阅该文件顶部的每个文件的文档。)要查看您的更改结果,调用 preview_namelists 并验证更改是否正确显示在 CaseDocs/ice_in 中。
此外,case.setup 在 env_build.xml 中创建 CICE 的编译时块分解变量。
7.3.5. POP2
CIME 调用 $SRCROOT/components/pop2/cime_config/buildnml 来生成 POP2 的 namelist 变量。
namelist 设置的完整文档,请参阅 POP2 namelist 变量。
要修改 POP2 namelist 设置,在 $CASEROOT/user_nl_pop2 文件的末尾添加相应的关键字/值对。(请参阅该文件顶部的每个文件的文档。)要查看您的更改结果,调用 preview_namelists 并验证更改是否正确显示在 CaseDocs/ocn_in 中。
7.3.6. CISM
请参阅 CISM namelist 变量,以了解 CISM 运行时 namelist 变量的完整描述。这包括在 cism_in 和 cism.config 中出现的变量。
要修改这些设置中的任何一项,请在 user_nl_cism 文件末尾添加相应的关键字/值对。(请参阅该文件顶部的每个文件的文档。)请注意,在 cism_in 中出现的变量和在 cism.config 中出现的变量之间没有区别:只需在 user_nl_cism 中添加一个新的变量设置,它就会被添加到 cism_in 或 cism.config 的适当位置。要查看您的更改结果,请调用 preview_namelists 并验证更改是否正确显示在 CaseDocs/cism_in 和 CaseDocs/cism.config 中。
一些 CISM 运行时设置是通过 env_run.xml 设置的,如 CISM 运行时变量文档所述。