cd /nuist/u/home/******/cesm1_2_2_new/scripts/ccsm_utils/Machines
第一步,vi config_machines.xml,制造一个叫做wyq的mach:编辑一大段如下,可以更改里面叫做usermachine的机器,里面的其他的机器都是在别的地方的大型机:
<machine MACH="wyq">
<DESC>IBM HPC Platform,OS is LINUX, 12 pes/node,batch system is PBS</DESC> <!-- can be anything -->
<OS>LINUX</OS> <!-- LINUX,Darwin,CNL,AIX,BGL,BGP -->
<COMPILERS>intel,pgi,gnu</COMPILERS> <!-- intel,ibm,pgi,pathscale,gnu,cray,lahey -->
<COMPILER>intel</COMPILER> <!-- intel,ibm,pgi,pathscale,gnu,cray,lahey -->
<MPILIBS>mpich,openmpi</MPILIBS> <!-- openmpi, mpich, ibm, mpi-serial -->
<MPILIB>mpich</MPILIB> <!-- openmpi, mpich, ibm, mpi-serial -->
<CESMSCRATCHROOT>/nuist/scratch/******/cesm1_2_2_new/$CASE</CESMSCRATCHROOT> <!-- complete path to the 'scratch' directory -->
<RUNDIR>/nuist/scratch/*****/cesm1_2_2_new/$CASE/run</RUNDIR> <!-- complete path to the run directory -->
<EXEROOT>/nuist/scratch/*****/cesm1_2_2_new/$CASE/exe</EXEROOT> <!-- complete path to the build directory -->
<DIN_LOC_ROOT>/nuist/scratch/*****/inputdata_yum</DIN_LOC_ROOT> <!-- complete path to the inputdata directory -->
<DIN_LOC_ROOT_CLMFORC>DIN_LOC_ROOT_CLMFORC</DIN_LOC_ROOT_CLMFORC> <!-- path to the optional forcing data for CLM (for CRUNCEP forcing) -->
<DOUT_S>FALSE</DOUT_S> <!-- logical for short term archiving -->
<DOUT_S_ROOT>USERDEFINED_optional_run</DOUT_S_ROOT> <!-- complete path to a short term archiving directory -->
<DOUT_L_MSROOT>USERDEFINED_optional_run</DOUT_L_MSROOT> <!-- complete path to a long term archiving directory -->
<CCSM_BASELINE>USERDEFINED_optional_run</CCSM_BASELINE> <!-- where the cesm testing scripts write and read baseline results -->
<CCSM_CPRNC>USERDEFINED_optional_test</CCSM_CPRNC> <!-- path to the cprnc tool used to compare netcdf history files in testing -->
<BATCHQUERY>qstat</BATCHQUERY>
<BATCHSUBMIT>qsub</BATCHSUBMIT>
<SUPPORTED_BY>USERDEFINED_optional</SUPPORTED_BY>
<GMAKE_J>12</GMAKE_J>
<MAX_TASKS_PER_NODE>12</MAX_TASKS_PER_NODE>
</machine>
第二步:vi config_compilers.xml:
<compiler MACH="wyq">
<NETCDF_PATH> /nuist/p/public/app/netcdf/4.3.0/intel/16.0.1</NETCDF_PATH>
<PNETCDF_PATH></PNETCDF_PATH>
<ADD_SLIBS>-L/nuist/p/public/app/netcdf/4.3.0/intel/16.0.1/lib -lnetcdff -L/nuist/p/public/app/lapack/3.3.1/intel/16.0.1/lib/ -llapack -lblas -ltmglib</ADD_SLIBS>
<ADD_CPPDEFS></ADD_CPPDEFS>
<CONFIG_ARGS></CONFIG_ARGS>
<ESMF_LIBDIR></ESMF_LIBDIR>
<MPI_LIB_NAME>mpich</MPI_LIB_NAME>
<MPI_PATH>/nuist/p/public/app/mvapich2/2.0b/intel/16.0.1</MPI_PATH>
</compiler>
第三步:cp env_mach_specific.userdefinedenv_mach_specific.nuist
就是生成一个叫做env_mach_specific.wyq的文件,我的叫做.wyq是因为我的模式机器machine的名字就是wyq,可以取别的名字,比如nuist_123等等以你的名字命名的机器。我的这个文件如下:
#! /bin/csh -f
# Mach: nuist
source /etc/profile.d/modules.csh >&/dev/null
module purge
# The following sets the environment variables MPI_ROOT and MPICH_PATH
if ( $COMPILER == "intel" ) then
module load intel/16.0.1
endif
if ( "$MPILIB" == "mpich" ) then
module load mvapich2/2.0b
endif
# The following sets the environment variable NETCDF
module load netcdf/4.3.0
# The following sets the environment variable hdf5
module load hdf5/1.8.11
# The following sets the environment variable CMake
module load cmake/2.8.12.1
module list
第四步:cp mkbatch.userdefinedmkbatch.wyq,就是生成一个.wyq的文件,如下:
#! /bin/csh -f
#################################################################################
if ($PHASE == set_batch) then
#################################################################################
source ./Tools/ccsm_getenv || exit -1
set ntasks = `${CASEROOT}/Tools/taskmaker.pl -sumonly`
set maxthrds = `${CASEROOT}/Tools/taskmaker.pl -maxthrds`
@ nodes = $ntasks / ${MAX_TASKS_PER_NODE}
if ( $ntasks % ${MAX_TASKS_PER_NODE} > 0) then
@ nodes = $nodes + 1
@ ntasks = $nodes * ${MAX_TASKS_PER_NODE}
endif
@ taskpernode = ${MAX_TASKS_PER_NODE} / ${maxthrds}
set qname = batch
set tlimit = "10:00:00"
#--- Job name is first fifteen characters of case name ---
set jobname = `echo ${CASE} | cut -c1-15`
if ($?TESTMODE) then
set file = $CASEROOT/${CASE}.test
else
set file = $CASEROOT/${CASE}.run
endif
cat >! $file << EOF1
#!/bin/csh -f
总结:更改/nuist/u/home/*****/cesm1_2_2_new/scripts/ccsm_utils/Machines路径下的四个文件:
config_machines.xml
config_compilers.xml
env_mach_specific.wyq
mkbatch.wyq
************************************我是分界线****上述是移植,接下来就是要运行case,出来结果了则说明模式是调通了,我只用CLM 如果要用别的,比如CAM社么的具体分析,*****************************************************
在以上的基础上运行case部分(大体是四个步骤:create,setup, build, run; 运行命令在linux下面就是输入./啥啥啥,有的时候你没有executable的权限所以先要用chmod这个命令):
1) 首先,cd /nuist/u/home/*****/cesm1_2_2_new/scripts,进入源码包,
./create_newcase -case /nuist/scratch/*****/cesm1_2_2_new/mycase1 -res f19_g16 -compset ICLM45CNDV -mach wyq
(解释:这个命令的意思就是在/nuist/scratch/*****/cesm1_2_2_new/mycase1这个路径下建立一个case,case的名字是ICLM45CNDV,case的分辨率是f19_g16,建立case使用的机器是wyq;
注意我用的这个case是ICLM45CNDV,需要的数据比较多,在 build的时候下载inputdata需要时间很长,你可以选择别的简单点的case测试一下,网站如上,可以测试一个X,这个case测试起来比较快;我也用过这个命令:create_newcase-case /nuist/scratch/******/cesm1_2_2_new/caseyxy/ -compset B1850C5 -resT31_g37 -mach nuist; 这个case挺快的)
2) 然后进入到case所在的目录,即输入cd /nuist/scratch/*****/cesm1_2_2_new/mycase1
看一下这几个文件(vi 你想看的文件名)(或者用记事本或者编辑器打开都行)
① vi env_build.xml,这个文档里面是输入输出文件的,inputdata数据的位置啊,以及rundirectoryEXEROOT的位置的,这个不用改,在前面已经设置过了的
② vi env_mach_pes.xml ,这个要按照你运行的case具体修改一下,一般情况选择默认就行了,我改了:NTASKS_ATM=72N TASKS_LND=72,意是关于核子的配置,这个不怎么明白;虽然可以随时编辑这个文件,在build命令调用之后这个文件就不能够再被编辑了。
然后./cesm_setup(如果你setup之后了想要再改一下上面的哪个文件的,就是要输入一个clean命令这个命令是./cesm_setup–clean)
3)./mycase1.build
如果这个build不想要了还有命令./mycase1.clean_build
4)vi env_run.xml
<entry id="STOP_OPTION" value="nyears" />(是默认的是ndays,按自己情况更改)
<entry id="STOP_N" value="5" />
REST_OPTION" value="$STOP_OPTION" />
<entry id="REST_N" value="10" />(这个意思是每10年输出一个restart文件,必须有,看手册)
<entry id="DIN_LOC_ROOT_CLMFORC" value="/nuist/scratch/******/inputdata/atm/datm7/atm_forcing.datm7.CMIP5_ACCESS10" />
<entry id="CONTINUE_RUN" value="FALSE" />(如果在case运行过程中,大型机突然掉了,那再运行就把这个设置为TRUE,别的不用改)
注:.xml文件可以用vi命令来编辑(不懂百度),也可以用./xmlchange这个工具来更改,例如输入:
./xmlchangeCONTINUE_RUN=TRUE
5).然后vi user_nl_clm添加上:
hist_nhtfrq=0
hist_mfilt = 1
再在shell里输入./preview_namelists,这样子run/lnd_in文件里面就加上了这两个设置
(hist_nhtfrq=0表示每月输出一次结果,hist_mfilt = 1表示每个结果写成一个nc文件)
注:①初始场的设置很重要,run/lnd_in里面会有finidat = ,就是指定初始场文件,
②设置初始场文件的方法是:在user_nl_clm里面写入finidat =/路径/文件名.nc ,然后再用./preview_namelists
③xml文件里CLM_FORCE_COLDSTART=off的话需要提供初始场
6)上传xml文件到case目录下面;再修改.run文件再提交文件qsub.run
①修改项目号,
②修改251行,在后面添加上; cd $CASEROOT,如下所示
if ($DOUT_S == 'TRUE') then
echo"Archiving cesm output to $DOUT_S_ROOT"
echo"Calling the short-term archiving script st_archive.sh"
cd$RUNDIR; $CASETOOLS/st_archive.sh; cd $CASEROOT
*************************************************************分界线在此********************************************
注:生成的数据没有设置short archive的话都在$RUNDIR里面,$RUNDIR里面的一些文件比如lnd_in 什么的是决定了模式真正如何运行的脚本(我的理解)
********************************************************************************************************************
模式实在是精妙博大,希望大家多多交流,多多分享~~~~~~~~~~~,我的帖子理解有误或者偏差之处请指正出来,多谢大家~~~~~~~~~