Skip to Content
教程列表Cime在 Case 中自定义变量

CIME 和符合 CIME 标准的组件主要使用 Fortran 参数表来控制运行时选项。一些组件使用其他基于文本的文件来设置运行时选项。

所有符合 CIME 标准的组件使用 buildnml 脚本生成其输入变量文件,该脚本通常位于组件的 cime_config 目录(或 config_file.xml 中设置的其它位置)。buildnml 可能会调用其它脚本来完成输入文件的构建。

例如,CIME 数据大气模型(DATM)使用脚本**$CIMEROOT/components/data_comps/datm/cime_config/buildnml** 生成 namelists

您可以通过两种方式自定义模型的参数表:

  1. 通过编辑 $CASEROOT/user_nl_xxx 文件

    这些文件应通过键值对进行修改,这些键值对对应于新的 namelist 或输入数据设置。它们使用 Fortran namelist 的语法。

  2. 通过调用 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 完全耦合案例,但其他模型和案例的步骤类似。

  1. 在你的 $HOME 目录下创建一个名为 EXAMPLE_CASE 的新案例。

    $ cd $CIME/scripts $ ./create_newcase --case ~/EXAMPLE_CASE --compset B1850 --res f09_g17
  2. 通过运行 ./pelayout 检查 pe-layout。确保它适合你的机器。如果不适合,使用 xmlchange 或 pelayout 来修改你的 pe-layout。然后设置你的案例并构建可执行文件。

    $ cd ~/EXAMPLE_CASE $ ./case.setup $ ./case.build

    警告

    case.build 脚本可能是计算密集型的,可能不适合在登录节点上运行。作为替代方案,你可以将这个作业提交到交互式队列。例如,在 NCAR cheyenne 平台上,你可以使用 qcmd – ./case.build 来完成这个操作。

  3. 在你的案例目录中,设置作业运行 12 个模型月,设置 wallclock 时间,然后提交作业。

    $ ./xmlchange STOP_OPTION=nmonths $ ./xmlchange STOP_N=12 $ ./xmlchange JOB_WALLCLOCK_TIME=06:00 --subgroup case.run $ ./case.submit
  4. 确保运行成功。

    你应该在你的运行目录或通过 $DOUT_S_ROOT 设置的短期归档目录中的 cpl.log 文件末尾看到以下行或类似内容。

    (seq_mct_drv): =============== SUCCESSFUL TERMINATION OF CPL7-cesm ===============
  5. 在同一案例目录下,将案例设置为重新提交10次,使其总共运行11年(包括初始年份),然后重新提交案例。(注意:重新提交将自动将运行设置为继续运行)。

    $ ./xmlchange RESUBMIT=10 $ ./case.submit

    默认情况下,重新提交的运行不会在之前的运行完成之前提交。根据本例中配置的 10 个 1 年运行,CIME 将首先提交一个 1 年的作业,当该作业完成后,它将提交另一个 1 年的作业。任何时候队列中只有一个作业。要更改此行为,并一次性提交所有作业(使用批处理依赖关系,以便一次只运行一个作业),请使用命令:

    $ ./case.submit --resubmit-immediate

7.1.2. 设置 branch 或 hybrid 模式运行 

branch 或 hybrid 模式运行使用先前运行的初始化数据。这里是一个假设了有效负载平衡场景的示例。

  1. 设置branch 或 hybrid 模式运行的第一步是创建一个新案例。以下假设使用 CESM compset 和 resolution。
$ cd $CIMEROOT/scripts $ create_newcase --case ~/NEW_CASE --compset B1850 --res f09_g17 $ cd ~/NEW_CASE
  1. 对于 branch 模式运行,使用以下 xmlchange 命令将 NEW_CASE 设置为从 EXAMPLE_CASE 在 0001-02-01 分支。
$ ./xmlchange RUN_TYPE=branch $ ./xmlchange RUN_REFCASE=EXAMPLE_CASE $ ./xmlchange RUN_REFDATE=0001-02-01
  1. 对于 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_CASEenv_run.xml 文件应与 EXAMPLE_CASE 的文件相同,除了 $RUN_TYPE 设置。

此外,EXAMPLE_CASEuser_nl_<component> 文件引入的修改应在 NEW_CASE 中重新引入。

  1. 接下来,设置并构建 Case 的可执行文件。
$ ./case.setup $ ./case.build
  1. $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
  1. 确保运行成功(见上述说明),然后将运行更改为连续运行。将其设置为重新提交 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_indatm_in_NNN,为用户希>望添加到 $CASEROOT 中的 user_nl_datm 文件或 user_nl_datm_NNN 文件末尾的 namelist 变更,添加相应的关键字/值对。

  • 要修改 DATM 流文件的内容,首先运行 preview_namelists 列出 CaseDocs/目录中的 streams.txt 文件。然后,在同一目录中:

    1. 为文件添加前缀“user_”并复制。

      $ cp datm.streams.txt.<extension> user_datm.streams.txt.<extension>
    2. 更改文件权限使其可写。

      $ chmod 644 user_datm.streams.txt<extension>
    3. 编辑 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_indocn_in_NNN,在文件末尾的 $CASEROOT 处添加您想要进行的 namelist 更改的适当关键字/值对。

  • 要修改 DOCN 流文件的内容,首先运行 preview_namelists 列出 CaseDocs/ 目录中的 streams.txt 文件。然后在同一目录中:

    1. 为文件添加前缀“user_”并复制。

      $ cp docn.streams.txt.<extension> user_docn.streams.txt.<extension>
    2. 更改文件权限使其可写。

      $ chmod 644 user_docn.streams.txt<extension>
    3. 编辑 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_indice_in_NNN,在文件末尾的 $CASEROOT 处添加您希望进行的 namelist 更改的适当关键字/值对。

  • 要修改 DICE 流文件的内容,首先运行 preview_namelists 以列出 CaseDocs/ 目录中的 streams.txt 文件。然后,在同一目录中:

    1. 为文件添加前缀“user_”并复制。

      $ cp dice.streams.txt.<extension> user_dice.streams.txt.<extension>
    2. 更改文件权限使其可写。

      $ chmod 644 user_dice.streams.txt<extension>
    3. 编辑 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_indlnd_in_NNN,在 $CASEROOT 文件末尾添加您想要进行的命名列表更改的适当关键字/值对。

  • 要修改 DLND 流文件的内容,首先运行 preview_namelists 列出 CaseDocs/ 目录中的 streams.txt 文件。然后在同一目录下:

    1. 为文件添加前缀“user_”并复制。

      $ cp dlnd.streams.txt.<extension> user_dlnd.streams.txt.<extension>
    2. 更改文件权限使其可写。

      $ chmod 644 user_dlnd.streams.txt<extension>
    3. 编辑 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_indrof_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_incism.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 运行时变量文档所述。

Last updated on