ISAM mass imbalance in output

I’m running into a mass balance issue using ISAM. When I run CMAQ with a tagged emissions stream in ISAM, I’m finding that there is a discrepancy for aerosol species in the sum of total streams vs. the output in the ACONC file. For example, tracking species AECJ in stream EMX, sum{AECJ_EMX + AECJ_OTH + AECJ_ICO + AECJ_BCO} is not coming out equal to AECJ in the ACONC file at any given time/location. This seems to be true for every aerosol species I’ve checked so far in the accumulation and coarse modes. The biases have non-random spatial patterns that relate to terrain/population distributions and suggest this isn’t some rounding error.

The normalized bias for accumulation-mode aerosols appears to be around 0-3%, and for the coarse mode about 0-15%. The sum{ISAM streams} is consistently below the ACONC value across the board. See attached images for ACORS and AECJ.

I checked whether this is somehow triggered by a dry deposition bias, using the SA_DRYDEP outputs. Those also show wide systemic biases, but the patterns at least aren’t consistent with the aerosol concentration patterns- see attached image for DRYDEP. The bias of DRYDEP for ACORS and ECJ is of similar magnitude to the aerosol concentration (~15% and ~2% respectively.

I’ve looked at concentration fields for various accum. and coarse-mode species, both default and ones I created custom for our purposes, and they all tend to show the biases noted above. I’m left thinking there is either a bug in the code or there is a source of aerosol that doesn’t end up in any ISAM output. The spatial pattern of the coarse mode bias is also pretty much identical between different species, which raised an alarm for me. See attached image with K, Fe, and Ni, an example from a different v5.4 setup with saprc22, many tracked streams, and various new coarse aerosol species. I’ve also attached time series at a few single gridcells over the run year.

Gases seem to have no systemic bias (something like 1E-6% NMB between sum{ISAM} and ACONC).

I am using CMAQv5.4 with ISAM and saprc07tc, using m3dry deposition, and compiled with ifortran version 14.0.3. I’ve attached my run script, isam control file, DESID chem control namelist, an output log file, and some spatial plots of the normalized mean biases I’m seeing.

Calvin,

Could you, please, paste the entirety of your isam control file into the response here. Also, how are you calculating the sum mentioned above - are you using some postprocessing software?

Thanks,

Sergey

I thought the run script attached but I suppose not. For the sums, I used a mix of matlab (for the single cell locations), Verdi (for the spatial maps), and ncap2 to sum up the species from different streams in the CCTM_SA files.

Due to the post character limit, this is the first half of the run script. Second half to follow.

#!/bin/csh -f

# ===================== CCTMv5.3.1 Run Script =========================
# Usage: nohup ./run.csh timeperiod optParam  >& run_name.log &
# - optParam can be 'resume' to resume the run from the last CGRID file
# - optParam can be 'emis' to run a matlab script calculating SCAB total
# emissions, as long as the run period starts with 20171229 (hard coded for now)
#
# To report problems or request help with this script/program:
#             http://www.epa.gov/cmaq    (EPA CMAQ Website)
#             http://www.cmascenter.org  (CMAS Website)
# ===================================================================

# ===================================================================
#> Runtime Environment Options
# ===================================================================

set hostname=`hostname -s`
if ( $hostname == "Forecast" ) then
        set IRISNO   = 7
else
        set IRISNO   = `echo $hostname | cut -c 5-`
endif

#> Toggle 0/1 Diagnostic Mode which will print verbose information to
#> standard output
 setenv CTM_DIAG_LVL 0

#> Choose compiler and set up CMAQ environment with correct
#> libraries using config.cmaq. Options: intel | gcc | pgi
 if ( ! $?compiler ) then
   setenv compiler intel
 endif
 if ( ! $?compilerVrsn ) then
   setenv compilerVrsn Empty
 endif

#> Source the config.cmaq file to set the build environment
 #cd ../..
 #source /yoga1/RZHANG/CMAQ5.3.3/config_cmaq.csh $compiler $compilerVrsn
 source /yoga10/chowes/CMAQ/CMAQv5.4_rzhang/config_cmaq.csh $compiler $compilerVrsn
 #cd CCTM/scripts

#> Set General Parameters and Labels for Configuring the Simulation
 set VRSN      = v54_ISAM              #> Code Version
 #set VRSN      = v54
 set PROC      = mpi                #> serial or mpi
 set MECH      = saprc07tc_ae6_aq   #> Mechanism ID
 #set EMIS      = df18    #> Emission Inventory Details
 set APPL      = closure         #> Application Name (e.g. Domain)
 set ProjYear = 2018
 #set EMISAPPL = df18
 set DESC     = ""
 setenv M3DATA /pln15/CMAQ/CMAQv5.0.2/data
 #setenv EXTN slab_surb
 set

#> Define RUNID as any combination of parameters above or others. By default,
#> this information will be collected into this one string, $RUNID, for easy
#> referencing in output binaries and log files as well as in other scripts.
 setenv RUNID  ${VRSN}_${APPL}

#> Set the build directory (this is where the CMAQ executable
#> is located by default).
 #set BLD      = /yoga1/RZHANG/CMAQ5.3.3/CCTM/scripts/BLD_CCTM_${VRSN}_${compilerString}
 #set BLD      = /yoga10/chowes/CMAQ/CMAQv5.4_rzhang/CCTM/scripts/BLD_CCTM_${VRSN}_base_${compilerString}
 set BLD      = /yoga10/chowes/CMAQ/CMAQ-5.4_SAPRC22/CCTM/scripts/BLD_CCTM_v54_ISAM_saprc07_intel
 set EXEC     = CCTM_${VRSN}.exe

#> Output Each line of Runscript to Log File
 if ( $CTM_DIAG_LVL != 0 ) set echo

#> Set Working, Input, and Output Directories
 setenv WORKDIR ${CMAQ_HOME}/CCTM/scripts         #> Working Directory. Where the runscript is.
 setenv OUTDIR /yoga10/EPAtoxics/cctm_${RUNID} #> Output Directory
 setenv INPDIR /work/MOD3DATA/2010_4CALIF1  #Input Directory
 setenv NMLpath ${BLD}             #> Location of Namelists. Common places are:
                                   #>   ${WORKDIR} | ${CCTM_SRC}/MECHS/${MECH} | ${BLD}


setenv SIMPERIOD  ${1}

source ./simperiods2018.sh

if ( $SIMPERIOD != "" ) then
        setenv OUTDIR  "${OUTDIR}_${SIMPERIOD}"
endif
# #cth+3
# setenv OUTDIR /yoga10/PM2024Plan/y2030/cctm_v533_PM2024Plan_attainment2030_sc_q2
# set SDATE = 20180618
# set EDATE = 20180620
echo OUTDIR $OUTDIR
echo SDATE $SDATE
echo EDATE $EDATE

# =====================================================================
#> Input Directories and Filenames
# =====================================================================

set ICpath    = /yoga8/Cui/ARB_30layer_12km_bcon_mcip/icon/             #> initial conditions input directory

set BCGID      = gid400
set BCPATH    = /yoga8/Cui/BCON_4km_5.3.3_pm2.5_plan/2018/
#set BCPATH    = /yoga10/EPAtoxics/BCON_2023shift_4km_5.3.3_pm2.5_plan/
set BCPREFIX  = "BCON_v533_12k"

set BCpath    = $BCPATH              #> boundary conditions input directory
#set EMISpath  = $INPDIR/emis/saprc07t_ae6_20180511/cmaq_ready/gridded #> gridded emissions input directory
# set EMISpath = /yoga10/EPAtoxics/emis_2023_EPA
# set EMISnamepattern = Merged_2023_EPA # pattern in filename as <pattern>.<YYYYMMDD>.ncf
set EMISpath = /yoga10/PM2024Plan/emis_Base2018_r445_levoglucosan_PM2024Plan
set EMISnamepattern = Merged_Base2018_r445_levoglucosan_PM2024Plan
#set IN_PTpath = $INPDIR/emis/saprc07t_ae6_20180511/cmaq_ready  #> point source emissions input directory
#set IN_LTpath = $INPDIR/met/lightning     #> lightning NOx input directory
set METpath   = /yoga1/RZHANG/CMAQ5.4/data/2022AQMP/MCIP       #> meteorology input directory

set OMIpath   = $BLD                      #> ozone column data for the photolysis model
set LUpath    = $M3DATA/aqmp16/dust           #> BELD landuse data for windblown dust model
set SZpath    = $M3DATA/aqmp16/ocean           #> surf zone file for in-line seasalt emissions

# ============================


if ("$2" == "emis") then
    if ("$SDATE" == "20171229") then
       echo  "Running SCAB emissions calculations in background."
       nohup ./background_scab_calculation.sh $EMISpath $EMISnamepattern &
       echo "Emissions time series will output in file: scab_emiss_"${EMISnamepattern}".xlsx and [same].mat"
       echo "matlab run log will output in file: matlab_process.log"
    else
       echo "Not calculating SCAB emissions"
    endif
endif

setenv LOGDIR  ${OUTDIR}/LOGS     #> Log Directory Location

cp $0 $OUTDIR/

#> Horizontal domain decomposition
if ( $PROC == serial ) then
   setenv NPCOL_NPROW "1 1"; set NPROCS   = 1 # single processor setting
else # MPIRUN
#some host dependent settings
   if ( $IRISNO == 5 ) then #iris5 has 64 processors
        set BUILDNO  = scf.iris5.Hadv.017
        set MPIRUN = /opt/intel/impi/4.1.0/intel64/bin/mpirun
        setenv NPCOL_NPROW "6 10"; set NPROCS   = 60
   else if ( $IRISNO < 7 ) then #iris{1,2,3,4,6} have 24 processors
        set BUILDNO  = scf.iris5.Hadv.017
        set MPIRUN = /opt/intel/impi/4.1.0/intel64/bin/mpirun
        setenv NPCOL_NPROW "6 4"; set NPROCS   = 24
   else
        set BUILDNO  = scf.iris7.Hadv.018 #iris{7,8,9,10} have 64 processors
        set MPIRUN = /opt/intel/impi/4.1.3.048/intel64/bin/mpirun
        setenv NPCOL_NPROW "6 10"; set NPROCS   = 60
   endif
   if ( $hostname == "ezen2" || $hostname == "ezen3" || $hostname == "ezen4" ) then
        set MPIRUN = mpirun
        setenv NPCOL_NPROW "6 8"; set NPROCS   = 48
   endif
   if ( $hostname == "ezen6" || $hostname == "ezen7" || $hostname == "ezen8" ) then
        set MPIRUN = mpirun
        setenv NPCOL_NPROW "6 8"; set NPROCS   = 48
   endif
   if ( $hostname == "ezen1" || $hostname == "ezen5" ) then
        set MPIRUN = mpirun
        setenv NPCOL_NPROW "6 10"; set NPROCS   = 60
   endif
   if ( $hostname == "ezen9" || $hostname == "ezen10" ) then
        set MPIRUN = mpirun
        setenv NPCOL_NPROW "6 10"; set NPROCS   = 60
   endif


endif

 echo ""
 echo "Host Cluster is:  $hostname"
 echo "Total CPU usage:  $NPROCS"
 echo "Working Directory is: $WORKDIR"
 echo "Build Directory is: $BLD"
 echo "Output Directory is: $OUTDIR"
 echo "Log Directory is: $LOGDIR"
 echo "Executable Name is: $EXEC"

# =====================================================================
#> CCTM Configuration Options
# =====================================================================

#> Set Start and End Days for looping

 setenv NEW_START TRUE             #> Set to FALSE for model restart

 if ( ${2} == "resume" ) then
   setenv NEW_START FALSE
   echo "BIW $NEW_START"
   echo "the is # $SIMPERIOD"
   echo ""
        set tmpcgrid = `ls $OUTDIR/*CGRID* | tail -n 1 | sed -e 's/_/ /g' | awk '{print $NF}'`
        set cgdate = `echo $tmpcgrid | cut -c 1-8`
        set SDATE  = `date -d ${cgdate}+1days +%Y%m%d`
        if ( $SDATE == "" ) then
             echo "something's wrong with autoresume"
             exit
        endif
        if ( "$SIMPERIOD" =~ x[1-4] ) then
             set EDATE  = `date -d ${SDATE}+6days +%Y%m%d`
        endif
        echo "resuming from $SDATE, using CGRID FROM $cgdate"
        echo "$OUTDIR"
   echo ""
 endif


 set START_DATE = "${SDATE}"     #> beginning date (May 1, 2010)
 set END_DATE   = "${EDATE}"     #> ending date    (June 30, 2010)
#echo "cth:"
#echo ${SDATE}
#echo ${EDATE}
#echo $START_DATE
#echo $END_DATE

#> Set Timestepping Parameters
set STTIME     = 080000            #> beginning GMT time (HHMMSS)
set NSTEPS     = 240000            #> time duration (HHMMSS) for this run
set TSTEP      = 010000            #> output time step interval (HHMMSS)



#> Define Execution ID: e.g. [CMAQ-Version-Info]_[User]_[Date]_[Time]
setenv EXECUTION_ID "CMAQ_CCTM${VRSN}_`id -u -n`_`date -u +%Y%m%d_%H%M%S_%N`"    #> Inform IO/API of the Execution ID
echo ""
echo "---CMAQ EXECUTION ID: $EXECUTION_ID ---"

#> Keep or Delete Existing Output Files
set CLOBBER_DATA = TRUE

#> Logfile Options
#> Master Log File Name; uncomment to write standard output to a log, otherwise write to screen
#setenv LOGFILE $CMAQ_HOME/$RUNID.log
if (! -e $LOGDIR ) then
  mkdir -p $LOGDIR
endif
setenv PRINT_PROC_TIME Y           #> Print timing for all science subprocesses to Logfile
                                   #>   [ default: TRUE or Y ]
setenv STDOUT T                    #> Override I/O-API trying to write information to both the processor
                                   #>   logs and STDOUT [ options: T | F ]

setenv GRIDDESC $M3DATA/aqmp16/mcip/GRIDDESC  # horizontal grid defn
setenv GRID_NAME M_SW_3D_04KM             # check GRIDDESC file for GRID_NAME options


#> Retrieve the number of columns, rows, and layers in this simulation
set NZ = 30
set NX = `grep -A 1 ${GRID_NAME} ${GRIDDESC} | tail -1 | sed 's/  */ /g' | cut -d' ' -f6`
set NY = `grep -A 1 ${GRID_NAME} ${GRIDDESC} | tail -1 | sed 's/  */ /g' | cut -d' ' -f7`
set NCELLS = `echo "${NX} * ${NY} * ${NZ}" | bc -l`

#> Output Species and Layer Options
   #>   CONC file species; comment or set to "ALL" to write all species to CONC
   setenv CONC_SPCS "O3 NO ANO3I ANO3J NO2 HCHO ISOPRENE NH3 ANH4I ANH4J ASO4I ASO4J"
   setenv CONC_BLEV_ELEV " 1 1" #> CONC file layer range; comment to write all layers to CONC

   #>   ACONC file species; comment or set to "ALL" to write all species to ACONC
   #setenv AVG_CONC_SPCS "O3 NO CO NO2 ASO4I ASO4J NH3"
   setenv AVG_CONC_SPCS "ALL"
   setenv ACONC_BLEV_ELEV " 1 1" #> ACONC file layer range; comment to write all layers to ACONC
   setenv AVG_FILE_ENDTIME N     #> override default beginning ACONC timestamp [ default: N ]

#> Synchronization Time Step and Tolerance Options
setenv CTM_MAXSYNC 720       #> max sync time step (sec) [ default: 720 ]
setenv CTM_MINSYNC  60       #> min sync time step (sec) [ default: 60 ]
setenv SIGMA_SYNC_TOP 0.7    #> top sigma level thru which sync step determined [ default: 0.7 ]
#setenv ADV_HDIV_LIM 0.95    #> maximum horiz. div. limit for adv step adjust [ default: 0.9 ]
setenv CTM_ADV_CFL 0.95      #> max CFL [ default: 0.75]
#setenv RB_ATOL 1.0E-09      #> global ROS3 solver absolute tolerance [ default: 1.0E-07 ]

#> Science Options
setenv CTM_OCEAN_CHEM Y      #> Flag for ocean halogen chemistry and sea spray aerosol emissions [ default: Y ]
setenv CTM_WB_DUST N         #> use inline windblown dust emissions [ default: Y ]
setenv CTM_WBDUST_BELD BELD3 #> landuse database for identifying dust source regions
                             #>    [ default: UNKNOWN ]; ignore if CTM_WB_DUST = N
setenv CTM_LTNG_NO N         #> turn on lightning NOx [ default: N ]
setenv KZMIN Y               #> use Min Kz option in edyintb [ default: Y ],
                             #>    otherwise revert to Kz0UT
setenv CTM_MOSAIC N          #> landuse specific deposition velocities [ default: N ]
setenv CTM_FST N             #> mosaic method to get land-use specific stomatal flux
                             #>    [ default: N ]
setenv PX_VERSION Y          #> WRF PX LSM
setenv CLM_VERSION N         #> WRF CLM LSM
setenv NOAH_VERSION N        #> WRF NOAH LSM
setenv CTM_ABFLUX N          #> ammonia bi-directional flux for in-line deposition
                             #>    velocities [ default: N ]
setenv CTM_HGBIDI N          #> mercury bi-directional flux for in-line deposition
                             #>    velocities [ default: N ]
setenv CTM_SFC_HONO Y        #> surface HONO interaction [ default: Y ]
setenv CTM_GRAV_SETL Y       #> vdiff aerosol gravitational sedimentation [ default: Y ]
setenv CTM_BIOGEMIS N        #> calculate in-line biogenic emissions [ default: N ]

#> Vertical Extraction Options
setenv VERTEXT N
setenv VERTEXT_COORD_PATH ${WORKDIR}/lonlat.csv

#> I/O Controls
setenv IOAPI_LOG_WRITE F     #> turn on excess WRITE3 logging [ options: T | F ]
setenv FL_ERR_STOP N         #> stop on inconsistent input files
setenv PROMPTFLAG F          #> turn on I/O-API PROMPT*FILE interactive mode [ options: T | F ]
setenv IOAPI_OFFSET_64 NO   #> support large timestep records (>2GB/timestep record) [ options: YES | NO ]
setenv IOAPI_CHECK_HEADERS N #> check file headers [ options: Y | N ]
setenv CTM_EMISCHK N         #> Abort CMAQ if missing surrogates from emissions Input files
setenv EMISDIAG F            #> Print Emission Rates at the output time step after they have been
                             #>   scaled and modified by the user Rules [options: F | T or 2D | 3D | 2DSUM ]
                             #>   Individual streams can be modified using the variables:
                             #>       GR_EMIS_DIAG_## | STK_EMIS_DIAG_## | BIOG_EMIS_DIAG
                             #>       MG_EMIS_DIAG    | LTNG_EMIS_DIAG   | DUST_EMIS_DIAG
                             #>       SEASPRAY_EMIS_DIAG
                             #>   Note that these diagnostics are different than other emissions diagnostic
                             #>   output because they occur after scaling.
setenv EMISDIAG_SUM F        #> Print Sum of Emission Rates to Gridded Diagnostic File

setenv EMIS_SYM_DATE N       #> Master switch for allowing CMAQ to use the date from each Emission file
                             #>   rather than checking the emissions date against the internal model date.
                             #>   [options: T | F or Y | N]. If false (F/N), then the date from CMAQ's internal
                             #>   time will be used and an error check will be performed (recommended). Users
                             #>   may switch the behavior for individual emission files below using the variables:
                             #>       GR_EM_SYM_DATE_## | STK_EM_SYM_DATE_## [default: N]

setenv CTM_PT3DEMIS  Y

#> Diagnostic Output Flags
setenv CTM_CKSUM Y           #> checksum report [ default: Y ]
setenv CLD_DIAG N            #> cloud diagnostic file [ default: N ]

setenv CTM_PHOTDIAG N        #> photolysis diagnostic file [ default: N ]
setenv NLAYS_PHOTDIAG "1"    #> Number of layers for PHOTDIAG2 and PHOTDIAG3 from
                             #>     Layer 1 to NLAYS_PHOTDIAG  [ default: all layers ]
#setenv NWAVE_PHOTDIAG "294 303 310 316 333 381 607"  #> Wavelengths written for variables
                                                      #>   in PHOTDIAG2 and PHOTDIAG3
                                                      #>   [ default: all wavelengths ]

setenv CTM_PMDIAG N          #> Instantaneous Aerosol Diagnostic File [ default: Y ]
setenv CTM_APMDIAG Y         #> Hourly-Average Aerosol Diagnostic File [ default: Y ]
setenv APMDIAG_BLEV_ELEV "1 1"  #> layer range for average pmdiag = NLAYS

setenv CTM_SSEMDIAG N        #> sea-spray emissions diagnostic file [ default: N ]
setenv CTM_DUSTEM_DIAG N     #> windblown dust emissions diagnostic file [ default: N ];
                             #>     Ignore if CTM_WB_DUST = N
setenv CTM_DEPV_FILE N       #> deposition velocities diagnostic file [ default: N ]
setenv VDIFF_DIAG_FILE N     #> vdiff & possibly aero grav. sedimentation diagnostic file [ default: N ]
setenv LTNGDIAG N            #> lightning diagnostic file [ default: N ]
setenv B3GTS_DIAG N          #> beis mass emissions diagnostic file [ default: N ]
setenv CTM_WVEL Y            #> save derived vertical velocity component to conc & aconc
                             #>    file [ default: Y ]



# =====================================================================
#> Begin Loop Through Simulation Days
# =====================================================================
set rtarray = ""

set TODAYG = ${START_DATE}
set TODAYJ = `date -d "${START_DATE}" +%Y%j` #> Convert YYYY-MM-DD to YYYYJJJ
set START_DAY = ${TODAYJ}
set STOP_DAY = `date -d "${END_DATE}" +%Y%j` #> Convert YYYY-MM-DD to YYYYJJJ
set NDAYS = 0

while ($TODAYJ <= $STOP_DAY )  #>Compare dates in terms of YYYYJJJ

  set NDAYS = `echo "${NDAYS} + 1" | bc -l`

  #> Retrieve Calendar day Information
  set YYYYMMDD = `date -d "${TODAYG}" +%Y%m%d` #> Convert YYYY-MM-DD to YYYYMMDD
  set YYYYMM = `date -d "${TODAYG}" +%Y%m`     #> Convert YYYY-MM-DD to YYYYMM
  set YYMMDD = `date -d "${TODAYG}" +%y%m%d`   #> Convert YYYY-MM-DD to YYMMDD
  set JJJ = `date -d "${TODAYG}" +%j`   #> Convert YYYY-MM-DD to YYMMDD
  set YYYYJJJ = $TODAYJ
  set MMDD = `date -d "${TODAYG}" +%m%d`

  #> Calculate Yesterday's Date
  set YESTERDAY = `date -d "${TODAYG}-1days" +%Y%m%d` #> Convert YYYY-MM-DD to YYYYJJiJ


        set EMISYEAR = $ProjYear
        set EMISYEARmxpt = 2031
        set SYEAR = `date -d ${TODAYG} +%Y`
        if ( $SYEAR != $ProjYear ) then
#only newer version of python has str.format()
#               set EMISYEAR = `python -c "print '{0:4d}'.format ( $SYEAR - 2012 + $ProjYear )"`
#               set EMISYEAR = `python -c "print '%4d' % ( $SYEAR - 2012 + $ProjYear )"`
#just use csh
                @ EMISYEAR = ( ( $SYEAR - 2018 ) + $ProjYear )
                @ EMISYEARmxpt = ( ( $SYEAR - 2018 ) + 2031 )
        endif


# =====================================================================
#> Set Output String and Propagate Model Configuration Documentation
# =====================================================================
  echo ""
  echo "Set up input and output files for Day ${TODAYG}."

  #> set output file name extensions
  setenv CTM_APPL ${RUNID}_${YYYYMMDD}

  #> Copy Model Configuration To Output Folder
  if ( ! -d "$OUTDIR" ) mkdir -p $OUTDIR
  cp $BLD/CCTM_${VRSN}.cfg $OUTDIR/CCTM_${CTM_APPL}.cfg

# =====================================================================
#> Input Files (Some are Day-Dependent)
# =====================================================================

  #> Initial conditions
  if ($NEW_START == true || $NEW_START == TRUE ) then
     setenv ICFILE ICON_gid631_scos-4km_2018116
#     setenv ICFILE ICON_prof_CMAQ-BENCHMARK_profile
     setenv INIT_MEDC_1 notused
     setenv INITIAL_RUN Y #related to restart soil information file
  else
     set ICpath = $OUTDIR
     setenv ICFILE CCTM_CGRID_${RUNID}_${YESTERDAY}.nc
     setenv INIT_MEDC_1 $ICpath/CCTM_MEDIA_CONC_${RUNID}_${YESTERDAY}.nc
     setenv INITIAL_RUN N
  endif

  #> Boundary conditions
  set BCFILE =  ${BCPREFIX}_${YYYYMMDD}.nc

  #> Off-line photolysis rates
  #set JVALfile  = JTABLE_${YYYYJJJ}

  #> Ozone column data
  set OMIfile   = OMI_1979_to_2019.dat

  #> Optics file
  set OPTfile = PHOT_OPTICS.dat

  #> MCIP meteorology files
#  setenv GRID_BDY_2D $METpath/GRIDBDY2D.$GRID_NAME.${NZ}L.$YYMMDD  # GRID files are static, not day-specific
#  setenv GRID_CRO_2D $METpath/GRIDCRO2D.$GRID_NAME.${NZ}L.$YYMMDD
# setenv GRID_CRO_3D $METpath/GRIDCRO3D.$GRID_NAME.${NZ}L.$YYMMDD
  setenv GRID_CRO_3D '' # this file not used or available


set METPATH   = $METpath
set EXTN = newWRF


        setenv GRID_DOT_2D $METPATH/GRIDDOT2D.nc
        setenv GRID_CRO_2D $METPATH/GRIDCRO2D.nc
        #setenv MET_CRO_2D $METPATH/METCRO2D_${EXTN}_${YYYYMMDD}.nc
        #setenv MET_CRO_3D $METPATH/METCRO3D_${EXTN}_${YYYYMMDD}.nc
        #setenv MET_DOT_3D $METPATH/METDOT3D_${EXTN}_${YYYYMMDD}.nc
        #setenv MET_BDY_3D $METPATH/METBDY3D_${EXTN}_${YYYYMMDD}.nc
        #setenv LUFRAC_CRO $METPATH/LUFRAC_CRO_${EXTN}_${YYYYMMDD}.nc
        setenv MET_CRO_2D $METPATH/METCRO2D_${EXTN}_${YYYYMMDD}.nc
        setenv MET_CRO_3D $METPATH/METCRO3D_${EXTN}_${YYYYMMDD}.nc
        setenv MET_DOT_3D $METPATH/METDOT3D_${EXTN}_${YYYYMMDD}.nc
        setenv MET_BDY_3D $METPATH/METBDY3D_${EXTN}_${YYYYMMDD}.nc
        setenv LUFRAC_CRO $METPATH/LUFRAC_CRO_${EXTN}_${YYYYMMDD}.nc
        echo "CTH: METCRO3D = $MET_CRO_3D"

#  setenv LUFRAC_CRO  $METpath/LUFRAC_CRO.$GRID_NAME.${NZ}L.$YYMMDD

  #> Emissions Control File
  #>
  #> IMPORTANT NOTE
  #>
  #> The emissions control file defined below is an integral part of controlling the behavior of the model simulation.
  #> Among other things, it controls the mapping of species in the emission files to chemical species in the model and
  #> several aspects related to the simulation of organic aerosols.
  #> Please carefully review the emissions control file to ensure that it is configured to be consistent with the assumptions
  #> made when creating the emission files defined below and the desired representation of organic aerosols.
  #> For further information, please see:
  #> + AERO7 Release Notes section on 'Required emission updates':
  #>   https://github.com/USEPA/CMAQ/blob/master/DOCS/Release_Notes/aero7_overview.md
  #> + CMAQ User's Guide section 6.9.3 on 'Emission Compatability':
  #>   https://github.com/USEPA/CMAQ/blob/master/DOCS/Users_Guide/CMAQ_UG_ch06_model_configuration_options.md#6.9.3_Emission_Compatability
  #> + Emission Control (DESID) Documentation in the CMAQ User's Guide:
  #>   https://github.com/USEPA/CMAQ/blob/master/DOCS/Users_Guide/Appendix/CMAQ_UG_appendixB_emissions_control.md
  #>

  setenv DESID_CTRL_NML ${BLD}/CMAQ_Control_DESID.nml
  setenv DESID_CHEM_CTRL_NML ${BLD}/CMAQ_Control_DESID_${MECH}.nml

  #> The following namelist configures aggregated output (via the Explicit and Lumped
  #> Air Quality Model Output (ELMO) Module), domain-wide budget output, and chemical
  #> family output.
  setenv MISC_CTRL_NML ${BLD}/CMAQ_Control_Misc.nml


  #> Spatial Masks For Emissions Scaling
  #setenv CMAQ_MASKS $SZpath/ocean_scos_4km_156x102.ncf  #> horizontal grid-dependent surf zone file
  setenv CMAQ_MASKS /yoga10/CG/AERMOD/East_LA_SELA_CMAQ_mask/add_SE_ELA_mask/AIRBASINSMASKS_083121.ncf
  setenv CMAQ_SCAB_MASK /yoga10/chowes/grid_info_files/AIRBASINSMASKS_4km_083121.ncf


  #> Gridded Emissions Files
  setenv N_EMIS_GR 1
  # set EMISpath = /yoga10/PM2024Plan/emis_AltAttPM2024_s13_SC_offRdInc
  set EMISfile = "${EMISnamepattern}.${YYYYMMDD}.ncf"
  setenv GR_EMIS_001 ${EMISpath}/${EMISfile}
  setenv GR_EMIS_LAB_001 GRIDDED_EMIS
  setenv GR_EMIS_SYM_DATE_001 F


  if ( ! -f $GR_EMIS_001 ) then
        if ( -f ${GR_EMIS_001}.gz ) then
            echo "gunzipping emissions"
            cat ${GR_EMIS_001}.gz | gunzip > ${GR_EMIS_001}
        else
            echo "Emissions not found"
                        echo "Looked for ${EMISpath}/${EMISfile}"
                        exit
        endif
  endif

  #> In-Line Point Emissions configuration

  if ( $CTM_PT3DEMIS == 'Y' ) then
  setenv N_EMIS_PT 2          #> Number of elevated source groups
  set N_EMIS_PTf = 2          #> Number of elevated source groups

  #set STKCASEG = 4CALIF1_2011eh_saprc_10g                 # Stack Group Version Label
  #set STKCASEE = 4CALIF1_cmaq_saprc07TB_2011eh_saprc_10g  # Stack Emission Version Label

    set IN_PTpath = /pln6/MCS/SMOKE2020/SMOKE_for_SCAQMD_20201020/data/run_Base2018_May2022_wRxBurning_G619t_noOGVAircraft_Point/output/merge/
  setenv STK_GRPS_001 $IN_PTpath/stack_groups.point.4km.Base2018_May2022_wRxBurning_G619t_noOGVAircraft_Point.ncf
  setenv STK_EMIS_001 $IN_PTpath/inlnts_l.point.${YYYYMMDD}.1.4km.Base2018_May2022_wRxBurning_G619t_noOGVAircraft_Point.ncf
  setenv STK_EMIS_LAB_001 PT_ALL
  setenv STK_EM_SYM_DATE_001 T


  set IN_PTpath = /pln16/CARB/2018_SouthCoastSIP_20201124/AQ/CMAQ/mexico/2019ERGv1/by2018/mxpoint
  setenv STK_GRPS_002 $IN_PTpath/stack_groups.point.4km.SCAQMP_st_4k_by18_fy18_erg_snp20190930_v0001_mxpoint.ncf
  setenv STK_EMIS_002 $IN_PTpath/st_4k.ps.v0001_agg..2018.${YYYYJJJ}.erg_snp20190930_mxpoint.cmaq.saprc07tb.nc7
  setenv STK_EMIS_LAB_002 PT_MEX
  setenv STK_EM_SYM_DATE_002 T


 set IN_PTpath = /pln16/CARB/2018_SouthCoastSIP_20201124/AQ/CMAQ/wildfire/my2018
 set PT_WILD = "wild_inlin_file_${YYYYJJJ}.nc7"
 set PT_RX = "rx_inlin_file_${YYYYJJJ}.nc7"
 set PT_WFU = "wfu_inlin_file_${YYYYJJJ}.nc7"


  if ( -f ${IN_PTpath}/${PT_WILD} ) then
        @ N_EMIS_PTf = $N_EMIS_PTf + 1
        setenv STK_EMIS_00${N_EMIS_PTf} ${IN_PTpath}/${PT_WILD}
        setenv STK_GRPS_00${N_EMIS_PTf} ${IN_PTpath}/wild_stack_file_${YYYYJJJ}.nc7
        setenv STK_EMIS_LAB_00${N_EMIS_PTf} PT_WILD
        setenv STK_EM_SYM_DATE_00${N_EMIS_PTf} T
  endif

  if ( -f ${IN_PTpath}/${PT_RX} ) then
        @ N_EMIS_PTf = $N_EMIS_PTf + 1
        setenv STK_EMIS_00${N_EMIS_PTf} ${IN_PTpath}/${PT_RX}
        setenv STK_GRPS_00${N_EMIS_PTf} ${IN_PTpath}/rx_stack_file_${YYYYJJJ}.nc7
        setenv STK_EMIS_LAB_00${N_EMIS_PTf} PT_RX
        setenv STK_EM_SYM_DATE_00${N_EMIS_PTf} T
  endif

  if ( -f ${IN_PTpath}/${PT_WFU} ) then
        @ N_EMIS_PTf = $N_EMIS_PTf + 1
        setenv STK_EMIS_00${N_EMIS_PTf} ${IN_PTpath}/${PT_WFU}
        setenv STK_GRPS_00${N_EMIS_PTf} ${IN_PTpath}/wfu_stack_file_${YYYYJJJ}.nc7
        setenv STK_EMIS_LAB_00${N_EMIS_PTf} PT_WFU
        setenv STK_EM_SYM_DATE_00${N_EMIS_PTf} T
  endif

  # Model run without Fire Emissions
  # setenv N_EMIS_PT $N_EMIS_PTf

  setenv LAYP_STTIME $STTIME
  setenv LAYP_NSTEPS $NSTEPS
  setenv LAYP_STDATE $YYYYJJJ

  # Label Each Emissions Stream

  # Allow CMAQ to Use Point Source files with dates that do not
  # match the internal model date (Representative Days)

  endif

This was the run for all but the K/Fe/Ni 3x1 figure.The 3x1 figure was from another very similar run with many more emissions streams and species tracked in ISAM, and running with SAPRC22. I noticed the problem there so reverted to the simpler build with saprc07 to doublecheck, and saw about the same magnitude of bias.

Here’s the second half of the run script:


  #> Lightning NOx configuration
  if ( $CTM_LTNG_NO == 'Y' ) then
     setenv LTNGNO "InLine"    #> set LTNGNO to "Inline" to activate in-line calculation

  #> In-line lightning NOx options
     setenv USE_NLDN  Y        #> use hourly NLDN strike file [ default: Y ]
     if ( $USE_NLDN == Y ) then
        setenv NLDN_STRIKES ${IN_LTpath}/NLDN.12US1.${YYYYMMDD}.ioapi
     endif
     setenv LTNGPARMS_FILE ${IN_LTpath}/LTNG_AllParms_12US1.ncf #> lightning parameter file; ignore if LTNGPARAM = N
  endif

  #> In-line biogenic emissions configuration
  if ( $CTM_BIOGEMIS == 'Y' ) then
     set IN_BEISpath = ${INPDIR}/surface
     setenv GSPRO      $BLD/gspro_biogenics.txt
     setenv B3GRD      $IN_BEISpath/b3grd_4CALIF1_2011en_cb6_10.ncf
     setenv BIOSW_YN   Y     #> use frost date switch [ default: Y ]
     setenv BIOSEASON  $IN_BEISpath/bioseason.cmaq.2010j_4CALIF1.ncf_full
                             #> ignore season switch file if BIOSW_YN = N
     setenv SUMMER_YN  Y     #> Use summer normalized emissions? [ default: Y ]
     setenv PX_VERSION Y     #> MCIP is PX version? [ default: N ]
     setenv SOILINP    $OUTDIR/CCTM_SOILOUT_${RUNID}_${YESTERDAY}.nc
                             #> Biogenic NO soil input file; ignore if INITIAL_RUN = Y
  endif

  #> Windblown dust emissions configuration
  if ( $CTM_WB_DUST == 'Y' ) then
     # Input variables for BELD3 Landuse option
     setenv DUST_LU_1  $LUpath/beld3_4CALIF1_output_a.ncf
     setenv DUST_LU_2  $LUpath/beld3_4CALIF1_output_tot.ncf
  endif

  #> In-line Sea Spray emissions configuration
  setenv OCEAN_1 ${SZpath}/ocean_scos_4km_156x102.ncf  #> horizontal grid-dependent surf zone file

  #> Bidirectional ammonia configuration
  if ( $CTM_ABFLUX == 'Y' ) then
     setenv E2C_SOIL ${LUpath}/epic/US1_12km_soil.nc
     setenv E2C_CHEM ${LUpath}/epic/US1_12km_time${YYYYMMDD}.nc
     setenv E2C_LU ${LUpath}/beld4_12kmCONUS_2006nlcd.ncf
  endif

#> Inline Process Analysis
  setenv CTM_PROCAN N        #> use process analysis [ default: N]
  if ( $?CTM_PROCAN ) then   # $CTM_PROCAN is defined
     if ( $CTM_PROCAN == 'Y' || $CTM_PROCAN == 'T' ) then
#> process analysis global column, row and layer ranges
#       setenv PA_BCOL_ECOL "10 90"  # default: all columns
#       setenv PA_BROW_EROW "10 80"  # default: all rows
#       setenv PA_BLEV_ELEV "1  4"   # default: all levels
        setenv PACM_INFILE ${NMLpath}/pa_${MECH}.ctl
        setenv PACM_REPORT $OUTDIR/"PA_REPORT".${YYYYMMDD}
     endif
  endif

#> Integrated Source Apportionment Method (ISAM) Options
 setenv CTM_ISAM Y
 if ( $?CTM_ISAM ) then
    if ( $CTM_ISAM == 'Y' || $CTM_ISAM == 'T' ) then
       #setenv SA_IOLIST /pln6/MCS/CMAQ5.3.1/CMAQ-master/CCTM/scripts/isam_control.txt
       setenv SA_IOLIST /yoga10/chowes/CMAQ/CMAQv5.4_rzhang/CCTM/scripts/BLD_CCTM_v54_ISAM_intel/isam_control_pmCTH.txt
       setenv ISAM_BLEV_ELEV " 1 1"
       setenv AISAM_BLEV_ELEV " 1 1"

       #> Set Up ISAM Initial Condition Flags
       if ($NEW_START == true || $NEW_START == TRUE ) then
          setenv ISAM_NEW_START Y
          setenv ISAM_PREVDAY
       else
          setenv ISAM_NEW_START N
          setenv ISAM_PREVDAY "$OUTDIR/CCTM_SA_CGRID_${RUNID}_${YESTERDAY}.nc"
       endif

       #> Set Up ISAM Output Filenames
       setenv SA_ACONC_1      "$OUTDIR/CCTM_SA_ACONC_${CTM_APPL}.nc -v"
       setenv SA_CONC_1       "$OUTDIR/CCTM_SA_CONC_${CTM_APPL}.nc -v"
       setenv SA_DD_1         "$OUTDIR/CCTM_SA_DRYDEP_${CTM_APPL}.nc -v"
       setenv SA_WD_1         "$OUTDIR/CCTM_SA_WETDEP_${CTM_APPL}.nc -v"
       setenv SA_CGRID_1      "$OUTDIR/CCTM_SA_CGRID_${CTM_APPL}.nc -v"

       #> Set optional ISAM regions files
#      setenv ISAM_REGIONS /work/MOD3EVAL/nsu/isam_v53/CCTM/scripts/input/RGN_ISAM.nc

    endif
 endif


#> Sulfur Tracking Model (STM)
 setenv STM_SO4TRACK N        #> sulfur tracking [ default: N ]
 if ( $?STM_SO4TRACK ) then
    if ( $STM_SO4TRACK == 'Y' || $STM_SO4TRACK == 'T' ) then

      #> option to normalize sulfate tracers [ default: Y ]
      setenv STM_ADJSO4 Y

    endif
 endif

# =====================================================================
#> Output Files
# =====================================================================

  #> set output file names
  setenv S_CGRID         "$OUTDIR/CCTM_CGRID_${CTM_APPL}.nc"         #> 3D Inst. Concenctrations
  setenv CTM_CONC_1      "$OUTDIR/CCTM_CONC_${CTM_APPL}.nc -v"       #> On-Hour Concentrations
  setenv A_CONC_1        "$OUTDIR/CCTM_ACONC_${CTM_APPL}.nc -v"      #> Hourly Avg. Concentrations
  setenv CTM_ELMO_1      "$OUTDIR/CCTM_ELMO_${CTM_APPL}.nc -v"       #> On-Hour Particle Diagnostics
  setenv CTM_AELMO_1     "$OUTDIR/CCTM_AELMO_${CTM_APPL}.nc -v"      #> Hourly Avg. Particle Diagnostics
  setenv MEDIA_CONC      "$OUTDIR/CCTM_MEDIA_CONC_${CTM_APPL}.nc -v" #> NH3 Conc. in Media
  setenv CTM_DRY_DEP_1   "$OUTDIR/CCTM_DRYDEP_${CTM_APPL}.nc -v"     #> Hourly Dry Deposition
  setenv CTM_DEPV_DIAG   "$OUTDIR/CCTM_DEPV_${CTM_APPL}.nc -v"       #> Dry Deposition Velocities
  setenv B3GTS_S         "$OUTDIR/CCTM_B3GTS_S_${CTM_APPL}.nc -v"    #> Biogenic Emissions
  setenv SOILOUT         "$OUTDIR/CCTM_SOILOUT_${CTM_APPL}.nc"       #> Soil Emissions
  setenv CTM_WET_DEP_1   "$OUTDIR/CCTM_WETDEP1_${CTM_APPL}.nc -v"    #> Wet Dep From All Clouds
  setenv CTM_WET_DEP_2   "$OUTDIR/CCTM_WETDEP2_${CTM_APPL}.nc -v"    #> Wet Dep From SubGrid Clouds
  setenv CTM_PMDIAG_1    "$OUTDIR/CCTM_PMDIAG_${CTM_APPL}.nc -v"     #> On-Hour Particle Diagnostics
  setenv CTM_APMDIAG_1   "$OUTDIR/CCTM_APMDIAG_${CTM_APPL}.nc -v"    #> Hourly Avg. Particle Diagnostics
  setenv CTM_RJ_1        "$OUTDIR/CCTM_PHOTDIAG1_${CTM_APPL}.nc -v"  #> 2D Surface Summary from Inline Photolysis
  setenv CTM_RJ_2        "$OUTDIR/CCTM_PHOTDIAG2_${CTM_APPL}.nc -v"  #> 3D Photolysis Rates
  setenv CTM_RJ_3        "$OUTDIR/CCTM_PHOTDIAG3_${CTM_APPL}.nc -v"  #> 3D Optical and Radiative Results from Photolysis
  setenv CTM_SSEMIS_1    "$OUTDIR/CCTM_SSEMIS_${CTM_APPL}.nc -v"     #> Sea Spray Emissions
  setenv CTM_BUDGET      "$OUTDIR/CCTM_BUDGET_${CTM_APPL}.txt -v"    #> Budget [Default Off]
  setenv CTM_DUST_EMIS_1 "$OUTDIR/CCTM_DUSTEMIS_${CTM_APPL}.nc -v"   #> Dust Emissions
  setenv CTM_IPR_1       "$OUTDIR/CCTM_PA_1_${CTM_APPL}.nc -v"       #> Process Analysis
  setenv CTM_IPR_2       "$OUTDIR/CCTM_PA_2_${CTM_APPL}.nc -v"       #> Process Analysis
  setenv CTM_IPR_3       "$OUTDIR/CCTM_PA_3_${CTM_APPL}.nc -v"       #> Process Analysis
  setenv CTM_IRR_1       "$OUTDIR/CCTM_IRR_1_${CTM_APPL}.nc -v"      #> Chem Process Analysis
  setenv CTM_IRR_2       "$OUTDIR/CCTM_IRR_2_${CTM_APPL}.nc -v"      #> Chem Process Analysis
  setenv CTM_IRR_3       "$OUTDIR/CCTM_IRR_3_${CTM_APPL}.nc -v"      #> Chem Process Analysis
  setenv CTM_DRY_DEP_MOS "$OUTDIR/CCTM_DDMOS_${CTM_APPL}.nc -v"      #> Dry Dep
  setenv CTM_DRY_DEP_FST "$OUTDIR/CCTM_DDFST_${CTM_APPL}.nc -v"      #> Dry Dep
  setenv CTM_DEPV_MOS    "$OUTDIR/CCTM_DEPVMOS_${CTM_APPL}.nc -v"    #> Dry Dep Velocity
  setenv CTM_DEPV_FST    "$OUTDIR/CCTM_DEPVFST_${CTM_APPL}.nc -v"    #> Dry Dep Velocity
  setenv CTM_VDIFF_DIAG  "$OUTDIR/CCTM_VDIFF_DIAG_${CTM_APPL}.nc -v" #> Vertical Dispersion Diagnostic
  setenv CTM_VSED_DIAG   "$OUTDIR/CCTM_VSED_DIAG_${CTM_APPL}.nc -v"  #> Particle Grav. Settling Velocity
  setenv CTM_LTNGDIAG_1  "$OUTDIR/CCTM_LTNGHRLY_${CTM_APPL}.nc -v"   #> Hourly Avg Lightning NO
  setenv CTM_LTNGDIAG_2  "$OUTDIR/CCTM_LTNGCOL_${CTM_APPL}.nc -v"    #> Column Total Lightning NO
  setenv CTM_VEXT_1      "$OUTDIR/CCTM_VEXT_${CTM_APPL}.nc -v"       #> On-Hour 3D Concs at select sites

  #> set floor file (neg concs)
  setenv FLOOR_FILE ${OUTDIR}/FLOOR_${CTM_APPL}.txt

  #> look for existing log files and output files
  ( ls CTM_LOG_???.${CTM_APPL} > buff.txt ) >& /dev/null
  ( ls ${LOGDIR}/CTM_LOG_???.${CTM_APPL} >> buff.txt ) >& /dev/null
  set log_test = `cat buff.txt`; rm -f buff.txt

  set OUT_FILES = (${FLOOR_FILE} ${S_CGRID} ${CTM_CONC_1} ${A_CONC_1} ${MEDIA_CONC}         \
             ${CTM_DRY_DEP_1} $CTM_DEPV_DIAG $B3GTS_S $SOILOUT $CTM_WET_DEP_1\
             $CTM_WET_DEP_2 $CTM_PMDIAG_1 $CTM_APMDIAG_1             \
             $CTM_RJ_1 $CTM_RJ_2 $CTM_RJ_3 $CTM_SSEMIS_1 $CTM_DUST_EMIS_1 $CTM_IPR_1 $CTM_IPR_2       \
             $CTM_IPR_3 $CTM_IRR_1 $CTM_IRR_2 $CTM_IRR_3 $CTM_DRY_DEP_MOS                   \
             $CTM_DRY_DEP_FST $CTM_DEPV_MOS $CTM_DEPV_FST $CTM_VDIFF_DIAG $CTM_VSED_DIAG    \
             $CTM_LTNGDIAG_1 $CTM_LTNGDIAG_2 $CTM_VEXT_1 )
  if ( $?CTM_ISAM ) then
     if ( $CTM_ISAM == 'Y' || $CTM_ISAM == 'T' ) then
        set OUT_FILES = (${OUT_FILES} ${SA_ACONC_1} ${SA_CONC_1} ${SA_DD_1} ${SA_WD_1}      \
                         ${SA_CGRID_1} ${CTM_BUDGET})
        #set OUT_FILES = (${OUT_FILES} ${SA_ACONC_1} ${SA_CONC_1}       \
        #         ${SA_CGRID_1} ${CTM_BUDGET})

     endif
  endif
  set OUT_FILES = `echo $OUT_FILES | sed "s; -v;;g" `
  ( ls $OUT_FILES > buff.txt ) >& /dev/null
  set out_test = `cat buff.txt`; rm -f buff.txt

  #> delete previous output if requested
  if ( $CLOBBER_DATA == true || $CLOBBER_DATA == TRUE ) then
     echo
     echo "Existing Logs and Output Files for Day ${TODAYG} Will Be Deleted"

     #> remove previous log files
     foreach file ( ${log_test} )
        #echo "Deleting log file: $file"
        /bin/rm -f $file
     end

     #> remove previous output files
     foreach file ( ${out_test} )
        #echo "Deleting output file: $file"
        /bin/rm -f $file
     end
     /bin/rm -f ${OUTDIR}/CCTM_EMDIAG*${RUNID}_${YYYYMMDD}.nc

  else
     #> error if previous log files exist
     if ( "$log_test" != "" ) then
       echo "*** Logs exist - run ABORTED ***"
       echo "*** To overide, set CLOBBER_DATA = TRUE in run_cctm.csh ***"
       echo "*** and these files will be automatically deleted. ***"
       exit 1
     endif

     #> error if previous output files exist
     if ( "$out_test" != "" ) then
       echo "*** Output Files Exist - run will be ABORTED ***"
       foreach file ( $out_test )
          echo " cannot delete $file"
       end
       echo "*** To overide, set CLOBBER_DATA = TRUE in run_cctm.csh ***"
       echo "*** and these files will be automatically deleted. ***"
       exit 1
     endif
  endif

  #> for the run control ...
  setenv CTM_STDATE      $YYYYJJJ
  setenv CTM_STTIME      $STTIME
  setenv CTM_RUNLEN      $NSTEPS
  setenv CTM_TSTEP       $TSTEP
  setenv INIT_CONC_1 $ICpath/$ICFILE
  setenv BNDY_CONC_1 $BCpath/$BCFILE
  setenv OMI $OMIpath/$OMIfile
  setenv OPTICS_DATA $OMIpath/$OPTfile
  #setenv XJ_DATA $JVALpath/$JVALfile
  set TR_DVpath = $METpath
  set TR_DVfile = $MET_CRO_2D

  #> species defn & photolysis
  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

  #> check for photolysis input data
  setenv CSQY_DATA ${NMLpath}/CSQY_DATA_$MECH

  if (! (-e $CSQY_DATA ) ) then
     echo " $CSQY_DATA  not found "
     exit 1
  endif
  if (! (-e $OPTICS_DATA ) ) then
     echo " $OPTICS_DATA  not found "
     exit 1
  endif

# ===================================================================
#> Execution Portion
# ===================================================================

  #> Print attributes of the executable
  if ( $CTM_DIAG_LVL != 0 ) then
     ls -l $BLD/$EXEC
     size $BLD/$EXEC
     unlimit
     limit
  endif

  #> Print Startup Dialogue Information to Standard Out
  echo
  echo "CMAQ Processing of Day $YYYYMMDD Began at `date`"
  echo

  #> Executable call for single PE, uncomment to invoke
  #( /usr/bin/time -p $BLD/$EXEC ) |& tee buff_${EXECUTION_ID}.txt

  #> Executable call for multi PE, configure for your system
  # set MPI = /usr/local/intel/impi/3.2.2.006/bin64
  # set MPIRUN = $MPI/mpirun
  ( /usr/bin/time -p $MPIRUN -np $NPROCS $BLD/$EXEC ) |& tee buff_${EXECUTION_ID}.txt

  #> Harvest Timing Output so that it may be reported below
  set rtarray = "${rtarray} `tail -3 buff_${EXECUTION_ID}.txt | grep -Eo '[+-]?[0-9]+([.][0-9]+)?' | head -1` "
  rm -rf buff_${EXECUTION_ID}.txt


          if ( -f $EMISpath/${EMISfile}.gz ) then
                if ( -f $EMISpath/$EMISfile ) then
                        echo "archive exists, removing expanded emissions"
                        ls -l $EMISpath/${EMISfile}.gz
                        ls -l $EMISpath/${EMISfile}
                        rm -v $EMISpath/${EMISfile}
                endif
        endif

           rm  ${CTM_CONC_1} ${MEDIA_CONC}
           rm $B3GTS_S $SOILOUT
          # rm  ${CTM_DRY_DEP_1} $CTM_DEPV_DIAG $B3GTS_S $SOILOUT $CTM_WET_DEP_1
           #rm  $CTM_WET_DEP_2 $CTM_PMDIAG_1
           rm  $CTM_RJ_1 $CTM_RJ_2 $CTM_RJ_3 $CTM_SSEMIS_1 $CTM_DUST_EMIS_1 $CTM_IPR_1 $CTM_IPR_2
           rm  $CTM_IPR_3 $CTM_IRR_1 $CTM_IRR_2 $CTM_IRR_3 $CTM_DRY_DEP_MOS
           rm  $CTM_DRY_DEP_FST $CTM_DEPV_MOS $CTM_DEPV_FST $CTM_VDIFF_DIAG $CTM_VSED_DIAG $CTM_LTNGDIAG_1 $CTM_LTNGDIAG_2 $CTM_VEXT_1


  #> Abort script if abnormal termination
  if ( ! -e $S_CGRID ) then
    echo ""
    echo "**************************************************************"
    echo "** Runscript Detected an Error: CGRID file was not written. **"
    echo "**   This indicates that CMAQ was interrupted or an issue   **"
    echo "**   exists with writing output. The runscript will now     **"
    echo "**   abort rather than proceeding to subsequent days.       **"
    echo "**************************************************************"
    break
  endif

  #> Print Concluding Text
  echo
  echo "CMAQ Processing of Day $YYYYMMDD Finished at `date`"
  echo
  echo "\\\\\=====\\\\\=====\\\\\=====\\\\\=====/////=====/////=====/////=====/////"
  echo

# ===================================================================
#> Finalize Run for This Day and Loop to Next Day
# ===================================================================

  #> Save Log Files and Move on to Next Simulation Day
  mv CTM_LOG_000.${CTM_APPL} $LOGDIR
  rm CTM_LOG_*.${CTM_APPL}
  if ( $CTM_DIAG_LVL != 0 ) then
    mv CTM_DIAG_???.${CTM_APPL} $LOGDIR
  endif

  #> The next simulation day will, by definition, be a restart
  setenv NEW_START false

  #> Increment both Gregorian and Julian Days
  set TODAYG = `date -d "${TODAYG}+1days" +%Y-%m-%d` #> Add a day for tomorrow
  set TODAYJ = `date -d "${TODAYG}" +%Y%j` #> Convert YYYY-MM-DD to YYYYJJJ

end  #Loop to the next Simulation Day

# ===================================================================
#> Generate Timing Report
# ===================================================================
set RTMTOT = 0
foreach it ( `seq ${NDAYS}` )
    set rt = `echo ${rtarray} | cut -d' ' -f${it}`
    set RTMTOT = `echo "${RTMTOT} + ${rt}" | bc -l`
end

set RTMAVG = `echo "scale=2; ${RTMTOT} / ${NDAYS}" | bc -l`
set RTMTOT = `echo "scale=2; ${RTMTOT} / 1" | bc -l`

echo
echo "=================================="
echo "  ***** CMAQ TIMING REPORT *****"
echo "=================================="
echo "Start Day: ${START_DATE}"
echo "End Day:   ${END_DATE}"
echo "Number of Simulation Days: ${NDAYS}"
echo "Domain Name:               ${GRID_NAME}"
echo "Number of Grid Cells:      ${NCELLS}  (ROW x COL x LAY)"
echo "Number of Layers:          ${NZ}"
echo "Number of Processes:       ${NPROCS}"
echo "   All times are in seconds."
echo
echo "Num  Day        Wall Time"
set d = 0
set day = ${START_DATE}
foreach it ( `seq ${NDAYS}` )
    # Set the right day and format it
    set d = `echo "${d} + 1"  | bc -l`
    set n = `printf "%02d" ${d}`

    # Choose the correct time variables
    set rt = `echo ${rtarray} | cut -d' ' -f${it}`

    # Write out row of timing data
    echo "${n}   ${day}   ${rt}"

    # Increment day for next loop
    set day = `date -d "${day}+1days" +%Y-%m-%d`
end
echo "     Total Time = ${RTMTOT}"
echo "      Avg. Time = ${RTMAVG}"

if (("$1" == "q4" || "$EDATE" == 20181231 )  && "$2" == "postproc" ) then
    cd $OUTDIR
    cd ..
    set outpath=$cwd
    set pattern_dir='cctm_${RUNID}' # pattern as part of dir names, as in []_q1
    set alldir=${outpath}/${pattern_dir}_all

    # ================== Organize files in one place
    echo "Linking files into $alldir"
    mkdir -p "$alldir"
    foreach dir in $(find ${outpath}/${pattern_dir}* -type d -not -path '*_all');
        do
        #echo $dir
        cd $alldir
        ln -s $dir/* .
        cd ..
    end
#================== Run postprocessing on those files
cd /yoga10/chowes/CMAQ/scripts_otherRuns/
nohup ./postproc_script.sh $alldir $RUNID

endif

exit

Calvin,

I was asking for the contents of the isam control file. It looks like for your case, that is:

/yoga10/chowes/CMAQ/CMAQv5.4_rzhang/CCTM/scripts/BLD_CCTM_v54_ISAM_intel/isam_control_pmCTH.txt

Sergey