CESM1.0.4及CESM1.2.X移植及CLM4.5单点地表资料制备常见问题

标签:
佛学杂谈 |
从去年10月份开始,作为LINUX白痴的我开始跟CESM相识,没有美好的相知和相爱,倒是平添了无数的恶心和中断,最后,终于在@zpxie @phyocean @董理 @andrewsoong @fish 等人的无私帮助下初窥门径,在此跟大家分享一下自己中间过程中遇上的问题及解决过程。
申明:文中很多内容来自家园中的各种帖子,如有重复或者侵权,麻烦版主帮忙删除,谢谢
背景:LINUX白痴,只知道是个操作系统,其他的方面,什么鬼?
一、醉生梦死篇---.移植篇
1、系统安装
自己第一次尝试是在一台纯裸工作站上,纯裸此处需要解释一下,就是连个系统都没有全空白工作站....
所以我的第一步工作从装系统开始,那么问题来了,有Ubuntu、CentOS、RedHat、Debian、Fedora等,该怎么选,当时纠结哭了,有人说Ubuntu对模式支持不是很好,也有说Ubuntu好用的,最后综合多方意见,选择了CentOS。-----在此负责任的告诉你,只是使用WRF及CESM的话,Ubuntu和CentOS都不错,只要选择用户群大点的,总会有前人踩出不错的路子来,如果你不熟悉LINUX,请不要去尝鲜。
CentOS 7安装及使用可以参考:http://bbs.06climate.com/forum.php?mod=viewthread&tid=34599
个人不是很建议7,多人测试会出现文中所述错误,虽然我现在用的好好的,但是他的出错概率大,可以考虑6.5等版本低一点的。
2、编译环境安装
作为一台裸机,编译环境已醉
图一为CESM1.2.X的环境要求,对于linux白痴来讲,那就是噩梦,完全不知道该怎么搞,折腾了一个半月,总算成功,现在想起来,当时真勇敢。
http://bbs.06climate.com/forum.php?mod=image&aid=41636&size=300x300&key=45c187f2635fa326&nocache=yes&type=fixnone(图1)
现在介绍一个由大气所@董理老师开发的简单包管理工具:PACKMAN
介绍文档阅读地址: http://bbs.06climate.com/forum.php?mod=viewthread&tid=34505
获取及使用方法地址:http://dongli.github.io/packman/zh/documentation.html
问题反馈及解答论坛地址:https://ogx.io/project/packman
所有的编译环境都可以通过PACKMAN傻瓜式安装!
特别注意:折腾了这么久,我对LINUX的理解是,编译器是基础,先于所有的安装,一般系统自带GNU,Intel或者PGI如果大家有免费的可以使用,如果没有也不必担心,GNU完全可以编译WRF及CESM(已有伙伴亲测)
3、模式移植
模式移植其实并没有想象中的那么难,就好比在win7中安装一个程序,只不过都是傻瓜式的装好了,在LINUX中,我们只需要给它配置或者设定好相应的工具及库就好
(1)CESM1_0_4
关于CESM1.0.4的移植参照@andrewsoong的帖子:http://bbs.06climate.com/forum.php?mod=viewthread&tid=15655
其中需要注意的是:主要修改
config_machines.xml
:主要设定机器名字,原始数据存储路径;
env_machopts.XXX
:设定mpi/netcdf/编译器 的路径及库
Macros.XXX
;
mkbatch.XXX
:设定后决定最后创建case后生成的${CASE}.run
内部内容,主要修改题头mach的Machine名字及下边的运算及提交方式。注释掉exit
(2)CESM1_2_X
对比cesm1.2.x的文件发现两者是不同的,但换汤不换药,需要修改的还是4个文件,而且1.2.X的文件中都对应有说明,相对更加人性化一些。4个文件均在目录scripts/ccsm_utils/Machines下
cd
../scripts/ccsm_utils/Machines
vi
config_machines.xml
你会看到如下内容(图片2)
http://bbs.06climate.com/forum.php?mod=image&aid=41637&size=300x300&key=10600109770f931c&nocache=yes&type=fixnone(图2)
MACH
即你给机器随便取的名字
OS 一般写LINUX (注意参照解释部分写
否则之后会出错)
GMAKE_J 为你编译时候调用的核心数,一般写少一点就行,建议写个1或2
MAX_TASKS_PER_NODE <=每个节点的核心数目
vi config_compiler.xml
(图3)
http://bbs.06climate.com/forum.php?mod=image&aid=41638&size=300x300&key=d35a8df580532012&nocache=yes&type=fixnone(图3)
此文件中只需要写上你的NETCDF
及MPI的路径 以及netcdf的库文件路径,4.2及以后版本的netcdf的c及fortran的库是分开的
写库的路径的时候后边加上个 -lnetcdff -lnetcdf 即可
例子:/soft/netcdf/c_4.3.3.1_cxx_4.2.1_fortran_4.4.2/2
-L/soft/netcdf/c_4.3.3.1_cxx_4.2.1_fortran_4.4.2/2/lib -lnetcdf
-lnetcdff
/soft/mvapich
cp env_mach_specific.userdefined
env_mach_specific.XXX(XXX为你在config——machine.xml中指定的MACH的数值,此处假定为XXX)
http://bbs.06climate.com/forum.php?mod=image&aid=41639&size=300x300&key=7866d778230d4e96&nocache=yes&type=fixnone(图4)
此处主要设定内容如下
set NETCDF_PATH =
set MPI_PATH =
setenv INC_NETCDF ${NETCDF_PATH}/include
setenv LIB_NETCDF ${NETCDF_PATH}/lib
setenv INC_MPI ${MPI_PATH}/include
setenv LIB_MPI ${MPI_PATH}/lib
有兴趣的也可以不设定试一下,应该影响不大,因为CESM中的不同文件的priority不同,之前的设定中也有这方面的。
cp mkbatch.userdefined
mkbatch.XXX
这里边内容主要涉及到你build完case之后生成的run文件的内容,在此处设定好之后,你生成的run文件就跟这个基本一致,一劳永逸,需要修改的地方如下:
set qname = batch 根据自己使用大型机情况来定
set tlimit = "00:59:00"
下边提交作业方式的设定,是qsub还是bsub,具体使用自行脑补,删除一个#之后,后边的语句生效
##PBS -N ${jobname}
##PBS -q ${qname}
##PBS -l nodes=${nodes}:ppn=${taskpernode}
##PBS -l walltime=${tlimit}
##PBS -r n
##PBS -j oe
##PBS -S /bin/csh -V
##BSUB -l
nodes=${nodes}:ppn=${taskpernode}:walltime=${tlimit}
##BSUB -q ${qname}
###BSUB -k eo
###BSUB -J $CASE
###BSUB -W ${tlimit}
#limit coredumpsize 1000000
#limit stacksize unlimited
运行方式:
#mpiexec -n ${maxtasks} \$EXEROOT/cesm.exe >&!
cesm.log.\$LID
#mpirun -np ${maxtasks} \$EXEROOT/cesm.exe >&!
cesm.log.\$LID
选择一个适合自己的,去掉前边的注释即可,综合以上,移植完成。
二、死去活来篇---陆面单点地表资料制备
主要参考来源:@zpxie http://bbs.06climate.com/forum.php?mod=viewthread&tid=33764&highlight=CLM4.5
期间与@Ruby @雷子 @leo-lee @林中飘等的吐槽及讨论亦有不少帮助,感谢!
这里主要补充一下遇到的问题及解决方法:
1、ESMF安装
下载地址: https://www.earthsystemcog.org/projects/esmf/
安装方法:下载后在想安装目录解压
请先vi README
查阅readme文件,有个大致了解,从5/6两张图中我们可以看到具体安装步骤,下边也有一些参数设置的详细说明,再次不一一详述,用得到的请自行阅读,给出参考范例:
http://bbs.06climate.com/forum.php?mod=image&aid=41640&size=300x300&key=581bb3cf71e63e4e&nocache=yes&type=fixnone(图5)
http://bbs.06climate.com/forum.php?mod=image&aid=41641&size=300x300&key=eda489bfa3e1bcfe&nocache=yes&type=fixnone(图6)
######################ESMF##################################
export ESMF_DIR=/soft/esmf
export ESMF_BOPT=g
export ESMF_COMM=mvapich2
export ESMF_COMPILER=intel
export ESMF_ABI=64
export ESMF_INSTALL_PREFIX=/soft/esmf_install
export
ESMF_NETCDF=/soft/netcdf/c_4.3.3.1_cxx_4.2.1_fortran_4.4.2/2
export
ESMF_NETCDF_INCLUDE=/soft/netcdf/c_4.3.3.1_cxx_4.2.1_fortran_4.4.2/2/include
export
ESMF_NETCDF_LIBPATH=/soft/netcdf/c_4.3.3.1_cxx_4.2.1_fortran_4.4.2/2/lib
export ESMF_NETCDF_LIBS="-lnetcdf -lnetcdff"
export
ESMFBIN_PATH=/lustre/home/lkaikun/soft/esmf_install/bin/bing/Linux.intel.64.mvapich2.default(这一句是在安装完之后添加的)
以上在bashrc中设定的内容中一个是大家困惑比较多的,即ESMF_COMM=mvapich2或mpich等的选择上,此处需要用到两个方面来确定
第一,在终端输入 mpif90 -v 看出现的mpi版本,本文为例出现内容为 mpif90 for MVAPICH2 version
1.8
第二,进入mpi安装目录的bin文件夹下,查看对应的cc,fortran编译器的样子,与soft/esmf/build_config中对应你编译器的文件夹内的build_rules.mk文件内部描述相对应来确定自己填写什么。本文为例,就是查看/soft/esmf/build_config/Linux.intel.default下的build_rules.mk对应
ifeq ($(ESMF_COMM),mvapich2)
# Mvapich2
---------------------------------------------------
ESMF_F90DEFAULT = mpif90
ESMF_CXXDEFAULT = mpicxx
ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
else
ifeq ($(ESMF_COMM),intelmpi)
设定好之后就可以参照步骤一步一步进行,非常方便。
另外值得一提的是,建议安装最新版本6.3.0rp1
同时对应得NCL也安装最新版,如果NCL版本过低,你用命令查看ESMF版本的时候显示的版本可能不正确,武大同学亲测.....
2、地表数据制作
(1)zpxie在文中提到的“过程主要参见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
这两小节”强烈建议阅读,zpxie的行文思路与手册中是一致的,手册阅读还是很重要的。
(2)第一步生成格点和制图文件时候有一步是这样的
./mkmapdata.sh -r $GRIDNAME -f $GRIDFILE -t
regional(生成mapping files)
其中最后一个文件的计算生成对计算机单核算力要求比较高,输入文件为5.6G,输出文件12G左右,需要提交到计算节点进行,由于计算机性能不同,计算时间也不同,如果提交到计算节点仍然无法解决,请参照下载数据网站上的README.UGRID_1km-merge-10min_HYDRO1K-merge-nomask_c130402文件,其中提到的直接计算方案:
/glade/u/home/peggyl/bin/ESMF_RegridWeightGen -s $source_gridfile
-d $dest_gridfile -w $mapname -m conserve --src_type UGRID
--src_meshname landmesh -i --netcdf4
详情请自行参阅阅读
(3)第二步生成domain文件之前需要先在tools/mapping/gen_domain_file/src下进行gmake编译,参照图7手册中例子
http://bbs.06climate.com/forum.php?mod=image&aid=41642&size=300x300&key=41cefd2ef0cceaa5&nocache=yes&type=fixnone(图7)
我们需要先进行../../../scripts/ccsm_utils/Machines/configure -mach XXX
-compiler
intel,这里如果遇到错误如图8或者图9,原因是我们的perl版本太高了,建议换成5.12版本的(5.14也可以,但是后边会提示5.14即将废弃之前的一种方式如图9.1,总是提示很烦,所以建议5.12)
http://bbs.06climate.com/forum.php?mod=image&aid=41643&size=300x300&key=9ad1b66d45acfc6a&nocache=yes&type=fixnone(图8)
http://bbs.06climate.com/forum.php?mod=image&aid=41645&size=300x300&key=02ad51932c9698ad&nocache=yes&type=fixnone(图9)
http://bbs.06climate.com/forum.php?mod=image&aid=41644&size=300x300&key=340cd221642e67bb&nocache=yes&type=fixnone(图9.1)
(4)制作domain文件理论上应该很顺利,但是如果遇上图10错误(图11为错误原因),那么原因可能是你在config_machine.xml中的OS没有按照要求写所致,楼主就是这样,当然,具体问题还是要具体分析,打开报错,仔细查看。
http://bbs.06climate.com/forum.php?mod=image&aid=41647&size=300x300&key=57b6c1bfd4cc5f70&nocache=yes&type=fixnone(图10)
http://bbs.06climate.com/forum.php?mod=image&aid=41646&size=300x300&key=925d45e61ebe304c&nocache=yes&type=fixnone(图11)
(5)之后一步生成地表数据,直接运行gmake会出现图12错误,寻找错因打开makefile.commom,我们发现它里边没有设置NETCDF相关内容,具体可参照第二步中makefile对NETCDF设定,在此不赘述。
http://bbs.06climate.com/forum.php?mod=image&aid=41648&size=300x300&key=296444d5638c8615&nocache=yes&type=fixnone
至此为止,你的地表数据就造好了,后边的路楼主还在继续探究,希望大家一起讨论
另外:如何run及进行实验设计一定要参照手册,虽说英文读起来很不爽,但是,师太,既然入行了,就从了老衲吧http://imgstore04.cdn.sogou.com/app/a/100520032/8804404059627807918