爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 40890|回复: 4

[cesm] 关于namelist的一点儿经验

[复制链接]

新浪微博达人勋

发表于 2018-5-14 22:37:14 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 packard 于 2018-7-29 03:53 编辑

应版主建议,现翻译成中文。CESM是一个高度包装的模式,很多设置都是经过几重程序/包装,才解释落实成为最终的底层设置。而我觉得关于这几重程序/包装的说明,即使是英文的,也相对欠缺,于是自己写了这个短文,总结这方面,以及其他相关知识。以下基于CESM1.1.1,其他版本可能有些出入。

Namelist是什么?

Namelist这里指Fortran通过NAMELIST语法读入的文件。很多数值模式(包括CESM)都使用namelist来作参数修改,而不必重新编译模式。Namelist一般长这样:
  1. &GROUP_NAME
  2.   char_variable = "a char variable",
  3.   logical_variable = .true.,
  4.   real_variable = 12.3,
  5.   int_array = 1, 2, 3, 4,
  6. /
复制代码

更多关于Fortran namelist可以看:链接1链接2链接3

CESM默认如何生成namelist?

只有$RUNDIR/*_in 是传统意义下,直接被Fortran模式读入的底层namelist。但模式设计者并不建议直接修改这些底层namelist,而是建议通过 user_nl_*env_*.xml 来间接修改。这个间接生成底层namelist的过程如下:

模式提交前:
  • cesm_setup $CASE.build 都调用 preview_namelists
  • preview_namelists
    调用 Buildconf/$comp.buildnml.csh
    *_in 拷贝至 CaseDocs/
  • Buildconf/$comp.buildnml.csh
    调用 $CCSMROOT/models/**/bld/build-namelist 来生成 Buildconf/*conf/*_in
    *_in 拷贝至 $RUNDIR (覆盖)
  • build-namelist
    输入 user_nl_* 作为 “infile”
    写出 Buildconf/*conf/*_in Buildconf/*.input_data_list

模式提交时:
  • $CASE.submit 提交 $CASE.run
  • $CASE.run 调用 preview_namelists
  • preview_namelists 进行跟上面一样的操作


如何修改CESM的namelist?

如果可以,通过修改 user_nl_*env_*.xml
比如:./xmlchange SSTICE_DATA_FILENAME=/path/to/new_sst.nc

如果前面行不通,手动修改$RUNDIR/*_in ,然后把Buildconf/$comp.buildnml.csh 中的对应拷贝(覆盖)语句注释掉。

提示:
  • grep -Ev '^\s*$|^\s*!' user_nl_* 可以显示 user_nl_* 中的所有非空非注释语句(解释在http://bbs.06climate.com/home.ph ... 401&do=blog&id=3855
  • ./preview_namelists 可以更新 namelist (和 input_data_list)
  • grep '' Buildconf/*.input_data_list 可以列出所有input 数据
  • DIN_LOC_ROOT=`./xmlquery -valonly -silent DIN_LOC_ROOT`
    ./check_input_data -inputdata $DIN_LOC_ROOT -check
    可以检查input 数据
  • drv_in中 &seq_infodata_inparm 的部分会写出到 $RUNDIR/cpl.log.$LID,可供检查
  • 建议比较一下默认的 namelist 和修改后 namelist
  • 有时,user_nl_* 不是逐句解读的,而是可以出现“按下葫芦起了瓢”的一些副作用。比如指定prescribed_ozone_file 时,关于prescribed_ozone_cycle_yr, prescribed_ozone_name等等的语句会被CESM自作聪明的省略(models/atm/cam/bld/build-namelist 第954行)。所以改prescribed_ozone_file的话,要同时手动指定所有几个ozone的参数,并且按上一点提示,比较默认和修改后的namelist 检查一下。
  • 不要修改 CaseDocs/ 或者 Buildconf/ 下的namelist,他们每次会被覆盖,以及不被Fortran模式读入。


参考:

评分

参与人数 1金钱 +20 贡献 +5 收起 理由
lhaikun@163.com + 20 + 5 感谢分享

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-5-24 00:04:17 | 显示全部楼层
lhaikun@163.com 发表于 2018-5-15 08:27
用中文简单写写提要,然后附出具体章节的内容感觉会更浅显易懂,很多时候大家不懂,是因为在手册上找不到具 ...

谢谢版主建议。现已翻译成中文,并且加了个引言。
我第一个学的模式是WRF,这5年下来习惯了比较直接的namelist修改。最近开始接触CESM,遇到这么多层包装、自作聪明的模式,有些不习惯。找手册的话,也总觉得没把这方面的包装写清楚。现在翻译成中文,并且加上引言后,希望大家会比较容易吸收理解。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-15 08:27:24 | 显示全部楼层
用中文简单写写提要,然后附出具体章节的内容感觉会更浅显易懂,很多时候大家不懂,是因为在手册上找不到具体的操作指南,如果都换成中文的操作手册,我想大家应该就都会了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-12-22 19:20:35 | 显示全部楼层
想请教一下我跑得compset是BHISTC5,想要打开co2_cycle应该怎么操作呢?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-5-3 16:11:57 | 显示全部楼层
谢谢楼主,很独特的教学~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表