My CCTM always gets stuck in an infinite loop just as it is about to reach 3:00

I encountered no issues when running the first layer (d01) of CCTM, but when I run the second layer (d02), it always falls into an infinite loop just before reaching 3:00. When I set setenv CTM_MAXSYNC=120 , it gets stuck in an infinite loop at 2:58; when I set setenv CTM_MAXSYNC=300 , it gets stuck at 2:55. I am using CMAQ v5.4. Below are my CCTM_d02.slurm script and the contents of grep -i error CTM_LOG* .

We examined the time coverage of all major input files (emissions, meteorology, boundary conditions) and confirmed that they all contain data at 03:00:00, with normal data dimensions and no NaN/Inf or other abnormal values, ruling out the possibility of an infinite loop caused by missing or corrupted data. At the same time, we adjusted the memory request to meet the cluster limits.

[ac8ae61whl@login06 scripts]$ tail -n 50 CTM_LOG_000.*

 After NEXTIME: returned JDATE, JTIME 2024270 025400
        Master Time Step
        Processing completed...    2.7 seconds


 Processing Day/Time [YYYYDDD:HHMMSS]: 2024270:025400
   Which is Equivalent to (UTC): 2:54:00  Thursday,  Sept. 26, 2024
   Time-Step Length (HHMMSS): 000200
 Beginning Emissions
   Calling Real Emissions at Date:    2024270  and time:      25500
 
 

 ATTENTION: Applying fix to aerosol Boundary Conditions for aerosol modes.       
   Set verbose_rdbcon preprocessor flag to learn more.


 After NEXTIME: returned JDATE, JTIME 2024270 025600
        Master Time Step
        Processing completed...    2.7 seconds


 Processing Day/Time [YYYYDDD:HHMMSS]: 2024270:025600
   Which is Equivalent to (UTC): 2:56:00  Thursday,  Sept. 26, 2024
   Time-Step Length (HHMMSS): 000200
 Beginning Emissions
   Calling Real Emissions at Date:    2024270  and time:      25700
 
 

 ATTENTION: Applying fix to aerosol Boundary Conditions for aerosol modes.       
   Set verbose_rdbcon preprocessor flag to learn more.


 After NEXTIME: returned JDATE, JTIME 2024270 025800
        Master Time Step
        Processing completed...    2.7 seconds


 Processing Day/Time [YYYYDDD:HHMMSS]: 2024270:025800
   Which is Equivalent to (UTC): 2:58:00  Thursday,  Sept. 26, 2024
   Time-Step Length (HHMMSS): 000200
 Beginning Emissions
   Calling Diagnostic Emissions at Date:    2024270  and time:      30000
 
   Calling Real Emissions at Date:    2024270  and time:      25900

===========================================================

#!/bin/csh -f
#SBATCH -J cmaq_d02 # 【修改】作业名称改为 d02
#SBATCH -p xahcnormal
#SBATCH -N 1
#SBATCH --ntasks-per-node=32

加载你的 MPI 和超算底层环境

source /work/home/ac8ae61whl/apprepo/wrf_wps/4.6-intelmpi2017/scripts/env.sh
limit stacksize unlimited

1. 基础路径和环境变量

set CMAQ_HOME = /work/home/ac8ae61whl/hyf/CMAQ_v5.4
set CMAQ_DATA = $CMAQ_HOME/data
set VRSN = v54
set compilerString = intel
set MECH = cb6r5_ae7_aq
set APPL = xy_24092627_d02 # 【修改1】变成 d02

set BLD = {CMAQ_HOME}/app/CCTM/scripts/BLD_CCTM_{VRSN}${compilerString}
set EXEC = CCTM
${VRSN}.exe
setenv RUNID {VRSN}_{compilerString}_${APPL}

setenv WORKDIR ${CMAQ_HOME}/app/CCTM/scripts
setenv OUTDIR {CMAQ_DATA}/output_CCTM_{RUNID}
setenv LOGDIR ${OUTDIR}/LOGS
setenv NMLpath ${BLD}

if ( ! -d “$OUTDIR” ) mkdir -p $OUTDIR
if ( ! -d “$LOGDIR” ) mkdir -p $LOGDIR

2. 模拟时间和并行计算设置 (32核: 8 x 4)

setenv NEW_START TRUE
set START_DATE = “2024-09-26”
set END_DATE = “2024-09-27”

set STTIME = 010000
set NSTEPS = 230000
set TSTEP = 010000

@ NPCOL = 8; @ NPROW = 4
@ NPROCS = $NPCOL * $NPROW
setenv NPCOL_NPROW “$NPCOL $NPROW”

