在被上一篇(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
今天看完了Tutorial里关于Physics in CAM的视频。下载发现从2010年到2013年每一年的Tutorial释放出的pdf都差不多,但是13、12年却都没有这一场lecture的视频,这部还是从11年的resource里下到的。报告者是Neale,很年轻小伙,思维灵活,语速很快,基本跟不上,长相看起来很干练。有那么一两分像Prof. Yi Ming,当然啦,一个华人一个老外。
快讲到最后几张ppt的时候Neale吐了个槽很好玩,大概意思是我们搞Atm Model真是悲了个剧啊,我们要处理云啊你造么,各种姿态各种高度各种分布各种奇葩的云啊你造么,云里面水也有冰也有雪也有霰也有水汽还有,固液气一家三口都在里面啊你造么,都是二话不说直接扔给我们搞Atm Model的来处理啊……哪像人家Ocean Model,天天转的都是液态水,海表蒸发出水汽了,人家不要了,直接扔给大气模块;海表冻出冰了,人家也不要了,这是冰雪模块干的事……
一哂过后,想到前段时间在PNAS上看到的一篇文章,大概是说给CESM来了个Super-parameterization,看高CO2情景下的响应。所谓Super-Parameterization,实际就是在CESM的每一个大网格里都套了一个更小尺度的专门对付积云对流的模式,结果好像是发现在全球这个尺度的响应上,和CESM默认的Zhang方案有差不多的效果,说明CESM的对流参数化还是做得不错的。话说回来,Neale吐得槽以后能不能用这种类似方法来解决呢?即专门开发积云模式,然后做好接口工作套在全球模式里就可以了。广而言之,能否把参数化过程都独立成一个个的模块,由该领域的专业人员进行开发,使得这些模块独自能够运行(比如专门的边界层模式、辐射传输模式),也可以嵌入到CESM这种全球模式中。
想来想去,其实现在已经有了呀。专门的边界层模式、辐射传输模式(RRTM不就是商业公司的产品么,由于太优秀了所以被引入气象模拟……)、积云模式等等,模块化必然也是全球模式的趋势吧:CESM等已经做了大圈层的模块化,如大气模块海洋模块冰雪模块等等,下一步圈层级模块内部物理过程的模块化应该也是必须的。当然,对全球模式来说,挑战还是很多的:首先必须要出台统一的接口标准,貌似ESMF、MCT这些就是干这个的,不过不了解,也不知道委员会成员的野心大不大,能搞出一套类似通信网络OSI 7层模型这种高大上的接口标准那就牛逼了;其次还是计算的问题,如果每一个大网格点都要在次网格的尺度上去转很多小模式,那计算时间肯定会暴涨,对计算机的计算能力也是个不小挑战。
嗯~就YY这么多啦,还是要继续深入了解才行。全球模式开发越来越成为一个系统工程了,越来越向物理学中的LHC等大项目看齐了,这无疑是很好的嘛,这也应该是逐渐地把地学建立在牢靠的数学物理基础上的最佳方式了吧。
打算开始在CESM的框架下做何编老师的试验,试着从CESM的scripts出发编译F Compset,结果神奇地发现居然还需要下载数据。问题是之前已经可以通过standalone的方式运行CAM5了呀,神奇的地球。决定用standalone的方式转转,对比下到底有什么不一样。
CESM的编译方式还是遇到些阻碍,问题及解决方法记录在这里。
1.F_2000_CAM5下载数据后编译失败,编译输出目录为out-of-box设置时config_machines.xml指定的位置。解决方案:xmlchange改env_build.xml重新指定编译输出目录。通过!
2.查看env_run.xml发现rundir也是默认的,果断要改。xmlchange同时改运行时间。
3.修改user_nl_cam,加入针对CAM的namelist更改项目。最初直接把SST和CO2强迫都加这里,结果create_namelist都通过不了。还是一点点来吧。关于海温强迫的方法,standalnoe和F的方式是不一样的。参考帖子:
https://bb.cgd.ucar.edu/node/1001744
UG上有一篇讲B SST OUT, F SST IN的,里面提出要修改env_run.xml。
CO2最初只修改了cam中的co2vmr这个变量,结果CLM崩了,应该是两边CO2不匹配,standalone实在不知道怎么对CLM进行修改,F下找到响应变量修改后,运行到第四天出现sigfault。后来发现居然有一个统一变量叫CCSM_CO2_PPMV啊!坑爹,修改后没问题。
4.qsub提交任务的时候出问题,需要注意 run脚本中第一行 csh后面的-f参数需要去掉,这是最初移植的时候遗漏的问题。
以上问题最终的解决办法写在下面:
能够通过的步骤写在下面,以1999-2008变暖后的clim SST及CO2强迫为例:
$ create_newcase -case awcam5 -compset F_2000_CAM5 -res f19_f19 -mach sigon #注意$CCSMROOT/scripts已经加入PATH环境变量 $ ./xmlchange EXEROOT=`pwd`/exe #反点号括起来的pwd会被执行,其输出并同/exe输入给exeroot变量 $ ./xmlchange RUNDIR=`pwd`/exe $./cesm_setup $./awcam5.build
build后修改外强迫。
首先是CO2:
$.xmlchange CCSM_CO2_PPMV=385.59 # 2009年数据,这个变量在env_run.xml当中
再是海温,首先将总input数据链接过来,防止路径被新提供的inputdata污染,再修改响应变量。
$link_dirtree $CSMDATA ./input
$./xmlchange DIN_LOC_ROOT=pwd
/input
cp处理后的SST数据到相应位置,修改响应namelist变量,包括起止年份及文件名称。这个名字太长,建议直接vi。
$./qsub awcam5.run
此外有一点发现是,F_2000采用的不是AMIP形式的观测资料强迫,而是气候态海温循环强迫。