$find ./ -name “*.F90″ |xargs cat|grep -v ^$|wc -l答案是——————————499742 居然不到50万行,比我想象要少诶…… 参考资料中还有记录空行等命令格式 http://www.cnblogs.com/fullhouse/archive/2011/07/17/2108786.html #Up to 20140815#
今天看完了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形式的观测资料强迫,而是气候态海温循环强迫。
在经历两天完全没有头绪的痛苦过程后,终于想起来去年十一月刚刚开始试着移植CESM的时候在工作站上下载的CAM Tutorial。抓过来一看,果然有physics和接口的介绍,虽然Tutorial已经是09年的了,但当时居然已经是CAM5的版本……NCAR五年前就已经转的起来CAM5的物理包了么……天河二号上转起来都这么慢,反正Tianhe-2性能指标基本都是靠Phi顶起来的,也不奇怪。扯远了。
这套tutorial的interface模块介绍写得正合我胃口,基本都是介绍CAM源码结构,运行流程的。看过Neale的Physics in CAM的Tutorial,对大致的物理过程运行流程清楚后,这个interface模块介绍的tutorial看起来还是很顺的。而且值得窃喜的三点是:
1.我居然下载了它,因为目前CESM官网上已经删除了10年以前的培训材料。当然这会有一个比较大的问题,10年之后基本都是针对CESM的,每个模块都讲,但是都讲不细致。所以已经找不到针对CAM Interface的培训资料了。我很幸运。
2.它里面举的例子居然是针对convect_deep.F90诶~就是要改你丫的嘛啊哈哈哈
3.2009年NCAR就已经用起来CAM5了诶!啊哈哈哈!
不扯了,说正题。其实就是为了记录一下vi已经linux的一些使用技巧,尤其是处理文本的时候(比如源代码)。
vi下查找
:/the_content_you_search
查找下一个用n键
#Up to 20140729#
在physics的主调用程序下查找所有的物理包,这个命令很好用。
grep call tphys*c.F90
tphys*c.F90通配了before和after coupling的两个物理包调用文件,grep这两个文件中的call语句(亮点!),因此抓出来的都是参数化过程。
#Up to 20140731#
上述语句配合管道符可以改写为
cat tpys*c.F90 | grep call
#Up to 20140802#
$find ./ -name “*.F90″ |xargs cat|grep -v ^$|wc -l答案是——————————499742 居然不到50万行,比我想象要少诶…… 参考资料中还有记录空行等命令格式 http://www.cnblogs.com/fullhouse/archive/2011/07/17/2108786.html #Up to 20140815#