一、创建例子
步骤一常用网站
完整大气模块及分辨率的说明网站:https://www.cesm.ucar.edu/models/cesm2/cesm/compsets.html
首先要知道CESM中CIME文件夹是核心文件,也就是我们所有的运行更改基本都是在这个文件夹中就能完成的。
第一步要创建例子,通过/home/pengyf20/model/my_cesm_sandbox/cime/scripts 这个路径下的create_newcase这个脚本加上例子名称,模块名称,和模式分辨率就能创建,如创建FHISH这个模块的历史大气强迫,并命名为fwhist
cd cime/scripts
./create_newcase --case fwhist --compset FWHIST --res f09_f09_mg17 --machine ibmintel
create这一步一般比较快就结束了,下一步要setup
cd fhist #要进入到你创建的例子的目录下
二、参数设置
1.查看任务数并更改
./xmlquery ATM_NTASKS,CPL_NTASKS,GLC_NTASKS,ICE_NTASKS,LND_NTASKS,OCN_NTASKS,ROF_NTASKS,WAV_NTASKS,MAX_TASKS_PER_NODE,MAX_MPITASKS_PER_NODE
./xmlchange ATM_NTASKS=-4,CPL_NTASKS=-4,GLC_NTASKS=-4,ICE_NTASKS=-4,LND_NTASKS=-4,OCN_NTASKS=-4,ROF_NTASKS=-4,WAV_NTASKS=-4,MAX_TASKS_PER_NODE=32,MAX_MPITASKS_PER_NODE=32
这里简单说一下:ATM_NTASKS=的数字是正的就是任务数,是负值就是节点数。比如以上的-4代表的是ATM这个模块使用四个节点来运行。但是每个用户的节点是有限制的,不要设置超了。
2.查看设置例子的参数并更改
#查看例子的描述
./xmlquery CASESTR
./xmlchange CASESTR=description of case
#利用./xmlquery查看下面的参数,并利用./xmlchange 做出改变
#查看 运行类型, 运行开始时间 ,结束选项 ,结束选项对应的数字 ,结束时间
./xmlquery RUN_TYPE,RUN_STARTDATE,STOP_OPTION,STOP_N,STOP_DATE
#查看 重启选项 重启数字 继续运行选项 重新提交是否继续运行
./xmlquery REST_OPTION,REST_N,CONTINUE_RUN,RESUBMIT,RESUBMIT_SETS_CONTINUE_RUN
#查看是否加速spin-up时间
./xmlquery CLM_ACCELERATED_SPINUP
以上这些常改的有RUN_TYPE,RUN_STARTDATE,STOP_OPTION ,STOP_N,STOP_DATE这几个选项。改完build之后会表现在drv_in文件中,因此也可以在drv_in中修改(cesm2中不行)
当利用xmlchange工具改完了以上参数之后,就可以setup了
./case.setup
如果你在setup之后发现你的某个东西改错了或者需要重新改的话,可以直接在利用xmlchange工具来改,改完之后执行
./case.setup --reset
3.更改namelist文件
这些namelist之后再你setup之后才会生成
建议改完上面之后就直接build,方便对照case/$casename/run目录下的atm_in来改下面的namelist
./case.build
(1)设置npr_yz
注意这里的任务数需要和上面设置的ATM_NTASKS=-4和MAX_TASKS_PER_NODE=32对应。在user_nl_cam里面加入的npr_yz=x1,x2,y1,y2,这里要满足:x1x2=y1y2=ATM_NTASKS × MAX_TASKS_PER_NODE 并且x1=y2,x2=y1
这些任务数等参数可在此处修改,利用编辑user_nl_cam,当然如果运行的其他模块就改对应的模块的nl。
经常设置的如下:
vi user_nl_cam
npr_yz = 32,4,4,32
#这句话会改变到build之后的atm_in,所以也可以在build之后在atm_in文件直接改(cesm2不行)
注意:要是改了总核数超过128,需要改一下env_mach_specific.xml文件中的num_tasks。比如说用了400个核,那这里最少改成400
(2)设置输出文件
avgflag_pertape = 'A'
这里‘A’表示的是平均值,如果要输出瞬时值则改为‘I’。可以写多个参数,这个个数和下面的输出文件个数对应。比如说写‘A’,‘I’,那么就是下面的1号文件为平均值输出,2号文件为瞬时值输出。
fexcl1 = ''
这个设置的是剔除的变量,也就是不输出的变量,这个例子中引号没东西,就说明设置成不剔除任何变量,但是在下面还是可以设置输出的变量的。
fincl1 = 'AODABSdn', 'AODBCdn', 'AODdnDUST1', 'AODdnDUST2', 'AODdnDUST3', 'AODdnMODE1', 'AODdnMODE2', 'AODdnMODE3',
'AODDUST2', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn'
输出变量对照查看以下两个网站(虽然不全能找到,但是能先应付)(https://www.cesm.ucar.edu/models/cesm1.0/cam/docs/ug5_0/hist_flds_fv_cam5.html)
(https://www.cesm.ucar.edu/models/cesm2/atmosphere/docs/ug6/hist_flds_f2000.html)
以下是我使用过程中的总结的一些命名经验:
**DDF **在底部的干沉降通量 (grav + turb)
**SF** **表面**
EVAP** **水汽**
**dn 白天和晚上的**
EXTINCT** 气溶胶消光**
FL** 长波辐射**
FS** 太阳辐射**
GS** **气相化学(湿清除)
PREC** 降水率**
RAD** **的半径(官网应该写错成sad了)
CLD** 格点box中**的平均
TM** **的柱浓度
WD** **的湿沉降垂直积分
这个fincl后面的数字代表的数几号输出文件,等号后面的是输出的变量名,请对照好变量。如果你的默认输出有好多个fincl,你想把他们写到一起,注意是否会重复,另外注意其他的写成引号中间没东西的,如下
fincl2 = ''
fincl8 = ''
而且如果是atm_in里面没有的不要写进去,不然会报错。
(3)设置输出频率和每个文件的时间
mfilt = 60 #这个是每个文件的时间,表示的是输出多少次,对应下面的参数
nhtfrq = 0 #0表示输出月均值文件,-24表示每24小时输出(负值表小时)
#上面这两句话表示输出的是月均值,没60个月(5年)输出在一个文件
改完这几项基本就可以**./case.build**
所以在这里改完之后,最好在build之后atm_in文件在检查一下是否合适。
build之后最好可以在drv_in和atm_in文件中查看已经改过的相关内容,确保无误。
./xmlquery STOP_OPTION,STOP_N,RUN_TYPE,CONTINUE_RUN,RUN_REFCASE,RUN_REFDATE,RESUBMIT,RUN_STARTDATE,RUN_REFDIR,DOUT_S,DOUT_S_ROOT,JOB_WALLCLOCK_TIME
#当运行方式为startup时,RUN_REFCASE和RUN_REFDATE不起作用,最好把GET_REFCASE设为FALSE(没有测试为TRUE的情况)。可以直接更改RUN_STARTDATE为想要开始运行的日期
一般利用这个脚本来查看文件中的设置,并利用xmlchange文件来做出更改
#在user_nl_cam文件中设置
megan_mapped_emisfctrs = .false.
./xmlquery CAM_CONFIG_OPTS
CAM_CONFIG_OPTS: -phys cam6 -age_of_air_trcs -chem waccm_tsmlt_mam4
#查询大气化学模块
所有的参数都要在scripts文件中利用以上方式或者查找对应的xml文件进行修改,在重新build,此时应该就会出现在drv_in文件中
未知待改
# PORT input data PORT的输入数据
offline_driver_infile = '/path/base_run_case.cam.h1.0001-01-01-00000.nc'
# Output the radiation data 输出辐射数据
rad_data_output=.true.
# Specify the radiation data be written to history file number 2 (rad_data will be in files with cam.h1 in their name)
rad_data_histfile_num=2
# Write out the instantaneous rad_data and radiation diagnostics(每步都计算辐射)
rad_data_avgflag = 'I'
avgflag_pertape = 'A','I'
! Make certain the radiation is called every time step
iradlw = 1
iradsw = 1
! Include radiation diagnostics
fincl2 = 'FLNT', 'FLNR','FLNS', 'FSNT','FSNR', 'FSNS'
! Output frequency
nhtfrq = 0,73
! number of time records per individual history file
mfilt = 1,5
! double precision output
ndens = 1,1
三、提交作业
#!/bin/bash
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=32
#SBATCH --job-name=testfwsc
export PATH=/home/pengyf20/tools/perl-5.16.1:$PATH
export PERL5LIB=/home/pengyf20/tools/perl-5.16.1/lib:/home/pengyf20/tools/perl-5.16.1/lib/perl5
echo $PERL5LIB
./case.submit
这里需要注意的几个地方:注释部分也是会被识别的,所以需要对应的改变几个地方:
1.需要改变nodes(节点数)和ntasks-per-node(每个节点的任务数)这两个参数,并且两个相联系的
①要注意nodes这个变量会直接影响你提交作业后你的脚本可以申请到的节点数,但是需要注意服务器上可能每个用户有节点限制,不要超过那个节点数。另外最好可以预留出一个节点,留作你跑其他程序或者创建例子的时候使用
②首先注意npr_yz=32,4,4,32就意味着是32×2=128,更改ntasks-per-node的时候,需要保证你的节点数和你的单个节点的的任务数相乘等于npr_yz计算出来的总数,也就是128.
2.最好改一下job-name,因为这个是你提交作业时显示的作业名,可以更好的区分作业。
3.export部分第一次作业的时候,复制这部分过去之后需要修改,之后就不用了
这部分可以直接从你的~/.bashrc里面去复制出来。主要是pel的环境变量。
env_run.xml几个不确定的参数说明
1.更改运行区域应该是在该文件中的397行往下
源代码路径
/home/pengyf20/model/my_cesm_sandbox/components/cam/src/