Running DESID Module on CMAQ-HDDMv5.4

Hy,
I’m very new to using DESID module. I am trying to scale PT_EGU’s SO2 emissions by 10 times. Based on the tutorial mentioned in CMAQ github, I have updated CMAQ_Control_DESID_cb6r5_ae7_aq.nml [inside of BLD_CCTM_v54_DDM3D_gcc] folder (also attached below) file like this:

‘EVERYWHERE’, ‘ALL’ ,‘SO2’ ,‘SO2’ ,‘GAS’ ,10 ,‘UNIT’,‘o’,
‘EVERYWHERE’, ‘PT_EGU’ ,‘SO2’ ,‘SO2’ ,‘GAS’ ,10 ,‘UNIT’,‘o’,

I have also updated CMAQ_Control_DESID.nml [inside of BLD_CCTM_v54_DDM3D_gcc] file like this (also attached below):

&Desid_StreamFamVars
Desid_N_Stream_Fams = 1 ! Exact number of stream family definitions
Desid_Max_Stream_Fam_Members = 20 ! Larger than the number of streams on all
! family definitions
/

&Desid_StreamFam
! For emission streams available in several run scripts under CCTM/scripts
! Set Desid_N_Stream_Fams to 1 !!!
StreamFamilyName(1) = ‘PT_SOURCES’
StreamFamilyMembers(1,1:3)= ‘PT_NONEGU’,‘PT_EGU’,‘PT_OTHER’

I’m not sure if I’m doing this right or wrong. After I updated the files, I ran my script (attached below), however, I did not find any CCTM_DESID output. All other outputs were there like CCTM_ACONC, CCTM_AELMO etc except CCTM_DESID output. Please have a look at the attached files and let me know what steps I need to follow correctly.

Thanks
Rasel
CMAQ_Control_DESID_cb6r5_ae7_aq.nml.txt (13.0 KB)
CMAQ_Control_DESID.nml.txt (13.8 KB)
run_cctm_desid.csh_sbatch.txt (41.4 KB)

Hi Rasel,
Do you want to just run desid to do the emission reduction, or you wants to run desid for emission reduction and run DDM3D as well. when we look at your files the desid diagonstics are set to 0. So you need to change that also. Detailed description is mentioned below.

Set of operations defined in desid.

  • ‘Operation’ - Specifies the kind of rule to be carried out. Options are:
    • ‘a’ - add the rule to existing instructions. This operation should be used for new entries, too.
    • ‘m’ - find existing scaling instructions matching this rule’s features (ie. species, streams, etc) and multiply them by the factor in this particular rule.
    • ‘o’ - find existing scaling instructions matching this rule and overwrite them.

For example : The following rule in the Chemical Maping Control Namelist will scale all emissions from one example stream (“MOBILE”) by a factor of 2. The operator ‘m’ will multiply the cumulative value of all scale factors that have been applied for the “MOBILE” stream to that point.

! Region      | Stream Label  |Emission | CMAQ-        |Phase/|Scale |Basis |Op  !  Label      |               |Surrogate| Species      |Mode  |Factor|      |'EVERYWHERE'  , 'MOBILE'      ,'All'    ,'All'         ,'All' ,2.0  ,'UNIT','m',

First in your CMAQ_Control_DESID_cb6r5_ae7_aq.nml. this should be your change.

!‘EVERYWHERE’, ‘ALL’ ,‘SO2’ ,‘SO2’ ,‘GAS’ ,10 ,‘UNIT’,‘o’ # this need to be commented
‘EVERYWHERE’, ‘PT_EGU’ ,‘SO2’ ,‘SO2’ ,‘GAS’ ,10 ,‘UNIT’,‘m’,

Secondly in your CMAQ_Control_DESID.nml file activate the desid diagnostics. This should be your change. In your file Desid_N_Diag_Rules is set to 0


&Desid_DiagVars
  Desid_N_Diag_Rules = 1    ! Exact Number of Diagnostic Rules Below
  Desid_Max_Diag_Streams=20 ! Maximum number of species variables on all rules 
                            ! below (do not count expansions)
  Desid_Max_Diag_Spec = 80  ! Maximum number of species variables on all rules 
                            ! below (do not count expansions)
/
&Desid_StreamFamVars
 Desid_N_Stream_Fams = 2           ! Exact number of stream family definitions
 Desid_Max_Stream_Fam_Members = 20 ! Larger than the number of streams on all
                                   ! family definitions
/
&Desid_StreamFam
! For emission streams available in several run scripts under CCTM/scripts

  StreamFamilyName(1)     = 'PT_SOURCES'
  StreamFamilyMembers(1,1:3)= 'PT_NONEGU','PT_EGU','PT_OTHER'

  StreamFamilyName(2)     = 'PT_EGUS'
  StreamFamilyMembers(2,1:1)= 'PT_EGU'

and also this change in &Desid_Diag this changes you need to do.

&Desid_Diag
    Desid_Diag_Streams_Nml(1,:)= 'PT_EGUS'
    Desid_Diag_Fmt_Nml(1)      = 'COLSUM'
    Desid_Diag_Spec_Nml(1,:)   = 'ALL'