setenv EXECUTION_ID “CMAQ_CCTM${VRSN}_date -u +%Y%m%d_%H%M%S
set CLOBBER_DATA = TRUE
setenv PRINT_PROC_TIME Y
setenv STDOUT T

3. 网格参数

setenv GRID_NAME xy_24092627_d02 # 【修改2】变成 d02
setenv GRIDDESC $CMAQ_DATA/mcip/xy_24092627_d02/GRIDDESC # 【修改3】变成 d02
set NZ = 44

setenv CONC_SPCS “ALL”

setenv CONC_BLEV_ELEV " 1 $NZ"

setenv AVG_CONC_SPCS “ALL”

setenv ACONC_BLEV_ELEV " 1 1"

4. 科学模块开关

setenv CTM_MAXSYNC 120
setenv CTM_MINSYNC 30
setenv SIGMA_SYNC_TOP 0.7
setenv CTM_ADV_CFL 0.95

setenv CTM_OCEAN_CHEM N
setenv CTM_WB_DUST N
setenv CTM_LTNG_NO N
setenv KZMIN Y
setenv PX_VERSION N
setenv CLM_VERSION N
setenv NOAH_VERSION Y
setenv CTM_ABFLUX N
setenv CTM_BIDI_FERT_NH3 N
setenv CTM_HGBIDI N
setenv CTM_SFC_HONO Y
setenv CTM_GRAV_SETL Y
setenv CTM_BIOGEMIS_BE N
setenv CTM_BIOGEMIS_MG N
setenv BDSNP_MEGAN N

setenv CTM_MOSAIC N
setenv CTM_STAGE_E20 Y
setenv IC_AERO_M2WET F
setenv BC_AERO_M2WET F
setenv IC_AERO_M2USE F
setenv BC_AERO_M2USE F

I/O 控制

setenv IOAPI_LOG_WRITE F
setenv FL_ERR_STOP N
setenv PROMPTFLAG F
setenv IOAPI_OFFSET_64 YES
setenv IOAPI_CHECK_HEADERS N
setenv CTM_EMISCHK N

setenv CTM_CKSUM Y
setenv CTM_WVEL N

5. 输入文件目录设置

set ICpath = $CMAQ_DATA/icon
set BCpath = $CMAQ_DATA/bcon
set METpath = $CMAQ_DATA/mcip/xy_24092627_d02 # 【修改4】变成 d02
set EMISpath = $CMAQ_DATA/emission/MEIC–CMAQ/model_emission_xy_24092627_d02 # 【修改5】变成 d02

6. 开始逐日循环

set TODAYG = ${START_DATE}
set TODAYJ = date -ud "${START_DATE}" +%Y%j
set STOP_DAY = date -ud "${END_DATE}" +%Y%j

while ($TODAYJ <= $STOP_DAY )

set YYYYMMDD = date -ud "${TODAYG}" +%Y%m%d
set YYMMDD = date -ud "${TODAYG}" +%y%m%d
set YYYYJJJ = $TODAYJ
set YESTERDAY = date -ud "${TODAYG}-1days" +%Y%m%d

setenv CTM_APPL {RUNID}_{YYYYMMDD}

IC 初始场

if ($NEW_START == true || $NEW_START == TRUE ) then
setenv ICFILE ICON_v54_XY_d02_20240926.nc # 【修改6】这里应该是 d02 的初始场
setenv INIT_MEDC_1 notused
else
set ICpath = $OUTDIR
setenv ICFILE CCTM_CGRID_{RUNID}_{YESTERDAY}.nc
setenv INIT_MEDC_1 ICpath/CCTM_MEDIA_CONC_{RUNID}_${YESTERDAY}.nc
endif

【修改7:核心变化!d02 的边界场(BCON)是每天逐日变化的,所以要放到循环里动态读取】

set BCFILE = BCON_{VRSN}_XY_d02_{YYYYMMDD}.nc

MCIP 气象场 【修改8:全部改为 _d02.nc】

setenv GRID_BDY_2D $METpath/GRIDBDY2D_24_09_2627_d02.nc
setenv GRID_CRO_2D $METpath/GRIDCRO2D_24_09_2627_d02.nc
setenv GRID_CRO_3D $METpath/GRIDCRO3D_24_09_2627_d02.nc
setenv GRID_DOT_2D $METpath/GRIDDOT2D_24_09_2627_d02.nc
setenv MET_CRO_2D $METpath/METCRO2D_24_09_2627_d02.nc
setenv MET_CRO_3D $METpath/METCRO3D_24_09_2627_d02.nc
setenv MET_DOT_3D $METpath/METDOT3D_24_09_2627_d02.nc
setenv MET_BDY_3D $METpath/METBDY3D_24_09_2627_d02.nc
setenv LUFRAC_CRO $METpath/LUFRAC_CRO_24_09_2627_d02.nc
setenv SOI_CRO $METpath/SOI_CRO_24_09_2627_d02.nc

