登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 zpxie 于 2015-6-5 16:04 编辑
写在前面: 对于刚接触CESM不久的初学者来说,要利用CLM4.5进行单点的模拟是个充满挑战的事情。过程还是挺痛苦的,但是一路走来,收获也不少,期间得到了诸如@彭小清 @旅行的沙丁鱼 @andrewsoong等人的大力帮助,在此一并谢过。整个地表数据及单站强迫资料制作过程大约持续了两个星期的时间,现在把整个过程中遇到的问题及我解决的方法做一个大致的介绍,希望能对以后需要做相关工作的人有所裨益。PS<由于能力有限,中间采取的方法或者解释难免存在问题,还请各位谅解。 期间经历了无数的failed,还请各位先做好心理准备O(∩_∩)O~ failed果然是successful他妈,没日没夜看了一个星期他妈终于看到successful了。过程主要参见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.5的SCRIP格点文件和制图文件,如果要制作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,修改情况如下: 如果所在的区域包括了海洋,你还需要专门为海洋制作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所在行注释掉,是不是有点简单粗暴)
2. 生成domain文件(使用/cesm1_2_1/tools/mapping/gen_domain_files中的脚本,用户手册中提到,该脚本默认生成的是CLM4.5的domain文件,如果要制作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修改前: Makefile修改后: cd .. ./gen_domain -m $MAPFILE -o$OCNDOM -l $ATMDOM
3. 生成地表数据(使用/cesm1_2_1/models/lnd/clm/tools/clm4_5/mksurfdata_map中的脚本,在这里,CLM4.0跟CLM4.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”。最好的解决办法是通过参照模式中自带的单点驱动数据来制作。
|