做何老师在FGOALS上的试验,需要把加热率的输出,但是不在Master list里,要hard-coded进去。官方文档(CAM3 ug)和tutorial上都有介绍方法,不过写的都很简单,甚至连在哪一个文件里改都没有介绍。几经周折,发现大部分输出都在cam的physics包下的cam_diagnostics.F90下。预计是就把三条语句直接加在了这里,结果运行后长时间没有输出,看起来不对。
之后的思路是仿照已经在master list里的变量加入history output的方法,去查找这些非默认加入的变量,在cam_diagnostics.F90这些变量的响应位置加入对加热率的输出,结果出现了编译不通过的情况。具体错误为大致数组没有声明。
查看physpkg.F90,发现加热率在每一个物理包运行后都会被physics_update归零,所以变量应该只能在调用deep_convect后而update前进行输出,于是吧addfld和add_defalult加载cam_diagnostics文件下,而outfld加在刚刚所说的位置。目前可以输出,还没有检查输出是否有问题。
#Up to 201408071349#
回到住宿处用ncl查看,将26层全部输出,确实中高空都是有数值的,看起来问题不大。但是量级上达到0.1K/kg/s,1分钟加热6摄氏度?考虑到对流的时间尺度,或许是这样吧……等回来真正开始做试验的时候具体看看。
#Up to 201408072319#
今晚想在天河二号上把bw和aw的几个case跑起来,顺道把所有的脚本都规整一遍,以便将来自动化。
没想到困难多多。第一次编译倒是顺利,适当修改run脚本后,yhbatch却提交不了任务。回去查看mkbatch,把与PBS相关的都给干掉后,结果生成的run文件直接没有yhrun语句。无语了。好在第一次编译的程序可以通过yhrun提交任务,哪知道提交半小时一个输出也没有。情况和最初用14编译器编译时一样,节点直接down掉。查看了一下ifort -v,果然又是14编译器作怪!为什么会这样呢,环境变量里分明设置好了。
后来发现,原来之前从ln20 ssh到了ln22,返回后就出现了这个问题。而直接登陆ln20不进行ssh则不存在问题。实在是诡异……
在被上一篇(http://222.200.180.66:1234/L_Zealot/blog/wordpress/?p=64)文章中所出现的问题折腾很久后,决定不再直接转30年那么久,还是一点点先调整再说。默认转5天,为了检测,就需要把输出也调节为逐日输出。这一点在CESM的users’ guide上写的比较清楚。
比如逐日输出,标准输出变量场中加入QFLX变量,cesm_setup前将以下namelist变量的修改加入user_nl_cam
nhtfrq= -24
fincl1='QFLX'
之后采用cesm_setup可以验证namelist的修改是否正确。
假设运行5days,希望每天生成一个文件的话,加入如下语句
mfilt=1