/

@manishsoni

Hy,
Thank you for clarifying the steps. I want to run DESID to see change in emissions and also would like to run DDM3D as well. In addition to see PT_EGU impact, I would like to see impact of NOx emissions change from all sources as well. What do I need to adjust for that?

Thanks
Rasel

This DESID User Guide gives example use cases.

First step would be to define a family of chemical species for NOX.

Chemical families are defined by prescribing, via the CMAQ Miscellaneous Control File, the total number of chemical families to be used, the name of each, the number of members of each family, and the name of each family member.

In the default CMAQ_Control_Misc.nml file, the NOX family is given as an example, but is commented out.

To add the NOX family definition, change the default setting:

!------------------------------------------------------------------------------!
! Emissions Scaling Family Definitions                                         !
!    This component includes definitions for families of CMAQ chemical species,  !
!    emission streams and region combinations.                                 !
!------------------------------------------------------------------------------!
&Chemical_FamVars
 N_Chem_Fams = 0
 Max_Chem_Fam_Members = 20
/

&ChemicalFamilies
! ChemFamilyName(1)     = 'NOX'
! ChemFamilyMembers(1,:)= 'NO','NO2'
/

To the following, note I have removed the ! or comment from lines 132 and 133 in the default file, and I have modified N_Chem_Fams = 0 to N_Chem_Fams = 1.

!------------------------------------------------------------------------------!
! Emissions Scaling Family Definitions                                         !
!    This component includes definitions for families of CMAQ chemical species,  !
!    emission streams and region combinations.                                 !
!------------------------------------------------------------------------------!
&Chemical_FamVars
 N_Chem_Fams = 1
 Max_Chem_Fam_Members = 20
/

&ChemicalFamilies
 ChemFamilyName(1)     = 'NOX'
 ChemFamilyMembers(1,:)= 'NO','NO2'
/

Once NOX is defined, then you can use it to set the scaling factor as you did for SO2.

@lizadams

Hy Liz,
Can you please have a look at my CMAQ_Control_DESID_cb6r5_ae7_aq.nml.txt, CMAQ_Control_Misc.nml.txt, and CMAQ_Control_DESID.nml.txt file to see if I’ve changed those file correctly? I’m trying to run CMAQ-DDMv5.4 and trying to use DESID to scale PT_EGU emissions, and NOX [from all sources] emissions by 10 times. Please let me know if I need to correct anything.

Thanks
Rasel
CMAQ_Control_DESID_cb6r5_ae7_aq.nml.txt (13.1 KB)
CMAQ_Control_Misc.nml.txt (8.0 KB)
CMAQ_Control_DESID.nml.txt (14.0 KB)
run_cctm_desid.csh_sbatch.txt (41.4 KB)

In your run script you have one of the emissions streams labeled as PT_EGU

setenv STK_EMIS_LAB_002 PT_EGU

In your CMAQ_Control_DESID.nml.txt file, you define the StreamFamilyName to be identical as the StreamFamilyMembers.
I don’t know what the impact of having the same name for the stream family as the stream family member.

StreamFamilyName(2) = ‘PT_EGU’
StreamFamilyMembers(2,1:1)= ‘PT_EGU’

I would recommend using a unique name for the StreamFamilyName(2). To distinuguish between the two. You could use PT_EGU_FAM for the StreamFamilyName. I think we had suggested PT_EGUS in the responses above, which was not clear.

StreamFamilyName(2) = ‘PT_EGU_FAM’
StreamFamilyMembers(2,1:1)= ‘PT_EGU’

However, you may not need a new StreamFamilyName, as the PT_EGU is the only member in the StreamFamilyName(2). So, you could use the PT_EGU emission stream label, without defining a new family.

It doesn’t appear that you need any new stream families to be defined, as you only want to multiply the PT_EGU stream by 10 for SO2, and all emission streams by 10 for NOX.

I am going to assume that the clearest method is to not define any Stream Families. Note, I have commented out the StreamFamilyName(1) and StreamFamilyName(2) by using the ! at the front of those lines.

&Desid_StreamFamVars
 Desid_N_Stream_Fams = 0           ! Exact number of stream family definitions
 Desid_Max_Stream_Fam_Members = 20 ! Larger than the number of streams on all 
                                   ! family definitions
/

&Desid_StreamFam
! For emission streams available in several run scripts under CCTM/scripts     
 ! Set Desid_N_Stream_Fams to 1 !!!!!!!
  !StreamFamilyName(1)     = 'PT_SOURCES'
  !StreamFamilyMembers(1,1:3)= 'PT_NONEGU','PT_EGU','PT_OTHER'

  !StreamFamilyName(2)     = 'PT_EGU_FAM'
  !StreamFamilyMembers(2,1:1)= 'PT_EGU'

In the diagnostic rules section, you need to activate the DESID reporting of SO2 from PT_EGU and NOX from all sources

