CESM2笔记——porting-新机器移植

    技术2024-11-29  16

    CESM2相比CESM1_2_2更新了很多,尤其是我要用的CAM-chem,所以打算重新porting。一开始一点也不懂自己瞎搞,一直理不清头绪,网页太多,自己看来看去抓不到重点。后来请教了一位师姐,磕磕绊绊各种弄环境、debug,弄了好久,终于测试通了第一个case,哇哇哭出来。。。这会儿来做些笔记,就记录一下最核心的流程。

    我这里是在曙光机器LASG上移植。


    step1:下载CESM2 code

    官方网址:https://escomp.github.io/CESM/release-cesm2/downloading_cesm.html

    用git clone就可以

    checkout_externals这个步骤一定要的,否则下载下来的包是不完整的。

    这里有个需要注意的地方:如果在windows环境中git clone下来的CESM2再上传到LINUX下,很多文件下下来是dos文本文件(用vi编辑器打开:set ff查看;:set ff=unix可以改为unix文件),在linux下读文件就会报错。用:set ff=unix可以把文件类型改过来,但指不定哪个读取又有问题。

    所以最好是找个linux系统再git clone。真的这样会少很多bug!


    step2: 设置环境变量: 修改.bashrc

    CESM需要很多库和环境支持。http://esmci.github.io/cime/versions/master/html/users_guide/porting-cime.html

    1. 一个MPI运行环境

    2. 编译工具:gmake,cmake

    3.netcdf库4.3版或更高版本

    因为CIME是基于python的框架,python当然是必不可少的。

    编译器intel或gnu,hdf5…这些最基本的服务器配置就不用说了。

    不过在超算中心大部分库可以用module load,下面是曙光为例我load的库。其中perl很重要,很多bug问题可能就是perl没装对。

    如果是个人机器或组内服务器,恕我不才,这些库估计我也搞不定。。。也许可以参考下这个:https://blog.csdn.net/qq_37512669/article/details/87915996


    step3: 改3个xml文件:config_machines.xml,config_compilers.xml,config_batch.xml

    tutorial里面有个special talk可以参考:http://www.cesm.ucar.edu/events/tutorials/2019/files/Specialized-edwards.pdf

    CESM2包如果已经安装到自己机器上的话,这三个xml文件位于~/cesm2/cime/config/e3sm/machines路径下

    官方文件可在这里查看:http://esmci.github.io/cime/versions/master/html/xml_files/cesm.html#cimeroot-config-cesm-machines

    config_machines.xml:用户自定义的机器描述。

    config_compilers.xml:用户自定义的编译器介绍。

    config_batch.xml:用户批处理系统介绍。

    这三个文件根据机器不同,设置也不同。需要按机器的配置来设置和多次调试(就是先进行step4,发现哪儿报错了又回来改这几个文件)。


    step4: 运行四个步骤:create case(生成), setup(设置), build(编译), run(运行)

    官方网址:https://escomp.github.io/CESM/release-cesm2/quickstart.html

    step4就到模式工作流了,流程和之前写的CESM1_2_2(https://blog.csdn.net/qq_27984679/article/details/107099940)基本是一样的,但是一些compset的名称变了,以及*.xml中的设置有变化。

    举个例子:

    ./create_newcase --case /public1/home/pku_jingli2/CESM/cesm2/cime/scripts/FCHIST --compset FCHIST --res f19_g17 --mach hpccube --compiler intel --run-unsupported cd FCHIST/ ./case.setup ./case.build

    (这里先去下inputdata,看step5)

    ./case.submit

    step5: 下载inputdata

    因为大部分的机器不能连外网,所以check_inputdata --download的功能一般用不了,需要自己去重新下载这些inputdata。

    inputdata数据网址:https://svn-ccsm-inputdata.cgd.ucar.edu/trunk/inputdata/

    在./case.build之后,在$case/Buildconf下会生成各个模块需要的input文件,在*list里面。

    用python把all_list.txt转成all_list-short.txt(去掉等号“=”和等号前面的字符)就可以得到文件网址列表

    f = open('all_list.txt', 'r') f1 = open('all_list-short.txt','w') for (num,value) in enumerate(f): print ("line number", num+1, "is:", value) head,sq,tail=value.partition('=') print ("line number", num+1, "is:", tail) f1.write(tail) f1.close() f.close()

    在linux下用wget下载比较方便:

    wget --no-check-certificate -c -i all_list-short.txt

    下完之后再上传到inputdata目录下,由于inputdata下面子目录太多,手动太麻烦而且容易出错。下面的代码就是移动文件到对应正确的目录,如果该目录不存在就先创建一个。

    f = open('all_list-short.txt', 'r') for (num,value) in enumerate(f): print ("line number", num+1, "is:", value) head,sq,tail=value.partition('inputdata/') list0=tail.strip().split('/') list1=list0[0:-1] str0='/' directory='./'+str0.join(list1) print(directory) if not os.path.exists(directory): os.makedirs(directory) filename=list0[-1].strip() if not os.path.exists(filename): print(filename+' do not exist') continue print(filename+' do exist, begin move') os.popen('mv '+filename+' '+directory) f.close()

    核心流程就是上面几个步骤,step2,3是最重要的,不过我讲的有点少,因机器而异,主要我自己也是半桶水,就是记录一下核心流程,有个概念。

    相关教程指路:

    1. CESM移植方法-记录:https://blog.csdn.net/qq_37512669/article/details/87915996(这个有记录安装各种库)

    2.CESM1.2.2移植攻略:http://bbs.06climate.com/forum.php?mod=viewthread&tid=49077(这个有推荐一个startman来安装各种库,看着蛮好的,虽然我没用过)

    Processed: 0.065, SQL: 9