情景提要
1. 中断之后,重启模型,需要在建模时提前设置 restart 的文件输出时间频率;
2. 重点在于修改 env_run.xml 文件和 run/文件夹下面的 rpointer.xxx 文件;
正片开始
1. 在 ./create_newcase 之后,用 ./xmlchange 设置 restart 的文件输出时间频率。
./xmlchange NTASKS=80
./xmlchange DATM_CLMNCEP_YR_ALIGN=2010
./xmlchange DATM_CLMNCEP_YR_START=2010
./xmlchange DATM_CLMNCEP_YR_END=2011
./xmlchange DIN_LOC_ROOT=/home/dayon/inputdata
./xmlchange RUN_STARTDATE=2010-01-01
./xmlchange STOP_N=15
./xmlchange STOP_OPTION=ndays
./xmlchange CLM_FORCE_COLDSTART='on'
# 以下 3 句为控制
./xmlchange REST_OPTION=ndays # 控制 restart 文件的输出频率
./xmlchange REST_N=2 # 控制 restart 文件的输出频率
# 下面极其重要,用于复制中间生成的 restart 文件,否则模型最后(archiving)归档时,会将中间文件删除。
./xmlchange DOUT_S_SAVE_INTERIM_RESTART_FILES="TRUE"
2. 之后 case.build, 之后 case.submit ……
3. 模型会开始运行,在运行过程中会以一定的频率输出 restart 文件 (在 run/ 文件夹下面),这时如果突然中断(如手动ctrl + c) …………
4. restart 文件都在 run/ 文件夹下面,因此需要在其下面修改 rpointer.xxx 文件(如下)。其中,* .r. *为记录的中间 restart 文件。首先,需要cat rpointer.xxx 文件,以保证各个compont 里面的 restart 的时间戳是一致的,如不一致,需要修改成为统一的,以“时间靠前”为准则 [ 因为可能出现,有些restart已经产生了,但有些还没有来得及产生出来就断了 ]。
dayon@R830:~/cesm/scratch/CLM50SpGs_hcru_testrest/run$ ls
atm_modelio.nml datm.streams.txt.ECMWF.LWdown lnd_in
CASEROOT datm.streams.txt.ECMWF.Precip lnd_modelio.nml
CLM50SpGs_hcru_testrest.clm2.h0.1980-01-07-00000.nc datm.streams.txt.ECMWF.Psurf mosart_in
CLM50SpGs_hcru_testrest.clm2.r.1980-01-07-00000.nc datm.streams.txt.ECMWF.Qair ocn_modelio.nml
CLM50SpGs_hcru_testrest.clm2.rh0.1980-01-07-00000.nc datm.streams.txt.ECMWF.Solar rof_modelio.nml
CLM50SpGs_hcru_testrest.cpl.r.1980-01-07-00000.nc datm.streams.txt.ECMWF.Tair rpointer.atm
CLM50SpGs_hcru_testrest.datm.rs1.1980-01-03-00000.bin datm.streams.txt.ECMWF.Wind rpointer.drv
CLM50SpGs_hcru_testrest.datm.rs1.1980-01-05-00000.bin datm.streams.txt.presaero.clim_2000 rpointer.lnd
CLM50SpGs_hcru_testrest.datm.rs1.1980-01-07-00000.bin datm.streams.txt.topo.observed rpointer.rof
CLM50SpGs_hcru_testrest.mosart.r.1980-01-07-00000.nc drv_flds_in seq_maps.rc
CLM50SpGs_hcru_testrest.mosart.rh0.1980-01-07-00000.nc drv_in timing
cpl_modelio.nml esp_modelio.nml wav_modelio.nml
datm_in glc_modelio.nml
datm.streams.txt.CLM1PT.360x720cru ice_modelio.nml
dayon@R830:~/cesm/scratch/CLM50SpGs_hcru_testrest/run$ cat rpointer.atm rpointer.drv rpointer.lnd rpointer.rof
CLM50SpGs_hcru_testrest.datm.r.1980-01-07-00000.nc
CLM50SpGs_hcru_testrest.datm.rs1.1980-01-07-00000.bin
CLM50SpGs_hcru_testrest.cpl.r.1980-01-07-00000.nc
./CLM50SpGs_hcru_testrest.clm2.r.1980-01-07-00000.nc
./CLM50SpGs_hcru_testrest.mosart.r.1980-01-07-00000.nc
5. 修改env_run.xml 文件中 CONTINUE_RUN = “TRUE”。
</entry>
<entry id="CONTINUE_RUN" value="FALSE">
<type>logical</type>
<valid_values>TRUE,FALSE</valid_values>
<desc>
A setting of TRUE implies a continuation run
When you first begin a branch, hybrid or startup run, CONTINUE_RUN
must be set to FALSE. When you successfully run and get a restart
file, you will need to change CONTINUE_RUN to TRUE for the remainder
of your run. This variable determines if the run is a restart run.
Set to FALSE when initializing a startup, branch or hybrid case.
Set to TRUE when continuing a run.
</desc>
</entry>
修改方式可以是直接 vi 文件修改,也可以用./xmlchange
./xmlchange CONTINUE_RUN="TRUE"
./xmlquery CONTINUE_RUN # 查看修改结果
6. 修改好之后,再次提交case即可
./case.submit
番外篇
上述默认是以 “距离中断时间最近” 的时刻重启,如果想从中间的某个时刻重启,又该如何?
只需 1~2 步
- 修改 run/ 文件夹下面的 rpointer.xxx 文件,修改至需要重启的时刻【对应模型中断的情景,因为该情境下所有 restart 文件都在run/ 文件夹下】。
- 修改 run/ 文件夹下面的 rpointer.xxx 文件;同时,将 ~/cesm/archive/$CASEROOT/rest/文件下对应时刻的文件夹下的所有文件,拷贝至run/ 文件夹下面。【对应模型不中断情景】。
- 或1或2之后,再修改 env_run.xml;之后,提交 submit 即可。
[ 温馨提示 ] 中断重启之后,会以中断点为起点,以STOP_N 和 STOP_OPTION 为时间尺度继续顺延15天。