爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 95957|回复: 93

【经验分享】CLM4.5单点地表资料及单站气象驱动资料制备流程

  [复制链接]

新浪微博达人勋

发表于 2015-3-30 17:22:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zpxie 于 2015-6-5 16:04 编辑

写在前面:
对于刚接触CESM不久的初学者来说,要利用CLM4.5进行单点的模拟是个充满挑战的事情。过程还是挺痛苦的,但是一路走来,收获也不少,期间得到了诸如@彭小清 @旅行的沙丁鱼 @andrewsoong等人的大力帮助,在此一并谢过。整个地表数据及单站强迫资料制作过程大约持续了两个星期的时间,现在把整个过程中遇到的问题及我解决的方法做一个大致的介绍,希望能对以后需要做相关工作的人有所裨益。PS<由于能力有限,中间采取的方法或者解释难免存在问题,还请各位谅解。
期间经历了无数的failed,还请各位先做好心理准备O(∩_∩)O~
failed果然是successful他妈,没日没夜看了一个星期他妈终于看到successful了。
21.png
过程主要参见CESM Research Tools: CLM4 in CESM1.2.0User’s Guide Documentation 中的第二章的The File Creation Process一节和第五章的Creating your ownsingle-point/regional surface datasets和Running with your own atmosphere forcing 这两小节,建议在实践之前先熟读这几节的内容,其中第二章是对单点地表数据制作流程的详细介绍,而第五章主要是几个examples以及对气象强迫资料的一些描述。同时,部分流程需要ESMF工具的支持,需要提前安装好ESMF,ESMF安装过程自行脑补。单点Case的运行过程中需要用到lapack,也提前安装好吧,这个建议用大气所董理老师制作的packman工具安装比较方便(http://dongli.github.io/packman/)。
CLM输入数据的主要流程包括(以制作GRIDNAME为1x1_Naqu为例):
首先在.bashrc文件中输出一些需要用到的变量
export GRIDNAME=1x1_Naqu     (格点名)
export CDATE=’date +%y%m%d’   (格点文件创建时间)
export GRIDFILE= /cesm1_2_1/models/lnd/clm/tools/shared/mkmapgrids/SCRIPgrid_${GRIDNAME}_nomask_c$CDATE.nc              (SCRIP格点文件所在路径)
export MAPFILE= /cesm1.2.1/models/lnd/clm/tools/shared/mkmapdata/map_${GRIDNAME}_noocean_to_${GRIDNAME}_nomask_aave_da_$CDATE.nc
export OCNDOM=domain.ocn_noocean.nc
export ATMDOM=domain.lnd.${GRIDNAME}_noocean.nc

1. 生成SCRIP格点文件和制图文件(使用/cesm1_2_1/models/lnd/clm/tools/shared/mkmapdata中的mkmapdata.sh脚本,用户手册中提到,该脚本默认生成的是CLM4.5SCRIP格点文件和制图文件,如果要制作CLM4.0的制图文件,运行该脚本时加-p clm4_0即可);
cd /cesm1_2_1/models/lnd/clm/tools/shared/mkmapdata
./ mknoocnmap.pl –p 纬度,经度 –n 1x1_Naqu
在这里记得好像会要用到../mkmapgrids/文件下的mkscripgrid.ncl脚本,而我当时用的ncl版本为6.2.1,可能是ncl版本的缘故(在低版本的ncl中不会出现该问题),使得单点的地表数据制作不能正常运行,主要是由于fspan中的值小于或者等于1,修改情况如下:
22.png
如果所在的区域包括了海洋,你还需要专门为海洋制作SCRIP文件:
cd /cesm1_2_1/tools/mapping/gen_domain_file/src(最初是没有编译的,需要先编译)
./gen_domain -m $MAPFILE -o $OCNGRIDNAME -l $ATMGRIDNAME
./mkmapdata.sh -r $GRIDNAME -f $GRIDFILE -t regional(生成mapping files)

CESM1.2.1中的mkmapdata.sh认为当时的ESMF版本不支持--netcdf4功能(实际上现在较新的版本已经支持),因而对于支持netcdf4功能的netcdf版本进行了限制,中指执行。修改了源代码。如图所示(将exit 5所在行注释掉,是不是有点简单粗暴)
23.png

2. 生成domain文件(使用/cesm1_2_1/tools/mapping/gen_domain_files中的脚本,用户手册中提到,该脚本默认生成的是CLM4.5domain文件,如果要制作CLM4.0的制图文件,运行该脚本时加-p clm4_0即可);
cd /cesm1_2_1/tools/mapping/gen_domain_file/src(最初是没有编译的,需要先编译)
gamke
我当时在gmake这一步编译没有通过,查看scr文件中的Makefile代码时发现是因为Makefile没有链接至netcdf库文件,这可能是我netcdf版本比较高的缘故,从4.1.3版本之后,连接netcdf库需要加上-lnetcdf或者-lnetcdff,其中-lnetcdf与-lnetcdff的区别在于The extra 'f' in the -netcdffrefers to the fortran library, whereas -lnetcdf is the c library,修改之后编译就能通过了,遇到跟netcdf问题时可以尝试着试一试。

Makefile修改前:
24.png
Makefile修改后:
25.png
cd ..
./gen_domain -m $MAPFILE -o$OCNDOM -l $ATMDOM

3. 生成地表数据(使用/cesm1_2_1/models/lnd/clm/tools/clm4_5/mksurfdata_map中的脚本,在这里,CLM4.0CLM4.5地表数据生成的脚本是分开的,按需选取即可);
cd /cesm1_2_1/models/lnd/clm/tools/clm4_5/mksurfdata_map/src
gmake
cd ..
mksurfdata.pl -r usrspec -usr_gname $GRIDNAME -usr_gdate $CDATE > log.out
运行后,如果目录下:log.out文件末尾出现1. log.out文件中最后有” 1. log.out文件中最后有” Successfully created fsurdatfiles”出现,并且存在surfdata_1x1_Naqu_simyr2000.nc文件,则表示地表数据生成成功,将其复制到/data/cesm/lnd/clm2/surfdata_map(CESM输入数据所在路径)

4. 制作适用于CLM4.5的强迫数据。
这里的关键是强迫数据的时间维(time),特别的关键,强迫数据制作的成败在于此。我当时就是活生生的卡在这里好几天。主要出的问题在time的间隔选取(驱动数据1小时应为1/24,半小时应为1/48,依次类推),没有在全局熟悉中添加@conversion=”CF-1.0”。最好的解决办法是通过参照模式中自带的单点驱动数据来制作。


评分

参与人数 6金钱 +50 贡献 +4 收起 理由
模式模式最爱你 + 1 赞一个!
wuk + 2 很给力!
yupo_smart + 5 很给力!
zhangqh + 2 赞一个!
雷子 + 20 + 2 赞一个!
逸儿~~ + 20 + 2 赞一个!

查看全部评分

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

新浪微博达人勋

发表于 2019-3-11 16:55:59 | 显示全部楼层
谢谢楼主的分享,请问你说的大气强迫数据中的time间隔是在哪里设置的?我用的是@lhaikun@163.com提供的matlab脚本,上面并没有提供时间间隔这个设置,同时也没有添加@conversion=”CF-1.0”,会影响运行吗?
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2015-4-24 08:19:46 | 显示全部楼层
Ruby 发表于 2015-4-23 09:44
楼主在做区域的地表资料没?

区域的单点的都坐了 区域跟单点的差不多 不过要设置好这几个变量
export CENLON=105                          #区域中心点的经度
export CENLAT=35                           #区域中心点的纬度
export DX=70                               #区域经度跨度
export NX=700                              #经向格点数量
export DY=40                               #区域纬度跨度
export NY=400                              #纬向格点数量
然后./mknoocnmap.pl -p $CENLAT,$CENLON -n $GRIDNAME -dy $DY -ny $NY -dx $DX
其他的都一样  不过cesm1.2.1 做区域的时候有个小bug,输入的纬向格点个数跟经向格点个数反了,结果导致用制作的surfdata来运行时提示输入的维度跟clm要求的维度不一致,这里需要注意一下。
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2015-3-31 15:35:55 | 显示全部楼层
学习了 谢谢分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-3-31 21:30:29 | 显示全部楼层
huaqing 发表于 2015-3-31 15:35
学习了 谢谢分享

互相学习 相互交流
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-6 20:14:49 | 显示全部楼层
{:5_213:}超级赞!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-4-22 18:52:32 | 显示全部楼层
本帖最后由 okgreatok 于 2015-4-22 18:57 编辑

请教下,这个过程是不是驱动数据时自己的,剩下的数据时用自带文件生成的? 区域和单点的数据制备过程是不是都要经过这些步骤?谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-4-23 08:02:42 | 显示全部楼层
okgreatok 发表于 2015-4-22 18:52
请教下,这个过程是不是驱动数据时自己的,剩下的数据时用自带文件生成的? 区域和单点的数据制备过程是不 ...

驱动数据是自己的,地表数据是自己用CLM自带的Tools制作的。。区域和单点的制备过程都差不多
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-23 09:44:55 | 显示全部楼层
楼主在做区域的地表资料没?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-23 16:23:08 | 显示全部楼层
楼主好棒,我好好学吧哎
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-23 16:42:37 | 显示全部楼层
本帖最后由 okgreatok 于 2015-4-23 16:50 编辑
zpxie 发表于 2015-4-23 08:02
驱动数据是自己的,地表数据是自己用CLM自带的Tools制作的。。区域和单点的制备过程都差不多

好的,非常感谢,再请教下你,那esmf在这个过程中相当于是将表面数据插值成所需的分辨率,还是相当于只是从表面数据抠出所需单点或者区域的掩膜?还是其他作用?谢谢哈
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-23 18:03:06 | 显示全部楼层
居然要贡献,不要这么对俺,跪求
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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