In this example, I’ve changed the number of Diagnosic Rules to 2, and listed two rules below. The first rule will print out the column sum for the SO2 variable for the PT_EGU emissions stream, and the second rule will print out the column sum for NOX from all emission streams.


&Desid_DiagVars
  Desid_N_Diag_Rules = 2    ! Exact Number of Diagnostic Rules Below


&Desid_Diag
    Desid_Diag_Streams_Nml(1,:)= 'PT_EGU'
    Desid_Diag_Fmt_Nml(1)      = 'COLSUM'
    Desid_Diag_Spec_Nml(1,:)   = 'SO2'

    Desid_Diag_Streams_Nml(2,:)= 'ALL'
    Desid_Diag_Fmt_Nml(2)      = 'COLSUM'
    Desid_Diag_Spec_Nml(2,:)   = 'NOX'

In the CMAQ_Control_DESID_cb6r5_ae7_aq.nml file, I think you have the scaling set correctly to increase the SO2 by 10x for the PT_EGU Stream Label, and to increase NOX by 10x for all emission streams.

&Desid_Scaling
 Desid_Rules_nml =

 ! Region      | Stream Label  |Emission | CMAQ-        |Phase/|Scale |Basis |Op
 !  Label      |               |Species  | Species      |Mode  |Factor|      |

   ! Gases
   'EVERYWHERE', 'ALL'         ,'NO2'    ,'NO2'         ,'GAS'  ,1  ,'UNIT','a',
   'EVERYWHERE', 'ALL'         ,'NO'     ,'NO'          ,'GAS'  ,1  ,'UNIT','a',

   'EVERYWHERE', 'ALL'         ,'NOX'    ,'NOX'         ,'GAS'  ,10  ,'UNIT','m',

   'EVERYWHERE', 'ALL'         ,'HONO'   ,'HONO'        ,'GAS'  ,1.  ,'UNIT','a',
   'EVERYWHERE', 'ALL'         ,'SO2'    ,'SO2'         ,'GAS'  ,1  ,'UNIT','a',

   'EVERYWHERE', 'PT_EGU'         ,'SO2'    ,'SO2'         ,'GAS'  ,10  ,'UNIT','m',

What I am unclear about, is whether multiplying by a factor of 10 for NOX only applies to emission streams that are defined in the run script. For your case, this would be the Point Source Emissions. Or, is DESID also able to multiply by a factor of 10 the NOX from the Gridded Emissions File that is defined here:

  #> Gridded Emissions files
  setenv N_EMIS_GR 1 #2
  set EMISfile  = all/emis_mole_all_${YYYYMMDD}_${APPL}_nobeis_2016fh_16j.ncf

I found the answer, the Gridded Emissions are labeled in your run script as GRIDDED_EMIS, so they will be included in the definition of ALL.

  #> Gridded Emissions files
  setenv N_EMIS_GR 1 #2
  set EMISfile  = all/emis_mole_all_${YYYYMMDD}_${APPL}_nobeis_2016fh_16j.ncf
  setenv GR_EMIS_001 ${EMISpath}/${EMISfile}
  setenv GR_EMIS_LAB_001 GRIDDED_EMIS
  setenv GR_EM_SYM_DATE_001 F # To change default behaviour please see Users Guide for EMIS_SYM_DATE

Also, it will be better to show us your sensinput file of DDM for sensitivity for NOx emissions.
Here is an example file: https://github.com/USEPA/CMAQ/blob/main/CCTM/scripts/sensinput.2016_12SE1.dat

@lizadams
Hy Liz,
I’ve modified the files like you suggested and it worked fine. However, when I’m running the CCTM script for 1 month (July, 2020), I’m currently seeing following error:

 Could not determine Courant-condition safe sync step for model step: 010000 HHMMSS
 (Max vel)/(dX) =  Infinity
 *** ERROR ABORT in subroutine ADVSTEP on PE 000  

Please see the attached log file, script, and DESID files. Can you please let me know why am I seeing this error?

@manishsoni

Please see the attached sensinput file.

Regards,
Rasel
run_cctm_desid.csh_sbatch.txt (41.4 KB)
CMAQ_Control_Misc.nml.txt (8.0 KB)
CMAQ_Control_DESID_cb6r5_ae7_aq.nml.txt (13.1 KB)
CMAQ_Control_DESID.nml.txt (14.1 KB)
sensinput.ptegu.dat.txt (2.4 KB)
CTM_LOG_000.v54_DDM3D_gcc_AQF5X_20200701.txt (1.0 MB)

@lizadams
Hy Liz,

Any suggestion how to solve this error?

Could not determine Courant-condition safe sync step for model step: 010000 HHMMSS
(Max vel)/(dX) = Infinity
*** ERROR ABORT in subroutine ADVSTEP on PE 000

Thanks
Rasel

Hi,

I found this nice explanation of the error message that you are getting.

I would try running your scenario without DDM-3D and see if you encounter the same error.

This post may also help you try adjusting settings for the base case (without DDM-3D) in the run script.

Once you solve the issue with your base case, then you can try the DDM-3D instrumented version.

Liz