setenv DESID_CTRL_NML ${BLD}/CMAQ_Control_DESID.nml
setenv DESID_CHEM_CTRL_NML {BLD}/CMAQ_Control_DESID_{MECH}.nml
setenv MISC_CTRL_NML ${BLD}/CMAQ_Control_Misc.nml
setenv STAGECTRL_NML ${BLD}/CMAQ_Control_STAGE.nml

★ MEIC 排放源挂载

setenv N_EMIS_GR 5

setenv GR_EMIS_001 {EMISpath}/CB06_agriculture_{GRID_NAME}_${YYYYMMDD}.nc
setenv GR_EMIS_LAB_001 AGRICULTURE
setenv GR_EM_SYM_DATE_001 F

setenv GR_EMIS_002 {EMISpath}/CB06_industry_{GRID_NAME}_${YYYYMMDD}.nc
setenv GR_EMIS_LAB_002 INDUSTRY
setenv GR_EM_SYM_DATE_002 F

setenv GR_EMIS_003 {EMISpath}/CB06_power_{GRID_NAME}_${YYYYMMDD}.nc
setenv GR_EMIS_LAB_003 POWER
setenv GR_EM_SYM_DATE_003 F

setenv GR_EMIS_004 {EMISpath}/CB06_residential_{GRID_NAME}_${YYYYMMDD}.nc
setenv GR_EMIS_LAB_004 RESIDENTIAL
setenv GR_EM_SYM_DATE_004 F

setenv GR_EMIS_005 {EMISpath}/CB06_transportation_{GRID_NAME}_${YYYYMMDD}.nc
setenv GR_EMIS_LAB_005 TRANSPORTATION
setenv GR_EM_SYM_DATE_005 F

setenv N_EMIS_PT 0

7. 输出文件设置

setenv S_CGRID “$OUTDIR/CCTM_CGRID_${CTM_APPL}.nc”
setenv CTM_CONC_1 “$OUTDIR/CCTM_CONC_${CTM_APPL}.nc -v”
setenv A_CONC_1 “$OUTDIR/CCTM_ACONC_${CTM_APPL}.nc -v”
setenv MEDIA_CONC “$OUTDIR/CCTM_MEDIA_CONC_${CTM_APPL}.nc -v”
setenv CTM_DRY_DEP_1 “$OUTDIR/CCTM_DRYDEP_${CTM_APPL}.nc -v”
setenv CTM_WET_DEP_1 “$OUTDIR/CCTM_WETDEP1_${CTM_APPL}.nc -v”
setenv CTM_WET_DEP_2 “$OUTDIR/CCTM_WETDEP2_${CTM_APPL}.nc -v”

setenv CTM_STDATE $YYYYJJJ

=== 动态时间判断开始 ===

if ($NEW_START == true || $NEW_START == TRUE ) then
setenv CTM_STTIME 010000
setenv CTM_RUNLEN 230000
else
setenv CTM_STTIME 000000
setenv CTM_RUNLEN 230000
endif

=== 动态时间判断结束 ===

setenv CTM_TSTEP $TSTEP
setenv INIT_CONC_1 $ICpath/$ICFILE
setenv BNDY_CONC_1 $BCpath/$BCFILE

setenv gc_matrix_nml ${NMLpath}/GC_$MECH.nml
setenv ae_matrix_nml ${NMLpath}/AE_$MECH.nml
setenv nr_matrix_nml ${NMLpath}/NR_$MECH.nml
setenv tr_matrix_nml ${NMLpath}/Species_Table_TR_0.nml
setenv CSQY_DATA {NMLpath}/CSQY_DATA_{MECH}
setenv OPTICS_DATA {NMLpath}/OPTICS_DATA_{MECH}
setenv OMI /work/home/ac8ae61whl/hyf/CMAQ_v5.4/app/CCTM/scripts/BLD_CCTM_v54_intel/OMI_1979_to_2019.dat

运行主程序

echo “CMAQ Processing of Day $YYYYMMDD Began at date

rm -f CTM_LOG_???.*

time srun --mpi=pmi2 -n $NPROCS $BLD/$EXEC

if ( ! -e OUTDIR/CCTM_CGRID_{CTM_APPL}.nc ) then
echo “Runscript Detected an Error: CGRID file was not written.”
break
endif

mv CTM_LOG_???.${CTM_APPL} $LOGDIR

setenv NEW_START false
set TODAYG = date -ud "${TODAYG}+1days" +%Y-%m-%d
set TODAYJ = date -ud "${TODAYG}" +%Y%j

end

exit