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.
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?
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.