diff --git a/.gitignore b/.gitignore
index 18ee78968c..2ff73275bf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,8 @@ src/physics/carma/base
src/physics/clubb
src/physics/cosp2/src
src/physics/silhs
-
+src/chemistry/geoschem/geoschem_src
+src/hemco
# Ignore compiled python
buildnmlc
diff --git a/Externals.cfg b/Externals.cfg
index ae55b59381..116a6473a2 100644
--- a/Externals.cfg
+++ b/Externals.cfg
@@ -2,21 +2,21 @@
schema_version = 1.0.0
[cice]
-tag = cice5_cesm2_0_rel_01
+tag = cice5_20190318
protocol = git
repo_url = https://github.com/ESCOMP/CESM_CICE5
required = True
local_path = components/cice
[cime]
-tag = cime_cesm2_0_rel_06
+tag = cime5.6.13
protocol = git
repo_url = https://github.com/ESMCI/cime
required = True
local_path = cime
[cism]
-tag = release-cesm2.0.01
+tag = release-cesm2.0.04
protocol = git
repo_url = https://github.com/ESCOMP/cism-wrapper
externals = Externals_CISM.cfg
@@ -24,7 +24,7 @@ required = True
local_path = components/cism
[clm]
-tag = release-clm5.0.01
+tag = release-clm5.0.20
protocol = git
repo_url = https://github.com/ESCOMP/ctsm
externals = Externals_CLM.cfg
@@ -32,14 +32,14 @@ required = True
local_path = components/clm
[mosart]
-tag = release-cesm2.0.00
+tag = release-cesm2.0.03
protocol = git
repo_url = https://github.com/ESCOMP/mosart
required = True
local_path = components/mosart
[rtm]
-tag = release-cesm2.0.00
+tag = release-cesm2.0.02
protocol = git
repo_url = https://github.com/ESCOMP/rtm
required = True
diff --git a/Externals_CAM.cfg b/Externals_CAM.cfg
index b9f5082208..adf52e8afd 100644
--- a/Externals_CAM.cfg
+++ b/Externals_CAM.cfg
@@ -1,22 +1,22 @@
[chem_proc]
local_path = chem_proc
protocol = svn
-repo_url = https://svn-ccsm-models.cgd.ucar.edu/tools/proc_atm/chem_proc/trunk_tags/
-tag = chem_proc5_0_03
+repo_url = https://svn-ccsm-models.cgd.ucar.edu/tools/proc_atm/chem_proc/release_tags/
+tag = chem_proc5_0_03_rel
required = True
[carma]
local_path = src/physics/carma/base
protocol = svn
-repo_url = https://svn-ccsm-models.cgd.ucar.edu/carma/trunk_tags/
-tag = carma3_49
+repo_url = https://svn-ccsm-models.cgd.ucar.edu/carma/release_tags/
+tag = carma3_49_rel
required = True
[clubb]
local_path = src/physics/clubb
protocol = svn
-repo_url = https://svn-ccsm-models.cgd.ucar.edu/clubb_core/branch_tags/
-tag = vendor_clubb_r8099_tags/vendor_clubb_r8099_n02
+repo_url = https://svn-ccsm-models.cgd.ucar.edu/clubb_core/release_tags/
+tag = clubb_r8099_n02_rel
required = True
[cosp2]
@@ -26,6 +26,21 @@ repo_url = https://github.com/CFMIP/COSPv2.0/tags/
tag = v2.0.3cesm/src
required = True
+[geoschem]
+local_path = src/chemistry/geoschem/geoschem_src
+protocol = git
+branch = CESM
+repo_url = https://github.com/CESM-GC/geos-chem
+required = True
+
+[hemco]
+local_path = src/hemco
+protocol = git
+branch = development
+repo_url = https://github.com/jimmielin/HEMCO_CESM.git
+required = True
+externals = Externals_HCO.cfg
+
[externals_description]
schema_version = 1.0.0
diff --git a/README.md b/README.md
index 99d0dceb22..98e88383c4 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,5 @@
# CAM: The Community Atmosphere Model
-## NOTE: This is unsupported development code and is subject to the [CESM developer's agreement](http://www.cgd.ucar.edu/cseg/development-code.html).
-
CAM Documentation - https://ncar.github.io/CAM/doc/build/html/index.html
CAM6 namelist settings - http://www.cesm.ucar.edu/models/cesm2/settings/current/cam_nml.html
diff --git a/bld/build-namelist b/bld/build-namelist
index 2b470043b8..38228cc678 100755
--- a/bld/build-namelist
+++ b/bld/build-namelist
@@ -665,7 +665,7 @@ my $rad_prog_bcarb = (($prog_species =~ "BC" or $aero_chem) and !($chem_rad_pa
my $rad_prog_sulf = (($prog_species =~ "SO4" or $aero_chem) and !($chem_rad_passive));
my $rad_prog_dust = (($prog_species =~ "DST" or $aero_chem) and !($chem_rad_passive));
my $rad_prog_sslt = (($prog_species =~ "SSLT" or $aero_chem) and !($chem_rad_passive));
-my $rad_prog_ozone = (($chem =~ "mozart" or $chem =~ "waccm_ma" or $chem =~ "tsmlt" or $chem =~ "trop_strat") and !($chem_rad_passive));
+my $rad_prog_ozone = (($chem =~ "mozart" or $chem =~ "waccm_ma" or $chem =~ "tsmlt" or $chem =~ "trop_strat" or $chem =~ /geoschem/) and !($chem_rad_passive));
# Check for eruptive volcano emissions. These will be radiatively active by default, but
# only if using BAM and the camrt radiation package
@@ -707,6 +707,11 @@ if ( ($chem ne 'none') or ( $prog_species ) ){
add_default($nl, 'gas_wetdep_method' );
add_default($nl, 'gas_wetdep_list', 'val'=>$gas_wetdep_list );
}
+
+ if ($chem =~ /geoschem/) {
+ $prescribe_aerosols = $FALSE;
+ }
+
if (length($aer_wetdep_list)>2){
# determine if prescribed aerosols are not needed ...
if ($aer_wetdep_list =~ /so4/i &&
@@ -740,6 +745,10 @@ if ( ($chem ne 'none') or ( $prog_species ) ){
if (length($aer_drydep_list)>2){
add_default($nl, 'aer_drydep_list', 'val'=>$aer_drydep_list );
}
+ $nl->set_variable_value('aerosol_nl', 'aer_drydep_list', $aer_drydep_list);
+ $nl->set_variable_value('aerosol_nl', 'aer_wetdep_list', $aer_wetdep_list);
+ $nl->set_variable_value('drydep_inparm', 'drydep_list', $gas_drydep_list);
+ $nl->set_variable_value('wetdep_inparm', 'gas_wetdep_list', $gas_wetdep_list);
}
if ($chem) {
# Dry Deposition -- The responsibility for dry deposition is shared between CAM and CLM.
@@ -895,9 +904,17 @@ if ($co2_cycle) {
# Check whether user has explicitly turned off reading the aircraft CO2 dataset.
# (user specification has higher precedence than the true value set above)
if ($nl->get_value('co2_readflux_aircraft') =~ /$TRUE/io) {
- add_default($nl, 'aircraft_specifier');
+
+ my $rel_filepath = get_default_value('ac_CO2_emis');
+ my $emisval = quote_string('ac_CO2 -> ' . $rel_filepath);
+ add_default($nl, 'aircraft_specifier', 'val'=>$emisval);
+
add_default($nl, 'aircraft_datapath');
add_default($nl, 'aircraft_type');
+ # This should be the same file as the one in the aircraft_specifier file.
+ # This is a workaround to get this filepath into the cam.input_data_list file
+ # to allow the CESM scripts to obtain all required data for a run.
+ add_default($nl, 'aircraft_co2_file');
}
}
}
@@ -981,7 +998,7 @@ my $radval = "'A:Q:H2O'";
if (($chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/) and !$chem_rad_passive) {
$radval .= ",'A:O2:O2','A:CO2:CO2'";
}
-elsif ($chem =~ /trop_strat/ and !$chem_rad_passive) {
+elsif (($chem =~ /trop_strat/ or $chem =~ /geoschem/) and !$chem_rad_passive) {
$radval .= ",'N:O2:O2','A:CO2:CO2'";
}
elsif ($co2_cycle and !$co2_cycle_rad_passive) {
@@ -1016,6 +1033,8 @@ if ((($chem =~ /waccm_ma/) or ($chem =~ /waccm_sc_mam/) or ($chem =~ /waccm_tsml
$radval .= ",'A:N2O:N2O','A:CH4:CH4','A:CFC11:CFC11','A:CFC12:CFC12'";
} elsif ($prog_ghg1 and !$prog_ghg2 and !$chem_rad_passive ) {
$radval .= ",'A:N2O:N2O','A:CH4:CH4','N:CFC11:CFC11','N:CFC12:CFC12'";
+} elsif ($chem =~ /geoschem/) {
+ $radval .= ",'A:N2O:N2O','A:CH4:CH4','A:CFC11:CFC11','A:CFC12:CFC12'";
} else {
$radval .= ",'N:N2O:N2O','N:CH4:CH4','N:CFC11:CFC11','N:CFC12:CFC12'";
}
@@ -2068,6 +2087,38 @@ if (($chem =~ /trop_mozart/ or $chem =~ /trop_strat/ or $chem =~ /waccm_tsmlt/)
}
}
+if ($chem =~ /geoschem/) {
+
+ my $val;
+
+ # Species with fixed lower boundary
+ $val = "'CCL4','CH4','N2O','CO2','CFC11','CFC12','CH3BR','CH3CCL3','CH3CL'"
+ .",'HCFC22','CFC114','CFC115','HCFC141B','HCFC142B','CH2BR2','CHBR3','H2402'";
+
+ if ($chem_has_ocs) {
+ $val .= ",'OCS'";
+ }
+ if (chem_has_species($cfg, 'SF6')) {
+ $val .= ",'SF6'";
+ }
+ add_default($nl, 'flbc_list', 'val'=>$val);
+ unless (defined $nl->get_value('flbc_type')) {
+ add_default($nl, 'flbc_type', 'val'=>'CYCLICAL');
+ add_default($nl, 'flbc_cycle_yr', 'val'=>'2000');
+ }
+
+ my @files;
+ # Datasets
+ #@files = ( 'soil_erod_file', 'flbc_file',
+ # 'xs_coef_file','xs_short_file',
+ # 'xs_long_file', 'rsf_file',
+ # 'exo_coldens_file', 'sulf_file' );
+ @files = ( 'soil_erod_file', 'flbc_file' );
+ foreach my $file (@files) {
+ add_default($nl, $file);
+ }
+}
+
if ($chem =~ /trop_mozart/ or $chem =~ /trop_strat/ or $chem =~ /waccm_tsmlt/) {
my $val;
@@ -2363,7 +2414,7 @@ if ($chem =~ /_mam4/ and $phys =~ /cam6/) {
'num_a2_cv_ext_file' => 'num_a2',
);
- # air craft emissions
+ # aircraft emissions
if ($chem !~ /trop_mam/ and $chem !~ /waccm_sc/) {
%species = (%species,
'bc_a4_ar_ext_file' => 'bc_a4',
@@ -2418,7 +2469,7 @@ if ($chem =~ /_mam4/ and $phys =~ /cam6/) {
}
# MEGAN emissions
- if ($chem =~ /trop_strat/ or $chem =~ /_tsmlt/) {
+ if ($chem =~ /trop_strat/ or $chem =~ /_tsmlt/ or $chem =~ /geoschem/) {
my $val = "'ISOP = isoprene',"
. "'MTERP = pinene_a + carene_3 + thujene_a + 2met_styrene + cymene_p + cymene_o + terpinolene + bornene "
. "+ fenchene_a + ocimene_al + pinene_b + sabinene + camphene + limonene + phellandrene_a + terpinene_g "
@@ -2744,6 +2795,9 @@ else {
}
}
+# HEMCO
+$nl->set_variable_value('hemco_nl', 'hemco_config_File', "'HEMCO_Config.rc'");
+
# Physics options
# Add the name of the physics package based on the info in configure. If the user tries
@@ -2859,7 +2913,7 @@ if (!$simple_phys) {
}
# tropopause level used in gas-phase / aerosol processes
-if (($chem ne 'none') and ($chem ne 'terminator')) {
+if (($chem ne 'none') and ($chem ne 'terminator') and !($chem =~ /geoschem/)) {
add_default($nl, 'chem_use_chemtrop');
}
@@ -2967,7 +3021,7 @@ if ($clubb_sgs =~ /$TRUE/io) {
add_default($nl, 'clubb_history');
add_default($nl, 'clubb_rad_history');
- if ($nl->get_value('clubb_history') =~ "true" && $nl->get_value('atm_nthreads') != 1) {
+ if ($nl->get_value('clubb_history') =~ "true" && $nl->get_value('atm_nthreads') > 1) {
die "$ProgName - ERROR: clubb_history = .true. with multiple threads is not supported. \n";
}
@@ -3143,7 +3197,7 @@ if ( length($nl->get_value('soil_erod_file'))>0 ) {
add_default($nl, 'dust_emis_fact', 'tms'=>'1');
}
else {
- if ($chem =~ /trop_strat/ or $chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/ or $chem =~ /trop_mozart/) {
+ if ($chem =~ /trop_strat/ or $chem =~ /geoschem/ or $chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/ or $chem =~ /trop_mozart/) {
add_default($nl, 'dust_emis_fact', 'ver'=>'chem');
# set scaling of lightning NOx production
add_default($nl, 'lght_no_prd_factor' );
@@ -3416,6 +3470,11 @@ if ($cfg->get('camiop')) {
if ($dyn =~ /se/) {
+ ## topography not supported for CESM2.0
+ if (!defined $use_topo_file or ($use_topo_file =~ m/$TRUE/io)) {
+ die "$ProgName - ERROR: Use of topography not currently supported with SE dycore\n";
+ }
+
####################################################
# namelist group: dyn_se_inparm (for CAM_SE) #
####################################################
diff --git a/bld/config_files/definition.xml b/bld/config_files/definition.xml
index 656f62f152..e9d8c38697 100644
--- a/bld/config_files/definition.xml
+++ b/bld/config_files/definition.xml
@@ -52,6 +52,10 @@ Option to turn on waccmx thermosphere/ionosphere extension: 0 => no, 1 => yes
Ionosphere model used in WACCMX.
+
+Switch to turn on Harmonized Emissions Component (HEMCO): 0 => no, 1 => yes.
+WARNING THIS IS ON BY DEFAULT FOR DEVELOPMENT - DO NOT SUBMIT THIS TO PRODUCTION CODE
+
Physics package: cam3, cam4, cam5, cam6, held_suarez, adiabatic, kessler, tj2016, spcam_sam1mom, spcam_m2005.
@@ -93,6 +97,8 @@ test_radiative (Radiatively Active Dust), test_swelling (Sea Salt), test_tracers
Chemistry package: trop_mam3 trop_mam4 trop_mam7 trop_mozart trop_strat_mam4_vbs trop_strat_mam4_vbsext waccm_ma waccm_mad waccm_mad_mam4 waccm_ma_mam4 waccm_ma_sulfur waccm_sc waccm_sc_mam4 waccm_tsmlt_mam4 terminator none
+
+Chemistry package: trop_mam3 trop_mam4 trop_mam7 trop_mozart trop_strat_mam4_vbs trop_strat_mam4_vbsext waccm_ma waccm_mad waccm_mad_mam4 waccm_ma_mam4 waccm_ma_sulfur waccm_sc waccm_sc_mam4 waccm_tsmlt_mam4 terminator GEOS-Chem none
Prognostic mozart species packages: list of any subset of the following: DST,SSLT,SO4,GHG,OC,BC,CARBON16
diff --git a/bld/configure b/bld/configure
index 581657e6d0..8b7787a3c0 100755
--- a/bld/configure
+++ b/bld/configure
@@ -124,8 +124,11 @@ OPTIONS
[ trop_mam3 | trop_mam4 | trop_mam7 | trop_mozart | trop_strat_mam4_vbs | trop_strat_mam4_vbsext |
waccm_ma | waccm_mad | waccm_mad_mam4 | waccm_ma_mam4 |
waccm_ma_sulfur | waccm_sc | waccm_sc_mam4 | waccm_tsmlt_mam4 |
- terminator | none ].
+ terminator | geoschem | geoschem_mam4 | none ].
Default: trop_mam4 for cam6 and trop_mam3 for cam5.
+ -clm_vers Version of land model to use. This option is only used when chem
+ is set to 'geoschem'.
+ [ 4.0 | 4.5 | 5.0 ]
-[no]clubb_sgs Switch on [off] CLUBB_SGS. Default: on for cam6, otherwise off.
-clubb_opts Comma separated list of CLUBB options to turn on/off. By default they are all off.
Current option is: clubb_do_adv (Advect CLUBB moments)
@@ -136,6 +139,7 @@ OPTIONS
Makefile defaults. E.g. -cppdefs '-DVAR1 -DVAR2'
-dyn Dynamical core option: [eul | fv | se]. Default: fv.
-edit_chem_mech Invokes CAMCHEM_EDITOR to allow the user to edit the chemistry mechanism file
+ -hemco Switch enables the use of the Harmonized Emissions Component.
-hgrid Specify horizontal grid. Use nlatxnlon for spectral grids;
dlatxdlon for fv grids (dlat and dlon are the grid cell size
in degrees for latitude and longitude respectively); nexnp for
@@ -303,6 +307,7 @@ GetOptions(
"ccsm_seq" => \$opts{'ccsm_seq'},
"cflags=s" => \$opts{'cflags'},
"chem=s" => \$opts{'chem'},
+ "clm_vers=s" => \$opts{'clm_vers'},
"clubb_sgs!" => \$opts{'clubb_sgs'},
"clubb_opts=s" => \$opts{'clubb_opts'},
"co2_cycle" => \$opts{'co2_cycle'},
@@ -320,6 +325,7 @@ GetOptions(
"fopt=s" => \$opts{'fopt'},
"gmake=s" => \$opts{'gmake'},
"h|help" => \$opts{'help'},
+ "hemco" => \$opts{'hemco'},
"hgrid=s" => \$opts{'hgrid'},
"ionosphere=s" => \$opts{'ionosphere'},
"lapack_libdir=s" => \$opts{'lapack_libdir'},
@@ -666,10 +672,10 @@ if (defined $opts{'chem'}) {
# If the user has specified a simple physics package...
if ($simple_phys) {
- # the only valid chemistry options are 'none' and 'terminator'
- if (($chem_pkg ne 'none') and ($chem_pkg ne 'terminator')) {
+ # the only valid chemistry options are 'none', 'terminator' and 'geoschem'
+ if (($chem_pkg ne 'none') and ($chem_pkg ne 'terminator') and !($chem_pkg =~ 'geoschem')) {
die "configure ERROR: -phys=$phys_pkg -chem=$chem_pkg\n".
- " -chem can only be set to 'none' or 'terminator'.\n";
+ " -chem can only be set to 'none', 'terminator' or 'geoschem'.\n";
}
}
elsif ($phys_pkg =~ m/^cam3$|^cam4$|^spcam_sam1mom$/) {
@@ -1386,7 +1392,11 @@ my $chem_cppdefs = '';
my $chem_src_dir = '';
if (!$prog_species) {
- $chem_src_dir = "$cam_dir/src/chemistry/pp_$chem_pkg";
+ if ($chem_pkg =~ 'geoschem') {
+ $chem_src_dir = "$cam_dir/src/chemistry/geoschem";
+ } else {
+ $chem_src_dir = "$cam_dir/src/chemistry/pp_$chem_pkg";
+ }
$cfg_ref->set('chem_src_dir', $chem_src_dir);
}
@@ -1413,10 +1423,10 @@ if ($customize) {
}
if ($print>=2) { print "Chem preprocessor compiler: $chemproc_fc $eol"; }
($chem_nadv) = chem_preprocess($cfg_ref,$print,$chemproc_fc);
-} elsif ($chem_pkg ne 'none') {
+} elsif ($chem_pkg ne 'none' and $chem_pkg !~ 'geoschem') {
# copy over chem docs
- copy("$chem_src_dir/chem_mech.doc",$cam_bld) or die "copy failed $! \n";
- copy("$chem_src_dir/chem_mech.in" ,$cam_bld) or die "copy failed $! \n";
+ copy("$chem_src_dir/chem_mech.doc",$cam_bld) or die "copy of chem_mec.doc failed $! \n";
+ copy("$chem_src_dir/chem_mech.in" ,$cam_bld) or die "copy of chem_mech.in failed $! \n";
($chem_nadv) = chem_number_adv($chem_src_dir);
}
@@ -1428,6 +1438,24 @@ if ($chem_pkg =~ '_mam3') {
$chem_cppdefs = ' -DMODAL_AERO -DMODAL_AERO_7MODE ';
}
+# TMMF - wedge in GEOS-Chem CPP definitions here
+if ($chem_pkg =~ 'geoschem') {
+ $chem_cppdefs .= ' -DEXTERNAL_GRID -DEXTERNAL_FORCING -DLINUX_IFORT -DUSE_REAL8 -DMODEL_ -DMODEL_CESM';
+ $chem_nadv = 251;
+ if (defined $opts{'clm_vers'}) {
+ if ($opts{'clm_vers'} =~ 'CLM4.0') {
+ $chem_cppdefs .= ' -DCLM40'
+ }
+ elsif ($opts{'clm_vers'} =~ 'CLM4.5') {
+ $chem_cppdefs .= ' -DCLM45'
+ }
+ elsif ($opts{'clm_vers'} =~ 'CLM5.0') {
+ $chem_cppdefs .= ' -DCLM50'
+ }
+ }
+}
+
+
# CARMA sectional microphysics
#
# New CARMA models need to define the number of advected constituents.
@@ -1585,6 +1613,14 @@ else {
$nadv = $cfg_ref->get('nadv');
if ($print>=2) { print "Total advected constituents: $nadv$eol"; }
+#-----------------------------------------------------------------------------------------------
+
+# Harmonized Emissions Component (HEMCO)
+if (defined $opts{'hemco'}) {
+ $cfg_ref->set('hemco', $opts{'hemco'});
+}
+my $hemco = $cfg_ref->get('hemco');
+
#-----------------------------------------------------------------------------------------------
# Makefile configuration #######################################################################
#-----------------------------------------------------------------------------------------------
@@ -1882,7 +1918,7 @@ if ($dyn_pkg eq 'se') {
# Check to see if physics grid is being used
my $npg = $cfg_ref->get('npg');
if ($npg > 0) {
- $cfg_cppdefs .= " -DFVM_TRACERS";
+ die "CSLAM and FVM physics grid are not currently supported.$eol";
}
if ($smp eq 'ON') {
@@ -1971,6 +2007,13 @@ $cfg_cppdefs .= ' -DHAVE_VPRINTF -DHAVE_TIMES -DHAVE_GETTIMEOFDAY -DHAVE_COMM_F2
unless ($target_os eq 'aix' or $target_os =~ 'bg' or $target_os eq 'darwin') {
$cfg_cppdefs .= ' -DHAVE_NANOTIME -DBIT64 -DHAVE_SLASHPROC';
}
+
+# Harmonized Emissions Component (HEMCO)
+if ($hemco) {
+ $cfg_cppdefs .= ' -DMODEL_ -DMODEL_CESM -DHEMCO_CESM -DUSE_REAL8 ';
+ print "Compiling highly-experimental HEMCO with CESM.$eol";
+}
+
#-----------------------------------------------------------------------------------------------
# External libraries ###########################################################################
#-----------------------------------------------------------------------------------------------
@@ -2730,6 +2773,7 @@ sub write_filepath
my $waccm_phys = $cfg_ref->get('waccm_phys');
my $waccmx = $cfg_ref->get('waccmx');
my $ionos = $cfg_ref->get('ionosphere');
+ my $hemco = $cfg_ref->get('hemco');
my $carma = $cfg_ref->get('carma');
my $rad = $cfg_ref->get('rad');
my $dyn = $cfg_ref->get('dyn');
@@ -2785,13 +2829,18 @@ sub write_filepath
}
if ($chem_src_dir) {
print $fh "$chem_src_dir\n";
+ if ($chem_pkg =~ 'geoschem') {
+ print $fh "$chem_src_dir/geoschem_src/GeosCore\n";
+ print $fh "$chem_src_dir/geoschem_src/GeosUtil\n";
+ print $fh "$chem_src_dir/geoschem_src/Headers\n";
+ print $fh "$chem_src_dir/geoschem_src/ISORROPIA\n";
+ print $fh "$chem_src_dir/geoschem_src/KPP/fullchem\n";
+ if ($chem =~ /_mam/) {
+ print $fh "$camsrcdir/src/chemistry/modal_aero\n";
+ print $fh "$camsrcdir/src/chemistry/aerosol\n";
+ }
+ }
}
- if ($chem =~ /_mam/) {
- print $fh "$camsrcdir/src/chemistry/modal_aero\n";
- } else {
- print $fh "$camsrcdir/src/chemistry/bulk_aero\n";
- }
- print $fh "$camsrcdir/src/chemistry/aerosol\n";
if ($waccmx) {
print $fh "$camsrcdir/src/physics/waccmx\n";
@@ -2804,7 +2853,42 @@ sub write_filepath
}
print $fh "$camsrcdir/src/ionosphere\n";
- print $fh "$camsrcdir/src/chemistry/mozart\n";
+ # -- Added by hplin - 5/2020
+ if ($hemco) {
+ print $fh "$camsrcdir/src/hemco\n";
+
+ # if not compiling with GEOS-Chem; coordinate this with tfritz later
+ # we may eventually remove all this
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Shared\n";
+
+ # right now shared files have been renamed for no-conflict
+ # if ($chem_pkg ne 'geoschem') {
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Shared/Headers\n";
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Shared/GeosUtil\n";
+ # }
+
+ # to remove - need to use pio
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Shared/NcdfUtil\n";
+
+ # hplin 2/16/20: temporarily add hemco src code directories manually
+ # until we figure out a better compile routine.
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Core\n";
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Extensions\n";
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Interfaces/Shared\n";
+ }
+
+ # -- Added by MSL - 1/2018
+ # -- Updated by TMMF - 11/2019
+ if (!($chem_pkg =~ 'geoschem')) {
+ print $fh "$camsrcdir/src/chemistry/mozart\n";
+ if ($chem =~ /_mam/) {
+ print $fh "$camsrcdir/src/chemistry/modal_aero\n";
+ } else {
+ print $fh "$camsrcdir/src/chemistry/bulk_aero\n";
+ }
+ print $fh "$camsrcdir/src/chemistry/aerosol\n";
+ }
+ # --
print $fh "$camsrcdir/src/chemistry/utils\n";
if ($rad eq 'rrtmg') {
diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml
index aa77beaba3..7d61bd3b17 100644
--- a/bld/namelist_files/namelist_defaults_cam.xml
+++ b/bld/namelist_files/namelist_defaults_cam.xml
@@ -128,25 +128,6 @@
atm/cam/inic/gaus/cami_0000-09-01_8x16_L26_c030918.nc
atm/cam/inic/gaus/cami_0000-01-01_8x16_L30_c090102.nc
-
-atm/cam/inic/homme/cami-mam3_0000-01_ne5np4_L30.140707.nc
-atm/cam/inic/se/ape_topo_cam4_ne16np4_L26_c171020.nc
-atm/cam/inic/se/ape_topo_cam4_ne16np4_L30_c171020.nc
-atm/cam/inic/se/ape_topo_cam4_ne16np4_L32_c171020.nc
-atm/cam/inic/se/ape_topo_cam4_ne30np4_L26_c171020.nc
-atm/cam/inic/se/ape_topo_cam4_ne30np4_L30_c171020.nc
-atm/cam/inic/se/ape_topo_cam6_ne30np4_L32_c171023.nc
-atm/cam/inic/se/ape_topo_cam4_ne60np4_L26_c171018.nc
-atm/cam/inic/se/ape_topo_cam4_ne60np4_L30_c171020.nc
-atm/cam/inic/se/ape_topo_cam4_ne60np4_L32_c171020.nc
-atm/cam/inic/se/ape_topo_cam4_ne120np4_L26_c171018.nc
-atm/cam/inic/se/ape_topo_cam4_ne120np4_L30_c171024.nc
-atm/cam/inic/se/ape_topo_cam4_ne120np4_L32_c171023.nc
-atm/cam/inic/homme/cami_1850-01-01_ne240np4_L26_c110314.nc
-atm/cam/inic/homme/cami_0000-09-01_ne240np4_L26_c061106.nc
-
-atm/cam/inic/homme/cami-mam3_0000-01-ne240np4_L30_c111004.nc
-
atm/cam/inic/se/ape_cam4_ne5np4_L26_c170517.nc
atm/cam/inic/se/ape_cam4_ne16np4_L26_c170417.nc
atm/cam/inic/se/ape_cam4_ne30np4_L26_c170417.nc
@@ -165,10 +146,6 @@
atm/cam/inic/se/ape_cam6_ne120np4_L32_c170908.nc
atm/cam/inic/se/ape_cam6_ne240np4_L32_c170908.nc
-atm/waccm/ic/wa3_ne5np4_1950_spinup.cam2.i.1960-01-01-00000_c150810.nc
-atm/waccm/ic/waccm5_1850_ne30np4_L70_0001-01-11-00000_c151217.nc
-atm/cam/inic/se/f_asd2017.cam6_clm5_ne0conus30x8_t12_1980-01-01-00000.nc
-
atm/cam/topo/topo-from-cami_0000-01-01_256x512_L26_c030918.nc
atm/cam/topo/USGS-gtopo30_128x256_c050520.nc
@@ -181,39 +158,11 @@
atm/cam/topo/USGS_gtopo30_0.47x0.63_remap_c061106.nc
atm/cam/topo/topo-from-cami_0000-10-01_0.5x0.625_L26_c031204.nc
atm/cam/topo/fv_0.9x1.25_nc3000_Nsw042_Nrs008_Co060_Fi001_ZR_sgh30_24km_GRNL_c170103.nc
-atm/cam/topo/fv_1.9x2.5_nc3000_Nsw084_Nrs016_Co120_Fi001_ZR_061116.nc
+atm/cam/topo/fv_1.9x2.5_nc3000_Nsw084_Nrs016_Co120_Fi001_ZR_GRNL_031819.nc
atm/cam/topo/USGS-gtopo30_2.5x3.33_remap_c100204.nc
atm/cam/topo/USGS-gtopo30_4x5_remap_c050520.nc
atm/cam/topo/fv_10x15_nc0540_Nsw042_Nrs008_Co060_Fi001_20171220.nc
-atm/cam/topo/se/ne5np4_nc3000_Co360_Fi001_MulG_PF_nullRR_Nsw064_20170515.nc
-atm/cam/topo/se/ne16np4_nc3000_Co120_Fi001_PF_nullRR_Nsw084_20171012.nc
-atm/cam/topo/se/ne30np4_nc3000_Co060_Fi001_PF_nullRR_Nsw042_20171020.nc
-atm/cam/topo/se/ne60np4_nc3000_Co030_Fi001_PF_nullRR_Nsw021_20171012.nc
-atm/cam/topo/se/ne120np4_nc3000_Co015_Fi001_PF_nullRR_Nsw010_20171011.nc
-atm/cam/topo/se/ne240np4_nc3000_Co008_Fi001_PF_nullRR_Nsw005_20171014.nc
-
-atm/cam/topo/se/ne5pg2_nc3000_Co360_Fi001_MulG_PF_nullRR_Nsw060_20170706.nc
-atm/cam/topo/se/ne30pg2_nc3000_Co060_Fi001_PF_nullRR_Nsw042_20171014.nc
-atm/cam/topo/se/ne60pg2_nc3000_Co030_Fi001_PF_nullRR_Nsw021_20171014.nc
-atm/cam/topo/se/ne120pg2_nc3000_Co015_Fi001_PF_nullRR_Nsw010_20171012.nc
-atm/cam/topo/se/ne240pg2_nc3000_Co008_Fi001_PF_nullRR_Nsw005_20171014.nc
-
-atm/cam/topo/se/ne5pg3_nc3000_Co360_Fi001_MulG_PF_nullRR_Nsw064_20170516.nc
-atm/cam/topo/se/ne16pg3_nc3000_Co120_Fi001_PF_nullRR_Nsw084_20171012.nc
-atm/cam/topo/se/ne30pg3_nc3000_Co060_Fi001_PF_nullRR_Nsw042_20171014.nc
-atm/cam/topo/se/ne60pg3_nc3000_Co030_Fi001_PF_nullRR_Nsw021_20171012.nc
-atm/cam/topo/se/ne120pg3_nc3000_Co015_Fi001_PF_nullRR_Nsw010_20171014.nc
-atm/cam/topo/se/ne240pg3_nc3000_Co008_Fi001_PF_nullRR_Nsw005_20171015.nc
-
-atm/cam/topo/se/ne5pg4_nc3000_Co360_Fi001_MulG_PF_nullRR_Nsw060_20170707.nc
-atm/cam/topo/se/ne30pg4_nc3000_Co060_Fi001_PF_nullRR_Nsw042_20171014.nc
-atm/cam/topo/se/ne60pg4_nc3000_Co030_Fi001_PF_nullRR_Nsw021_20171018.nc
-atm/cam/topo/se/ne120pg4_nc3000_Co015_Fi001_PF_nullRR_Nsw010_20171014.nc
-
-
-atm/cam/topo/conus_30_x8_nc3000_Co060_Fi001_MulG_PF_CONUS_Nsw042_20170417.nc
-
atm/cam/topo/fv_0.9x1.25_nc3000_Nsw006_Nrs002_Co008_Fi001_ZR_c160505.nc
atm/cam/topo/fv_1.9x2.5_nc3000_Nsw084_Nrs016_Co120_Fi001_ZR_061116.nc
@@ -450,10 +399,13 @@
atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_175001-201512_fv_0.9x1.25_c20181011.nc
atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_175001-201512_fv_1.9x2.5_c20181011.nc
-ac_CO2 -> ac_CO2_filelist_175001-201512_fv_0.9x1.25_c20181011.txt
-ac_CO2 -> ac_CO2_filelist_175001-201512_fv_1.9x2.5_c20181011.txt
-atm/cam/ggas
-SERIAL
+ac_CO2_filelist_175001-201512_fv_0.9x1.25_c20181011.txt
+ac_CO2_filelist_175001-201512_fv_1.9x2.5_c20181011.txt
+atm/cam/ggas
+SERIAL
+
+atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_175001-201512_fv_0.9x1.25_c20181011.nc
+atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_175001-201512_fv_1.9x2.5_c20181011.nc
atm/cam/scyc/DMS_emissions_128x256_clim_c040122.nc
@@ -541,6 +493,7 @@
0.4D0
0.55D0
0.5D0
+0.5D0
0.5D0
0.5D0
0.0625D0
@@ -553,22 +506,27 @@
atm/waccm/gw/mfspectra_shallow_c140530.nc
0.25d0
0.5d0
+0.5d0
0.5d0
0.5d0
1.d0
2.d0
+2.d0
2.d0
2.d0
.true.
.false.
+.false.
.false.
.false.
.false.
.true.
+.true.
.true.
.true.
.true.
.false.
+.false.
.false.
.false.
@@ -812,7 +770,55 @@
atm/cam/chem/stratvolc/VolcanEESMv3.11_SO2_850-2016_Mscale_Zreduc_2deg_c180812.nc
atm/cam/chem/stratvolc/VolcanEESMv3.10_piControl_SO2_1850-2014average_1deg_ZeroTrop_c180416.nc
-
+
+
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/H2OemissionCH4oxidationx2_3D_L70_1849-2015_CMIP6ensAvg_1.9x2.5_c190308.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_so4_a1_anthro-ene_vertical_1750-2015_1.9x2.5_c20170616.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_1.9x2.5_c20190417.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_1.9x2.5_c20190417.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_SO2_contvolcano_vertical_850-5000_1.9x2.5_c20190417.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_so4_a1_anthro-ene_vertical_1750-2015_1.9x2.5_c20170616.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_1.9x2.5_c20190417.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_1.9x2.5_c20190417.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_SO2_aircraft_vertical_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_bc_a4_aircraft_vertical_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_NO2_aircraft_vertical_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_bc_a4_aircraft_vertical_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/stratvolc/VolcanEESMv3.10_piControl_SO2_1850-2014average_2deg_c190220.nc
+
+
+
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_bc_a4_anthro_surface_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_bc_a4_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_DMS_other_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_DMS_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_so4_a1_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_so4_a1_anthro-ag-ship_surface_1750-2015_1.9x2.5_c20170616.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_so4_a2_anthro-res_surface_1750-2015_1.9x2.5_c20170616.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_pom_a4_anthro_surface_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_bc_a4_anthro_surface_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_bc_a4_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_num_pom_a4_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_SO2_anthro-ag-ship-res_surface_1750-2015_1.9x2.5_c20170616.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_SO2_anthro-ene_surface_1750-2015_1.9x2.5_c20170616.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_SO2_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_so4_a1_anthro-ag-ship_surface_1750-2015_1.9x2.5_c20170616.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_so4_a1_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_so4_a2_anthro-res_surface_1750-2015_1.9x2.5_c20170616.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_SOAGx1.5_anthro_surface_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_SOAGx1.5_biogenic_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_SOAGx1.5_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_pom_a4_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_pom_a4_anthro_surface_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_CH2O_anthro_surface_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_CH2O_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_CO_anthro_surface_1750-2015_1.9x2.5_c20180504.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_CO_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_CO_other_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_NO_anthro_surface_1750-2015_1.9x2.5_c20170608.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_NO_bb_surface_1750-2015_1.9x2.5_c20170322.nc
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/emissions-cmip6_NO_other_surface_1750-2015_1.9x2.5_c20170322.nc
@@ -1201,6 +1207,7 @@
0.35D0
2.2D0
0.308
+ 0.280
0.5
0.3
2.4
@@ -1235,6 +1242,7 @@
0
1
500.D-6
+ 200.D-6
max_overlap
in_cloud
@@ -1351,6 +1359,7 @@
1.62D0
0.90D0
1.00D0
+1.10D0
1.2D0
diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml
index 28899a7082..eb2966f274 100644
--- a/bld/namelist_files/namelist_definition.xml
+++ b/bld/namelist_files/namelist_definition.xml
@@ -3904,7 +3904,7 @@ Default: set by build-namelist
Name of the CAM chemistry package. N.B. this variable may not be set by
@@ -3913,6 +3913,15 @@ cache file to be consistent with how CAM was built.
Default: set by build-namelist
+
+Full pathname to CAM physics grid ESMF mesh file.
+N.B. this variable may not be set by the user.
+It is set by build-namelist via information in the configure
+cache file to be consistent with how CAM was built.
+Default: set by build-namelist
+
+
Runtime options of upper thermosphere WACCM-X. 'ionosphere' for
@@ -4000,6 +4009,20 @@ Full pathname of AMIE inputs for southern hemisphere.
Default: NONE.
+
+
+Full pathname to GEOS-Chem chemistry inputs directory
+Default: set by build-namelist.
+
+
+
+
+Full pathname to HEMCO_Config.rc, which prescribes emission inventories
+Default: set by build-namelist.
+
+
-
Wet deposition method used
MOZ --> mozart scheme is used
@@ -5289,6 +5312,14 @@ Type of time interpolation for data in aircraft aerosol files.
Default: 'CYCLICAL_LIST'
+
+Full pathname of the ac_CO2 file specified in the filelist in
+{{ hilight }}aircraft_specifier{{ closehilight }}. This is only to
+get this name into the cam.input_data_list for the CESM scripts.
+Default: set by build-namelist.
+
+
+ cesm2_init/b.e20.B1850.f19_g17.release_cesm2_1_0.020/0301-01-01/b.e20.B1850.f19_g17.release_cesm2_1_0.020.cam.i.0301-01-01-00000.nc
+
'atm/cam/solar/SolarForcingCMIP6piControl_c160921.nc'
18500101
@@ -29,6 +31,8 @@
CYCLICAL
1850
+atm/cam/chem/emis/CMIP6_emissions_1750_2015_2deg/H2O_emission_CH4_oxidationx2_elev_3DmonthlyL70_1850climoCMIP6piControl001_y21-50avg_1.9x2.5_c190308.nc
+
1850
'atm/cam/tracer_cnst'
@@ -44,18 +48,39 @@
.true.
'CYCLICAL'
-
- 'H2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/elev/H2O_emission_CH4_oxidationx2_elev_3DmonthlyL70_1850climoCMIP6piControl001_y21-50avg_c180802.nc',
- 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_so4_a1_anthro-ene_vertical_1750-2015_0.9x1.25_c20170616.nc',
- 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
- 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
- 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
- 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_anthro-ene_vertical_1750-2015_0.9x1.25_c20170616.nc',
- 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
- 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
-
-
-
- 1850
+atm/cam/chem/emis/elev/H2O_emission_CH4_oxidationx2_elev_3DmonthlyL70_1850climoCMIP6piControl001_y21-50avg_c180802.nc
+
+
+ 'dst_a1', 'dst_c1', 'dst_a3', 'dst_c3', 'dst_a1_SRF', 'dst_a3_SRF', 'dst_a1DDF', 'dst_a1SFWET', 'dst_c1DDF',
+ 'dst_c1SFWET', 'dst_a3DDF', 'dst_a3SFWET', 'dst_c3DDF', 'dst_c3SFWET', 'SSAVIS', 'AODABS', 'AODDUST2', 'bc_a1',
+ 'bc_a4', 'dst_a1', 'dst_a2', 'dst_a3', 'ncl_a1', 'ncl_a1', 'ncl_a2', 'ncl_a3', 'pom_a1',
+ 'pom_a4', 'so4_a1', 'so4_a2', 'so4_a3', 'soa_a1', 'soa_a2', 'bc_c1', 'bc_c4', 'dst_c1',
+ 'dst_c2', 'dst_c3', 'ncl_c1', 'ncl_c1', 'ncl_c2', 'ncl_c3', 'pom_c1', 'pom_c4', 'so4_c1',
+ 'so4_c2', 'so4_c3', 'soa_c1', 'soa_c2', 'num_a1', 'num_a2', 'num_a4', 'num_c1', 'num_c2',
+ 'num_c3', 'bc_a1SFWET', 'bc_a4SFWET', 'dst_a1SFWET', 'dst_a2SFWET', 'dst_a3SFWET', 'ncl_a1SFWET', 'ncl_a2SFWET', 'ncl_a3SFWET',
+ 'pom_a1SFWET', 'pom_a4SFWET', 'so4_a1SFWET', 'so4_a2SFWET', 'so4_a3SFWET', 'soa_a1SFWET', 'soa_a2SFWET', 'bc_c1SFWET', 'bc_c4SFWET',
+ 'dst_c1SFWET', 'dst_c2SFWET', 'dst_c3SFWET', 'ncl_c1SFWET', 'ncl_c2SFWET', 'ncl_c3SFWET', 'pom_c1SFWET', 'pom_c4SFWET', 'so4_c1SFWET',
+ 'so4_c2SFWET', 'so4_c3SFWET', 'soa_c1SFWET', 'soa_c2SFWET', 'bc_a1DDF', 'bc_a4DDF', 'dst_a1DDF', 'dst_a2DDF', 'dst_a3DDF',
+ 'ncl_a1DDF', 'ncl_a2DDF', 'ncl_a3DDF', 'pom_a1DDF', 'pom_a4DDF', 'so4_a1DDF', 'so4_a2DDF', 'so4_a3DDF', 'soa_a1DDF',
+ 'soa_a2DDF', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF', 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF',
+ 'pom_c1DDF', 'pom_c4DDF', 'so4_c1DDF', 'so4_c2DDF', 'so4_c3DDF', 'soa_c1DDF', 'soa_c2DDF', 'bc_a4_CLXF', 'pom_a4_CLXF',
+ 'so4_a1_CLXF', 'so4_a2_CLXF', 'SFbc_a4', 'SFpom_a4', 'SFso4_a1', 'SFso4_a2', 'so4_a1_sfgaex1', 'so4_a2_sfgaex1', 'so4_a3_sfgaex1',
+ 'soa_a1_sfgaex1', 'soa_a2_sfgaex1', 'so4_a2_sfnnuc1', 'so4_c1AQH2SO4', 'so4_c2AQH2SO4', 'so4_c3AQH2SO4', 'so4_c1AQSO4', 'so4_c2AQSO4', 'so4_c3AQSO4',
+ 'ADRAIN', 'ADSNOW', 'ANRAIN', 'ANSNOW', 'AODDUST', 'AODVIS', 'AQRAIN', 'AQSNOW', 'AQSO4_H2O2',
+ 'AQSO4_O3', 'AREI', 'AREL', 'AWNC', 'AWNI', 'CCN3', 'CDNUMC', 'CLDHGH', 'CLDICE',
+ 'CLDLIQ', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLOUD', 'CONCLD', 'DMS', 'FICE', 'FLDS',
+ 'FLNS', 'FLNS', 'FLNT', 'FLNT', 'FLUT', 'FLUT', 'FREQI', 'FREQL', 'FREQR',
+ 'FREQS', 'FSDS', 'FSDS', 'FSNS', 'FSNS', 'FSNT', 'FSNT', 'FSNTOA', 'FSNTOA',
+ 'H2SO4', 'H2SO4_sfgaex1', 'ICEFRAC', 'ICIMR', 'ICWMR', 'IWC', 'LWCF', 'OMEGA', 'OMEGAT',
+ 'PBLH', 'PRECC', 'PRECL', 'PRECSC', 'PRECSL', 'PS', 'PSL', 'Q', 'QFLX',
+ 'QRL', 'QRS', 'QT', 'RAINQM', 'RCM_CLUBB', 'RELHUM', 'RELVAR', 'RTP2_CLUBB', 'RTPTHLP_CLUBB',
+ 'SFDMS', 'SFSOAG', 'SNOWQM', 'SO2', 'SO2_CLXF', 'SOLIN', 'SWCF', 'T', 'TAUBLJX',
+ 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY', 'TGCLDCWP', 'TGCLDIWP', 'TGCLDLWP', 'TMQ',
+ 'TREFHT', 'TS', 'U', 'U10', 'UP2_CLUBB', 'UPWP_CLUBB', 'UU', 'V', 'VP2_CLUBB',
+ 'VPWP_CLUBB', 'VQ', 'VU', 'VV', 'WP2_CLUBB', 'WP3_CLUBB', 'WPRCP_CLUBB', 'WPRTP_CLUBB', 'WPTHLP_CLUBB',
+ 'WPTHVP_CLUBB', 'WSUB', 'Z3', 'bc_a1', 'bc_a1DDF', 'bc_a1SFWET', 'bc_a1_SRF', 'bc_a4', 'bc_a4DDF',
+ 'bc_a4SFWET', 'bc_a4_SRF', 'bc_c1', 'bc_c1DDF', 'bc_c1SFWET', 'num_a2', 'num_a3', 'num_a4', 'so4_a1',
+ 'so4_a2', 'so4_a3', 'so4_c1', 'O3', 'O3colAbove'
+
diff --git a/bld/namelist_files/use_cases/2000_geoschem.xml b/bld/namelist_files/use_cases/2000_geoschem.xml
new file mode 100644
index 0000000000..2b7264fc61
--- /dev/null
+++ b/bld/namelist_files/use_cases/2000_geoschem.xml
@@ -0,0 +1,99 @@
+
+
+
+00010101
+
+/glade/p/univ/umit0034/ExtData/CHEM_INPUTS/
+
+/glade/p/univ/umit0034/Shared/GEOS-Chem/f.e20.FC2010.f09_f09.144.GC_vbsext.001.cam.i.0007-01-01-00000.nc
+
+/glade/p/univ/umit0034/Shared/GEOS-Chem/f.e20.FC2010.f19_f19.144.GC_vbsext.001.cam.i.0007-01-01-00000.nc
+
+
+
+ 'ISOP = isoprene',
+ 'MOH = methanol',
+ 'EOH = ethanol',
+ 'CH2O = formaldehyde',
+ 'ALD2 = acetaldehyde',
+ 'ACTA = acetic_acid',
+ 'ACET = acetone',
+ 'HCOOH = formic_acid',
+ 'HCN = hydrogen_cyanide',
+ 'CO = carbon_monoxide',
+ 'C2H6 = ethane',
+ 'C2H4 = ethene',
+ 'C3H8 = propane',
+ 'ALK4 = pentane + hexane + heptane + tricyclene',
+ 'PRPE = propene + butene',
+ 'TOLU = toluene',
+ 'LIMO = limonene',
+ 'MTPA = pinene_a + pinene_b + sabinene + carene_3',
+ 'MTPO = terpinene_g + terpinene_a + terpinolene + myrcene + ocimene_al + ocimene_t_b + ocimene_c_b + thujene_a + 2met_styrene + cymene_p + cymene_o + bornene + fenchene_a + camphene + phellandrene_a + phellandrene_b'
+
+
+
+atm/cam/solar/SolarForcing1995-2005avg_c160929.nc
+20000101
+FIXED
+
+'xactive_lnd'
+
+
+.true.
+.true.
+.false.
+0.25D0
+
+
+CYCLICAL
+2000
+atm/waccm/lb/LBC_2000climo_CMIP6_0p5degLat_c180227.nc
+
+
+
+
+'CYCLICAL'
+
+2000
+
+
+ 1,30,365,240,240,480,365,73,30
+ 0,-24,-24,-3,-1,1,-24,-120,-240
+'A','A','A','A','A','A','A','A','I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+
+
+ 'Q', 'U', 'V', 'OMEGA', 'T', 'PS',
+
+
+
+ 'O3', 'NO', 'NO2', 'CO', 'HNO3', 'CH4', 'NIT', 'NH4', 'NH3', 'SO4', 'SO2', 'OH',
+
+
+
+ 'ACET','ACTA','ALD2','ASOG1','ASOG2','ASOG3','ATOOH','BR2','BRCL','BRNO3','CH2O','CL2','CLNO2','CLNO3','CLO','CLOO','EOH','ETHLN','ETNO3','ETP','GLYC','GLYX','H2O2','HAC','HBR','HC5A','HCL','HCOOH','HG0','HG0_ANT','HG0_ARC','HG0_ATL','HG0_BB','HG0_CAM','HG0_CAN','HG0_EAF','HG0_EAS','HG0_EEU','HG0_EUR','HG0_GEO','HG0_JPN','HG0_MDE','HG0_NAF','HG0_NAT','HG0_NPA','HG0_OCE','HG0_OCN','HG0_SAF','HG0_SAM','HG0_SAS','HG0_SAT','HG0_SEA','HG0_SO','HG0_SOV','HG0_STR','HG0_USA','HG0_WAF','HG2','HG2_ANT','HG2_ARC','HG2_ATL','HG2_BB','HG2_CAM','HG2_CAN','HG2_EAF','HG2_EAS','HG2_EEU','HG2_EUR','HG2_GEO','HG2_JPN','HG2_MDE','HG2_NAF','HG2_NAT','HG2_NPA','HG2_OCE','HG2_OCN','HG2_SAF','HG2_SAM','HG2_SAS','HG2_SAT','HG2_SEA','HG2_SO','HG2_SOV','HG2_STR','HG2_USA','HG2_WAF','HI','HMHP','HMML','HNO3','HOBR','HOCL','HOI','HONIT','HPALD1','HPALD2','HPALD3','HPALD4','HPETHNL','I2','I2O2','I2O3','I2O4','IBR','ICHE','ICL','ICN','ICPDH','IDC','IDCHP','IDHDP','IDHPE','IDN','IEPOXA','IEPOXB','IEPOXD','IHN1','IHN2','IHN3','IHN4','INPB','INPD','IONO','IONO2','IPRNO3','ITCN','ITHN','LIMO','LVOC','MACR','MACR1OOH','MAP','MCRDH','MCRENOL','MCRHN','MCRHNB','MCRHP','MENO3','MGLY','MOH','MONITS','MONITU','MPAN','MTPA','MTPO','MVK','MVKDH','MVKHC','MVKHCB','MVKHP','MVKN','MVKPC','N2O5','NH3','NO2','NPRNO3','O3','O3AFBL','O3ASBL','O3ATBL','O3EUBL','O3INIT','O3MT','O3NABL','O3PCBL','O3ROW','O3STRAT','O3USA','O3UT','OPOG1','OPOG2','PAN','POG1','POG2','POPG_BAP','POPG_PHE','POPG_PYR','PP','PPN','PROPNN','PRPN','PYAC','R4N2','R4P','RA3P','RB3P','RIPA','RIPB','RIPC','RIPD','RP','SO2','TSOG0','TSOG1','TSOG2','TSOG3','AERI','ASOA1','ASOA2','ASOA3','ASOAN','BCPI','BCPO','BE10','BE10STRAT','BE7','BE7STRAT','BRSALA','BRSALC','DST1','DST2','DST3','DST4','DSTAL1','DSTAL2','DSTAL3','DSTAL4','HGP','HGP_ANT','HGP_ARC','HGP_ATL','HGP_BB','HGP_CAM','HGP_CAN','HGP_EAF','HGP_EAS','HGP_EEU','HGP_EUR','HGP_GEO','HGP_JPN','HGP_MDE','HGP_NAF','HGP_NAT','HGP_NPA','HGP_OCE','HGP_OCN','HGP_SAF','HGP_SAM','HGP_SAS','HGP_SAT','HGP_SEA','HGP_SO','HGP_SOV','HGP_STR','HGP_USA','HGP_WAF','INDIOL','IONITA','ISALA','ISALC','LVOCOA','MONITA','MOPI','MOPO','MSA','NH4','NIT','NITD1','NITD2','NITD3','NITD4','NITS','OCPI','OCPO','OPOA1','OPOA2','PB210','PB210STRAT','PFE','POA1','POA2','POPPBCPI_BAP','POPPBCPI_PHE','POPPBCPI_PYR','POPPBCPO_BAP','POPPBCPO_PHE','POPPBCPO_PYR','POPPOCPI_BAP','POPPOCPI_PHE','POPPOCPI_PYR','POPPOCPO_BAP','POPPOCPO_PHE','POPPOCPO_PYR','SALA','SALAAL','SALACL','SALC','SALCAL','SALCCL','SO4','SO4D1','SO4D2','SO4D3','SO4D4','SO4S','SOAGX','SOAIE','SOAS','TSOA0','TSOA1','TSOA2','TSOA3',
+
+
+
+ 'dst_a1','so4_a1','nh4_a1','pom_a1','pomff1_a1','pombb1_a1','soa_a1','bc_a1','ncl_a1','num_a1','so4_a2','nh4_a2','soa_a2','ncl_a2','dst_a2','num_a2','dst_a3','ncl_a3','so4_a3','pom_a3','bc_a3','num_a3','ncl_a4','so4_a4','pom_a4','pomff1_a4','pombb1_a4','bc_a4','nh4_a4','num_a4','dst_a5','so4_a5','nh4_a5','num_a5','ncl_a6','so4_a6','nh4_a6','num_a6','dst_a7','so4_a7','nh4_a7','num_a7','soa1_a1','soa1_a2','soa2_a1','soa2_a2','soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','soaff1_a1','soaff2_a1','soaff3_a1','soaff4_a1','soaff5_a1','soabb1_a1','soabb2_a1','soabb3_a1','soabb4_a1','soabb5_a1','soabg1_a1','soabg2_a1','soabg3_a1','soabg4_a1','soabg5_a1','soaff1_a2','soaff2_a2','soaff3_a2','soaff4_a2','soaff5_a2','soabb1_a2','soabb2_a2','soabb3_a2','soabb4_a2','soabb5_a2','soabg1_a2','soabg2_a2','soabg3_a2','soabg4_a2','soabg5_a2'
+
+
+
+ 'ACTA','ALD2','ASOG1','ASOG2','ASOG3','ATOOH','BR2','BRCL','CH2O','EOH','ETHLN','ETP','GLYC','GLYX','H2O2','HAC','HBR','HC5A','HCL','HCOOH','HG2','HG2_ANT','HG2_ARC','HG2_ATL','HG2_BB','HG2_CAM','HG2_CAN','HG2_EAF','HG2_EAS','HG2_EEU','HG2_EUR','HG2_GEO','HG2_JPN','HG2_MDE','HG2_NAF','HG2_NAT','HG2_NPA','HG2_OCE','HG2_OCN','HG2_SAF','HG2_SAM','HG2_SAS','HG2_SAT','HG2_SEA','HG2_SO','HG2_SOV','HG2_STR','HG2_USA','HG2_WAF','HI','HMHP','HMML','HNO3','HOBR','HOCL','HOI','HONIT','HPETHNL','I2','I2O2','I2O3','I2O4','IBR','ICHE','ICL','ICN','ICPDH','IDCHP','IDHDP','IDHPE','IDN','IEPOXA','IEPOXB','IEPOXD','IHN1','IHN2','IHN3','IHN4','INPB','INPD','IONO','IONO2','ITCN','ITHN','LIMO','LVOC','MACR1OOH','MAP','MCRDH','MCRENOL','MCRHN','MCRHNB','MCRHP','MEK','MGLY','MOH','MONITS','MONITU','MP','MPAN','MPN','MTPA','MTPO','MVK','MVKDH','MVKHC','MVKHCB','MVKHP','MVKN','MVKPC','NH3','OPOG1','OPOG2','PAN','POG1','POG2','POPG_BAP','POPG_PHE','POPG_PYR','PP','PPN','PROPNN','PRPE','PRPN','PYAC','R4N2','R4P','RA3P','RB3P','RIPA','RIPB','RIPC','RIPD','RP','SO2','TSOG0','TSOG1','TSOG2','TSOG3','AERI','ASOA1','ASOA2','ASOA3','ASOAN','BCPI','BCPO','BE10','BE10STRAT','BE7','BE7STRAT','BRSALA','BRSALC','DST1','DST2','DST3','DST4','DSTAL1','DSTAL2','DSTAL3','DSTAL4','HGP','HGP_ANT','HGP_ARC','HGP_ATL','HGP_BB','HGP_CAM','HGP_CAN','HGP_EAF','HGP_EAS','HGP_EEU','HGP_EUR','HGP_GEO','HGP_JPN','HGP_MDE','HGP_NAF','HGP_NAT','HGP_NPA','HGP_OCE','HGP_OCN','HGP_SAF','HGP_SAM','HGP_SAS','HGP_SAT','HGP_SEA','HGP_SO','HGP_SOV','HGP_STR','HGP_USA','HGP_WAF','INDIOL','IONITA','ISALA','ISALC','LVOCOA','MONITA','MOPI','MOPO','MSA','NH4','NIT','NITD1','NITD2','NITD3','NITD4','NITS','OCPI','OCPO','OPOA1','OPOA2','PB210','PB210STRAT','PFE','POA1','POA2','POPPBCPI_BAP','POPPBCPI_PHE','POPPBCPI_PYR','POPPBCPO_BAP','POPPBCPO_PHE','POPPBCPO_PYR','POPPOCPI_BAP','POPPOCPI_PHE','POPPOCPI_PYR','POPPOCPO_BAP','POPPOCPO_PHE','POPPOCPO_PYR','SALA','SALAAL','SALACL','SALC','SALCAL','SALCCL','SO4','SO4D1','SO4D2','SO4D3','SO4D4','SO4S','SOAGX','SOAIE','SOAS','TSOA0','TSOA1','TSOA2','TSOA3',
+
+
+
+ 'dst_a1','so4_a1','nh4_a1','pom_a1','pomff1_a1','pombb1_a1','soa_a1','bc_a1','ncl_a1','num_a1','so4_a2','nh4_a2','soa_a2','ncl_a2','dst_a2','num_a2','dst_a3','ncl_a3','so4_a3','pom_a3','bc_a3','num_a3','ncl_a4','so4_a4','pom_a4','pomff1_a4','pombb1_a4','bc_a4','nh4_a4','num_a4','dst_a5','so4_a5','nh4_a5','num_a5','ncl_a6','so4_a6','nh4_a6','num_a6','dst_a7','so4_a7','nh4_a7','num_a7','soa1_a1','soa1_a2','soa2_a1','soa2_a2','soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','soaff1_a1','soaff2_a1','soaff3_a1','soaff4_a1','soaff5_a1','soabb1_a1','soabb2_a1','soabb3_a1','soabb4_a1','soabb5_a1','soabg1_a1','soabg2_a1','soabg3_a1','soabg4_a1','soabg5_a1','soaff1_a2','soaff2_a2','soaff3_a2','soaff4_a2','soaff5_a2','soabb1_a2','soabb2_a2','soabb3_a2','soabb4_a2','soabb5_a2','soabg1_a2','soabg2_a2','soabg3_a2','soabg4_a2','soabg5_a2'
+
+
+
diff --git a/bld/namelist_files/use_cases/2010_geoschem.xml b/bld/namelist_files/use_cases/2010_geoschem.xml
new file mode 100644
index 0000000000..6d10dd02df
--- /dev/null
+++ b/bld/namelist_files/use_cases/2010_geoschem.xml
@@ -0,0 +1,91 @@
+
+
+
+
+00010101
+
+/glade/p/univ/umit0034/ExtData/CHEM_INPUTS/
+
+/glade/p/univ/umit0034/Shared/GEOS-Chem/f.e20.FC2010.f09_f09.144.GC_vbsext.001.cam.i.0007-01-01-00000.nc
+
+/glade/p/univ/umit0034/Shared/GEOS-Chem/f.e20.FC2010.f19_f19.144.GC_vbsext.001.cam.i.0007-01-01-00000.nc
+
+
+
+ 'ISOP = isoprene',
+ 'MOH = methanol',
+ 'EOH = ethanol',
+ 'CH2O = formaldehyde',
+ 'ALD2 = acetaldehyde',
+ 'ACTA = acetic_acid',
+ 'ACET = acetone',
+ 'HCOOH = formic_acid',
+ 'HCN = hydrogen_cyanide',
+ 'CO = carbon_monoxide',
+ 'C2H6 = ethane',
+ 'C2H4 = ethene',
+ 'C3H8 = propane',
+ 'ALK4 = pentane + hexane + heptane + tricyclene',
+ 'PRPE = propene + butene',
+ 'TOLU = toluene',
+ 'LIMO = limonene',
+ 'MTPA = pinene_a + pinene_b + sabinene + carene_3',
+ 'MTPO = terpinene_g + terpinene_a + terpinolene + myrcene + ocimene_al + ocimene_t_b + ocimene_c_b + thujene_a + 2met_styrene + cymene_p + cymene_o + bornene + fenchene_a + camphene + phellandrene_a + phellandrene_b'
+
+
+
+atm/cam/solar/SolarForcing2006-2014avg_c180917.nc
+20100101
+FIXED
+
+'xactive_lnd'
+
+
+.true.
+.true.
+.false.
+0.25D0
+
+
+CYCLICAL
+2010
+atm/waccm/lb/LBC_2010climo_CMIP6_0p5degLat_c180227.nc
+
+
+
+
+ 1,30,365,240,240,480,365,73,30
+ 0,-24,-24,-3,-1,1,-24,-120,-240
+'A','A','A','A','A','A','A','A','I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+
+
+ 'Q', 'U', 'V', 'OMEGA', 'T', 'PS',
+
+
+
+ 'ACET','ACTA','ALD2','ASOG1','ASOG2','ASOG3','ATOOH','BR2','BRCL','BRNO3','CH2O','CL2','CLNO2','CLNO3','CLO','CLOO','EOH','ETHLN','ETNO3','ETP','GLYC','GLYX','H2O2','HAC','HBR','HC5A','HCL','HCOOH','HG0','HG0_ANT','HG0_ARC','HG0_ATL','HG0_BB','HG0_CAM','HG0_CAN','HG0_EAF','HG0_EAS','HG0_EEU','HG0_EUR','HG0_GEO','HG0_JPN','HG0_MDE','HG0_NAF','HG0_NAT','HG0_NPA','HG0_OCE','HG0_OCN','HG0_SAF','HG0_SAM','HG0_SAS','HG0_SAT','HG0_SEA','HG0_SO','HG0_SOV','HG0_STR','HG0_USA','HG0_WAF','HG2','HG2_ANT','HG2_ARC','HG2_ATL','HG2_BB','HG2_CAM','HG2_CAN','HG2_EAF','HG2_EAS','HG2_EEU','HG2_EUR','HG2_GEO','HG2_JPN','HG2_MDE','HG2_NAF','HG2_NAT','HG2_NPA','HG2_OCE','HG2_OCN','HG2_SAF','HG2_SAM','HG2_SAS','HG2_SAT','HG2_SEA','HG2_SO','HG2_SOV','HG2_STR','HG2_USA','HG2_WAF','HI','HMHP','HMML','HNO3','HOBR','HOCL','HOI','HONIT','HPALD1','HPALD2','HPALD3','HPALD4','HPETHNL','I2','I2O2','I2O3','I2O4','IBR','ICHE','ICL','ICN','ICPDH','IDC','IDCHP','IDHDP','IDHPE','IDN','IEPOXA','IEPOXB','IEPOXD','IHN1','IHN2','IHN3','IHN4','INPB','INPD','IONO','IONO2','IPRNO3','ITCN','ITHN','LIMO','LVOC','MACR','MACR1OOH','MAP','MCRDH','MCRENOL','MCRHN','MCRHNB','MCRHP','MENO3','MGLY','MOH','MONITS','MONITU','MPAN','MTPA','MTPO','MVK','MVKDH','MVKHC','MVKHCB','MVKHP','MVKN','MVKPC','N2O5','NH3','NO2','NPRNO3','O3','O3AFBL','O3ASBL','O3ATBL','O3EUBL','O3INIT','O3MT','O3NABL','O3PCBL','O3ROW','O3STRAT','O3USA','O3UT','OPOG1','OPOG2','PAN','POG1','POG2','POPG_BAP','POPG_PHE','POPG_PYR','PP','PPN','PROPNN','PRPN','PYAC','R4N2','R4P','RA3P','RB3P','RIPA','RIPB','RIPC','RIPD','RP','SO2','TSOG0','TSOG1','TSOG2','TSOG3','AERI','ASOA1','ASOA2','ASOA3','ASOAN','BCPI','BCPO','BE10','BE10STRAT','BE7','BE7STRAT','BRSALA','BRSALC','DST1','DST2','DST3','DST4','DSTAL1','DSTAL2','DSTAL3','DSTAL4','HGP','HGP_ANT','HGP_ARC','HGP_ATL','HGP_BB','HGP_CAM','HGP_CAN','HGP_EAF','HGP_EAS','HGP_EEU','HGP_EUR','HGP_GEO','HGP_JPN','HGP_MDE','HGP_NAF','HGP_NAT','HGP_NPA','HGP_OCE','HGP_OCN','HGP_SAF','HGP_SAM','HGP_SAS','HGP_SAT','HGP_SEA','HGP_SO','HGP_SOV','HGP_STR','HGP_USA','HGP_WAF','INDIOL','IONITA','ISALA','ISALC','LVOCOA','MONITA','MOPI','MOPO','MSA','NH4','NIT','NITD1','NITD2','NITD3','NITD4','NITS','OCPI','OCPO','OPOA1','OPOA2','PB210','PB210STRAT','PFE','POA1','POA2','POPPBCPI_BAP','POPPBCPI_PHE','POPPBCPI_PYR','POPPBCPO_BAP','POPPBCPO_PHE','POPPBCPO_PYR','POPPOCPI_BAP','POPPOCPI_PHE','POPPOCPI_PYR','POPPOCPO_BAP','POPPOCPO_PHE','POPPOCPO_PYR','SALA','SALAAL','SALACL','SALC','SALCAL','SALCCL','SO4','SO4D1','SO4D2','SO4D3','SO4D4','SO4S','SOAGX','SOAIE','SOAS','TSOA0','TSOA1','TSOA2','TSOA3',
+
+
+
+ 'dst_a1','so4_a1','nh4_a1','pom_a1','pomff1_a1','pombb1_a1','soa_a1','bc_a1','ncl_a1','num_a1','so4_a2','nh4_a2','soa_a2','ncl_a2','dst_a2','num_a2','dst_a3','ncl_a3','so4_a3','pom_a3','bc_a3','num_a3','ncl_a4','so4_a4','pom_a4','pomff1_a4','pombb1_a4','bc_a4','nh4_a4','num_a4','dst_a5','so4_a5','nh4_a5','num_a5','ncl_a6','so4_a6','nh4_a6','num_a6','dst_a7','so4_a7','nh4_a7','num_a7','soa1_a1','soa1_a2','soa2_a1','soa2_a2','soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','soaff1_a1','soaff2_a1','soaff3_a1','soaff4_a1','soaff5_a1','soabb1_a1','soabb2_a1','soabb3_a1','soabb4_a1','soabb5_a1','soabg1_a1','soabg2_a1','soabg3_a1','soabg4_a1','soabg5_a1','soaff1_a2','soaff2_a2','soaff3_a2','soaff4_a2','soaff5_a2','soabb1_a2','soabb2_a2','soabb3_a2','soabb4_a2','soabb5_a2','soabg1_a2','soabg2_a2','soabg3_a2','soabg4_a2','soabg5_a2'
+
+
+
+ 'ACTA','ALD2','ASOG1','ASOG2','ASOG3','ATOOH','BR2','BRCL','CH2O','EOH','ETHLN','ETP','GLYC','GLYX','H2O2','HAC','HBR','HC5A','HCL','HCOOH','HG2','HG2_ANT','HG2_ARC','HG2_ATL','HG2_BB','HG2_CAM','HG2_CAN','HG2_EAF','HG2_EAS','HG2_EEU','HG2_EUR','HG2_GEO','HG2_JPN','HG2_MDE','HG2_NAF','HG2_NAT','HG2_NPA','HG2_OCE','HG2_OCN','HG2_SAF','HG2_SAM','HG2_SAS','HG2_SAT','HG2_SEA','HG2_SO','HG2_SOV','HG2_STR','HG2_USA','HG2_WAF','HI','HMHP','HMML','HNO3','HOBR','HOCL','HOI','HONIT','HPETHNL','I2','I2O2','I2O3','I2O4','IBR','ICHE','ICL','ICN','ICPDH','IDCHP','IDHDP','IDHPE','IDN','IEPOXA','IEPOXB','IEPOXD','IHN1','IHN2','IHN3','IHN4','INPB','INPD','IONO','IONO2','ITCN','ITHN','LIMO','LVOC','MACR1OOH','MAP','MCRDH','MCRENOL','MCRHN','MCRHNB','MCRHP','MEK','MGLY','MOH','MONITS','MONITU','MP','MPAN','MPN','MTPA','MTPO','MVK','MVKDH','MVKHC','MVKHCB','MVKHP','MVKN','MVKPC','NH3','OPOG1','OPOG2','PAN','POG1','POG2','POPG_BAP','POPG_PHE','POPG_PYR','PP','PPN','PROPNN','PRPE','PRPN','PYAC','R4N2','R4P','RA3P','RB3P','RIPA','RIPB','RIPC','RIPD','RP','SO2','TSOG0','TSOG1','TSOG2','TSOG3','AERI','ASOA1','ASOA2','ASOA3','ASOAN','BCPI','BCPO','BE10','BE10STRAT','BE7','BE7STRAT','BRSALA','BRSALC','DST1','DST2','DST3','DST4','DSTAL1','DSTAL2','DSTAL3','DSTAL4','HGP','HGP_ANT','HGP_ARC','HGP_ATL','HGP_BB','HGP_CAM','HGP_CAN','HGP_EAF','HGP_EAS','HGP_EEU','HGP_EUR','HGP_GEO','HGP_JPN','HGP_MDE','HGP_NAF','HGP_NAT','HGP_NPA','HGP_OCE','HGP_OCN','HGP_SAF','HGP_SAM','HGP_SAS','HGP_SAT','HGP_SEA','HGP_SO','HGP_SOV','HGP_STR','HGP_USA','HGP_WAF','INDIOL','IONITA','ISALA','ISALC','LVOCOA','MONITA','MOPI','MOPO','MSA','NH4','NIT','NITD1','NITD2','NITD3','NITD4','NITS','OCPI','OCPO','OPOA1','OPOA2','PB210','PB210STRAT','PFE','POA1','POA2','POPPBCPI_BAP','POPPBCPI_PHE','POPPBCPI_PYR','POPPBCPO_BAP','POPPBCPO_PHE','POPPBCPO_PYR','POPPOCPI_BAP','POPPOCPI_PHE','POPPOCPI_PYR','POPPOCPO_BAP','POPPOCPO_PHE','POPPOCPO_PYR','SALA','SALAAL','SALACL','SALC','SALCAL','SALCCL','SO4','SO4D1','SO4D2','SO4D3','SO4D4','SO4S','SOAGX','SOAIE','SOAS','TSOA0','TSOA1','TSOA2','TSOA3',
+
+
+
+ 'dst_a1','so4_a1','nh4_a1','pom_a1','pomff1_a1','pombb1_a1','soa_a1','bc_a1','ncl_a1','num_a1','so4_a2','nh4_a2','soa_a2','ncl_a2','dst_a2','num_a2','dst_a3','ncl_a3','so4_a3','pom_a3','bc_a3','num_a3','ncl_a4','so4_a4','pom_a4','pomff1_a4','pombb1_a4','bc_a4','nh4_a4','num_a4','dst_a5','so4_a5','nh4_a5','num_a5','ncl_a6','so4_a6','nh4_a6','num_a6','dst_a7','so4_a7','nh4_a7','num_a7','soa1_a1','soa1_a2','soa2_a1','soa2_a2','soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','soaff1_a1','soaff2_a1','soaff3_a1','soaff4_a1','soaff5_a1','soabb1_a1','soabb2_a1','soabb3_a1','soabb4_a1','soabb5_a1','soabg1_a1','soabg2_a1','soabg3_a1','soabg4_a1','soabg5_a1','soaff1_a2','soaff2_a2','soaff3_a2','soaff4_a2','soaff5_a2','soabb1_a2','soabb2_a2','soabb3_a2','soabb4_a2','soabb5_a2','soabg1_a2','soabg2_a2','soabg3_a2','soabg4_a2','soabg5_a2'
+
+
+
diff --git a/bld/namelist_files/use_cases/geoschem_baro_moist.xml b/bld/namelist_files/use_cases/geoschem_baro_moist.xml
new file mode 100644
index 0000000000..da938fe300
--- /dev/null
+++ b/bld/namelist_files/use_cases/geoschem_baro_moist.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ 10101
+
+
+.false.
+
+
+0,-6
+
+ 'U:I','V:I','T:I'
+
+'baroclinic_wave'
+
+
diff --git a/bld/namelist_files/use_cases/hist_cam6.xml b/bld/namelist_files/use_cases/hist_cam6.xml
index ccc629f7bf..5cf005c36a 100644
--- a/bld/namelist_files/use_cases/hist_cam6.xml
+++ b/bld/namelist_files/use_cases/hist_cam6.xml
@@ -1,6 +1,8 @@
+ cesm2_init/b.e20.B1850.f19_g17.release_cesm2_1_0.020/0301-01-01/b.e20.B1850.f19_g17.release_cesm2_1_0.020.cam.i.0301-01-01-00000.nc
+
'atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc'
'atm/cam/tracer_cnst'
@@ -27,7 +29,40 @@
'SERIAL'
'CO2','CH4','N2O','CFC11eq','CFC12'
-
+
+ 'dst_a1', 'dst_c1', 'dst_a3', 'dst_c3', 'dst_a1_SRF', 'dst_a3_SRF', 'dst_a1DDF', 'dst_a1SFWET', 'dst_c1DDF',
+ 'dst_c1SFWET', 'dst_a3DDF', 'dst_a3SFWET', 'dst_c3DDF', 'dst_c3SFWET', 'SSAVIS', 'AODABS', 'AODDUST2', 'bc_a1',
+ 'bc_a4', 'dst_a1', 'dst_a2', 'dst_a3', 'ncl_a1', 'ncl_a1', 'ncl_a2', 'ncl_a3', 'pom_a1',
+ 'pom_a4', 'so4_a1', 'so4_a2', 'so4_a3', 'soa_a1', 'soa_a2', 'bc_c1', 'bc_c4', 'dst_c1',
+ 'dst_c2', 'dst_c3', 'ncl_c1', 'ncl_c1', 'ncl_c2', 'ncl_c3', 'pom_c1', 'pom_c4', 'so4_c1',
+ 'so4_c2', 'so4_c3', 'soa_c1', 'soa_c2', 'num_a1', 'num_a2', 'num_a4', 'num_c1', 'num_c2',
+ 'num_c3', 'bc_a1SFWET', 'bc_a4SFWET', 'dst_a1SFWET', 'dst_a2SFWET', 'dst_a3SFWET', 'ncl_a1SFWET', 'ncl_a2SFWET', 'ncl_a3SFWET',
+ 'pom_a1SFWET', 'pom_a4SFWET', 'so4_a1SFWET', 'so4_a2SFWET', 'so4_a3SFWET', 'soa_a1SFWET', 'soa_a2SFWET', 'bc_c1SFWET', 'bc_c4SFWET',
+ 'dst_c1SFWET', 'dst_c2SFWET', 'dst_c3SFWET', 'ncl_c1SFWET', 'ncl_c2SFWET', 'ncl_c3SFWET', 'pom_c1SFWET', 'pom_c4SFWET', 'so4_c1SFWET',
+ 'so4_c2SFWET', 'so4_c3SFWET', 'soa_c1SFWET', 'soa_c2SFWET', 'bc_a1DDF', 'bc_a4DDF', 'dst_a1DDF', 'dst_a2DDF', 'dst_a3DDF',
+ 'ncl_a1DDF', 'ncl_a2DDF', 'ncl_a3DDF', 'pom_a1DDF', 'pom_a4DDF', 'so4_a1DDF', 'so4_a2DDF', 'so4_a3DDF', 'soa_a1DDF',
+ 'soa_a2DDF', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF', 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF',
+ 'pom_c1DDF', 'pom_c4DDF', 'so4_c1DDF', 'so4_c2DDF', 'so4_c3DDF', 'soa_c1DDF', 'soa_c2DDF', 'bc_a4_CLXF', 'pom_a4_CLXF',
+ 'so4_a1_CLXF', 'so4_a2_CLXF', 'SFbc_a4', 'SFpom_a4', 'SFso4_a1', 'SFso4_a2', 'so4_a1_sfgaex1', 'so4_a2_sfgaex1', 'so4_a3_sfgaex1',
+ 'soa_a1_sfgaex1', 'soa_a2_sfgaex1', 'so4_a2_sfnnuc1', 'so4_c1AQH2SO4', 'so4_c2AQH2SO4', 'so4_c3AQH2SO4', 'so4_c1AQSO4', 'so4_c2AQSO4', 'so4_c3AQSO4',
+ 'ADRAIN', 'ADSNOW', 'ANRAIN', 'ANSNOW', 'AODDUST', 'AODVIS', 'AQRAIN', 'AQSNOW', 'AQSO4_H2O2',
+ 'AQSO4_O3', 'AREI', 'AREL', 'AWNC', 'AWNI', 'CCN3', 'CDNUMC', 'CLDHGH', 'CLDICE',
+ 'CLDLIQ', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLOUD', 'CONCLD', 'DMS', 'FICE', 'FLDS',
+ 'FLNS', 'FLNS', 'FLNT', 'FLNT', 'FLUT', 'FLUT', 'FREQI', 'FREQL', 'FREQR',
+ 'FREQS', 'FSDS', 'FSDS', 'FSNS', 'FSNS', 'FSNT', 'FSNT', 'FSNTOA', 'FSNTOA',
+ 'H2SO4', 'H2SO4_sfgaex1', 'ICEFRAC', 'ICIMR', 'ICWMR', 'IWC', 'LWCF', 'OMEGA', 'OMEGAT',
+ 'PBLH', 'PRECC', 'PRECL', 'PRECSC', 'PRECSL', 'PS', 'PSL', 'Q', 'QFLX',
+ 'QRL', 'QRS', 'QT', 'RAINQM', 'RCM_CLUBB', 'RELHUM', 'RELVAR', 'RTP2_CLUBB', 'RTPTHLP_CLUBB',
+ 'SFDMS', 'SFSOAG', 'SNOWQM', 'SO2', 'SO2_CLXF', 'SOLIN', 'SWCF', 'T', 'TAUBLJX',
+ 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY', 'TGCLDCWP', 'TGCLDIWP', 'TGCLDLWP', 'TMQ',
+ 'TREFHT', 'TS', 'U', 'U10', 'UP2_CLUBB', 'UPWP_CLUBB', 'UU', 'V', 'VP2_CLUBB',
+ 'VPWP_CLUBB', 'VQ', 'VU', 'VV', 'WP2_CLUBB', 'WP3_CLUBB', 'WPRCP_CLUBB', 'WPRTP_CLUBB', 'WPTHLP_CLUBB',
+ 'WPTHVP_CLUBB', 'WSUB', 'Z3', 'bc_a1', 'bc_a1DDF', 'bc_a1SFWET', 'bc_a1_SRF', 'bc_a4', 'bc_a4DDF',
+ 'bc_a4SFWET', 'bc_a4_SRF', 'bc_c1', 'bc_c1DDF', 'bc_c1SFWET', 'num_a2', 'num_a3', 'num_a4', 'so4_a1',
+ 'so4_a2', 'so4_a3', 'so4_c1', 'O3', 'O3colAbove'
+
+
+
1850-2000
diff --git a/bld/namelist_files/use_cases/hist_geoschem.xml b/bld/namelist_files/use_cases/hist_geoschem.xml
new file mode 100644
index 0000000000..9eac1a5be6
--- /dev/null
+++ b/bld/namelist_files/use_cases/hist_geoschem.xml
@@ -0,0 +1,197 @@
+
+
+
+
+00010101
+
+/glade/p/univ/umit0034/ExtData/CHEM_INPUTS/
+
+/glade/p/univ/umit0034/Shared/GEOS-Chem/f.e20.FC2010.f09_f09.144.GC_vbsext.001.cam.i.0007-01-01-00000.nc
+
+/glade/p/univ/umit0034/Shared/GEOS-Chem/f.e20.FC2010.f19_f19.144.GC_vbsext.001.cam.i.0007-01-01-00000.nc
+
+
+
+ 'ISOP = isoprene',
+ 'MOH = methanol',
+ 'EOH = ethanol',
+ 'CH2O = formaldehyde',
+ 'ALD2 = acetaldehyde',
+ 'ACTA = acetic_acid',
+ 'ACET = acetone',
+ 'HCOOH = formic_acid',
+ 'HCN = hydrogen_cyanide',
+ 'CO = carbon_monoxide',
+ 'C2H6 = ethane',
+ 'C2H4 = ethene',
+ 'C3H8 = propane',
+ 'ALK4 = pentane + hexane + heptane + tricyclene',
+ 'PRPE = propene + butene',
+ 'TOLU = toluene',
+ 'LIMO = limonene',
+ 'MTPA = pinene_a + pinene_b + sabinene + carene_3',
+ 'MTPO = terpinene_g + terpinene_a + terpinolene + myrcene + ocimene_al + ocimene_t_b + ocimene_c_b + thujene_a + 2met_styrene + cymene_p + cymene_o + bornene + fenchene_a + camphene + phellandrene_a + phellandrene_b'
+
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-23000102_c20200615.nc
+
+
+.true.
+.true.
+.false.
+0.25D0
+
+SERIAL
+atm/waccm/lb/LBC_1750-2014_CMIP6_0p5degLat_c170126.nc
+
+ SERIAL
+
+
+
+INTERP_MISSING_MONTHS
+
+INTERP_MISSING_MONTHS
+
+'noy', 'nhx'
+
+
+
+ 1,30,365,240,240,480,365,73,30
+ 0,-24,-24,-3,-1,1,-24,-120,-240
+'A','A','A','A','A','A','A','A','I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+
+
+
+ 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
+ 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO',
+ 'CH3CL', 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'PHIS', 'Z3',
+ 'BENZ', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113', 'CFC12',
+ 'CH2O', 'CH3BR', 'CH3CCL3', 'ALD2', 'CH3CL', 'ACET', 'MOH', 'CH4',
+ 'CO', 'H2O2', 'HCFC22', 'HNO3', 'ISOP', 'MTPA', 'N2O', 'O3',
+ 'PAN', 'SO2', 'OH', 'ALK4', 'PRPE', 'BR', 'BRCL', 'BRO', 'BRNO3',
+ 'EOH', 'ETP', 'PRPE', 'RA3P', 'CCL4', 'H1211', 'H1301',
+ 'CFC11', 'CFC113', 'CFC114', 'CFC115', 'CFC12', 'CH2BR2', 'CH2O',
+ 'CH3BR', 'CH3CCL3', 'ALD2', 'CH3CL', 'MGLY', 'ACTA', 'MAP', 'MP',
+ 'CH4', 'CHBR3', 'CL', 'CL2', 'CL2O2', 'CLO', 'CLNO3', 'CO',
+ 'CO2', 'DMS', 'GLYC', 'GLYX',
+ 'H', 'H2', 'H2402', 'H2O2', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22',
+ 'HCL', 'HNO3', 'HNO4', 'HOBR', 'HOCL', 'HONIT', 'HPALD1', 'HPALD2', 'HPALD3',
+ 'HPALD4', 'HAC', 'HC5A', 'IEPOXA', 'IEPOXB', 'IEPOXD', 'ISOP', 'IHN1', 'IHN2', 'IHN3',
+ 'IHN4', 'INO2B', 'INO2D', 'INPB', 'INPD', 'RIPA', 'RIPB', 'RIPC', 'RIPD',
+ 'MACR', 'MVKHP', 'MEK', 'MCRDH', 'MPAN', 'MVK', 'N', 'N2O', 'N2O5', 'ICN',
+ 'NH3', 'NH4', 'NO', 'NO2', 'NO3', 'PROPNN', 'OLND', 'OLNN', 'O', 'OCLO',
+ 'OCS', 'PAN', 'SO2', 'SO4', 'TOLU', 'XYLE',
+ 'R4O2', 'BRO2', 'ETO2', 'A3O2', 'MCO3', 'MO2', 'HO2', 'O1D', 'OH',
+ 'TSOA0', 'TSOA1', 'TSOA2', 'TSOA3', 'ASOAN', 'ASOA1', 'ASOA2', 'ASOA3',
+ 'SOAIE', 'SOAGX',
+ 'H2O', 'SAD_PSC', 'SAD_SULFC', 'SAD_TROP', 'SAD_AERO', 'REFF_AERO',
+ 'PDELDRY', 'RAD_PSC', 'RAD_SULFC',
+ 'HNO3_GAS', 'HNO3_STS', 'HNO3_NAT', 'NOX', 'NOY', 'CLOX', 'CLOY',
+ 'BROX', 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS',
+ 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB',
+ 'AODVISdn', 'AODdnMODE1', 'AODVISstdn', 'AODNIRstdn',
+ 'AODUVstdn', 'AODdnMODE2', 'AODdnMODE3', 'AODdnDUST1', 'AODdnDUST2',
+ 'AODdnDUST3', 'AODVISstdn', 'AODUVstdn', 'AODNIRstdn',
+ 'AODNIRstdn', 'AODVISdn', 'AODUVdn', 'EXTINCTdn', 'EXTxASYMdn',
+ 'EXTINCTNIRdn', 'EXTINCTUVdn',
+ 'WD_EOH', 'WD_ETP', 'WD_RA3P', 'WD_CH2O', 'WD_ALD2',
+ 'WD_MGLY', 'WD_ACTA', 'WD_MAP', 'WD_MOH', 'WD_MP',
+ 'WD_GLYC', 'WD_H2O2', 'WD_SO4', 'WD_HBR', 'WD_HCL',
+ 'WD_HNO3', 'WD_HOBR', 'WD_HOCL', 'WD_HONIT', 'WD_HAC', 'WD_IEPOXA',
+ 'WD_IEPOXB', 'WD_IEPOXD', 'WD_MVK', 'WD_NH3', 'WD_NH4', 'WD_SO2',
+ 'DF_EOH', 'DF_ETP', 'DF_RA3P', 'DF_CH2O', 'DF_ALD2', 'DF_ACET',
+ 'DF_MGLY', 'DF_ACTA', 'DF_MAP', 'DF_MOH', 'DF_MP', 'DF_CO',
+ 'DF_GLYC', 'DF_H2O2', 'DF_SO4', 'DF_HNO3', 'DF_HNO4',
+ 'DF_HONIT', 'DF_HPALD1', 'DF_HPALD2', 'DF_HPALD3', 'DF_HPALD4',
+ 'DF_HAC', 'DF_IEPOXA', 'DF_IEPOXB', 'DF_IEPOXD',
+ 'DF_MPAN', 'DF_NH3', 'DF_NH4', 'DF_NO',
+ 'DF_NO2', 'DF_O3', 'DF_PAN', 'DF_SO2',
+ 'SO2_CLXF', 'SO2_XFRC',
+ 'CO_CLXF', 'NO2_CLXF', 'LNO_PROD', 'LNO_COL_PROD',
+ 'SFEOH', 'SFALD2', 'SFMEK', 'SFCH2O', 'SFC2H6', 'SFC3H8',
+ 'SFALK4', 'SFPRPE', 'SFBENZ', 'SFTOLU', 'SFXYLE',
+ 'SFNO', 'SFACTA', 'SFDMS', 'SFMEK', 'SFSO2', 'SFNH3',
+ 'SFISOP', 'SFMTPA', 'SFMOH', 'SFACET', 'SFCO',
+ 'MEG_ISOP', 'MEG_MOH', 'MEG_EOH', 'MEG_CH2O', 'MEG_ALD2', 'MEG_ACTA',
+ 'MEG_ACET', 'MEG_HCOOH', 'MEG_HCN', 'MEG_CO', 'MEG_C2H6', 'MEG_C2H4',
+ 'MEG_C3H8', 'MEG_ALK4', 'MEG_PRPE', 'MEG_TOLU', 'MEG_LIMO', 'MEG_MTPA',
+ 'MEG_MTPO', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM', 'DO3CHM', 'DCOCHM',
+ 'DHNO3CHM', 'DH2O2CHM', 'DO3CHM', 'DCOCHM', 'AQ_SO2', 'GS_SO2', 'SO2_CLXF',
+ 'MASS', 'ABSORB',
+ 'Jval_O3O1D', 'Jval_NO2', 'Jval_PAN', 'Jval_H2O2', 'Jval_Cl2O2',
+ 'bc_a1', 'bc_a4', 'dst_a1', 'dst_a2', 'dst_a3', 'ncl_a1', 'ncl_a1',
+ 'ncl_a2', 'ncl_a3', 'pom_a1', 'pom_a4', 'so4_a1', 'so4_a2', 'so4_a3',
+ 'soa1_a1', 'soa2_a1', 'soa3_a1', 'soa4_a1', 'soa5_a1', 'soa1_a2', 'soa2_a2', 'soa3_a2',
+ 'soa4_a2', 'soa5_a2', 'bc_c1', 'bc_c4', 'dst_c1', 'dst_c2', 'dst_c3', 'ncl_c1', 'ncl_c1',
+ 'ncl_c2', 'ncl_c3', 'pom_c1', 'pom_c4', 'so4_c1', 'so4_c2', 'so4_c3', 'soa1_c1', 'soa2_c1',
+ 'soa3_c1', 'soa4_c1', 'soa5_c1', 'soa1_c2', 'soa2_c2', 'soa3_c2', 'soa4_c2', 'soa5_c2',
+ 'bc_a1SFWET', 'num_a1','num_a2','num_a3','num_a4','num_c1','num_c2','num_c3','num_c4',
+ 'bc_a1SFWET', 'bc_a4SFWET', 'dst_a1SFWET', 'dst_a2SFWET', 'dst_a3SFWET', 'ncl_a1SFWET',
+ 'ncl_a2SFWET', 'ncl_a3SFWET', 'pom_a1SFWET', 'pom_a4SFWET',
+ 'so4_a1SFWET', 'so4_a2SFWET', 'so4_a3SFWET', 'soa1_a1SFWET', 'soa1_a2SFWET',
+ 'soa2_a1SFWET', 'soa2_a2SFWET', 'soa3_a1SFWET', 'soa3_a2SFWET',
+ 'soa4_a1SFWET', 'soa4_a2SFWET', 'soa5_a1SFWET', 'soa5_a2SFWET', 'bc_c1SFWET',
+ 'bc_c4SFWET', 'dst_c1SFWET', 'dst_c2SFWET', 'dst_c3SFWET',
+ 'ncl_c1SFWET', 'ncl_c2SFWET', 'ncl_c3SFWET', 'pom_c1SFWET', 'pom_c4SFWET',
+ 'so4_c1SFWET', 'so4_c2SFWET', 'so4_c3SFWET', 'soa1_c1SFWET',
+ 'soa1_c2SFWET', 'soa2_c1SFWET', 'soa2_c2SFWET', 'soa3_c1SFWET', 'soa3_c2SFWET',
+ 'soa4_c1SFWET', 'soa4_c2SFWET', 'soa5_c1SFWET', 'soa5_c2SFWET',
+ 'bc_a1DDF', 'bc_a4DDF', 'dst_a1DDF', 'dst_a2DDF', 'dst_a3DDF', 'ncl_a1DDF',
+ 'ncl_a2DDF', 'ncl_a3DDF', 'pom_a1DDF',
+ 'pom_a4DDF', 'so4_a1DDF', 'so4_a2DDF', 'so4_a3DDF', 'soa1_a1DDF',
+ 'soa1_a2DDF', 'soa2_a1DDF', 'soa2_a2DDF', 'soa3_a1DDF',
+ 'soa3_a2DDF', 'soa4_a1DDF', 'soa4_a2DDF', 'soa5_a1DDF', 'soa5_a2DDF',
+ 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF',
+ 'dst_c3DDF', 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF',
+ 'pom_c4DDF', 'so4_c1DDF', 'so4_c2DDF', 'so4_c3DDF',
+ 'soa1_c1DDF', 'soa1_c2DDF', 'soa2_c1DDF', 'soa2_c2DDF', 'soa3_c1DDF',
+ 'soa3_c2DDF', 'soa4_c1DDF', 'soa4_c2DDF', 'soa5_c1DDF',
+ 'soa5_c2DDF', 'num_a1DDF', 'num_a2DDF', 'num_a3DDF', 'num_a4DDF',
+ 'num_c1DDF', 'num_c2DDF', 'num_c3DDF', 'num_c4DDF',
+ 'bc_a4_CLXF', 'pom_a4_CLXF', 'so4_a1_CLXF', 'so4_a2_CLXF',
+ 'num_a1_CLXF', 'num_a2_CLXF', 'SFbc_a4', 'SFpom_a4', 'SFso4_a1',
+ 'SFso4_a2', 'SFnum_a1', 'SFnum_a2', 'SFnum_a3', 'so4_a1_sfgaex1',
+ 'so4_a2_sfgaex1', 'so4_a3_sfgaex1', 'soa1_a1_sfgaex1', 'soa1_a2_sfgaex1',
+ 'soa2_a1_sfgaex1', 'soa2_a2_sfgaex1', 'soa3_a1_sfgaex1', 'soa3_a2_sfgaex1',
+ 'soa4_a1_sfgaex1', 'soa4_a2_sfgaex1', 'soa5_a1_sfgaex1', 'soa5_a2_sfgaex1',
+ 'so4_a2_sfnnuc1', 'so4_c1AQH2SO4', 'so4_c2AQH2SO4', 'so4_c3AQH2SO4',
+ 'so4_c1AQSO4', 'so4_c2AQSO4', 'so4_c3AQSO4', 'SFdst_a1', 'SFdst_a2', 'SFdst_a3',
+ 'SFncl_a1', 'SFncl_a2', 'SFncl_a3',
+ 'TMOCS', 'TMSO2', 'TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'BURDENSEASALTdn','BURDENBCdn', 'PM25'
+
+
+
+
+
+ 'ACET','ACTA','ALD2','ASOG1','ASOG2','ASOG3','ATOOH','BR2','BRCL','BRNO3','CH2O','CL2','CLNO2','CLNO3','CLO','CLOO','EOH','ETHLN','ETNO3','ETP','GLYC','GLYX','H2O2','HAC','HBR','HC5A','HCL','HCOOH','HG0','HG0_ANT','HG0_ARC','HG0_ATL','HG0_BB','HG0_CAM','HG0_CAN','HG0_EAF','HG0_EAS','HG0_EEU','HG0_EUR','HG0_GEO','HG0_JPN','HG0_MDE','HG0_NAF','HG0_NAT','HG0_NPA','HG0_OCE','HG0_OCN','HG0_SAF','HG0_SAM','HG0_SAS','HG0_SAT','HG0_SEA','HG0_SO','HG0_SOV','HG0_STR','HG0_USA','HG0_WAF','HG2','HG2_ANT','HG2_ARC','HG2_ATL','HG2_BB','HG2_CAM','HG2_CAN','HG2_EAF','HG2_EAS','HG2_EEU','HG2_EUR','HG2_GEO','HG2_JPN','HG2_MDE','HG2_NAF','HG2_NAT','HG2_NPA','HG2_OCE','HG2_OCN','HG2_SAF','HG2_SAM','HG2_SAS','HG2_SAT','HG2_SEA','HG2_SO','HG2_SOV','HG2_STR','HG2_USA','HG2_WAF','HI','HMHP','HMML','HNO3','HOBR','HOCL','HOI','HONIT','HPALD1','HPALD2','HPALD3','HPALD4','HPETHNL','I2','I2O2','I2O3','I2O4','IBR','ICHE','ICL','ICN','ICPDH','IDC','IDCHP','IDHDP','IDHPE','IDN','IEPOXA','IEPOXB','IEPOXD','IHN1','IHN2','IHN3','IHN4','INPB','INPD','IONO','IONO2','IPRNO3','ITCN','ITHN','LIMO','LVOC','MACR','MACR1OOH','MAP','MCRDH','MCRENOL','MCRHN','MCRHNB','MCRHP','MENO3','MGLY','MOH','MONITS','MONITU','MPAN','MTPA','MTPO','MVK','MVKDH','MVKHC','MVKHCB','MVKHP','MVKN','MVKPC','N2O5','NH3','NO2','NPRNO3','O3','O3AFBL','O3ASBL','O3ATBL','O3EUBL','O3INIT','O3MT','O3NABL','O3PCBL','O3ROW','O3STRAT','O3USA','O3UT','OPOG1','OPOG2','PAN','POG1','POG2','POPG_BAP','POPG_PHE','POPG_PYR','PP','PPN','PROPNN','PRPN','PYAC','R4N2','R4P','RA3P','RB3P','RIPA','RIPB','RIPC','RIPD','RP','SO2','TSOG0','TSOG1','TSOG2','TSOG3','AERI','ASOA1','ASOA2','ASOA3','ASOAN','BCPI','BCPO','BE10','BE10STRAT','BE7','BE7STRAT','BRSALA','BRSALC','DST1','DST2','DST3','DST4','DSTAL1','DSTAL2','DSTAL3','DSTAL4','HGP','HGP_ANT','HGP_ARC','HGP_ATL','HGP_BB','HGP_CAM','HGP_CAN','HGP_EAF','HGP_EAS','HGP_EEU','HGP_EUR','HGP_GEO','HGP_JPN','HGP_MDE','HGP_NAF','HGP_NAT','HGP_NPA','HGP_OCE','HGP_OCN','HGP_SAF','HGP_SAM','HGP_SAS','HGP_SAT','HGP_SEA','HGP_SO','HGP_SOV','HGP_STR','HGP_USA','HGP_WAF','INDIOL','IONITA','ISALA','ISALC','LVOCOA','MONITA','MOPI','MOPO','MSA','NH4','NIT','NITD1','NITD2','NITD3','NITD4','NITS','OCPI','OCPO','OPOA1','OPOA2','PB210','PB210STRAT','PFE','POA1','POA2','POPPBCPI_BAP','POPPBCPI_PHE','POPPBCPI_PYR','POPPBCPO_BAP','POPPBCPO_PHE','POPPBCPO_PYR','POPPOCPI_BAP','POPPOCPI_PHE','POPPOCPI_PYR','POPPOCPO_BAP','POPPOCPO_PHE','POPPOCPO_PYR','SALA','SALAAL','SALACL','SALC','SALCAL','SALCCL','SO4','SO4D1','SO4D2','SO4D3','SO4D4','SO4S','SOAGX','SOAIE','SOAS','TSOA0','TSOA1','TSOA2','TSOA3',
+
+
+
+ 'dst_a1','so4_a1','nh4_a1','pom_a1','pomff1_a1','pombb1_a1','soa_a1','bc_a1','ncl_a1','num_a1','so4_a2','nh4_a2','soa_a2','ncl_a2','dst_a2','num_a2','dst_a3','ncl_a3','so4_a3','pom_a3','bc_a3','num_a3','ncl_a4','so4_a4','pom_a4','pomff1_a4','pombb1_a4','bc_a4','nh4_a4','num_a4','dst_a5','so4_a5','nh4_a5','num_a5','ncl_a6','so4_a6','nh4_a6','num_a6','dst_a7','so4_a7','nh4_a7','num_a7','soa1_a1','soa1_a2','soa2_a1','soa2_a2','soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','soaff1_a1','soaff2_a1','soaff3_a1','soaff4_a1','soaff5_a1','soabb1_a1','soabb2_a1','soabb3_a1','soabb4_a1','soabb5_a1','soabg1_a1','soabg2_a1','soabg3_a1','soabg4_a1','soabg5_a1','soaff1_a2','soaff2_a2','soaff3_a2','soaff4_a2','soaff5_a2','soabb1_a2','soabb2_a2','soabb3_a2','soabb4_a2','soabb5_a2','soabg1_a2','soabg2_a2','soabg3_a2','soabg4_a2','soabg5_a2'
+
+
+
+ 'ACTA','ALD2','ASOG1','ASOG2','ASOG3','ATOOH','BR2','BRCL','CH2O','EOH','ETHLN','ETP','GLYC','GLYX','H2O2','HAC','HBR','HC5A','HCL','HCOOH','HG2','HG2_ANT','HG2_ARC','HG2_ATL','HG2_BB','HG2_CAM','HG2_CAN','HG2_EAF','HG2_EAS','HG2_EEU','HG2_EUR','HG2_GEO','HG2_JPN','HG2_MDE','HG2_NAF','HG2_NAT','HG2_NPA','HG2_OCE','HG2_OCN','HG2_SAF','HG2_SAM','HG2_SAS','HG2_SAT','HG2_SEA','HG2_SO','HG2_SOV','HG2_STR','HG2_USA','HG2_WAF','HI','HMHP','HMML','HNO3','HOBR','HOCL','HOI','HONIT','HPETHNL','I2','I2O2','I2O3','I2O4','IBR','ICHE','ICL','ICN','ICPDH','IDCHP','IDHDP','IDHPE','IDN','IEPOXA','IEPOXB','IEPOXD','IHN1','IHN2','IHN3','IHN4','INPB','INPD','IONO','IONO2','ITCN','ITHN','LIMO','LVOC','MACR1OOH','MAP','MCRDH','MCRENOL','MCRHN','MCRHNB','MCRHP','MEK','MGLY','MOH','MONITS','MONITU','MP','MPAN','MPN','MTPA','MTPO','MVK','MVKDH','MVKHC','MVKHCB','MVKHP','MVKN','MVKPC','NH3','OPOG1','OPOG2','PAN','POG1','POG2','POPG_BAP','POPG_PHE','POPG_PYR','PP','PPN','PROPNN','PRPE','PRPN','PYAC','R4N2','R4P','RA3P','RB3P','RIPA','RIPB','RIPC','RIPD','RP','SO2','TSOG0','TSOG1','TSOG2','TSOG3','AERI','ASOA1','ASOA2','ASOA3','ASOAN','BCPI','BCPO','BE10','BE10STRAT','BE7','BE7STRAT','BRSALA','BRSALC','DST1','DST2','DST3','DST4','DSTAL1','DSTAL2','DSTAL3','DSTAL4','HGP','HGP_ANT','HGP_ARC','HGP_ATL','HGP_BB','HGP_CAM','HGP_CAN','HGP_EAF','HGP_EAS','HGP_EEU','HGP_EUR','HGP_GEO','HGP_JPN','HGP_MDE','HGP_NAF','HGP_NAT','HGP_NPA','HGP_OCE','HGP_OCN','HGP_SAF','HGP_SAM','HGP_SAS','HGP_SAT','HGP_SEA','HGP_SO','HGP_SOV','HGP_STR','HGP_USA','HGP_WAF','INDIOL','IONITA','ISALA','ISALC','LVOCOA','MONITA','MOPI','MOPO','MSA','NH4','NIT','NITD1','NITD2','NITD3','NITD4','NITS','OCPI','OCPO','OPOA1','OPOA2','PB210','PB210STRAT','PFE','POA1','POA2','POPPBCPI_BAP','POPPBCPI_PHE','POPPBCPI_PYR','POPPBCPO_BAP','POPPBCPO_PHE','POPPBCPO_PYR','POPPOCPI_BAP','POPPOCPI_PHE','POPPOCPI_PYR','POPPOCPO_BAP','POPPOCPO_PHE','POPPOCPO_PYR','SALA','SALAAL','SALACL','SALC','SALCAL','SALCCL','SO4','SO4D1','SO4D2','SO4D3','SO4D4','SO4S','SOAGX','SOAIE','SOAS','TSOA0','TSOA1','TSOA2','TSOA3',
+
+
+
+ 'dst_a1','so4_a1','nh4_a1','pom_a1','pomff1_a1','pombb1_a1','soa_a1','bc_a1','ncl_a1','num_a1','so4_a2','nh4_a2','soa_a2','ncl_a2','dst_a2','num_a2','dst_a3','ncl_a3','so4_a3','pom_a3','bc_a3','num_a3','ncl_a4','so4_a4','pom_a4','pomff1_a4','pombb1_a4','bc_a4','nh4_a4','num_a4','dst_a5','so4_a5','nh4_a5','num_a5','ncl_a6','so4_a6','nh4_a6','num_a6','dst_a7','so4_a7','nh4_a7','num_a7','soa1_a1','soa1_a2','soa2_a1','soa2_a2','soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','soaff1_a1','soaff2_a1','soaff3_a1','soaff4_a1','soaff5_a1','soabb1_a1','soabb2_a1','soabb3_a1','soabb4_a1','soabb5_a1','soabg1_a1','soabg2_a1','soabg3_a1','soabg4_a1','soabg5_a1','soaff1_a2','soaff2_a2','soaff3_a2','soaff4_a2','soaff5_a2','soabb1_a2','soabb2_a2','soabb3_a2','soabb4_a2','soabb5_a2','soabg1_a2','soabg2_a2','soabg3_a2','soabg4_a2','soabg5_a2'
+
+
+
diff --git a/bld/namelist_files/use_cases/hist_trop_strat_vbs_cam6.xml b/bld/namelist_files/use_cases/hist_trop_strat_vbs_cam6.xml
index 18e25be5b7..de0a37ca2f 100644
--- a/bld/namelist_files/use_cases/hist_trop_strat_vbs_cam6.xml
+++ b/bld/namelist_files/use_cases/hist_trop_strat_vbs_cam6.xml
@@ -5,7 +5,6 @@
00010101
atm/cam/inic/fv/f.e20.FCHIST.f09_f09_mg17.cesm2_0_rel.emis_fix.001.cam.i.1996-01-01-00000_c180716.nc
-atm/cam/inic/se/f.e20.FCHIST.ne30_ne30.chem01_cam5_4_152.001.cam.i.2011-01-01-00000_c171215.nc
atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
diff --git a/bld/namelist_files/use_cases/hist_trop_strat_vbsfire_cam6.xml b/bld/namelist_files/use_cases/hist_trop_strat_vbsfire_cam6.xml
index 54883a048c..8ff766ab4c 100644
--- a/bld/namelist_files/use_cases/hist_trop_strat_vbsfire_cam6.xml
+++ b/bld/namelist_files/use_cases/hist_trop_strat_vbsfire_cam6.xml
@@ -5,7 +5,6 @@
00010101
atm/cam/inic/fv/f.e20.FCHIST.f09_f09_mg17.cesm2_0_rel.emis_fix.001.cam.i.1996-01-01-00000_c180716.nc
-atm/cam/inic/se/f.e20.FCHIST.ne30_ne30.chem01_cam5_4_152.001.cam.i.2011-01-01-00000_c171215.nc
atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
diff --git a/bld/namelist_files/use_cases/sd_cam6.xml b/bld/namelist_files/use_cases/sd_cam6.xml
index f3a7cba4a2..34665ad5d8 100644
--- a/bld/namelist_files/use_cases/sd_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_cam6.xml
@@ -8,9 +8,9 @@
.true.
'2005/MERRA2_0.9x1.25_20050101.nc'
atm/cam/met/MERRA2/0.9x1.25
- atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c180430.txt
+ atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c190125.txt
- 'atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc'
+ 'atm/cam/solar/SolarForcingNRLSSI2_daily_s18820101_e20171231_c180702.nc'
'atm/cam/tracer_cnst'
'tracer_cnst_halons_3D_L70_1849-2015_CMIP6ensAvg_c180927.nc'
diff --git a/bld/namelist_files/use_cases/sd_geoschem.xml b/bld/namelist_files/use_cases/sd_geoschem.xml
new file mode 100644
index 0000000000..e420cc20bb
--- /dev/null
+++ b/bld/namelist_files/use_cases/sd_geoschem.xml
@@ -0,0 +1,217 @@
+
+
+
+
+20050101
+
+/glade/p/univ/umit0034/ExtData/CHEM_INPUTS/
+
+atm/cam/met/MERRA2/0.5x0.63/fv_0.47x0.63_nc3000_Co030_Fi001_PF_nullRR_Nsw021_MERRA2_c180612.nc
+
+/glade/p/univ/umit0034/Shared/GEOS-Chem/f.e20.FCSD.f09_f09_mg17.cesm2.1-exp002.001.cam.i.2005-01-01-00000_c180801.nc
+atm/cam/met/MERRA2/0.9x1.25/fv_0.9x1.25_nc3000_Nsw042_Nrs008_Co060_Fi001_ZR_sgh30_24km_GRNL_MERRA2_c171218.nc
+
+/glade/p/univ/umit0034/Shared/GEOS-Chem/f.e20.FCSD.f19_f19_mg17.cesm2.1-exp002.001.cam.i.2005-01-01-00000_c180801.nc
+atm/cam/met/MERRA2/1.9x2.5/fv_1.9x2.5_nc3000_Nsw084_Nrs016_Co120_Fi001_ZR_GRNL_MERRA2_c190617.nc
+
+
+
+ 'ISOP = isoprene',
+ 'MOH = methanol',
+ 'EOH = ethanol',
+ 'CH2O = formaldehyde',
+ 'ALD2 = acetaldehyde',
+ 'ACTA = acetic_acid',
+ 'ACET = acetone',
+ 'HCOOH = formic_acid',
+ 'HCN = hydrogen_cyanide',
+ 'CO = carbon_monoxide',
+ 'C2H6 = ethane',
+ 'C2H4 = ethene',
+ 'C3H8 = propane',
+ 'ALK4 = pentane + hexane + heptane + tricyclene',
+ 'PRPE = propene + butene',
+ 'TOLU = toluene',
+ 'LIMO = limonene',
+ 'MTPA = pinene_a + pinene_b + sabinene + carene_3',
+ 'MTPO = terpinene_g + terpinene_a + terpinolene + myrcene + ocimene_al + ocimene_t_b + ocimene_c_b + thujene_a + 2met_styrene + cymene_p + cymene_o + bornene + fenchene_a + camphene + phellandrene_a + phellandrene_b'
+
+
+50.
+.true.
+
+2005/MERRA2_1.9x2.5_20050101.nc
+atm/cam/met/MERRA2/1.9x2.5
+atm/cam/met/MERRA2/1.9x2.5/filenames_list_c20210302
+
+2005/MERRA2_0.9x1.25_20050101.nc
+atm/cam/met/MERRA2/0.9x1.25
+atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c190125.txt
+
+2010/MERRA2_0.5x0.63_20100101.nc
+atm/cam/met/MERRA2/0.5x0.63
+atm/cam/met/MERRA2/0.5x0.63/filenames_list_c180612
+
+2005/MERRA2_0.9x1.25_20050101.nc
+atm/cam/met/MERRA2/0.9x1.25
+atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c190125.txt
+
+2010/MERRA2_0.5x0.63_20100101.nc
+atm/cam/met/MERRA2/0.5x0.63
+atm/cam/met/MERRA2/0.5x0.63/filenames_list_c180612
+
+
+atm/cam/solar/SolarForcingNRLSSI2_daily_s18820101_e20171231_c191122.nc
+SERIAL
+
+
+.true.
+.true.
+.false.
+0.25D0
+
+
+SERIAL
+atm/waccm/lb/LBC_1750-2014_CMIP6_0p5degLat_c170126.nc
+
+
+
+INTERP_MISSING_MONTHS
+
+INTERP_MISSING_MONTHS
+
+
+
+ 1,30,365,240,240,480,365,73,30
+ 0,-24,-24,-3,-1,1,-24,-120,-240
+'A','A','A','A','A','A','A','A','I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+
+
+
+ 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
+ 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO',
+ 'CH3CL', 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'PHIS', 'Z3',
+ 'BENZ', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113', 'CFC12',
+ 'CH2O', 'CH3BR', 'CH3CCL3', 'ALD2', 'CH3CL', 'ACET', 'MOH', 'CH4',
+ 'CO', 'H2O2', 'HCFC22', 'HNO3', 'ISOP', 'MTPA', 'N2O', 'O3',
+ 'PAN', 'SO2', 'OH', 'ALK4', 'PRPE', 'BR', 'BRCL', 'BRO', 'BRNO3',
+ 'EOH', 'ETP', 'PRPE', 'RA3P', 'CCL4', 'H1211', 'H1301',
+ 'CFC11', 'CFC113', 'CFC114', 'CFC115', 'CFC12', 'CH2BR2', 'CH2O',
+ 'CH3BR', 'CH3CCL3', 'ALD2', 'CH3CL', 'MGLY', 'ACTA', 'MAP', 'MP',
+ 'CH4', 'CHBR3', 'CL', 'CL2', 'CL2O2', 'CLO', 'CLNO3', 'CO',
+ 'CO2', 'DMS', 'GLYC', 'GLYX',
+ 'H', 'H2', 'H2402', 'H2O2', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22',
+ 'HCL', 'HNO3', 'HNO4', 'HOBR', 'HOCL', 'HONIT', 'HPALD1', 'HPALD2', 'HPALD3',
+ 'HPALD4', 'HAC', 'HC5A', 'IEPOXA', 'IEPOXB', 'IEPOXD', 'ISOP', 'IHN1', 'IHN2', 'IHN3',
+ 'IHN4', 'INO2B', 'INO2D', 'INPB', 'INPD', 'RIPA', 'RIPB', 'RIPC', 'RIPD',
+ 'MACR', 'MVKHP', 'MEK', 'MCRDH', 'MPAN', 'MVK', 'N', 'N2O', 'N2O5', 'ICN',
+ 'NH3', 'NH4', 'NO', 'NO2', 'NO3', 'PROPNN', 'OLND', 'OLNN', 'O', 'OCLO',
+ 'OCS', 'PAN', 'SO2', 'SO4', 'TOLU', 'XYLE',
+ 'R4O2', 'BRO2', 'ETO2', 'A3O2', 'MCO3', 'MO2', 'HO2', 'O1D', 'OH',
+ 'TSOA0', 'TSOA1', 'TSOA2', 'TSOA3', 'ASOAN', 'ASOA1', 'ASOA2', 'ASOA3',
+ 'SOAIE', 'SOAGX',
+ 'H2O', 'SAD_PSC', 'SAD_SULFC', 'SAD_TROP', 'SAD_AERO', 'REFF_AERO',
+ 'PDELDRY', 'RAD_PSC', 'RAD_SULFC',
+ 'HNO3_GAS', 'HNO3_STS', 'HNO3_NAT', 'NOX', 'NOY', 'CLOX', 'CLOY',
+ 'BROX', 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS',
+ 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB',
+ 'AODVISdn', 'AODdnMODE1', 'AODVISstdn', 'AODNIRstdn',
+ 'AODUVstdn', 'AODdnMODE2', 'AODdnMODE3', 'AODdnDUST1', 'AODdnDUST2',
+ 'AODdnDUST3', 'AODVISstdn', 'AODUVstdn', 'AODNIRstdn',
+ 'AODNIRstdn', 'AODVISdn', 'AODUVdn', 'EXTINCTdn', 'EXTxASYMdn',
+ 'EXTINCTNIRdn', 'EXTINCTUVdn',
+ 'WD_EOH', 'WD_ETP', 'WD_RA3P', 'WD_CH2O', 'WD_ALD2',
+ 'WD_MGLY', 'WD_ACTA', 'WD_MAP', 'WD_MOH', 'WD_MP',
+ 'WD_GLYC', 'WD_H2O2', 'WD_SO4', 'WD_HBR', 'WD_HCL',
+ 'WD_HNO3', 'WD_HOBR', 'WD_HOCL', 'WD_HONIT', 'WD_HAC', 'WD_IEPOXA',
+ 'WD_IEPOXB', 'WD_IEPOXD', 'WD_MVK', 'WD_NH3', 'WD_NH4', 'WD_SO2',
+ 'DF_EOH', 'DF_ETP', 'DF_RA3P', 'DF_CH2O', 'DF_ALD2', 'DF_ACET',
+ 'DF_MGLY', 'DF_ACTA', 'DF_MAP', 'DF_MOH', 'DF_MP', 'DF_CO',
+ 'DF_GLYC', 'DF_H2O2', 'DF_SO4', 'DF_HNO3', 'DF_HNO4',
+ 'DF_HONIT', 'DF_HPALD1', 'DF_HPALD2', 'DF_HPALD3', 'DF_HPALD4',
+ 'DF_HAC', 'DF_IEPOXA', 'DF_IEPOXB', 'DF_IEPOXD',
+ 'DF_MPAN', 'DF_NH3', 'DF_NH4', 'DF_NO',
+ 'DF_NO2', 'DF_O3', 'DF_PAN', 'DF_SO2',
+ 'SO2_CLXF', 'SO2_XFRC',
+ 'CO_CLXF', 'NO2_CLXF', 'LNO_PROD', 'LNO_COL_PROD',
+ 'SFEOH', 'SFALD2', 'SFMEK', 'SFCH2O', 'SFC2H6', 'SFC3H8',
+ 'SFALK4', 'SFPRPE', 'SFBENZ', 'SFTOLU', 'SFXYLE',
+ 'SFNO', 'SFACTA', 'SFDMS', 'SFMEK', 'SFSO2', 'SFNH3',
+ 'SFISOP', 'SFMTPA', 'SFMOH', 'SFACET', 'SFCO',
+ 'MEG_ISOP', 'MEG_MOH', 'MEG_EOH', 'MEG_CH2O', 'MEG_ALD2', 'MEG_ACTA',
+ 'MEG_ACET', 'MEG_HCOOH', 'MEG_HCN', 'MEG_CO', 'MEG_C2H6', 'MEG_C2H4',
+ 'MEG_C3H8', 'MEG_ALK4', 'MEG_PRPE', 'MEG_TOLU', 'MEG_LIMO', 'MEG_MTPA',
+ 'MEG_MTPO', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM', 'DO3CHM', 'DCOCHM',
+ 'DHNO3CHM', 'DH2O2CHM', 'DO3CHM', 'DCOCHM', 'AQ_SO2', 'GS_SO2', 'SO2_CLXF',
+ 'MASS', 'ABSORB',
+ 'Jval_O3O1D', 'Jval_NO2', 'Jval_PAN', 'Jval_H2O2', 'Jval_Cl2O2',
+ 'bc_a1', 'bc_a4', 'dst_a1', 'dst_a2', 'dst_a3', 'ncl_a1', 'ncl_a1',
+ 'ncl_a2', 'ncl_a3', 'pom_a1', 'pom_a4', 'so4_a1', 'so4_a2', 'so4_a3',
+ 'soa1_a1', 'soa2_a1', 'soa3_a1', 'soa4_a1', 'soa5_a1', 'soa1_a2', 'soa2_a2', 'soa3_a2',
+ 'soa4_a2', 'soa5_a2', 'bc_c1', 'bc_c4', 'dst_c1', 'dst_c2', 'dst_c3', 'ncl_c1', 'ncl_c1',
+ 'ncl_c2', 'ncl_c3', 'pom_c1', 'pom_c4', 'so4_c1', 'so4_c2', 'so4_c3', 'soa1_c1', 'soa2_c1',
+ 'soa3_c1', 'soa4_c1', 'soa5_c1', 'soa1_c2', 'soa2_c2', 'soa3_c2', 'soa4_c2', 'soa5_c2',
+ 'bc_a1SFWET', 'num_a1','num_a2','num_a3','num_a4','num_c1','num_c2','num_c3','num_c4',
+ 'bc_a1SFWET', 'bc_a4SFWET', 'dst_a1SFWET', 'dst_a2SFWET', 'dst_a3SFWET', 'ncl_a1SFWET',
+ 'ncl_a2SFWET', 'ncl_a3SFWET', 'pom_a1SFWET', 'pom_a4SFWET',
+ 'so4_a1SFWET', 'so4_a2SFWET', 'so4_a3SFWET', 'soa1_a1SFWET', 'soa1_a2SFWET',
+ 'soa2_a1SFWET', 'soa2_a2SFWET', 'soa3_a1SFWET', 'soa3_a2SFWET',
+ 'soa4_a1SFWET', 'soa4_a2SFWET', 'soa5_a1SFWET', 'soa5_a2SFWET', 'bc_c1SFWET',
+ 'bc_c4SFWET', 'dst_c1SFWET', 'dst_c2SFWET', 'dst_c3SFWET',
+ 'ncl_c1SFWET', 'ncl_c2SFWET', 'ncl_c3SFWET', 'pom_c1SFWET', 'pom_c4SFWET',
+ 'so4_c1SFWET', 'so4_c2SFWET', 'so4_c3SFWET', 'soa1_c1SFWET',
+ 'soa1_c2SFWET', 'soa2_c1SFWET', 'soa2_c2SFWET', 'soa3_c1SFWET', 'soa3_c2SFWET',
+ 'soa4_c1SFWET', 'soa4_c2SFWET', 'soa5_c1SFWET', 'soa5_c2SFWET',
+ 'bc_a1DDF', 'bc_a4DDF', 'dst_a1DDF', 'dst_a2DDF', 'dst_a3DDF', 'ncl_a1DDF',
+ 'ncl_a2DDF', 'ncl_a3DDF', 'pom_a1DDF',
+ 'pom_a4DDF', 'so4_a1DDF', 'so4_a2DDF', 'so4_a3DDF', 'soa1_a1DDF',
+ 'soa1_a2DDF', 'soa2_a1DDF', 'soa2_a2DDF', 'soa3_a1DDF',
+ 'soa3_a2DDF', 'soa4_a1DDF', 'soa4_a2DDF', 'soa5_a1DDF', 'soa5_a2DDF',
+ 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF',
+ 'dst_c3DDF', 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF',
+ 'pom_c4DDF', 'so4_c1DDF', 'so4_c2DDF', 'so4_c3DDF',
+ 'soa1_c1DDF', 'soa1_c2DDF', 'soa2_c1DDF', 'soa2_c2DDF', 'soa3_c1DDF',
+ 'soa3_c2DDF', 'soa4_c1DDF', 'soa4_c2DDF', 'soa5_c1DDF',
+ 'soa5_c2DDF', 'num_a1DDF', 'num_a2DDF', 'num_a3DDF', 'num_a4DDF',
+ 'num_c1DDF', 'num_c2DDF', 'num_c3DDF', 'num_c4DDF',
+ 'bc_a4_CLXF', 'pom_a4_CLXF', 'so4_a1_CLXF', 'so4_a2_CLXF',
+ 'num_a1_CLXF', 'num_a2_CLXF', 'SFbc_a4', 'SFpom_a4', 'SFso4_a1',
+ 'SFso4_a2', 'SFnum_a1', 'SFnum_a2', 'SFnum_a3', 'so4_a1_sfgaex1',
+ 'so4_a2_sfgaex1', 'so4_a3_sfgaex1', 'soa1_a1_sfgaex1', 'soa1_a2_sfgaex1',
+ 'soa2_a1_sfgaex1', 'soa2_a2_sfgaex1', 'soa3_a1_sfgaex1', 'soa3_a2_sfgaex1',
+ 'soa4_a1_sfgaex1', 'soa4_a2_sfgaex1', 'soa5_a1_sfgaex1', 'soa5_a2_sfgaex1',
+ 'so4_a2_sfnnuc1', 'so4_c1AQH2SO4', 'so4_c2AQH2SO4', 'so4_c3AQH2SO4',
+ 'so4_c1AQSO4', 'so4_c2AQSO4', 'so4_c3AQSO4', 'SFdst_a1', 'SFdst_a2', 'SFdst_a3',
+ 'SFncl_a1', 'SFncl_a2', 'SFncl_a3',
+ 'TMOCS', 'TMSO2', 'TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'BURDENSEASALTdn','BURDENBCdn', 'PM25'
+
+
+
+ 'ACET','ACTA','ALD2','ASOG1','ASOG2','ASOG3','ATOOH','BR2','BRCL','BRNO3','CH2O','CL2','CLNO2','CLNO3','CLO','CLOO','EOH','ETHLN','ETNO3','ETP','GLYC','GLYX','H2O2','HAC','HBR','HC5A','HCL','HCOOH','HG0','HG0_ANT','HG0_ARC','HG0_ATL','HG0_BB','HG0_CAM','HG0_CAN','HG0_EAF','HG0_EAS','HG0_EEU','HG0_EUR','HG0_GEO','HG0_JPN','HG0_MDE','HG0_NAF','HG0_NAT','HG0_NPA','HG0_OCE','HG0_OCN','HG0_SAF','HG0_SAM','HG0_SAS','HG0_SAT','HG0_SEA','HG0_SO','HG0_SOV','HG0_STR','HG0_USA','HG0_WAF','HG2','HG2_ANT','HG2_ARC','HG2_ATL','HG2_BB','HG2_CAM','HG2_CAN','HG2_EAF','HG2_EAS','HG2_EEU','HG2_EUR','HG2_GEO','HG2_JPN','HG2_MDE','HG2_NAF','HG2_NAT','HG2_NPA','HG2_OCE','HG2_OCN','HG2_SAF','HG2_SAM','HG2_SAS','HG2_SAT','HG2_SEA','HG2_SO','HG2_SOV','HG2_STR','HG2_USA','HG2_WAF','HI','HMHP','HMML','HNO3','HOBR','HOCL','HOI','HONIT','HPALD1','HPALD2','HPALD3','HPALD4','HPETHNL','I2','I2O2','I2O3','I2O4','IBR','ICHE','ICL','ICN','ICPDH','IDC','IDCHP','IDHDP','IDHPE','IDN','IEPOXA','IEPOXB','IEPOXD','IHN1','IHN2','IHN3','IHN4','INPB','INPD','IONO','IONO2','IPRNO3','ITCN','ITHN','LIMO','LVOC','MACR','MACR1OOH','MAP','MCRDH','MCRENOL','MCRHN','MCRHNB','MCRHP','MENO3','MGLY','MOH','MONITS','MONITU','MPAN','MTPA','MTPO','MVK','MVKDH','MVKHC','MVKHCB','MVKHP','MVKN','MVKPC','N2O5','NH3','NO2','NPRNO3','O3','O3AFBL','O3ASBL','O3ATBL','O3EUBL','O3INIT','O3MT','O3NABL','O3PCBL','O3ROW','O3STRAT','O3USA','O3UT','OPOG1','OPOG2','PAN','POG1','POG2','POPG_BAP','POPG_PHE','POPG_PYR','PP','PPN','PROPNN','PRPN','PYAC','R4N2','R4P','RA3P','RB3P','RIPA','RIPB','RIPC','RIPD','RP','SO2','TSOG0','TSOG1','TSOG2','TSOG3','AERI','ASOA1','ASOA2','ASOA3','ASOAN','BCPI','BCPO','BE10','BE10STRAT','BE7','BE7STRAT','BRSALA','BRSALC','DST1','DST2','DST3','DST4','DSTAL1','DSTAL2','DSTAL3','DSTAL4','HGP','HGP_ANT','HGP_ARC','HGP_ATL','HGP_BB','HGP_CAM','HGP_CAN','HGP_EAF','HGP_EAS','HGP_EEU','HGP_EUR','HGP_GEO','HGP_JPN','HGP_MDE','HGP_NAF','HGP_NAT','HGP_NPA','HGP_OCE','HGP_OCN','HGP_SAF','HGP_SAM','HGP_SAS','HGP_SAT','HGP_SEA','HGP_SO','HGP_SOV','HGP_STR','HGP_USA','HGP_WAF','INDIOL','IONITA','ISALA','ISALC','LVOCOA','MONITA','MOPI','MOPO','MSA','NH4','NIT','NITD1','NITD2','NITD3','NITD4','NITS','OCPI','OCPO','OPOA1','OPOA2','PB210','PB210STRAT','PFE','POA1','POA2','POPPBCPI_BAP','POPPBCPI_PHE','POPPBCPI_PYR','POPPBCPO_BAP','POPPBCPO_PHE','POPPBCPO_PYR','POPPOCPI_BAP','POPPOCPI_PHE','POPPOCPI_PYR','POPPOCPO_BAP','POPPOCPO_PHE','POPPOCPO_PYR','SALA','SALAAL','SALACL','SALC','SALCAL','SALCCL','SO4','SO4D1','SO4D2','SO4D3','SO4D4','SO4S','SOAGX','SOAIE','SOAS','TSOA0','TSOA1','TSOA2','TSOA3',
+
+
+
+ 'dst_a1','so4_a1','nh4_a1','pom_a1','pomff1_a1','pombb1_a1','soa_a1','bc_a1','ncl_a1','num_a1','so4_a2','nh4_a2','soa_a2','ncl_a2','dst_a2','num_a2','dst_a3','ncl_a3','so4_a3','pom_a3','bc_a3','num_a3','ncl_a4','so4_a4','pom_a4','pomff1_a4','pombb1_a4','bc_a4','nh4_a4','num_a4','dst_a5','so4_a5','nh4_a5','num_a5','ncl_a6','so4_a6','nh4_a6','num_a6','dst_a7','so4_a7','nh4_a7','num_a7','soa1_a1','soa1_a2','soa2_a1','soa2_a2','soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','soaff1_a1','soaff2_a1','soaff3_a1','soaff4_a1','soaff5_a1','soabb1_a1','soabb2_a1','soabb3_a1','soabb4_a1','soabb5_a1','soabg1_a1','soabg2_a1','soabg3_a1','soabg4_a1','soabg5_a1','soaff1_a2','soaff2_a2','soaff3_a2','soaff4_a2','soaff5_a2','soabb1_a2','soabb2_a2','soabb3_a2','soabb4_a2','soabb5_a2','soabg1_a2','soabg2_a2','soabg3_a2','soabg4_a2','soabg5_a2'
+
+
+
+ 'ACTA','ALD2','ASOG1','ASOG2','ASOG3','ATOOH','BR2','BRCL','CH2O','EOH','ETHLN','ETP','GLYC','GLYX','H2O2','HAC','HBR','HC5A','HCL','HCOOH','HG2','HG2_ANT','HG2_ARC','HG2_ATL','HG2_BB','HG2_CAM','HG2_CAN','HG2_EAF','HG2_EAS','HG2_EEU','HG2_EUR','HG2_GEO','HG2_JPN','HG2_MDE','HG2_NAF','HG2_NAT','HG2_NPA','HG2_OCE','HG2_OCN','HG2_SAF','HG2_SAM','HG2_SAS','HG2_SAT','HG2_SEA','HG2_SO','HG2_SOV','HG2_STR','HG2_USA','HG2_WAF','HI','HMHP','HMML','HNO3','HOBR','HOCL','HOI','HONIT','HPETHNL','I2','I2O2','I2O3','I2O4','IBR','ICHE','ICL','ICN','ICPDH','IDCHP','IDHDP','IDHPE','IDN','IEPOXA','IEPOXB','IEPOXD','IHN1','IHN2','IHN3','IHN4','INPB','INPD','IONO','IONO2','ITCN','ITHN','LIMO','LVOC','MACR1OOH','MAP','MCRDH','MCRENOL','MCRHN','MCRHNB','MCRHP','MEK','MGLY','MOH','MONITS','MONITU','MP','MPAN','MPN','MTPA','MTPO','MVK','MVKDH','MVKHC','MVKHCB','MVKHP','MVKN','MVKPC','NH3','OPOG1','OPOG2','PAN','POG1','POG2','POPG_BAP','POPG_PHE','POPG_PYR','PP','PPN','PROPNN','PRPE','PRPN','PYAC','R4N2','R4P','RA3P','RB3P','RIPA','RIPB','RIPC','RIPD','RP','SO2','TSOG0','TSOG1','TSOG2','TSOG3','AERI','ASOA1','ASOA2','ASOA3','ASOAN','BCPI','BCPO','BE10','BE10STRAT','BE7','BE7STRAT','BRSALA','BRSALC','DST1','DST2','DST3','DST4','DSTAL1','DSTAL2','DSTAL3','DSTAL4','HGP','HGP_ANT','HGP_ARC','HGP_ATL','HGP_BB','HGP_CAM','HGP_CAN','HGP_EAF','HGP_EAS','HGP_EEU','HGP_EUR','HGP_GEO','HGP_JPN','HGP_MDE','HGP_NAF','HGP_NAT','HGP_NPA','HGP_OCE','HGP_OCN','HGP_SAF','HGP_SAM','HGP_SAS','HGP_SAT','HGP_SEA','HGP_SO','HGP_SOV','HGP_STR','HGP_USA','HGP_WAF','INDIOL','IONITA','ISALA','ISALC','LVOCOA','MONITA','MOPI','MOPO','MSA','NH4','NIT','NITD1','NITD2','NITD3','NITD4','NITS','OCPI','OCPO','OPOA1','OPOA2','PB210','PB210STRAT','PFE','POA1','POA2','POPPBCPI_BAP','POPPBCPI_PHE','POPPBCPI_PYR','POPPBCPO_BAP','POPPBCPO_PHE','POPPBCPO_PYR','POPPOCPI_BAP','POPPOCPI_PHE','POPPOCPI_PYR','POPPOCPO_BAP','POPPOCPO_PHE','POPPOCPO_PYR','SALA','SALAAL','SALACL','SALC','SALCAL','SALCCL','SO4','SO4D1','SO4D2','SO4D3','SO4D4','SO4S','SOAGX','SOAIE','SOAS','TSOA0','TSOA1','TSOA2','TSOA3',
+
+
+
+ 'dst_a1','so4_a1','nh4_a1','pom_a1','pomff1_a1','pombb1_a1','soa_a1','bc_a1','ncl_a1','num_a1','so4_a2','nh4_a2','soa_a2','ncl_a2','dst_a2','num_a2','dst_a3','ncl_a3','so4_a3','pom_a3','bc_a3','num_a3','ncl_a4','so4_a4','pom_a4','pomff1_a4','pombb1_a4','bc_a4','nh4_a4','num_a4','dst_a5','so4_a5','nh4_a5','num_a5','ncl_a6','so4_a6','nh4_a6','num_a6','dst_a7','so4_a7','nh4_a7','num_a7','soa1_a1','soa1_a2','soa2_a1','soa2_a2','soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','soaff1_a1','soaff2_a1','soaff3_a1','soaff4_a1','soaff5_a1','soabb1_a1','soabb2_a1','soabb3_a1','soabb4_a1','soabb5_a1','soabg1_a1','soabg2_a1','soabg3_a1','soabg4_a1','soabg5_a1','soaff1_a2','soaff2_a2','soaff3_a2','soaff4_a2','soaff5_a2','soabb1_a2','soabb2_a2','soabb3_a2','soabb4_a2','soabb5_a2','soabg1_a2','soabg2_a2','soabg3_a2','soabg4_a2','soabg5_a2'
+
+
+
diff --git a/bld/namelist_files/use_cases/sd_trop_strat_vbs_cam6.xml b/bld/namelist_files/use_cases/sd_trop_strat_vbs_cam6.xml
index 9dd7c31692..dd4d3d215b 100644
--- a/bld/namelist_files/use_cases/sd_trop_strat_vbs_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_trop_strat_vbs_cam6.xml
@@ -15,14 +15,14 @@
2005/MERRA2_0.9x1.25_20050101.nc
atm/cam/met/MERRA2/0.9x1.25
-atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c180430.txt
+atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c190125.txt
2010/MERRA2_0.5x0.63_20100101.nc
atm/cam/met/MERRA2/0.5x0.63
atm/cam/met/MERRA2/0.5x0.63/filenames_list_c180612
-atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+atm/cam/solar/SolarForcingNRLSSI2_daily_s18820101_e20171231_c180702.nc
SERIAL
diff --git a/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml b/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml
index e9747838ff..9f93bd3495 100644
--- a/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml
+++ b/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml
@@ -13,7 +13,7 @@
.true.
2005/MERRA2_0.9x1.25_20050101.nc
atm/cam/met/MERRA2/0.9x1.25
-atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c180430.txt
+atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c190125.txt
2005/MERRA2_1.9x2.5_20050101.nc
atm/cam/met/MERRA2/1.9x2.5
atm/cam/met/MERRA2/1.9x2.5/filenames_list_c180824
diff --git a/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml b/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml
index 95aee0ff3f..485ddad44d 100644
--- a/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml
@@ -5,13 +5,13 @@
20050101
-atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+atm/cam/solar/SolarForcingNRLSSI2_daily_s18820101_e20171231_c180702.nc
-atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+atm/cam/solar/SolarParmsEPP_CMIP6_daily_s18491230_e20150101_c190109.nc
-atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+atm/cam/solar/SolarParmsEPP_CMIP6_daily_s18491230_e20150101_c190109.nc
'epp_ion_rates'
@@ -21,15 +21,16 @@
60.
50.
.true.
-2005/MERRA2_0.9x1.25_20050101.nc
+1980/MERRA2_0.9x1.25_19800101.nc
atm/cam/met/MERRA2/0.9x1.25
-atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c180430.txt
+atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c190125.txt
+0.84
atm/cam/met/MERRA2/0.9x1.25/fv_0.9x1.25_nc3000_Nsw042_Nrs008_Co060_Fi001_ZR_sgh30_24km_GRNL_MERRA2_c171218.nc
SERIAL
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'CFC11eq'
diff --git a/bld/namelist_files/use_cases/sd_waccm_mad_cam6.xml b/bld/namelist_files/use_cases/sd_waccm_mad_cam6.xml
new file mode 100644
index 0000000000..c3e1dee2b3
--- /dev/null
+++ b/bld/namelist_files/use_cases/sd_waccm_mad_cam6.xml
@@ -0,0 +1,110 @@
+
+
+
+
+20050101
+
+
+atm/cam/solar/SolarForcingNRLSSI2_daily_s18820101_e20171231_c180702.nc
+
+
+atm/cam/solar/SolarParmsEPP_CMIP6_daily_s18491230_e20150101_c190109.nc
+
+
+atm/cam/solar/SolarParmsEPP_CMIP6_daily_s18491230_e20150101_c190109.nc
+'epp_ion_rates'
+
+
+atm/cam/inic/fv/f.e21.FWSD.f09_f09_mg17.spinup02.cam.i.2005-01-01-00000_c180801.nc
+
+50.
+60.
+50.
+.true.
+2005/MERRA2_0.9x1.25_20050101.nc
+atm/cam/met/MERRA2/0.9x1.25
+atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c190125.txt
+0.84
+
+atm/cam/met/MERRA2/0.9x1.25/fv_0.9x1.25_nc3000_Nsw042_Nrs008_Co060_Fi001_ZR_sgh30_24km_GRNL_MERRA2_c171218.nc
+
+
+SERIAL
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
+
+ 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
+ 'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'CFC11eq'
+
+
+
+atm/waccm/ub/tgcm_ubc_1850-2100_c100204.nc
+'INTERP_MISSING_MONTHS'
+
+
+.true.
+.false.
+.true.
+atm/waccm/qbo/qbocyclic28months.nc
+
+
+
+
+INTERP_MISSING_MONTHS
+
+
+INTERP_MISSING_MONTHS
+
+
+
+ 1, 30, 120, 240, 240, 480, 365, 73, 30
+ 0, -24, -6, -3, -1, 1, -24,-120,-240
+ 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
+
+
+ 'AOA1', 'AOA2', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
+ 'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC',
+ 'FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'HORZ', 'LANDFRAC', 'LHFLX', 'OCNFRAC',
+ 'OH', 'OMEGA', 'PHIS', 'PRECC', 'PRECL', 'PS', 'QFLX', 'QRL', 'QRLNLTE',
+ 'QRS', 'RELHUM', 'SHFLX', 'SOLIN', 'SWCF', 'QCP', 'QTHERMAL', 'QRL_TOT', 'QRS_TOT',
+ 'QJOULE', 'PSL', 'HNO3_STS', 'HNO3_NAT', 'HNO3_GAS', 'NO_Lightning', 'QNO', 'QRS_AUR',
+ 'QRS_CO2NIR', 'QRS_EUV', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'TREFHT', 'TTGW',
+ 'UTGWORO', 'UTGWSPEC', 'VERT', 'VTGWORO', 'VTGWSPEC', 'Z3', 'HOX', 'NOX', 'NOY', 'CLOX',
+ 'CLOY', 'BROX', 'BROY', 'TCLY', 'TOTH', 'QJOULE', 'UI', 'VI', 'UIONTEND', 'VIONTEND',
+ 'DTCORE', 'T_24_COS', 'T_24_SIN', 'T_12_COS', 'T_12_SIN', 'OMEGA_24_COS', 'OMEGA_24_SIN',
+ 'OMEGA_12_COS', 'OMEGA_12_SIN', 'U_24_COS', 'U_24_SIN', 'U_12_COS', 'U_12_SIN',
+ 'V_24_COS', 'V_24_SIN', 'V_12_COS', 'V_12_SIN', 'PS_24_COS', 'PS_24_SIN', 'PS_12_COS',
+ 'PS_12_SIN', 'CLDLIQ', 'CLDICE', 'CONCLD', 'FRONTGF:I', 'BUTGWSPEC', 'BTAUE', 'BTAUW',
+ 'BTAUN', 'BTAUS', 'TAUE', 'TAUW', 'TAUN', 'TAUS', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY',
+ 'SNOWHLND', 'SNOWHICE', 'ICEFRAC', 'FSDSC', 'SFNO', 'SFCO', 'SFCH2O', 'CFC11STAR',
+ 'TROPP_FD', 'NITROP_PD', 'TROP_P', 'TROP_T', 'TROP_Z', 'SAD_AERO', 'REFF_AERO',
+ 'AODVISstdn', 'EXTINCTdn', 'EXTxASYMdn', 'AODUVstdn', 'AODNIRstdn', 'AODVISdn', 'MASS',
+ 'TMOCS', 'TMSO2', 'TMDMS', 'TMso4_a1', 'TMso4_a2', 'TMso4_a3', 'BURDENDUSTdn',
+ 'BURDENPOMdn', 'bc_a1', 'bc_a4', 'dst_a1', 'dst_a2', 'dst_a3', 'ncl_a1', 'ncl_a1',
+ 'ncl_a2', 'ncl_a3', 'pom_a1', 'pom_a4', 'so4_a1', 'so4_a2', 'so4_a3', 'soa_a1',
+ 'soa_a2', 'bc_c1', 'bc_c4', 'dst_c1', 'dst_c2', 'dst_c3', 'ncl_c1', 'ncl_c1',
+ 'ncl_c2', 'ncl_c3', 'pom_c1', 'pom_c4', 'so4_c1', 'so4_c2', 'so4_c3', 'soa_c1', 'soa_c2',
+ 'num_a1','num_a2','num_a3','num_a4','num_c1','num_c2','num_c3','num_c4',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'LNO_PROD', 'LNO_COL_PROD', 'dry_deposition_NHx_as_N', 'dry_deposition_NOy_as_N',
+ 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N'
+
+
+ 'MSKtem','PS','PSL','VTHzm','UVzm','UWzm','Uzm','Vzm','THzm','Wzm','PHIS'
+
+
+ 'PS', 'PSL', 'U', 'V', 'T', 'Z3', 'PHIS', 'FRONTGF:I', 'OMEGA', 'O3',
+ 'REFF_AERO', 'SAD_AERO', 'so4_a1', 'so4_a2', 'so4_a3', 'AODVISstdn', 'NITROP_PD',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'QRS_TOT', 'CO2', 'H', 'NO', 'O'
+
+
+.true.
+.true.
+.true.
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.false.
+
+
diff --git a/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml b/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
index 6d5a482d4e..0a5f993155 100644
--- a/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
@@ -5,13 +5,13 @@
20050101
-atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+atm/cam/solar/SolarForcingNRLSSI2_daily_s18820101_e20171231_c180702.nc
-atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+atm/cam/solar/SolarParmsEPP_CMIP6_daily_s18491230_e20150101_c190109.nc
-atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+atm/cam/solar/SolarParmsEPP_CMIP6_daily_s18491230_e20150101_c190109.nc
'epp_ion_rates'
yearly
@@ -23,15 +23,15 @@
60.
50.
.true.
-2005/MERRA2_0.9x1.25_20050101.nc
+1980/MERRA2_0.9x1.25_19800101.nc
atm/cam/met/MERRA2/0.9x1.25
-atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c180430.txt
+atm/cam/met/MERRA2/0.9x1.25/filenames_1975-2017_c190125.txt
atm/cam/met/MERRA2/0.9x1.25/fv_0.9x1.25_nc3000_Nsw042_Nrs008_Co060_Fi001_ZR_sgh30_24km_GRNL_MERRA2_c171218.nc
SERIAL
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'SF6', 'CFC11eq'
diff --git a/bld/namelist_files/use_cases/ssp126_cam6.xml b/bld/namelist_files/use_cases/ssp126_cam6.xml
new file mode 100644
index 0000000000..fbb281f3fd
--- /dev/null
+++ b/bld/namelist_files/use_cases/ssp126_cam6.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+ 'H2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/elev/H2OemissionCH4oxidationx2_3D_L70_2014-2101_CMIP6-SSP1-2.6_c190307.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SOAGx1.5_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SOAGx1.5_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp/emissions-cmip6-SOAGx1.5_biogenic_surface_mol_175001-210101_0.9x1.25_c20190329.nc'
+
+
+
+ atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+
+ 'atm/cam/tracer_cnst'
+ 'tracer_cnst_halons_3D_L70_2014-2101_CMIP6-SSP1-2.6_c190307.nc'
+ 'O3','OH','NO3','HO2'
+ 'INTERP_MISSING_MONTHS'
+ ''
+
+
+ 'atm/cam/ozone_strataero'
+ 'ozone_strataero_WACCM_L70_zm5day_2015-2100_SSP126_c190221.nc'
+ 'O3'
+ 'SERIAL'
+
+
+ INTERP_MISSING_MONTHS
+ INTERP_MISSING_MONTHS
+
+ 'SERIAL'
+ 'atm/cam/ozone_strataero'
+ 'ozone_strataero_WACCM_L70_zm5day_2015-2100_SSP126_c190221.nc'
+ .true.
+
+
+
+
+
+ .true.
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_ScenarioMIP_IAMC-IMAGE-ssp126_201401-210112_fv_0.9x1.25_c20190207.nc
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_ScenarioMIP_IAMC-IMAGE-ssp126_201401-210112_fv_1.9x2.5_c20190207.nc
+
+ .true.
+ SERIAL
+ atm/cam/ggas
+ ac_CO2 -> emissions-cmip6_CO2_anthro_ac_ssp126_201401-210112_fv_0.9x1.25_c20190207.txt
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_ScenarioMIP_IAMC-IMAGE-ssp126_201401-210112_fv_0.9x1.25_c20190207.nc
+ ac_CO2 -> emissions-cmip6_CO2_anthro_ac_ssp126_201401-210112_fv_1.9x2.5_c20190207.txt
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_ScenarioMIP_IAMC-IMAGE-ssp126_201401-210112_fv_1.9x2.5_c20190207.nc
+
+
+
+ 'CHEM_LBC_FILE'
+ atm/waccm/lb/LBC_2014-2500_CMIP6_SSP126_0p5degLat_GlobAnnAvg_c190301.nc
+ 'SERIAL'
+ 'CO2','CH4','N2O','CFC11eq','CFC12'
+
+
+ 1850-2100
+
+
+
diff --git a/bld/namelist_files/use_cases/ssp245_cam6.xml b/bld/namelist_files/use_cases/ssp245_cam6.xml
new file mode 100644
index 0000000000..93d19b279b
--- /dev/null
+++ b/bld/namelist_files/use_cases/ssp245_cam6.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+ 'H2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/elev/H2OemissionCH4oxidationx2_3D_L70_1849-2101_CMIP6ensAvg_SSP2-4.5_c190403.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc'
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SOAGx1.5_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SOAGx1.5_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp/emissions-cmip6-SOAGx1.5_biogenic_surface_mol_175001-210101_0.9x1.25_c20190329.nc'
+
+
+ INTERP_MISSING_MONTHS
+ INTERP_MISSING_MONTHS
+
+
+ atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+ 'atm/cam/tracer_cnst'
+ 'tracer_cnst_halons_3D_L70_1849-2101_CMIP6ensAvg_SSP2-4.5_c190403.nc'
+ 'O3','OH','NO3','HO2'
+ 'INTERP_MISSING_MONTHS'
+ ''
+
+ 'atm/cam/ozone_strataero'
+ 'ozone_strataero_WACCM_L70_zm5day_18500101-21010201_CMIP6histEnsAvg_SSP245_c190403.nc'
+ 'O3'
+ 'SERIAL'
+
+ 'SERIAL'
+ 'atm/cam/ozone_strataero'
+ 'ozone_strataero_WACCM_L70_zm5day_18500101-21010201_CMIP6histEnsAvg_SSP245_c190403.nc'
+ .true.
+
+
+.true.
+atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245_201401-210112_fv_0.9x1.25_c20190207.nc
+atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245_201401-210112_fv_1.9x2.5_c20190207.nc
+.true.
+
+ SERIAL
+ atm/cam/ggas
+ ac_CO2 -> emissions-cmip6_CO2_anthro_ac_GLOBIOM-ssp245_201401-210112_fv_0.9x1.25_c20190207.txt
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245_201401-210112_fv_0.9x1.25_c20190207.nc
+ ac_CO2 -> emissions-cmip6_CO2_anthro_ac_GLOBIOM-ssp245_201401-210112_fv_1.9x2.5_c20190207.txt
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245_201401-210112_fv_1.9x2.5_c20190207.nc
+
+
+
+
+ 'CHEM_LBC_FILE'
+ atm/waccm/lb/LBC_2014-2500_CMIP6_SSP245_0p5degLat_GlobAnnAvg_c190301.nc
+ 'SERIAL'
+ 'CO2','CH4','N2O','CFC11eq','CFC12'
+
+
+ 1850-2100
+
+
diff --git a/bld/namelist_files/use_cases/ssp370_cam6.xml b/bld/namelist_files/use_cases/ssp370_cam6.xml
new file mode 100644
index 0000000000..e3d6720a91
--- /dev/null
+++ b/bld/namelist_files/use_cases/ssp370_cam6.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+ 'H2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/elev/H2OemissionCH4oxidationx2_3D_L70_1849-2101_CMIP6ensAvg_SSP3-7.0_c190403.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc'
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SOAGx1.5_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SOAGx1.5_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp/emissions-cmip6-SOAGx1.5_biogenic_surface_mol_175001-210101_0.9x1.25_c20190329.nc'
+
+
+ INTERP_MISSING_MONTHS
+ INTERP_MISSING_MONTHS
+
+
+ atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+ 'atm/cam/tracer_cnst'
+ 'tracer_cnst_halons_3D_L70_1849-2101_CMIP6ensAvg_SSP3-7.0_c190403.nc'
+ 'O3','OH','NO3','HO2'
+ 'INTERP_MISSING_MONTHS'
+ ''
+
+ 'atm/cam/ozone_strataero'
+ 'ozone_strataero_WACCM_L70_zm5day_18500101-21010201_CMIP6histEnsAvg_SSP370_c190403.nc'
+ 'O3'
+ 'SERIAL'
+
+ 'SERIAL'
+ 'atm/cam/ozone_strataero'
+ 'ozone_strataero_WACCM_L70_zm5day_18500101-21010201_CMIP6histEnsAvg_SSP370_c190403.nc'
+ .true.
+
+
+ .true.
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_ScenarioMIP_IAMC-AIM-ssp370_201401-210112_fv_0.9x1.25_c20190207.nc
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_ScenarioMIP_IAMC-AIM-ssp370_201401-210112_fv_1.9x2.5_c20190207.nc
+ .true.
+
+ SERIAL
+ atm/cam/ggas
+ ac_CO2 -> emissions-cmip6_CO2_anthro_ac_ssp370_201401-210112_fv_0.9x1.25_c20190207.txt
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_ScenarioMIP_IAMC-AIM-ssp370_201401-210112_fv_0.9x1.25_c20190207.nc
+ ac_CO2 -> emissions-cmip6_CO2_anthro_ac_ssp370_201401-210112_fv_1.9x2.5_c20190207.txt
+ atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_ScenarioMIP_IAMC-AIM-ssp370_201401-210112_fv_1.9x2.5_c20190207.nc
+
+
+
+ 'CHEM_LBC_FILE'
+ atm/waccm/lb/LBC_2014-2500_CMIP6_SSP370_0p5degLat_GlobAnnAvg_c190301.nc
+ 'SERIAL'
+ 'CO2','CH4','N2O','CFC11eq','CFC12'
+
+
+ 1850-2100
+
+
diff --git a/bld/namelist_files/use_cases/ssp585_cam6.xml b/bld/namelist_files/use_cases/ssp585_cam6.xml
new file mode 100644
index 0000000000..6d7ffd50fa
--- /dev/null
+++ b/bld/namelist_files/use_cases/ssp585_cam6.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+ 'H2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/elev/H2OemissionCH4oxidationx2_3D_L70_2014-2101_CMIP6-SSP5-8.5_c190307.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SOAGx1.5_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SOAGx1.5_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SOAG -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SOAGx1.5_biogenic_surface_mol_175001-210101_0.9x1.25_c20190226.nc'
+
+
+
+
+ atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+ 'atm/cam/tracer_cnst'
+ 'tracer_cnst_halons_3D_L70_2014-2101_CMIP6-SSP5-8.5_c190307.nc'
+ 'O3','OH','NO3','HO2'
+ 'INTERP_MISSING_MONTHS'
+ ''
+
+
+ 'atm/cam/ozone_strataero'
+ 'ozone_strataero_WACCM_L70_zm5day_2015-2100_SSP585_c190529.nc'
+ 'O3'
+ 'SERIAL'
+
+
+ INTERP_MISSING_MONTHS
+ INTERP_MISSING_MONTHS
+
+
+ 'SERIAL'
+ 'atm/cam/ozone_strataero'
+ 'ozone_strataero_WACCM_L70_zm5day_2015-2100_SSP585_c190529.nc'
+ .true.
+
+
+.true.
+atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585_201401-210112_fv_0.9x1.25_c20190207.nc
+atm/cam/ggas/emissions-cmip6_CO2_anthro_surface_ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585_201401-210112_fv_1.9x2.5_c20190207.nc
+
+
+.true.
+SERIAL
+atm/cam/ggas
+ac_CO2 -> emissions-cmip6_CO2_anthro_ac_MAGPIE-ssp585_201401-210112_fv_0.9x1.25_c20190207.txt
+atm/cam/ggas/emissions-cmip6_CO2_anthro_ac_ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585_201401-210112_fv_0.9x1.25_c20190207.nc
+ac_CO2 -> emissions-cmip6_CO2_anthro_ac_MAGPIE-ssp585_201401-210112_fv_1.9x2.5_c20190207.txt
+emissions-cmip6_CO2_anthro_ac_ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585_201401-210112_fv_1.9x2.5_c20190207.nc
+
+ 'CHEM_LBC_FILE'
+ atm/waccm/lb/LBC_2014-2500_CMIP6_SSP585_0p5degLat_GlobAnnAvg_c190301.nc
+ 'SERIAL'
+ 'CO2','CH4','N2O','CFC11eq','CFC12'
+
+
+
+ 1850-2100
+
+
+
diff --git a/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml b/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
index 42ed5df073..56c98308a2 100644
--- a/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
@@ -8,8 +8,7 @@
cesm2_init/b.e21.BW1850.f09_g17.CMIP6-piControl.001/0056-01-01/b.e21.BW1850.f09_g17.CMIP6-piControl.001.cam.i.0056-01-01-00000.nc
-atm/waccm/ic/b.e20.BW1850.f19_g17.alpha07b.002.cam.i.1851-01-01-00000_c170911.nc
-atm/waccm/ic/b1850.waccm-mam3_4x5_L70.cam2.i.0156-01-01.c141201.nc
+cesm2_init/b.e20.BWma1850.f19_g17.release_cesm2_1_0.020/0289-01-01/b.e20.BWma1850.f19_g17.release_cesm2_1_0.020.cam.i.0289-01-01-00000.nc
atm/cam/solar/SolarForcingCMIP6piControl_c160921.nc
@@ -27,7 +26,7 @@
CYCLICAL
1850
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'CFC11eq'
@@ -54,6 +53,8 @@
CYCLICAL
1850
+'noy', 'nhx'
+
1, 30, 120, 240, 240, 480, 365, 73, 30
diff --git a/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml b/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml
index 35ca796c86..1cc69f065c 100644
--- a/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml
@@ -22,7 +22,7 @@
CYCLICAL
2000
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'CFC11eq'
diff --git a/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml b/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml
index 2c1df5e57f..f94c271a17 100644
--- a/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml
+++ b/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml
@@ -6,6 +6,8 @@
atm/waccm/ic/f.e11.FWTREFC1.f19_f19.001.cam.i.1955-01-01-00000_c141024.nc
+atm/cam/topo/USGS-gtopo30_1.9x2.5_remap_c050602.nc
+
1.3
diff --git a/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml b/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
index d81a15e2db..d48f59e603 100644
--- a/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
@@ -16,13 +16,12 @@
cesm2_init/b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001/1950-01-01/b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001.cam.i.1950-01-01-00000.nc
-atm/waccm/ic/f.e15.FWmaAMIP.f19_f19.misc08_cam5_4_81.003.cam.i.1980-01-01-00000_c160928.nc
-atm/waccm/ic/f2000.waccm-mam3_4x5_L70.cam2.i.0017-01-01.c121113.nc
+cesm2_init/b.e20.BWma1850.f19_g17.release_cesm2_1_0.020/0289-01-01/b.e20.BWma1850.f19_g17.release_cesm2_1_0.020.cam.i.0289-01-01-00000.nc
SERIAL
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'CFC11eq'
@@ -46,6 +45,8 @@
INTERP_MISSING_MONTHS
+'noy', 'nhx'
+
1, 30, 120, 240, 240, 480, 365, 73, 30
diff --git a/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml b/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml
index 73d7ca59c0..bd75c5f664 100644
--- a/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml
@@ -19,7 +19,7 @@
CYCLICAL
1850
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'CO2','CH4','N2O','CFC11','CFC12','CFC11eq'
diff --git a/bld/namelist_files/use_cases/waccm_sc_2000_cam4.xml b/bld/namelist_files/use_cases/waccm_sc_2000_cam4.xml
index 434e30a76c..5321d3a61e 100644
--- a/bld/namelist_files/use_cases/waccm_sc_2000_cam4.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_2000_cam4.xml
@@ -26,8 +26,6 @@
atm/waccm/ic/f2000.e10r02.2deg.waccm.005.cam2.i.0017-01-01-00000.nc
atm/waccm/ic/f40.2000.track1.4deg.001.cam2.i.0013-01-01-00000.nc
-atm/waccm/ic/f.e11.FWSC.ne30_ne30.wm_SE.003.cam.i.0006-01-01-00000.nc
-
diff --git a/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml b/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml
index 82560b98ba..3af7fde0a5 100644
--- a/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml
@@ -15,7 +15,7 @@
atm/waccm/ic/f.e15.FWmaAMIP.f19_f19.misc08_cam5_4_81.003.cam.i.1980-01-01-00000_c160928.nc
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'SERIAL'
'CO2','CH4','N2O','CFC11','CFC12','CFC11eq'
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
index 77e051275d..ba06534fd7 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
@@ -27,7 +27,7 @@
CYCLICAL
1850
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'SF6', 'CFC11eq'
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
index edbdaf726e..9a3e627bc8 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
@@ -22,7 +22,7 @@
SERIAL
-atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180227.nc
+atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'SF6', 'CFC11eq'
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_ssp126_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_ssp126_cam6.xml
new file mode 100644
index 0000000000..6263b03b7c
--- /dev/null
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_ssp126_cam6.xml
@@ -0,0 +1,292 @@
+
+
+
+
+19900101
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+'epp_ion_rates'
+
+
+atm/waccm/ic/b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001.cam.i.2015-01-01-00000.nc
+
+
+SERIAL
+atm/waccm/lb/LBC_20140116-25001216_CMIP6_SSP126_0p5degLat_c180905.nc
+
+ 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
+ 'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'SF6', 'CFC11eq'
+
+
+
+atm/waccm/ub/tgcm_ubc_1850-2100_c100204.nc
+'INTERP_MISSING_MONTHS'
+
+
+.true.
+.true.
+.true.
+.false.
+
+
+
+
+INTERP_MISSING_MONTHS
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'NO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_NO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/stratvolc/VolcanEESMv3.10_piControl_SO2_1850-2014average_ext_1deg_ZeroTrop_c181020.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+INTERP_MISSING_MONTHS
+
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_BENZENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_BENZENE_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_BIGALK_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_BIGALK_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_BIGENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_BIGENE_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C2H2_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C2H2_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C2H4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_C2H4_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C2H5OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C2H5OH_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C2H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C2H6_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_C2H6_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C3H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C3H6_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_C3H6_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C3H8_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_C3H8_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_C3H8_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH2O_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH2O_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3CHO_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3CHO_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3CN_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3CN_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3COCH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3COCH3_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3COCHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3COCHO_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3COOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3COOH_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CH3OH_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CO_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_CO_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_CO_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'E90 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions_E90global_surface_175001-210101_0.9x1.25_c20190224.nc',
+ 'GLYALD -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_GLYALD_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_HCN_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_HCN_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_HCOOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_HCOOH_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'ISOP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_ISOP_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_IVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_IVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_MEK_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_MEK_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'MTERP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_MTERP_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_NH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_NH3_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_NH3_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_NO_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_NO_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_NO_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_TOLUENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_TOLUENE_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_XYLENES_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_XYLENES_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190225.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp126/emissions-cmip6-ScenarioMIP_IAMC-IMAGE-ssp126-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190225.nc'
+
+
+'noy', 'nhx'
+
+
+
+ 1, 5, 20, 40, 120, 240, 365, 73, 365
+ 0, -24, -6, -3, -1, 1, -24,-120,-240
+'A', 'A', 'A', 'A', 'I', 'A', 'A', 'A', 'I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.true.
+.true.
+.true.
+
+ 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+
+
+ 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn', 'AODBCdn', 'AODdnDUST1', 'AODdnDUST2',
+ 'AODdnDUST3', 'AODdnMODE1', 'AODdnMODE2', 'AODdnMODE3', 'AODDUST2', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn',
+ 'AODUVdn', 'AODUVstdn', 'AODVIS', 'AODVISdn', 'AODVISstdn', 'AQ_SO2', 'AREA', 'AREI', 'AREL', 'bc_a1', 'bc_a1DDF',
+ 'bc_a1SFWET', 'bc_a4', 'bc_a4_CLXF', 'bc_a4DDF', 'bc_a4SFWET', 'BCARY', 'bc_c1', 'bc_c1DDF', 'bc_c1SFWET', 'bc_c4', 'bc_c4DDF',
+ 'bc_c4SFWET', 'BENZENE', 'BENZO2', 'BENZOOH', 'BEPOMUC', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALD', 'BIGALK', 'BIGENE',
+ 'BR', 'BRCL', 'BRO', 'BRONO2', 'BROX', 'BROY', 'BRY', 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn',
+ 'BURDENSOAdn', 'BUTGWSPEC', 'BZALD', 'BZOO', 'BZOOH', 'C2H2', 'C2H4', 'C2H5O2', 'C2H5OH', 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7O2',
+ 'C3H7OOH', 'C3H8', 'C6H5O2', 'C6H5OOH', 'CCL4', 'CDNUMC', 'CF2CLBR', 'CF3BR', 'CFC113', 'CFC114', 'CFC115', 'CFC11', 'CFC11STAR',
+ 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CCL3_CHML', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3CO3', 'CH3COCH3', 'CH3COCHO',
+ 'CH3COOH', 'CH3COOOH', 'CH3O2', 'CH3OH', 'CH3OOH', 'CH4', 'CH4_CHML', 'CHBR3', 'CL2', 'CL2O2', 'CL',
+ 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD', 'CLOX', 'CLOY', 'CLY', 'CME', 'CMFDQ', 'CMFMC',
+ 'CMFMCDZM', 'CO2', 'CO2_CHML', 'CO', 'CO_CHML', 'CO_CHMP', 'COF2', 'COFCL', 'CONCLD', 'CRESOL',
+ 'DCOCHM', 'DF_ALKNIT', 'DF_ALKOOH', 'DF_BENZOOH', 'DF_BZOOH', 'DF_C2H5OH', 'DF_C2H5OOH', 'DF_C3H7OOH', 'DF_C6H5OOH', 'DF_CH2O',
+ 'DF_CH3CHO', 'DF_CH3CN', 'DF_CH3COCH3', 'DF_CH3COCHO', 'DF_CH3COOH', 'DF_CH3COOOH', 'DF_CH3OH', 'DF_CH3OOH', 'DF_CO', 'DF_EOOH',
+ 'DF_GLYALD', 'DF_H2O2', 'DF_H2SO4', 'DF_HCN', 'DF_HCOOH', 'DF_HNO3', 'DF_HO2NO2', 'DF_HONITR', 'DF_HPALD', 'DF_HYAC', 'DF_HYDRALD',
+ 'DF_IEPOX', 'DF_ISOPNITA', 'DF_ISOPNITB', 'DF_ISOPNO3', 'DF_ISOPNOOH', 'DF_ISOPOOH', 'DF_IVOC', 'DF_MACROOH', 'DF_MEKOOH',
+ 'DF_MPAN', 'DF_NC4CH2OH', 'DF_NC4CHO', 'DF_NH3', 'DF_NH4', 'DF_NO2', 'DF_NO', 'DF_NOA', 'DF_NTERPOOH', 'DF_O3',
+ 'DF_ONITR', 'DF_PAN', 'DF_PHENOOH', 'DF_POOH', 'DF_ROOH', 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3',
+ 'DF_SOAG4', 'DF_SVOC', 'DF_TERP2OOH', 'DF_TERPNIT', 'DF_TERPOOH', 'DF_TERPROD1', 'DF_TERPROD2', 'DF_TOLOOH', 'DF_XOOH', 'DF_XYLENOOH',
+ 'DF_XYLOLOOH', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'DH2O2CHM', 'DHNO3CHM', 'DICARBO2', 'DMS', 'DO3CHM', 'dry_deposition_NHx_as_N',
+ 'dry_deposition_NOy_as_N', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM', 'dst_a1', 'dst_a1DDF', 'dst_a1SFWET', 'dst_a2', 'dst_a2DDF',
+ 'dst_a2SFWET', 'dst_a3', 'dst_a3DDF', 'dst_a3SFWET', 'dst_c1', 'dst_c1DDF', 'dst_c1SFWET', 'dst_c2', 'dst_c2DDF', 'dst_c2SFWET',
+ 'dst_c3', 'dst_c3DDF', 'dst_c3SFWET', 'DTCORE', 'E90', 'e', 'ENEO2', 'EO2', 'EO', 'EOOH', 'EVAPPREC',
+ 'EVAPQZM', 'EVAPTZM', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'F', 'FCTL',
+ 'FLASHFRQ', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FREQI', 'FREQL', 'FREQZM', 'FSDS',
+ 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'FSNTOAC', 'FSUTOA', 'GLYALD', 'GLYOXAL',
+ 'GS_SO2', 'H2402', 'H2', 'H2O2', 'H2O', 'H2SO4', 'H2SO4M_C', 'H2SO4_sfnnuc1', 'H', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22', 'HCL',
+ 'HCL_GAS', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS', 'HO2', 'HO2NO2', 'HOBR', 'HOCH2OO', 'HOCL', 'HONITR',
+ 'HPALD', 'HYAC', 'HYDRALD', 'ICEFRAC', 'IEPOX', 'ISOP', 'ISOPAO2', 'ISOPBO2', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3',
+ 'ISOPNOOH', 'ISOPOOH', 'IVOC', 'IVOC_CHML', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan', 'KVH_CLUBB',
+ 'LANDFRAC', 'LHFLX', 'LNO_COL_PROD', 'LNO_PROD', 'MACR', 'MACRO2', 'MACROOH', 'MALO2', 'MASS', 'MCO3', 'MDIALO2',
+ 'MEG_BCARY', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_C2H4', 'MEG_C2H5OH', 'MEG_C2H6', 'MEG_C3H6', 'MEG_C3H8', 'MEG_CH2O',
+ 'MEG_CH3CHO', 'MEG_CH3COCH3', 'MEG_CH3COOH', 'MEG_CH3OH', 'MEG_CO', 'MEG_HCN', 'MEG_HCOOH', 'MEG_ISOP', 'MEG_MTERP', 'MEG_TOLUENE',
+ 'MEK', 'MEKO2', 'MEKOOH', 'MPAN', 'MTERP', 'MVK', 'N2D', 'N2O5', 'N2O', 'N2O_CHML', 'N2p', 'N', 'NC4CH2OH',
+ 'NC4CHO', 'ncl_a1', 'ncl_a1DDF', 'ncl_a1SFWET', 'ncl_a2', 'ncl_a2DDF', 'ncl_a2SFWET', 'ncl_a3', 'ncl_a3DDF', 'ncl_a3SFWET', 'ncl_c1',
+ 'ncl_c1DDF', 'ncl_c1SFWET', 'ncl_c2', 'ncl_c2DDF', 'ncl_c2SFWET', 'ncl_c3', 'ncl_c3DDF', 'ncl_c3SFWET', 'NDEP', 'NH3', 'NH4', 'NH_50',
+ 'NH_5', 'NHDEP', 'NITROP_PD', 'NO2', 'NO2_CLXF', 'NO3', 'NO', 'NOA', 'NOp', 'NOX', 'NOY', 'Np', 'NTERPO2', 'NTERPOOH',
+ 'num_a1', 'num_a1_CLXF', 'num_a1DDF', 'num_a2', 'num_a2_CLXF', 'num_a2DDF', 'num_a2_sfnnuc1', 'num_a3', 'num_a3DDF', 'num_a4',
+ 'num_a4DDF', 'num_c1', 'num_c1DDF', 'num_c2', 'num_c2DDF', 'num_c3', 'num_c3DDF', 'num_c4', 'num_c4DDF', 'NUMLIQ', 'O1D', 'O2_1D',
+ 'O2_1S', 'O2', 'O2p', 'O3', 'O3_CHML', 'O3_CHMP', 'O3_Loss', 'O3_Prod', 'O', 'OCLO', 'OCS', 'OddOx_CLOxBROx_Loss',
+ 'OddOx_HOx_Loss', 'OddOx_Loss_Tot', 'OddOx_NOx_Loss', 'OddOx_Ox_Loss', 'OddOx_Prod_Tot', 'OH', 'OMEGA', 'OMEGAT', 'ONITR', 'Op',
+ 'PAN', 'PBLH', 'PBZNIT', 'PDELDRY', 'PHENO2', 'PHENO', 'PHENOL', 'PHENOOH', 'PHIS', 'PM25', 'PO2', 'pom_a1', 'pom_a1DDF', 'pom_a1SFWET',
+ 'pom_a4', 'pom_a4DDF', 'pom_a4SFWET', 'pom_c1', 'pom_c1DDF', 'pom_c1SFWET', 'pom_c4', 'pom_c4DDF', 'pom_c4SFWET',
+ 'POOH', 'PRECC', 'PRECT', 'PS', 'PSL', 'PTEQ', 'PTTEND', 'Q', 'QFLX', 'QRAIN', 'QREFHT', 'QRL', 'QRLC', 'QRS',
+ 'QRSC', 'QSNOW', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RELHUM', 'r_GLYOXAL_aer',
+ 'r_het10', 'r_het11', 'r_het12', 'r_het13', 'r_het15', 'r_het16', 'r_het17', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5',
+ 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_HO2_O3', 'RHREFHT', 'r_jsoa1_a1', 'r_jsoa1_a2', 'r_jsoa2_a1', 'r_jsoa2_a2',
+ 'r_jsoa3_a1', 'r_jsoa3_a2', 'r_jsoa4_a1', 'r_jsoa4_a2', 'r_jsoa5_a1', 'r_jsoa5_a2', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O',
+ 'r_OH_O3', 'r_OH_O', 'ROOH', 'RO2', 'RO2_NO_sum', 'RO2_NO3_sum', 'RO2_HO2_sum', 'RO2_RO2_sum', 'RCO2_NO2_sum',
+ 'S', 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP', 'SF6', 'SFbc_a4', 'SFBCARY',
+ 'SFBENZENE', 'SFBIGALK', 'SFBIGENE', 'SFC2H2', 'SFC2H4', 'SFC2H5OH', 'SFC2H6', 'SFC3H6', 'SFC3H8', 'SFCH2O', 'SFCH3CHO', 'SFCH3CN',
+ 'SFCH3COCH3', 'SFCH3COCHO', 'SFCH3COOH', 'SFCH3OH', 'SFCO', 'SFDMS', 'SFdst_a1', 'SFdst_a2', 'SFdst_a3', 'SFGLYALD', 'SFHCN', 'SFHCOOH',
+ 'SFISOP', 'SFIVOC', 'SFMEK', 'SFMTERP', 'SFncl_a1', 'SFncl_a2', 'SFncl_a3', 'SFNH3', 'SFNO2', 'SFNO', 'SFnum_a1', 'SFnum_a2',
+ 'SFnum_a3', 'SFpom_a4', 'SFSO2', 'SFso4_a1', 'SFso4_a2', 'SFSVOC', 'SFTOLUENE', 'SFXYLENES', 'SHFLX', 'SO2',
+ 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SO2_XFRC', 'SO3', 'so4_a1', 'so4_a1_CHMP', 'so4_a1_CLXF', 'so4_a1DDF', 'so4_a1_sfgaex1', 'so4_a1SFWET',
+ 'so4_a2', 'so4_a2_CHMP', 'so4_a2_CLXF', 'so4_a2DDF', 'so4_a2_sfgaex1', 'so4_a2_sfnnuc1', 'so4_a2SFWET', 'so4_a3',
+ 'so4_a3DDF', 'so4_a3_sfgaex1', 'so4_a3SFWET', 'so4_c1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_c1SFWET', 'so4_c2', 'so4_c2AQH2SO4',
+ 'so4_c2AQSO4', 'so4_c2DDF', 'so4_c2SFWET', 'so4_c3', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_c3SFWET', 'SO', 'soa1_a1',
+ 'soa1_a1_CHML', 'soa1_a1DDF', 'soa1_a1_sfgaex1', 'soa1_a1SFWET', 'soa1_a2', 'soa1_a2_CHML', 'soa1_a2DDF',
+ 'soa1_a2_sfgaex1', 'soa1_a2SFWET', 'soa1_c1', 'soa1_c1DDF', 'soa1_c1SFWET', 'soa1_c2', 'soa1_c2DDF', 'soa1_c2SFWET', 'soa2_a1', 'soa2_a1_CHML',
+ 'soa2_a1DDF', 'soa2_a1_sfgaex1', 'soa2_a1SFWET', 'soa2_a2', 'soa2_a2_CHML', 'soa2_a2DDF', 'soa2_a2_sfgaex1',
+ 'soa2_a2SFWET', 'soa2_c1', 'soa2_c1DDF', 'soa2_c1SFWET', 'soa2_c2', 'soa2_c2DDF', 'soa2_c2SFWET', 'soa3_a1', 'soa3_a1_CHML',
+ 'soa3_a1DDF', 'soa3_a1_sfgaex1', 'soa3_a1SFWET', 'soa3_a2', 'soa3_a2_CHML', 'soa3_a2DDF', 'soa3_a2_sfgaex1', 'soa3_a2SFWET',
+ 'soa3_c1', 'soa3_c1DDF', 'soa3_c1SFWET', 'soa3_c2', 'soa3_c2DDF', 'soa3_c2SFWET', 'soa4_a1', 'soa4_a1_CHML', 'soa4_a1DDF',
+ 'soa4_a1_sfgaex1', 'soa4_a1SFWET', 'soa4_a2', 'soa4_a2_CHML', 'soa4_a2DDF', 'soa4_a2_sfgaex1', 'soa4_a2SFWET', 'soa4_c1',
+ 'soa4_c1DDF', 'soa4_c1SFWET', 'soa4_c2', 'soa4_c2DDF', 'soa4_c2SFWET', 'soa5_a1', 'soa5_a1_CHML', 'soa5_a1DDF', 'soa5_a1_sfgaex1',
+ 'soa5_a1SFWET', 'soa5_a2', 'soa5_a2_CHML', 'soa5_a2DDF', 'soa5_a2_sfgaex1', 'soa5_a2SFWET', 'soa5_c1', 'soa5_c1DDF',
+ 'soa5_c1SFWET', 'soa5_c2', 'soa5_c2DDF', 'soa5_c2SFWET', 'SOAG0', 'SOAG0_CHMP', 'SOAG1', 'SOAG1_CHMP', 'SOAG2', 'SOAG2_CHMP',
+ 'SOAG3', 'SOAG3_CHMP', 'SOAG4', 'SOAG4_CHMP', 'SOLIN', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST', 'ST80_25', 'SVOC', 'SVOC_CHML',
+ 'T', 'TAQ', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY', 'TBRY', 'TCLY', 'TEPOMUC', 'TERP2O2', 'TERP2OOH',
+ 'TERPNIT', 'TERPO2', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TGCLDIWP', 'TGCLDLWP', 'THzm', 'TMDMS', 'TMOCS', 'TMQ', 'TMSO2',
+ 'TMso4_a1', 'TMso4_a2', 'TMso4_a3', 'TOLO2', 'TOLOOH', 'TOLUENE', 'TOT_CLD_VISTAU', 'TOTH', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TROP_P',
+ 'TROP_T', 'TROP_Z', 'TS', 'TSMN:M', 'TSMX:X', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO', 'TTGWSPEC',
+ 'U10', 'U', 'UTGWORO', 'UTGWSPEC', 'UU', 'UVzm', 'UWzm', 'Uzm', 'V', 'VD01', 'VEL_NAT2', 'VTHzm', 'VV', 'Vzm', 'WD_ALKNIT', 'WD_ALKOOH', 'WD_BENZOOH', 'WD_BRONO2',
+ 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO', 'WD_CH3CN', 'WD_CH3COCH3', 'WD_CH3COCHO',
+ 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3OH', 'WD_CH3OOH', 'WD_CLONO2', 'WD_COF2', 'WD_COFCL', 'WD_EOOH', 'WD_GLYALD', 'WD_H2O2', 'WD_H2SO4',
+ 'WD_HBR', 'WD_HCL', 'WD_HCN', 'WD_HCOOH', 'WD_HF', 'WD_HNO3', 'WD_HO2NO2', 'WD_HOBR', 'WD_HOCL', 'WD_HONITR', 'WD_HPALD', 'WD_HYAC',
+ 'WD_HYDRALD', 'WD_IEPOX', 'WD_ISOPNITA', 'WD_ISOPNITB', 'WD_ISOPNO3', 'WD_ISOPNOOH', 'WD_ISOPOOH', 'WD_IVOC', 'WD_MACR', 'WD_MACROOH',
+ 'WD_MEKOOH', 'WD_MVK', 'WD_NC4CH2OH', 'WD_NC4CHO', 'WD_NDEP', 'WD_NH3', 'WD_NH4', 'WD_NHDEP', 'WD_NOA', 'WD_NTERPOOH',
+ 'WD_ONITR', 'WD_PHENOOH', 'WD_POOH', 'WD_ROOH', 'WD_SO2', 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC',
+ 'WD_TERP2OOH', 'WD_TERPNIT', 'WD_TERPOOH', 'WD_TERPROD1', 'WD_TERPROD2', 'WD_TOLOOH', 'WD_XOOH', 'WD_XYLENOOH', 'WD_XYLOLOOH',
+ 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'Wzm', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
+ 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU'
+
+
+
+ 'ACTNL', 'ACTREL', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BUTGWSPEC',
+ 'CDNUMC', 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLOUD', 'CMFMC', 'CMFMCDZM', 'FCTL', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC',
+ 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FSDS', 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNTOA', 'FSNTOAC', 'LHFLX', 'MASS', 'O3', 'OMEGA',
+ 'OMEGA500', 'PBLH', 'PDELDRY', 'PM25_SRF', 'PRECC', 'PRECT', 'PS', 'PSL', 'Q', 'QREFHT', 'QSNOW', 'RELHUM', 'RHREFHT', 'SHFLX',
+ 'SOLIN', 'SOLLD', 'SOLSD', 'T', 'T500', 'T700', 'T850', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY',
+ 'TGCLDIWP', 'TGCLDLWP', 'TMQ', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TS', 'TSMN:M', 'TSMX:X', 'U', 'U10', 'UTGWORO', 'UTGWSPEC',
+ 'V', 'Z3', 'Z500'
+
+
+ 'O3_SRF','TS','PM25_SRF','NO2_SRF'
+
+
+ 'MSKtem','PS','PSL','VTHzm','UVzm','UWzm','Uzm','Vzm','THzm','Wzm','PHIS'
+
+
+ 'PS', 'PSL', 'U', 'V', 'T', 'Z3', 'PHIS', 'FRONTGF:I', 'OMEGA', 'O3', 'REFF_AERO', 'SAD_AERO',
+ 'so4_a1', 'so4_a2', 'so4_a3', 'AODVISstdn', 'NITROP_PD', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'QRS_TOT', 'CO2', 'H', 'NO', 'O'
+
+
+
+ 'O3_Prod = NO_HO2 + CH3O2_NO + PO2_NO + CH3CO3_NO + C2H5O2_NO + .92*ISOPAO2_NO + .92*ISOPBO2_NO + MACRO2_NOa + MCO3_NO + C3H7O2_NO + RO2_NO + XO2_NO + .9*TOLO2_NO +',
+ '.9*PHENO2_NO + .9*C6H5O2_NO + .9*BENZO2_NO + .9*MALO2_NO + .9*BZOO_NO + .9*ACBZO2_NO + .9*DICARBO2_NO + .9*MDIALO2_NO + .9*XYLOLO2_NO + .9*XYLENO2_NO + TERPO2_NO +',
+ 'TERP2O2_NO + NTERPO2_NO + ALKO2_NO + ENEO2_NO + EO2_NO + MEKO2_NO + HOCH2OO_NO + jonitr',
+ 'O3_Loss = O1D_H2O + OH_O3 + HO2_O3 + H_O3 + C3H6_O3 + .9*ISOP_O3 + C2H4_O3 + .8*MVK_O3 + 0.8*MACR_O3 + MTERP_O3 + BCARY_O3',
+ 'RO2_NO_sum = NO_HO2 + CH3O2_NO + HOCH2OO_NO + EO2_NO + C2H5O2_NO + CH3CO3_NO + C3H7O2_NO + PO2_NO + RO2_NO + ENEO2_NO + ENEO2_NOb + MEKO2_NO + MACRO2_NOa + MACRO2_NOb +',
+ 'MCO3_NO + ISOPAO2_NO + ISOPBO2_NO + ALKO2_NO + ALKO2_NOb + XO2_NO + TOLO2_NO + PHENO2_NO + C6H5O2_NO + BENZO2_NO + MALO2_NO + BZOO_NO + ACBZO2_NO + DICARBO2_NO +',
+ 'MDIALO2_NO + XYLOLO2_NO + XYLENO2_NO + TERPO2_NO + TERP2O2_NO + NTERPO2_NO',
+ 'RO2_NO3_sum = NO3_HO2 + MACRO2_NO3 + MCO3_NO3 + ISOPAO2_NO3 + ISOPBO2_NO3 + XO2_NO3',
+ 'RO2_HO2_sum = CH3O2_HO2 + HOCH2OO_HO2 + EO2_HO2 + C2H5O2_HO2 + CH3CO3_HO2 + C3H7O2_HO2 + PO2_HO2 + RO2_HO2 + MEKO2_HO2 + MACRO2_HO2 + ISOPAO2_HO2 + ISOPBO2_HO2 + ALKO2_HO2 +',
+ 'XO2_HO2 + TOLO2_HO2 + PHENO2_HO2 + C6H5O2_HO2 + BENZO2_HO2 + MALO2_HO2 + BZOO_HO2 + ACBZO2_HO2 + DICARBO2_HO2 + MDIALO2_HO2 + XYLOLO2_HO2 + XYLENO2_HO2 + TERPO2_HO2 +',
+ 'TERP2O2_HO2 + NTERPO2_HO2',
+ 'RO2_RO2_sum = CH3O2_CH3O2a + CH3O2_CH3O2b + C2H5O2_CH3O2 + C2H5O2_C2H5O2 + CH3CO3_CH3O2 + CH3CO3_CH3CO3 + C3H7O2_CH3O2 + RO2_CH3O2 + MACRO2_CH3O2 + MACRO2_CH3CO3 + MCO3_CH3O2 +',
+ ' MCO3_CH3CO3 + MCO3_MCO3 + ISOPAO2_CH3O2 + ISOPBO2_CH3O2 + ISOPAO2_CH3CO3 + ISOPBO2_CH3CO3 + XO2_CH3O2 + XO2_CH3CO3',
+ 'RCO2_NO2_sum = CH3CO3_NO2 + MCO3_NO2',
+ 'OddOx_Ox_Loss = 2.0*O_O3 + O1D_H2O',
+ 'OddOx_HOx_Loss = HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3',
+ 'OddOx_NOx_Loss = 2.0*NO2_O + 2.0*jno3_b',
+ 'OddOx_CLOxBROx_Loss = 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb + 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Loss_Tot = 2.0*O_O3 + O1D_H2O + HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3 + 2.0*NO2_O + 2.0*jno3_b + 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb +',
+ ' 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Prod_Tot = 2.0*jo2_a + 2.0*jo2_b'
+
+
+
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_ssp245_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_ssp245_cam6.xml
new file mode 100644
index 0000000000..5ad0cc0ca3
--- /dev/null
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_ssp245_cam6.xml
@@ -0,0 +1,292 @@
+
+
+
+
+19900101
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+'epp_ion_rates'
+
+
+atm/waccm/ic/b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001.cam.i.2015-01-01-00000.nc
+
+
+SERIAL
+atm/waccm/lb/LBC_20140116-25001216_CMIP6_SSP245_0p5degLat_c180905.nc
+
+ 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
+ 'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'SF6', 'CFC11eq'
+
+
+
+atm/waccm/ub/tgcm_ubc_1850-2100_c100204.nc
+'INTERP_MISSING_MONTHS'
+
+
+.true.
+.true.
+.true.
+.false.
+
+
+
+
+INTERP_MISSING_MONTHS
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_NO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/stratvolc/VolcanEESMv3.10_piControl_SO2_1850-2014average_ext_1deg_ZeroTrop_c181020.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+INTERP_MISSING_MONTHS
+
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_BENZENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_BENZENE_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_BIGALK_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_BIGALK_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_BIGENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_BIGENE_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C2H2_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C2H2_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C2H4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_C2H4_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C2H5OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C2H5OH_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C2H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C2H6_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_C2H6_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C3H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C3H6_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_C3H6_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C3H8_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_C3H8_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_C3H8_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH2O_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH2O_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3CHO_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3CHO_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3CN_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3CN_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3COCH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3COCH3_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COCHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3COCHO_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3COOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3COOH_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CH3OH_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CO_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_CO_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_CO_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'E90 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions_E90global_surface_175001-210101_0.9x1.25_c20190224.nc',
+ 'GLYALD -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_GLYALD_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_HCN_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_HCN_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_HCOOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_HCOOH_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'ISOP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_ISOP_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_IVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_IVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_MEK_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_MEK_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'MTERP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_MTERP_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_NH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_NH3_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_NH3_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_NO_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_NO_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_NO_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_TOLUENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_TOLUENE_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_XYLENES_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_XYLENES_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp245/emissions-cmip6-ScenarioMIP_IAMC-MESSAGE-GLOBIOM-ssp245-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc'
+
+
+'noy', 'nhx'
+
+
+
+ 1, 5, 20, 40, 120, 240, 365, 73, 365
+ 0, -24, -6, -3, -1, 1, -24,-120,-240
+'A', 'A', 'A', 'A', 'I', 'A', 'A', 'A', 'I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.true.
+.true.
+.true.
+
+ 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+
+
+ 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn', 'AODBCdn', 'AODdnDUST1', 'AODdnDUST2',
+ 'AODdnDUST3', 'AODdnMODE1', 'AODdnMODE2', 'AODdnMODE3', 'AODDUST2', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn',
+ 'AODUVdn', 'AODUVstdn', 'AODVIS', 'AODVISdn', 'AODVISstdn', 'AQ_SO2', 'AREA', 'AREI', 'AREL', 'bc_a1', 'bc_a1DDF',
+ 'bc_a1SFWET', 'bc_a4', 'bc_a4_CLXF', 'bc_a4DDF', 'bc_a4SFWET', 'BCARY', 'bc_c1', 'bc_c1DDF', 'bc_c1SFWET', 'bc_c4', 'bc_c4DDF',
+ 'bc_c4SFWET', 'BENZENE', 'BENZO2', 'BENZOOH', 'BEPOMUC', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALD', 'BIGALK', 'BIGENE',
+ 'BR', 'BRCL', 'BRO', 'BRONO2', 'BROX', 'BROY', 'BRY', 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn',
+ 'BURDENSOAdn', 'BUTGWSPEC', 'BZALD', 'BZOO', 'BZOOH', 'C2H2', 'C2H4', 'C2H5O2', 'C2H5OH', 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7O2',
+ 'C3H7OOH', 'C3H8', 'C6H5O2', 'C6H5OOH', 'CCL4', 'CDNUMC', 'CF2CLBR', 'CF3BR', 'CFC113', 'CFC114', 'CFC115', 'CFC11', 'CFC11STAR',
+ 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CCL3_CHML', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3CO3', 'CH3COCH3', 'CH3COCHO',
+ 'CH3COOH', 'CH3COOOH', 'CH3O2', 'CH3OH', 'CH3OOH', 'CH4', 'CH4_CHML', 'CHBR3', 'CL2', 'CL2O2', 'CL',
+ 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD', 'CLOX', 'CLOY', 'CLY', 'CME', 'CMFDQ', 'CMFMC',
+ 'CMFMCDZM', 'CO2', 'CO2_CHML', 'CO', 'CO_CHML', 'CO_CHMP', 'COF2', 'COFCL', 'CONCLD', 'CRESOL',
+ 'DCOCHM', 'DF_ALKNIT', 'DF_ALKOOH', 'DF_BENZOOH', 'DF_BZOOH', 'DF_C2H5OH', 'DF_C2H5OOH', 'DF_C3H7OOH', 'DF_C6H5OOH', 'DF_CH2O',
+ 'DF_CH3CHO', 'DF_CH3CN', 'DF_CH3COCH3', 'DF_CH3COCHO', 'DF_CH3COOH', 'DF_CH3COOOH', 'DF_CH3OH', 'DF_CH3OOH', 'DF_CO', 'DF_EOOH',
+ 'DF_GLYALD', 'DF_H2O2', 'DF_H2SO4', 'DF_HCN', 'DF_HCOOH', 'DF_HNO3', 'DF_HO2NO2', 'DF_HONITR', 'DF_HPALD', 'DF_HYAC', 'DF_HYDRALD',
+ 'DF_IEPOX', 'DF_ISOPNITA', 'DF_ISOPNITB', 'DF_ISOPNO3', 'DF_ISOPNOOH', 'DF_ISOPOOH', 'DF_IVOC', 'DF_MACROOH', 'DF_MEKOOH',
+ 'DF_MPAN', 'DF_NC4CH2OH', 'DF_NC4CHO', 'DF_NH3', 'DF_NH4', 'DF_NO2', 'DF_NO', 'DF_NOA', 'DF_NTERPOOH', 'DF_O3',
+ 'DF_ONITR', 'DF_PAN', 'DF_PHENOOH', 'DF_POOH', 'DF_ROOH', 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3',
+ 'DF_SOAG4', 'DF_SVOC', 'DF_TERP2OOH', 'DF_TERPNIT', 'DF_TERPOOH', 'DF_TERPROD1', 'DF_TERPROD2', 'DF_TOLOOH', 'DF_XOOH', 'DF_XYLENOOH',
+ 'DF_XYLOLOOH', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'DH2O2CHM', 'DHNO3CHM', 'DICARBO2', 'DMS', 'DO3CHM', 'dry_deposition_NHx_as_N',
+ 'dry_deposition_NOy_as_N', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM', 'dst_a1', 'dst_a1DDF', 'dst_a1SFWET', 'dst_a2', 'dst_a2DDF',
+ 'dst_a2SFWET', 'dst_a3', 'dst_a3DDF', 'dst_a3SFWET', 'dst_c1', 'dst_c1DDF', 'dst_c1SFWET', 'dst_c2', 'dst_c2DDF', 'dst_c2SFWET',
+ 'dst_c3', 'dst_c3DDF', 'dst_c3SFWET', 'DTCORE', 'E90', 'e', 'ENEO2', 'EO2', 'EO', 'EOOH', 'EVAPPREC',
+ 'EVAPQZM', 'EVAPTZM', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'F', 'FCTL',
+ 'FLASHFRQ', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FREQI', 'FREQL', 'FREQZM', 'FSDS',
+ 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'FSNTOAC', 'FSUTOA', 'GLYALD', 'GLYOXAL',
+ 'GS_SO2', 'H2402', 'H2', 'H2O2', 'H2O', 'H2SO4', 'H2SO4M_C', 'H2SO4_sfnnuc1', 'H', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22', 'HCL',
+ 'HCL_GAS', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS', 'HO2', 'HO2NO2', 'HOBR', 'HOCH2OO', 'HOCL', 'HONITR',
+ 'HPALD', 'HYAC', 'HYDRALD', 'ICEFRAC', 'IEPOX', 'ISOP', 'ISOPAO2', 'ISOPBO2', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3',
+ 'ISOPNOOH', 'ISOPOOH', 'IVOC', 'IVOC_CHML', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan', 'KVH_CLUBB',
+ 'LANDFRAC', 'LHFLX', 'LNO_COL_PROD', 'LNO_PROD', 'MACR', 'MACRO2', 'MACROOH', 'MALO2', 'MASS', 'MCO3', 'MDIALO2',
+ 'MEG_BCARY', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_C2H4', 'MEG_C2H5OH', 'MEG_C2H6', 'MEG_C3H6', 'MEG_C3H8', 'MEG_CH2O',
+ 'MEG_CH3CHO', 'MEG_CH3COCH3', 'MEG_CH3COOH', 'MEG_CH3OH', 'MEG_CO', 'MEG_HCN', 'MEG_HCOOH', 'MEG_ISOP', 'MEG_MTERP', 'MEG_TOLUENE',
+ 'MEK', 'MEKO2', 'MEKOOH', 'MPAN', 'MTERP', 'MVK', 'N2D', 'N2O5', 'N2O', 'N2O_CHML', 'N2p', 'N', 'NC4CH2OH',
+ 'NC4CHO', 'ncl_a1', 'ncl_a1DDF', 'ncl_a1SFWET', 'ncl_a2', 'ncl_a2DDF', 'ncl_a2SFWET', 'ncl_a3', 'ncl_a3DDF', 'ncl_a3SFWET', 'ncl_c1',
+ 'ncl_c1DDF', 'ncl_c1SFWET', 'ncl_c2', 'ncl_c2DDF', 'ncl_c2SFWET', 'ncl_c3', 'ncl_c3DDF', 'ncl_c3SFWET', 'NDEP', 'NH3', 'NH4', 'NH_50',
+ 'NH_5', 'NHDEP', 'NITROP_PD', 'NO2', 'NO2_CLXF', 'NO3', 'NO', 'NOA', 'NOp', 'NOX', 'NOY', 'Np', 'NTERPO2', 'NTERPOOH',
+ 'num_a1', 'num_a1_CLXF', 'num_a1DDF', 'num_a2', 'num_a2_CLXF', 'num_a2DDF', 'num_a2_sfnnuc1', 'num_a3', 'num_a3DDF', 'num_a4',
+ 'num_a4DDF', 'num_c1', 'num_c1DDF', 'num_c2', 'num_c2DDF', 'num_c3', 'num_c3DDF', 'num_c4', 'num_c4DDF', 'NUMLIQ', 'O1D', 'O2_1D',
+ 'O2_1S', 'O2', 'O2p', 'O3', 'O3_CHML', 'O3_CHMP', 'O3_Loss', 'O3_Prod', 'O', 'OCLO', 'OCS', 'OddOx_CLOxBROx_Loss',
+ 'OddOx_HOx_Loss', 'OddOx_Loss_Tot', 'OddOx_NOx_Loss', 'OddOx_Ox_Loss', 'OddOx_Prod_Tot', 'OH', 'OMEGA', 'OMEGAT', 'ONITR', 'Op',
+ 'PAN', 'PBLH', 'PBZNIT', 'PDELDRY', 'PHENO2', 'PHENO', 'PHENOL', 'PHENOOH', 'PHIS', 'PM25', 'PO2', 'pom_a1', 'pom_a1DDF', 'pom_a1SFWET',
+ 'pom_a4', 'pom_a4DDF', 'pom_a4SFWET', 'pom_c1', 'pom_c1DDF', 'pom_c1SFWET', 'pom_c4', 'pom_c4DDF', 'pom_c4SFWET',
+ 'POOH', 'PRECC', 'PRECT', 'PS', 'PSL', 'PTEQ', 'PTTEND', 'Q', 'QFLX', 'QRAIN', 'QREFHT', 'QRL', 'QRLC', 'QRS',
+ 'QRSC', 'QSNOW', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RELHUM', 'r_GLYOXAL_aer',
+ 'r_het10', 'r_het11', 'r_het12', 'r_het13', 'r_het15', 'r_het16', 'r_het17', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5',
+ 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_HO2_O3', 'RHREFHT', 'r_jsoa1_a1', 'r_jsoa1_a2', 'r_jsoa2_a1', 'r_jsoa2_a2',
+ 'r_jsoa3_a1', 'r_jsoa3_a2', 'r_jsoa4_a1', 'r_jsoa4_a2', 'r_jsoa5_a1', 'r_jsoa5_a2', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O',
+ 'r_OH_O3', 'r_OH_O', 'ROOH', 'RO2', 'RO2_NO_sum', 'RO2_NO3_sum', 'RO2_HO2_sum', 'RO2_RO2_sum', 'RCO2_NO2_sum',
+ 'S', 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP', 'SF6', 'SFbc_a4', 'SFBCARY',
+ 'SFBENZENE', 'SFBIGALK', 'SFBIGENE', 'SFC2H2', 'SFC2H4', 'SFC2H5OH', 'SFC2H6', 'SFC3H6', 'SFC3H8', 'SFCH2O', 'SFCH3CHO', 'SFCH3CN',
+ 'SFCH3COCH3', 'SFCH3COCHO', 'SFCH3COOH', 'SFCH3OH', 'SFCO', 'SFDMS', 'SFdst_a1', 'SFdst_a2', 'SFdst_a3', 'SFGLYALD', 'SFHCN', 'SFHCOOH',
+ 'SFISOP', 'SFIVOC', 'SFMEK', 'SFMTERP', 'SFncl_a1', 'SFncl_a2', 'SFncl_a3', 'SFNH3', 'SFNO2', 'SFNO', 'SFnum_a1', 'SFnum_a2',
+ 'SFnum_a3', 'SFpom_a4', 'SFSO2', 'SFso4_a1', 'SFso4_a2', 'SFSVOC', 'SFTOLUENE', 'SFXYLENES', 'SHFLX', 'SO2',
+ 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SO2_XFRC', 'SO3', 'so4_a1', 'so4_a1_CHMP', 'so4_a1_CLXF', 'so4_a1DDF', 'so4_a1_sfgaex1', 'so4_a1SFWET',
+ 'so4_a2', 'so4_a2_CHMP', 'so4_a2_CLXF', 'so4_a2DDF', 'so4_a2_sfgaex1', 'so4_a2_sfnnuc1', 'so4_a2SFWET', 'so4_a3',
+ 'so4_a3DDF', 'so4_a3_sfgaex1', 'so4_a3SFWET', 'so4_c1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_c1SFWET', 'so4_c2', 'so4_c2AQH2SO4',
+ 'so4_c2AQSO4', 'so4_c2DDF', 'so4_c2SFWET', 'so4_c3', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_c3SFWET', 'SO', 'soa1_a1',
+ 'soa1_a1_CHML', 'soa1_a1DDF', 'soa1_a1_sfgaex1', 'soa1_a1SFWET', 'soa1_a2', 'soa1_a2_CHML', 'soa1_a2DDF',
+ 'soa1_a2_sfgaex1', 'soa1_a2SFWET', 'soa1_c1', 'soa1_c1DDF', 'soa1_c1SFWET', 'soa1_c2', 'soa1_c2DDF', 'soa1_c2SFWET', 'soa2_a1', 'soa2_a1_CHML',
+ 'soa2_a1DDF', 'soa2_a1_sfgaex1', 'soa2_a1SFWET', 'soa2_a2', 'soa2_a2_CHML', 'soa2_a2DDF', 'soa2_a2_sfgaex1',
+ 'soa2_a2SFWET', 'soa2_c1', 'soa2_c1DDF', 'soa2_c1SFWET', 'soa2_c2', 'soa2_c2DDF', 'soa2_c2SFWET', 'soa3_a1', 'soa3_a1_CHML',
+ 'soa3_a1DDF', 'soa3_a1_sfgaex1', 'soa3_a1SFWET', 'soa3_a2', 'soa3_a2_CHML', 'soa3_a2DDF', 'soa3_a2_sfgaex1', 'soa3_a2SFWET',
+ 'soa3_c1', 'soa3_c1DDF', 'soa3_c1SFWET', 'soa3_c2', 'soa3_c2DDF', 'soa3_c2SFWET', 'soa4_a1', 'soa4_a1_CHML', 'soa4_a1DDF',
+ 'soa4_a1_sfgaex1', 'soa4_a1SFWET', 'soa4_a2', 'soa4_a2_CHML', 'soa4_a2DDF', 'soa4_a2_sfgaex1', 'soa4_a2SFWET', 'soa4_c1',
+ 'soa4_c1DDF', 'soa4_c1SFWET', 'soa4_c2', 'soa4_c2DDF', 'soa4_c2SFWET', 'soa5_a1', 'soa5_a1_CHML', 'soa5_a1DDF', 'soa5_a1_sfgaex1',
+ 'soa5_a1SFWET', 'soa5_a2', 'soa5_a2_CHML', 'soa5_a2DDF', 'soa5_a2_sfgaex1', 'soa5_a2SFWET', 'soa5_c1', 'soa5_c1DDF',
+ 'soa5_c1SFWET', 'soa5_c2', 'soa5_c2DDF', 'soa5_c2SFWET', 'SOAG0', 'SOAG0_CHMP', 'SOAG1', 'SOAG1_CHMP', 'SOAG2', 'SOAG2_CHMP',
+ 'SOAG3', 'SOAG3_CHMP', 'SOAG4', 'SOAG4_CHMP', 'SOLIN', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST', 'ST80_25', 'SVOC', 'SVOC_CHML',
+ 'T', 'TAQ', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY', 'TBRY', 'TCLY', 'TEPOMUC', 'TERP2O2', 'TERP2OOH',
+ 'TERPNIT', 'TERPO2', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TGCLDIWP', 'TGCLDLWP', 'THzm', 'TMDMS', 'TMOCS', 'TMQ', 'TMSO2',
+ 'TMso4_a1', 'TMso4_a2', 'TMso4_a3', 'TOLO2', 'TOLOOH', 'TOLUENE', 'TOT_CLD_VISTAU', 'TOTH', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TROP_P',
+ 'TROP_T', 'TROP_Z', 'TS', 'TSMN:M', 'TSMX:X', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO', 'TTGWSPEC',
+ 'U10', 'U', 'UTGWORO', 'UTGWSPEC', 'UU', 'UVzm', 'UWzm', 'Uzm', 'V', 'VD01', 'VEL_NAT2', 'VTHzm', 'VV', 'Vzm', 'WD_ALKNIT', 'WD_ALKOOH', 'WD_BENZOOH', 'WD_BRONO2',
+ 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO', 'WD_CH3CN', 'WD_CH3COCH3', 'WD_CH3COCHO',
+ 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3OH', 'WD_CH3OOH', 'WD_CLONO2', 'WD_COF2', 'WD_COFCL', 'WD_EOOH', 'WD_GLYALD', 'WD_H2O2', 'WD_H2SO4',
+ 'WD_HBR', 'WD_HCL', 'WD_HCN', 'WD_HCOOH', 'WD_HF', 'WD_HNO3', 'WD_HO2NO2', 'WD_HOBR', 'WD_HOCL', 'WD_HONITR', 'WD_HPALD', 'WD_HYAC',
+ 'WD_HYDRALD', 'WD_IEPOX', 'WD_ISOPNITA', 'WD_ISOPNITB', 'WD_ISOPNO3', 'WD_ISOPNOOH', 'WD_ISOPOOH', 'WD_IVOC', 'WD_MACR', 'WD_MACROOH',
+ 'WD_MEKOOH', 'WD_MVK', 'WD_NC4CH2OH', 'WD_NC4CHO', 'WD_NDEP', 'WD_NH3', 'WD_NH4', 'WD_NHDEP', 'WD_NOA', 'WD_NTERPOOH',
+ 'WD_ONITR', 'WD_PHENOOH', 'WD_POOH', 'WD_ROOH', 'WD_SO2', 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC',
+ 'WD_TERP2OOH', 'WD_TERPNIT', 'WD_TERPOOH', 'WD_TERPROD1', 'WD_TERPROD2', 'WD_TOLOOH', 'WD_XOOH', 'WD_XYLENOOH', 'WD_XYLOLOOH',
+ 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'Wzm', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
+ 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU'
+
+
+
+ 'ACTNL', 'ACTREL', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BUTGWSPEC',
+ 'CDNUMC', 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLOUD', 'CMFMC', 'CMFMCDZM', 'FCTL', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC',
+ 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FSDS', 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNTOA', 'FSNTOAC', 'LHFLX', 'MASS', 'O3', 'OMEGA',
+ 'OMEGA500', 'PBLH', 'PDELDRY', 'PM25_SRF', 'PRECC', 'PRECT', 'PS', 'PSL', 'Q', 'QREFHT', 'QSNOW', 'RELHUM', 'RHREFHT', 'SHFLX',
+ 'SOLIN', 'SOLLD', 'SOLSD', 'T', 'T500', 'T700', 'T850', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY',
+ 'TGCLDIWP', 'TGCLDLWP', 'TMQ', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TS', 'TSMN:M', 'TSMX:X', 'U', 'U10', 'UTGWORO', 'UTGWSPEC',
+ 'V', 'Z3', 'Z500'
+
+
+ 'O3_SRF','TS','PM25_SRF','NO2_SRF'
+
+
+ 'MSKtem','PS','PSL','VTHzm','UVzm','UWzm','Uzm','Vzm','THzm','Wzm','PHIS'
+
+
+ 'PS', 'PSL', 'U', 'V', 'T', 'Z3', 'PHIS', 'FRONTGF:I', 'OMEGA', 'O3', 'REFF_AERO', 'SAD_AERO',
+ 'so4_a1', 'so4_a2', 'so4_a3', 'AODVISstdn', 'NITROP_PD', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'QRS_TOT', 'CO2', 'H', 'NO', 'O'
+
+
+
+ 'O3_Prod = NO_HO2 + CH3O2_NO + PO2_NO + CH3CO3_NO + C2H5O2_NO + .92*ISOPAO2_NO + .92*ISOPBO2_NO + MACRO2_NOa + MCO3_NO + C3H7O2_NO + RO2_NO + XO2_NO + .9*TOLO2_NO +',
+ '.9*PHENO2_NO + .9*C6H5O2_NO + .9*BENZO2_NO + .9*MALO2_NO + .9*BZOO_NO + .9*ACBZO2_NO + .9*DICARBO2_NO + .9*MDIALO2_NO + .9*XYLOLO2_NO + .9*XYLENO2_NO + TERPO2_NO +',
+ 'TERP2O2_NO + NTERPO2_NO + ALKO2_NO + ENEO2_NO + EO2_NO + MEKO2_NO + HOCH2OO_NO + jonitr',
+ 'O3_Loss = O1D_H2O + OH_O3 + HO2_O3 + H_O3 + C3H6_O3 + .9*ISOP_O3 + C2H4_O3 + .8*MVK_O3 + 0.8*MACR_O3 + MTERP_O3 + BCARY_O3',
+ 'RO2_NO_sum = NO_HO2 + CH3O2_NO + HOCH2OO_NO + EO2_NO + C2H5O2_NO + CH3CO3_NO + C3H7O2_NO + PO2_NO + RO2_NO + ENEO2_NO + ENEO2_NOb + MEKO2_NO + MACRO2_NOa + MACRO2_NOb +',
+ 'MCO3_NO + ISOPAO2_NO + ISOPBO2_NO + ALKO2_NO + ALKO2_NOb + XO2_NO + TOLO2_NO + PHENO2_NO + C6H5O2_NO + BENZO2_NO + MALO2_NO + BZOO_NO + ACBZO2_NO + DICARBO2_NO +',
+ 'MDIALO2_NO + XYLOLO2_NO + XYLENO2_NO + TERPO2_NO + TERP2O2_NO + NTERPO2_NO',
+ 'RO2_NO3_sum = NO3_HO2 + MACRO2_NO3 + MCO3_NO3 + ISOPAO2_NO3 + ISOPBO2_NO3 + XO2_NO3',
+ 'RO2_HO2_sum = CH3O2_HO2 + HOCH2OO_HO2 + EO2_HO2 + C2H5O2_HO2 + CH3CO3_HO2 + C3H7O2_HO2 + PO2_HO2 + RO2_HO2 + MEKO2_HO2 + MACRO2_HO2 + ISOPAO2_HO2 + ISOPBO2_HO2 + ALKO2_HO2 +',
+ 'XO2_HO2 + TOLO2_HO2 + PHENO2_HO2 + C6H5O2_HO2 + BENZO2_HO2 + MALO2_HO2 + BZOO_HO2 + ACBZO2_HO2 + DICARBO2_HO2 + MDIALO2_HO2 + XYLOLO2_HO2 + XYLENO2_HO2 + TERPO2_HO2 +',
+ 'TERP2O2_HO2 + NTERPO2_HO2',
+ 'RO2_RO2_sum = CH3O2_CH3O2a + CH3O2_CH3O2b + C2H5O2_CH3O2 + C2H5O2_C2H5O2 + CH3CO3_CH3O2 + CH3CO3_CH3CO3 + C3H7O2_CH3O2 + RO2_CH3O2 + MACRO2_CH3O2 + MACRO2_CH3CO3 + MCO3_CH3O2 +',
+ ' MCO3_CH3CO3 + MCO3_MCO3 + ISOPAO2_CH3O2 + ISOPBO2_CH3O2 + ISOPAO2_CH3CO3 + ISOPBO2_CH3CO3 + XO2_CH3O2 + XO2_CH3CO3',
+ 'RCO2_NO2_sum = CH3CO3_NO2 + MCO3_NO2',
+ 'OddOx_Ox_Loss = 2.0*O_O3 + O1D_H2O',
+ 'OddOx_HOx_Loss = HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3',
+ 'OddOx_NOx_Loss = 2.0*NO2_O + 2.0*jno3_b',
+ 'OddOx_CLOxBROx_Loss = 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb + 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Loss_Tot = 2.0*O_O3 + O1D_H2O + HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3 + 2.0*NO2_O + 2.0*jno3_b + 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb +',
+ ' 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Prod_Tot = 2.0*jo2_a + 2.0*jo2_b'
+
+
+
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_ssp370_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_ssp370_cam6.xml
new file mode 100644
index 0000000000..150a7e2c15
--- /dev/null
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_ssp370_cam6.xml
@@ -0,0 +1,294 @@
+
+
+
+
+19900101
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+'epp_ion_rates'
+
+
+atm/waccm/ic/b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001.cam.i.2015-01-01-00000.nc
+
+
+SERIAL
+atm/waccm/lb/LBC_20140116-25001216_CMIP6_SSP370_0p5degLat_c180905.nc
+
+ 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
+ 'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'SF6', 'CFC11eq'
+
+
+
+atm/waccm/ub/tgcm_ubc_1850-2100_c100204.nc
+'INTERP_MISSING_MONTHS'
+
+
+.true.
+.true.
+.true.
+.false.
+
+
+
+
+INTERP_MISSING_MONTHS
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_NO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/stratvolc/VolcanEESMv3.10_piControl_SO2_1850-2014average_ext_1deg_ZeroTrop_c181020.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+INTERP_MISSING_MONTHS
+
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_BENZENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_BENZENE_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_BIGALK_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_BIGALK_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_BIGENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_BIGENE_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C2H2_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C2H2_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C2H4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_C2H4_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C2H5OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C2H5OH_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C2H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C2H6_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_C2H6_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C3H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C3H6_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_C3H6_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C3H8_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_C3H8_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_C3H8_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH2O_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH2O_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3CHO_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3CHO_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3CN_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3CN_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3COCH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3COCH3_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COCHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3COCHO_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3COOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3COOH_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CH3OH_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CO_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_CO_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_CO_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'E90 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions_E90global_surface_175001-210101_0.9x1.25_c20190224.nc',
+ 'GLYALD -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_GLYALD_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_HCN_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_HCN_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_HCOOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_HCOOH_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'ISOP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_ISOP_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_IVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_IVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_MEK_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_MEK_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'MTERP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_MTERP_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_NH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_NH3_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_NH3_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_NO_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_NO_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_NO_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_TOLUENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_TOLUENE_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_XYLENES_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_XYLENES_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190222.nc'
+
+
+'noy', 'nhx'
+
+
+
+ 1, 5, 20, 40, 120, 240, 365, 73, 365
+ 0, -24, -6, -3, -1, 1, -24,-120,-240
+'A', 'A', 'A', 'A', 'I', 'A', 'A', 'A', 'I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.true.
+.true.
+.true.
+
+ 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+
+
+ 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn', 'AODBCdn', 'AODdnDUST1', 'AODdnDUST2',
+ 'AODdnDUST3', 'AODdnMODE1', 'AODdnMODE2', 'AODdnMODE3', 'AODDUST2', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn',
+ 'AODUVdn', 'AODUVstdn', 'AODVIS', 'AODVISdn', 'AODVISstdn', 'AQ_SO2', 'AREA', 'AREI', 'AREL', 'bc_a1', 'bc_a1DDF',
+ 'bc_a1SFWET', 'bc_a4', 'bc_a4_CLXF', 'bc_a4DDF', 'bc_a4SFWET', 'BCARY', 'bc_c1', 'bc_c1DDF', 'bc_c1SFWET', 'bc_c4', 'bc_c4DDF',
+ 'bc_c4SFWET', 'BENZENE', 'BENZO2', 'BENZOOH', 'BEPOMUC', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALD', 'BIGALK', 'BIGENE',
+ 'BR', 'BRCL', 'BRO', 'BRONO2', 'BROX', 'BROY', 'BRY', 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn',
+ 'BURDENSOAdn', 'BUTGWSPEC', 'BZALD', 'BZOO', 'BZOOH', 'C2H2', 'C2H4', 'C2H5O2', 'C2H5OH', 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7O2',
+ 'C3H7OOH', 'C3H8', 'C6H5O2', 'C6H5OOH', 'CCL4', 'CDNUMC', 'CF2CLBR', 'CF3BR', 'CFC113', 'CFC114', 'CFC115', 'CFC11', 'CFC11STAR',
+ 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CCL3_CHML', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3CO3', 'CH3COCH3', 'CH3COCHO',
+ 'CH3COOH', 'CH3COOOH', 'CH3O2', 'CH3OH', 'CH3OOH', 'CH4', 'CH4_CHML', 'CHBR3', 'CL2', 'CL2O2', 'CL',
+ 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD', 'CLOX', 'CLOY', 'CLY', 'CME', 'CMFDQ', 'CMFMC',
+ 'CMFMCDZM', 'CO2', 'CO2_CHML', 'CO', 'CO_CHML', 'CO_CHMP', 'COF2', 'COFCL', 'CONCLD', 'CRESOL',
+ 'DCOCHM', 'DF_ALKNIT', 'DF_ALKOOH', 'DF_BENZOOH', 'DF_BZOOH', 'DF_C2H5OH', 'DF_C2H5OOH', 'DF_C3H7OOH', 'DF_C6H5OOH', 'DF_CH2O',
+ 'DF_CH3CHO', 'DF_CH3CN', 'DF_CH3COCH3', 'DF_CH3COCHO', 'DF_CH3COOH', 'DF_CH3COOOH', 'DF_CH3OH', 'DF_CH3OOH', 'DF_CO', 'DF_EOOH',
+ 'DF_GLYALD', 'DF_H2O2', 'DF_H2SO4', 'DF_HCN', 'DF_HCOOH', 'DF_HNO3', 'DF_HO2NO2', 'DF_HONITR', 'DF_HPALD', 'DF_HYAC', 'DF_HYDRALD',
+ 'DF_IEPOX', 'DF_ISOPNITA', 'DF_ISOPNITB', 'DF_ISOPNO3', 'DF_ISOPNOOH', 'DF_ISOPOOH', 'DF_IVOC', 'DF_MACROOH', 'DF_MEKOOH',
+ 'DF_MPAN', 'DF_NC4CH2OH', 'DF_NC4CHO', 'DF_NH3', 'DF_NH4', 'DF_NO2', 'DF_NO', 'DF_NOA', 'DF_NTERPOOH', 'DF_O3',
+ 'DF_ONITR', 'DF_PAN', 'DF_PHENOOH', 'DF_POOH', 'DF_ROOH', 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3',
+ 'DF_SOAG4', 'DF_SVOC', 'DF_TERP2OOH', 'DF_TERPNIT', 'DF_TERPOOH', 'DF_TERPROD1', 'DF_TERPROD2', 'DF_TOLOOH', 'DF_XOOH', 'DF_XYLENOOH',
+ 'DF_XYLOLOOH', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'DH2O2CHM', 'DHNO3CHM', 'DICARBO2', 'DMS', 'DO3CHM', 'dry_deposition_NHx_as_N',
+ 'dry_deposition_NOy_as_N', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM', 'dst_a1', 'dst_a1DDF', 'dst_a1SFWET', 'dst_a2', 'dst_a2DDF',
+ 'dst_a2SFWET', 'dst_a3', 'dst_a3DDF', 'dst_a3SFWET', 'dst_c1', 'dst_c1DDF', 'dst_c1SFWET', 'dst_c2', 'dst_c2DDF', 'dst_c2SFWET',
+ 'dst_c3', 'dst_c3DDF', 'dst_c3SFWET', 'DTCORE', 'E90', 'e', 'ENEO2', 'EO2', 'EO', 'EOOH', 'EVAPPREC',
+ 'EVAPQZM', 'EVAPTZM', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'F', 'FCTL',
+ 'FLASHFRQ', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FREQI', 'FREQL', 'FREQZM', 'FSDS',
+ 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'FSNTOAC', 'FSUTOA', 'GLYALD', 'GLYOXAL',
+ 'GS_SO2', 'H2402', 'H2', 'H2O2', 'H2O', 'H2SO4', 'H2SO4M_C', 'H2SO4_sfnnuc1', 'H', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22', 'HCL',
+ 'HCL_GAS', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS', 'HO2', 'HO2NO2', 'HOBR', 'HOCH2OO', 'HOCL', 'HONITR',
+ 'HPALD', 'HYAC', 'HYDRALD', 'ICEFRAC', 'IEPOX', 'ISOP', 'ISOPAO2', 'ISOPBO2', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3',
+ 'ISOPNOOH', 'ISOPOOH', 'IVOC', 'IVOC_CHML', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan', 'KVH_CLUBB',
+ 'LANDFRAC', 'LHFLX', 'LNO_COL_PROD', 'LNO_PROD', 'MACR', 'MACRO2', 'MACROOH', 'MALO2', 'MASS', 'MCO3', 'MDIALO2',
+ 'MEG_BCARY', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_C2H4', 'MEG_C2H5OH', 'MEG_C2H6', 'MEG_C3H6', 'MEG_C3H8', 'MEG_CH2O',
+ 'MEG_CH3CHO', 'MEG_CH3COCH3', 'MEG_CH3COOH', 'MEG_CH3OH', 'MEG_CO', 'MEG_HCN', 'MEG_HCOOH', 'MEG_ISOP', 'MEG_MTERP', 'MEG_TOLUENE',
+ 'MEK', 'MEKO2', 'MEKOOH', 'MPAN', 'MTERP', 'MVK', 'N2D', 'N2O5', 'N2O', 'N2O_CHML', 'N2p', 'N', 'NC4CH2OH',
+ 'NC4CHO', 'ncl_a1', 'ncl_a1DDF', 'ncl_a1SFWET', 'ncl_a2', 'ncl_a2DDF', 'ncl_a2SFWET', 'ncl_a3', 'ncl_a3DDF', 'ncl_a3SFWET', 'ncl_c1',
+ 'ncl_c1DDF', 'ncl_c1SFWET', 'ncl_c2', 'ncl_c2DDF', 'ncl_c2SFWET', 'ncl_c3', 'ncl_c3DDF', 'ncl_c3SFWET', 'NDEP', 'NH3', 'NH4', 'NH_50',
+ 'NH_5', 'NHDEP', 'NITROP_PD', 'NO2', 'NO2_CLXF', 'NO3', 'NO', 'NOA', 'NOp', 'NOX', 'NOY', 'Np', 'NTERPO2', 'NTERPOOH',
+ 'num_a1', 'num_a1_CLXF', 'num_a1DDF', 'num_a2', 'num_a2_CLXF', 'num_a2DDF', 'num_a2_sfnnuc1', 'num_a3', 'num_a3DDF', 'num_a4',
+ 'num_a4DDF', 'num_c1', 'num_c1DDF', 'num_c2', 'num_c2DDF', 'num_c3', 'num_c3DDF', 'num_c4', 'num_c4DDF', 'NUMLIQ', 'O1D', 'O2_1D',
+ 'O2_1S', 'O2', 'O2p', 'O3', 'O3_CHML', 'O3_CHMP', 'O3_Loss', 'O3_Prod', 'O', 'OCLO', 'OCS', 'OddOx_CLOxBROx_Loss',
+ 'OddOx_HOx_Loss', 'OddOx_Loss_Tot', 'OddOx_NOx_Loss', 'OddOx_Ox_Loss', 'OddOx_Prod_Tot', 'OH', 'OMEGA', 'OMEGAT', 'ONITR', 'Op',
+ 'PAN', 'PBLH', 'PBZNIT', 'PDELDRY', 'PHENO2', 'PHENO', 'PHENOL', 'PHENOOH', 'PHIS', 'PM25', 'PO2', 'pom_a1', 'pom_a1DDF', 'pom_a1SFWET',
+ 'pom_a4', 'pom_a4DDF', 'pom_a4SFWET', 'pom_c1', 'pom_c1DDF', 'pom_c1SFWET', 'pom_c4', 'pom_c4DDF', 'pom_c4SFWET',
+ 'POOH', 'PRECC', 'PRECT', 'PS', 'PSL', 'PTEQ', 'PTTEND', 'Q', 'QFLX', 'QRAIN', 'QREFHT', 'QRL', 'QRLC', 'QRS',
+ 'QRSC', 'QSNOW', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RELHUM', 'r_GLYOXAL_aer',
+ 'r_het10', 'r_het11', 'r_het12', 'r_het13', 'r_het15', 'r_het16', 'r_het17', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5',
+ 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_HO2_O3', 'RHREFHT', 'r_jsoa1_a1', 'r_jsoa1_a2', 'r_jsoa2_a1', 'r_jsoa2_a2',
+ 'r_jsoa3_a1', 'r_jsoa3_a2', 'r_jsoa4_a1', 'r_jsoa4_a2', 'r_jsoa5_a1', 'r_jsoa5_a2', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O',
+ 'r_OH_O3', 'r_OH_O', 'ROOH', 'RO2', 'RO2_NO_sum', 'RO2_NO3_sum', 'RO2_HO2_sum', 'RO2_RO2_sum', 'RCO2_NO2_sum',
+ 'S', 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP', 'SF6', 'SFbc_a4', 'SFBCARY',
+ 'SFBENZENE', 'SFBIGALK', 'SFBIGENE', 'SFC2H2', 'SFC2H4', 'SFC2H5OH', 'SFC2H6', 'SFC3H6', 'SFC3H8', 'SFCH2O', 'SFCH3CHO', 'SFCH3CN',
+ 'SFCH3COCH3', 'SFCH3COCHO', 'SFCH3COOH', 'SFCH3OH', 'SFCO', 'SFDMS', 'SFdst_a1', 'SFdst_a2', 'SFdst_a3', 'SFGLYALD', 'SFHCN', 'SFHCOOH',
+ 'SFISOP', 'SFIVOC', 'SFMEK', 'SFMTERP', 'SFncl_a1', 'SFncl_a2', 'SFncl_a3', 'SFNH3', 'SFNO2', 'SFNO', 'SFnum_a1', 'SFnum_a2',
+ 'SFnum_a3', 'SFpom_a4', 'SFSO2', 'SFso4_a1', 'SFso4_a2', 'SFSVOC', 'SFTOLUENE', 'SFXYLENES', 'SHFLX', 'SO2',
+ 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SO2_XFRC', 'SO3', 'so4_a1', 'so4_a1_CHMP', 'so4_a1_CLXF', 'so4_a1DDF', 'so4_a1_sfgaex1', 'so4_a1SFWET',
+ 'so4_a2', 'so4_a2_CHMP', 'so4_a2_CLXF', 'so4_a2DDF', 'so4_a2_sfgaex1', 'so4_a2_sfnnuc1', 'so4_a2SFWET', 'so4_a3',
+ 'so4_a3DDF', 'so4_a3_sfgaex1', 'so4_a3SFWET', 'so4_c1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_c1SFWET', 'so4_c2', 'so4_c2AQH2SO4',
+ 'so4_c2AQSO4', 'so4_c2DDF', 'so4_c2SFWET', 'so4_c3', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_c3SFWET', 'SO', 'soa1_a1',
+ 'soa1_a1_CHML', 'soa1_a1DDF', 'soa1_a1_sfgaex1', 'soa1_a1SFWET', 'soa1_a2', 'soa1_a2_CHML', 'soa1_a2DDF',
+ 'soa1_a2_sfgaex1', 'soa1_a2SFWET', 'soa1_c1', 'soa1_c1DDF', 'soa1_c1SFWET', 'soa1_c2', 'soa1_c2DDF', 'soa1_c2SFWET', 'soa2_a1', 'soa2_a1_CHML',
+ 'soa2_a1DDF', 'soa2_a1_sfgaex1', 'soa2_a1SFWET', 'soa2_a2', 'soa2_a2_CHML', 'soa2_a2DDF', 'soa2_a2_sfgaex1',
+ 'soa2_a2SFWET', 'soa2_c1', 'soa2_c1DDF', 'soa2_c1SFWET', 'soa2_c2', 'soa2_c2DDF', 'soa2_c2SFWET', 'soa3_a1', 'soa3_a1_CHML',
+ 'soa3_a1DDF', 'soa3_a1_sfgaex1', 'soa3_a1SFWET', 'soa3_a2', 'soa3_a2_CHML', 'soa3_a2DDF', 'soa3_a2_sfgaex1', 'soa3_a2SFWET',
+ 'soa3_c1', 'soa3_c1DDF', 'soa3_c1SFWET', 'soa3_c2', 'soa3_c2DDF', 'soa3_c2SFWET', 'soa4_a1', 'soa4_a1_CHML', 'soa4_a1DDF',
+ 'soa4_a1_sfgaex1', 'soa4_a1SFWET', 'soa4_a2', 'soa4_a2_CHML', 'soa4_a2DDF', 'soa4_a2_sfgaex1', 'soa4_a2SFWET', 'soa4_c1',
+ 'soa4_c1DDF', 'soa4_c1SFWET', 'soa4_c2', 'soa4_c2DDF', 'soa4_c2SFWET', 'soa5_a1', 'soa5_a1_CHML', 'soa5_a1DDF', 'soa5_a1_sfgaex1',
+ 'soa5_a1SFWET', 'soa5_a2', 'soa5_a2_CHML', 'soa5_a2DDF', 'soa5_a2_sfgaex1', 'soa5_a2SFWET', 'soa5_c1', 'soa5_c1DDF',
+ 'soa5_c1SFWET', 'soa5_c2', 'soa5_c2DDF', 'soa5_c2SFWET', 'SOAG0', 'SOAG0_CHMP', 'SOAG1', 'SOAG1_CHMP', 'SOAG2', 'SOAG2_CHMP',
+ 'SOAG3', 'SOAG3_CHMP', 'SOAG4', 'SOAG4_CHMP', 'SOLIN', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST', 'ST80_25', 'SVOC', 'SVOC_CHML',
+ 'T', 'TAQ', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY', 'TBRY', 'TCLY', 'TEPOMUC', 'TERP2O2', 'TERP2OOH',
+ 'TERPNIT', 'TERPO2', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TGCLDIWP', 'TGCLDLWP', 'THzm', 'TMDMS', 'TMOCS', 'TMQ', 'TMSO2',
+ 'TMso4_a1', 'TMso4_a2', 'TMso4_a3', 'TOLO2', 'TOLOOH', 'TOLUENE', 'TOT_CLD_VISTAU', 'TOTH', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TROP_P',
+ 'TROP_T', 'TROP_Z', 'TS', 'TSMN:M', 'TSMX:X', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO', 'TTGWSPEC',
+ 'U10', 'U', 'UTGWORO', 'UTGWSPEC', 'UU', 'UVzm', 'UWzm', 'Uzm', 'V', 'VD01', 'VEL_NAT2', 'VTHzm', 'VV', 'Vzm', 'WD_ALKNIT', 'WD_ALKOOH', 'WD_BENZOOH', 'WD_BRONO2',
+ 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO', 'WD_CH3CN', 'WD_CH3COCH3', 'WD_CH3COCHO',
+ 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3OH', 'WD_CH3OOH', 'WD_CLONO2', 'WD_COF2', 'WD_COFCL', 'WD_EOOH', 'WD_GLYALD', 'WD_H2O2', 'WD_H2SO4',
+ 'WD_HBR', 'WD_HCL', 'WD_HCN', 'WD_HCOOH', 'WD_HF', 'WD_HNO3', 'WD_HO2NO2', 'WD_HOBR', 'WD_HOCL', 'WD_HONITR', 'WD_HPALD', 'WD_HYAC',
+ 'WD_HYDRALD', 'WD_IEPOX', 'WD_ISOPNITA', 'WD_ISOPNITB', 'WD_ISOPNO3', 'WD_ISOPNOOH', 'WD_ISOPOOH', 'WD_IVOC', 'WD_MACR', 'WD_MACROOH',
+ 'WD_MEKOOH', 'WD_MVK', 'WD_NC4CH2OH', 'WD_NC4CHO', 'WD_NDEP', 'WD_NH3', 'WD_NH4', 'WD_NHDEP', 'WD_NOA', 'WD_NTERPOOH',
+ 'WD_ONITR', 'WD_PHENOOH', 'WD_POOH', 'WD_ROOH', 'WD_SO2', 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC',
+ 'WD_TERP2OOH', 'WD_TERPNIT', 'WD_TERPOOH', 'WD_TERPROD1', 'WD_TERPROD2', 'WD_TOLOOH', 'WD_XOOH', 'WD_XYLENOOH', 'WD_XYLOLOOH',
+ 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'Wzm', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
+ 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU'
+
+
+
+ 'ACTNL', 'ACTREL', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BUTGWSPEC',
+ 'CDNUMC', 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLOUD', 'CMFMC', 'CMFMCDZM', 'FCTL', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC',
+ 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FSDS', 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNTOA', 'FSNTOAC', 'LHFLX', 'MASS', 'O3', 'OMEGA',
+ 'OMEGA500', 'PBLH', 'PDELDRY', 'PM25_SRF', 'PRECC', 'PRECT', 'PS', 'PSL', 'Q', 'QREFHT', 'QSNOW', 'RELHUM', 'RHREFHT', 'SHFLX',
+ 'SOLIN', 'SOLLD', 'SOLSD', 'T', 'T500', 'T700', 'T850', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY',
+ 'TGCLDIWP', 'TGCLDLWP', 'TMQ', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TS', 'TSMN:M', 'TSMX:X', 'U', 'U10', 'UTGWORO', 'UTGWSPEC',
+ 'V', 'Z3', 'Z500'
+
+
+ 'O3_SRF','TS','PM25_SRF','NO2_SRF'
+
+
+ 'MSKtem','PS','PSL','VTHzm','UVzm','UWzm','Uzm','Vzm','THzm','Wzm','PHIS'
+
+
+ 'PS', 'PSL', 'U', 'V', 'T', 'Z3', 'PHIS', 'FRONTGF:I', 'OMEGA', 'O3', 'REFF_AERO', 'SAD_AERO',
+ 'so4_a1', 'so4_a2', 'so4_a3', 'AODVISstdn', 'NITROP_PD', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'QRS_TOT', 'CO2', 'H', 'NO', 'O'
+
+
+
+ 'O3_Prod = NO_HO2 + CH3O2_NO + PO2_NO + CH3CO3_NO + C2H5O2_NO + .92*ISOPAO2_NO + .92*ISOPBO2_NO + MACRO2_NOa + MCO3_NO + C3H7O2_NO + RO2_NO + XO2_NO + .9*TOLO2_NO +',
+ '.9*PHENO2_NO + .9*C6H5O2_NO + .9*BENZO2_NO + .9*MALO2_NO + .9*BZOO_NO + .9*ACBZO2_NO + .9*DICARBO2_NO + .9*MDIALO2_NO + .9*XYLOLO2_NO + .9*XYLENO2_NO + TERPO2_NO +',
+ 'TERP2O2_NO + NTERPO2_NO + ALKO2_NO + ENEO2_NO + EO2_NO + MEKO2_NO + HOCH2OO_NO + jonitr',
+ 'O3_Loss = O1D_H2O + OH_O3 + HO2_O3 + H_O3 + C3H6_O3 + .9*ISOP_O3 + C2H4_O3 + .8*MVK_O3 + 0.8*MACR_O3 + MTERP_O3 + BCARY_O3',
+ 'RO2_NO_sum = NO_HO2 + CH3O2_NO + HOCH2OO_NO + EO2_NO + C2H5O2_NO + CH3CO3_NO + C3H7O2_NO + PO2_NO + RO2_NO + ENEO2_NO + ENEO2_NOb + MEKO2_NO + MACRO2_NOa + MACRO2_NOb +',
+ 'MCO3_NO + ISOPAO2_NO + ISOPBO2_NO + ALKO2_NO + ALKO2_NOb + XO2_NO + TOLO2_NO + PHENO2_NO + C6H5O2_NO + BENZO2_NO + MALO2_NO + BZOO_NO + ACBZO2_NO + DICARBO2_NO +',
+ 'MDIALO2_NO + XYLOLO2_NO + XYLENO2_NO + TERPO2_NO + TERP2O2_NO + NTERPO2_NO',
+ 'RO2_NO3_sum = NO3_HO2 + MACRO2_NO3 + MCO3_NO3 + ISOPAO2_NO3 + ISOPBO2_NO3 + XO2_NO3',
+ 'RO2_HO2_sum = CH3O2_HO2 + HOCH2OO_HO2 + EO2_HO2 + C2H5O2_HO2 + CH3CO3_HO2 + C3H7O2_HO2 + PO2_HO2 + RO2_HO2 + MEKO2_HO2 + MACRO2_HO2 + ISOPAO2_HO2 + ISOPBO2_HO2 + ALKO2_HO2 +',
+ 'XO2_HO2 + TOLO2_HO2 + PHENO2_HO2 + C6H5O2_HO2 + BENZO2_HO2 + MALO2_HO2 + BZOO_HO2 + ACBZO2_HO2 + DICARBO2_HO2 + MDIALO2_HO2 + XYLOLO2_HO2 + XYLENO2_HO2 + TERPO2_HO2 +',
+ 'TERP2O2_HO2 + NTERPO2_HO2',
+ 'RO2_RO2_sum = CH3O2_CH3O2a + CH3O2_CH3O2b + C2H5O2_CH3O2 + C2H5O2_C2H5O2 + CH3CO3_CH3O2 + CH3CO3_CH3CO3 + C3H7O2_CH3O2 + RO2_CH3O2 + MACRO2_CH3O2 + MACRO2_CH3CO3 + MCO3_CH3O2 +',
+ ' MCO3_CH3CO3 + MCO3_MCO3 + ISOPAO2_CH3O2 + ISOPBO2_CH3O2 + ISOPAO2_CH3CO3 + ISOPBO2_CH3CO3 + XO2_CH3O2 + XO2_CH3CO3',
+ 'RCO2_NO2_sum = CH3CO3_NO2 + MCO3_NO2',
+ 'OddOx_Ox_Loss = 2.0*O_O3 + O1D_H2O',
+ 'OddOx_HOx_Loss = HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3',
+ 'OddOx_NOx_Loss = 2.0*NO2_O + 2.0*jno3_b',
+ 'OddOx_CLOxBROx_Loss = 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb + 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Loss_Tot = 2.0*O_O3 + O1D_H2O + HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3 + 2.0*NO2_O + 2.0*jno3_b + 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb +',
+ ' 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Prod_Tot = 2.0*jo2_a + 2.0*jo2_b'
+
+
+.true.
+
+
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_ssp534_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_ssp534_cam6.xml
new file mode 100644
index 0000000000..9e03ccf5ec
--- /dev/null
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_ssp534_cam6.xml
@@ -0,0 +1,294 @@
+
+
+
+
+19900101
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+'epp_ion_rates'
+
+
+atm/waccm/ic/b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001.cam.i.2015-01-01-00000.nc
+
+
+SERIAL
+atm/waccm/lb/LBC_20140116-25001216_CMIP6_SSP534os_0p5degLat_c180905.nc
+
+ 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
+ 'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'SF6', 'CFC11eq'
+
+
+
+atm/waccm/ub/tgcm_ubc_1850-2100_c100204.nc
+'INTERP_MISSING_MONTHS'
+
+
+.true.
+.true.
+.true.
+.false.
+
+
+
+
+INTERP_MISSING_MONTHS
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_NO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_SO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/stratvolc/VolcanEESMv3.10_piControl_SO2_1850-2014average_ext_1deg_ZeroTrop_c181020.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+INTERP_MISSING_MONTHS
+
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_BENZENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_BENZENE_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_BIGALK_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_BIGALK_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_BIGENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_BIGENE_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C2H2_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C2H2_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C2H4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-SSP_C2H4_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C2H5OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C2H5OH_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C2H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C2H6_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-SSP_C2H6_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C3H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C3H6_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-SSP_C3H6_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C3H8_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_C3H8_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-SSP_C3H8_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH2O_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH2O_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3CHO_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3CHO_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3CN_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3CN_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3COCH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3COCH3_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COCHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3COCHO_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3COOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3COOH_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CH3OH_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CO_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_CO_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-SSP_CO_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'E90 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions_E90global_surface_175001-210101_0.9x1.25_c20190224.nc',
+ 'GLYALD -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_GLYALD_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_HCN_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_HCN_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_HCOOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_HCOOH_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'ISOP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_ISOP_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_IVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_IVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_MEK_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_MEK_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'MTERP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_MTERP_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_NH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_NH3_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-SSP_NH3_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_NO_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_NO_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-SSP_NO_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_SVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_SVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_TOLUENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_TOLUENE_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_XYLENES_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_XYLENES_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp534_over/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp534-over-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc'
+
+
+'noy', 'nhx'
+
+
+
+ 1, 5, 20, 40, 120, 240, 365, 73, 365
+ 0, -24, -6, -3, -1, 1, -24,-120,-240
+'A', 'A', 'A', 'A', 'I', 'A', 'A', 'A', 'I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.true.
+.true.
+.true.
+
+ 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+
+
+ 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn', 'AODBCdn', 'AODdnDUST1', 'AODdnDUST2',
+ 'AODdnDUST3', 'AODdnMODE1', 'AODdnMODE2', 'AODdnMODE3', 'AODDUST2', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn',
+ 'AODUVdn', 'AODUVstdn', 'AODVIS', 'AODVISdn', 'AODVISstdn', 'AQ_SO2', 'AREA', 'AREI', 'AREL', 'bc_a1', 'bc_a1DDF',
+ 'bc_a1SFWET', 'bc_a4', 'bc_a4_CLXF', 'bc_a4DDF', 'bc_a4SFWET', 'BCARY', 'bc_c1', 'bc_c1DDF', 'bc_c1SFWET', 'bc_c4', 'bc_c4DDF',
+ 'bc_c4SFWET', 'BENZENE', 'BENZO2', 'BENZOOH', 'BEPOMUC', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALD', 'BIGALK', 'BIGENE',
+ 'BR', 'BRCL', 'BRO', 'BRONO2', 'BROX', 'BROY', 'BRY', 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn',
+ 'BURDENSOAdn', 'BUTGWSPEC', 'BZALD', 'BZOO', 'BZOOH', 'C2H2', 'C2H4', 'C2H5O2', 'C2H5OH', 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7O2',
+ 'C3H7OOH', 'C3H8', 'C6H5O2', 'C6H5OOH', 'CCL4', 'CDNUMC', 'CF2CLBR', 'CF3BR', 'CFC113', 'CFC114', 'CFC115', 'CFC11', 'CFC11STAR',
+ 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CCL3_CHML', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3CO3', 'CH3COCH3', 'CH3COCHO',
+ 'CH3COOH', 'CH3COOOH', 'CH3O2', 'CH3OH', 'CH3OOH', 'CH4', 'CH4_CHML', 'CHBR3', 'CL2', 'CL2O2', 'CL',
+ 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD', 'CLOX', 'CLOY', 'CLY', 'CME', 'CMFDQ', 'CMFMC',
+ 'CMFMCDZM', 'CO2', 'CO2_CHML', 'CO', 'CO_CHML', 'CO_CHMP', 'COF2', 'COFCL', 'CONCLD', 'CRESOL',
+ 'DCOCHM', 'DF_ALKNIT', 'DF_ALKOOH', 'DF_BENZOOH', 'DF_BZOOH', 'DF_C2H5OH', 'DF_C2H5OOH', 'DF_C3H7OOH', 'DF_C6H5OOH', 'DF_CH2O',
+ 'DF_CH3CHO', 'DF_CH3CN', 'DF_CH3COCH3', 'DF_CH3COCHO', 'DF_CH3COOH', 'DF_CH3COOOH', 'DF_CH3OH', 'DF_CH3OOH', 'DF_CO', 'DF_EOOH',
+ 'DF_GLYALD', 'DF_H2O2', 'DF_H2SO4', 'DF_HCN', 'DF_HCOOH', 'DF_HNO3', 'DF_HO2NO2', 'DF_HONITR', 'DF_HPALD', 'DF_HYAC', 'DF_HYDRALD',
+ 'DF_IEPOX', 'DF_ISOPNITA', 'DF_ISOPNITB', 'DF_ISOPNO3', 'DF_ISOPNOOH', 'DF_ISOPOOH', 'DF_IVOC', 'DF_MACROOH', 'DF_MEKOOH',
+ 'DF_MPAN', 'DF_NC4CH2OH', 'DF_NC4CHO', 'DF_NH3', 'DF_NH4', 'DF_NO2', 'DF_NO', 'DF_NOA', 'DF_NTERPOOH', 'DF_O3',
+ 'DF_ONITR', 'DF_PAN', 'DF_PHENOOH', 'DF_POOH', 'DF_ROOH', 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3',
+ 'DF_SOAG4', 'DF_SVOC', 'DF_TERP2OOH', 'DF_TERPNIT', 'DF_TERPOOH', 'DF_TERPROD1', 'DF_TERPROD2', 'DF_TOLOOH', 'DF_XOOH', 'DF_XYLENOOH',
+ 'DF_XYLOLOOH', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'DH2O2CHM', 'DHNO3CHM', 'DICARBO2', 'DMS', 'DO3CHM', 'dry_deposition_NHx_as_N',
+ 'dry_deposition_NOy_as_N', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM', 'dst_a1', 'dst_a1DDF', 'dst_a1SFWET', 'dst_a2', 'dst_a2DDF',
+ 'dst_a2SFWET', 'dst_a3', 'dst_a3DDF', 'dst_a3SFWET', 'dst_c1', 'dst_c1DDF', 'dst_c1SFWET', 'dst_c2', 'dst_c2DDF', 'dst_c2SFWET',
+ 'dst_c3', 'dst_c3DDF', 'dst_c3SFWET', 'DTCORE', 'E90', 'e', 'ENEO2', 'EO2', 'EO', 'EOOH', 'EVAPPREC',
+ 'EVAPQZM', 'EVAPTZM', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'F', 'FCTL',
+ 'FLASHFRQ', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FREQI', 'FREQL', 'FREQZM', 'FSDS',
+ 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'FSNTOAC', 'FSUTOA', 'GLYALD', 'GLYOXAL',
+ 'GS_SO2', 'H2402', 'H2', 'H2O2', 'H2O', 'H2SO4', 'H2SO4M_C', 'H2SO4_sfnnuc1', 'H', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22', 'HCL',
+ 'HCL_GAS', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS', 'HO2', 'HO2NO2', 'HOBR', 'HOCH2OO', 'HOCL', 'HONITR',
+ 'HPALD', 'HYAC', 'HYDRALD', 'ICEFRAC', 'IEPOX', 'ISOP', 'ISOPAO2', 'ISOPBO2', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3',
+ 'ISOPNOOH', 'ISOPOOH', 'IVOC', 'IVOC_CHML', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan', 'KVH_CLUBB',
+ 'LANDFRAC', 'LHFLX', 'LNO_COL_PROD', 'LNO_PROD', 'MACR', 'MACRO2', 'MACROOH', 'MALO2', 'MASS', 'MCO3', 'MDIALO2',
+ 'MEG_BCARY', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_C2H4', 'MEG_C2H5OH', 'MEG_C2H6', 'MEG_C3H6', 'MEG_C3H8', 'MEG_CH2O',
+ 'MEG_CH3CHO', 'MEG_CH3COCH3', 'MEG_CH3COOH', 'MEG_CH3OH', 'MEG_CO', 'MEG_HCN', 'MEG_HCOOH', 'MEG_ISOP', 'MEG_MTERP', 'MEG_TOLUENE',
+ 'MEK', 'MEKO2', 'MEKOOH', 'MPAN', 'MTERP', 'MVK', 'N2D', 'N2O5', 'N2O', 'N2O_CHML', 'N2p', 'N', 'NC4CH2OH',
+ 'NC4CHO', 'ncl_a1', 'ncl_a1DDF', 'ncl_a1SFWET', 'ncl_a2', 'ncl_a2DDF', 'ncl_a2SFWET', 'ncl_a3', 'ncl_a3DDF', 'ncl_a3SFWET', 'ncl_c1',
+ 'ncl_c1DDF', 'ncl_c1SFWET', 'ncl_c2', 'ncl_c2DDF', 'ncl_c2SFWET', 'ncl_c3', 'ncl_c3DDF', 'ncl_c3SFWET', 'NDEP', 'NH3', 'NH4', 'NH_50',
+ 'NH_5', 'NHDEP', 'NITROP_PD', 'NO2', 'NO2_CLXF', 'NO3', 'NO', 'NOA', 'NOp', 'NOX', 'NOY', 'Np', 'NTERPO2', 'NTERPOOH',
+ 'num_a1', 'num_a1_CLXF', 'num_a1DDF', 'num_a2', 'num_a2_CLXF', 'num_a2DDF', 'num_a2_sfnnuc1', 'num_a3', 'num_a3DDF', 'num_a4',
+ 'num_a4DDF', 'num_c1', 'num_c1DDF', 'num_c2', 'num_c2DDF', 'num_c3', 'num_c3DDF', 'num_c4', 'num_c4DDF', 'NUMLIQ', 'O1D', 'O2_1D',
+ 'O2_1S', 'O2', 'O2p', 'O3', 'O3_CHML', 'O3_CHMP', 'O3_Loss', 'O3_Prod', 'O', 'OCLO', 'OCS', 'OddOx_CLOxBROx_Loss',
+ 'OddOx_HOx_Loss', 'OddOx_Loss_Tot', 'OddOx_NOx_Loss', 'OddOx_Ox_Loss', 'OddOx_Prod_Tot', 'OH', 'OMEGA', 'OMEGAT', 'ONITR', 'Op',
+ 'PAN', 'PBLH', 'PBZNIT', 'PDELDRY', 'PHENO2', 'PHENO', 'PHENOL', 'PHENOOH', 'PHIS', 'PM25', 'PO2', 'pom_a1', 'pom_a1DDF', 'pom_a1SFWET',
+ 'pom_a4', 'pom_a4DDF', 'pom_a4SFWET', 'pom_c1', 'pom_c1DDF', 'pom_c1SFWET', 'pom_c4', 'pom_c4DDF', 'pom_c4SFWET',
+ 'POOH', 'PRECC', 'PRECT', 'PS', 'PSL', 'PTEQ', 'PTTEND', 'Q', 'QFLX', 'QRAIN', 'QREFHT', 'QRL', 'QRLC', 'QRS',
+ 'QRSC', 'QSNOW', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RELHUM', 'r_GLYOXAL_aer',
+ 'r_het10', 'r_het11', 'r_het12', 'r_het13', 'r_het15', 'r_het16', 'r_het17', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5',
+ 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_HO2_O3', 'RHREFHT', 'r_jsoa1_a1', 'r_jsoa1_a2', 'r_jsoa2_a1', 'r_jsoa2_a2',
+ 'r_jsoa3_a1', 'r_jsoa3_a2', 'r_jsoa4_a1', 'r_jsoa4_a2', 'r_jsoa5_a1', 'r_jsoa5_a2', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O',
+ 'r_OH_O3', 'r_OH_O', 'ROOH', 'RO2', 'RO2_NO_sum', 'RO2_NO3_sum', 'RO2_HO2_sum', 'RO2_RO2_sum', 'RCO2_NO2_sum',
+ 'S', 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP', 'SF6', 'SFbc_a4', 'SFBCARY',
+ 'SFBENZENE', 'SFBIGALK', 'SFBIGENE', 'SFC2H2', 'SFC2H4', 'SFC2H5OH', 'SFC2H6', 'SFC3H6', 'SFC3H8', 'SFCH2O', 'SFCH3CHO', 'SFCH3CN',
+ 'SFCH3COCH3', 'SFCH3COCHO', 'SFCH3COOH', 'SFCH3OH', 'SFCO', 'SFDMS', 'SFdst_a1', 'SFdst_a2', 'SFdst_a3', 'SFGLYALD', 'SFHCN', 'SFHCOOH',
+ 'SFISOP', 'SFIVOC', 'SFMEK', 'SFMTERP', 'SFncl_a1', 'SFncl_a2', 'SFncl_a3', 'SFNH3', 'SFNO2', 'SFNO', 'SFnum_a1', 'SFnum_a2',
+ 'SFnum_a3', 'SFpom_a4', 'SFSO2', 'SFso4_a1', 'SFso4_a2', 'SFSVOC', 'SFTOLUENE', 'SFXYLENES', 'SHFLX', 'SO2',
+ 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SO2_XFRC', 'SO3', 'so4_a1', 'so4_a1_CHMP', 'so4_a1_CLXF', 'so4_a1DDF', 'so4_a1_sfgaex1', 'so4_a1SFWET',
+ 'so4_a2', 'so4_a2_CHMP', 'so4_a2_CLXF', 'so4_a2DDF', 'so4_a2_sfgaex1', 'so4_a2_sfnnuc1', 'so4_a2SFWET', 'so4_a3',
+ 'so4_a3DDF', 'so4_a3_sfgaex1', 'so4_a3SFWET', 'so4_c1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_c1SFWET', 'so4_c2', 'so4_c2AQH2SO4',
+ 'so4_c2AQSO4', 'so4_c2DDF', 'so4_c2SFWET', 'so4_c3', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_c3SFWET', 'SO', 'soa1_a1',
+ 'soa1_a1_CHML', 'soa1_a1DDF', 'soa1_a1_sfgaex1', 'soa1_a1SFWET', 'soa1_a2', 'soa1_a2_CHML', 'soa1_a2DDF',
+ 'soa1_a2_sfgaex1', 'soa1_a2SFWET', 'soa1_c1', 'soa1_c1DDF', 'soa1_c1SFWET', 'soa1_c2', 'soa1_c2DDF', 'soa1_c2SFWET', 'soa2_a1', 'soa2_a1_CHML',
+ 'soa2_a1DDF', 'soa2_a1_sfgaex1', 'soa2_a1SFWET', 'soa2_a2', 'soa2_a2_CHML', 'soa2_a2DDF', 'soa2_a2_sfgaex1',
+ 'soa2_a2SFWET', 'soa2_c1', 'soa2_c1DDF', 'soa2_c1SFWET', 'soa2_c2', 'soa2_c2DDF', 'soa2_c2SFWET', 'soa3_a1', 'soa3_a1_CHML',
+ 'soa3_a1DDF', 'soa3_a1_sfgaex1', 'soa3_a1SFWET', 'soa3_a2', 'soa3_a2_CHML', 'soa3_a2DDF', 'soa3_a2_sfgaex1', 'soa3_a2SFWET',
+ 'soa3_c1', 'soa3_c1DDF', 'soa3_c1SFWET', 'soa3_c2', 'soa3_c2DDF', 'soa3_c2SFWET', 'soa4_a1', 'soa4_a1_CHML', 'soa4_a1DDF',
+ 'soa4_a1_sfgaex1', 'soa4_a1SFWET', 'soa4_a2', 'soa4_a2_CHML', 'soa4_a2DDF', 'soa4_a2_sfgaex1', 'soa4_a2SFWET', 'soa4_c1',
+ 'soa4_c1DDF', 'soa4_c1SFWET', 'soa4_c2', 'soa4_c2DDF', 'soa4_c2SFWET', 'soa5_a1', 'soa5_a1_CHML', 'soa5_a1DDF', 'soa5_a1_sfgaex1',
+ 'soa5_a1SFWET', 'soa5_a2', 'soa5_a2_CHML', 'soa5_a2DDF', 'soa5_a2_sfgaex1', 'soa5_a2SFWET', 'soa5_c1', 'soa5_c1DDF',
+ 'soa5_c1SFWET', 'soa5_c2', 'soa5_c2DDF', 'soa5_c2SFWET', 'SOAG0', 'SOAG0_CHMP', 'SOAG1', 'SOAG1_CHMP', 'SOAG2', 'SOAG2_CHMP',
+ 'SOAG3', 'SOAG3_CHMP', 'SOAG4', 'SOAG4_CHMP', 'SOLIN', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST', 'ST80_25', 'SVOC', 'SVOC_CHML',
+ 'T', 'TAQ', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY', 'TBRY', 'TCLY', 'TEPOMUC', 'TERP2O2', 'TERP2OOH',
+ 'TERPNIT', 'TERPO2', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TGCLDIWP', 'TGCLDLWP', 'THzm', 'TMDMS', 'TMOCS', 'TMQ', 'TMSO2',
+ 'TMso4_a1', 'TMso4_a2', 'TMso4_a3', 'TOLO2', 'TOLOOH', 'TOLUENE', 'TOT_CLD_VISTAU', 'TOTH', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TROP_P',
+ 'TROP_T', 'TROP_Z', 'TS', 'TSMN:M', 'TSMX:X', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO', 'TTGWSPEC',
+ 'U10', 'U', 'UTGWORO', 'UTGWSPEC', 'UU', 'UVzm', 'UWzm', 'Uzm', 'V', 'VD01', 'VEL_NAT2', 'VTHzm', 'VV', 'Vzm', 'WD_ALKNIT', 'WD_ALKOOH', 'WD_BENZOOH', 'WD_BRONO2',
+ 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO', 'WD_CH3CN', 'WD_CH3COCH3', 'WD_CH3COCHO',
+ 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3OH', 'WD_CH3OOH', 'WD_CLONO2', 'WD_COF2', 'WD_COFCL', 'WD_EOOH', 'WD_GLYALD', 'WD_H2O2', 'WD_H2SO4',
+ 'WD_HBR', 'WD_HCL', 'WD_HCN', 'WD_HCOOH', 'WD_HF', 'WD_HNO3', 'WD_HO2NO2', 'WD_HOBR', 'WD_HOCL', 'WD_HONITR', 'WD_HPALD', 'WD_HYAC',
+ 'WD_HYDRALD', 'WD_IEPOX', 'WD_ISOPNITA', 'WD_ISOPNITB', 'WD_ISOPNO3', 'WD_ISOPNOOH', 'WD_ISOPOOH', 'WD_IVOC', 'WD_MACR', 'WD_MACROOH',
+ 'WD_MEKOOH', 'WD_MVK', 'WD_NC4CH2OH', 'WD_NC4CHO', 'WD_NDEP', 'WD_NH3', 'WD_NH4', 'WD_NHDEP', 'WD_NOA', 'WD_NTERPOOH',
+ 'WD_ONITR', 'WD_PHENOOH', 'WD_POOH', 'WD_ROOH', 'WD_SO2', 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC',
+ 'WD_TERP2OOH', 'WD_TERPNIT', 'WD_TERPOOH', 'WD_TERPROD1', 'WD_TERPROD2', 'WD_TOLOOH', 'WD_XOOH', 'WD_XYLENOOH', 'WD_XYLOLOOH',
+ 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'Wzm', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
+ 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU'
+
+
+
+ 'ACTNL', 'ACTREL', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BUTGWSPEC',
+ 'CDNUMC', 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLOUD', 'CMFMC', 'CMFMCDZM', 'FCTL', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC',
+ 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FSDS', 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNTOA', 'FSNTOAC', 'LHFLX', 'MASS', 'O3', 'OMEGA',
+ 'OMEGA500', 'PBLH', 'PDELDRY', 'PM25_SRF', 'PRECC', 'PRECT', 'PS', 'PSL', 'Q', 'QREFHT', 'QSNOW', 'RELHUM', 'RHREFHT', 'SHFLX',
+ 'SOLIN', 'SOLLD', 'SOLSD', 'T', 'T500', 'T700', 'T850', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY',
+ 'TGCLDIWP', 'TGCLDLWP', 'TMQ', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TS', 'TSMN:M', 'TSMX:X', 'U', 'U10', 'UTGWORO', 'UTGWSPEC',
+ 'V', 'Z3', 'Z500'
+
+
+ 'O3_SRF','TS','PM25_SRF','NO2_SRF'
+
+
+ 'MSKtem','PS','PSL','VTHzm','UVzm','UWzm','Uzm','Vzm','THzm','Wzm','PHIS'
+
+
+ 'PS', 'PSL', 'U', 'V', 'T', 'Z3', 'PHIS', 'FRONTGF:I', 'OMEGA', 'O3', 'REFF_AERO', 'SAD_AERO',
+ 'so4_a1', 'so4_a2', 'so4_a3', 'AODVISstdn', 'NITROP_PD', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'QRS_TOT', 'CO2', 'H', 'NO', 'O'
+
+
+
+ 'O3_Prod = NO_HO2 + CH3O2_NO + PO2_NO + CH3CO3_NO + C2H5O2_NO + .92*ISOPAO2_NO + .92*ISOPBO2_NO + MACRO2_NOa + MCO3_NO + C3H7O2_NO + RO2_NO + XO2_NO + .9*TOLO2_NO +',
+ '.9*PHENO2_NO + .9*C6H5O2_NO + .9*BENZO2_NO + .9*MALO2_NO + .9*BZOO_NO + .9*ACBZO2_NO + .9*DICARBO2_NO + .9*MDIALO2_NO + .9*XYLOLO2_NO + .9*XYLENO2_NO + TERPO2_NO +',
+ 'TERP2O2_NO + NTERPO2_NO + ALKO2_NO + ENEO2_NO + EO2_NO + MEKO2_NO + HOCH2OO_NO + jonitr',
+ 'O3_Loss = O1D_H2O + OH_O3 + HO2_O3 + H_O3 + C3H6_O3 + .9*ISOP_O3 + C2H4_O3 + .8*MVK_O3 + 0.8*MACR_O3 + MTERP_O3 + BCARY_O3',
+ 'RO2_NO_sum = NO_HO2 + CH3O2_NO + HOCH2OO_NO + EO2_NO + C2H5O2_NO + CH3CO3_NO + C3H7O2_NO + PO2_NO + RO2_NO + ENEO2_NO + ENEO2_NOb + MEKO2_NO + MACRO2_NOa + MACRO2_NOb +',
+ 'MCO3_NO + ISOPAO2_NO + ISOPBO2_NO + ALKO2_NO + ALKO2_NOb + XO2_NO + TOLO2_NO + PHENO2_NO + C6H5O2_NO + BENZO2_NO + MALO2_NO + BZOO_NO + ACBZO2_NO + DICARBO2_NO +',
+ 'MDIALO2_NO + XYLOLO2_NO + XYLENO2_NO + TERPO2_NO + TERP2O2_NO + NTERPO2_NO',
+ 'RO2_NO3_sum = NO3_HO2 + MACRO2_NO3 + MCO3_NO3 + ISOPAO2_NO3 + ISOPBO2_NO3 + XO2_NO3',
+ 'RO2_HO2_sum = CH3O2_HO2 + HOCH2OO_HO2 + EO2_HO2 + C2H5O2_HO2 + CH3CO3_HO2 + C3H7O2_HO2 + PO2_HO2 + RO2_HO2 + MEKO2_HO2 + MACRO2_HO2 + ISOPAO2_HO2 + ISOPBO2_HO2 + ALKO2_HO2 +',
+ 'XO2_HO2 + TOLO2_HO2 + PHENO2_HO2 + C6H5O2_HO2 + BENZO2_HO2 + MALO2_HO2 + BZOO_HO2 + ACBZO2_HO2 + DICARBO2_HO2 + MDIALO2_HO2 + XYLOLO2_HO2 + XYLENO2_HO2 + TERPO2_HO2 +',
+ 'TERP2O2_HO2 + NTERPO2_HO2',
+ 'RO2_RO2_sum = CH3O2_CH3O2a + CH3O2_CH3O2b + C2H5O2_CH3O2 + C2H5O2_C2H5O2 + CH3CO3_CH3O2 + CH3CO3_CH3CO3 + C3H7O2_CH3O2 + RO2_CH3O2 + MACRO2_CH3O2 + MACRO2_CH3CO3 + MCO3_CH3O2 +',
+ ' MCO3_CH3CO3 + MCO3_MCO3 + ISOPAO2_CH3O2 + ISOPBO2_CH3O2 + ISOPAO2_CH3CO3 + ISOPBO2_CH3CO3 + XO2_CH3O2 + XO2_CH3CO3',
+ 'RCO2_NO2_sum = CH3CO3_NO2 + MCO3_NO2',
+ 'OddOx_Ox_Loss = 2.0*O_O3 + O1D_H2O',
+ 'OddOx_HOx_Loss = HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3',
+ 'OddOx_NOx_Loss = 2.0*NO2_O + 2.0*jno3_b',
+ 'OddOx_CLOxBROx_Loss = 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb + 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Loss_Tot = 2.0*O_O3 + O1D_H2O + HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3 + 2.0*NO2_O + 2.0*jno3_b + 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb +',
+ ' 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Prod_Tot = 2.0*jo2_a + 2.0*jo2_b'
+
+
+.true.
+
+
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_ssp585_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_ssp585_cam6.xml
new file mode 100644
index 0000000000..ea9b6c3dae
--- /dev/null
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_ssp585_cam6.xml
@@ -0,0 +1,294 @@
+
+
+
+
+19900101
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+
+
+atm/cam/solar/SolarForcingCMIP6_18491230-22991231_c171031.nc
+'epp_ion_rates'
+
+
+atm/waccm/ic/b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001.cam.i.2015-01-01-00000.nc
+
+
+SERIAL
+atm/waccm/lb/LBC_20140116-25001216_CMIP6_SSP585_0p5degLat_c180905.nc
+
+ 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113', 'CFC12', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH4', 'CO2', 'H2',
+ 'HCFC22', 'N2O', 'CFC114', 'CFC115', 'HCFC141B', 'HCFC142B', 'CH2BR2', 'CHBR3', 'H2402', 'OCS', 'SF6', 'CFC11eq'
+
+
+
+atm/waccm/ub/tgcm_ubc_1850-2100_c100204.nc
+'INTERP_MISSING_MONTHS'
+
+
+.true.
+.true.
+.true.
+.false.
+
+
+
+
+INTERP_MISSING_MONTHS
+
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_NO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/stratvolc/VolcanEESMv3.10_piControl_SO2_1850-2014average_ext_1deg_ZeroTrop_c181020.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_so4_a1_anthro-ene_vertical_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'
+
+
+INTERP_MISSING_MONTHS
+
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_BENZENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BENZENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_BENZENE_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_BIGALK_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BIGALK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_BIGALK_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_BIGENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'BIGENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_BIGENE_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C2H2_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C2H2_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C2H4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_C2H4_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C2H5OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H5OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C2H5OH_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C2H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C2H6_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C2H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_C2H6_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C3H6_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C3H6_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H6 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_C3H6_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C3H8_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_C3H8_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'C3H8 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_C3H8_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH2O_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH2O -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH2O_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3CHO_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3CHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3CHO_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3CN_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3CN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3CN_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3COCH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COCH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3COCH3_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COCHO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3COCHO_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3COOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3COOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3COOH_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3OH_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CH3OH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CH3OH_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CO_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_CO_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'CO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_CO_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'E90 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions_E90global_surface_175001-210101_0.9x1.25_c20190224.nc',
+ 'GLYALD -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_GLYALD_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_HCN_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'HCN -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_HCN_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_HCOOH_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'HCOOH -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_HCOOH_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'ISOP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_ISOP_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_IVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'IVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_IVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_MEK_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'MEK -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_MEK_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'MTERP -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_MTERP_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_NH3_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_NH3_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NH3 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_NH3_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_NO_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_NO_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'NO -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_NO_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SVOC_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SVOC -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SVOC_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_TOLUENE_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'TOLUENE -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_TOLUENE_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_XYLENES_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'XYLENES -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_XYLENES_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'bc_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'DMS -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_bc_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_bc_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'num_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_num_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_pom_a4_anthro_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'pom_a4 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_pom_a4_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SO2_anthro-ag-ship-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SO2_anthro-ene_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'SO2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_SO2_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_so4_a1_anthro-ag-ship_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_so4_a1_bb_surface_mol_175001-210101_0.9x1.25_c20190224.nc',
+ 'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/emissions_ssp585/emissions-cmip6-ScenarioMIP_IAMC-REMIND-MAGPIE-ssp585-1-1_so4_a2_anthro-res_surface_mol_175001-210101_0.9x1.25_c20190224.nc'
+
+
+'noy', 'nhx'
+
+
+
+ 1, 5, 20, 40, 120, 240, 365, 73, 365
+ 0, -24, -6, -3, -1, 1, -24,-120,-240
+'A', 'A', 'A', 'A', 'I', 'A', 'A', 'A', 'I'
+
+.true.
+.false.
+.false.
+.false.
+.false.
+.false.
+.true.
+.true.
+.true.
+
+ 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+
+
+ 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn', 'AODBCdn', 'AODdnDUST1', 'AODdnDUST2',
+ 'AODdnDUST3', 'AODdnMODE1', 'AODdnMODE2', 'AODdnMODE3', 'AODDUST2', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn',
+ 'AODUVdn', 'AODUVstdn', 'AODVIS', 'AODVISdn', 'AODVISstdn', 'AQ_SO2', 'AREA', 'AREI', 'AREL', 'bc_a1', 'bc_a1DDF',
+ 'bc_a1SFWET', 'bc_a4', 'bc_a4_CLXF', 'bc_a4DDF', 'bc_a4SFWET', 'BCARY', 'bc_c1', 'bc_c1DDF', 'bc_c1SFWET', 'bc_c4', 'bc_c4DDF',
+ 'bc_c4SFWET', 'BENZENE', 'BENZO2', 'BENZOOH', 'BEPOMUC', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALD', 'BIGALK', 'BIGENE',
+ 'BR', 'BRCL', 'BRO', 'BRONO2', 'BROX', 'BROY', 'BRY', 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn',
+ 'BURDENSOAdn', 'BUTGWSPEC', 'BZALD', 'BZOO', 'BZOOH', 'C2H2', 'C2H4', 'C2H5O2', 'C2H5OH', 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7O2',
+ 'C3H7OOH', 'C3H8', 'C6H5O2', 'C6H5OOH', 'CCL4', 'CDNUMC', 'CF2CLBR', 'CF3BR', 'CFC113', 'CFC114', 'CFC115', 'CFC11', 'CFC11STAR',
+ 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CCL3_CHML', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3CO3', 'CH3COCH3', 'CH3COCHO',
+ 'CH3COOH', 'CH3COOOH', 'CH3O2', 'CH3OH', 'CH3OOH', 'CH4', 'CH4_CHML', 'CHBR3', 'CL2', 'CL2O2', 'CL',
+ 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD', 'CLOX', 'CLOY', 'CLY', 'CME', 'CMFDQ', 'CMFMC',
+ 'CMFMCDZM', 'CO2', 'CO2_CHML', 'CO', 'CO_CHML', 'CO_CHMP', 'COF2', 'COFCL', 'CONCLD', 'CRESOL',
+ 'DCOCHM', 'DF_ALKNIT', 'DF_ALKOOH', 'DF_BENZOOH', 'DF_BZOOH', 'DF_C2H5OH', 'DF_C2H5OOH', 'DF_C3H7OOH', 'DF_C6H5OOH', 'DF_CH2O',
+ 'DF_CH3CHO', 'DF_CH3CN', 'DF_CH3COCH3', 'DF_CH3COCHO', 'DF_CH3COOH', 'DF_CH3COOOH', 'DF_CH3OH', 'DF_CH3OOH', 'DF_CO', 'DF_EOOH',
+ 'DF_GLYALD', 'DF_H2O2', 'DF_H2SO4', 'DF_HCN', 'DF_HCOOH', 'DF_HNO3', 'DF_HO2NO2', 'DF_HONITR', 'DF_HPALD', 'DF_HYAC', 'DF_HYDRALD',
+ 'DF_IEPOX', 'DF_ISOPNITA', 'DF_ISOPNITB', 'DF_ISOPNO3', 'DF_ISOPNOOH', 'DF_ISOPOOH', 'DF_IVOC', 'DF_MACROOH', 'DF_MEKOOH',
+ 'DF_MPAN', 'DF_NC4CH2OH', 'DF_NC4CHO', 'DF_NH3', 'DF_NH4', 'DF_NO2', 'DF_NO', 'DF_NOA', 'DF_NTERPOOH', 'DF_O3',
+ 'DF_ONITR', 'DF_PAN', 'DF_PHENOOH', 'DF_POOH', 'DF_ROOH', 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3',
+ 'DF_SOAG4', 'DF_SVOC', 'DF_TERP2OOH', 'DF_TERPNIT', 'DF_TERPOOH', 'DF_TERPROD1', 'DF_TERPROD2', 'DF_TOLOOH', 'DF_XOOH', 'DF_XYLENOOH',
+ 'DF_XYLOLOOH', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'DH2O2CHM', 'DHNO3CHM', 'DICARBO2', 'DMS', 'DO3CHM', 'dry_deposition_NHx_as_N',
+ 'dry_deposition_NOy_as_N', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM', 'dst_a1', 'dst_a1DDF', 'dst_a1SFWET', 'dst_a2', 'dst_a2DDF',
+ 'dst_a2SFWET', 'dst_a3', 'dst_a3DDF', 'dst_a3SFWET', 'dst_c1', 'dst_c1DDF', 'dst_c1SFWET', 'dst_c2', 'dst_c2DDF', 'dst_c2SFWET',
+ 'dst_c3', 'dst_c3DDF', 'dst_c3SFWET', 'DTCORE', 'E90', 'e', 'ENEO2', 'EO2', 'EO', 'EOOH', 'EVAPPREC',
+ 'EVAPQZM', 'EVAPTZM', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'F', 'FCTL',
+ 'FLASHFRQ', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FREQI', 'FREQL', 'FREQZM', 'FSDS',
+ 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'FSNTOAC', 'FSUTOA', 'GLYALD', 'GLYOXAL',
+ 'GS_SO2', 'H2402', 'H2', 'H2O2', 'H2O', 'H2SO4', 'H2SO4M_C', 'H2SO4_sfnnuc1', 'H', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22', 'HCL',
+ 'HCL_GAS', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS', 'HO2', 'HO2NO2', 'HOBR', 'HOCH2OO', 'HOCL', 'HONITR',
+ 'HPALD', 'HYAC', 'HYDRALD', 'ICEFRAC', 'IEPOX', 'ISOP', 'ISOPAO2', 'ISOPBO2', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3',
+ 'ISOPNOOH', 'ISOPOOH', 'IVOC', 'IVOC_CHML', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan', 'KVH_CLUBB',
+ 'LANDFRAC', 'LHFLX', 'LNO_COL_PROD', 'LNO_PROD', 'MACR', 'MACRO2', 'MACROOH', 'MALO2', 'MASS', 'MCO3', 'MDIALO2',
+ 'MEG_BCARY', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_C2H4', 'MEG_C2H5OH', 'MEG_C2H6', 'MEG_C3H6', 'MEG_C3H8', 'MEG_CH2O',
+ 'MEG_CH3CHO', 'MEG_CH3COCH3', 'MEG_CH3COOH', 'MEG_CH3OH', 'MEG_CO', 'MEG_HCN', 'MEG_HCOOH', 'MEG_ISOP', 'MEG_MTERP', 'MEG_TOLUENE',
+ 'MEK', 'MEKO2', 'MEKOOH', 'MPAN', 'MTERP', 'MVK', 'N2D', 'N2O5', 'N2O', 'N2O_CHML', 'N2p', 'N', 'NC4CH2OH',
+ 'NC4CHO', 'ncl_a1', 'ncl_a1DDF', 'ncl_a1SFWET', 'ncl_a2', 'ncl_a2DDF', 'ncl_a2SFWET', 'ncl_a3', 'ncl_a3DDF', 'ncl_a3SFWET', 'ncl_c1',
+ 'ncl_c1DDF', 'ncl_c1SFWET', 'ncl_c2', 'ncl_c2DDF', 'ncl_c2SFWET', 'ncl_c3', 'ncl_c3DDF', 'ncl_c3SFWET', 'NDEP', 'NH3', 'NH4', 'NH_50',
+ 'NH_5', 'NHDEP', 'NITROP_PD', 'NO2', 'NO2_CLXF', 'NO3', 'NO', 'NOA', 'NOp', 'NOX', 'NOY', 'Np', 'NTERPO2', 'NTERPOOH',
+ 'num_a1', 'num_a1_CLXF', 'num_a1DDF', 'num_a2', 'num_a2_CLXF', 'num_a2DDF', 'num_a2_sfnnuc1', 'num_a3', 'num_a3DDF', 'num_a4',
+ 'num_a4DDF', 'num_c1', 'num_c1DDF', 'num_c2', 'num_c2DDF', 'num_c3', 'num_c3DDF', 'num_c4', 'num_c4DDF', 'NUMLIQ', 'O1D', 'O2_1D',
+ 'O2_1S', 'O2', 'O2p', 'O3', 'O3_CHML', 'O3_CHMP', 'O3_Loss', 'O3_Prod', 'O', 'OCLO', 'OCS', 'OddOx_CLOxBROx_Loss',
+ 'OddOx_HOx_Loss', 'OddOx_Loss_Tot', 'OddOx_NOx_Loss', 'OddOx_Ox_Loss', 'OddOx_Prod_Tot', 'OH', 'OMEGA', 'OMEGAT', 'ONITR', 'Op',
+ 'PAN', 'PBLH', 'PBZNIT', 'PDELDRY', 'PHENO2', 'PHENO', 'PHENOL', 'PHENOOH', 'PHIS', 'PM25', 'PO2', 'pom_a1', 'pom_a1DDF', 'pom_a1SFWET',
+ 'pom_a4', 'pom_a4DDF', 'pom_a4SFWET', 'pom_c1', 'pom_c1DDF', 'pom_c1SFWET', 'pom_c4', 'pom_c4DDF', 'pom_c4SFWET',
+ 'POOH', 'PRECC', 'PRECT', 'PS', 'PSL', 'PTEQ', 'PTTEND', 'Q', 'QFLX', 'QRAIN', 'QREFHT', 'QRL', 'QRLC', 'QRS',
+ 'QRSC', 'QSNOW', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RELHUM', 'r_GLYOXAL_aer',
+ 'r_het10', 'r_het11', 'r_het12', 'r_het13', 'r_het15', 'r_het16', 'r_het17', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5',
+ 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_HO2_O3', 'RHREFHT', 'r_jsoa1_a1', 'r_jsoa1_a2', 'r_jsoa2_a1', 'r_jsoa2_a2',
+ 'r_jsoa3_a1', 'r_jsoa3_a2', 'r_jsoa4_a1', 'r_jsoa4_a2', 'r_jsoa5_a1', 'r_jsoa5_a2', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O',
+ 'r_OH_O3', 'r_OH_O', 'ROOH', 'RO2', 'RO2_NO_sum', 'RO2_NO3_sum', 'RO2_HO2_sum', 'RO2_RO2_sum', 'RCO2_NO2_sum',
+ 'S', 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP', 'SF6', 'SFbc_a4', 'SFBCARY',
+ 'SFBENZENE', 'SFBIGALK', 'SFBIGENE', 'SFC2H2', 'SFC2H4', 'SFC2H5OH', 'SFC2H6', 'SFC3H6', 'SFC3H8', 'SFCH2O', 'SFCH3CHO', 'SFCH3CN',
+ 'SFCH3COCH3', 'SFCH3COCHO', 'SFCH3COOH', 'SFCH3OH', 'SFCO', 'SFDMS', 'SFdst_a1', 'SFdst_a2', 'SFdst_a3', 'SFGLYALD', 'SFHCN', 'SFHCOOH',
+ 'SFISOP', 'SFIVOC', 'SFMEK', 'SFMTERP', 'SFncl_a1', 'SFncl_a2', 'SFncl_a3', 'SFNH3', 'SFNO2', 'SFNO', 'SFnum_a1', 'SFnum_a2',
+ 'SFnum_a3', 'SFpom_a4', 'SFSO2', 'SFso4_a1', 'SFso4_a2', 'SFSVOC', 'SFTOLUENE', 'SFXYLENES', 'SHFLX', 'SO2',
+ 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SO2_XFRC', 'SO3', 'so4_a1', 'so4_a1_CHMP', 'so4_a1_CLXF', 'so4_a1DDF', 'so4_a1_sfgaex1', 'so4_a1SFWET',
+ 'so4_a2', 'so4_a2_CHMP', 'so4_a2_CLXF', 'so4_a2DDF', 'so4_a2_sfgaex1', 'so4_a2_sfnnuc1', 'so4_a2SFWET', 'so4_a3',
+ 'so4_a3DDF', 'so4_a3_sfgaex1', 'so4_a3SFWET', 'so4_c1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_c1SFWET', 'so4_c2', 'so4_c2AQH2SO4',
+ 'so4_c2AQSO4', 'so4_c2DDF', 'so4_c2SFWET', 'so4_c3', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_c3SFWET', 'SO', 'soa1_a1',
+ 'soa1_a1_CHML', 'soa1_a1DDF', 'soa1_a1_sfgaex1', 'soa1_a1SFWET', 'soa1_a2', 'soa1_a2_CHML', 'soa1_a2DDF',
+ 'soa1_a2_sfgaex1', 'soa1_a2SFWET', 'soa1_c1', 'soa1_c1DDF', 'soa1_c1SFWET', 'soa1_c2', 'soa1_c2DDF', 'soa1_c2SFWET', 'soa2_a1', 'soa2_a1_CHML',
+ 'soa2_a1DDF', 'soa2_a1_sfgaex1', 'soa2_a1SFWET', 'soa2_a2', 'soa2_a2_CHML', 'soa2_a2DDF', 'soa2_a2_sfgaex1',
+ 'soa2_a2SFWET', 'soa2_c1', 'soa2_c1DDF', 'soa2_c1SFWET', 'soa2_c2', 'soa2_c2DDF', 'soa2_c2SFWET', 'soa3_a1', 'soa3_a1_CHML',
+ 'soa3_a1DDF', 'soa3_a1_sfgaex1', 'soa3_a1SFWET', 'soa3_a2', 'soa3_a2_CHML', 'soa3_a2DDF', 'soa3_a2_sfgaex1', 'soa3_a2SFWET',
+ 'soa3_c1', 'soa3_c1DDF', 'soa3_c1SFWET', 'soa3_c2', 'soa3_c2DDF', 'soa3_c2SFWET', 'soa4_a1', 'soa4_a1_CHML', 'soa4_a1DDF',
+ 'soa4_a1_sfgaex1', 'soa4_a1SFWET', 'soa4_a2', 'soa4_a2_CHML', 'soa4_a2DDF', 'soa4_a2_sfgaex1', 'soa4_a2SFWET', 'soa4_c1',
+ 'soa4_c1DDF', 'soa4_c1SFWET', 'soa4_c2', 'soa4_c2DDF', 'soa4_c2SFWET', 'soa5_a1', 'soa5_a1_CHML', 'soa5_a1DDF', 'soa5_a1_sfgaex1',
+ 'soa5_a1SFWET', 'soa5_a2', 'soa5_a2_CHML', 'soa5_a2DDF', 'soa5_a2_sfgaex1', 'soa5_a2SFWET', 'soa5_c1', 'soa5_c1DDF',
+ 'soa5_c1SFWET', 'soa5_c2', 'soa5_c2DDF', 'soa5_c2SFWET', 'SOAG0', 'SOAG0_CHMP', 'SOAG1', 'SOAG1_CHMP', 'SOAG2', 'SOAG2_CHMP',
+ 'SOAG3', 'SOAG3_CHMP', 'SOAG4', 'SOAG4_CHMP', 'SOLIN', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST', 'ST80_25', 'SVOC', 'SVOC_CHML',
+ 'T', 'TAQ', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY', 'TBRY', 'TCLY', 'TEPOMUC', 'TERP2O2', 'TERP2OOH',
+ 'TERPNIT', 'TERPO2', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TGCLDIWP', 'TGCLDLWP', 'THzm', 'TMDMS', 'TMOCS', 'TMQ', 'TMSO2',
+ 'TMso4_a1', 'TMso4_a2', 'TMso4_a3', 'TOLO2', 'TOLOOH', 'TOLUENE', 'TOT_CLD_VISTAU', 'TOTH', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TROP_P',
+ 'TROP_T', 'TROP_Z', 'TS', 'TSMN:M', 'TSMX:X', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO', 'TTGWSPEC',
+ 'U10', 'U', 'UTGWORO', 'UTGWSPEC', 'UU', 'UVzm', 'UWzm', 'Uzm', 'V', 'VD01', 'VEL_NAT2', 'VTHzm', 'VV', 'Vzm', 'WD_ALKNIT', 'WD_ALKOOH', 'WD_BENZOOH', 'WD_BRONO2',
+ 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO', 'WD_CH3CN', 'WD_CH3COCH3', 'WD_CH3COCHO',
+ 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3OH', 'WD_CH3OOH', 'WD_CLONO2', 'WD_COF2', 'WD_COFCL', 'WD_EOOH', 'WD_GLYALD', 'WD_H2O2', 'WD_H2SO4',
+ 'WD_HBR', 'WD_HCL', 'WD_HCN', 'WD_HCOOH', 'WD_HF', 'WD_HNO3', 'WD_HO2NO2', 'WD_HOBR', 'WD_HOCL', 'WD_HONITR', 'WD_HPALD', 'WD_HYAC',
+ 'WD_HYDRALD', 'WD_IEPOX', 'WD_ISOPNITA', 'WD_ISOPNITB', 'WD_ISOPNO3', 'WD_ISOPNOOH', 'WD_ISOPOOH', 'WD_IVOC', 'WD_MACR', 'WD_MACROOH',
+ 'WD_MEKOOH', 'WD_MVK', 'WD_NC4CH2OH', 'WD_NC4CHO', 'WD_NDEP', 'WD_NH3', 'WD_NH4', 'WD_NHDEP', 'WD_NOA', 'WD_NTERPOOH',
+ 'WD_ONITR', 'WD_PHENOOH', 'WD_POOH', 'WD_ROOH', 'WD_SO2', 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC',
+ 'WD_TERP2OOH', 'WD_TERPNIT', 'WD_TERPOOH', 'WD_TERPROD1', 'WD_TERPROD2', 'WD_TOLOOH', 'WD_XOOH', 'WD_XYLENOOH', 'WD_XYLOLOOH',
+ 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'Wzm', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
+ 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU'
+
+
+
+ 'ACTNL', 'ACTREL', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BUTGWSPEC',
+ 'CDNUMC', 'CLDICE', 'CLDLIQ', 'CLDTOT', 'CLOUD', 'CMFMC', 'CMFMCDZM', 'FCTL', 'FLDS', 'FLDSC', 'FLNR', 'FLNS', 'FLNSC',
+ 'FLNT', 'FLNTC', 'FLUT', 'FLUTC', 'FSDS', 'FSDSC', 'FSNR', 'FSNS', 'FSNSC', 'FSNTOA', 'FSNTOAC', 'LHFLX', 'MASS', 'O3', 'OMEGA',
+ 'OMEGA500', 'PBLH', 'PDELDRY', 'PM25_SRF', 'PRECC', 'PRECT', 'PS', 'PSL', 'Q', 'QREFHT', 'QSNOW', 'RELHUM', 'RHREFHT', 'SHFLX',
+ 'SOLIN', 'SOLLD', 'SOLSD', 'T', 'T500', 'T700', 'T850', 'TAUBLJX', 'TAUBLJY', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY',
+ 'TGCLDIWP', 'TGCLDLWP', 'TMQ', 'TREFHT', 'TREFHTMN', 'TREFHTMX', 'TS', 'TSMN:M', 'TSMX:X', 'U', 'U10', 'UTGWORO', 'UTGWSPEC',
+ 'V', 'Z3', 'Z500'
+
+
+ 'O3_SRF','TS','PM25_SRF','NO2_SRF'
+
+
+ 'MSKtem','PS','PSL','VTHzm','UVzm','UWzm','Uzm','Vzm','THzm','Wzm','PHIS'
+
+
+ 'PS', 'PSL', 'U', 'V', 'T', 'Z3', 'PHIS', 'FRONTGF:I', 'OMEGA', 'O3', 'REFF_AERO', 'SAD_AERO',
+ 'so4_a1', 'so4_a2', 'so4_a3', 'AODVISstdn', 'NITROP_PD', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'QRS_TOT', 'CO2', 'H', 'NO', 'O'
+
+
+
+ 'O3_Prod = NO_HO2 + CH3O2_NO + PO2_NO + CH3CO3_NO + C2H5O2_NO + .92*ISOPAO2_NO + .92*ISOPBO2_NO + MACRO2_NOa + MCO3_NO + C3H7O2_NO + RO2_NO + XO2_NO + .9*TOLO2_NO +',
+ '.9*PHENO2_NO + .9*C6H5O2_NO + .9*BENZO2_NO + .9*MALO2_NO + .9*BZOO_NO + .9*ACBZO2_NO + .9*DICARBO2_NO + .9*MDIALO2_NO + .9*XYLOLO2_NO + .9*XYLENO2_NO + TERPO2_NO +',
+ 'TERP2O2_NO + NTERPO2_NO + ALKO2_NO + ENEO2_NO + EO2_NO + MEKO2_NO + HOCH2OO_NO + jonitr',
+ 'O3_Loss = O1D_H2O + OH_O3 + HO2_O3 + H_O3 + C3H6_O3 + .9*ISOP_O3 + C2H4_O3 + .8*MVK_O3 + 0.8*MACR_O3 + MTERP_O3 + BCARY_O3',
+ 'RO2_NO_sum = NO_HO2 + CH3O2_NO + HOCH2OO_NO + EO2_NO + C2H5O2_NO + CH3CO3_NO + C3H7O2_NO + PO2_NO + RO2_NO + ENEO2_NO + ENEO2_NOb + MEKO2_NO + MACRO2_NOa + MACRO2_NOb +',
+ 'MCO3_NO + ISOPAO2_NO + ISOPBO2_NO + ALKO2_NO + ALKO2_NOb + XO2_NO + TOLO2_NO + PHENO2_NO + C6H5O2_NO + BENZO2_NO + MALO2_NO + BZOO_NO + ACBZO2_NO + DICARBO2_NO +',
+ 'MDIALO2_NO + XYLOLO2_NO + XYLENO2_NO + TERPO2_NO + TERP2O2_NO + NTERPO2_NO',
+ 'RO2_NO3_sum = NO3_HO2 + MACRO2_NO3 + MCO3_NO3 + ISOPAO2_NO3 + ISOPBO2_NO3 + XO2_NO3',
+ 'RO2_HO2_sum = CH3O2_HO2 + HOCH2OO_HO2 + EO2_HO2 + C2H5O2_HO2 + CH3CO3_HO2 + C3H7O2_HO2 + PO2_HO2 + RO2_HO2 + MEKO2_HO2 + MACRO2_HO2 + ISOPAO2_HO2 + ISOPBO2_HO2 + ALKO2_HO2 +',
+ 'XO2_HO2 + TOLO2_HO2 + PHENO2_HO2 + C6H5O2_HO2 + BENZO2_HO2 + MALO2_HO2 + BZOO_HO2 + ACBZO2_HO2 + DICARBO2_HO2 + MDIALO2_HO2 + XYLOLO2_HO2 + XYLENO2_HO2 + TERPO2_HO2 +',
+ 'TERP2O2_HO2 + NTERPO2_HO2',
+ 'RO2_RO2_sum = CH3O2_CH3O2a + CH3O2_CH3O2b + C2H5O2_CH3O2 + C2H5O2_C2H5O2 + CH3CO3_CH3O2 + CH3CO3_CH3CO3 + C3H7O2_CH3O2 + RO2_CH3O2 + MACRO2_CH3O2 + MACRO2_CH3CO3 + MCO3_CH3O2 +',
+ ' MCO3_CH3CO3 + MCO3_MCO3 + ISOPAO2_CH3O2 + ISOPBO2_CH3O2 + ISOPAO2_CH3CO3 + ISOPBO2_CH3CO3 + XO2_CH3O2 + XO2_CH3CO3',
+ 'RCO2_NO2_sum = CH3CO3_NO2 + MCO3_NO2',
+ 'OddOx_Ox_Loss = 2.0*O_O3 + O1D_H2O',
+ 'OddOx_HOx_Loss = HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3',
+ 'OddOx_NOx_Loss = 2.0*NO2_O + 2.0*jno3_b',
+ 'OddOx_CLOxBROx_Loss = 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb + 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Loss_Tot = 2.0*O_O3 + O1D_H2O + HO2_O + HO2_O3 + OH_O + OH_O3 + H_O3 + 2.0*NO2_O + 2.0*jno3_b + 2.0*CLO_O + 2.0*jcl2o2 + 2.0*CLO_CLOa + 2.0*CLO_CLOb + 2.0*BRO_CLOb +',
+ ' 2.0*BRO_CLOc + 2.0*BRO_BRO + 2.0*BRO_O + CLO_HO2 + BRO_HO2',
+ 'OddOx_Prod_Tot = 2.0*jo2_a + 2.0*jo2_b'
+
+
+.true.
+
+
diff --git a/bld/perl5lib/Build/ChemNamelist.pm b/bld/perl5lib/Build/ChemNamelist.pm
index 3584b98be0..5f95ad9f2f 100644
--- a/bld/perl5lib/Build/ChemNamelist.pm
+++ b/bld/perl5lib/Build/ChemNamelist.pm
@@ -65,13 +65,37 @@ sub set_dep_lists
}
if ($print_lvl>=2) {print "Chemistry species : @species_list \n" ;}
- $gas_wetdep_list = get_gas_wetdep_list( $cfgdir, $print_lvl, @species_list );
+ if (!defined $nl->get_value('gas_wetdep_list')) {
+ $gas_wetdep_list = get_gas_wetdep_list( $cfgdir, $print_lvl, @species_list );
+ } else {
+ $gas_wetdep_list = $nl->get_value('gas_wetdep_list');
+ $gas_wetdep_list = filter_dep_list( $gas_wetdep_list, $print_lvl, @species_list );
+ if ($print_lvl>=2) {print " gas wet dep list : $gas_wetdep_list \n" ;}
+ }
- $aer_wetdep_list = get_aer_wetdep_list( $cfgdir, $print_lvl, @species_list );
+ if (!defined $nl->get_value('aer_wetdep_list')) {
+ $aer_wetdep_list = get_aer_wetdep_list( $cfgdir, $print_lvl, @species_list );
+ } else {
+ $aer_wetdep_list = $nl->get_value('aer_wetdep_list');
+ $aer_wetdep_list = filter_dep_list( $aer_wetdep_list, $print_lvl, @species_list );
+ if ($print_lvl>=2) {print " aer wet dep list : $aer_wetdep_list \n" ;}
+ }
- $gas_drydep_list = get_gas_drydep_list( $cfgdir, $print_lvl, @species_list );
+ if (!defined $nl->get_value('drydep_list')) {
+ $gas_drydep_list = get_gas_drydep_list( $cfgdir, $print_lvl, @species_list );
+ } else {
+ $gas_drydep_list = $nl->get_value('drydep_list');
+ $gas_drydep_list = filter_dep_list( $gas_drydep_list, $print_lvl, @species_list );
+ if ($print_lvl>=2) {print " dry dep list : $gas_drydep_list \n" ;}
+ }
- $aer_drydep_list = get_aer_drydep_list( $cfgdir, $print_lvl, @species_list );
+ if (!defined $nl->get_value('aer_drydep_list')) {
+ $aer_drydep_list = get_aer_drydep_list( $cfgdir, $print_lvl, @species_list );
+ } else {
+ $aer_drydep_list = $nl->get_value('aer_drydep_list');
+ $aer_drydep_list = filter_dep_list( $aer_drydep_list, $print_lvl, @species_list );
+ if ($print_lvl>=2) {print " aer dry dep list : $aer_drydep_list \n" ;}
+ }
# set solubility factors for aerosols
if (length($aer_wetdep_list)>2){
@@ -276,6 +300,32 @@ sub get_dep_list
return ($list);
}
+#-------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
+sub filter_dep_list
+{
+ my ( $input_list, $print_lvl, @species_list ) = @_;
+
+ my @master_list = split( ('\s+|\s*,+\s*'), $input_list);
+
+ my $list = '';
+ my $first = 1; my $pre = "";
+ foreach my $name (sort @species_list) {
+ foreach my $item (@master_list) {
+ $item =~ s/['"]//g; #"'
+ if ($name eq $item) {
+ $list .= $pre . quote_string($name) ;
+ if ($first) { $pre = ","; $first = 0; }
+ }
+ }
+ }
+
+ if ( length($list)<1 ) {$list = quote_string(' ') ;}
+
+ return ($list);
+
+}
+
#-------------------------------------------------------------------------------
sub read_master_list_file
{
diff --git a/cime_config/buildcpp b/cime_config/buildcpp
index 7b8f9a8d53..eeb0ab57ad 100644
--- a/cime_config/buildcpp
+++ b/cime_config/buildcpp
@@ -40,6 +40,7 @@ def buildcpp(case):
compiler = case.get_value("COMPILER") # for chem preprocessor
nthrds_atm = case.get_value("NTHRDS_ATM")
cam_config_opts = case.get_value("CAM_CONFIG_OPTS")
+ clm_config_opts = case.get_value("CLM_CONFIG_OPTS")
# level information for CAM is part of the atm grid name - and must be stripped out
nlev = ''
@@ -93,6 +94,14 @@ def buildcpp(case):
else:
config_opts += ["-ocn", comp_ocn]
+ if '-chem geoschem' in cam_config_opts:
+ if 'clm4_0' in clm_config_opts:
+ config_opts += ["-clm_vers", "CLM4.0"]
+ elif 'clm4_5' in clm_config_opts:
+ config_opts += ["-clm_vers", "CLM4.5"]
+ elif 'clm5_0' in clm_config_opts:
+ config_opts += ["-clm_vers", "CLM5.0"]
+
# Add user options.
config_opts += cam_config_opts.split(" ")
diff --git a/cime_config/buildnml b/cime_config/buildnml
index b12f690263..cb3a9412e9 100755
--- a/cime_config/buildnml
+++ b/cime_config/buildnml
@@ -36,6 +36,7 @@ def buildnml(case, caseroot, compname):
din_loc_root = case.get_value("DIN_LOC_ROOT")
atm_ncpl = case.get_value("ATM_NCPL")
CAM_NAMELIST_OPTS = case.get_value("CAM_NAMELIST_OPTS")
+ CAM_CONFIG_OPTS = case.get_value("CAM_CONFIG_OPTS")
CAM_NML_USE_CASE = case.get_value("CAM_NML_USE_CASE")
DEBUG = case.get_value("DEBUG")
NINST_ATM = case.get_value("NINST_ATM")
@@ -175,17 +176,52 @@ def buildnml(case, caseroot, compname):
rc, out, err = run_cmd(cmd, from_dir=camconf)
expect(rc==0,"Command %s failed rc=%d\nout=%s\nerr=%s"%(cmd,rc,out,err))
+ # -----------------------------------------------------
+ # For GEOS-Chem / HEMCO only:
+ # Copy input files from storage location into Buildconf/camconf
+ # This only needs to be done once
+ # -----------------------------------------------------
+
+ # We use this to figure out if we are using the GEOS-Chem chemistry
+ # mechanism.
+ # Might have to do something else with HEMCO_CESM?
+ if '-chem geoschem' in CAM_CONFIG_OPTS:
+ geoschem_src = os.path.join(srcroot, "src/chemistry/geoschem/geoschem_src")
+ if not os.path.isdir(geoschem_src):
+ raise SystemExit("ERROR: Did not find path to GEOS-Chem source code at {:s}".format(geoschem_src))
+ if os.path.isdir(rundir):
+ for fileName in ['species_database.yml', 'input.geos',
+ 'HISTORY.rc', 'HEMCO_Config.rc', 'HEMCO_Diagn.rc']:
+ file1 = os.path.join(geoschem_src, "run/CESM", fileName)
+ file2 = os.path.join(camconf, fileName)
+ if not os.path.exists(file2):
+ logger.info("CAM namelist one-time copy: file1 %s file2 %s ", file1, file2)
+ shutil.copy(file1,file2)
+
# -----------------------------------------------------
# copy resolved namelist, atm_in, to rundir
# -----------------------------------------------------
if os.path.isdir(rundir):
- file1 = os.path.join(camconf, "atm_in")
- file2 = os.path.join(rundir, "atm_in")
- if ninst > 1:
- file2 += inst_string
- logger.info("CAM namelist copy: file1 %s file2 %s ", file1, file2)
- shutil.copy(file1,file2)
+ for fileName in ['atm_in', 'species_database.yml', 'input.geos',
+ 'HISTORY.rc', 'HEMCO_Config.rc', 'HEMCO_Diagn.rc']:
+ file1 = os.path.join(camconf, fileName)
+ file2 = os.path.join(rundir, fileName)
+ if fileName == 'atm_in' and ninst > 1:
+ file2 += inst_string
+ if os.path.exists(file1) or fileName == 'atm_in':
+ logger.info("CAM namelist copy: file1 %s file2 %s ", file1, file2)
+ shutil.copy(file1,file2)
+
+ if fileName == 'input.geos':
+ # We need to replace the simulation name by "Standard"
+ # in input.geos
+ # This should already be the case, but just making sure
+ with open(file2, 'r') as file:
+ inputGC = file.read()
+ inputGC = inputGC.replace('{SIM}', 'Standard')
+ with open(file2, 'w') as file:
+ file.write(inputGC)
# -----------------------------------------------------
# copy drv_flds_in to rundir if it does not exist
diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml
index 7873931219..fc0c1a22d3 100644
--- a/cime_config/config_component.xml
+++ b/cime_config/config_component.xml
@@ -8,10 +8,10 @@
CAM
===============
-->
- CAM cam6 physics:
- CAM cam5 physics:
- CAM cam4 physics:
- CAM simplified and non-versioned physics :
+ CAM cam6 physics:
+ CAM cam5 physics:
+ CAM cam4 physics:
+ CAM simplified and non-versioned physics :
CAM stand-alone single column mode -- need to define usermods directory with IOP settings:
- CAM winds and temperature nudged towards prescribed meteorology:
+ CAM winds and temperature nudged towards prescribed meteorology:
CAM-Chem troposphere/stratosphere chem with simplified volatility basis set SOA scheme and modal aersols :
+ GEOS-Chem troposphere/stratosphere chemistry :
CAM-Chem troposphere/stratosphere chem with simplified volatility basis set SOA scheme and fire emissons :
CAM CLUBB - turned on by default in CAM60:
- CAM-Chem troposphere/stratosphere chem with extended volatility basis set SOA scheme and modal aersols :
+ CAM-Chem troposphere/stratosphere chem with extended volatility basis set SOA scheme and modal aerosols :
CAM CO2 ramp:
CAM super-parameterized CAM one moment SAM microphysics
CAM super-parameterized CAM one moment SAM microphysics using CLUBB
CAM super-parameterized CAM double moment m2005 SAM microphysics
+ CAM super-parameterized CAM double moment m2005 SAM microphysics using GEOS-Chem
CAM super-parameterized CAM double moment m2005 SAM microphysics using CLUBB
CAM tropospheric chemistry with bulk aerosols:
@@ -65,6 +67,7 @@
CAM dry adiabatic baroclinic instability (Polvani et al., 2004):
CAM moist Held-Suarez forcing (Thatcher and Jablonowski, 2016):
CAM dry Held-Suarez forcing (Held and Suarez (1994)):
+ CAM with GEOS-Chem dycore test:
CAM moist dynamical core test with Ullrich et al. (2014) baroclinic wave IC, Kessler physics and terminator chemistry:
-chem trop_strat_mam4_vbs
+ -chem geoschem_mam4
-chem trop_strat_mam4_vbsext
-clubb_sgs
-dyn eul -scam
-rad camrt -chem none -spcam_nx 32 -spcam_ny 1 -spcam_dx 4000 -spcam_dt 20 -phys spcam_sam1mom
-rad camrt -chem none -spcam_nx 32 -spcam_ny 1 -spcam_dx 4000 -spcam_dt 20 -phys spcam_sam1mom -spcam_clubb_sgs
-rad rrtmg -chem trop_mam3 -spcam_nx 32 -spcam_ny 1 -spcam_dx 4000 -spcam_dt 20 -phys spcam_m2005
+ -rad rrtmg -chem geoschem_mam3 -spcam_nx 32 -spcam_ny 1 -spcam_dx 4000 -spcam_dt 20 -phys spcam_m2005
-rad rrtmg -chem trop_mam3 -spcam_nx 32 -spcam_ny 1 -spcam_dx 4000 -spcam_dt 20 -phys spcam_m2005 -spcam_clubb_sgs
-chem trop_mozart
@@ -138,15 +143,16 @@
-chem waccm_tsmlt_mam4
-waccmx
-ionosphere wxie
- -chem waccm_ma
- -chem waccm_mad
- -chem waccm_mad
+ -chem waccm_ma
+ -chem waccm_mad
+ -chem waccm_mad
- -offline_dyn
- -nlev 56
- -nlev 56
- -nlev 88
- -nlev 145
+ -offline_dyn
+ -nlev 56
+ -nlev 56
+ -nlev 56
+ -nlev 88
+ -nlev 145
-analytic_ic
@@ -154,6 +160,9 @@
-phys adiabatic
-phys tj2016 -analytic_ic
-phys held_suarez
+ -chem geoschem
+ -chem geoschem_mam4
+ -phys held_suarez -chem geoschem -analytic_ic
-phys kessler -chem terminator -analytic_ic
@@ -191,11 +200,17 @@
2000_cam4_trop_chem
waccmxie_ma_2000_cam4
+ geoschem
+ geoschem
+ geoschem
+ geoschem_baro_moist
+
2000_cam6
waccm_tsmlt_2000_cam6
waccm_ma_2000_cam6
waccm_sc_2000_cam6
2000_trop_strat_vbs_cam6
+ 2000_geoschem
aquaplanet_cam4
aquaplanet_cam4
@@ -208,6 +223,7 @@
2010_trop_strat_vbs_cam6
waccm_tsmlt_2010_cam6
waccm_sc_2010_cam6
+ 2010_geoschem
1850-2005_cam5
1850-2005_cam4
@@ -225,9 +241,19 @@
hist_trop_strat_vbs_cam6
hist_trop_strat_vbsext_cam6
hist_trop_strat_vbsfire_cam6
+ hist_geoschem
1850-PD_cam5
+ ssp126_cam6
+ ssp245_cam6
+ ssp370_cam6
+ ssp585_cam6
+ waccm_tsmlt_ssp126_cam6
+ waccm_tsmlt_ssp245_cam6
+ waccm_tsmlt_ssp370_cam6
+ waccm_tsmlt_ssp534_cam6
+ waccm_tsmlt_ssp585_cam6
2005-2100_cam4_rcp26
2005-2100_cam4_rcp45
2005-2100_cam4_rcp45_bgc
@@ -240,13 +266,15 @@
2006-2100_cam5_rcp60
2006-2100_cam5_rcp85
- sd_waccmx_ma_cam4
- sd_waccm_tsmlt_cam6
- sd_waccm_ma_cam6
- sd_waccm_ma_cam6
- sd_waccm_ma_cam4
- sd_trop_strat_vbs_cam6
- sd_cam6
+ sd_waccmx_ma_cam4
+ sd_waccmx_ma_cam4
+ sd_waccm_tsmlt_cam6
+ sd_waccm_ma_cam6
+ sd_waccm_mad_cam6
+ sd_waccm_ma_cam4
+ sd_trop_strat_vbs_cam6
+ sd_geoschem
+ sd_cam6
dabi_p2004
held_suarez_1994
@@ -255,6 +283,7 @@
scam_arm97
+
run_component_cam
env_run.xml
@@ -278,17 +307,18 @@
scenario_ghg='RAMP_CO2_ONLY'ramp_co2_annual_rate=1
co2vmr=1138.8e-6
- flbc_cycle_yr=1
- flbc_file='$DIN_LOC_ROOT/atm/waccm/lb/LBC_CMIP6abrupt4xCO2_cyclicalYear1_0p5degLat_c180929.nc'
+ flbc_cycle_yr=1
+ flbc_file='$DIN_LOC_ROOT/atm/waccm/lb/LBC_CMIP6abrupt4xCO2_cyclicalYear1_0p5degLat_c180929.nc'
+ nlte_limit_co2=.true.
ncdata='$DIN_LOC_ROOT/atm/waccm/ic/b.e21.BW1850.f09_g17.CMIP6-piControl.001.cam.i.0070-01-01.abrupt4xCO2_c181003.nc'
- nlte_limit_co2=.true.
+ ncdata='$DIN_LOC_ROOT/atm/waccm/ic/b.e20.BWma1850.f19_g17.release_cesm2_1_0.020.cam.i.0289-01-01.abrupt4xCO2_c190426.nc'
flbc_type='SERIAL'
flbc_file='$DIN_LOC_ROOT/atm/waccm/lb/LBC_CMIP6_1pctCO2_y1-165_GlobAnnAvg_0p5degLat_c180929.nc'
flbc_list='CO2','CH4','N2O','CFC11eq','CFC12'
- flbc_type='SERIAL'
- flbc_cycle_yr=-1
- flbc_file='$DIN_LOC_ROOT/atm/waccm/lb/LBC_CMIP6_1pctCO2ramp_y1-165_0p5degLat_c180930.nc'
- nlte_limit_co2=.true.
+ flbc_type='SERIAL'
+ flbc_cycle_yr=-1
+ nlte_limit_co2=.true.
+ flbc_file='$DIN_LOC_ROOT/atm/waccm/lb/LBC_CMIP6_1pctCO2ramp_y1-165_0p5degLat_c180930.nc'
co2_cycle_rad_passive=.true.
run_component_cam
diff --git a/cime_config/config_compsets.xml b/cime_config/config_compsets.xml
index 5e07c0c925..ece974b5b7 100644
--- a/cime_config/config_compsets.xml
+++ b/cime_config/config_compsets.xml
@@ -68,6 +68,13 @@
+
+ FKESSLER
+ 2000_CAM%KESSLER_SLND_SICE_SOCN_SROF_SGLC_SWAV
+
+
+
+
FSCAM
2000_CAM60%SCAM_CLM50%SP_CICE%PRES_DOCN%DOM_SROF_SGLC_SWAV
@@ -150,10 +157,6 @@
2000_CAM%TJ16_SLND_SICE_SOCN_SROF_SGLC_SWAV
-
- FKESSLER
- 2000_CAM%KESSLER_SLND_SICE_SOCN_SROF_SGLC_SWAV
-
@@ -215,12 +218,12 @@
FCSD
- SDYN_CAM60%CCTS_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+ HIST_CAM60%CCTS%SDYN_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
FSD
- SDYN_CAM60_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+ HIST_CAM60%SDYN_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
@@ -266,40 +269,41 @@
+
+ FWmaHIST_BGC
+ HIST_CAM60%WCCM_CLM50%BGC-CROP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
+
+
+
+ FW1850
+ 1850_CAM60%WCTS_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
+
+
+
+
+
+
+
FWsc2010climo
2010_CAM60%WCSC_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
-
FWsc2000climo
2000_CAM60%WCSC_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
-
FWsc1850
1850_CAM60%WCSC_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
-
FWscHIST
HIST_CAM60%WCSC_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
-
-
- FW1850
- 1850_CAM60%WCTS_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
-
-
-
-
-
-
-
FW2000climo
2000_CAM60%WCTS_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
@@ -312,7 +316,7 @@
FWSD
- SDYN_CAM60%WCTS_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+ HIST_CAM60%WCTS%SDYN_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
@@ -327,7 +331,7 @@
FWmaSD
- SDYN_CAM60%WCCM_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+ HIST_CAM60%WCCM%SDYN_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
@@ -337,7 +341,7 @@
FWmadSD
- SDYN_CAM60%WCMD_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+ HIST_CAM60%WCMD%SDYN_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
@@ -346,7 +350,7 @@
FW4madSD
- SDYN_CAM40%WCMD_CLM40%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
+ HIST_CAM40%WCMD%SDYN_CLM40%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
@@ -356,13 +360,11 @@
FX2000
2000_CAM40%WXIE_CLM40%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
-
FXHIST
HIST_CAM40%WXIE_CLM40%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
-
@@ -372,13 +374,44 @@
FXSD
- SDYN_CAM40%WXIE_CLM40%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
-
+ HIST_CAM40%WXIE%SDYN_CLM40%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
FXmadSD
- SDYN_CAM40%WXIED_CLM40%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
+ HIST_CAM40%WXIED%SDYN_CLM40%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
+
+
+
+
+
+
+
+
+
+
+ FSPCAMM_GC
+ 2000_CAM%SPCAMMGC_CLM50%SP_CICE%PRES_DOCN%DOM_RTM_SGLC_SWAV
+
+
+
+ FC2000climo_GC
+ 2000_CAM60%GC_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
+
+
+
+ FC2010climo_GC
+ 2010_CAM60%GC_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
+
+
+
+ FCHIST_GC
+ HIST_CAM60%GC_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV
+
+
+
+ FCSD_GC
+ HIST_CAM60%GC%SDYN_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
@@ -389,16 +422,19 @@
1997-06-18
1979-01-01
+ 1950-01-01
2000-01-01
- 1979-01-01
- 1950-01-01
+ 2005-01-01
+ 1850-01-01
1995-01-01
1995-01-01
1995-01-01
2005-01-01
- 2005-01-01
- 2010-01-01
- 2000-01-01
+ 2005-01-01
+ 2010-01-01
+ 1980-01-01
+ 1980-01-01
+ 2000-01-01
2004-01-01
1950-01-01
@@ -427,7 +463,7 @@
- GREGORIAN
+ GREGORIAN
GREGORIAN
@@ -469,12 +505,6 @@
$DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_0.9x1.25_2010climo_c180511.nc
$DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_0.47x0.63_2010climo_c180511.nc
$DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_0.23x0.31_2010climo_c180511.nc
-
-
- $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1.9x2.5_1850_2016_c170525.nc
- $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_0.9x1.25_1850_2016_c170525.nc
- $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_0.47x0.63_1850_2016_c170525.nc
- $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_0.23x0.31_1850_2016_c170525.nc
@@ -502,56 +532,79 @@
$DIN_LOC_ROOT/atm/cam/ocnfrac/domain.camocn.0.23x0.31_gx1v6_101108.nc
-
-
- 1850
-
-
-
-
- 1850
-
-
- 2016
+ 2016
hybrid
- hybrid
- hybrid
- hybrid
-
- hybrid
- hybrid
+ hybrid
+ hybrid
+ hybrid
+
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
+ hybrid
hybrid
- b.e20.BHIST.f09_g17.20thC.297_01_v2
- b.e20.BHIST.f09_g17.20thC.297_01_v2
- b.e16.B1850_WW3.f09_g16.lang_redi_2hr_frz_chl.003
- b.e20.B1850.f09_g16.pi_control.all.123
-
- b.e16.B1850_WW3.f09_g16.lang_redi_2hr_frz_chl.003
- b.e20.B1850.f09_g16.pi_control.all.123
- b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001
+ f.e20.FHIST.f09_f09.cesm2_1.001_v2
+ f.e20.FHIST.f09_f09.cesm2_1.001_v2
+ f.e20.FHIST.f09_f09.cesm2_1.001_v2
+ b.e20.BHIST.f09_g17.20thC.297_01_v3
+
+ f.e21.FW1850.f09_f09_mg17.cesm2.1-exp011.001_v2
+ f.e21.FWsc1850.f09_f09_mg17.cesm2.1-exp011.001_v2
+ f.e21.FW2000climo.f09_f09_mg17.cesm2.1-exp011.001_v2
+ f.e21.FWsc2000climo.f09_f09_mg17.cesm2.1-exp011.001_v2
+ f.e21.FW2010climo.f09_f09_mg17.cesm2.1-exp011.001_v2
+ f.e21.FWsc2010climo.f09_f09_mg17.cesm2.1-exp011.001_v2
+ f.e21.FWHIST.f09_f09_mg17.cesm2.1-exp011.001_v2
+ f.e21.FWmaHIST.f09_f09_mg17.cesm2.1-exp011.1975-2015.001_v2
+ f.e21.FWmadHIST.f09_f09_mg17.cesm2.1-exp011.001_v2
+ f.e21.FWsc1850.f09_f09_mg17.cesm2.1-exp011.001_v3hist
+ c_cesm2.1b01_fswd_1975_cntrl_v2
+ f.e21.FWmaSD.f09_f09_mg17.cesm2.1-exp011.1978-2015.001_v2
+ f.e21.FWmadSD.f09_f09_mg17.cesm2.1-exp011.001_v2
+ b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.001_v2
1979-01-01
- 2000-01-01
- 0097-01-01
- 0010-01-01
- 0097-01-01
- 0010-01-01
+ 2000-01-01
+ 2010-01-01
+ 1979-01-01
+ 0003-01-01
+ 0003-01-01
+ 0003-01-01
+ 0003-01-01
+ 0003-01-01
+ 0003-01-01
+ 1979-01-01
+ 1979-01-01
+ 2005-01-01
+ 0003-01-01
+ 1980-01-01
+ 1980-01-01
+ 2005-01-01
1950-01-01
@@ -559,7 +612,22 @@
cesm2_init
- cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
+ cesm2_init
cesm2_init
@@ -568,6 +636,7 @@
1
1
+ 1
@@ -575,6 +644,7 @@
1
1
+ 1
@@ -582,6 +652,7 @@
1
1
+ 1
@@ -589,6 +660,7 @@
1
1
+ 1
@@ -596,6 +668,7 @@
1
1
+ 1
@@ -603,6 +676,7 @@
1
1
+ 1
@@ -610,6 +684,7 @@
1
1
+ 1
@@ -617,6 +692,7 @@
1
1
+ 1
@@ -624,6 +700,7 @@
1
1
+ 1
@@ -631,6 +708,7 @@
1
1
+ 1
diff --git a/cime_config/config_pes.xml b/cime_config/config_pes.xml
index d4e7ae45c8..89b4290731 100644
--- a/cime_config/config_pes.xml
+++ b/cime_config/config_pes.xml
@@ -1698,6 +1698,18 @@
1
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
diff --git a/cime_config/testdefs/testlist_cam.xml b/cime_config/testdefs/testlist_cam.xml
index caf172fad4..85ddd7235c 100644
--- a/cime_config/testdefs/testlist_cam.xml
+++ b/cime_config/testdefs/testlist_cam.xml
@@ -107,14 +107,6 @@
-
-
-
-
-
-
-
-
@@ -255,6 +247,11 @@
+
+
+
+
+
@@ -528,6 +525,14 @@
+
+
+
+
+
+
+
+
@@ -666,6 +671,11 @@
+
+
+
+
+
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 5a3d37a4b6..6a5bfc51bb 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,5 +1,1461 @@
===============================================================
+Tag name: release_tags/cam_cesm2_1_rel_29
+Originator(s): fvitt
+Date: 29 May 2019
+One-line Summary: Change format of prescribed ozone file to NETCDF-3
+
+Purpose of changes:
+
+ Some cray systems cannot hande NETCDF-4 format.
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+
+M bld/namelist_files/use_cases/ssp585_cam6.xml
+ - change format of prescribed_ozone_file
+
+Testing:
+
+ SMS_D_Ln9.f09_g17.BSSP585cmip6.cheyenne_intel (Overall: PASS) details:
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_28
+Originator(s): fvitt
+Date: 15 May 2019
+One-line Summary: Fix WACCMX temperature bug
+
+Purpose of changes:
+
+ Correct the formulation of variable gas properties for instances when constituent
+ mass mixing ratios are dry. Inconsistencies of the calculation of specific
+ heat of air at different points in the code caused the energy fixer to apply a
+ bias to the tendencies of dry static energy.
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by: cacraig, eaton
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+
+M components/cam/src/dynamics/fv/dp_coupling.F90
+ - specify that the mixing ratios are moist when physconst_updates is invoked
+
+M components/cam/src/physics/cam/physics_types.F90
+ - pass pdel and pdeldry to physconst_updates to convert mixing ratios to moist
+
+M components/cam/src/utils/physconst.F90
+ - convert mixing ratios to moist in physconst_updates if needed
+
+Testing:
+
+cheyenne/intel/aux_cam: All PASS except expect baseline failures for waccx:
+
+ ERS_Ln9.f19_f19_mg16.FXHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERS_Ln9.f19_f19_mg16.FXHIST.cheyenne_intel.cam-outfrq9s BASELINE cam_cesm2_1_rel_27
+ SMS_D_Ln9.f19_f19_mg16.FXHIST.cheyenne_intel.cam-outfrq9s_amie (Overall: DIFF) details:
+ FAIL SMS_D_Ln9.f19_f19_mg16.FXHIST.cheyenne_intel.cam-outfrq9s_amie BASELINE cam_cesm2_1_rel_27
+
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_27
+Originator(s): mmills, fvitt
+Date: 30 Apr 2019
+One-line Summary: Corrections to SAD; update for 2-degrees configurations
+
+Purpose of changes:
+
+ - correct aerosol surface area used in heterogeneous chemistry reactions
+ - updates for 2-degrees CMIP6 runs
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by: cacraig, eaton
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+
+M components/cam/bld/namelist_files/namelist_defaults_cam.xml
+M components/cam/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
+M components/cam/cime_config/config_component.xml
+M components/cam/cime_config/config_compsets.xml
+M components/cam/cime_config/testdefs/testlist_cam.xml
+ - updates for 2-degrees
+
+M components/cam/src/chemistry/modal_aero/aero_model.F90
+ - corrections to surface area calculation
+
+Testing:
+
+ SMS_Ld1.f19_g17.B1850.cheyenne_intel.allactive-defaultio
+ SMS_Ld1.f19_g17.B1PCTcmip6.cheyenne_intel.allactive-defaultio
+ SMS_Ld1.f19_g17.BCO2x4cmip6.cheyenne_intel.allactive-defaultio
+ SMS_Ld1.f19_g17.BHIST.cheyenne_intel.allactive-defaultio
+
+ ERP_Ln9.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s
+ SMS_D_Ln9.f19_f19_mg17.FWmaHIST.cheyenne_intel.cam-outfrq9s
+ SMS_D_Ln9.f19_f19_mg17.FWsc2010climo.cheyenne_intel.cam-outfrq9s
+ SMS_D_Ln9.f19_f19_mg17.FWscHIST.cheyenne_intel.cam-outfrq9s
+ SMS_D_Ln9.f19_g17.BWmaCO2x4cmip6.cheyenne_intel.allactive-default
+ SMS_Ld1.f19_f19_mg17.FWmaHIST_BGC.cheyenne_intel.cam-reduced_hist1d
+
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_26
+Originator(s): cacraig
+Date: April 25, 2019
+One-line Summary: Added SSP245 and SSP360 and modified files in SSP126
+
+Purpose of changes:
+ - Added SSP245 and SSP360
+ - Modified SSP126
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+A components/cam/bld/namelist_files/use_cases/ssp245_cam6.xml
+A components/cam/bld/namelist_files/use_cases/ssp370_cam6.xml
+ - added use_cases for SSP245 and SSP370 (based on google docs)
+
+List all existing files that have been modified, and describe the changes:
+ M .
+M SVN_EXTERNAL_DIRECTORIES
+ - update manage_externals
+
+M components/cam/bld/namelist_files/use_cases/ssp126_cam6.xml
+ - updated use_case based on the updated google doc
+
+M components/cam/cime_config/config_component.xml
+ - add the hooks for SSP245 and SSP370
+
+Testing:
+ Ran create_newcase, case.setup, preview_namelists and check_input_data on
+ all SSPs and at both 1 and 2 degree resolutions
+
+ Did not perform any actual runs
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_25
+Originator(s): fvitt
+Date: 11 Apr 2019
+One-line Summary: Changes for 2-degrees configurations
+
+Purpose of changes:
+ - use 2-degrees emissions files
+ - use climate parameters tuned for 2-degrees
+ - add reference cases for 2-degrees
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by: cacraig
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+M components/cam/bld/namelist_files/namelist_defaults_cam.xml
+M components/cam/bld/namelist_files/use_cases/1850_cam6.xml
+M components/cam/bld/namelist_files/use_cases/hist_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml
+M components/cam/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
+
+Testing:
+ SMS_D_Ld1.f09_g17.B1850cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ SMS_Ld2.f09_g17.B1850.cheyenne_intel.allactive-defaultio (Overall: PASS) details:
+ SMS_Ld2.f09_g17.BHIST.cheyenne_intel.allactive-defaultio (Overall: PASS) details:
+ SMS_Ld2.f19_g17.B1850.cheyenne_intel.allactive-defaultio (Overall: DIFF) details:
+ SMS_Ld2.f19_g17.BHIST.cheyenne_intel.allactive-defaultio (Overall: DIFF) details:
+
+ ERS_Ld3.f09_g17.BWSSP126cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ ERS_Ld3.f09_g17.BWSSP245cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ ERS_Ld3.f09_g17.BWSSP370cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ ERS_Ld3.f09_g17.BWSSP534oscmip6.cheyenne_intel.allactive-defaultio_min (Overall: FAIL) details:
+ ERS_Ld3.f09_g17.BWSSP585cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ SMS_D_Ld1.f09_g17.BWCO2x4cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ SMS_D_Ln9.f09_g17.BWSSP126cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ SMS_D_Ln9.f09_g17.BWSSP245cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ SMS_D_Ln9.f09_g17.BWSSP370cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ SMS_D_Ln9.f09_g17.BWSSP534oscmip6.cheyenne_intel.allactive-defaultio_min (Overall: FAIL) details:
+ SMS_D_Ln9.f09_g17.BWSSP585cmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ SMS_Ld1.f09_g17.BW1850.cheyenne_intel.allactive-default (Overall: PASS) details:
+ SMS_Ld1.f09_g17.BW1PCTcmip6.cheyenne_intel.allactive-defaultio_min (Overall: PASS) details:
+ SMS_Ld1.f09_g17.BWHIST.cheyenne_intel.allactive-default (Overall: PASS) details:
+ SMS_Ld1.f09_g17.BWma1850.cheyenne_intel.allactive-default (Overall: PASS) details:
+ SMS_Ld1.f09_g17.BWmaHIST.cheyenne_intel.allactive-default (Overall: DIFF) details:
+ SMS_Ld1.f09_g17.BWsc1850.cheyenne_intel.allactive-default (Overall: DIFF) details:
+ SMS_Ld1.f09_g17.BWscHIST.cheyenne_intel.allactive-default (Overall: PASS) details:
+ SMS_Ld5.f19_g17.BWma1850.cheyenne_intel.allactive-default (Overall: DIFF) details:
+ SMS_Ld5.f19_g17.BWmaHIST.cheyenne_intel.allactive-default (Overall: DIFF) details:
+
+cheyenne/intel/aux_cam:
+ ERP_D_Ln9.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_D_Ln9.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_D_Ln9.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s BASELINE cesm2.1-alphabranch
+ ERP_Ln9.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s BASELINE cesm2.1-alphabranch
+ ERS_Ln9.f19_f19_mg17.FSPCAMS.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ FAIL ERS_Ln9.f19_f19_mg17.FSPCAMS.cheyenne_intel.cam-outfrq9s NLCOMP
+
+ - answer changes to 2-degree configurations
+
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_24
+Originator(s): eaton
+Date: Fri Mar 29 16:39:43 MDT 2019
+One-line Summary: bug fixes
+
+Purpose of changes:
+
+. Bug fix in code that was added to verify that both vector components are
+ output when interpolated output is requested. This only impact SE.
+
+. Bug fix for issue raised on BB about missing outfld call for DP_CLD when
+ clubb is used.
+
+Bugs fixed (include bugzilla ID): see above
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+components/cam/src/control/cam_history.F90
+. fix in code that verifies both vector components are present when
+ interpolated SE output is requested.
+
+components/cam/src/physics/cam/clubb_intr.F90
+. add outfld call for DP_CLD from clubb_tend_cam
+
+Testing:
+Ran 1 step FW2000climo with ne30pg3 and interpolated output to
+make sure the missing vector components were added.
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_23
+Originator(s): cacraig
+Date: March 29, 2019
+One-line Summary: Another typo and filename update
+
+Purpose of changes:
+- One more typo and another file update
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+M components/cam/bld/namelist_files/use_cases/ssp126_cam6.xml
+ - Added a missing "a" and updated the H2O file to a more recent date
+
+No testing done as Erik will be testing in the BSSP126 compset
+
+===============================================================
+===============================================================
+Tag name: release_tags/cam_cesm2_1_rel_22
+Originator(s): cacraig
+Date: March 29, 2019
+One-line Summary: Fix typos and replace missing file in CAM's SSP126 use_case
+
+Purpose of changes:
+- Fix typos and replace the missing tracer_cnst file in CAM's SSP126 use_case
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+M components/cam/bld/namelist_files/use_cases/ssp126_cam6.xml
+ - Fix typos and replace the missing tracer_cnst file in CAM's SSP126 use_case
+
+No testing done as Erik will be testing in the BSSP126 compset
+
+===============================================================
+===============================================================
+Tag name: release_tags/cam_cesm2_1_rel_21
+Originator(s): cacraig
+Date: March 29, 2019
+One-line Summary: Create CAM's SSP126 use_case
+
+Purpose of changes:
+- create the SSP126 use_case and add it to the config_component file
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+A components/cam/bld/namelist_files/use_cases/ssp126_cam6.xml
+ - created use_case based on Cecile's google doc
+
+List all existing files that have been modified, and describe the changes:
+M components/cam/cime_config/config_component.xml
+ - added SSP126 use_case
+
+Tested by running SSP126_CAM60_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV in the CAM standlone tag
+ and hand checked the resulting atm_in after running preview_namelists
+
+===============================================================
+===============================================================
+Tag name: release_tags/cam_cesm2_1_rel_20
+Originator(s): Chris Fischer
+Date: Fri Mar 22 10:58:38 MDT 2019
+One-line Summary: Update REFCASES
+
+Purpose of changes:
+. Update externals to use latest component release tags.
+. Update REFCASES to be compatiable with new ctsm tags.
+. Fix a character length mismatch between dummy and actual arguments.
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+M Externals.cfg
+ - Update externals to latest release tag.
+M components/cam/cime_config/config_compsets.xml
+ - Fix REFCASES to use correct inputs to support updated ctsm tags
+M components/cam/src/control/cam_history.F90
+ - Fix a character length mismatch between dummy and actual arguments that nag/debug
+ was reporting.
+
+
+Testing: Ran a cesm ERP prealpha test that was failing before.
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_19
+Originator(s): eaton
+Date: Sat Mar 16 14:44:14 MDT 2019
+One-line Summary: new fix for mixing_ratio attribute problem
+
+Purpose of changes:
+
+. In order to avoid making a change to the CAM restart file which could
+ have unintended consequences, fix the problem of the wrong mixing_ratio
+ attribute after a restart by directly setting the mixing_ratio component
+ in the active field lists. This is done in the same location of
+ subroutine read_restart_history where the data would have been read from
+ the restart file. But this information has already been initialized in
+ the constituents module before the restart file is read. So having it on
+ the restart file is not necessary.
+
+Bugs fixed (include bugzilla ID): none
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+components/cam/src/control/cam_history.F90
+. remove mixing_ratio attribute to restart file
+. add code to set mixing_ratio directly in the active field lists.
+
+components/cam/src/control/cam_history_support.F90
+. change mixing_ratio component of field_info type back to size 3
+
+Testing: did CAM standalone restart test to make sure files written after a
+restart contained the correct values for the mixing_ratio attribute.
+
+Summarize any changes to answers: none
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_18
+Originator(s): klindsay, eaton
+Date: Fri Mar 15 17:33:15 MDT 2019
+One-line Summary: add mixing_ratio attribute to restart file
+
+Purpose of changes:
+
+. The mixing_ratio attribute was not being written to the restart file, and
+ consequently history files written after a restart had a null string
+ value which is interpreted by the code as 'wet'
+
+. Added some fldlst checks for future use by SE (zonal fields and missing
+ vector components).
+
+Bugs fixed (include bugzilla ID): see above
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+components/cam/src/control/cam_history.F90
+. add mixing_ratio attribute to restart file
+
+components/cam/src/control/cam_history_support.F90
+. change mixing_ratio component of field_info type to be the same size as
+ long_name and units.
+
+Testing: did CAM standalone restart test to make sure files written after a
+restart contained the correct values for the mixing_ratio attribute.
+
+Summarize any changes to answers: none
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_17
+Originator(s): mmills, cacraig
+Date: March 7, 2019
+One-line Summary: Update files in SSP585 use_case
+
+Purpose of changes:
+- Correct files in the SSP585 compset
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+M Externals.cfg
+ - update cime to bring in the new cheyenne settings
+
+M bld/namelist_files/use_cases/ssp585_cam6.xml
+ - update three files in the SSP585 use_case
+
+Tested by running the BSSP585cmip6 compset in a copy of Erik's sandbox
+Tested by running SSP585_CAM60_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_CISM2%NOEVOLVE_SWAV in the CAM standlone tag
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_16
+Originator(s): fvitt
+Date: 6 Mar 2019
+One-line Summary: Change compset match string for WACCM SSP compsets
+
+Purpose of changes:
+
+ The long name of the SSP compsets will no longer include "-" and "." characters.
+ The compset string match in cime_config/config_component.xml was adjusted
+ accordingly.
+
+ Some of the future scenarios have CO2 concentrations that exceed the
+ levels the formichev scheme can handle. So we set nlte_limit_co2=.true. in
+ these SSP compsets to limit the CO2 concentrations input into formichev.
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+M cime_config/config_component.xml
+ - Change compset match string for SSP compsets
+
+M bld/namelist_files/use_cases/waccm_tsmlt_ssp370_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_ssp534_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_ssp585_cam6.xml
+ - set nlte_limit_co2=.true. since CO2 concentrations in these scenarios
+ execeeds the formichev scheme limit
+
+Tests
+ SMS_D_Ln9.f09_g17.BWSSP126cmip6.cheyenne_intel.allactive-default
+ SMS_D_Ln9.f09_g17.BWSSP245cmip6.cheyenne_intel.allactive-default
+ SMS_D_Ln9.f09_g17.BWSSP370cmip6.cheyenne_intel.allactive-default
+ SMS_D_Ln9.f09_g17.BWSSP534oscmip6.cheyenne_intel.allactive-default
+ SMS_D_Ln9.f09_g17.BWSSP585cmip6.cheyenne_intel.allactive-default
+
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_15
+Originator(s): hannay, cacraig
+Date: March 5, 2019
+One-line Summary: Add the CAM hooks for SSP585
+
+Purpose of changes:
+
+Add use case files for CMIP6 future scenario compset: SSP585
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by: cacraig
+
+List all files eliminated:
+
+List all files added and what they do:
+A components/cam/bld/namelist_files/use_cases/ssp585_cam6.xml
+ - CAM setup for SSP585 - based off documentation provided by Cecile
+
+List all existing files that have been modified, and describe the changes:
+M components/cam/cime_config/config_component.xml
+ - add use_case information for SSP585
+
+This tag is untested as it will be tested in the CESM BSSP585 compset
+ - any tweeks will be made in a future tag
+
+Did run case.setup/preview_namelist/check_input_data on cheyenne to verify the setup
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_14
+Originator(s): mmills, fvitt
+Date: 28 Feb 2019
+One-line Summary: Updates to WACCM CMIP6 future scenario compsets
+
+Purpose of changes:
+
+Add use case files for CMIP6 future scenario compsets:
+ BWSSP245cmip6 (SSP2-4.5)
+ BWSSP370cmip6 (SSP3-7.0)
+
+Adjust emissions datasets to be able to run through the end of 2100
+in future scenario compsets:
+ BWSSP126cmip6 (SSP1-2.6)
+ BWSSP534oscmip6 (SSP5-3.4)
+ BWSSP585cmip6 (SSP5-8.5)
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by: cacraig
+
+List all files eliminated:
+
+List all files added and what they do:
+
+A components/cam/bld/namelist_files/use_cases/waccm_tsmlt_ssp370_cam6.xml
+A components/cam/bld/namelist_files/use_cases/waccm_tsmlt_ssp245_cam6.xml
+
+List all existing files that have been modified, and describe the changes:
+
+M components/cam/bld/namelist_files/use_cases/waccm_tsmlt_ssp585_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_tsmlt_ssp126_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_tsmlt_ssp534_cam6.xml
+M components/cam/cime_config/config_component.xml
+M components/cam/doc/ChangeLog
+
+Test on cheyenne:
+
+ SMS_D_Ln9.f09_g17.BWSSP126cmip6.cheyenne_intel.allactive-defaultio_min
+ SMS_D_Ln9.f09_g17.BWSSP245cmip6.cheyenne_intel.allactive-defaultio_min
+ SMS_D_Ln9.f09_g17.BWSSP370cmip6.cheyenne_intel.allactive-defaultio_min
+ SMS_D_Ln9.f09_g17.BWSSP534oscmip6.cheyenne_intel.allactive-defaultio_min
+ SMS_D_Ln9.f09_g17.BWSSP585cmip6.cheyenne_intel.allactive-defaultio_min
+
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_13
+Originator(s): klindsay, eaton
+Date: Wed Feb 27 16:47:14 MST 2019
+One-line Summary: disable some dry to wet conversions for co2_cycle constituents
+
+Purpose of changes:
+
+. Mitigate some problems with advecting nearly constant tracers that were
+ introduced by the dry to wet mmr conversions that were employed to regain
+ mass conservation. Omit the dry->wet conversion before CLUBB, gravity
+ wave, and vertical_diffusion only for co2_cycle tracers. Other
+ constituents in CESM would not be affected. WACCM results would not
+ change at all, as co2_cycle tracers are turned off in WACCM runs.
+
+Bugs fixed (include bugzilla ID): none
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+src/physics/cam/clubb_intr.F90
+src/physics/cam/gw_drag.F90
+src/physics/cam/vertical_diffusion.F90
+. supply optional arg to set_dry_to_wet which avoids doing the dry to wet
+ conversion on co2_cycle constituents
+
+src/physics/cam/co2_cycle.F90
+. add subroutine co2_cycle_set_cnst_type which allows setting the cnst_type
+ of the co2_cycle tracers to specified value.
+
+src/physics/cam/physics_types.F90
+. add an optional arg to subroutine set_wet_to_dry to all passing the
+ cnst_type array as an arg rather than using the constituents module
+ data.
+
+Testing by Keith:
+
+. I have an implementation of this counter-proposal, and have verified, using
+ an F compset with co2_cycle tracers turned on, that introducing this mod
+ only changes results for co2_cycle tracers, and that it removes the
+ imprint of water vapor on co2_cycle tracers. That is, constant co2_cycle
+ tracers are (nearly) preserved. Tracer mass is still conserved.
+
+Summarize any changes to answers: none except co2_cycle constituents change.
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_12
+Originator(s): klindsay, eaton
+Date: Wed Feb 13 10:03:44 MST 2019
+One-line Summary: Add CO2 cycle diagnostic; disable qneg3 on CO2 tracers
+
+Purpose of changes:
+
+. Add new history variable, TMac_CO2, the vertical integral of the aircraft
+ CO2 emissions (ac_CO2). This is helpful for closing tracer budgets. This
+ history variable is not enabled by default.
+
+. Disable qneg3 on CO2 tracers.
+
+Bugs fixed (include bugzilla ID): none
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+components/cam/src/physics/cam/cam_diagnostics.F90
+. add output of TMac_CO2
+
+components/cam/src/physics/cam/co2_cycle.F90
+. addfld for TMac_CO2
+. change qmin for CO2 constituents from 1.e-20 to -1.e36. This is to turn
+ off qneg3 modifications.
+
+No testing done.
+
+Summarize any changes to answers: none
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_11
+Originator(s): fvitt
+Date: 7 Feb 2019
+One-line Summary: WACCM compsets
+
+Purpose of changes:
+
+ . implement future scenario compsets
+ . misc changes to WACCM compsets
+ . WACCM F compsets start from ref cases
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+
+A components/cam/bld/namelist_files/use_cases/waccm_tsmlt_ssp126_cam6.xml
+A components/cam/bld/namelist_files/use_cases/waccm_tsmlt_ssp534_cam6.xml
+A components/cam/bld/namelist_files/use_cases/waccm_tsmlt_ssp585_cam6.xml
+ - added for future scenario compsets
+
+A components/cam/bld/namelist_files/use_cases/sd_waccm_mad_cam6.xml
+ - needed since FWmadSD has different start date than FWmaSD
+
+List all existing files that have been modified, and describe the changes:
+
+M components/cam/bld/namelist_files/use_cases/sd_cam6.xml
+M components/cam/bld/namelist_files/use_cases/sd_trop_strat_vbs_cam6.xml
+ - update met files list and solar forcing files
+
+M components/cam/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
+ - update met files list and solar forcing files
+ - first met file is for 1980-01-01
+ - update lbc file
+
+M components/cam/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml
+ - update met files list and solar forcing files
+ - first met file is for 20005-01-01
+ - update lbc file
+
+M components/cam/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml
+ - update met files list and solar irradiance input
+
+M components/cam/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
+ - update lbc file
+
+M components/cam/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
+M components/cam/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
+ - update lbc file
+
+M components/cam/cime_config/config_component.xml
+ - implement SSP compsets
+
+M components/cam/cime_config/config_compsets.xml
+ - WACCM F compsets start from ref cases
+ - change start dates
+
+M components/cam/src/chemistry/modal_aero/aero_model.F90
+ - corrections to effective radius diagnostics
+
+M components/cam/src/chemistry/utils/apex.F90
+ - log waring only 1 time in future scenario runs
+
+M components/cam/src/physics/cam/physics_types.F90
+ - see cam6_1_012
+ physics_state_check - the changes for mmr were causing some of the checks
+ based on qmin to fail.
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_10
+Originator(s): eaton
+Date: Fri Jan 18 13:11:46 MST 2019
+One-line Summary: fix the fix in gw_tend
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_09
+Originator(s): pel, eaton
+Date: Fri Jan 18 12:02:18 MST 2019
+One-line Summary: treat all tracers as wet in gravity wave drag code
+
+Purpose of changes:
+
+. Doing mass conservation checks on the previous tag revealed problems in
+ standard CAM configs with mass conservation in the gravity wave drag
+ code. The problems are corrected by always using wet mmr in that
+ parameterization. This is done for all model configurations.
+
+Bugs fixed (include bugzilla ID): none
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+components/cam/src/physics/cam/gw_drag.F90
+. gw_tend
+ - copy input state and convert dry constituents to wet mmr
+ - convert constituent tendencies for dry constituents back to dry basis
+ in ptend object.
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_08
+Originator(s): pel, eaton
+Date: Thu Jan 17 15:30:40 MST 2019
+One-line Summary: treat all tracers as wet in vertical diffusion and clubb
+
+Purpose of changes:
+
+. Doing mass conservation checks on the previous tag revealed problems in
+ standard CAM configs with mass conservation in CLUBB and vertical
+ diffusion. The problems are mitigated by always using wet mmr in those
+ parameterizations. This is done for all model configurations, not just
+ for WACCM as in the previous tag.
+
+Bugs fixed (include bugzilla ID):
+
+. The constituent surface fluxes for the modal aerosol species were being
+ added to the bottom layer assuming wet mmr. But those species are all
+ declared dry. Treating all species as wet in vertical_diffusion_tend
+ fixes this bug.
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+components/cam/src/physics/cam/clubb_intr.F90
+. clubb_tend_cam uses a copy of state. Convert all dry constituent mixing
+ ratios in that copy to a wet basis.
+. After all contributions to ptend are made, convert the constituent
+ tendencies for dry constituents back to a dry basis.
+
+components/cam/src/physics/cam/vertical_diffusion.F90
+. In vertical_diffusion_tend treat all constituents on a wet basis. Apply
+ the dry to wet conversion to the state object. After constituent
+ diffusion tendencies are computed, convert any that apply to dry
+ constituents to a dry basis. Convert dry constituent mmr in state object
+ back to dry basis before leaving the subroutine.
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_07
+Originator(s): pel, eaton
+Date: Tue Jan 15 17:59:55 MST 2019
+One-line Summary: change WACCM configs to use dry constituents
+
+Purpose of changes:
+
+. WACCM configurations were setting constituents to have wet mmr in the
+ physics and chemistry code due to the molecular diffusion code needing
+ this. The change is to declare the constituents dry and to only convert
+ the mixing ratios to wet in the vertical diffusion code, and only for
+ waccm configurations.
+
+Bugs fixed (include bugzilla ID): none
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+components/cam/src/chemistry/mozart/chemistry.F90
+. remove code that sets mixtype='wet' if do_molec_diff
+
+components/cam/src/physics/cam/constituents.F90
+. make cnst_type protected
+
+components/cam/src/physics/cam/vertical_diffusion.F90
+. if do_molec_diff=.true. then
+ - set constituent flags in fieldlist_wet object
+ - call set_dry_to_wet at top of vertical_diffusion_tend
+ - call set_wet_to_dry at bottom of vertical_diffusion_tend
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_06
+Originator(s): klindsay, eaton
+Date: Fri Jan 11 14:42:36 MST 2019
+One-line Summary: fix for dry constituent mixing ratios in FV initial file output
+
+Purpose of changes:
+
+The bug discovered by Keith is that CAM-FV has been writing initial files with
+all constituents having wet mixing ratios. But in an initial run (which is
+the mode CAM is in for a hybrid startup) the FV code assumes that
+constitutents which are are registered as 'dry' will have dry mixing ratios
+in the initial file. It then converts the dry mixing ratio to wet since
+that is what the dycore needs. But since they are already wet (due to the
+bug) an extra dry to wet conversion is being applied. This reduces the
+mixing ratios, so is effectively a small mass sink. It would be difficult
+to notice this except if you're looking closely at a field like CO2 which
+is nearly constant and you see a strange pattern in it that looks like the
+water vapor distribution. That's how Keith noticed the problem.
+
+The fix that's been implemented is:
+
+1) fix the output initial files so that constituents declared as dry are
+ output as dry mixing ratios
+
+2) add an attribute to all constituent output which explicitly declares
+ whether the mixing ratio is wet or dry
+
+3) add a backward compatibility feature so that when reading constituents
+ from an initial file, if this new attribute is not present then treat
+ the mixing ratio as wet. This will eliminate the extra dry to wet
+ conversion that is happening in the current code.
+
+Bugs fixed (include bugzilla ID): see above
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+components/cam/src/control/cam_history.F90
+. addfld_nd
+ - check whether field is an advected constituent, and if so then add
+ whether the mixing ratio uses a dry or wet air basis to the field_info
+ object.
+
+. h_define
+ - check whether the mixing_ratio component of the field_info object is
+ set, and if so then use it as the value of attribute mixing_ratio
+
+components/cam/src/control/cam_history_support.F90
+. add mixing_ratio to the field_info type.
+
+components/cam/src/dynamics/fv/diag_dynvar_ic.F90
+. add wet to dry mixing ratio conversion for dry constituents.
+
+components/cam/src/dynamics/fv/dyn_comp.F90
+. read_inidat
+ - set new initial_mr array to specify whether the constituent has been
+ initialized with wet or dry mixing ratios. This is for backwards
+ compatibility with previously written initial files which contain wet
+ mixing ratio for all constituents. The old initial files do not
+ contain the mixing_ratio attribute, and this will be used to indicate
+ that the mixing ratio is wet.
+
+components/cam/src/dynamics/fv/stepon.F90
+. stepon_init
+ - use new initial_mr array to decide whether constituents need to have a dry
+ to wet conversion applied. This replaces the use of cnst_type to allow
+ correct treatment of mixing ratios read from old initial files which
+ were written with wet values but registered as dry in the constituents
+ module.
+
+Testing:
+
+Checked that the new attribute appears in all history files.
+
+Checked that the initial files contains diffs for constituents that are now
+output with dry mixing ratios, but previously contained wet mixing ratios.
+
+Expect to see different simulations for FV runs that read an old initial
+file and now do not apply the redundant dry to wet conversion to the
+constituents that are type 'dry'.
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_05
+Originator(s): fvitt, eaton
+Date: 27 Nov 2018
+One-line Summary: Change longname format of SD compsets; bug fix for simple physics
+
+Purpose of changes:
+
+ Use "HIST_" time period and "%SDYN" in longname of SD compsets (specified dynamics).
+ This configures CLM to be in a transient mode.
+
+Bugs fixed (include bugzilla ID):
+
+Describe any changes made to build system:
+
+Describe any changes made to the namelist:
+
+List any changes to the defaults for the boundary datasets:
+
+Describe any substantial timing or memory changes:
+
+Code reviewed by:
+
+List all files eliminated:
+
+List all files added and what they do:
+
+List all existing files that have been modified, and describe the changes:
+
+M components/cam/cime_config/config_component.xml
+M components/cam/cime_config/config_compsets.xml
+ - use "HIST_" time period and "%SDYN" in longname of SD compsets (specified dynamics).
+
+M components/cam/src/physics/simple/tj2016.F90
+ - bug fix from eaton -- correction to argument array size
+
+Testing:
+
+cheyenne/intel/waccm:
+ ERP_Ld3.f09_f09_mg17.FWmaSD.cheyenne_intel.cam-outfrq3d (Overall: DIFF) details:
+ FAIL ERP_Ld3.f09_f09_mg17.FWmaSD.cheyenne_intel.cam-outfrq3d NLCOMP
+ FAIL ERP_Ld3.f09_f09_mg17.FWmaSD.cheyenne_intel.cam-outfrq3d BASELINE cesm2_1_rel_04
+ ERP_Ld3.f09_f09_mg17.FWSD.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details:
+ FAIL ERP_Ld3.f09_f09_mg17.FWSD.cheyenne_intel.cam-outfrq1d NLCOMP
+ FAIL ERP_Ld3.f09_f09_mg17.FWSD.cheyenne_intel.cam-outfrq1d BASELINE cesm2_1_rel_04
+ ERP_Ld3.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq3d (Overall: DIFF) details:
+ FAIL ERP_Ld3.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq3d NLCOMP
+ FAIL ERP_Ld3.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq3d BASELINE cesm2_1_rel_04
+ SMS_D_Ln9.f09_f09_mg17.FWSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9.f09_f09_mg17.FWSD.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9.f09_f09_mg17.FWSD.cheyenne_intel.cam-outfrq9s BASELINE cesm2_1_rel_04
+ SMS_D_Ln9.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq9s BASELINE cesm2_1_rel_04
+ SMS_Ld5.f09_f09_mg17.FWmadSD.cheyenne_intel.cam-reduced_hist5d (Overall: DIFF) details:
+ FAIL SMS_Ld5.f09_f09_mg17.FWmadSD.cheyenne_intel.cam-reduced_hist5d NLCOMP
+ FAIL SMS_Ld5.f09_f09_mg17.FWmadSD.cheyenne_intel.cam-reduced_hist5d BASELINE cesm2_1_rel_04
+ - expected baseline failures due to changes in CLM namelist options in SD compsets
+
+cheyenne/intel/camchem:
+ ERP_Ld3.f09_f09_mg17.FCSD.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details:
+ FAIL ERP_Ld3.f09_f09_mg17.FCSD.cheyenne_intel.cam-outfrq1d NLCOMP
+ FAIL ERP_Ld3.f09_f09_mg17.FCSD.cheyenne_intel.cam-outfrq1d BASELINE cesm2_1_rel_04
+ - expected baseline failure due to changes in CLM namelist options in SD compsets
+
+ ERP_Ln9.f05_f05_mg17.FCSD.cheyenne_intel.cam-outfrq9s (Overall: FAIL) details:
+ FAIL ERP_Ln9.f05_f05_mg17.FCSD.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9.f05_f05_mg17.FCSD.cheyenne_intel.cam-outfrq9s RUN time=52
+ SMS_D_Ln9.f05_f05_mg17.FCSD.cheyenne_intel.cam-outfrq9s (Overall: FAIL) details:
+ FAIL SMS_D_Ln9.f05_f05_mg17.FCSD.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9.f05_f05_mg17.FCSD.cheyenne_intel.cam-outfrq9s MODEL_BUILD time=21
+ - f05 resolution is broken -- clm fix is need to point to an existing fsurdat file
+
+cheyenne/intel/aux_cam:
+
+ ERP_Ld3.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq3d (Overall: DIFF) details:
+ FAIL ERP_Ld3.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq3d NLCOMP
+ FAIL ERP_Ld3.f19_f19_mg16.FW4madSD.cheyenne_intel.cam-outfrq3d BASELINE cam6_0_034
+ SMS_D_Ln9.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s BASELINE cam6_0_034
+ - expected baseline failures due to changes in CLM namelist options in SD compsets
+
+Summarize any changes to answers: SD compsets change answers, otherwise B4B
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_04
+Originator(s): eaton
+Date: Mon Nov 26 14:58:38 MST 2018
+One-line Summary: fixes for simple models w/ EUL dycore
+
+Purpose of changes:
+
+. Don't allow EUL initialization to change the dry mass when it has been
+ set via the analytic initial conditions option.
+
+. Fix analytic IC code for baroclinic wave to correctly initialize
+ constituents.
+
+Bugs fixed (include bugzilla ID):
+
+. see above
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+components/cam/src/dynamics/eul/dyn_comp.F90
+. global_int
+ - modify so that no change is made to PS if the analytic IC code is
+ active.
+
+components/cam/src/dynamics/tests/initial_conditions/ic_baroclinic.F90
+. bc_wav_set_ic
+ - remove assumption that all constituents are present in input
+ constituent array. This is to handle the Eulerian dycore which passes
+ one constituent at a time.
+
+Testing:
+
+Check that Eulerian core gives reasonable results compared to FV when run
+with baroclinic wave ICs, terminator chemistry, and moist or dry physics.
+
+Summarize any changes to answers: BFB except:
+1) Eulerian dycore with analytic baroclinic wave ICs and terminator
+ chemistry.
+2) Eulerian dycore with moist simple physics (kessler or tj2016).
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_03
+Originator(s): eaton
+Date: Wed Nov 21 10:46:40 MST 2018
+One-line Summary: workaround for cam.input_data_list
+
+Purpose of changes:
+
+. Implement workaround so that the aircraft CO2 emissions used by BGC shows
+ up in the cam.input_data_list file.
+
+. Fix how the aircraft_specifier string is added to the namelist. Remove
+ illegal characters from the namelist_defaults_cam.xml file.
+
+Bugs fixed (include bugzilla ID): none
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+components/cam/bld/build-namelist
+. Add default for aircraft_co2_file when BGC is enabled.
+. construct the aircraft_specifier string rather than getting the string
+ from the defaults file.
+
+components/cam/bld/namelist_files/namelist_defaults_cam.xml
+. Add defaults for aircraft_co2_file.
+. Remove illegal xml entry used for aircraft_specifier. Replaced by entries
+ for ac_CO2_emis which just provides the filename.
+
+components/cam/bld/namelist_files/namelist_definition.xml
+. Add namelist variable aircraft_co2_file to group camexp. The purpose of
+ this variable is to create an entry in the cam.input_data_list file.
+
+Testing:
+
+FHIST compset smoke tested to verify that:
+1) The aircraft emission file shows up in cam.input_data_list
+2) The aircraft_specifier string in atm_in is correct.
+
+Summarize any changes to answers: BFB
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_02
+Originator(s): cacraig
+Date: Nov 16, 2018
+One-line Summary: Update the science support and testing to reflect what is in the release
+
+Purpose of changes:
+
+- add science support flag for 1 and 2 degree FKESSLER runs
+- remove science support flag from FWsc... compsets
+- remove F2000climo ne30 test as CAM-SE is not supported in CESM2.1
+- introduce FKESSLER 1 degree test (since it is science supported)
+
+Bugs fixed (include bugzilla ID): none
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: AMP scientists directed these changes
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+M components/cam/cime_config/config_compsets.xml
+ - Set 1 and 2 degree FKESSLER to science supported
+ - Remove science support flag from FWscXXX compsets
+
+M components/cam/cime_config/testdefs/testlist_cam.xml
+ - Remove F2000climo ne30 test as CAM-SE is not in this release
+ - Add FKESSLER 1 degree test scine it is science supported
+
+*** No testing done ***
+
+===============================================================
+===============================================================
+
+Tag name: release_tags/cam_cesm2_1_rel_01
+Originator(s): eaton
+Date: Tue Nov 6 10:40:02 MST 2018
+One-line Summary: use release tags for CAM externals; disable some SE functionality
+
+Purpose of changes:
+
+. Change CAM externals to use release_tag versions.
+
+. Disable ability of SE dycore to run with topography or with the new CSLAM
+ advection and physics grid. The dycore may still be run for simple
+ models and aquaplanet mode using the GLL advection.
+
+Bugs fixed (include bugzilla ID): none
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: eaton
+
+List all files eliminated: none
+
+List all files added and what they do: none
+
+List all existing files that have been modified, and describe the changes:
+
+components/cam/SVN_EXTERNAL_DIRECTORIES
+. same changes to use release tags for CAM externals as done for cesm2_0
+
+components/cam/bld/build-namelist
+. don't allow SE with topo files
+
+components/cam/bld/configure
+. disable SE with CSLAM and FVM physics grid
+
+components/cam/bld/namelist_files/namelist_defaults_cam.xml
+. remove SE IC files for runs w/ topo. Remove all SE topo files.
+
+components/cam/bld/namelist_files/use_cases/hist_trop_strat_vbs_cam6.xml
+components/cam/bld/namelist_files/use_cases/hist_trop_strat_vbsfire_cam6.xml
+components/cam/bld/namelist_files/use_cases/waccm_sc_2000_cam4.xml
+. remove SE IC file
+
+components/cam/src/dynamics/se/dyn_comp.F90
+. call endrun if fh_topo is associated.
+
+*** No testing done ***
+
+===============================================================
+===============================================================
+
Tag name: cam6_0_034
Originator(s): aconley, eaton
Date: Mon Nov 5 10:01:13 MST 2018
diff --git a/src/chemistry/aerosol/drydep_mod.F90 b/src/chemistry/aerosol/aer_drydep_mod.F90
similarity index 99%
rename from src/chemistry/aerosol/drydep_mod.F90
rename to src/chemistry/aerosol/aer_drydep_mod.F90
index 1e83641d71..512a8bdc5b 100644
--- a/src/chemistry/aerosol/drydep_mod.F90
+++ b/src/chemistry/aerosol/aer_drydep_mod.F90
@@ -1,4 +1,4 @@
-module drydep_mod
+module aer_drydep_mod
use shr_kind_mod, only: r8 => shr_kind_r8
use ppgrid
@@ -265,4 +265,4 @@ end subroutine calcram
!##############################################################################
-end module drydep_mod
+end module aer_drydep_mod
diff --git a/src/chemistry/bulk_aero/aero_model.F90 b/src/chemistry/bulk_aero/aero_model.F90
index 4c3d0ab80e..c5c25abc74 100644
--- a/src/chemistry/bulk_aero/aero_model.F90
+++ b/src/chemistry/bulk_aero/aero_model.F90
@@ -124,16 +124,16 @@ end subroutine aero_model_register
!=============================================================================
subroutine aero_model_init( pbuf2d )
- use mo_chem_utls, only: get_inv_ndx, get_spc_ndx
- use cam_history, only: addfld, add_default, horiz_only
- use phys_control, only: phys_getopts
- use mo_aerosols, only: aerosols_inti
- use mo_setsoa, only: soa_inti
- use dust_model, only: dust_init
- use seasalt_model, only: seasalt_init
- use drydep_mod, only: inidrydep
- use wetdep, only: wetdep_init
- use mo_setsox, only: has_sox
+ use mo_chem_utls, only: get_inv_ndx, get_spc_ndx
+ use cam_history, only: addfld, add_default, horiz_only
+ use phys_control, only: phys_getopts
+ use mo_aerosols, only: aerosols_inti
+ use mo_setsoa, only: soa_inti
+ use dust_model, only: dust_init
+ use seasalt_model, only: seasalt_init
+ use aer_drydep_mod, only: inidrydep
+ use wetdep, only: wetdep_init
+ use mo_setsox, only: has_sox
! args
type(physics_buffer_desc), pointer :: pbuf2d(:,:)
@@ -384,7 +384,7 @@ end subroutine aero_model_init
subroutine aero_model_drydep ( state, pbuf, obklen, ustar, cam_in, dt, cam_out, ptend )
use dust_sediment_mod, only: dust_sediment_tend
- use drydep_mod, only: d3ddflux, calcram
+ use aer_drydep_mod, only: d3ddflux, calcram
use dust_model, only: dust_depvel, dust_nbin, dust_names
use seasalt_model, only: sslt_depvel=>seasalt_depvel, sslt_nbin=>seasalt_nbin, sslt_names=>seasalt_names
diff --git a/src/chemistry/geoschem/.exclude b/src/chemistry/geoschem/.exclude
new file mode 100644
index 0000000000..b8418763c5
--- /dev/null
+++ b/src/chemistry/geoschem/.exclude
@@ -0,0 +1,20 @@
+regrid_a2a_mod.F90
+transport_mod.F90
+tpcore_window_mod.F90
+tpcore_fvdas_mod.F90
+flexgrid_read_mod.F90
+get_met_mod.F90
+planeflight_mod.F90
+diag1.F90
+diag03_mod.F90
+diag3.F90
+diag51_mod.F90
+diag51b_mod.F90
+diag53_mod.F90
+emissions_mod.F90
+gamap_mod.F90
+gosat_ch4_mod.F90
+tccon_ch4_mod.F90
+initialize.F90
+cleanup.F90
+main.F90
diff --git a/src/chemistry/geoschem/cesmgc_diag_mod.F90 b/src/chemistry/geoschem/cesmgc_diag_mod.F90
new file mode 100644
index 0000000000..584ab12a07
--- /dev/null
+++ b/src/chemistry/geoschem/cesmgc_diag_mod.F90
@@ -0,0 +1,1624 @@
+!------------------------------------------------------------------------------
+! "GEOS-Chem" chemistry diagnostics interface !
+!------------------------------------------------------------------------------
+!BOP
+!
+! !MODULE: cesmgc_diag_mod.F90
+!
+! !DESCRIPTION: Module cesmgc\_diag\_mod contains routines which aim to
+! diagnose variables from GEOS-Chem
+!\\
+!\\
+! !INTERFACE:
+!
+MODULE CESMGC_Diag_Mod
+!
+! !USES:
+!
+ USE SHR_KIND_MOD, ONLY : r8 => shr_kind_r8
+ USE SHR_CONST_MOD, ONLY : pi => shr_const_pi
+ USE CAM_HISTORY, ONLY : fieldname_len
+ USE CONSTITUENTS, ONLY : pcnst
+ USE CHEM_MODS, ONLY : gas_pcnst, map2chm
+ USE CHEM_MODS, ONLY : iFirstCnst
+ USE MO_TRACNAME, ONLY : solsym
+ USE SPMD_UTILS, ONLY : MasterProc
+ USE PPGRID, ONLY : begchunk, pver
+ USE CAM_LOGFILE, ONLY : iulog
+ USE STRING_UTILS, ONLY : to_upper
+ USE Error_Mod ! For error checking
+ USE ErrCode_Mod ! Error codes for success or failure
+
+ IMPLICIT NONE
+
+ PRIVATE
+
+!
+! !PUBLIC MEMBER FUNCTIONS:
+!
+ PUBLIC :: CESMGC_Diag_Init
+ PUBLIC :: CESMGC_Diag_Calc
+ PUBLIC :: wetdep_name, wtrate_name
+
+ INTEGER :: nPhotol ! Number of diagnosed photolytic reactions
+ CHARACTER(LEN=fieldname_len) :: srcnam(gas_pcnst) ! Names of source/sink tendencies
+ CHARACTER(LEN=fieldname_len) :: wetdep_name(gas_pcnst) ! Wet deposition tendencies
+ CHARACTER(LEN=fieldname_len) :: wtrate_name(gas_pcnst) ! Column tendencies for wet dep
+ CHARACTER(LEN=fieldname_len) :: dtchem_name(gas_pcnst) ! Chemical tendencies
+
+ INTEGER :: aer_species(gas_pcnst)
+
+ ! Chemical families
+ INTEGER :: NOx_species(3)
+ INTEGER :: NOy_species(62)
+ INTEGER :: HOx_species(4)
+ INTEGER :: ClOx_species(6)
+ INTEGER :: ClOy_species(11)
+ INTEGER :: tCly_species(30)
+ INTEGER :: BrOx_species(4)
+ INTEGER :: BrOy_species(9)
+ INTEGER :: tBry_species(18)
+ INTEGER :: SOx_species(2)
+ INTEGER :: NHx_species(2)
+ INTEGER :: TOTH_species(3)
+ REAL(r8) :: NOx_MWs(3)
+ REAL(r8) :: NOy_MWs(62)
+ REAL(r8) :: HOx_MWs(4)
+ REAL(r8) :: ClOx_MWs(6)
+ REAL(r8) :: ClOy_MWs(11)
+ REAL(r8) :: tCly_MWs(30)
+ REAL(r8) :: BrOx_MWs(4)
+ REAL(r8) :: BrOy_MWs(9)
+ REAL(r8) :: tBry_MWs(18)
+ REAL(r8) :: SOx_MWs(2)
+ REAL(r8) :: NHx_MWs(2)
+ REAL(r8) :: TOTH_MWs(3)
+
+ REAL(r8), PARAMETER :: MW_NIT = 62.01
+ REAL(r8), PARAMETER :: MW_HNO3 = 63.01
+ REAL(r8), PARAMETER :: MW_HCl = 36.45
+ REAL(r8), PARAMETER :: MW_H2O = 18.02
+
+ ! NOx species
+ INTEGER :: i_NO, i_NO2, i_N
+ ! NOy \ NOx species
+ INTEGER :: i_BrNO2, i_BrNO3, i_ClNO2, i_ClNO3, i_ETHLN, i_ETNO3, &
+ i_HNO2, i_HNO3, i_HNO4, i_ICN, i_ICNOO, i_IDHNBOO, &
+ i_IDHNDOO1, i_IDN, i_IDNOO, i_IHN1, i_IHN2, &
+ i_IHN3, i_IHN4, i_IHPNBOO, i_IHPNDOO, i_INA, i_INO, &
+ i_INO2B, i_INO2D, i_INPB, i_INPD, i_IONO, i_IONO2, &
+ i_IPRNO3, i_ISOPNOO1, i_ISOPNOO2, i_ITCN, i_ITHN, &
+ i_MACRNO2, i_MCRHN, i_MCRHNB, i_MENO3, i_MONITS, i_MONITU, &
+ i_MPAN, i_MPN, i_MVKN, i_N2O5, i_NO3, i_NPRNO3, i_OLND, &
+ i_OLNN, i_PAN, i_PPN, i_PRN1, i_PROPNN, i_PRPN, i_R4N1, &
+ i_R4N2, i_HONIT, i_IONITA, i_NIT, i_NITs
+ ! HOx
+ INTEGER :: i_H, i_OH, i_HO2, i_H2O2
+ ! ClOx
+ INTEGER :: i_Cl, i_ClO, i_HOCl, i_Cl2, i_Cl2O2, i_OClO
+ ! tCly \ ClOx
+ INTEGER :: i_ClOO, i_HCl, i_BrCl, i_ICl, i_H1211, &
+ i_CFC115, i_CH3Cl, i_HCFC142b, i_HCFC22, i_CH2ICl, &
+ i_CFC114, i_CFC12, i_HCFC141b, i_HCFC123, i_CH2Cl2, &
+ i_CFC11, i_CH3CCl3, i_CHCl3, i_CCl4, i_CFC113, i_SALACL, &
+ i_SALCCL !ClNO2, ClNO3 already defined in NOy_species
+ ! BrOx
+ INTEGER :: i_Br, i_BrO, i_HOBr !BrCl already defined in tCly_species
+ ! Bry \ BrOx
+ INTEGER :: i_HBr, i_IBr, i_Br2, i_CH3Br, &
+ i_H1301, i_H2402, i_CH2Br2, i_CHBr3, i_BrSALA, i_BrSALC, &
+ i_CH2IBr
+ !BrNO2, BrNO3 already defined in NOy_speies
+ !H1211 already defined in tCly_species
+ ! SOx
+ INTEGER :: i_SO2, i_SO4
+ ! NHx
+ INTEGER :: i_NH3, i_NH4
+ ! TOTH
+ INTEGER :: i_CH4, i_H2O, i_H2
+
+
+ ! Index in solsym
+ integer :: id_no,id_no3
+ integer :: id_cfc11,id_cfc12
+ integer :: id_ch4,id_h2o
+ integer :: id_o,id_o2,id_h,id_n2o
+ integer :: id_co2,id_o3,id_oh,id_ho2,id_so4_a1,id_so4_a2,id_so4_a3
+ integer :: id_num_a2,id_num_a3,id_dst_a3,id_ncl_a3
+!
+! !REVISION HISTORY:
+! 28 Oct 2020 - T. M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+CONTAINS
+!
+!EOC
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: cesmgc_diag_init
+!
+! !DESCRIPTION: Subroutine CESMGC\_Diag\_Init declares the variables to
+! diagnosethe
+!\\
+!\\
+! !INTERFACE:
+!
+ SUBROUTINE CESMGC_Diag_Init( Input_Opt, State_Chm, State_Met )
+!
+! !USES:
+!
+ USE Input_Opt_Mod, ONLY : OptInput
+ USE State_Chm_Mod, ONLY : ChmState
+ USE State_Met_Mod, ONLY : MetState
+ USE State_Diag_Mod, ONLY : get_TagInfo
+ USE Species_Mod, ONLY : Species
+ USE Registry_Mod, ONLY : MetaRegItem, RegItem
+ USE State_Chm_Mod, ONLY : Ind_
+ USE CONSTITUENTS, ONLY : cnst_name, sflxnam
+ USE CONSTITUENTS, ONLY : cnst_get_ind
+ USE CAM_HISTORY, ONLY : addfld, add_default, horiz_only
+ USE PHYS_CONTROL, ONLY : phys_getopts
+ USE DRYDEP_MOD, ONLY : depName
+ USE MO_CHEM_UTLS, ONLY : get_spc_ndx
+!
+! !INPUT PARAMETERS:
+!
+ TYPE(OptInput), INTENT(IN) :: Input_Opt ! Input options
+ TYPE(ChmState), INTENT(IN) :: State_Chm ! Chemistry State object
+ TYPE(MetState), INTENT(IN) :: State_Met ! Meteorology State object
+!
+! !REVISION HISTORY:
+! 20 Oct 2020 - T. M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+ ! Integer
+ INTEGER :: M, N, K, SM
+ INTEGER :: idx
+ INTEGER :: RC
+ INTEGER :: bulkaero_species(20)
+ INTEGER :: id_so4, id_nh4no3
+ INTEGER :: id_dst01, id_dst02, id_dst03, id_dst04
+ INTEGER :: id_sslt01, id_sslt02, id_sslt03, id_sslt04
+ INTEGER :: id_soa, id_oc1, id_oc2, id_cb1, id_cb2
+ INTEGER :: id_soam,id_soai,id_soat,id_soab,id_soax
+ INTEGER :: id_bry, id_cly
+ INTEGER :: history_budget_histfile_num ! output history file number
+ ! for budget fields
+
+ ! Logical
+ LOGICAL :: Found
+ LOGICAL :: history_aerosol ! Output the MAM aerosol
+ ! tendencies
+ LOGICAL :: history_chemistry
+ LOGICAL :: history_cesm_forcing
+ LOGICAL :: history_scwaccm_forcing
+ LOGICAL :: history_chemspecies_srf ! Output the chemistry
+ ! constituents species
+ ! in the surface layer
+ LOGICAL :: history_dust
+ LOGICAL :: history_budget ! output tendencies and state
+ ! variables for CAM
+ ! temperature, water vapor,
+ ! cloud ice and cloud
+ ! liquid budgets.
+
+ ! Strings
+ CHARACTER(LEN=255) :: SpcName
+ CHARACTER(LEN=255) :: tagName
+ CHARACTER(LEN=255) :: ThisLoc
+ CHARACTER(LEN=255) :: ErrMsg
+ CHARACTER(LEN=2) :: unit_basename ! Units 'kg' or '1'
+
+ ! Objects
+ TYPE(Species), POINTER :: SpcInfo
+ TYPE(MetaRegItem), POINTER :: Current
+ TYPE(RegItem ), POINTER :: Item
+
+ !=================================================================
+ ! CESMGC_Diag_Init begins here!
+ !=================================================================
+
+ ! Initialize pointers
+ SpcInfo => NULL()
+ Current => NULL()
+ Item => NULL()
+
+ ! Assume a successful return until otherwise
+ RC = GC_SUCCESS
+
+ CALL phys_getopts( history_aerosol_out = history_aerosol, &
+ history_chemistry_out = history_chemistry, &
+ history_chemspecies_srf_out = history_chemspecies_srf, &
+ history_budget_out = history_budget , &
+ history_budget_histfile_num_out = history_budget_histfile_num, &
+ history_cesm_forcing_out = history_cesm_forcing, &
+ history_scwaccm_forcing_out = history_scwaccm_forcing, &
+ history_dust_out = history_dust )
+
+ id_no3 = get_spc_ndx( 'NO3' )
+ id_o3 = get_spc_ndx( 'O3' )
+ id_oh = get_spc_ndx( 'OH' )
+ id_ho2 = get_spc_ndx( 'HO2' )
+ id_so4_a1 = get_spc_ndx( 'so4_a1' )
+ id_so4_a2 = get_spc_ndx( 'so4_a2' )
+ id_so4_a3 = get_spc_ndx( 'so4_a3' )
+ id_num_a2 = get_spc_ndx( 'num_a2' )
+ id_num_a3 = get_spc_ndx( 'num_a3' )
+ id_dst_a3 = get_spc_ndx( 'dst_a3' )
+ id_ncl_a3 = get_spc_ndx( 'ncl_a3' )
+ id_co2 = get_spc_ndx( 'CO2' )
+ id_no = get_spc_ndx( 'NO' )
+ id_h = get_spc_ndx( 'H' )
+ id_o = get_spc_ndx( 'O' )
+ id_o2 = get_spc_ndx( 'O2' )
+ id_ch4 = get_spc_ndx( 'CH4' )
+ id_h2o = get_spc_ndx( 'H2O' )
+ id_n2o = get_spc_ndx( 'N2O' )
+ id_cfc11 = get_spc_ndx( 'CFC11' )
+ id_cfc12 = get_spc_ndx( 'CFC12' )
+
+ id_bry = get_spc_ndx( 'BRY' )
+ id_cly = get_spc_ndx( 'CLY' )
+
+ id_dst01 = get_spc_ndx( 'DST01' )
+ id_dst02 = get_spc_ndx( 'DST02' )
+ id_dst03 = get_spc_ndx( 'DST03' )
+ id_dst04 = get_spc_ndx( 'DST04' )
+ id_sslt01 = get_spc_ndx( 'SSLT01' )
+ id_sslt02 = get_spc_ndx( 'SSLT02' )
+ id_sslt03 = get_spc_ndx( 'SSLT03' )
+ id_sslt04 = get_spc_ndx( 'SSLT04' )
+ id_soa = get_spc_ndx( 'SOA' )
+ id_so4 = get_spc_ndx( 'SO4' ); id_so4 = -1 ! Don't pick up GEOS-Chem's SO4!
+ id_oc1 = get_spc_ndx( 'OC1' )
+ id_oc2 = get_spc_ndx( 'OC2' )
+ id_cb1 = get_spc_ndx( 'CB1' )
+ id_cb2 = get_spc_ndx( 'CB2' )
+ id_nh4no3 = get_spc_ndx( 'NH4NO3' )
+ id_soam = get_spc_ndx( 'SOAM' )
+ id_soai = get_spc_ndx( 'SOAI' )
+ id_soat = get_spc_ndx( 'SOAT' )
+ id_soab = get_spc_ndx( 'SOAB' )
+ id_soax = get_spc_ndx( 'SOAX' )
+
+ bulkaero_species(:) = -1
+ bulkaero_species(1:20) = (/ id_dst01, id_dst02, id_dst03, id_dst04, &
+ id_sslt01, id_sslt02, id_sslt03, id_sslt04, &
+ id_soa, id_so4, id_oc1, id_oc2, id_cb1, id_cb2, id_nh4no3, &
+ id_soam,id_soai,id_soat,id_soab,id_soax /)
+ aer_species(:) = -1
+ n = 1
+ do m = 1,gas_pcnst
+ k=0
+ if ( any(bulkaero_species(:)==m) ) k=1
+ if ( k==0 ) k = index(trim(solsym(m)), '_a')
+ if ( k==0 ) k = index(trim(solsym(m)), '_c')
+ if ( k>0 ) then ! must be aerosol species
+ aer_species(n) = m
+ n = n+1
+ endif
+ enddo
+
+ CALL Addfld( 'MASS', (/ 'lev' /), 'A', 'kg', 'Mass of grid box' )
+ CALL Addfld( 'AREA', horiz_only, 'A', 'm2', 'Area of grid box' )
+ CALL Addfld( 'HEIGHT', (/ 'ilev' /),'A','m', 'Geopotential height above surface at interfaces' )
+
+ ! Note that constituents are already output by default
+ ! Add all species as output fields if desired
+ DO N = 1, gas_pcnst
+ IF ( ANY( aer_species == N ) ) THEN
+ SpcName = TRIM(solsym(N))
+ unit_basename = 'kg'
+ IF ( SpcName(1:3) == 'num' ) unit_basename = ' 1'
+ CALL AddFld( TRIM(SpcName), (/ 'lev' /), 'A', unit_basename//'/kg', &
+ TRIM(SpcName)//' concentration' )
+ CALL AddFld( TRIM(SpcName)//'_SRF', horiz_only, 'A', unit_basename//'/kg', &
+ TRIM(SpcName)//' in bottom layer' )
+ ELSE
+ M = map2chm(N)
+ SpcName = TRIM(solsym(N))
+ CALL AddFld( TRIM(SpcName), (/ 'lev' /), 'A', 'mol/mol', &
+ TRIM(SpcName)//' volume mixing ratio')
+ CALL AddFld( TRIM(SpcName)//'_SRF', horiz_only, 'A', 'mol/mol', &
+ TRIM(SpcName)//' in bottom layer')
+ ENDIF
+ IF ( ( N /= id_cly ) .AND. ( N /= id_bry ) ) THEN
+ IF ( history_aerosol .OR. history_chemistry ) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ' )
+ ENDIF
+ IF ( history_chemspecies_srf ) THEN
+ CALL Add_Default( TRIM(SpcName)//'_SRF', 1, ' ' )
+ ENDIF
+ ENDIF
+
+ IF ( history_cesm_forcing ) THEN
+ IF ( N == id_o3 ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+ IF ( N == id_oh ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+ IF ( N == id_no3 ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+ IF ( N == id_ho2 ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+
+ IF ( N == id_o3 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_so4_a1 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_so4_a2 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_so4_a3 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+
+ IF ( N == id_num_a2 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_num_a3 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_dst_a3 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_ncl_a3 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+
+ ENDIF
+ IF ( history_scwaccm_forcing ) THEN
+ IF ( N == id_co2 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_h ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_no ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_o ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_o2 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_o3 ) CALL Add_Default( TRIM(SpcName), 8, ' ')
+ IF ( N == id_h2o ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+ IF ( N == id_ch4 ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+ IF ( N == id_n2o ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+ IF ( N == id_cfc11 ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+ IF ( N == id_cfc12 ) CALL Add_Default( TRIM(SpcName), 1, ' ')
+ ENDIF
+
+ IF (history_dust .AND. (index(TRIM(SpcName),'dst_') > 0)) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ')
+ ENDIF
+ ENDDO
+
+ IF ( Input_Opt%LDryD ) THEN
+ DO N = 1, State_Chm%nDryDep
+ SpcName = 'DV_'//to_upper(TRIM(depName(N)))
+ CALL AddFld( TRIM(SpcName), horiz_only, 'A', 'm/s', &
+ TRIM(SpcName)//' dry deposition velocity')
+ ENDDO
+
+ DO N = 1, State_Chm%nAdvect
+ ! Get the species ID from the advected species ID
+ M = State_Chm%Map_Advect(N)
+
+ ! Get info about this species from the species database
+ SpcInfo => State_Chm%SpcData(M)%Info
+ SpcName = 'DF_'//to_upper(TRIM(SpcInfo%Name))
+ CALL AddFld( TRIM(SpcName), horiz_only, 'A', 'kg/m2/s', &
+ TRIM(SpcName)//' dry deposition flux')
+ IF ( history_chemistry ) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ' )
+ ENDIF
+
+ ! Free pointer
+ SpcInfo => NULL()
+ ENDDO
+ ENDIF
+
+ ! Chemical tendencies and surface fluxes
+ DO N = 1, gas_pcnst
+ IF ( map2chm(N) > 0 ) THEN
+ ! If this is a GEOS-Chem species then capitalize. This avoids
+ ! issues where Br2 /= BR2
+ srcnam(N) = 'CT_'//to_upper(TRIM(solsym(N))) ! chem tendency (source/sink)
+ ELSE
+ ! For MAM aerosols, keep as it is (i.e. bc_a1)
+ srcnam(N) = 'CT_'//TRIM(solsym(N)) ! chem tendency (source/sink)
+ ENDIF
+ SpcName = srcnam(N)
+ CALL Addfld( TRIM(SpcName), (/ 'lev' /), 'A', 'kg/kg/s', TRIM(SpcName)//' source/sink' )
+
+ SpcName = TRIM(solsym(N))
+ CALL cnst_get_ind( SpcName, M, abort=.false. )
+ IF ( M > 0 ) THEN
+ IF (sflxnam(M)(3:5) == 'num') THEN ! name is in the form of "SF****"
+ unit_basename = ' 1'
+ ELSE
+ unit_basename = 'kg'
+ ENDIF
+ SpcName = sflxnam(M)
+ CALL Addfld ( TRIM(SpcName), horiz_only, 'A', unit_basename//'/m2/s', &
+ TRIM(solsym(N))//' surface flux')
+ IF ( history_aerosol .OR. history_chemistry ) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ' )
+ ENDIF
+
+ IF ( history_cesm_forcing ) THEN
+ IF ( TRIM(SpcName(3:)) == 'NO' .OR. TRIM(SpcName(3:)) == 'NH3' ) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ' )
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDDO
+
+ ! Add chemical tendency of water vapor to water budget output
+ IF ( history_budget ) THEN
+ CALL Add_Default ('CT_H2O' , history_budget_histfile_num, ' ')
+ ENDIF
+
+ CALL get_TagInfo( Input_Opt = Input_Opt, &
+ tagID = 'PHO', &
+ State_Chm = State_Chm, &
+ Found = Found, &
+ RC = RC, &
+ nTags = nPhotol )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Abnormal exit from routine "Get_TagInfo", could not ' // &
+ ' get nTags!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ DO M = 1, nPhotol
+ CALL get_TagInfo( Input_Opt = Input_Opt, &
+ tagID = 'PHO', &
+ State_Chm = State_Chm, &
+ Found = Found, &
+ RC = RC, &
+ N = M, &
+ tagName = tagName )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Abnormal exit from routine "Get_TagInfo"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ SpcName = 'Jval_' // TRIM( tagName )
+ CALL Addfld( TRIM(SpcName), (/ 'lev' /), 'A', '1/s', &
+ TRIM(tagName) // ' photolysis rate' )
+ ENDDO
+ ! Add JvalO3O1D and JvalO3O3P
+ SpcName = 'JvalO3O1D'
+ CALL Addfld( TRIM(SpcName), (/ 'lev' /), 'A', '1/s', &
+ 'O3 -> O1D photolysis rate' )
+
+ SpcName = 'JvalO3O3P'
+ CALL Addfld( TRIM(SpcName), (/ 'lev' /), 'A', '1/s', &
+ 'O3 -> O3P photolysis rate' )
+
+ ! ==========================================
+ ! Now add fields corresponding to State_Met
+ ! ==========================================
+
+ ! Copied from Headers/registry_mod.F90
+ ! Point to the head node of the Registry
+ Current => State_Met%Registry
+
+ ! As long as the current node isn't NULL
+ DO WHILE( ASSOCIATED( Current ) )
+
+ ! Get the REGISTRY ITEM belonging to this node of the Registry
+ Item => Current%Item
+
+ ! Only print on the root CPU
+ IF ( ASSOCIATED( Item ) ) THEN
+
+ !IF (( TRIM(Item%FullName(1:8)) /= 'MET_XLAI' ) .AND. &
+ ! ( TRIM(Item%FullName(1:8)) /= 'MET_IUSE' ) .AND. &
+ ! ( TRIM(Item%FullName(1:9)) /= 'MET_ILAND' )) THEN
+ ! IF ( TRIM(Item%DimNames) == 'xy' ) THEN
+ ! CALL Addfld( TRIM( Item%FullName ), horiz_only, 'A', &
+ ! TRIM( Item%Units ), TRIM( Item%Description ) )
+ ! ELSE
+ ! CALL Addfld( TRIM( Item%FullName ), (/ 'lev' /), 'A', &
+ ! TRIM( Item%Units ), TRIM( Item%Description ) )
+ ! ENDIF
+ !ENDIF
+
+ ENDIF
+
+ ! Point to next node of the Registry
+ Current => Current%Next
+
+ ENDDO
+
+ ! Chemical tendencies
+ DO N = 1, gas_pcnst
+ M = map2chm(N)
+ IF ( M > 0 ) THEN
+ dtchem_name(N) = 'D'//to_upper(TRIM(solsym(N)))//'CHM'
+ ELSE
+ dtchem_name(N) = 'D'//TRIM(solsym(N))//'CHM'
+ ENDIF
+ SpcName = TRIM(dtchem_name(N))
+ CALL Addfld( TRIM(SpcName), (/ 'lev' /), 'A', 'kg/s', &
+ 'net tendency from chemistry' )
+ ENDDO
+
+ i_NO = Ind_('NO')
+ i_NO2 = Ind_('NO2')
+ i_N = Ind_('N')
+ i_BrNO2 = Ind_('BrNO2')
+ i_BrNO3 = Ind_('BrNO3')
+ i_ClNO2 = Ind_('ClNO2')
+ i_ClNO3 = Ind_('ClNO3')
+ i_ETHLN = Ind_('ETHLN')
+ i_ETNO3 = Ind_('ETNO3')
+ i_HNO2 = Ind_('HNO2')
+ i_HNO3 = Ind_('HNO3')
+ i_HNO4 = Ind_('HNO4')
+ i_ICN = Ind_('ICN')
+ i_ICNOO = Ind_('ICNOO')
+ i_IDHNBOO = Ind_('IDHNBOO')
+ i_IDHNDOO1 = Ind_('IDHNDOO1')
+ i_IDN = Ind_('IDN')
+ i_IDNOO = Ind_('IDNOO')
+ i_IHN1 = Ind_('IHN1')
+ i_IHN2 = Ind_('IHN2')
+ i_IHN3 = Ind_('IHN3')
+ i_IHN4 = Ind_('IHN4')
+ i_IHPNBOO = Ind_('IHPNBOO')
+ i_IHPNDOO = Ind_('IHPNDOO')
+ i_INA = Ind_('INA')
+ i_INO = Ind_('INO')
+ i_INO2B = Ind_('INO2B')
+ i_INO2D = Ind_('INO2D')
+ i_INPB = Ind_('INPB')
+ i_INPD = Ind_('INPD')
+ i_IONO = Ind_('IONO')
+ i_IONO2 = Ind_('IONO2')
+ i_IPRNO3 = Ind_('IPRNO3')
+ i_ISOPNOO1 = Ind_('ISOPNOO1')
+ i_ISOPNOO2 = Ind_('ISOPNOO2')
+ i_ITCN = Ind_('ITCN')
+ i_ITHN = Ind_('ITHN')
+ i_MACRNO2 = Ind_('MACRNO2')
+ i_MCRHN = Ind_('MCRHN')
+ i_MCRHNB = Ind_('MCRHNB')
+ i_MENO3 = Ind_('MENO3')
+ i_MONITS = Ind_('MONITS')
+ i_MONITU = Ind_('MONITU')
+ i_MPAN = Ind_('MPAN')
+ i_MPN = Ind_('MPN')
+ i_MVKN = Ind_('MVKN')
+ i_N2O5 = Ind_('N2O5')
+ i_NO3 = Ind_('NO3')
+ i_NPRNO3 = Ind_('NPRNO3')
+ i_OLND = Ind_('OLND')
+ i_OLNN = Ind_('OLNN')
+ i_PAN = Ind_('PAN')
+ i_PPN = Ind_('PPN')
+ i_PRN1 = Ind_('PRN1')
+ i_PROPNN = Ind_('PROPNN')
+ i_PRPN = Ind_('PRPN')
+ i_R4N1 = Ind_('R4N1')
+ i_R4N2 = Ind_('R4N2')
+ i_HONIT = Ind_('HONIT')
+ i_IONITA = Ind_('IONITA')
+ i_NIT = Ind_('NIT')
+ i_NITs = Ind_('NITs')
+ i_H = Ind_('H')
+ i_OH = Ind_('OH')
+ i_HO2 = Ind_('HO2')
+ i_H2O2 = Ind_('H2O2')
+ i_Cl = Ind_('Cl')
+ i_ClO = Ind_('ClO')
+ i_HOCl = Ind_('HOCl')
+ i_Cl2 = Ind_('Cl2')
+ i_Cl2O2 = Ind_('Cl2O2')
+ i_OClO = Ind_('OClO')
+ i_ClOO = Ind_('ClOO')
+ i_HCl = Ind_('HCl')
+ i_ClNO2 = Ind_('ClNO2')
+ i_ClNO3 = Ind_('ClNO3')
+ i_BrCl = Ind_('BrCl')
+ i_ICl = Ind_('ICl')
+ i_H1211 = Ind_('H1211')
+ i_CFC115 = Ind_('CFC115')
+ i_CH3Cl = Ind_('CH3Cl')
+ i_HCFC142b = Ind_('HCFC142b')
+ i_HCFC22 = Ind_('HCFC22')
+ i_CH2ICl = Ind_('CH2ICl')
+ i_CFC114 = Ind_('CFC114')
+ i_CFC12 = Ind_('CFC12')
+ i_HCFC141b = Ind_('HCFC141b')
+ i_HCFC123 = Ind_('HCFC123')
+ i_CH2Cl2 = Ind_('CH2Cl2')
+ i_CFC11 = Ind_('CFC11')
+ i_CH3CCl3 = Ind_('CH3CCl3')
+ i_CHCl3 = Ind_('CHCl3')
+ i_CCl4 = Ind_('CCl4')
+ i_CFC113 = Ind_('CFC113')
+ i_SALACL = Ind_('SALACL')
+ i_SALCCL = Ind_('SALCCL')
+ i_Br = Ind_('Br')
+ i_BrO = Ind_('BrO')
+ i_BrCl = Ind_('BrCl')
+ i_HOBr = Ind_('HOBr')
+ i_HBr = Ind_('HBr')
+ i_BrNO2 = Ind_('BrNO2')
+ i_BrNO3 = Ind_('BrNO3')
+ i_IBr = Ind_('IBr')
+ i_Br2 = Ind_('Br2')
+ i_CH3Br = Ind_('CH3Br')
+ i_H1211 = Ind_('H1211')
+ i_H1301 = Ind_('H1301')
+ i_H2402 = Ind_('H2402')
+ i_CH2Br2 = Ind_('CH2Br2')
+ i_CHBr3 = Ind_('CHBr3')
+ i_BrSALA = Ind_('BrSALA')
+ i_BrSALC = Ind_('BrSALC')
+ i_CH2IBr = Ind_('CH2IBr')
+ i_SO2 = Ind_('SO2')
+ i_SO4 = Ind_('SO4')
+ i_NH3 = Ind_('NH3')
+ i_NH4 = Ind_('NH4')
+ i_CH4 = Ind_('CH4')
+ i_H2O = Ind_('H2O')
+ i_H2 = Ind_('H2')
+
+ NOx_species = (/ i_N, i_NO, i_NO2 /)
+ NOy_species = (/ i_N, i_NO, i_NO2, i_BrNO2, i_BrNO3, i_ClNO2, i_ClNO3,&
+ i_ETHLN, i_ETNO3, i_HNO2, i_HNO3, i_HNO4, i_ICN, &
+ i_ICNOO, i_IDHNBOO, i_IDHNDOO1, i_IDN, &
+ i_IDNOO, i_IHN1, i_IHN2, i_IHN3, i_IHN4, i_IHPNBOO, &
+ i_IHPNDOO, i_INA, i_INO, i_INO2B, i_INO2D, i_INPB, &
+ i_INPD, i_IONO, i_IONO2, i_IPRNO3, i_ISOPNOO1, &
+ i_ISOPNOO2, i_ITCN, i_ITHN, i_MACRNO2, i_MCRHN, &
+ i_MCRHNB, i_MENO3, i_MONITS, i_MONITU, i_MPAN, i_MPN,&
+ i_MVKN, i_N2O5, i_NO3, i_NPRNO3, i_OLND, i_OLNN, &
+ i_PAN, i_PPN, i_PRN1, i_PROPNN, i_PRPN, i_R4N1, &
+ i_R4N2, i_HONIT, i_IONITA, i_NIT, i_NITs /)
+ HOx_species = (/ i_H, i_OH, i_HO2, i_H2O2 /)
+ ClOx_species = (/ i_Cl, i_ClO, i_HOCl, i_Cl2, i_Cl2O2, i_OClO /)
+ ClOy_species = (/ i_Cl, i_ClO, i_HOCl, i_Cl2, i_Cl2O2, i_OClO, &
+ i_HCl, i_ClNO3, i_BrCl, i_ICl, i_ClNO2 /)
+ tCly_species = (/ i_Cl, i_ClO, i_HOCl, i_Cl2, i_Cl2O2, i_OClO, i_ClOO, &
+ i_HCl, i_ClNO2, i_ClNO3, i_BrCl, i_ICl, i_H1211, &
+ i_CFC115, i_CH3Cl, i_HCFC142b, i_HCFC22, i_CH2ICl, &
+ i_CFC114, i_CFC12, i_HCFC141b, i_HCFC123, i_CH2Cl2, &
+ i_CFC11, i_CH3CCl3, i_CHCl3, i_CCl4, i_CFC113, &
+ i_SALACL, i_SALCCL /)
+ BrOx_species = (/ i_Br, i_BrO, i_BrCl, i_HOBr /)
+ BrOy_species = (/ i_Br, i_BrO, i_BrCl, i_HOBr, i_HBr, i_BrNO2, &
+ i_BrNO3, i_IBr, i_Br2 /)
+ tBry_species = (/ i_Br, i_BrO, i_BrCl, i_HOBr, i_HBr, i_BrNO2, &
+ i_BrNO3, i_IBr, i_Br2, i_CH3Br, i_H1211, i_H1301, &
+ i_H2402, i_CH2Br2, i_CHBr3, i_BrSALA, i_BrSALC, &
+ i_CH2IBr /)
+ SOx_species = (/ i_SO2, i_SO4 /)
+ NHx_species = (/ i_NH3, i_NH4 /)
+ TOTH_species = (/ i_CH4, i_H2O, i_H2 /)
+
+ DO N = 1, SIZE(NOx_species)
+ idx = NOx_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ NOx_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ NOx_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(NOy_species)
+ idx = NOy_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ NOy_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ NOy_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(HOx_species)
+ idx = HOx_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ HOx_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ HOx_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(ClOx_species)
+ idx = ClOx_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ ClOx_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ ClOx_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(ClOy_species)
+ idx = ClOy_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ ClOy_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ ClOy_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(tCly_species)
+ idx = tCly_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ tCly_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ tCly_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(BrOx_species)
+ idx = BrOx_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ BrOx_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ BrOx_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(BrOy_species)
+ idx = BrOy_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ BrOy_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ BrOy_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(tBry_species)
+ idx = tBry_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ tBry_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ tBry_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(SOx_species)
+ idx = SOx_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ SOx_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ SOx_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(NHx_species)
+ idx = NHx_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ NHx_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ NHx_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ DO N = 1, SIZE(TOTH_species)
+ idx = TOTH_species(N)
+ IF ( idx > 0 ) THEN
+ SpcInfo => State_Chm%SpcData(idx)%Info
+ TOTH_MWs(N) = REAL(SpcInfo%MW_g,r8)
+ SpcInfo => NULL()
+ ELSE
+ TOTH_MWs(N) = -1.0e+00_r8
+ ENDIF
+ ENDDO
+
+ IF ( ANY(NOx_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "NOx indices: ", NOx_species
+ ENDIF
+ IF ( ANY(NOy_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "NOy indices: ", NOy_species
+ ENDIF
+ IF ( ANY(HOx_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "HOx indices: ", HOx_species
+ ENDIF
+ IF ( ANY(ClOx_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "ClOx indices: ", ClOx_species
+ ENDIF
+ IF ( ANY(ClOy_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "ClOy indices: ", ClOy_species
+ ENDIF
+ IF ( ANY(tCly_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "tCly indices: ", tCly_species
+ ENDIF
+ IF ( ANY(BrOx_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "BrOx indices: ", BrOx_species
+ ENDIF
+ IF ( ANY(BrOy_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "BrOy indices: ", BrOy_species
+ ENDIF
+ IF ( ANY(tBry_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "tBry indices: ", tBry_species
+ ENDIF
+ IF ( ANY(SOx_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "SOx indices: ", SOx_species
+ ENDIF
+ IF ( ANY(NHx_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "NHx indices: ", NHx_species
+ ENDIF
+ IF ( ANY(TOTH_species <= 0 ) ) THEN
+ IF ( MasterProc ) Write(iulog,*) "TOTH indices: ", TOTH_species
+ ENDIF
+
+ CALL Addfld( 'NOX', (/ 'lev' /), 'A', 'mol/mol', &
+ 'NOx molar mixing ratio' )
+ CALL Addfld( 'NOY', (/ 'lev' /), 'A', 'mol/mol', &
+ 'NOy molar mixing ratio' )
+ CALL Addfld( 'NOY_mmr', (/ 'lev' /), 'A', 'kg/kg', &
+ 'NOy mass mixing ratio' )
+ CALL Addfld( 'NOY_SRF', horiz_only, 'A', 'mol/mol', &
+ 'Surface NOy molar mixing ratio' )
+ CALL Addfld( 'HOX', (/ 'lev' /), 'A', 'mol/mol', &
+ 'HOx molar mixing ratio' )
+ CALL Addfld( 'CLOX', (/ 'lev' /), 'A', 'mol/mol', &
+ 'ClOx molar mixing ratio' )
+ CALL Addfld( 'CLOY', (/ 'lev' /), 'A', 'mol/mol', &
+ 'Total inorganic chlorine (ClOy) molar mixing ratio' )
+ CALL Addfld( 'TCLY', (/ 'lev' /), 'A', 'mol/mol', &
+ 'Total Cl molar mixing ratio' )
+ CALL Addfld( 'BROX', (/ 'lev' /), 'A', 'mol/mol', &
+ 'BrOx molar mixing ratio' )
+ CALL Addfld( 'BROY', (/ 'lev' /), 'A', 'mol/mol', &
+ 'Total inorganic bromine (BrOy) molar mixing ratio' )
+ CALL Addfld( 'TBRY', (/ 'lev' /), 'A', 'mol/mol', &
+ 'Total Br molar mixing ratio' )
+ CALL Addfld( 'SOX', (/ 'lev' /), 'A', 'mol/mol', &
+ 'SOx molar mixing ratio' )
+ CALL Addfld( 'SOX_mmr', (/ 'lev' /), 'A', 'kg/kg', &
+ 'SOx mass mixing ratio' )
+ CALL Addfld( 'NHX', (/ 'lev' /), 'A', 'mol/mol', &
+ 'NHx molar mixing ratio' )
+ CALL Addfld( 'NHX_mmr', (/ 'lev' /), 'A', 'kg/kg', &
+ 'NHx mass mixing ratio' )
+ CALL Addfld( 'TOTH', (/ 'lev' /), 'A', 'mol/mol', &
+ 'Total H2 molar mixing ratio' )
+
+ CALL Addfld( 'SAD_STRAT', (/ 'lev' /), 'I', 'cm2/cm3', 'Stratospheric aerosol SAD' )
+ CALL Addfld( 'SAD_SULFC', (/ 'lev' /), 'I', 'cm2/cm3', 'Chemical sulfate aerosol SAD' )
+ CALL Addfld( 'SAD_PSC', (/ 'lev' /), 'I', 'cm2/cm3', 'PSC aerosol SAD' )
+ CALL Addfld( 'RAD_SULFC', (/ 'lev' /), 'I', 'cm', 'Chemical sulfate radius' )
+ CALL Addfld( 'RAD_PSC', (/ 'lev' /), 'I', 'cm', 'PSC aerosol radius' )
+ CALL Addfld( 'SAD_TROP', (/ 'lev' /), 'I', 'cm2/cm3', 'Tropospheric aerosol SAD' )
+ CALL Addfld( 'SAD_AERO', (/ 'lev' /), 'I', 'cm2/cm3', 'Aerosol surface area density' )
+ IF ( history_cesm_forcing ) THEN
+ CALL Add_Default( 'SAD_AERO', 8, ' ' )
+ ENDIF
+ CALL Addfld( 'REFF_AERO', (/ 'lev' /), 'I', 'cm', 'Aerosol effective radius')
+ CALL Addfld( 'SULF_TROP', (/ 'lev' /), 'I', 'cm2/cm3', 'Tropospheric sulfate area density')
+
+ CALL Addfld( 'HNO3_TOTAL', (/ 'lev' /), 'I', 'mol/mol', 'Total HNO3' )
+ CALL Addfld( 'HNO3_STS', (/ 'lev' /), 'I', 'mol/mol', 'STS condensed HNO3' )
+ CALL Addfld( 'HNO3_NAT', (/ 'lev' /), 'I', 'mol/mol', 'NAT condensed HNO3' )
+ CALL Addfld( 'HNO3_GAS', (/ 'lev' /), 'I', 'mol/mol', 'Gas phase HNO3' )
+ CALL Addfld( 'H2O_GAS', (/ 'lev' /), 'I', 'mol/mol', 'Gas phase H2O' )
+ CALL Addfld( 'HCL_TOTAL', (/ 'lev' /), 'I', 'mol/mol', 'Total HCl' )
+ CALL Addfld( 'HCL_GAS', (/ 'lev' /), 'I', 'mol/mol', 'Gas phase HCl' )
+ CALL Addfld( 'HCL_STS', (/ 'lev' /), 'I', 'mol/mol', 'STS condensend HCl' )
+
+ CALL Addfld( 'SZA', horiz_only, 'I', 'degrees', 'Solar Zenith Angle' )
+ CALL Addfld( 'U_SRF', horiz_only, 'I', 'm/s', 'Horizontal wind velocity' )
+ CALL Addfld( 'V_SRF', horiz_only, 'I', 'm/s', 'Vertical wind velocity' )
+ CALL Addfld( 'Q_SRF', horiz_only, 'I', 'kg/kg', 'Specific humidity' )
+
+ CALL Addfld( 'CT_H2O_GHG', (/ 'lev' /), 'A','kg/kg/s', 'ghg-chem h2o source/sink' )
+
+ !=======================================================================
+ ! Cleanup and quit
+ !=======================================================================
+ Current => NULL()
+ Item => NULL()
+
+ END SUBROUTINE CESMGC_Diag_Init
+!EOC
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: cesmgc_diag_calc
+!
+! !DESCRIPTION: Subroutine CESMGC\_Diag\_Calc passes the diagnostics variable
+! to the CAM History routines
+!\\
+!\\
+! !INTERFACE:
+!
+ SUBROUTINE CESMGC_Diag_Calc( Input_Opt, State_Chm, State_Diag, &
+ State_Grid, State_Met, cam_in, state, &
+ mmr_tend, LCHNK )
+!
+! !USES:
+!
+ USE Input_Opt_Mod, ONLY : OptInput
+ USE State_Chm_Mod, ONLY : ChmState
+ USE State_Met_Mod, ONLY : MetState
+ USE State_Diag_Mod, ONLY : DgnState
+ USE State_Diag_Mod, ONLY : get_TagInfo
+ USE State_Grid_Mod, ONLY : GrdState
+ USE Species_Mod, ONLY : Species
+ USE Registry_Mod, ONLY : MetaRegItem, RegItem
+ USE Registry_Mod, ONLY : Registry_Lookup
+ USE Registry_Params_Mod
+ USE PRECISION_MOD
+ USE CHEM_MODS, ONLY : adv_mass
+ USE CAM_HISTORY, ONLY : outfld, hist_fld_active
+ USE CONSTITUENTS, ONLY : cnst_name, sflxnam
+ USE DRYDEP_MOD, ONLY : depName, Ndvzind
+ USE CAMSRFEXCH, ONLY : cam_in_t
+ USE PHYSICS_TYPES, ONLY : physics_state
+ USE SPMD_UTILS, ONLY : MasterProc
+ USE PHYSCONST, ONLY : MWDry
+ USE UCX_MOD, ONLY : GET_STRAT_OPT!, AERFRAC
+ USE CMN_SIZE_MOD, ONLY : NDUST
+ USE CMN_FJX_MOD
+!
+! !INPUT PARAMETERS:
+!
+ TYPE(OptInput), INTENT(IN) :: Input_Opt ! Input options
+ TYPE(ChmState), INTENT(IN) :: State_Chm ! Chemistry State object
+ TYPE(DgnState), INTENT(IN) :: State_Diag ! Diag State object
+ TYPE(GrdState), INTENT(IN) :: State_Grid ! Grid State object
+ TYPE(MetState), INTENT(IN) :: State_Met ! Meteorology State object
+ TYPE(cam_in_t), INTENT(IN) :: cam_in ! import state
+ TYPE(physics_state), INTENT(IN) :: state ! Physics state variables
+ REAL(r8), INTENT(IN) :: mmr_tend(state%ncol,pver,gas_pcnst)
+ ! Net tendency from chemistry in kg/s
+ INTEGER, INTENT(IN) :: LCHNK ! Chunk number
+!
+! !REVISION HISTORY:
+! 20 Oct 2020 - T. M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+ ! Integers
+ INTEGER :: I, J, L, M, N, ND, SM
+ INTEGER :: idx
+ INTEGER :: RC
+ INTEGER :: Source_KindVal ! KIND value of data
+ INTEGER :: Output_KindVal ! KIND value for output
+ INTEGER :: Rank ! Size of data
+
+ INTEGER :: nY, nZ
+
+ ! Logicals
+ LOGICAL :: Found
+ LOGICAL :: rootChunk
+ LOGICAL :: OnLevelEdges ! Is the data defined
+ ! on level edges (T/F)
+
+ ! Strings
+ CHARACTER(LEN=255) :: ThisLoc
+ CHARACTER(LEN=255) :: ErrMsg
+ CHARACTER(LEN=255) :: SpcName
+ CHARACTER(LEN=255) :: tagName
+
+ ! Real
+ REAL(r8) :: wgt
+ REAL(r8) :: MW
+ REAL(r8) :: RAER, REFF, SADSTRAT, XSASTRAT
+
+ ! Arrays
+ REAL(r8) :: outTmp(State_Grid%nY,State_Grid%nZ)
+ REAL(r8) :: radTmp(State_Grid%nY,State_Grid%nZ)
+
+ ! Floating-point data pointers (8-byte precision)
+ REAL(f8), POINTER :: Ptr0d_8 ! 0D 8-byte data
+ REAL(f8), POINTER :: Ptr1d_8(: ) ! 1D 8-byte data
+ REAL(f8), POINTER :: Ptr2d_8(:,: ) ! 2D 8-byte data
+ REAL(f8), POINTER :: Ptr3d_8(:,:,:) ! 3D 8-byte data
+
+ ! Objects
+ TYPE(Species), POINTER :: SpcInfo
+ TYPE(MetaRegItem), POINTER :: Current
+ TYPE(RegItem ), POINTER :: Item
+
+ !=================================================================
+ ! CESMGC_Diag_Calc begins here!
+ !=================================================================
+
+ nY = State_Grid%nY
+ nZ = State_Grid%nZ
+
+ ! Initialize pointers
+ SpcInfo => NULL()
+ Current => NULL()
+ Item => NULL()
+
+ ! For error trapping
+ ErrMsg = ''
+ ThisLoc = ' -> at CESMGC_Diag_Calc (in chemistry/geoschem/cesmgc_diag_mod.F90)'
+
+ ! Define rootChunk
+ rootChunk = ( MasterProc.and.(LCHNK==BEGCHUNK) )
+
+ CALL OutFld( 'AREA', State_Grid%Area_M2(1,:nY), nY, LCHNK)
+ CALL OutFld( 'MASS', State_Met%AD(1,:nY,nZ:1:-1), nY, LCHNK)
+ CALL Outfld( 'HEIGHT', state%zi(:nY,:), nY, LCHNK )
+
+ ! ===============================================
+ ! Diagnose chemical species (constituents and short-lived)
+ ! ===============================================
+
+ DO N = 1, gas_pcnst
+ M = map2chm(N)
+ SpcName = TRIM(solsym(N))
+ outTmp = 0.0e+00_r8
+ IF ( adv_mass(N) > 0.0e+00_r8 .AND. M /= 0 .AND. &
+ (hist_fld_active(TRIM(SpcName)) .OR. hist_fld_active(TRIM(SpcName)//'_SRF')) ) THEN
+ IF ( M > 0 ) THEN
+ ! mol/mol
+ outTmp(:nY,:) = REAL(State_Chm%Species(1,:nY,nZ:1:-1,M),r8) * MWDry / adv_mass(N)
+ ELSEIF ( ANY( aer_species == N ) ) THEN
+ ! kg/kg
+ outTmp(:nY,:) = state%q(:nY,:nZ,-M)
+ ELSE
+ ! mol/mol
+ outTmp(:nY,:) = state%q(:nY,:nZ,-M) * MWDry / adv_mass(N)
+ ENDIF
+ CALL OutFld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ CALL OutFld( TRIM(SpcName)//'_SRF', outTmp(:nY,nZ), nY, LCHNK )
+ ENDIF
+ ENDDO
+
+ ! ===============================================
+ ! Diagnose chemical families (NOx, NOy, ...)
+ ! ===============================================
+
+ SpcName = 'NOX'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(NOx_species)
+ idx = NOx_species(N)
+ MW = NOx_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'NOY'
+ IF ( hist_fld_active(TRIM(SpcName)) .OR. hist_fld_active(TRIM(SpcName)//'_SRF') ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(NOy_species)
+ idx = NOy_species(N)
+ MW = NOy_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_N2O5 .OR. idx == i_IDN .OR. idx == i_IDNOO ) THEN
+ wgt = 2.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+ SpcName = 'NOY_SRF'
+ IF ( hist_fld_active(TRIM(SpcName)) ) CALL Outfld( TRIM(SpcName), outTmp(:nY,nZ), nY, LCHNK )
+
+ SpcName = 'NOY_mmr'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(NOy_species)
+ idx = NOy_species(N)
+ MW = NOy_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_N2O5 .OR. idx == i_IDN .OR. idx == i_IDNOO ) THEN
+ wgt = 2.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8)
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'HOX'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(HOx_species)
+ idx = HOx_species(N)
+ MW = HOx_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_H2O2 ) THEN
+ wgt = 2.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'CLOX'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(ClOx_species)
+ idx = ClOx_species(N)
+ MW = ClOx_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_Cl2 .OR. idx == i_Cl2O2 ) THEN
+ wgt = 2.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'CLOY'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(ClOy_species)
+ idx = ClOy_species(N)
+ MW = ClOy_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_Cl2 .OR. idx == i_Cl2O2 ) THEN
+ wgt = 2.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'TCLY'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(tCly_species)
+ idx = tCly_species(N)
+ MW = tCly_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_Cl2 .OR. idx == i_Cl2O2 .OR. idx == i_CFC114 .OR. &
+ idx == i_CFC12 .OR. idx == i_CH2Cl2 .OR. idx == i_HCFC123 .OR. &
+ idx == i_HCFC141b ) THEN
+ wgt = 2.0E+00_r8
+ ELSEIF ( idx == i_CFC11 .OR. idx == i_CFC113 .OR. idx == i_CH3CCl3 .OR. &
+ idx == i_CHCl3 ) THEN
+ wgt = 3.0E+00_r8
+ ELSEIF ( idx == i_CCl4 ) THEN
+ wgt = 4.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'BROX'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(BrOx_species)
+ idx = BrOx_species(N)
+ MW = BrOx_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'BROY'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(BrOy_species)
+ idx = BrOy_species(N)
+ MW = BrOy_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_Br2 ) THEN
+ wgt = 2.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'TBRY'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(tBry_species)
+ idx = tBry_species(N)
+ MW = tBry_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_Br2 .OR. idx == i_H2402 .OR. idx == i_CH2Br2 ) THEN
+ wgt = 2.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'SOX'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(SOx_species)
+ idx = SOx_species(N)
+ MW = SOx_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'SOX_mmr'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(SOx_species)
+ idx = SOx_species(N)
+ MW = SOx_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ outTmp(:nY,:) = outTmp(:nY,:) + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8)
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'NHX'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(NHx_species)
+ idx = NHx_species(N)
+ MW = NHx_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'NHX_mmr'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(NHx_species)
+ idx = NHx_species(N)
+ MW = NHx_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ outTmp(:nY,:) = outTmp(:nY,:) + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8)
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ SpcName = 'TOTH'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp = 0.0e+00_r8
+ DO N = 1, SIZE(TOTH_species)
+ idx = TOTH_species(N)
+ MW = TOTH_MWs(N)
+ IF ( idx <= 0 .OR. MW <= 0.0e+00_r8 ) CYCLE
+ wgt = 1.0E+00_r8
+ IF ( idx == i_CH4 ) THEN
+ wgt = 2.0E+00_r8
+ ENDIF
+ outTmp(:nY,:) = outTmp(:nY,:) &
+ + wgt * REAL(State_Chm%Species(1,:nY,nZ:1:-1,idx),r8) * MWDry / MW
+ ENDDO
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ ! ===============================================
+ ! Diagnose GEOS-Chem aerosol quantities
+ ! ===============================================
+
+ IF ( hist_fld_active('SAD_PSC') .OR. hist_fld_active('RAD_PSC') ) THEN
+ outTmp = 0.0e+00_r8
+ radTmp = 0.0e+00_r8
+ DO J = 1, nY
+ DO L = 1, nZ
+ CALL GET_STRAT_OPT(1,J,L,1,RAER,REFF,SADSTRAT,XSASTRAT)
+ outTmp(J,nZ+1-L) = SADSTRAT
+ radTmp(J,nZ+1-L) = RAER
+ ENDDO
+ ENDDO
+ CALL Outfld( 'SAD_PSC', outTmp(:nY,:), nY, LCHNK )
+ CALL Outfld( 'RAD_PSC', radTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ IF ( hist_fld_active('SAD_SULFC') .OR. hist_fld_active('RAD_SULFC') ) THEN
+ outTmp = 0.0e+00_r8
+ DO J = 1, nY
+ DO L = 1, nZ
+ CALL GET_STRAT_OPT(1,J,L,2,RAER,REFF,SADSTRAT,XSASTRAT)
+ outTmp(J,nZ+1-L) = SADSTRAT
+ radTmp(J,nZ+1-L) = RAER
+ ENDDO
+ ENDDO
+ CALL Outfld( 'SAD_SULFC', outTmp(:nY,:), nY, LCHNK )
+ CALL Outfld( 'RAD_SULFC', radTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ IF ( hist_fld_active('SAD_AERO') .OR. hist_fld_active('SAD_TROP') ) THEN
+ outTmp(:nY,:) = SUM(State_Chm%AeroArea(1,:nY,nZ:1:-1,:), DIM=3)
+ CALL Outfld( 'SAD_AERO', outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ IF ( hist_fld_active('SAD_TROP') ) THEN
+ DO J = 1, nY
+ DO L = 1, nZ
+ IF ( .NOT. State_Met%InTroposphere(1,J,nZ+1-L) ) THEN
+ outTmp(J,L) = 0.0e+00_r8
+ ENDIF
+ ENDDO
+ ENDDO
+ CALL Outfld( 'SAD_TROP', outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ IF ( hist_fld_active('REFF_AERO') ) THEN
+ !outTmp(:nY,:) = State_Chm%AeroRadi(1,:nY,nZ:1:-1,:)
+ !CALL Outfld( 'REFF_AERO', outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ IF ( hist_fld_active('SULF_TROP') ) THEN
+ outTmp(:nY,:) = State_Chm%AeroArea(1,:nY,nZ:1:-1,NDUST+1)
+ CALL Outfld( 'SULF_TROP', outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+
+ ! ===============================================
+ ! Diagnose stratospheric quantities
+ ! ===============================================
+
+ outTmp(:nY,:) = State_Chm%Species(1,:nY,nZ:1:-1,i_HNO3) * MWDry / MW_HNO3
+ CALL Outfld( 'HNO3_GAS', outTmp(:nY,:), nY, LCHNK )
+
+ ! TMMF, this requires to have access to the AERFRAC variable in ucx_mod.
+ !outTmp(:nY,:) = AERFRAC(1,:nY,nZ:1:-1,2)
+ !CALL Outfld( 'HNO3_STS', outTmp(:nY,:), nY, LCHNK )
+
+ outTmp = 0.0e+00_r8
+ DO J = 1, nY
+ DO L = 1, nZ
+ IF ( State_Met%InTroposphere(1,J,nZ+1-L) ) CYCLE
+ outTmp(J,L) = State_Chm%Species(1,J,nZ+1-L,i_NIT) * MWDry / MW_NIT
+ ENDDO
+ ENDDO
+ CALL Outfld( 'HNO3_NAT', outTmp(:nY,:), nY, LCHNK )
+
+ outTmp(:nY,:) = outTmp(:nY,:) + &
+ ! AERFRAC(1,:nY,nZ:1:-1,2) + &
+ State_Chm%Species(1,:nY,nZ:1:-1,i_HNO3) * MWDry / MW_HNO3
+ CALL Outfld( 'HNO3_TOTAL', outTmp(:nY,:), nY, LCHNK )
+
+ outTmp(:nY,:) = State_Chm%Species(1,:nY,nZ:1:-1,i_H2O) * MWDry / MW_H2O
+ CALL Outfld( 'H2O_GAS', outTmp(:nY,:), nY, LCHNK )
+
+ outTmp(:nY,:) = State_Chm%Species(1,:nY,nZ:1:-1,i_HCl) * MWDry / MW_HCl
+ CALL Outfld( 'HCL_GAS', outTmp(:nY,:), nY, LCHNK )
+
+ !outTmp(:nY,:) = AERFRAC(1,:nY,nZ:1:-1,3)
+ !CALL Outfld( 'HCL_STS', outTmp(:nY,:), nY, LCHNK )
+
+ outTmp(:nY,:) = 0.0e+00_r8
+ !outTmp(:nY,:) = AERFRAC(1,:nY,nZ:1:-1,3)
+ outTmp(:nY,:) = outTmp(:nY,:) + &
+ State_Chm%Species(1,:nY,nZ:1:-1,i_HCl) * MWDry / MW_HCl
+ CALL Outfld( 'HCL_TOTAL', outTmp(:nY,:), nY, LCHNK )
+
+ ! ===============================================
+ ! Diagnose dry deposition velocities and fluxes
+ ! ===============================================
+
+ IF ( Input_Opt%LDryD ) THEN
+ DO N = 1, State_Chm%nDryDep
+ ND = NDVZIND(N)
+ SpcName = 'DV_'//to_upper(TRIM(depName(N)))
+ IF ( .NOT. hist_fld_active(TRIM(SpcName)) ) CYCLE
+ CALL OutFld( TRIM(SpcName), State_Chm%DryDepVel(1,:nY,ND), nY, LCHNK )
+ ENDDO
+
+ DO N = 1, State_Chm%nAdvect
+ ! Get the species ID from the advected species ID
+ L = State_Chm%Map_Advect(N)
+
+ ! Get info about this species from the species database
+ SpcInfo => State_Chm%SpcData(L)%Info
+ SpcName = 'DF_'//to_upper(TRIM(SpcInfo%Name))
+
+ IF ( .NOT. hist_fld_active(TRIM(SpcName)) ) CYCLE
+ ! SurfaceFlux is Emissions - Drydep, but Emissions = 0, as it is applied
+ ! externally
+ CALL OutFld( TRIM(SpcName), -State_Chm%SurfaceFlux(1,:nY,N), nY, LCHNK )
+
+ ! Free pointer
+ SpcInfo => NULL()
+ ENDDO
+ ENDIF
+
+ ! ===============================================
+ ! Diagnose surface fluxes (emissions - drydep)
+ ! ===============================================
+
+ DO N = iFirstCnst, pcnst
+ SpcName = TRIM(sflxnam(N))
+ IF ( TRIM(SpcName) == '' ) CYCLE
+ IF ( .NOT. hist_fld_active(TRIM(SpcName)) ) CYCLE
+ CALL OutFld( TRIM(SpcName), cam_in%cflx(:nY,N), nY, LCHNK )
+ ENDDO
+
+ ! ===============================================
+ ! Diagnose chemical tendencies
+ ! ===============================================
+
+ ! Chemical tendencies in kg/kg/s
+ DO N = 1, gas_pcnst
+ SpcName = TRIM(srcnam(N))
+ IF ( TRIM(SpcName) == '' ) CYCLE
+ IF ( .NOT. hist_fld_active(TRIM(SpcName)) ) CYCLE
+ CALL OutFld( TRIM(SpcName), mmr_tend(:nY,:nZ,N), nY, LCHNK )
+ ENDDO
+
+ ! Chemical tendencies in kg/s
+ DO N = 1, gas_pcnst
+ SpcName = TRIM(dtchem_name(N))
+ IF ( .NOT. hist_fld_active(TRIM(SpcName)) ) CYCLE
+ outTmp = 0.0e+0_r8
+ outTmp(:nY,:nZ) = mmr_tend(:nY,:nZ,N) * REAL(State_Met%AD(1,:nY,nZ:1:-1),r8)
+ CALL OutFld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDDO
+
+ ! ===============================================
+ ! Diagnose photolysis rates
+ ! ===============================================
+
+ IF ( ASSOCIATED(State_Diag%Jval) ) THEN
+ DO M = 1, nPhotol
+ CALL get_TagInfo( Input_Opt = Input_Opt, &
+ tagID = 'PHO', &
+ State_Chm = State_Chm, &
+ Found = Found, &
+ RC = RC, &
+ N = M, &
+ tagName = tagName )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Abnormal exit from routine "Get_TagInfo"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ SpcName = 'Jval_' // TRIM( tagName )
+ IF ( .NOT. hist_fld_active(TRIM(SpcName)) ) CYCLE
+ outTmp(:nY,:nZ) = REAL(State_Diag%Jval(1,:nY,nZ:1:-1,M),r8)
+ CALL OutFld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDDO
+ ENDIF
+ IF ( ASSOCIATED(State_Diag%JvalO3O1D) ) THEN
+ SpcName = 'JvalO3O1D'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp(:nY,:nZ) = REAL(State_Diag%JvalO3O1D(1,:nY,nZ:1:-1),r8)
+ CALL OutFld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+ ENDIF
+ IF ( ASSOCIATED(State_Diag%JvalO3O3P) ) THEN
+ SpcName = 'JvalO3O3P'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp(:nY,:nZ) = REAL(State_Diag%JvalO3O3P(1,:nY,nZ:1:-1),r8)
+ CALL OutFld( TRIM(SpcName), outTmp(:nY,:), nY, LCHNK )
+ ENDIF
+ ENDIF
+
+ ! ===============================================
+ ! Diagnose fields corresponding to State_Met
+ ! ===============================================
+
+ ! Copied from Headers/registry_mod.F90
+ ! Point to the head node of the Registry
+ Current => State_Met%Registry
+
+ Source_KindVal = KINDVAL_F8
+ Output_KindVal = KINDVAL_F8
+
+ ! As long as the current node isn't NULL
+ DO WHILE( ASSOCIATED( Current ) )
+
+ ! Get the REGISTRY ITEM belonging to this node of the Registry
+ Item => Current%Item
+
+ ! Only print on the root CPU
+ IF ( ASSOCIATED( Item ) ) THEN
+
+ SpcName = TRIM(Item%FullName)
+ IF (( TRIM(Item%FullName(1:8)) /= 'MET_XLAI' ) .AND. &
+ ( TRIM(Item%FullName(1:8)) /= 'MET_IUSE' ) .AND. &
+ ( TRIM(Item%FullName(1:9)) /= 'MET_ILAND' )) THEN
+ CALL Registry_Lookup( am_I_Root = Input_Opt%amIRoot, &
+ Registry = State_Met%Registry, &
+ RegDict = State_Met%RegDict, &
+ State = State_Met%State, &
+ Variable = Item%FullName, &
+ Source_KindVal = Source_KindVal, &
+ Output_KindVal = Output_KindVal, &
+ Rank = Rank, &
+ OnLevelEdges = OnLevelEdges, &
+ Ptr0d_8 = Ptr0d_8, &
+ Ptr1d_8 = Ptr1d_8, &
+ Ptr2d_8 = Ptr2d_8, &
+ Ptr3d_8 = Ptr3d_8, &
+ RC = RC )
+
+ !IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ ! IF ( Source_KindVal /= KINDVAL_I4 ) THEN
+ ! IF ( Rank == 2 ) THEN
+ ! outTmp(:nY,nZ) = REAL(Ptr2d_8(1,:nY),r8)
+ ! CALL Outfld( TRIM( Item%FullName ), outTmp(:nY,nZ), nY, LCHNK )
+ ! ELSEIF ( Rank == 3 ) THEN
+ ! ! For now, treat variables defined on level edges by ignoring top
+ ! ! most layer
+ ! outTmp(:nY,:nZ) = REAL(Ptr3d_8(1,:nY,nZ:1:-1),r8)
+ ! CALL Outfld( TRIM( Item%FullName ), outTmp(:nY,:), nY, LCHNK )
+ ! ELSE
+ ! IF ( rootChunk ) Write(iulog,*) " Item ", TRIM(Item%FullName), &
+ ! " is of rank ", Rank, " and will not be diagnosed!"
+ ! ENDIF
+ ! ENDIF
+ !ENDIF
+ ENDIF
+
+ ENDIF
+
+ ! Point to next node of the Registry
+ Current => Current%Next
+
+ ENDDO
+
+ SpcName = 'SZA'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp(:nY,1) = ACOS(MIN(MAX(State_Met%SUNCOS(1,:nY),-1._r8),1._r8))/pi*180.e+0_r8
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,1) , nY, LCHNK )
+ ENDIF
+
+ SpcName = 'U_SRF'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp(:nY,:) = state%u(:nY,:)
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:) , nY, LCHNK )
+ ENDIF
+
+ SpcName = 'V_SRF'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp(:nY,:) = state%v(:nY,:)
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:) , nY, LCHNK )
+ ENDIF
+
+ SpcName = 'Q_SRF'
+ IF ( hist_fld_active(TRIM(SpcName)) ) THEN
+ outTmp(:nY,:) = State_Chm%Species(1,:nY,nZ:1:-1,i_H2O)
+ CALL Outfld( TRIM(SpcName), outTmp(:nY,:) , nY, LCHNK )
+ ENDIF
+
+ !=======================================================================
+ ! Cleanup and quit
+ !=======================================================================
+ Current => NULL()
+ Item => NULL()
+ Ptr0d_8 => NULL()
+ Ptr1d_8 => NULL()
+ Ptr2d_8 => NULL()
+ Ptr3d_8 => NULL()
+
+ END SUBROUTINE CESMGC_Diag_Calc
+!EOC
+!------------------------------------------------------------------------------
+ END MODULE CESMGC_Diag_Mod
+
diff --git a/src/chemistry/geoschem/cesmgc_emissions_mod.F90 b/src/chemistry/geoschem/cesmgc_emissions_mod.F90
new file mode 100644
index 0000000000..5489b0f043
--- /dev/null
+++ b/src/chemistry/geoschem/cesmgc_emissions_mod.F90
@@ -0,0 +1,612 @@
+!------------------------------------------------------------------------------
+! "GEOS-Chem" chemistry emissions interface !
+!------------------------------------------------------------------------------
+!BOP
+!
+! !MODULE: cesmgc_emissions_mod.F90
+!
+! !DESCRIPTION: Module cesmgc\_emissions\_mod contains routines which retrieve
+! emission fluxes from HEMCO and transfers it back to the CESM-GC interface
+!\\
+!\\
+! !INTERFACE:
+!
+MODULE CESMGC_Emissions_Mod
+!
+! !USES:
+!
+ USE SHR_KIND_MOD, ONLY : r8 => shr_kind_r8
+ USE SPMD_UTILS, ONLY : MasterProc
+ USE CAM_ABORTUTILS, ONLY : endrun
+ USE CHEM_MODS, ONLY : iFirstCnst
+ USE CONSTITUENTS, ONLY : pcnst, cnst_name
+ USE SHR_MEGAN_MOD, ONLY : shr_megan_mechcomps, shr_megan_mechcomps_n
+ USE CAM_LOGFILE, ONLY : iulog
+
+ IMPLICIT NONE
+
+ PRIVATE
+
+!
+! !PUBLIC MEMBER FUNCTIONS:
+!
+ PUBLIC :: CESMGC_Emissions_Init
+ PUBLIC :: CESMGC_Emissions_Calc
+ PUBLIC :: CESMGC_Emissions_Final
+
+ ! Constituent number for NO
+ INTEGER :: iNO
+
+ ! Aerosol constituent number
+ INTEGER :: iBC1
+ INTEGER :: iBC4
+ INTEGER :: iH2SO4
+
+ INTEGER :: iBCPI
+ INTEGER :: iBCPO
+ INTEGER :: iOCPI
+ INTEGER :: iOCPO
+ INTEGER :: iSO4
+
+ ! MEGAN Emissions
+ INTEGER, ALLOCATABLE :: megan_indices_map(:)
+ REAL(r8), ALLOCATABLE :: megan_wght_factors(:)
+
+!
+! !REVISION HISTORY:
+! 07 Oct 2020 - T. M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+CONTAINS
+!
+!EOC
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: cesmgc_emissions_init
+!
+! !DESCRIPTION: Subroutine CESMGC\_Emissions\_Init initializes the emissions
+! routine
+!\\
+!\\
+! !INTERFACE:
+!
+ SUBROUTINE CESMGC_Emissions_Init( lght_no_prd_factor )
+!
+! !USES:
+!
+ USE PHYSICS_TYPES, ONLY : physics_state
+ USE CONSTITUENTS, ONLY : cnst_get_ind
+ USE PHYS_CONTROL, ONLY : phys_getopts
+ USE MO_CHEM_UTLS, ONLY : get_spc_ndx
+ USE CAM_HISTORY, ONLY : addfld, add_default, horiz_only
+ USE MO_LIGHTNING, ONLY : lightning_inti
+ USE FIRE_EMISSIONS, ONLY : fire_emissions_init
+ USE CHEM_MODS, ONLY : adv_mass
+ USE INFNAN, ONLY : NaN, assignment(=)
+!
+! !INPUT PARAMETERS:
+!
+ REAL(r8), INTENT(IN ) :: lght_no_prd_factor ! Lightning scaling factor
+!
+! !REVISION HISTORY:
+! 07 Oct 2020 - T. M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+ ! Integers
+ INTEGER :: IERR
+ INTEGER :: N, II
+
+ ! Logicals
+ LOGICAL :: history_aerosol
+ LOGICAL :: history_chemistry
+ LOGICAL :: history_cesm_forcing
+
+ ! Strings
+ CHARACTER(LEN=255) :: SpcName
+ CHARACTER(LEN=255) :: Description
+
+ ! Real
+ REAL(r8) :: MW
+
+ !=================================================================
+ ! CESMGC_Emissions_Init begins here!
+ !=================================================================
+
+ CALL phys_getopts( history_aerosol_out = history_aerosol, &
+ history_chemistry_out = history_chemistry, &
+ history_cesm_forcing_out = history_cesm_forcing )
+
+ ! Get constituent index for NO
+ CALL cnst_get_ind('NO', iNO, abort=.True.)
+
+ !-----------------------------------------------------------------------
+ ! ... initialize the lightning module
+ !-----------------------------------------------------------------------
+ CALL lightning_inti(lght_no_prd_factor)
+
+ !-----------------------------------------------------------------------
+ ! ... MEGAN emissions
+ !-----------------------------------------------------------------------
+ IF ( shr_megan_mechcomps_n > 0 ) THEN
+
+ ALLOCATE( megan_indices_map(shr_megan_mechcomps_n), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating megan_indices_map')
+ ALLOCATE( megan_wght_factors(shr_megan_mechcomps_n), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating megan_wght_factors')
+ megan_wght_factors(:) = NaN
+
+ DO N = 1, shr_megan_mechcomps_n
+ SpcName = TRIM(shr_megan_mechcomps(N)%name)
+
+ ! Special handlings for GEOS-Chem species
+ IF ( TRIM(SpcName) == 'HCN' ) THEN
+ SpcName = 'None'
+ MW = 27.025140_r8 ! Taken from pp_trop_strat_mam4_vbs
+ ELSEIF ( TRIM(SpcName) == 'C2H4' ) THEN
+ SpcName = 'None'
+ MW = 28.051600_r8 ! Taken from pp_trop_strat_mam4_vbs
+ ENDIF
+ !IF ( TRIM(SpcName) == 'MTERP' ) THEN
+ ! SpcName = 'MTPA'
+ !ELSEIF ( TRIM(SpcName) == 'BCARY' ) THEN
+ ! SpcName = 'None'
+ ! MW = 204.342600_r8 ! Taken from pp_trop_strat_mam4_vbs
+ !ELSEIF ( TRIM(SpcName) == 'CH3OH' ) THEN
+ ! SpcName = 'MOH'
+ !ELSEIF ( TRIM(SpcName) == 'C2H5OH' ) THEN
+ ! SpcName = 'EOH'
+ !ELSEIF ( TRIM(SpcName) == 'CH3CHO' ) THEN
+ ! SpcName = 'ALD2'
+ !ELSEIF ( TRIM(SpcName) == 'CH3COOH' ) THEN
+ ! SpcName = 'ACTA'
+ !ELSEIF ( TRIM(SpcName) == 'CH3COCH3' ) THEN
+ ! SpcName = 'ACET'
+ !ELSEIF ( TRIM(SpcName) == 'HCN' ) THEN
+ ! SpcName = 'None'
+ ! MW = 27.025140_r8 ! Taken from pp_trop_strat_mam4_vbs
+ !ELSEIF ( TRIM(SpcName) == 'C2H4' ) THEN
+ ! SpcName = 'None'
+ ! MW = 28.051600_r8 ! Taken from pp_trop_strat_mam4_vbs
+ !ELSEIF ( TRIM(SpcName) == 'C3H6' ) THEN
+ ! SpcName = 'PRPE'
+ !ELSEIF ( TRIM(SpcName) == 'BIGALK' ) THEN
+ ! ! BIGALK = Pentane + Hexane + Heptane + Tricyclene
+ ! SpcName = 'ALK4'
+ !ELSEIF ( TRIM(SpcName) == 'BIGENE' ) THEN
+ ! ! BIGENE = butene (C4H8)
+ ! SpcName = 'PRPE' ! Lumped >= C3 alkenes
+ !ELSEIF ( TRIM(SpcName) == 'TOLUENE' ) THEN
+ ! SpcName = 'TOLU'
+ !ENDIF
+
+ CALL cnst_get_ind (SpcName, megan_indices_map(N), abort=.False.)
+
+ II = get_spc_ndx(SpcName)
+ IF ( II > 0 ) THEN
+ SpcName = TRIM(shr_megan_mechcomps(N)%name)
+ megan_wght_factors(N) = adv_mass(II)*1.e-3_r8 ! kg/moles (to convert moles/m2/sec to kg/m2/sec)
+ Description = TRIM(SpcName)//' MEGAN emissions flux (released as '//TRIM(SpcName)//' in GEOS-Chem)'
+ ELSEIF ( TRIM(SpcName) == 'None' ) THEN
+ SpcName = TRIM(shr_megan_mechcomps(N)%name)
+ megan_wght_factors(N) = MW*1.e-3_r8 ! kg/moles
+ IF ( MasterProc ) Write(iulog,*) " MEGAN ", TRIM(SpcName), &
+ " emissions will be ignored as no species match in GEOS-Chem."
+ Description = TRIM(SpcName)//' MEGAN emissions flux (not released in GEOS-Chem)'
+ ELSE
+ SpcName = TRIM(shr_megan_mechcomps(N)%name)
+ CALL ENDRUN( 'chem_init: MEGAN compound not in chemistry mechanism : '//TRIM(SpcName))
+ ENDIF
+
+ ! MEGAN history fields
+ CALL Addfld( 'MEG_'//TRIM(SpcName), horiz_only, 'A', 'kg/m2/s', &
+ Description )
+
+ IF ( history_chemistry ) THEN
+ CALL Add_default('MEG_'//TRIM(SpcName), 1, ' ')
+ ENDIF
+ ENDDO
+ ENDIF
+
+ DO N = iFirstCnst, pcnst
+ SpcName = TRIM(cnst_name(N))//'_XFRC'
+ CALL Addfld( TRIM(SpcName), (/ 'lev' /), 'A', 'molec/cm3/s', &
+ 'External forcing for '//TRIM(cnst_name(N)))
+ SpcName = TRIM(cnst_name(N))//'_CLXF'
+ CALL Addfld( TRIM(SpcName), horiz_only, 'A', 'molec/cm2/s', &
+ 'Vertically-integrated external forcing for '//TRIM(cnst_name(N)))
+ IF ( history_aerosol .OR. history_chemistry ) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ' )
+ ENDIF
+ IF ( history_cesm_forcing .AND. TRIM(cnst_name(N)) == 'NO2' ) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ' )
+ ENDIF
+ SpcName = TRIM(cnst_name(N))//'_CMXF'
+ CALL Addfld( TRIM(SpcName), horiz_only, 'A', 'kg/m2/s', &
+ 'Vertically-integrated external forcing for '//TRIM(cnst_name(N)))
+ IF ( history_aerosol .OR. history_chemistry ) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ' )
+ ENDIF
+ IF ( history_cesm_forcing .AND. TRIM(cnst_name(N)) == 'NO2' ) THEN
+ CALL Add_Default( TRIM(SpcName), 1, ' ' )
+ ENDIF
+ ENDDO
+
+ CALL Addfld( 'NO_Lightning', (/ 'lev' /), 'A','molec/cm3/s', &
+ 'lightning NO source' )
+
+ !-----------------------------------------------------------------------
+ ! ... Fire emissions
+ !-----------------------------------------------------------------------
+ CALL fire_emissions_init()
+
+ END SUBROUTINE CESMGC_Emissions_Init
+!EOC
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: cesmgc_emissions_calc
+!
+! !DESCRIPTION: Subroutine CESMGC\_Emissions\_Calc retrieves emission fluxes
+! from HEMCO and returns a 3-D array of emission flux to the CESM-GC
+! interface. On top of passing data, this routine handles a number of checks.
+!\\
+!\\
+! !INTERFACE:
+!
+ SUBROUTINE CESMGC_Emissions_Calc( state, hco_pbuf2d, State_Met, cam_in, eflx, iStep )
+!
+! !USES:
+!
+ USE State_Met_Mod, ONLY : MetState
+ USE CAMSRFEXCH, ONLY : cam_in_t
+ USE CONSTITUENTS, ONLY : cnst_get_ind, cnst_mw
+ USE PHYSICS_TYPES, ONLY : physics_state
+ USE PHYSICS_BUFFER, ONLY : pbuf_get_index, pbuf_get_chunk
+ USE PHYSICS_BUFFER, ONLY : physics_buffer_desc, pbuf_get_field
+ USE PPGRID, ONLY : pcols, pver, begchunk
+ USE CAM_HISTORY, ONLY : outfld
+ USE STRING_UTILS, ONLY : to_upper
+ USE PHYSCONSTANTS, ONLY : PI
+
+ ! Data from CLM
+ USE CAM_CPL_INDICES, ONLY : index_x2a_Fall_flxvoc
+
+ ! Lightning emissions
+ USE MO_LIGHTNING, ONLY : prod_NO
+
+ ! Fire emissions
+ USE FIRE_EMISSIONS, ONLY : fire_emissions_srf
+ USE FIRE_EMISSIONS, ONLY : fire_emissions_vrt
+
+ ! Aerosol emissions
+ USE AERO_MODEL, ONLY : aero_model_emissions
+
+ ! GEOS-Chem version of physical constants
+ USE PHYSCONSTANTS, ONLY : AVO
+ ! CAM version of physical constants
+ USE PHYSCONST, ONLY : rga, avogad
+!
+! !INPUT PARAMETERS:
+!
+ TYPE(physics_state), INTENT(IN ) :: state ! Physics state variables
+ TYPE(physics_buffer_desc), POINTER, INTENT(IN ) :: hco_pbuf2d(:,:) ! Pointer to 2-D pbuf
+ TYPE(MetState), INTENT(IN ) :: State_Met ! Meteorology State object
+ INTEGER, INTENT(IN ) :: iStep
+!
+! !OUTPUT PARAMETERS:
+!
+ TYPE(cam_in_t), INTENT(INOUT) :: cam_in ! import state
+ REAL(r8), INTENT( OUT) :: eflx(pcols,pver,pcnst) ! 3-D emissions in kg/m2/s
+!
+! !REVISION HISTORY:
+! 07 Oct 2020 - T. M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+! !LOCAL VARIABLES:
+!
+ ! Integers
+ INTEGER :: LCHNK
+ INTEGER :: nY, nZ
+ INTEGER :: J, L, N
+ INTEGER :: RC ! return code
+ INTEGER :: tmpIdx ! pbuf field id
+
+ INTEGER :: id_O3, id_HNO3 ! Species IDs for reuse
+
+ ! Logical
+ LOGICAL :: rootChunk
+
+ ! Objects
+ TYPE(physics_buffer_desc), POINTER :: pbuf_chnk(:) ! slice of pbuf in current chunk
+
+ ! Real
+ REAL(r8), POINTER :: pbuf_ik(:,:) ! pointer to pbuf data (/pcols,pver/)
+ REAL(r8), POINTER :: pbuf_i(:) ! pointer to 2-D (1-D in CAM) data (/pcols/)
+ REAL(r8), DIMENSION(state%NCOL,PVER+1) :: zint ! Interface geopotential in km
+ REAL(r8), DIMENSION(state%NCOL) :: zsurf ! Surface height
+ REAL(r8) :: SCALFAC ! Multiplying factor
+ REAL(r8) :: megflx(pcols) ! For MEGAN emissions
+ REAL(r8), PARAMETER :: m2km = 1.e-3_r8
+
+ ! Strings
+ CHARACTER(LEN=255) :: SpcName
+ CHARACTER(LEN=255) :: fldname_ns ! field name HCO_*
+
+ !=================================================================
+ ! CESMGC_Emissions_Calc begins here!
+ !=================================================================
+
+ ! Initialize pointers
+ pbuf_chnk => NULL()
+ pbuf_ik => NULL()
+ pbuf_i => NULL()
+
+ ! LCHNK: which chunk we have on this process
+ LCHNK = state%LCHNK
+ ! nY: number of atmospheric columns on this chunk
+ nY = state%NCOL
+ nZ = PVER
+ rootChunk = ( MasterProc .AND. ( LCHNK.EQ.BEGCHUNK ) )
+
+ ! Initialize emission flux
+ eflx(:,:,:) = 0.0e+0_r8
+
+ DO N = iFirstCnst, pcnst
+ fldname_ns = 'HCO_'//TRIM(cnst_name(N))
+ tmpIdx = pbuf_get_index(fldname_ns, RC)
+
+ IF ( tmpIdx < 0 .OR. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,'(a,a)') " CESMGC_Emissions_Calc: Field not found ", &
+ TRIM(fldname_ns)
+ ELSE
+ ! This is already in chunk, retrieve it
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_ik)
+
+ IF ( .NOT. ASSOCIATED(pbuf_ik) ) THEN ! Sanity check
+ CALL ENDRUN("CESMGC_Emissions_Calc: FATAL - tmpIdx > 0 but pbuf_ik not associated")
+ ENDIF
+
+ eflx(1:nY,:nZ,N) = pbuf_ik(1:nY,:nZ)
+
+ ! Reset pointers
+ pbuf_ik => NULL()
+ pbuf_chnk => NULL()
+
+ !IF ( MINVAL(eflx(:nY,:nZ,N)) < 0.0e+00_r8 ) THEN
+ ! Write(iulog,*) " CESMGC_Emissions_Calc: HEMCO emission flux is negative for ", &
+ ! TRIM(cnst_name(N)), " with value ", MINVAL(eflx(:nY,:nZ,N)), " at ", &
+ ! MINLOC(eflx(:nY,:nZ,N))
+ !ENDIF
+
+ IF ( rootChunk .AND. (iStep == 2) .AND. ( MAXVAL(eflx(:nY,:nZ,N)) > 0.0e+0_r8 ) ) THEN
+ ! Only print this once
+ Write(iulog,'(a,a,a,a)') " CESMGC_Emissions_Calc: HEMCO flux ", &
+ TRIM(fldname_ns), " added to ", TRIM(cnst_name(N))
+ Write(iulog,'(a,a,E16.4)') " CESMGC_Emissions_Calc: Maximum flux ", &
+ TRIM(fldname_ns), MAXVAL(eflx(:nY,:nZ,N))
+ ENDIF
+ ENDIF
+ ENDDO
+
+ !-----------------------------------------------------------------------
+ ! Deposition fluxes from HEMCO
+ !-----------------------------------------------------------------------
+
+ ! Part 1: Eventually retrieve deposition velocities [1/s] from HEMCO
+ ! and convert to negative flux and apply.
+ ! TODO hplin 3/24/21
+
+
+ ! Part 2: Handle special deposition fluxes for the ParaNOx extension
+ ! for PAR_O3_DEP and PAR_HNO3_DEP
+ CALL cnst_get_ind('O3', id_O3)
+ CALL cnst_get_ind('HNO3', id_HNO3)
+
+ ! write(iulog,*) 'id_O3, cnst_name, id_HNO3, cnst_name', id_O3, cnst_name(id_O3), id_HNO3, cnst_name(id_HNO3)
+
+ tmpIdx = pbuf_get_index('HCO_PAR_O3_DEP', RC)
+ IF(tmpIdx < 0 .OR. ( iStep == 1 )) then
+ ! No ParaNOx dep flux for O3
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_i)
+
+ IF ( .NOT. ASSOCIATED(pbuf_i) ) THEN ! Sanity check
+ CALL ENDRUN("CESMGC_Emissions_Calc: FATAL - tmpIdx > 0 but pbuf_i not associated (2)")
+ ENDIF
+
+ ! apply loss flux to surface (level nZ)
+ eflx(1:NY,nZ,id_O3) = eflx(1:NY,nZ,id_O3) - pbuf_i(1:nY)
+
+ !IF ( MINVAL(eflx(:nY,nZ,id_O3)) < 0.0e+00_r8 ) THEN
+ ! Write(iulog,*) " CESMGC_Emissions_Calc: HEMCO sfc flux after ParaNOx is negative for O3 with value ", MINVAL(eflx(:nY,:nZ,id_O3)), " at ", &
+ ! MINLOC(eflx(:nY,nZ,id_O3))
+ !ENDIF
+
+ IF ( rootChunk .and. ( MINVAL(pbuf_i(1:nY)) < 0.0e+0_r8 ) ) THEN
+ Write(iulog,'(a,a,a,a)') " CESMGC_Emissions_Calc: HEMCO dflx(paranox) O3 added to ", TRIM(cnst_name(id_O3))
+ Write(iulog,'(a,a,E16.4)') " CESMGC_Emissions_Calc: Minval dflx(paranox), eflx(sfc) O3 ", MINVAL(pbuf_i(1:nY)), MINVAL(eflx(:nY,nZ,id_O3))
+ ENDIF
+
+ ! Reset pointers
+ pbuf_i => NULL()
+ pbuf_chnk => NULL()
+ ENDIF
+
+ tmpIdx = pbuf_get_index('HCO_PAR_HNO3_DEP', RC)
+ IF(tmpIdx < 0 .OR. ( iStep == 1 )) then
+ ! No ParaNOx dep flux for HNO3
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_i)
+
+ IF ( .NOT. ASSOCIATED(pbuf_i) ) THEN ! Sanity check
+ CALL ENDRUN("CESMGC_Emissions_Calc: FATAL - tmpIdx > 0 but pbuf_i not associated (3)")
+ ENDIF
+
+ eflx(1:NY,nZ,id_HNO3) = eflx(1:NY,nZ,id_HNO3) - pbuf_i(1:nY)
+
+ !IF ( MINVAL(eflx(:nY,nZ,id_HNO3)) < 0.0e+00_r8 ) THEN
+ ! Write(iulog,*) " CESMGC_Emissions_Calc: HEMCO sfc flux after ParaNOx is negative for HNO3 with value ", MINVAL(eflx(:nY,nZ,id_HNO3)), " at ", &
+ ! MINLOC(eflx(:nY,nZ,id_HNO3))
+ !ENDIF
+
+ IF ( rootChunk .and. ( MINVAL(pbuf_i(1:nY)) < 0.0e+0_r8 ) ) THEN
+ Write(iulog,'(a,a,a,a)') " CESMGC_Emissions_Calc: HEMCO dflx(paranox) HNO3 added to ", TRIM(cnst_name(id_HNO3))
+ Write(iulog,'(a,a,E16.4)') " CESMGC_Emissions_Calc: Minval dflx(paranox), eflx(sfc) HNO3 ", MINVAL(pbuf_i(1:nY)), MINVAL(eflx(:nY,nZ,id_HNO3))
+ ENDIF
+
+ ! Reset pointers
+ pbuf_i => NULL()
+ pbuf_chnk => NULL()
+ ENDIF
+
+#if defined( MODAL_AERO )
+
+ !-----------------------------------------------------------------------
+ ! Aerosol emissions (dust + seasalt) ...
+ !-----------------------------------------------------------------------
+ call aero_model_emissions( state, cam_in )
+
+ ! Since GEOS-Chem DST* aerosols are inherited from MAM's DST, we do not
+ ! need to feed MAM dust emissions into the GEOS-Chem DST* constituents
+ ! Same thing applies for sea salt.
+
+ ! HEMCO aerosol emissions are fed to MAM through the HEMCO_Config.rc
+ ! where all GEOS-Chem aerosols (BCPI, BCPO, OCPI, OCPO, SO4) have been
+ ! replaced with the corresponding MAM aerosols
+
+#endif
+
+ ! Output fields before lightning NO emissions are applied to eflx
+ ! Make sure that we do not include surface emissions in the diagnostics!
+ DO N = iFirstCnst, pcnst
+ SpcName = TRIM(cnst_name(N))//'_XFRC'
+ ! Convert from kg/m2/s to molec/cm3/s
+ ! Note 1: cnst_mw is in kg/kmole
+ ! Note 2: avogad is in molecules/kmole
+ CALL Outfld( TRIM(SpcName), eflx(:nY,:nZ,N) / State_Met%BXHEIGHT(1,:nY,nZ:1:-1) * 1.0E-06 / cnst_mw(N) * avogad, nY, LCHNK )
+
+ SpcName = TRIM(cnst_name(N))//'_CLXF'
+ ! Convert from kg/m2/s to molec/cm2/s
+ ! Note 1: cnst_mw is in kg/kmole
+ ! Note 2: avogad is in molecules/kmole
+ CALL Outfld( TRIM(SpcName), SUM(eflx(:nY,:nZ-1,N), DIM=2) * 1.0E-04 / cnst_mw(N) * avogad, nY, LCHNK )
+
+ SpcName = TRIM(cnst_name(N))//'_CMXF'
+ CALL Outfld( TRIM(SpcName), SUM(eflx(:nY,:nZ-1,N), DIM=2), nY, LCHNK )
+ ENDDO
+
+ !-----------------------------------------------------------------------
+ ! Lightning NO emissions
+ !-----------------------------------------------------------------------
+ N = iNO
+
+ ! prod_NO is in atom N cm^-3 s^-1 <=> molec cm^-3 s^-1
+ ! We need to convert this to kg NO/m2/s
+ ! Multiply by MWNO * BXHEIGHT * 1.0E+06 / AVO
+ ! = mole/molec * kg NO/mole * m * cm^3/m^3
+ ! cnst_mw(N) is in g/mole
+ SCALFAC = cnst_mw(N) * 1.0E-03 * 1.0E+06 / AVO
+ DO J = 1, nY
+ DO L = 1, nZ
+ eflx(J,L,N) = eflx(J,L,N) &
+ + prod_NO(J,L,LCHNK) &
+ * State_Met%BXHEIGHT(1,J,nZ+1-L) &
+ * SCALFAC
+ ENDDO
+ ENDDO
+
+ CALL Outfld( 'NO_Lightning', prod_NO(:nY,:nZ,LCHNK), nY, LCHNK )
+
+ !-----------------------------------------------------------------------
+ ! MEGAN emissions ...
+ !-----------------------------------------------------------------------
+
+ IF ( index_x2a_Fall_flxvoc > 0 .AND. shr_megan_mechcomps_n > 0 ) THEN
+ ! set MEGAN fluxes
+ DO N = 1, shr_megan_mechcomps_n
+ DO J = 1, nY
+ megflx(J) = -cam_in%meganflx(J,N) * megan_wght_factors(N)
+ ENDDO
+ IF ( ( megan_indices_map(N) > 0 ) .AND. ( megan_wght_factors(N) > 0.0e+00_r8 ) ) THEN
+ DO J = 1, nY
+ cam_in%cflx(J,megan_indices_map(N)) = cam_in%cflx(J,megan_indices_map(N)) &
+ + megflx(J)
+ ENDDO
+ ENDIF
+ ! output MEGAN emis fluxes to history
+ CALL Outfld('MEG_'//TRIM(shr_megan_mechcomps(N)%name), megflx(:nY), nY, LCHNK)
+ ENDDO
+ ENDIF
+
+ !-----------------------------------------------------------------------
+ ! Fire surface emissions if not elevated forcing
+ !-----------------------------------------------------------------------
+
+ CALL fire_emissions_srf( LCHNK, nY, cam_in%fireflx, cam_in%cflx )
+
+ !-----------------------------------------------------------------------
+ ! Apply CLM emissions (for elevated forcing)
+ !-----------------------------------------------------------------------
+
+ ! Compute geopotential height in km (needed for vertical distribution of
+ ! fire emissions
+ zsurf(:nY) = rga * state%phis(:nY)
+ DO L = 1, nZ
+ zint(:nY,L) = m2km * ( state%zi(:nY,L) + zsurf(:nY) )
+ ENDDO
+ L = nZ+1
+ zint(:nY,L) = m2km * ( state%zi(:nY,L) + zsurf(:nY) )
+
+ ! Distributed fire emissions if elevated forcing
+ ! extfrc is in molec/cm3/s
+ ! TMMF - vertical distribution of fire emissions is not implemented yet
+ !CALL fire_emissions_vrt( nY, LCHNK, zint, cam_in%fireflx, cam_in%fireztop, extfrc )
+
+ !-----------------------------------------------------------------------
+ ! Add near-surface emissions to surface flux boundary condition
+ !-----------------------------------------------------------------------
+ cam_in%cflx(1:nY,:) = cam_in%cflx(1:nY,:) + eflx(1:nY,nZ,:)
+ eflx(1:nY,nZ,:) = 0.0e+00_r8
+
+ END SUBROUTINE CESMGC_Emissions_Calc
+!EOC
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: cesmgc_emissions_final
+!
+! !DESCRIPTION: Subroutine CESMGC\_Emissions\_Final cleans up the module
+!\\
+!\\
+! !INTERFACE:
+!
+ SUBROUTINE CESMGC_Emissions_Final
+!
+! !REVISION HISTORY:
+! 07 Oct 2020 - T. M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+ !=================================================================
+ ! CESMGC_Emissions_Final begins here!
+ !=================================================================
+
+ IF ( ALLOCATED( megan_indices_map ) ) DEALLOCATE( megan_indices_map )
+ IF ( ALLOCATED( megan_wght_factors ) ) DEALLOCATE( megan_wght_factors )
+
+ END SUBROUTINE CESMGC_Emissions_Final
+!EOC
+!------------------------------------------------------------------------------
+!EOC
+ END MODULE CESMGC_Emissions_Mod
diff --git a/src/chemistry/geoschem/charge_neutrality.F90 b/src/chemistry/geoschem/charge_neutrality.F90
new file mode 100644
index 0000000000..92ec519000
--- /dev/null
+++ b/src/chemistry/geoschem/charge_neutrality.F90
@@ -0,0 +1,176 @@
+module charge_neutrality
+
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use ppgrid, only : pcols, pver
+ !use mo_chem_utls, only : get_spc_ndx
+
+ implicit none
+
+ private
+ public :: charge_balance
+
+ interface charge_balance
+ module procedure charge_fix_vmr
+ module procedure charge_fix_mmr ! for fixing charge balance after vertical diffusion
+ end interface
+
+ !integer, parameter :: pos_ion_n = 22
+ !character(len=16), parameter :: pos_ion_names(pos_ion_n) = (/ &
+ ! 'Np ','N2p ','Op ','O2p ','NOp ', &
+ ! 'O4p ','O2p_H2O ','Hp_H2O ','Hp_2H2O ','Hp_3H2O ', &
+ ! 'Hp_4H2O ','Hp_5H2O ','H3Op_OH ','Hp_3N1 ','Hp_4N1 ', &
+ ! 'NOp_H2O ','NOp_2H2O ','NOp_3H2O ','NOp_CO2 ','NOp_N2 ', &
+ ! 'Op2P ','Op2D ' /)
+
+ !integer, parameter :: neg_ion_n = 21
+ !character(len=16), parameter :: neg_ion_names(neg_ion_n) = (/ &
+ ! 'Om ','O2m ','O3m ','O4m ','OHm ', &
+ ! 'CO3m ','CO4m ','NO2m ','NO3m ','HCO3m ', &
+ ! 'CLm ','CLOm ','CLm_H2O ','CLm_HCL ','CO3m_H2O ', &
+ ! 'NO3m_H2O ','CO3m2H2O ','NO2m_H2O ','NO3m2H2O ','NO3mHNO3 ', &
+ ! 'NO3m_HCL ' /)
+
+contains
+
+ !-----------------------------------------------------------------------
+ ! ... force ion/electron balance
+ !-----------------------------------------------------------------------
+ subroutine charge_fix_vmr( ncol, vmr )
+
+ !-----------------------------------------------------------------------
+ ! ... dummy arguments
+ !-----------------------------------------------------------------------
+ integer, intent(in) :: ncol
+ real(r8), intent(inout) :: vmr(:,:,:) ! concentration
+
+ !-----------------------------------------------------------------------
+ ! ... local variables
+ !-----------------------------------------------------------------------
+ integer :: i, n
+ integer :: elec_ndx
+ real(r8) :: wrk(ncol,pver)
+
+ !elec_ndx = get_spc_ndx('e')
+
+ !!--------------------------------------------------------------------
+ !! If electrons are in the chemistry add up charges to get electrons
+ !!--------------------------------------------------------------------
+ !if( elec_ndx > 0 ) then
+ ! wrk(:,:) = 0._r8
+
+ ! do i = 1,pos_ion_n
+ ! n = get_spc_ndx(pos_ion_names(i))
+ ! if (n>0) then
+ ! wrk(:ncol,:) = wrk(:ncol,:) + vmr(:ncol,:,n)
+ ! endif
+ ! enddo
+ ! do i = 1,neg_ion_n
+ ! n = get_spc_ndx(neg_ion_names(i))
+ ! if (n>0) then
+ ! wrk(:ncol,:) = wrk(:ncol,:) - vmr(:ncol,:,n)
+ ! endif
+ ! enddo
+
+ ! where ( wrk(:,:)<0._r8 )
+ ! wrk(:,:)=0._r8
+ ! end where
+
+ ! vmr(:ncol,:,elec_ndx) = wrk(:ncol,:)
+
+ !end if
+
+ end subroutine charge_fix_vmr
+
+ !-----------------------------------------------------------------------
+ ! ... force ion/electron balance
+ !-----------------------------------------------------------------------
+ subroutine charge_fix_mmr(state, pbuf)
+
+ use constituents, only : cnst_get_ind
+ use physconst, only : mbarv ! Constituent dependent mbar
+ use short_lived_species, only : slvd_index,slvd_pbf_ndx => pbf_idx ! Routines to access short lived species in pbuf
+ use chem_mods, only : adv_mass
+ use physics_buffer, only : pbuf_get_field,physics_buffer_desc ! Needed to get variables from physics buffer
+ use physics_types, only : physics_state
+
+ !-----------------------------------------------------------------------
+ ! ... dummy arguments
+ !-----------------------------------------------------------------------
+ type(physics_state), intent(inout), target :: state
+ type(physics_buffer_desc), pointer :: pbuf(:) ! physics buffer
+
+ !-----------------------------------------------------------------------
+ ! ... local variables
+ !-----------------------------------------------------------------------
+ !integer :: i, n, ns, nc
+ !integer :: elec_ndx
+ !integer :: lchnk !Chunk number from state structure
+ !integer :: ncol !Number of columns in this chunk from state structure
+
+ !real(r8), dimension(:,:,:), pointer :: q ! model mass mixing ratios
+ !real(r8), dimension(:,:), pointer :: qs ! Pointer to access fields in pbuf
+
+ !character(len=16) :: name
+ !real(r8) :: vmr(state%ncol,pver)
+ !real(r8) :: wrk(state%ncol,pver)
+
+ !!-----------------------------------------------------------------------
+ !elec_ndx = get_spc_ndx('e')
+
+ !!--------------------------------------------------------------------
+ !! If electrons are simulated enforce charge neutrality ...
+ !!--------------------------------------------------------------------
+ !if( elec_ndx > 0 ) then
+ ! lchnk = state%lchnk
+ ! ncol = state%ncol
+ ! q => state%q
+ ! wrk(:,:) = 0._r8
+
+ ! do i = 1,pos_ion_n+neg_ion_n
+ ! if (i .le. pos_ion_n) then
+ ! name = pos_ion_names(i)
+ ! else
+ ! name = neg_ion_names(i-pos_ion_n)
+ ! endif
+ ! n = get_spc_ndx(name)
+
+ ! if (n>0) then
+ ! call cnst_get_ind( name, nc, abort=.false. )
+ ! if (nc>0) then
+ ! vmr(:ncol,:) = mbarv(:ncol,:,lchnk) * q(:ncol,:,nc) / adv_mass(n)
+ ! else
+ ! ! not transported
+ ! ns = slvd_index( name )
+ ! if (ns>0) then
+ ! call pbuf_get_field(pbuf, slvd_pbf_ndx, qs, start=(/1,1,ns/), kount=(/pcols,pver,1/) )
+ ! vmr(:ncol,:) = mbarv(:ncol,:,lchnk) * qs(:ncol,:) / adv_mass(n)
+ ! endif
+ ! endif
+ ! if (i .le. pos_ion_n) then
+ ! wrk(:ncol,:) = wrk(:ncol,:) + vmr(:ncol,:)
+ ! else
+ ! wrk(:ncol,:) = wrk(:ncol,:) - vmr(:ncol,:)
+ ! endif
+ ! end if
+ ! end do
+
+ ! where ( wrk(:,:)<0._r8 )
+ ! wrk(:,:)=0._r8
+ ! end where
+
+ ! call cnst_get_ind( 'e', nc, abort=.false. )
+
+ ! if (nc>0) then
+ ! q(:ncol,:,nc) = adv_mass(elec_ndx) * wrk(:ncol,:) / mbarv(:ncol,:,lchnk)
+ ! else
+ ! ! not transported
+ ! ns = slvd_index( 'e' )
+ ! call pbuf_get_field(pbuf, slvd_pbf_ndx, qs, start=(/1,1,ns/), kount=(/pcols,pver,1/) )
+ ! qs(:ncol,:) = adv_mass(elec_ndx) * wrk(:ncol,:) / mbarv(:ncol,:,lchnk)
+ ! endif
+
+ !endif
+
+ end subroutine charge_fix_mmr
+
+end module charge_neutrality
diff --git a/src/chemistry/geoschem/chem_mods.F90 b/src/chemistry/geoschem/chem_mods.F90
new file mode 100644
index 0000000000..08733b6d85
--- /dev/null
+++ b/src/chemistry/geoschem/chem_mods.F90
@@ -0,0 +1,109 @@
+ module chem_mods
+!--------------------------------------------------------------
+! ... Basic chemistry parameters and arrays
+!--------------------------------------------------------------
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use constituents, only : pcnst
+ implicit none
+ save
+
+ INTEGER, PARAMETER :: nTracersMax = 251 ! Must be equal to chem_nadv
+ INTEGER :: nTracers
+ CHARACTER(LEN=255) :: tracerNames(nTracersMax)
+ CHARACTER(LEN=255) :: tracerLongNames(nTracersMax)
+ REAL(r8) :: ref_MMR(pcnst)
+
+ ! Index of first constituent
+ INTEGER :: iFirstCnst
+
+ ! Short-lived species (i.e. not advected)
+ INTEGER, PARAMETER :: nSlsMax = 500 ! UNadvected species only
+ INTEGER :: nSls
+ CHARACTER(LEN=255) :: slsNames(nSlsMax)
+ CHARACTER(LEN=255) :: slsLongnames(nSlsMax)
+ REAL(r8) :: sls_Ref_MMR(nSlsMax)
+
+ ! Mapping between constituents and GEOS-Chem tracers
+ INTEGER :: map2GC(pcnst)
+ INTEGER :: map2GCinv(nTracersMax)
+ INTEGER :: map2GC_Sls(nSlsMax)
+
+ ! Mapping constituent onto chemical species (as listed in solsym)
+ INTEGER :: mapCnst(pcnst)
+
+ ! Aerosols
+ INTEGER, PARAMETER :: nAerMax = 35
+ INTEGER :: nAer
+ CHARACTER(LEN=16) :: aerNames(nAerMax)
+ REAL(r8) :: aerAdvMass(nAerMax)
+
+ !-----------------------------
+ ! Aerosol index mapping
+ !-----------------------------
+ ! map2MAM4 maps aerNames onto the GEOS-Chem Species array such
+ ! that
+ ! State_Chm%Species(1,:,:,map2MAM4(:,:)) = state%q(:,:,MAM4_Indices)
+ INTEGER, ALLOCATABLE :: map2MAM4(:,:)
+
+ !-----------------------------
+ ! Dry deposition index mapping
+ !-----------------------------
+ ! drySpc_ndx maps drydep_list onto tracerNames such that
+ ! tracerNames(drySpc_ndx(:)) = drydep_list(:)
+ INTEGER, ALLOCATABLE :: drySpc_ndx(:)
+
+ ! map2GC_dryDep maps drydep_list onto the GEOS-Chem dry deposition
+ ! velocity arrays such that
+ ! State_Chm%DryDepVel(1,:,map2GC_dryDep(:)) = cam_in%depVel(:,:)
+ INTEGER, ALLOCATABLE :: map2GC_dryDep(:)
+
+ INTEGER, PARAMETER :: phtcnt = 40, & ! number of photolysis reactions
+ rxntot = 212, & ! number of total reactions
+ gascnt = 172, & ! number of gas phase reactions
+ nabscol = 2, & ! number of absorbing column densities
+ gas_pcnst = 331, & ! number of "gas phase" species
+ nfs = 6, & ! number of "fixed" species
+ relcnt = 0, & ! number of relationship species
+ grpcnt = 0, & ! number of group members
+ nzcnt = 824, & ! number of non-zero matrix entries
+ extcnt = 0, & ! number of species with external forcing
+ clscnt1 = 8, & ! number of species in explicit class
+ clscnt2 = 0, & ! number of species in hov class
+ clscnt3 = 0, & ! number of species in ebi class
+ clscnt4 = 95, & ! number of species in implicit class
+ clscnt5 = 0, & ! number of species in rodas class
+ indexm = 1, & ! index of total atm density in invariant array
+ indexh2o = 4, & ! index of water vapor density
+ clsze = 1, & ! loop length for implicit chemistry
+ rxt_tag_cnt = 95, &
+ enthalpy_cnt = 0
+! nslvd = 0
+ integer :: clscnt(5) = 0
+ integer :: cls_rxt_cnt(4,5) = 0
+ integer :: clsmap(gas_pcnst,5) = 0
+ integer :: permute(gas_pcnst,5) = 0
+ integer :: diag_map(clscnt4) = 0
+ real(r8) :: adv_mass(gas_pcnst) = 0._r8
+ real(r8) :: crb_mass(gas_pcnst) = 0._r8
+ real(r8) :: fix_mass(max(1,nfs))
+ real(r8), allocatable :: cph_enthalpy(:)
+ integer, allocatable :: cph_rid(:)
+ integer, allocatable :: num_rnts(:)
+ integer, allocatable :: rxt_tag_map(:)
+ real(r8), allocatable :: pht_alias_mult(:,:)
+ character(len=16), allocatable :: rxt_tag_lst(:)
+ character(len=16), allocatable :: pht_alias_lst(:,:)
+ character(len=16) :: inv_lst(max(1,nfs))
+ character(len=16) :: extfrc_lst(max(1,extcnt))
+ logical :: frc_from_dataset(max(1,extcnt))
+ logical :: is_vector
+ logical :: is_scalar
+! character(len=16) :: slvd_lst(max(1,nslvd))
+ integer :: nslvd
+ character(len=255), allocatable :: slvd_lst(:)
+ real(r8), allocatable :: slvd_ref_mmr(:)
+
+ ! Mapping between chemical species and GEOS-Chem species/other tracers
+ INTEGER :: map2chm(gas_pcnst)
+
+ end module chem_mods
diff --git a/src/chemistry/geoschem/chem_prod_loss_diags.F90 b/src/chemistry/geoschem/chem_prod_loss_diags.F90
new file mode 100644
index 0000000000..b3eb614cf4
--- /dev/null
+++ b/src/chemistry/geoschem/chem_prod_loss_diags.F90
@@ -0,0 +1,37 @@
+module chem_prod_loss_diags
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use chem_mods, only : clscnt1, clscnt4, gas_pcnst, clsmap, permute
+ use ppgrid, only : pver
+ use chem_mods, only : rxntot
+ use cam_history, only : addfld, outfld, add_default
+ !use mo_tracname, only : solsym
+
+ implicit none
+
+ private
+ public :: chem_prod_loss_diags_init
+ public :: chem_prod_loss_diags_out
+
+contains
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine chem_prod_loss_diags_init
+
+ end subroutine chem_prod_loss_diags_init
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine chem_prod_loss_diags_out( ncol, lchnk, base_sol, reaction_rates, prod_in, loss_in, xhnm )
+
+ integer, intent(in) :: ncol, lchnk
+ real(r8), intent(in) :: base_sol(ncol,pver,gas_pcnst)
+ real(r8), intent(in) :: reaction_rates(ncol,pver,max(1,rxntot))
+ real(r8), intent(in) :: prod_in(ncol,pver,max(1,clscnt4))
+ real(r8), intent(in) :: loss_in(ncol,pver,max(1,clscnt4))
+ real(r8), intent(in) :: xhnm(ncol,pver)
+
+ end subroutine chem_prod_loss_diags_out
+
+end module chem_prod_loss_diags
+
diff --git a/src/chemistry/geoschem/chemistry.F90 b/src/chemistry/geoschem/chemistry.F90
new file mode 100644
index 0000000000..eda8b869a0
--- /dev/null
+++ b/src/chemistry/geoschem/chemistry.F90
@@ -0,0 +1,4462 @@
+!================================================================================================
+! This is the "GEOS-Chem" chemistry module.
+!================================================================================================
+
+module chemistry
+ use shr_kind_mod, only : r8 => shr_kind_r8, shr_kind_cl
+ use physics_types, only : physics_state, physics_ptend, physics_ptend_init
+ use physics_buffer, only : physics_buffer_desc
+ use ppgrid, only : begchunk, endchunk, pcols
+ use ppgrid, only : pver, pverp
+ use constituents, only : pcnst, cnst_add, cnst_get_ind
+ use constituents, only : cnst_name
+ use shr_const_mod, only : molw_dryair=>SHR_CONST_MWDAIR
+ use seq_drydep_mod, only : nddvels => n_drydep, drydep_list
+ use spmd_utils, only : MasterProc, myCPU=>Iam, nCPUs=>npes
+ use cam_logfile, only : iulog
+ use string_utils, only : to_upper
+
+ !--------------------------------------------------------------------
+ ! Basic GEOS-Chem modules
+ !--------------------------------------------------------------------
+ USE DiagList_Mod, ONLY : DgnList ! Derived type for diagnostics list
+ USE TaggedDiagList_Mod, ONLY : TaggedDgnList ! Derived type for tagged diagnostics list
+ USE Input_Opt_Mod, ONLY : OptInput ! Derived type for Input Options
+ USE State_Chm_Mod, ONLY : ChmState ! Derived type for Chemistry State object
+ USE State_Diag_Mod, ONLY : DgnState ! Derived type for Diagnostics State object
+ USE State_Grid_Mod, ONLY : GrdState ! Derived type for Grid State object
+ USE State_Met_Mod, ONLY : MetState ! Derived type for Meteorology State object
+ USE Species_Mod, ONLY : Species ! Derived type for Species object
+ USE GC_Environment_Mod ! Runtime GEOS-Chem environment
+ USE ErrCode_Mod ! Error codes for success or failure
+ USE Error_Mod ! For error checking
+
+ !-----------------------------------------------------------------
+ ! Parameters to define floating-point variables
+ !-----------------------------------------------------------------
+ USE PRECISION_MOD, ONLY : fp, f4 ! Flexible precision
+
+ use chem_mods, only : nSlvd, slvd_Lst, slvd_ref_MMR
+
+ ! Exit routine in CAM
+ use cam_abortutils, only : endrun
+
+ use chem_mods, only : nTracersMax
+ use chem_mods, only : nTracers
+ use chem_mods, only : gas_pcnst
+ use chem_mods, only : tracerNames
+ use chem_mods, only : adv_mass
+ use chem_mods, only : ref_MMR
+ use chem_mods, only : iFirstCnst
+ use chem_mods, only : nSlsMax
+ use chem_mods, only : nSls
+ use chem_mods, only : slsNames
+ use chem_mods, only : sls_ref_MMR
+ use chem_mods, only : nAerMax
+ use chem_mods, only : nAer
+ use chem_mods, only : aerNames
+ use chem_mods, only : aerAdvMass
+ use chem_mods, only : map2GC, map2GCinv
+ use chem_mods, only : map2GC_Sls
+ use chem_mods, only : mapCnst
+ use chem_mods, only : map2chm
+ use chem_mods, only : map2MAM4
+#if defined( MODAL_AERO )
+ use modal_aero_data, only : ntot_amode
+#endif
+
+ use mo_tracname, only : solsym
+
+ IMPLICIT NONE
+ PRIVATE
+ SAVE
+ !
+ ! Public interfaces
+ !
+ public :: chem_is ! identify which chemistry is being used
+ public :: chem_register ! register consituents
+ public :: chem_is_active ! returns true if this package is active (ghg_chem=.true.)
+ public :: chem_implements_cnst ! returns true if consituent is implemented by this package
+ public :: chem_init_cnst ! initialize mixing ratios if not read from initial file
+ public :: chem_init ! initialize (history) variables
+ public :: chem_timestep_tend ! interface to tendency computation
+ public :: chem_final
+ public :: chem_write_restart
+ public :: chem_read_restart
+ public :: chem_init_restart
+ public :: chem_readnl ! read chem namelist
+
+ public :: chem_emissions
+ public :: chem_timestep_init
+
+ ! Location of valid input.geos and species_database.yml
+ ! Use local files in run folder
+ CHARACTER(LEN=500) :: inputGeos = 'input.geos'
+ CHARACTER(LEN=500) :: speciesDB = 'species_database.yml'
+
+ ! Location of chemistry input
+ CHARACTER(LEN=256) :: gc_cheminputs
+
+ !-----------------------------
+ ! Derived type objects
+ !-----------------------------
+ TYPE(OptInput) :: Input_Opt ! Input Options object
+ TYPE(ChmState),ALLOCATABLE :: State_Chm(:) ! Chemistry State object
+ TYPE(DgnState),ALLOCATABLE :: State_Diag(:) ! Diagnostics State object
+ TYPE(GrdState),ALLOCATABLE :: State_Grid(:) ! Grid State object
+ TYPE(MetState),ALLOCATABLE :: State_Met(:) ! Meteorology State object
+ TYPE(DgnList ) :: Diag_List ! Diagnostics list object
+ TYPE(TaggedDgnList ) :: TaggedDiag_List ! Tagged diagnostics list object
+
+ type(physics_buffer_desc), pointer :: hco_pbuf2d(:,:) ! Pointer to 2D pbuf
+
+ ! Mimic code in sfcvmr_mod.F90
+ TYPE :: SfcMrObj
+ CHARACTER(LEN=63) :: FldName ! Field name
+ INTEGER :: SpcID ! ID in species database
+ TYPE(SfcMrObj), POINTER :: Next ! Next element in list
+ END TYPE SfcMrObj
+
+ ! Heat of linked list with SfcMrObj objects
+ TYPE(SfcMrObj), POINTER :: SfcMrHead => NULL()
+
+ ! Field prefix
+ CHARACTER(LEN=63), PARAMETER :: Prefix_SfcVMR = 'VMR_'
+
+
+ ! Indices of critical species in GEOS-Chem
+ INTEGER :: iH2O, iO3, iCO2, iSO4
+ INTEGER :: iO, iH, iO2
+ REAL(r8) :: MWO3
+ ! Indices of critical species in the constituent list
+ INTEGER :: cQ, cH2O, cH2SO4
+ ! Indices of critical species in the solsym list
+ INTEGER :: l_H2SO4, l_SO4
+#if defined( MODAL_AERO )
+ INTEGER, ALLOCATABLE :: iSulf(:)
+#endif
+
+ ! Indices in the physics buffer
+ INTEGER :: NDX_PBLH ! PBL height [m]
+ INTEGER :: NDX_FSDS ! Downward shortwave flux at surface [W/m2]
+ INTEGER :: NDX_CLDTOP ! Cloud top height [index]
+ INTEGER :: NDX_CLDFRC ! Cloud fraction [-]
+ INTEGER :: NDX_PRAIN ! Rain production rate [kg/kg/s]
+ INTEGER :: NDX_NEVAPR ! Total rate of precipitation evaporation [kg/kg/s]
+ INTEGER :: NDX_LSFLXPRC ! Large-scale precip. at interface (liq + snw) [kg/m2/s]
+ INTEGER :: NDX_LSFLXSNW ! Large-scale precip. at interface (snow only) [kg/m2/s]
+ INTEGER :: NDX_CMFDQR ! Convective total precip. production rate [kg/kg/s]
+
+ ! Get constituent indices
+ INTEGER :: ixCldLiq ! Cloud liquid water
+ INTEGER :: ixCldIce ! Cloud ice
+ INTEGER :: ixNDrop ! Cloud droplet number index
+
+ ! ghg
+
+ LOGICAL :: ghg_chem = .false. ! .true. => use ghg chem package
+ CHARACTER(len=shr_kind_cl) :: bndtvg = ' ' ! pathname for greenhouse gas loss rate
+ CHARACTER(len=shr_kind_cl) :: h2orates = ' ' ! pathname for greenhouse gas (lyman-alpha H2O loss)
+
+ ! lightning
+ REAL(r8) :: lght_no_prd_factor = 1._r8
+
+ ! Strings
+ CHARACTER(LEN=255) :: ThisLoc
+ CHARACTER(LEN=255) :: ErrMsg
+
+ ! Filenames to compute dry deposition velocities similarly to MOZART
+ character(len=shr_kind_cl) :: clim_soilw_file = 'clim_soilw_file'
+ character(len=shr_kind_cl) :: depvel_file = ''
+ character(len=shr_kind_cl) :: depvel_lnd_file = 'depvel_lnd_file'
+ character(len=shr_kind_cl) :: season_wes_file = 'season_wes_file'
+
+ character(len=shr_kind_cl) :: srf_emis_specifier(pcnst) = ''
+ character(len=shr_kind_cl) :: ext_frc_specifier(pcnst) = ''
+
+ character(len=24) :: srf_emis_type = 'CYCLICAL' ! 'CYCLICAL' | 'SERIAL' | 'INTERP_MISSING_MONTHS'
+ integer :: srf_emis_cycle_yr = 0
+ integer :: srf_emis_fixed_ymd = 0
+ integer :: srf_emis_fixed_tod = 0
+
+ character(len=24) :: ext_frc_type = 'CYCLICAL' ! 'CYCLICAL' | 'SERIAL' | 'INTERP_MISSING_MONTHS'
+ integer :: ext_frc_cycle_yr = 0
+ integer :: ext_frc_fixed_ymd = 0
+ integer :: ext_frc_fixed_tod = 0
+
+
+!================================================================================================
+contains
+!================================================================================================
+
+ logical function chem_is (name)
+
+ use mo_chem_utls, only : utls_chem_is
+
+ character(len=*), intent(in) :: name
+
+ chem_is = utls_chem_is(name)
+
+ end function chem_is
+
+!================================================================================================
+
+ subroutine chem_register
+
+ use physics_buffer, only : pbuf_add_field, dtype_r8
+ use PhysConst, only : MWDry
+
+ use Short_Lived_Species, only : Register_Short_Lived_Species
+
+ use State_Grid_Mod, only : Init_State_Grid, Cleanup_State_Grid
+ use State_Chm_Mod, only : Init_State_Chm, Cleanup_State_Chm
+ use State_Chm_Mod, only : Ind_
+ use Input_Opt_Mod, only : Set_Input_Opt, Cleanup_Input_Opt
+ use CMN_SIZE_Mod, only : Init_CMN_SIZE
+
+ use mo_sim_dat, only : set_sim_dat
+ use mo_chem_utls, only : get_spc_ndx
+ use chem_mods, only : drySpc_ndx
+#if defined( MODAL_AERO )
+ use aero_model, only : aero_model_register
+ use modal_aero_data, only : nspec_max
+ use modal_aero_data, only : ntot_amode, nspec_amode
+ use modal_aero_data, only : xname_massptr
+#endif
+
+ !-----------------------------------------------------------------------
+ !
+ ! Purpose: register advected constituents for chemistry
+ !
+ !-----------------------------------------------------------------------
+ ! Need to generate a temporary species database
+ TYPE(ChmState) :: SC
+ TYPE(GrdState) :: SG
+ TYPE(OptInput) :: IO
+ TYPE(Species), POINTER :: ThisSpc
+
+ INTEGER :: I, N, M, L
+ INTEGER :: nIgnored
+ INTEGER :: tmpIdx
+ REAL(r8) :: cptmp
+ REAL(r8) :: MWTmp
+ REAL(r8) :: qmin
+ REAL(r8) :: refmmr, refvmr
+ CHARACTER(LEN=128) :: mixtype
+ CHARACTER(LEN=128) :: molectype
+ CHARACTER(LEN=128) :: lngName
+ CHARACTER(LEN=64) :: cnstName
+ CHARACTER(LEN=64) :: trueName
+ LOGICAL :: camout
+ LOGICAL :: ic_from_cam2
+ LOGICAL :: has_fixed_ubc
+ LOGICAL :: has_fixed_ubflx
+
+ INTEGER :: RC, IERR
+
+ ! Assume a successful return until otherwise
+ RC = GC_SUCCESS
+
+ ! For error trapping
+ ErrMsg = ''
+ ThisLoc = ' -> at GEOS-Chem (in chemistry/geoschem/chemistry.F90)'
+
+ ! Initialize pointer
+ ThisSpc => NULL()
+
+ ! SDE 2018-05-02: This seems to get called before anything else
+ ! that includes CHEM_INIT
+ ! At this point, mozart calls SET_SIM_DAT, which is specified by each
+ ! mechanism separately (ie mozart/chemistry.F90 calls the subroutine
+ ! set_sim_dat which is in pp_[mechanism]/mo_sim_dat.F90. That sets a lot of
+ ! data in other places, notably in "chem_mods"
+
+ ! hplin 2020-05-16: Call set_sim_dat to populate chemistry constituent information
+ ! from mo_sim_dat.F90 in other places. This is needed for HEMCO_CESM.
+ CALL Set_sim_dat()
+
+ ! Prevent Reporting
+ IO%amIRoot = .False.
+ IO%thisCpu = MyCPU
+
+ CALL Set_Input_Opt( am_I_Root = MasterProc, &
+ Input_Opt = IO, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Could not generate reference input options object!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Options needed by Init_State_Chm
+ IO%ITS_A_FULLCHEM_SIM = .True.
+ IO%LLinoz = .True.
+ IO%LUCX = .True.
+ IO%LPRT = .False.
+ IO%N_Advect = nTracers
+ DO I = 1, nTracers
+ IO%AdvectSpc_Name(I) = TRIM(tracerNames(I))
+ ENDDO
+ IO%SALA_rEdge_um(1) = 0.01e+0_fp
+ IO%SALA_rEdge_um(2) = 0.50e+0_fp
+ IO%SALC_rEdge_um(1) = 0.50e+0_fp
+ IO%SALC_rEdge_um(2) = 8.00e+0_fp
+
+ IO%SpcDatabaseFile = TRIM(speciesDB)
+
+ CALL Init_State_Grid( Input_Opt = IO, &
+ State_Grid = SG, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "Init_State_Grid"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ SG%NX = 1
+ SG%NY = 1
+ SG%NZ = 1
+
+ CALL GC_Init_Grid( Input_Opt = IO, &
+ State_Grid = SG, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error in GC_Init_Grid"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ CALL Init_CMN_SIZE( Input_Opt = IO, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "Init_CMN_SIZE"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ CALL Init_State_Chm( Input_Opt = IO, &
+ State_Chm = SC, &
+ State_Grid = SG, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "Init_State_Chm"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ iFirstCnst = -1
+ mapCnst = -1
+ map2GC = -1
+ map2GCinv = -1
+ map2chm = -1
+ ref_MMR(:) = 0.0e+0_r8
+
+ DO I = 1, nTracersMax
+ IF ( I .LE. nTracers ) THEN
+ cnstName = to_upper(TRIM(tracerNames(I)))
+ trueName = cnstName
+ N = Ind_(cnstName)
+ ThisSpc => SC%SpcData(N)%Info
+ lngName = TRIM(ThisSpc%FullName)
+ MWTmp = REAL(ThisSpc%MW_g,r8)
+ refvmr = REAL(ThisSpc%BackgroundVV,r8)
+ refmmr = refvmr / (MWDry / MWTmp)
+ ! Make sure that solsym is following the list of tracers as listed in input.geos
+ IF ( to_upper(TRIM(tracerNames(I))) /= to_upper(TRIM(solsym(I))) ) THEN
+ Write(iulog,*) "tracerNames (", TRIM(tracerNames(I)), ") /= solsym (", &
+ TRIM(solsym(I)), ")"
+ CALL ENDRUN('Solsym must be following GEOS-Chem tracer. Check geoschem/mo_sim.dat')
+ ENDIF
+ ! Nullify pointer
+ ThisSpc => NULL()
+ ELSEIF ( I .LE. (nTracers + nAer) ) THEN
+ ! Add MAM4 aerosols
+ cnstName = TRIM(aerNames(I - nTracers))
+ trueName = cnstName
+ lngName = cnstName
+ MWTmp = aerAdvMass(I - nTracers)
+ refmmr = 1.0e-38_r8
+ ELSEIF ( I .EQ. (nTracers + nAer + 1) ) THEN
+ ! Add CO2 (which is not a GEOS-Chem tracer)
+ cnstName = 'CO2'
+ trueName = cnstName
+ lngName = cnstName
+ MWTmp = 44.009800_r8
+ refmmr = 1.0e-38_r8
+ ELSE
+ cnstName = TRIM(tracerNames(I))
+ trueName = cnstName
+ lngName = cnstName
+ MWTmp = 1000.0e+0_r8 * (0.001e+0_r8)
+ refmmr = 1.0e-38_r8
+ ENDIF
+
+ ! dummy value for specific heat of constant pressure (Cp)
+ cptmp = 666._r8
+ ! minimum mixing ratio
+ qmin = 1.e-38_r8
+ ! mixing ratio type
+ mixtype = 'dry'
+ ! Used for ionospheric WACCM (WACCM-X)
+ molectype = 'minor'
+ ! Is an output field (?)
+ camout = .false.
+ ! Not true for O2(1-delta) or O2(1-sigma)
+ ic_from_cam2 = .true.
+ ! Use a fixed value at the upper boundary
+ has_fixed_ubc = .false.
+ ! Use a fixed flux condition at the upper boundary
+ has_fixed_ubflx = .false.
+
+ ! TMMF - 8/20/2020
+ ! Note: I had to modify the IC file to rename variables such as
+ ! CH3COCH3 into ACET. Using that new IC file, we can thus remove
+ ! the unnecessary special handlings.
+ ! Another option would have been to modify cnst_add and read_inidat
+ ! to use a load_name the first time IC are read. Constituent names
+ ! would be stored in cnst_name, while read_inidat would load from
+ ! load_name. load_name would be an optional argument to cnst_add, such
+ ! that, by default, load_name = cnst_name.
+ ! However, this would be tricky to handle with restart files that
+ ! would save cnst_name rather than load_name.
+
+ ! Special handlings
+ IF ( cnstName == 'HCHO' ) THEN
+ cnstName = 'CH2O'
+ !ELSEIF ( cnstName == 'HNO4' ) THEN
+ ! cnstName = 'HO2NO2'
+ !ELSEIF ( cnstName == 'HNO2' ) THEN
+ ! cnstName = 'HONO'
+ !ELSEIF ( cnstName == 'ACET' ) THEN
+ ! cnstName = 'CH3COCH3'
+ !ELSEIF ( cnstName == 'ALD2' ) THEN
+ ! cnstName = 'CH3CHO'
+ !ELSEIF ( cnstName == 'PRPE' ) THEN
+ ! cnstName = 'C3H6'
+ !ELSEIF ( cnstName == 'MP' ) THEN
+ ! cnstName = 'CH3OOH'
+ !ELSEIF ( cnstName == 'HAC' ) THEN
+ ! cnstName = 'HYAC'
+ !ELSEIF ( cnstName == 'GLYC' ) THEN
+ ! cnstName = 'GLYALD'
+ !ELSEIF ( cnstName == 'MAP' ) THEN
+ ! cnstName = 'CH3COOOH'
+ !ELSEIF ( cnstName == 'EOH' ) THEN
+ ! cnstName = 'C2H5OH'
+ !ELSEIF ( cnstName == 'MGLY' ) THEN
+ ! cnstName = 'CH3COCHO'
+ !ELSEIF ( cnstName == 'GLYX' ) THEN
+ ! cnstName = 'GLYOXAL'
+ !ELSEIF ( cnstName == 'ACTA' ) THEN
+ ! cnstName = 'CH3COOH'
+ !ELSEIF ( cnstName == 'TOLU' ) THEN
+ ! cnstName = 'TOLUENE'
+ ENDIF
+
+ CALL cnst_add( cnstName, MWtmp, cptmp, qmin, N, &
+ readiv=ic_from_cam2, mixtype=mixtype, &
+ cam_outfld=camout, molectype=molectype, &
+ fixed_ubc=has_fixed_ubc, &
+ fixed_ubflx=has_fixed_ubflx, &
+ longname=TRIM(lngName) )
+
+ IF ( iFirstCnst < 0 ) iFirstCnst = N
+
+ ref_MMR(N) = refmmr
+
+ ! Add to GC mapping. When starting a timestep, we will want to update the
+ ! concentration of State_Chm(x)%Species(1,iCol,iLev,m) with data from
+ ! constituent n
+ M = Ind_(TRIM(trueName))
+ IF ( M > 0 ) THEN
+ ! Map constituent onto GEOS-Chem tracer as indexed in State_Chm(LCHNK)%Species
+ map2GC(N) = M
+ ! Map GEOS-Chem tracer onto constituent
+ map2GCinv(M) = N
+ ENDIF
+ ! Map constituent onto chemically-active species (aka as indexed in solsym)
+ M = get_spc_ndx(TRIM(trueName))
+ IF ( M > 0 ) THEN
+ mapCnst(N) = M
+ ENDIF
+ ENDDO
+
+ ! Now unadvected species
+ map2GC_Sls = 0
+ sls_ref_MMR(:) = 0.0e+0_r8
+ DO I = 1, nSls
+ N = Ind_(slsNames(I))
+ IF ( N .GT. 0 ) THEN
+ ThisSpc => SC%SpcData(N)%Info
+ MWTmp = REAL(ThisSpc%MW_g,r8)
+ refvmr = REAL(ThisSpc%BackgroundVV,r8)
+ lngName = TRIM(ThisSpc%FullName)
+ sls_ref_MMR(I) = refvmr / (MWDry / MWTmp)
+ map2GC_Sls(I) = N
+ ThisSpc => NULL()
+ ENDIF
+ ENDDO
+
+ ! Pass information to "short_lived_species" module
+ slvd_ref_MMR(1:nSls) = sls_ref_MMR(1:nSls)
+ CALL Register_Short_Lived_Species()
+ ! More information:
+ ! http://www.cesm.ucar.edu/models/atm-cam/docs/phys-interface/node5.html
+
+ DO N = 1, gas_pcnst
+ ! Map solsym onto GEOS-Chem species
+ map2chm(N) = Ind_(TRIM(solsym(N)))
+ IF ( map2chm(N) < 0 ) THEN
+ ! This is not a GEOS-Chem species and we thus map on constituents
+ ! Most likely, these will be MAM aerosols
+ ! We store the index as the opposite to not confuse with GEOS-Chem
+ ! indices.
+ CALL cnst_get_ind(TRIM(solsym(N)), I, abort=.True.)
+ map2chm(N) = -I
+ ENDIF
+ ENDDO
+ ! Get constituent index of specific humidity
+ CALL cnst_get_ind('Q', cQ, abort=.True.)
+ CALL cnst_get_ind('H2O', cH2O, abort=.True.)
+ CALL cnst_get_ind('H2SO4', cH2SO4, abort=.True.)
+
+ !==============================================================
+ ! Get mapping between dry deposition species and species set
+ !==============================================================
+
+ nIgnored = 0
+
+ DO N = 1, nddvels
+
+ ! The species names need to be convert to upper case as,
+ ! for instance, BR2 != Br2
+ drySpc_ndx(N) = get_spc_ndx( to_upper(drydep_list(N)) )
+
+ IF ( MasterProc .AND. ( drySpc_ndx(N) < 0 ) ) THEN
+ Write(iulog,'(a,a)') ' ## Ignoring dry deposition of ', &
+ TRIM(drydep_list(N))
+ nIgnored = nIgnored + 1
+ ENDIF
+ ENDDO
+
+ IF ( MasterProc .AND. ( nIgnored > 0 ) ) THEN
+ Write(iulog,'(a,a)') ' The species listed above have dry', &
+ ' deposition turned off for one of the following reasons:'
+ Write(iulog,'(a)') ' - They are not present in the GEOS-Chem tracer list.'
+ Write(iulog,'(a)') ' - They have a synonym (e.g. CH2O and HCHO).'
+ ENDIF
+
+#if defined( MODAL_AERO_4MODE )
+ ! add fields to pbuf needed by aerosol models
+ CALL aero_model_register()
+
+ ! Mode | \sigma_g | Dry diameter (micrometers)
+ ! -----------------------|----------|--------------------------
+ ! a2 - Aitken mode | 1.6 | 0.015 - 0.053
+ ! a1 - Accumulation mode | 1.8 | 0.058 - 0.27
+ ! a3 - Coarse mode | 1.8 | 0.80 - 3.65
+ ! a4 - Primary carbon | 1.6 | 0.039 - 0.13
+ ! -----------------------|----------|--------------------------
+ ! Ref: Liu, Xiaohong, et al. "Toward a minimal representation of aerosols in
+ ! climate models: Description and evaluation in the Community Atmosphere
+ ! Model CAM5." Geoscientific Model Development 5.3 (2012): 709.
+
+ ALLOCATE(map2MAM4(nspec_max,ntot_amode), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failed to allocate map2MAM4')
+
+ ALLOCATE(iSulf(ntot_amode), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failed to allocate iSulf')
+
+ ! Initialize indices
+ map2MAM4(:,:) = -1
+ iSulf(:) = -1
+
+ DO M = 1, ntot_amode
+ DO L = 1, nspec_amode(M)
+ SELECT CASE ( to_upper(xname_massptr(L,M)(:3)) )
+ CASE ( 'BC_' )
+ SELECT CASE ( to_upper(xname_massptr(L,M)(4:5)) )
+ CASE ( 'A1' )
+ CALL cnst_get_ind( 'BCPI', map2MAM4(L,M) )
+ CASE ( 'A4' )
+ CALL cnst_get_ind( 'BCPO', map2MAM4(L,M) )
+ END SELECT
+ CASE ( 'DST' )
+ SELECT CASE ( to_upper(xname_massptr(L,M)(5:6)) )
+ ! DST1 - Dust aerosol, Reff = 0.7 micrometers
+ ! DST2 - Dust aerosol, Reff = 1.4 micrometers
+ ! DST3 - Dust aerosol, Reff = 2.4 micrometers
+ ! DST4 - Dust aerosol, Reff = 4.5 micrometers
+ CASE ( 'A1' )
+ CALL cnst_get_ind( 'DST1', map2MAM4(L,M) )
+ CASE ( 'A2' )
+ CALL cnst_get_ind( 'DST1', map2MAM4(L,M) )
+ CASE ( 'A3' )
+ CALL cnst_get_ind( 'DST4', map2MAM4(L,M) )
+ END SELECT
+ !CASE ( 'SOA' )
+ ! CALL cnst_get_ind( 'SOAS', map2MAM4(L,M) )
+ CASE ( 'SO4' )
+ CALL cnst_get_ind( 'SO4', map2MAM4(L,M) )
+ iSulf(M) = L
+ CASE ( 'NCL' )
+ SELECT CASE ( to_upper(xname_massptr(L,M)(5:6)) )
+ ! SALA - Fine (0.01-0.05 micros) sea salt aerosol
+ ! SALC - Coarse (0.5-8 micros) sea salt aerosol
+ CASE ( 'A1' )
+ CALL cnst_get_ind( 'SALA', map2MAM4(L,M) )
+ CASE ( 'A2' )
+ CALL cnst_get_ind( 'SALA', map2MAM4(L,M) )
+ CASE ( 'A3' )
+ CALL cnst_get_ind( 'SALC', map2MAM4(L,M) )
+ END SELECT
+ CASE ( 'POM' )
+ SELECT CASE ( to_upper(xname_massptr(L,M)(5:6)) )
+ CASE ( 'A1' )
+ CALL cnst_get_ind( 'OCPI', map2MAM4(L,M) )
+ CASE ( 'A4' )
+ CALL cnst_get_ind( 'OCPO', map2MAM4(L,M) )
+ END SELECT
+ END SELECT
+ ENDDO
+ ENDDO
+
+#endif
+
+ !==============================================================
+ ! Print summary
+ !==============================================================
+
+ IF ( MasterProc ) THEN
+ Write(iulog,'(/, a)') '### Summary of GEOS-Chem species: '
+ Write(iulog,'( a)') REPEAT( '-', 50 )
+ Write(iulog,'( a)') '+ List of advected species: '
+ Write(iulog,100) 'ID', 'Tracer', ''!'Dry deposition (T/F)'
+ DO N = 1, nTracers
+ Write(iulog,120) N, TRIM(tracerNames(N))!, ANY(drySpc_ndx .eq. N)
+ ENDDO
+ IF ( nAer > 0 ) THEN
+ Write(iulog,'(/, a)') '+ List of aerosols: '
+ Write(iulog,110) 'ID', 'MAM4 Aerosol'
+ DO N = 1, nAer
+ Write(iulog,130) N, TRIM(aerNames(N))
+ ENDDO
+ ENDIF
+ Write(iulog,'(/, a)') '+ List of short-lived species: '
+ DO N = 1, nSls
+ Write(iulog,130) N, TRIM(slsNames(N))
+ ENDDO
+ ENDIF
+
+100 FORMAT( 1x, A3, 3x, A10, 1x, A25 )
+110 FORMAT( 1x, A3, 3x, A15 )
+!120 FORMAT( 1x, I3, 3x, A10, 1x, L15 )
+120 FORMAT( 1x, I3, 3x, A10 )
+130 FORMAT( 1x, I3, 3x, A10 )
+
+ ! Clean up
+ Call Cleanup_State_Chm ( SC, RC )
+ Call Cleanup_State_Grid( SG, RC )
+ Call Cleanup_Input_Opt ( IO, RC )
+
+ ! Add data for HEMCO extensions to buffers
+ call pbuf_add_field('HCO_IN_JNO2', 'global', dtype_r8, (/pcols/), tmpIdx)
+ call pbuf_add_field('HCO_IN_JOH', 'global', dtype_r8, (/pcols/), tmpIdx)
+
+
+ end subroutine chem_register
+
+!===============================================================================
+
+ subroutine chem_readnl(nlfile)
+
+ use cam_abortutils, only : endrun
+ use units, only : getunit, freeunit
+ use namelist_utils, only : find_group_name
+#if defined( MODAL_AERO )
+ use aero_model, only : aero_model_readnl
+ use dust_model, only : dust_readnl
+#endif
+ use gas_wetdep_opts, only : gas_wetdep_readnl
+#ifdef SPMD
+ use mpishorthand
+#endif
+ use gckpp_Model, only : nSpec, Spc_Names
+ use chem_mods, only : drySpc_ndx
+
+ ! args
+ CHARACTER(LEN=*), INTENT(IN) :: nlfile ! filepath for file containing namelist input
+
+ ! Local variables
+ INTEGER :: I, N
+ INTEGER :: UNITN, IERR
+ CHARACTER(LEN=500) :: line
+ LOGICAL :: menuFound
+ LOGICAL :: validSLS
+
+ ! The following files are required to compute land maps, required to perform
+ ! aerosol dry deposition
+ namelist /chem_inparm/ clim_soilw_file, &
+ depvel_file, &
+ lght_no_prd_factor, &
+ depvel_lnd_file, &
+ ext_frc_specifier, &
+ ext_frc_type, &
+ ext_frc_cycle_yr, &
+ ext_frc_fixed_ymd, &
+ ext_frc_fixed_tod, &
+ season_wes_file, &
+ srf_emis_specifier, &
+ srf_emis_cycle_yr, &
+ srf_emis_fixed_ymd, &
+ srf_emis_fixed_tod, &
+ srf_emis_type
+
+ ! ghg chem
+
+ namelist /chem_inparm/ bndtvg, h2orates, ghg_chem
+
+ ALLOCATE(drySpc_ndx(nddvels), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failed to allocate drySpc_ndx')
+
+#if defined( MODAL_AERO_4MODE )
+ !==============================================================
+ ! Get names and molar weights of aerosols in MAM4
+ !==============================================================
+
+ nAer = 33
+
+ aerNames(:nAer) = (/ 'bc_a1 ','bc_a4 ','dst_a1 ', &
+ 'dst_a2 ','dst_a3 ','ncl_a1 ', &
+ 'ncl_a2 ','ncl_a3 ','num_a1 ', &
+ 'num_a2 ','num_a3 ','num_a4 ', &
+ 'pom_a1 ','pom_a4 ','so4_a1 ', &
+ 'so4_a2 ','so4_a3 ','soa1_a1 ', &
+ 'soa1_a2 ','soa2_a1 ','soa2_a2 ', &
+ 'soa3_a1 ','soa3_a2 ','soa4_a1 ', &
+ 'soa4_a2 ','soa5_a1 ','soa5_a2 ', &
+ 'H2SO4 ','SOAG0 ','SOAG1 ', &
+ 'SOAG2 ','SOAG3 ','SOAG4 ' /)
+
+ aerAdvMass(:nAer) = (/ 12.011000_r8, 12.011000_r8, 135.064039_r8, &
+ 135.064039_r8, 135.064039_r8, 58.442468_r8, &
+ 58.442468_r8, 58.442468_r8, 1.007400_r8, &
+ 1.007400_r8, 1.007400_r8, 1.007400_r8, &
+ 12.011000_r8, 12.011000_r8, 115.107340_r8, &
+ 115.107340_r8, 115.107340_r8, 250.445000_r8, &
+ 250.445000_r8, 250.445000_r8, 250.445000_r8, &
+ 250.445000_r8, 250.445000_r8, 250.445000_r8, &
+ 250.445000_r8, 250.445000_r8, 250.445000_r8, &
+ 98.078400_r8, 250.445000_r8, 250.445000_r8, &
+ 250.445000_r8, 250.445000_r8, 250.445000_r8 /)
+
+ CALL aero_model_readnl(nlfile)
+ CALL dust_readnl(nlfile)
+#endif
+
+ DO I = (nAer+1), nAerMax
+ aerNames(I) = 'EMPTY_AER '
+ aerAdvMass(I) = -1.00_r8
+ ENDDO
+
+ CALL gas_wetdep_readnl(nlfile)
+
+ CALL gc_readnl(nlfile)
+
+ IF ( MasterProc ) THEN
+
+ Write(iulog,'(/,a)') REPEAT( '=', 50 )
+ Write(iulog,'(a)') REPEAT( '=', 50 )
+ Write(iulog,'(a)') 'This is the GEOS-CHEM / CESM interface'
+ Write(iulog,'(a)') REPEAT( '=', 50 )
+ Write(iulog,'(a)') ' + Routines written by Thibaud M. Fritz'
+ Write(iulog,'(a)') ' + Laboratory for Aviation and the Environment,'
+ Write(iulog,'(a)') ' + Department of Aeronautics and Astronautics,'
+ Write(iulog,'(a)') ' + Massachusetts Institute of Technology'
+ Write(iulog,'(a)') REPEAT( '=', 50 )
+
+ Write(iulog,'(/,a,/)') 'Now defining GEOS-Chem tracers and dry deposition mapping...'
+
+ unitn = getunit()
+
+ !==============================================================
+ ! Opening input.geos and go to ADVECTED SPECIES MENU
+ !==============================================================
+
+ OPEN( unitn, FILE=TRIM(inputGeos), STATUS='OLD', IOSTAT=IERR )
+ IF (IERR .NE. 0) THEN
+ CALL ENDRUN('chem_readnl: ERROR opening input.geos')
+ ENDIF
+
+ ! Go to ADVECTED SPECIES MENU
+ menuFound = .False.
+ DO WHILE ( .NOT. menuFound )
+ READ( unitn, '(a)', IOSTAT=IERR ) line
+ IF ( IERR .NE. 0 ) THEN
+ CALL ENDRUN('chem_readnl: ERROR finding advected species menu')
+ ELSEIF ( INDEX(line, 'ADVECTED SPECIES MENU') > 0 ) THEN
+ menuFound = .True.
+ ENDIF
+ ENDDO
+
+ !==============================================================
+ ! Read list of GEOS-Chem tracers
+ !==============================================================
+
+ ! Mimic GEOS-Chem's READ_ADVECTED_SPECIES_MENU
+ DO
+ ! Read line
+ READ(unitn,'(26x,a)', IOSTAT=IERR) line
+
+ IF ( INDEX( TRIM(line), '---' ) > 0 ) EXIT
+
+ nTracers = nTracers + 1
+ tracerNames(nTracers) = TRIM(line)
+ ENDDO
+
+ CLOSE(unitn)
+ CALL freeunit(unitn)
+
+ ! Assign remaining tracers dummy names
+ DO I = (nTracers+1), nTracersMax
+ WRITE(tracerNames(I),'(a,I0.4)') 'GCTRC_', I
+ ENDDO
+
+ !==============================================================
+ ! Now go through the KPP mechanism and add any species not
+ ! implemented by the tracer list in input.geos
+ !==============================================================
+
+ IF ( nSpec > nSlsMax ) THEN
+ CALL ENDRUN('chem_readnl: too many species - increase nSlsmax')
+ ENDIF
+
+ nSls = 0
+ DO I = 1, nSpec
+ ! Get the name of the species from KPP
+ line = ADJUSTL(TRIM(Spc_Names(I)))
+ ! Only add short-lived KPP species, except from CO2
+ validSLS = (( .NOT. ANY(TRIM(line) .EQ. tracerNames) ) &
+ .AND. TRIM(line) /= 'CO2' )
+ IF ( validSLS ) THEN
+ ! Genuine new short-lived species
+ nSls = nSls + 1
+ slsNames(nSls) = TRIM(line)
+ ENDIF
+ ENDDO
+
+ !==============================================================
+
+ unitn = getunit()
+ OPEN( unitn, FILE=TRIM(nlfile), STATUS='old' )
+ CALL find_group_name(unitn, 'chem_inparm', STATUS=IERR)
+ IF (IERR == 0) THEN
+ READ(unitn, chem_inparm, IOSTAT=IERR)
+ IF (IERR /= 0) THEN
+ CALL endrun('chem_readnl: ERROR reading namelist')
+ ENDIF
+ ENDIF
+ CLOSE(unitn)
+ CALL freeunit(unitn)
+
+ ENDIF
+
+ !==================================================================
+ ! Broadcast to all processors
+ !==================================================================
+
+#if defined( SPMD )
+ CALL MPIBCAST ( nTracers, 1, MPIINT, 0, MPICOM )
+ CALL MPIBCAST ( tracerNames, LEN(tracerNames(1))*nTracersMax, MPICHAR, 0, MPICOM )
+ CALL MPIBCAST ( nSls, 1, MPIINT, 0, MPICOM )
+ CALL MPIBCAST ( slsNames, LEN(slsNames(1))*nSlsMax, MPICHAR, 0, MPICOM )
+
+ ! Broadcast namelist variables
+
+ ! The following files are required to compute land maps, required to perform
+ ! aerosol dry deposition
+ CALL MPIBCAST (depvel_lnd_file, LEN(depvel_lnd_file), MPICHAR, 0, MPICOM)
+ CALL MPIBCAST (clim_soilw_file, LEN(clim_soilw_file), MPICHAR, 0, MPICOM)
+ CALL MPIBCAST (season_wes_file, LEN(season_wes_file), MPICHAR, 0, MPICOM)
+
+ CALL MPIBCAST (lght_no_prd_factor, 1, MPIR8, 0, MPICOM)
+ CALL MPIBCAST (depvel_file, LEN(depvel_file), MPICHAR, 0, MPICOM)
+ CALL MPIBCAST (srf_emis_specifier, LEN(srf_emis_specifier(1))*pcnst, MPICHAR, 0, MPICOM)
+ CALL MPIBCAST (srf_emis_type, LEN(srf_emis_type), MPICHAR, 0, MPICOM)
+ CALL MPIBCAST (srf_emis_cycle_yr, 1, MPIINT, 0, MPICOM)
+ CALL MPIBCAST (srf_emis_fixed_ymd, 1, MPIINT, 0, MPICOM)
+ CALL MPIBCAST (srf_emis_fixed_tod, 1, MPIINT, 0, MPICOM)
+ CALL MPIBCAST (ext_frc_specifier, LEN(ext_frc_specifier(1))*pcnst, MPICHAR, 0, MPICOM)
+ CALL MPIBCAST (ext_frc_type, LEN(ext_frc_type), MPICHAR, 0, MPICOM)
+ CALL MPIBCAST (ext_frc_cycle_yr, 1, MPIINT, 0, MPICOM)
+ CALL MPIBCAST (ext_frc_fixed_ymd, 1, MPIINT, 0, MPICOM)
+ CALL MPIBCAST (ext_frc_fixed_tod, 1, MPIINT, 0, MPICOM)
+
+ CALL MPIBCAST (ghg_chem, 1, MPILOG, 0, MPICOM)
+ CALL MPIBCAST (bndtvg, LEN(bndtvg), MPICHAR, 0, MPICOM)
+ CALL MPIBCAST (h2orates, LEN(h2orates), MPICHAR, 0, MPICOM)
+#endif
+
+ ! Update "short_lived_species" arrays
+ nSlvd = nSls
+ ALLOCATE(slvd_Lst(nSlvd), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating slvd_Lst')
+ ALLOCATE(slvd_ref_MMR(nSlvd), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating slvd_ref_MMR')
+ DO I = 1, nSls
+ slvd_Lst(I) = TRIM(slsNames(I))
+ ENDDO
+
+ end subroutine chem_readnl
+
+!================================================================================================
+
+ function chem_is_active()
+ !-----------------------------------------------------------------------
+ logical :: chem_is_active
+ !-----------------------------------------------------------------------
+
+ chem_is_active = .true.
+
+ end function chem_is_active
+
+!================================================================================================
+
+ function chem_implements_cnst(name)
+ !-----------------------------------------------------------------------
+ !
+ ! Purpose: return true if specified constituent is implemented by this package
+ !
+ ! Author: B. Eaton
+ !
+ !-----------------------------------------------------------------------
+ IMPLICIT NONE
+ !-----------------------------Arguments---------------------------------
+
+ CHARACTER(LEN=*), INTENT(IN) :: name ! constituent name
+ LOGICAL :: chem_implements_cnst ! return value
+
+ INTEGER :: M
+
+ chem_implements_cnst = .false.
+
+ DO M = 1, gas_pcnst
+ IF (TRIM(solsym(M)) .eq. TRIM(name)) THEN
+ chem_implements_cnst = .true.
+ EXIT
+ ENDIF
+ ENDDO
+
+ end function chem_implements_cnst
+
+!===============================================================================
+
+ subroutine chem_init(phys_state, pbuf2d)
+ !-----------------------------------------------------------------------
+ !
+ ! Purpose: initialize GEOS-Chem parts (state objects, mainly)
+ ! (and declare history variables)
+ !
+ !-----------------------------------------------------------------------
+ use physics_buffer, only : physics_buffer_desc, pbuf_get_index
+ use chem_mods, only : map2GC_dryDep, drySpc_ndx
+
+#ifdef SPMD
+ use mpishorthand
+#endif
+ use cam_abortutils, only : endrun
+ use mo_chem_utls, only : get_spc_ndx
+
+ use Phys_Grid, only : get_Area_All_p
+ use hycoef, only : ps0, hyai, hybi, hyam
+
+ use seq_drydep_mod, only : drydep_method, DD_XLND, DD_XATM
+ use gas_wetdep_opts, only : gas_wetdep_method
+ use mo_neu_wetdep, only : neu_wetdep_init
+
+#if defined( MODAL_AERO )
+ use aero_model, only : aero_model_init
+ use mo_setsox, only : sox_inti
+ use mo_drydep, only : drydep_inti
+ use modal_aero_data, only : ntot_amode, nspec_amode
+ use modal_aero_data, only : xname_massptr
+#endif
+
+ use Input_Opt_Mod
+ use State_Chm_Mod
+ use State_Grid_Mod
+ use State_Met_Mod
+ use DiagList_Mod, only : Init_DiagList, Print_DiagList
+ use TaggedDiagList_Mod, only : Init_TaggedDiagList, Print_TaggedDiagList
+ use GC_Grid_Mod, only : SetGridFromCtrEdges
+
+ ! Use GEOS-Chem versions of physical constants
+ use PhysConstants, only : PI, PI_180, Re
+
+ use Time_Mod, only : Accept_External_Date_Time
+ use Linoz_Mod, only : Linoz_Read
+
+ use CMN_Size_Mod
+
+ use Drydep_Mod, only : depName, Ndvzind
+ use Pressure_Mod, only : Accept_External_ApBp
+ use Chemistry_Mod, only : Init_Chemistry
+ use Ucx_Mod, only : Init_Ucx
+ use Strat_chem_Mod, only : Init_Strat_Chem
+ use isorropiaII_Mod, only : Init_IsorropiaII
+ use Input_Mod, only : Read_Input_File
+ use Input_Mod, only : Validate_Directories
+ use Olson_Landmap_Mod
+ use Vdiff_Mod
+
+ use mo_setinv, only : setinv_inti
+ use mo_mean_mass, only : init_mean_mass
+ use mo_ghg_chem, only : ghg_chem_init
+ use tracer_cnst, only : tracer_cnst_init
+ use tracer_srcs, only : tracer_srcs_init
+
+ use CESMGC_Emissions_Mod, only : CESMGC_Emissions_Init
+ use CESMGC_Diag_Mod, only : CESMGC_Diag_Init
+
+ TYPE(physics_state), INTENT(IN ) :: phys_state(BEGCHUNK:ENDCHUNK)
+ TYPE(physics_buffer_desc), POINTER, INTENT(INOUT) :: pbuf2d(:,:)
+
+ ! Local variables
+
+ !----------------------------
+ ! Scalars
+ !----------------------------
+
+ ! Integers
+ INTEGER :: LCHNK(BEGCHUNK:ENDCHUNK), NCOL(BEGCHUNK:ENDCHUNK)
+ INTEGER :: IWAIT, IERR
+ INTEGER :: nX, nY, nZ
+ INTEGER :: nStrat, nTrop
+ INTEGER :: I, J, L, N, M
+ INTEGER :: RC
+ INTEGER :: nLinoz
+
+ ! Logicals
+ LOGICAL :: prtDebug
+ LOGICAL :: Found
+
+ ! Strings
+ CHARACTER(LEN=255) :: historyConfigFile
+ CHARACTER(LEN=255) :: SpcName
+
+ ! Objects
+ TYPE(Species), POINTER :: SpcInfo
+
+ ! Grid setup
+ REAL(fp) :: lonVal, latVal
+ REAL(fp) :: dLonFix, dLatFix
+ REAL(f4), ALLOCATABLE :: lonMidArr(:,:), latMidArr(:,:)
+ REAL(f4), ALLOCATABLE :: lonEdgeArr(:,:), latEdgeArr(:,:)
+ REAL(r8), ALLOCATABLE :: linozData(:,:,:,:)
+
+ ! Grid with largest number of columns
+ TYPE(GrdState) :: maxGrid ! Grid State object
+
+ REAL(r8), ALLOCATABLE :: Col_Area(:)
+ REAL(fp), ALLOCATABLE :: Ap_CAM_Flip(:), Bp_CAM_Flip(:)
+
+ !REAL(r8), POINTER :: SlsPtr(:,:,:)
+
+ ! Assume a successful return until otherwise
+ RC = GC_SUCCESS
+
+ ! For error trapping
+ ErrMsg = ''
+ ThisLoc = ' -> at GEOS-Chem (in chemistry/geoschem/chemistry.F90)'
+
+ ! Initialize pointers
+ SpcInfo => NULL()
+
+ ! LCHNK: which chunks we have on this process
+ LCHNK = phys_state%LCHNK
+ ! NCOL: number of atmospheric columns for each chunk
+ NCOL = phys_state%NCOL
+
+ ! The GEOS-Chem grids on every "chunk" will all be the same size, to avoid
+ ! the possibility of having differently-sized chunks
+ nX = 1
+ !nY = MAXVAL(NCOL)
+ nY = PCOLS
+ nZ = PVER
+
+ !! Add short lived speies to buffers
+ !CALL Pbuf_add_field(Trim(SLSBuffer),'global',dtype_r8,(/PCOLS,PVER,nSls/),Sls_Pbf_Idx)
+ !! Initialize
+ !ALLOCATE(SlsPtr(PCOLS,PVER,BEGCHUNK:ENDCHUNK), STAT=IERR)
+ !IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating SlsPtr')
+ !SlsPtr(:,:,:) = 0.0e+0_r8
+ !DO I=1,nSls
+ ! SlsPtr(:,:,:) = sls_ref_MMR(I)
+ ! CALL pbuf_set_field(pbuf2d,Sls_Pbf_Idx,SlsPtr,start=(/1,1,i/),kount=(/PCOLS,PVER,1/))
+ !ENDDO
+ !DEALLOCATE(SlsPtr)
+
+ ! This ensures that each process allocates everything needed for its chunks
+ ALLOCATE(State_Chm(BEGCHUNK:ENDCHUNK) , STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating State_Chm')
+ ALLOCATE(State_Diag(BEGCHUNK:ENDCHUNK) , STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating State_Diag')
+ ALLOCATE(State_Grid(BEGCHUNK:ENDCHUNK), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating State_Grid')
+ ALLOCATE(State_Met(BEGCHUNK:ENDCHUNK) , STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating State_Met')
+
+ ! Initialize fields of the Input Options object
+ CALL Set_Input_Opt( am_I_Root = MasterProc, &
+ Input_Opt = Input_Opt, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "Set_Input_Opt"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Find maximum tropopause level, set at 40 hPa (based on GEOS-Chem 72 and 47
+ ! layer grids)
+ nTrop = nZ
+ DO WHILE ( hyam(nZ+1-nTrop) * ps0 < 4000.0 )
+ nTrop = nTrop-1
+ ENDDO
+ ! Find stratopause level, defined at 1 hPa
+ nStrat = nZ
+ DO WHILE ( hyam(nZ+1-nStrat) * ps0 < 100.0 )
+ nStrat = nStrat-1
+ ENDDO
+
+ ! Initialize grid with largest number of columns
+ ! This is required as State_Grid(LCHNK) can have different
+ ! number of columns, but GEOS-Chem arrays are defined based
+ ! on State_Grid(BEGCHUNK).
+ ! To go around this, we define all of GEOS-Chem arrays with
+ ! size PCOLS x PVER, which is the largest possible number of
+ ! grid cells.
+ CALL Init_State_Grid( Input_Opt = Input_Opt, &
+ State_Grid = maxGrid, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "Init_State_Grid"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ maxGrid%NX = nX
+ maxGrid%NY = nY
+ maxGrid%NZ = nZ
+
+ Input_Opt%thisCPU = myCPU
+ Input_Opt%amIRoot = MasterProc
+
+ !IF ( MasterProc ) THEN
+ IF ( .True. ) THEN
+ CALL Read_Input_File( Input_Opt = Input_Opt, &
+ State_Grid = maxGrid, &
+ RC = RC )
+
+ ! First setup directories
+ Input_Opt%Chem_Inputs_Dir = TRIM(gc_cheminputs)
+ Input_Opt%SpcDatabaseFile = TRIM(speciesDB)
+ Input_Opt%FAST_JX_DIR = TRIM(gc_cheminputs)//'FAST_JX/v2020-02/'
+
+ !==================================================================
+ ! CESM-specific input flags
+ !==================================================================
+
+ ! onlineAlbedo -> True (use CLM albedo)
+ ! -> False (read monthly-mean albedo from HEMCO)
+ Input_Opt%onlineAlbedo = .False.
+
+ ! onlineLandTypes -> True (use CLM landtypes)
+ ! -> False (read landtypes from HEMCO)
+ Input_Opt%onlineLandTypes = .True.
+
+ ! ddVel_CLM -> True (use CLM dry deposition velocities)
+ ! -> False (let GEOS-Chem compute dry deposition velocities)
+ Input_Opt%ddVel_CLM = .False.
+
+ ! applyQtend: apply tendencies of water vapor to specific humidity
+ Input_Opt%applyQtend = .False.
+
+ IF ( .NOT. Input_Opt%LSOA ) THEN
+ CALL ENDRUN('CESM2-GC requires the complex SOA option to be on!')
+ ENDIF
+
+ ENDIF
+
+ CALL Validate_Directories( Input_Opt, RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Validation_Directories"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Initialize GEOS-Chem horizontal grid structure
+ CALL GC_Init_Grid( Input_Opt = Input_Opt, &
+ State_Grid = maxGrid, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "GC_Init_Grid"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Define more variables for maxGrid
+ maxGrid%MaxTropLev = nTrop
+ maxGrid%MaxStratLev = nStrat
+ IF ( Input_Opt%LUCX ) THEN
+ maxGrid%MaxChemLev = maxGrid%MaxStratLev
+ ELSE
+ maxGrid%MaxChemLev = maxGrid%MaxTropLev
+ ENDIF
+
+ DO I = BEGCHUNK, ENDCHUNK
+
+ ! Initialize fields of the Grid State object
+ CALL Init_State_Grid( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(I), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "Init_State_Grid"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ State_Grid(I)%NX = nX
+ State_Grid(I)%NY = NCOL(I)
+ State_Grid(I)%NZ = nZ
+
+ ! Initialize GEOS-Chem horizontal grid structure
+ CALL GC_Init_Grid( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(I), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "GC_Init_Grid"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Define more variables for State_Grid
+ State_Grid(I)%MaxTropLev = nTrop
+ State_Grid(I)%MaxStratLev = nStrat
+
+ ! Set maximum number of levels in the chemistry grid
+ IF ( Input_Opt%LUCX ) THEN
+ State_Grid(I)%MaxChemLev = State_Grid(I)%MaxStratLev
+ ELSE
+ State_Grid(I)%MaxChemLev = State_Grid(I)%MaxTropLev
+ ENDIF
+
+ ENDDO
+
+ ! Note - this is called AFTER chem_readnl, after X, and after
+ ! every constituent has had its initial conditions read. Any
+ ! constituent which is not found in the CAM restart file will
+ ! then have already had a call to chem_implements_cnst, and will
+ ! have then had a call to chem_init_cnst to set a default VMR
+ ! Call the routine GC_Allocate_All (located in module file
+ ! GeosCore/gc_environment_mod.F90) to allocate all lat/lon
+ ! allocatable arrays used by GEOS-Chem.
+ CALL GC_Allocate_All ( Input_Opt = Input_Opt, &
+ State_Grid = maxGrid, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "GC_Allocate_All"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Read in data for Linoz. All CPUs allocate one array to hold the data. Only
+ ! the root CPU reads in the data; then we copy it out to a temporary array,
+ ! broadcast to all other CPUs, and finally duplicate the data into every
+ ! copy of Input_Opt
+ IF ( Input_Opt%LLinoz ) THEN
+ ! Allocate array for broadcast
+ nLinoz = Input_Opt%Linoz_NLevels * &
+ Input_Opt%Linoz_NLat * &
+ Input_Opt%Linoz_NMonths * &
+ Input_Opt%Linoz_NFields
+ ALLOCATE( linozData( Input_Opt%Linoz_NLevels, &
+ Input_Opt%Linoz_NLat, &
+ Input_Opt%Linoz_NMonths, &
+ Input_Opt%Linoz_NFields ), STAT=IERR)
+ IF (IERR .NE. 0) CALL ENDRUN('Failure while allocating linozData')
+ linozData = 0.0e+0_r8
+
+ IF ( MasterProc ) THEN
+ ! Read data in to Input_Opt%Linoz_TParm
+ CALL Linoz_Read( Input_Opt, RC )
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Linoz_Read"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+ ! Copy the data to a temporary array
+ linozData = REAL(Input_Opt%LINOZ_TPARM, r8)
+ ENDIF
+#if defined( SPMD )
+ CALL MPIBCAST( linozData, nLinoz, MPIR8, 0, MPICOM )
+#endif
+ IF ( .NOT. MasterProc ) THEN
+ Input_Opt%LINOZ_TPARM = REAL(linozData,fp)
+ ENDIF
+ IF ( ALLOCATED( linozData ) ) DEALLOCATE(linozData)
+ ENDIF
+
+ ! Note: The following calculations do not setup the gridcell areas.
+ ! In any case, we will need to be constantly updating this grid
+ ! to compensate for the "multiple chunks per processor" element
+ ALLOCATE(lonMidArr(maxGrid%nX,maxGrid%nY), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating lonMidArr')
+ ALLOCATE(lonEdgeArr(maxGrid%nX+1,maxGrid%nY+1), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating lonEdgeArr')
+ ALLOCATE(latMidArr(maxGrid%nX,maxGrid%nY), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating latMidArr')
+ ALLOCATE(latEdgeArr(maxGrid%nX+1,maxGrid%nY+1), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating latEdgeArr')
+
+ ! We could try and get the data from CAM.. but the goal is to make this GC
+ ! component completely grid independent. So for now, we set to arbitrary
+ ! values
+ ! TODO: This needs more refinement. For now, this generates identical
+ ! State_Grid for all chunks
+ DO L = BEGCHUNK, ENDCHUNK
+ lonMidArr = 0.0e+0_f4
+ latMidArr = 0.0e+0_f4
+ dLonFix = 360.0e+0_fp / REAL(nX,fp)
+ dLatFix = 180.0e+0_fp / REAL(NCOL(L),fp)
+ DO I = 1, nX
+ ! Center of box, assuming dateline edge
+ lonVal = -180.0e+0_fp + (REAL(I-1,fp)*dLonFix)
+ DO J = 1, NCOL(L)
+ ! Center of box, assuming regular cells
+ latVal = -90.0e+0_fp + (REAL(J-1,fp)*dLatFix)
+ lonMidArr(I,J) = REAL((lonVal + (0.5e+0_fp * dLonFix)) * PI_180, f4)
+ latMidArr(I,J) = REAL((latVal + (0.5e+0_fp * dLatFix)) * PI_180, f4)
+
+ ! Edges of box, assuming regular cells
+ lonEdgeArr(I,J) = REAL(lonVal * PI_180, f4)
+ latEdgeArr(I,J) = REAL(latVal * PI_180, f4)
+ ENDDO
+ ! Edges of box, assuming regular cells
+ lonEdgeArr(I,NCOL(L)+1) = REAL((lonVal + dLonFix) * PI_180, f4)
+ latEdgeArr(I,NCOL(L)+1) = REAL((latVal + dLatFix) * PI_180, f4)
+ ENDDO
+ DO J = 1, NCOL(L)+1
+ ! Edges of box, assuming regular cells
+ latVal = -90.0e+0_fp + (REAL(J-1,fp)*dLatFix)
+ lonEdgeArr(nX+1,J) = REAL((lonVal + dLonFix) * PI_180, f4)
+ latEdgeArr(nX+1,J) = REAL((latVal) * PI_180, f4)
+ ENDDO
+
+ CALL SetGridFromCtrEdges( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(L), &
+ lonCtr = lonMidArr, &
+ latCtr = latMidArr, &
+ lonEdge = lonEdgeArr, &
+ latEdge = latEdgeArr, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "SetGridFromCtrEdges"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ENDDO
+ IF ( ALLOCATED( lonMidArr ) ) DEALLOCATE( lonMidArr )
+ IF ( ALLOCATED( latMidArr ) ) DEALLOCATE( latMidArr )
+ IF ( ALLOCATED( lonEdgeArr ) ) DEALLOCATE( lonEdgeArr )
+ IF ( ALLOCATED( latEdgeArr ) ) DEALLOCATE( latEdgeArr )
+
+ ! Set the times held by "time_mod"
+ CALL Accept_External_Date_Time( value_NYMDb = Input_Opt%NYMDb, &
+ value_NHMSb = Input_Opt%NHMSb, &
+ value_NYMDe = Input_Opt%NYMDe, &
+ value_NHMSe = Input_Opt%NHMSe, &
+ value_NYMD = Input_Opt%NYMDb, &
+ value_NHMS = Input_Opt%NHMSb, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Accept_External_Date_Time"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Start by setting some dummy timesteps
+ CALL GC_Update_Timesteps(300.0E+0_r8)
+
+ ! Initialize error module
+ CALL Init_Error( Input_Opt, RC )
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Init_Error"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Set a flag to denote if we should print ND70 debug output
+ prtDebug = ( Input_Opt%LPRT .and. MasterProc )
+
+ historyConfigFile = 'HISTORY.rc'
+ ! This requires input.geos and HISTORY.rc to be in the run directory
+ ! This is the current way chosen to diagnose photolysis rates!
+ CALL Init_DiagList( MasterProc, historyConfigFile, Diag_List, RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Init_DiagList"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Initialize the TaggedDiag_List (list of wildcards/tags per diagnostic)
+ CALL Init_TaggedDiagList( Input_Opt%amIroot, Diag_List, &
+ TaggedDiag_List, RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Init_TaggedDiagList"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ IF ( prtDebug ) THEN
+ CALL Print_DiagList( Input_Opt%amIRoot, Diag_List, RC )
+ CALL Print_TaggedDiagList( Input_Opt%amIRoot, TaggedDiag_List, RC )
+ ENDIF
+
+ DO I = BEGCHUNK, ENDCHUNK
+ Input_Opt%amIRoot = (MasterProc .AND. (I == BEGCHUNK))
+
+ CALL GC_Init_StateObj( Diag_List = Diag_List, & ! Diagnostic list obj
+ TaggedDiag_List = TaggedDiag_List, & ! TaggedDiag list obj
+ Input_Opt = Input_Opt, & ! Input Options
+ State_Chm = State_Chm(I), & ! Chemistry State
+ State_Diag = State_Diag(I), & ! Diagnostics State
+ State_Grid = maxGrid, & ! Grid State
+ State_Met = State_Met(I), & ! Meteorology State
+ RC = RC ) ! Success or failure
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "GC_Init_StateObj"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Start with v/v dry (CAM standard)
+ State_Chm(I)%Spc_Units = 'v/v dry'
+
+ ENDDO
+ Input_Opt%amIRoot = MasterProc
+
+ CALL GC_Init_Extra( Diag_List = Diag_List, & ! Diagnostic list obj
+ & Input_Opt = Input_Opt, & ! Input Options
+ & State_Chm = State_Chm(BEGCHUNK), & ! Chemistry State
+ & State_Diag = State_Diag(BEGCHUNK), & ! Diagnostics State
+ & State_Grid = maxGrid, & ! Grid State
+ & RC = RC ) ! Success or failure
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "GC_Init_Extra"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ IF ( Input_Opt%LDryD ) THEN
+ !==============================================================
+ ! Get mapping between CESM dry deposited species and the
+ ! indices of State_Chm%DryDepVel. This needs to be done after
+ ! Init_Drydep
+ ! Thibaud M. Fritz - 04 Mar 2020
+ !==============================================================
+
+ ALLOCATE(map2GC_dryDep(nddvels), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failed to allocate map2GC_dryDep')
+
+ DO N = 1, nddvels
+ ! Initialize index to -1
+ map2GC_dryDep(N) = -1
+
+ IF ( drySpc_ndx(N) > 0 ) THEN
+
+ ! Convert to upper case
+ SpcName = to_upper(drydep_list(N))
+
+ DO I = 1, State_Chm(BEGCHUNK)%nDryDep
+ IF ( TRIM( SpcName ) == TRIM( to_upper(depName(I)) ) ) THEN
+ map2GC_dryDep(N) = nDVZind(I)
+ EXIT
+ ENDIF
+ ENDDO
+
+ ! Print out debug information
+ IF ( masterProc ) THEN
+ IF ( N == 1 ) Write(iulog,*) " ++ GEOS-Chem Dry deposition ++ "
+ IF ( map2GC_dryDep(N) > 0 ) THEN
+ Write(iulog,*) " CESM species: ", TRIM(drydep_list(N)), &
+ ' is matched with ', depName(map2GC_dryDep(N))
+ ELSE
+ Write(iulog,*) " CESM species: ", TRIM(drydep_list(N)), &
+ ' has no match'
+ ENDIF
+ ENDIF
+
+ ENDIF
+ ENDDO
+ ENDIF
+
+#if defined( MODAL_AERO )
+ ! Initialize aqueous chem
+ CALL SOx_inti()
+
+ ! Initialize aerosols
+ CALL aero_model_init( pbuf2d )
+
+ ! Initialize land maps for aerosol dry deposition
+ IF ( drydep_method == DD_XATM .OR. drydep_method == DD_XLND ) THEN
+ CALL drydep_inti( depvel_lnd_file, &
+ clim_soilw_file, &
+ season_wes_file )
+ ELSE
+ IF ( masterProc ) Write(iulog,'(a,a)') ' drydep_method is set to: ', TRIM(drydep_method)
+ CALL ENDRUN('drydep_method must be DD_XLND or DD_XATM to compute land '// &
+ 'maps for aerosol dry deposition!')
+ ENDIF
+#endif
+
+ IF ( gas_wetdep_method == 'NEU' ) THEN
+ ! Initialize MOZART's wet deposition
+ CALL Neu_wetdep_init()
+ ENDIF
+
+ ! Set grid-cell area
+ DO N = BEGCHUNK, ENDCHUNK
+ ALLOCATE(Col_Area(State_Grid(N)%nY), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating Col_Area')
+
+ CALL Get_Area_All_p(N, State_Grid(N)%nY, Col_Area)
+
+ ! Set default value (in case of chunks with fewer columns)
+ State_Grid(N)%Area_M2 = 1.0e+10_fp
+ DO I = 1, State_Grid(N)%nX
+ DO J = 1, State_Grid(N)%nY
+ State_Grid(N)%Area_M2(I,J) = REAL(Col_Area(J) * Re**2,fp)
+ State_Met(N)%Area_M2(I,J) = State_Grid(N)%Area_M2(I,J)
+ ENDDO
+ ENDDO
+
+ IF ( ALLOCATED( Col_Area ) ) DEALLOCATE(Col_Area)
+ ENDDO
+
+ ! Initialize (mostly unused) diagnostic arrays
+ ! WARNING: This routine likely calls on modules which are currently
+ ! excluded from the GC-CESM build (eg diag03)
+ ! CALL Initialize( MasterProc, Input_Opt, 2, RC )
+ ! CALL Initialize( Masterproc, Input_Opt, 3, RC )
+
+ ! Get Ap and Bp from CAM at pressure edges
+ ALLOCATE(Ap_CAM_Flip(nZ+1), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating Ap_CAM_Flip')
+ ALLOCATE(Bp_CAM_Flip(nZ+1), STAT=IERR)
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating Bp_CAM_Flip')
+
+ Ap_CAM_Flip = 0.0e+0_fp
+ Bp_CAM_Flip = 0.0e+0_fp
+ DO I = 1, nZ+1
+ Ap_CAM_Flip(I) = hyai(nZ+2-I) * ps0 * 0.01e+0_r8
+ Bp_CAM_Flip(I) = hybi(nZ+2-I)
+ ENDDO
+
+ !-----------------------------------------------------------------
+ ! Pass external Ap and Bp to GEOS-Chem's Pressure_Mod
+ !-----------------------------------------------------------------
+ CALL Accept_External_ApBp( State_Grid = maxGrid, & ! Grid State
+ ApIn = Ap_CAM_Flip, & ! "A" term for hybrid grid
+ BpIn = Bp_CAM_Flip, & ! "B" term for hybrid grid
+ RC = RC ) ! Success or failure
+
+ ! Print vertical coordinates
+ IF ( MasterProc ) THEN
+ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
+ WRITE( 6, '(a,/)' ) 'V E R T I C A L G R I D S E T U P'
+ WRITE( 6, '( ''Ap '', /, 6(f11.6,1x) )' ) Ap_CAM_Flip(1:maxGrid%nZ+1)
+ WRITE( 6, '(a)' )
+ WRITE( 6, '( ''Bp '', /, 6(f11.6,1x) )' ) Bp_CAM_Flip(1:maxGrid%nZ+1)
+ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
+ ENDIF
+
+ ! Trapping errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Accept_External_ApBp"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ IF ( ALLOCATED( Ap_CAM_Flip ) ) DEALLOCATE( Ap_CAM_Flip )
+ IF ( ALLOCATED( Bp_CAM_Flip ) ) DEALLOCATE( Bp_CAM_Flip )
+
+ ! Once the initial met fields have been read in, we need to find
+ ! the maximum PBL level for the non-local mixing algorithm.
+ CALL Max_PblHt_For_Vdiff( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(BEGCHUNK), &
+ State_Met = State_Met(BEGCHUNK), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Max_PblHt_for_Vdiff"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ IF ( Input_Opt%Its_A_FullChem_Sim .OR. &
+ Input_Opt%Its_An_Aerosol_Sim ) THEN
+ ! This also initializes Fast-JX
+ CALL Init_Chemistry( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(BEGCHUNK), &
+ State_Diag = State_Diag(BEGCHUNK), &
+ State_Grid = State_Grid(BEGCHUNK), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Init_Chemistry"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+ ENDIF
+
+ IF ( Input_Opt%LChem .AND. &
+ Input_Opt%LUCX ) THEN
+ CALL Init_UCX( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(BEGCHUNK), &
+ State_Diag = State_Diag(BEGCHUNK), &
+ State_Grid = maxGrid )
+ ENDIF
+
+ IF ( Input_Opt%LSCHEM ) THEN
+ CALL Init_Strat_Chem( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(BEGCHUNK), &
+ State_Met = State_Met(BEGCHUNK), &
+ State_Grid = maxGrid, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Init_Strat_Chem"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+ ENDIF
+
+ IF ( Input_Opt%LSSalt ) THEN
+ CALL INIT_ISORROPIAII( State_Grid = maxGrid )
+ ENDIF
+
+ ! Get some indices
+ iH2O = Ind_('H2O')
+ iO3 = Ind_('O3')
+ iCO2 = Ind_('CO2')
+ iSO4 = Ind_('SO4')
+ ! The following indices are needed to compute invariants
+ iO = Ind_('O')
+ iH = Ind_('H')
+ iO2 = Ind_('O2')
+
+ ! This is used to compute overhead ozone column
+ SpcInfo => State_Chm(BEGCHUNK)%SpcData(iO3)%Info
+ MWO3 = REAL(SpcInfo%MW_g,r8)
+ ! Free pointer
+ SpcInfo => NULL()
+
+ l_H2SO4 = get_spc_ndx('H2SO4')
+ l_SO4 = get_spc_ndx('SO4')
+
+ ! Get indices for physical fields in physics buffer
+ NDX_PBLH = pbuf_get_index('pblh' )
+ NDX_FSDS = pbuf_get_index('FSDS' )
+ NDX_CLDTOP = pbuf_get_index('CLDTOP' )
+ NDX_CLDFRC = pbuf_get_index('CLD' )
+ NDX_PRAIN = pbuf_get_index('PRAIN' )
+ NDX_NEVAPR = pbuf_get_index('NEVAPR' )
+ NDX_LSFLXPRC = pbuf_get_index('LS_FLXPRC')
+ NDX_LSFLXSNW = pbuf_get_index('LS_FLXSNW')
+ NDX_CMFDQR = pbuf_get_index('RPRDTOT' )
+
+ ! Get cloud water indices
+ CALL cnst_get_ind( 'CLDLIQ', ixCldLiq)
+ CALL cnst_get_ind( 'CLDICE', ixCldIce)
+ CALL cnst_get_ind( 'NUMLIQ', ixNDrop, abort=.False. )
+
+ CALL init_mean_mass()
+ CALL setinv_inti()
+
+ !-----------------------------------------------------------------------
+ ! ... initialize tracer modules
+ !-----------------------------------------------------------------------
+ CALL tracer_cnst_init()
+ CALL tracer_srcs_init()
+
+ IF ( ghg_chem ) THEN
+ CALL ghg_chem_init(phys_state, bndtvg, h2orates)
+ ENDIF
+
+ ! Initialize diagnostics interface
+ CALL CESMGC_Diag_Init( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(BEGCHUNK), &
+ State_Met = State_Met(BEGCHUNK) )
+
+ ! Initialize emissions interface
+ CALL CESMGC_Emissions_Init( lght_no_prd_factor = lght_no_prd_factor )
+
+ hco_pbuf2d => pbuf2d
+
+ ! Cleanup
+ Call Cleanup_State_Grid( maxGrid, RC )
+
+ end subroutine chem_init
+
+!===============================================================================
+
+ subroutine chem_timestep_init(phys_state, pbuf2d)
+
+ use physics_buffer, only : physics_buffer_desc
+ use mo_flbc, only : flbc_chk
+ use mo_ghg_chem, only : ghg_chem_timestep_init
+
+ TYPE(physics_state), INTENT(IN):: phys_state(begchunk:endchunk)
+ TYPE(physics_buffer_desc), POINTER :: pbuf2d(:,:)
+
+ ! Not sure what we would realistically do here rather than in tend
+
+ !-----------------------------------------------------------------------
+ ! Set fixed lower boundary timing factors
+ !-----------------------------------------------------------------------
+ CALL flbc_chk
+
+ IF ( ghg_chem ) THEN
+ CALL ghg_chem_timestep_init(phys_state)
+ ENDIF
+
+ end subroutine chem_timestep_init
+
+!===============================================================================
+
+ subroutine GC_Update_Timesteps(DT)
+
+ use Time_Mod, only : Set_Timesteps
+
+ REAL(r8), INTENT(IN) :: DT
+ INTEGER :: DT_MIN
+ INTEGER, SAVE :: DT_MIN_LAST = -1
+
+ DT_MIN = NINT(DT)
+
+ Input_Opt%TS_CHEM = DT_MIN
+ Input_Opt%TS_EMIS = DT_MIN
+ Input_Opt%TS_CONV = DT_MIN
+ Input_Opt%TS_DYN = DT_MIN
+ Input_Opt%TS_RAD = DT_MIN
+
+ ! Only bother updating the module information if there's been a change
+ IF (DT_MIN .NE. DT_MIN_LAST) THEN
+ CALL Set_Timesteps( Input_Opt = Input_Opt, &
+ CHEMISTRY = DT_MIN, &
+ EMISSION = DT_MIN, &
+ DYNAMICS = DT_MIN, &
+ UNIT_CONV = DT_MIN, &
+ CONVECTION = DT_MIN, &
+ DIAGNOS = DT_MIN, &
+ RADIATION = DT_MIN )
+ DT_MIN_LAST = DT_MIN
+ ENDIF
+
+ end subroutine
+
+!===============================================================================
+
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: gc_readnl
+!
+! !DESCRIPTION: Reads the namelist from cam/src/control/runtime_opts.
+!\\
+!\\
+! !INTERFACE:
+!
+ subroutine gc_readnl(nlfile)
+!
+! !USES:
+!
+ use namelist_utils, only: find_group_name
+ use units, only: getunit, freeunit
+ use mpishorthand
+!
+! !INPUT PARAMETERS:
+!
+ character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
+!
+! !REVISION HISTORY:
+! 21 Jan 2021 - T.M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+! !LOCAL VARIABLES:
+!
+ integer :: unitn, ierr
+ character(len=*), parameter :: subname = 'gc_readnl'
+
+ namelist /gc_nl/ gc_cheminputs
+
+ !-----------------------------------------------------------------------------
+
+ ! Read namelist
+ IF ( MasterProc ) THEN
+ unitn = getunit()
+ OPEN( unitn, FILE=TRIM(nlfile), STATUS='old' )
+ CALL find_group_name(unitn, 'gc_nl', STATUS=ierr)
+ IF ( ierr == 0 ) THEN
+ READ(unitn, gc_nl, IOSTAT=ierr)
+ IF ( ierr /= 0 ) THEN
+ CALL ENDRUN(subname // ':: ERROR reading namelist')
+ ENDIF
+ ENDIF
+ CLOSE(unitn)
+ CALL freeunit(unitn)
+ ENDIF
+
+#ifdef SPMD
+ ! Broadcast namelist variables
+ CALL MPIBCAST(gc_cheminputs, LEN(gc_cheminputs), MPICHAR, 0, MPICOM)
+#endif
+
+ end subroutine
+!EOC
+
+!===============================================================================
+
+ subroutine chem_timestep_tend( state, ptend, cam_in, cam_out, dT, pbuf, fh2o )
+
+ use physics_buffer, only : physics_buffer_desc, pbuf_get_field, pbuf_old_tim_idx
+ use physics_buffer, only : pbuf_get_chunk, pbuf_get_index
+ use perf_mod, only : t_startf, t_stopf
+ use cam_history, only : outfld, hist_fld_active
+ use camsrfexch, only : cam_in_t, cam_out_t
+
+#ifdef SPMD
+ use mpishorthand
+#endif
+
+ use phys_grid, only : get_ncols_p, get_rlat_all_p, get_rlon_all_p
+
+ use mo_chem_utls, only : get_spc_ndx
+ use chem_mods, only : drySpc_ndx, map2GC_dryDep
+ use chem_mods, only : nfs, indexm, gas_pcnst
+ use mo_mean_mass, only : set_mean_mass
+ use mo_setinv, only : setinv
+ use mo_flbc, only : flbc_set
+ use mo_ghg_chem, only : ghg_chem_set_flbc
+ use mo_neu_wetdep, only : neu_wetdep_tend
+ use gas_wetdep_opts, only : gas_wetdep_method
+#if defined( MODAL_AERO )
+ use modal_aero_data, only : ntot_amode, nspec_amode
+ use modal_aero_data, only : nspec_max, nsoa
+ use modal_aero_data, only : lmassptr_amode, numptr_amode
+ use modal_aero_data, only : lptr_so4_a_amode
+ use modal_aero_data, only : lptr2_soa_a_amode, lptr2_soa_g_amode
+#endif
+
+ use Olson_Landmap_Mod, only : Compute_Olson_Landmap
+ use Modis_LAI_Mod, only : Compute_XLAI
+ use CMN_Size_Mod, only : NSURFTYPE
+ use Drydep_Mod, only : Do_Drydep
+ use Drydep_Mod, only : DEPNAME, NDVZIND
+ use Drydep_Mod, only : Update_DryDepFreq
+
+ use Calc_Met_Mod, only : Set_Dry_Surface_Pressure
+ use Calc_Met_Mod, only : AirQnt
+ use GC_Grid_Mod, only : SetGridFromCtr
+ use Pressure_Mod, only : Set_Floating_Pressures
+ use Pressure_Mod, only : Accept_External_Pedge
+ use Time_Mod, only : Accept_External_Date_Time
+ use Toms_Mod, only : Compute_Overhead_O3
+ use Chemistry_Mod, only : Do_Chemistry
+ use Wetscav_Mod, only : Setup_Wetscav
+ use CMN_Size_Mod, only : PTop
+ use PBL_Mix_Mod, only : Compute_PBL_Height
+ use UCX_Mod, only : Set_H2O_Trac
+ use CMN_FJX_MOD, only : ZPJ
+ use FAST_JX_MOD, only : RXN_NO2, RXN_O3_1, RXN_O3_2a
+ use State_Diag_Mod, only : get_TagInfo
+ use Unitconv_Mod, only : Convert_Spc_Units
+ use State_Chm_Mod, only : Ind_
+
+ use Strat_Chem_Mod, only : Strat_TrID_GC, GC_Bry_TrID, NSCHEM
+ use Strat_Chem_Mod, only : BrPtrDay, BrPtrNight, PLVEC, STRAT_OH
+
+ use CESMGC_Emissions_Mod,only : CESMGC_Emissions_Calc
+ use CESMGC_Diag_Mod, only : CESMGC_Diag_Calc
+ use CESMGC_Diag_Mod, only : wetdep_name, wtrate_name
+
+ use Tropopause, only : Tropopause_findChemTrop, Tropopause_Find
+ use HCO_Interface_GC_Mod ! Utility routines for GC-HEMCO interface
+
+ ! For calculating SZA
+ use Orbit, only : zenith
+ use Time_Manager, only : Get_Curr_Calday, Get_Curr_Date
+
+ ! Calculating relative humidity
+ use WV_Saturation, only : QSat
+
+ ! Grid area
+ use Phys_Grid, only : get_area_all_p, get_lat_all_p, get_lon_all_p
+
+ use short_lived_species, only : get_short_lived_species
+ use short_lived_species, only : set_short_lived_species
+
+#if defined( MODAL_AERO )
+ ! Aqueous chemistry and aerosol growth
+ use aero_model, only : aero_model_gasaerexch
+#endif
+
+ use rad_constituents, only : rad_cnst_get_info
+
+ ! GEOS-Chem version of physical constants
+ use PhysConstants, only : PI, PI_180, g0, AVO, Re, g0_100
+ ! CAM version of physical constants
+ use PhysConst, only : MWDry, Gravit
+
+ REAL(r8), INTENT(IN) :: dT ! Time step
+ TYPE(physics_state), INTENT(IN) :: state ! Physics State variables
+ TYPE(physics_ptend), INTENT(OUT) :: ptend ! indivdual parameterization tendencies
+ TYPE(cam_in_t), INTENT(INOUT) :: cam_in
+ TYPE(cam_out_t), INTENT(IN) :: cam_out
+ TYPE(physics_buffer_desc), POINTER :: pbuf(:)
+ REAL(r8), OPTIONAL, INTENT(OUT) :: fh2o(PCOLS) ! h2o flux to balance source from chemistry
+
+ ! Initial MMR for all species
+ REAL(r8) :: MMR_Beg(PCOLS,PVER,MAXVAL(map2GC(:)))
+ REAL(r8) :: MMR_End(PCOLS,PVER,MAXVAL(map2GC(:)))
+
+ ! Logical to apply tendencies to mixing ratios
+ LOGICAL :: lq(pcnst)
+
+ ! Indexing
+ INTEGER :: K, N, M, P, SM, ND
+ INTEGER :: I, J, L, nX, nY, nZ
+
+ INTEGER :: LCHNK, NCOL
+
+ REAL(r8), DIMENSION(state%NCOL) :: &
+ CSZA, & ! Cosine of solar zenith angle
+ CSZAmid, & ! Cosine of solar zenith angle at the mid timestep
+ Rlats, Rlons ! Chunk latitudes and longitudes (radians)
+
+ REAL(fp) :: O3col(state%NCOL) ! Overhead O3 column (DU)
+
+ REAL(r8), POINTER :: PblH(:) ! PBL height on each chunk [m]
+ REAL(r8), POINTER :: cldTop(:) ! Cloud top height [?]
+ REAL(r8), POINTER :: cldFrc(:,:) ! Cloud fraction [-]
+ REAL(r8), POINTER :: Fsds(:) ! Downward shortwave flux at surface [W/m2]
+ REAL(r8), POINTER :: PRain(:,:) ! Total stratiform precip. prod. (rain + snow) [kg/kg/s]
+ REAL(r8), POINTER :: NEvapr(:,:) ! Evaporation of total precipitation (rain + snow) [kg/kg/s]
+ REAL(r8), POINTER :: LsFlxPrc(:,:) ! Large-scale downward precip. flux at interface (rain + snow) [kg/m2/s]
+ REAL(r8), POINTER :: LsFlxSnw(:,:) ! Large-scale downward precip. flux at interface (snow only) [kg/m2/s]
+ REAL(r8), POINTER :: cmfdqr(:,:) ! Total convective precip. prod. (rain + snow) [kg/kg/s]
+
+ REAL(r8) :: tmpMass
+ REAL(r8) :: cldW (state%NCOL,PVER) ! Cloud water (kg/kg)
+ REAL(r8) :: nCldWtr(state%NCOL,PVER) ! Droplet number concentration (#/kg)
+
+ REAL(r8) :: relHum (state%NCOL,PVER) ! Relative humidity [0-1]
+ REAL(r8) :: satV (state%NCOL,PVER) ! Work arrays
+ REAL(r8) :: satQ (state%NCOL,PVER) ! Work arrays
+ REAL(r8) :: qH2O (state%NCOL,PVER) ! Specific humidity [kg/kg]
+ REAL(r8) :: h2ovmr (state%NCOL,PVER) ! H2O volume mixing ratio
+ REAL(r8) :: mBar (state%NCOL,PVER) ! Mean wet atmospheric mass [amu]
+ REAL(r8) :: invariants(state%NCOL,PVER,nfs)
+ REAL(r8) :: reaction_rates(1,1,1) ! Reaction rates (unused)
+
+ ! For aerosol formation
+ REAL(r8) :: del_h2so4_gasprod(state%NCOL,PVER)
+
+ REAL(r8) :: vmr0(state%NCOL,PVER,gas_pcnst)
+ REAL(r8) :: vmr1(state%NCOL,PVER,gas_pcnst)
+ REAL(r8) :: vmr2(state%NCOL,PVER,gas_pcnst)
+
+ REAL(r8) :: wetdepflx(pcols,pcnst) ! Wet deposition fluxes (kg/m2/s)
+
+#if defined( MODAL_AERO )
+ REAL(r8) :: binRatio(nspec_max,ntot_amode,state%NCOL,PVER)
+
+ REAL(r8) :: SO4_gasRatio(state%NCOL,PVER)
+
+ ! For SOA mapping
+ REAL(r8) :: totMass(state%NCOL,PVER)
+ REAL(r8) :: bulkMass(state%NCOL,PVER)
+ REAL(r8) :: tmpMW_g
+ CHARACTER(LEN=64) :: speciesName_1, speciesName_2, speciesName_3, speciesName_4
+ INTEGER :: speciesId_1, speciesId_2, speciesId_3, speciesId_4
+ INTEGER :: iMap, nMapping, iBin, binSOA_1, binSOA_2
+ INTEGER :: K1, K2, K3, K4
+ LOGICAL :: isSOA_aerosol
+
+#endif
+
+ ! For emissions
+ REAL(r8) :: eflx(pcols,pver,pcnst) ! 3-D emissions in kg/m2/s
+
+ ! For GEOS-Chem diagnostics
+ REAL(r8) :: mmr_tend(state%NCOL,PVER,gas_pcnst)
+ REAL(r8) :: wk_out(state%NCOL)
+ LOGICAL :: Found
+ CHARACTER(LEN=255) :: tagName
+
+ REAL(r8), PARAMETER :: zlnd = 0.01_r8 ! Roughness length for soil [m]
+ REAL(r8), PARAMETER :: zslnd = 0.0024_r8 ! Roughness length for snow [m]
+ REAL(r8), PARAMETER :: zsice = 0.0400_r8 ! Roughness length for sea ice [m]
+ REAL(r8), PARAMETER :: zocn = 0.0001_r8 ! Roughness length for oean [m]
+
+ REAL(f4) :: lonMidArr(1,PCOLS), latMidArr(1,PCOLS)
+ INTEGER :: iMaxLoc(1)
+
+ REAL(r8) :: Col_Area(state%NCOL)
+
+ ! Intermediate arrays
+ INTEGER :: Trop_Lev (PCOLS)
+ REAL(r8) :: Trop_P (PCOLS)
+ REAL(r8) :: Trop_T (PCOLS)
+ REAL(r8) :: Trop_Ht (PCOLS)
+ REAL(r8) :: SnowDepth(PCOLS)
+ REAL(r8) :: cld2D (PCOLS)
+ REAL(r8) :: Z0 (PCOLS)
+ REAL(r8) :: Sd_Ice, Sd_Lnd, Sd_Avg, Frc_Ice
+
+ ! Estimating cloud optical depth
+ REAL(r8) :: TauCli(PCOLS,PVER)
+ REAL(r8) :: TauClw(PCOLS,PVER)
+ REAL(r8), PARAMETER :: re_m = 1.0e-05_r8 ! Cloud drop radius in m
+ REAL(r8), PARAMETER :: cldMin = 1.0e-02_r8 ! Minimum cloud cover
+ REAL(r8), PARAMETER :: cnst = 1.5e+00_r8 / (re_m * 1.0e+03_r8 * g0)
+
+ ! Calculating SZA
+ REAL(r8) :: Calday
+
+ CHARACTER(LEN=255) :: SpcName
+ CHARACTER(LEN=255) :: Prefix, FieldName
+ LOGICAL :: FND
+ INTEGER :: SpcId
+ TYPE(Species), POINTER :: SpcInfo
+ TYPE(SfcMrObj), POINTER :: iSfcMrObj
+
+ CHARACTER(LEN=63) :: OrigUnit
+
+ REAL(r8) :: SlsData(PCOLS, PVER, nSls)
+
+ INTEGER :: currYr, currMo, currDy, currTOD
+ INTEGER :: currYMD, currHMS, currHr, currMn, currSc
+ REAL(f4) :: currUTC
+
+ TYPE(physics_buffer_desc), POINTER :: pbuf_chnk(:) ! slice of pbuf in chnk
+ REAL(r8), POINTER :: pbuf_ik(:,:) ! ptr to pbuf data (/pcols,pver/)
+ REAL(r8), POINTER :: pbuf_i(:) ! ptr to pbuf data (/pcols/) horizontal only (horiz_only)
+ INTEGER :: tmpIdx ! pbuf field id
+
+ INTEGER :: TIM_NDX
+ INTEGER :: IERR
+
+ INTEGER, SAVE :: iStep = 0
+ LOGICAL :: rootChunk
+ LOGICAL :: lastChunk
+ INTEGER :: RC
+
+
+ ! Initialize pointers
+ SpcInfo => NULL()
+ PblH => NULL()
+ cldTop => NULL()
+ cldFrc => NULL()
+ Fsds => NULL()
+ PRain => NULL()
+ NEvapr => NULL()
+ LsFlxPrc => NULL()
+ LsFlxSnw => NULL()
+ cmfdqr => NULL()
+ pbuf_chnk=> NULL()
+ pbuf_ik => NULL()
+ pbuf_i => NULL()
+
+ ! LCHNK: which chunk we have on this process
+ LCHNK = state%LCHNK
+ ! NCOL: number of atmospheric columns on this chunk
+ NCOL = state%NCOL
+
+ ! Root Chunk
+ rootChunk = ( MasterProc .and. (LCHNK==BEGCHUNK) )
+ ! Last Chunk
+ lastChunk = ( MasterProc .and. (LCHNK==ENDCHUNK) )
+
+ ! Count the number of steps which have passed
+ IF ( LCHNK .EQ. BEGCHUNK ) iStep = iStep + 1
+
+ ! Need to update the timesteps throughout the code
+ CALL GC_Update_Timesteps(dT)
+
+ ! For safety's sake
+ PTop = state%pint(1,1)*0.01e+0_fp
+
+ ! Need to be super careful that the module arrays are updated and correctly
+ ! set. NOTE: First thing - you'll need to flip all the data vertically
+
+ nX = 1
+ nY = NCOL
+ nZ = PVER
+
+ ! Update the grid lat/lons since they are module variables
+ ! Assume (!) that area hasn't changed for now, as GEOS-Chem will
+ ! retrieve this from State_Met which is chunked
+ !CALL get_rlat_all_p( LCHNK, NCOL, Rlats )
+ !CALL get_rlon_all_p( LCHNK, NCOL, Rlons )
+ Rlats(1:nY) = state%Lat(1:nY)
+ Rlons(1:nY) = state%Lon(1:nY)
+
+ lonMidArr = 0.0e+0_f4
+ latMidArr = 0.0e+0_f4
+ DO I = 1, nX
+ DO J = 1, nY
+ lonMidArr(I,J) = REAL(Rlons(J), f4)
+ latMidArr(I,J) = REAL(Rlats(J), f4)
+ ENDDO
+ ENDDO
+
+ ! Update the grid
+ CALL SetGridFromCtr( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(LCHNK), &
+ lonCtr = lonMidArr, &
+ latCtr = latMidArr, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered within call to "SetGridFromCtr"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Set area
+ CALL Get_Area_All_p( LCHNK, nY, Col_Area )
+
+ ! Field : AREA_M2
+ ! Description: Grid box surface area
+ ! Unit : -
+ ! Dimensions : nX, nY
+ ! Note : Set default value (in case of chunks with fewer columns)
+ State_Grid(LCHNK)%Area_M2 = -1.0e+10_fp
+ State_Met(LCHNK)%Area_M2 = -1.0e+10_fp
+ State_Grid(LCHNK)%Area_M2(1,:nY) = REAL(Col_Area(:nY) * Re**2,fp)
+ State_Met(LCHNK)%Area_M2(1,:nY) = State_Grid(LCHNK)%Area_M2(1,:nY)
+
+ ! 2. Copy tracers into State_Chm
+ ! Data was received in kg/kg dry
+ State_Chm(LCHNK)%Spc_Units = 'kg/kg dry'
+ ! Initialize ALL State_Chm species data to zero, not just tracers
+ State_Chm(LCHNK)%Species = 0.0e+0_fp
+
+ lq(:) = .False.
+
+ ! Map and flip gaseous species
+ MMR_Beg = 0.0e+0_r8
+ MMR_End = 0.0e+0_r8
+ DO N = 1, pcnst
+ IF ( mapCnst(N) > 0 ) lq(N) = .True.
+ M = map2GC(N)
+ IF ( M <= 0 ) CYCLE
+ MMR_Beg(:nY,:nZ,M) = state%q(:nY,nZ:1:-1,N)
+ State_Chm(LCHNK)%Species(1,:nY,:nZ,M) = REAL(MMR_Beg(:nY,:nZ,M),fp)
+ ENDDO
+
+ ! We need to let CAM know that 'H2O' and 'Q' are identical
+ MMR_Beg(:nY,:nZ,iH2O) = state%q(:nY,nZ:1:-1,cQ)
+ State_Chm(LCHNK)%Species(1,:nY,:nZ,iH2O) = REAL(MMR_Beg(:nY,:nZ,iH2O),fp)
+
+ ! Retrieve previous value of species data
+ SlsData(:,:,:) = 0.0e+0_r8
+ CALL get_short_lived_species( SlsData, LCHNK, nY, pbuf )
+
+ IF ( iStep == 1 ) THEN
+ ! Retrieve list of species with surface boundary conditions (copied from
+ ! sfcvmr_mod.F90)
+
+ ! Head of linked list
+ SfcMrHead => NULL()
+ iSfcMrObj => NULL()
+ SpcInfo => NULL()
+
+ ! Loop over all species
+ DO N = 1, State_Chm(BEGCHUNK)%nSpecies
+ ! Species information
+ SpcInfo => State_Chm(BEGCHUNK)%SpcData(N)%Info
+
+ ! Check if field exists (note: this needs to be less than 16
+ ! characters long)
+ FieldName = 'HCO_'//TRIM(Prefix_SfcVMR)//TRIM(to_upper(SpcInfo%Name))
+ M = pbuf_get_index(FieldName, RC)
+ IF ( M > 0 ) THEN
+
+ ! Must have positive, non-zero MW
+ IF ( SpcInfo%MW_g <= 0.0_fp ) THEN
+ ErrMsg = 'Cannot use surface boundary condition for species ' &
+ // TRIM(SpcInfo%Name) // ' due to invalid MW!'
+ CALL ENDRUN(TRIM(ErrMsg))
+ ENDIF
+
+ ! Create new object, add to list
+ ALLOCATE( iSfcMrObj, STAT=RC )
+ CALL GC_CheckVar( 'sfcvmr_mod.F90:iSfcMrObj', 0, RC )
+ IF ( RC /= GC_SUCCESS ) CALL ENDRUN('Failure while allocating iSfcMrObj')
+
+ iSfcMrObj%SpcID = N
+ iSfcMrObj%FldName = FieldName
+ iSfcMrObj%Next => SfcMrHead
+ SfcMrHead => iSfcMrObj
+ IF ( rootChunk ) THEN
+ WRITE( 6, 110 ) TRIM( SpcInfo%Name ), TRIM( iSfcMrObj%FldName )
+ 110 FORMAT( '--> ', a, ' will use prescribed surface boundary ', &
+ 'conditions from field ', a )
+ ENDIF
+
+ ! Free the pointer
+ iSfcMrObj => NULL()
+ ENDIF
+ ENDDO
+ ENDIF
+
+ !-----------------------------------------------------------------------
+ ! ... Set atmosphere mean mass
+ !-----------------------------------------------------------------------
+ ! This is not meant for simulations of the ionosphere. mBar will then just
+ ! be set to mwdry and does not require to pass anything besides NCOL. We
+ ! can then just past a dummy array as the second argument
+ !CALL Set_mean_mass( NCOL, mmr, mBar )
+ CALL Set_mean_mass( NCOL, vmr0, mBar )
+
+ ! Map and flip gaseous short-lived species
+ DO N = 1, nSls
+ M = map2GC_Sls(N)
+ IF ( M <= 0 ) CYCLE
+ State_Chm(LCHNK)%Species(1,:nY,:nZ,M) = REAL(SlsData(:nY,nZ:1:-1,N),fp)
+ ENDDO
+
+#if defined( MODAL_AERO )
+ ! First reset State_Chm%Species to zero out MAM-inherited GEOS-Chem aerosols
+ DO M = 1, ntot_amode
+ DO SM = 1, nspec_amode(M)
+ P = map2MAM4(SM,M) ! Constituent index for GEOS-Chem
+ IF ( P > 0 ) K = map2GC(P) ! Index in State_Chm
+ IF ( K > 0 ) State_Chm(LCHNK)%Species(1,:nY,:nZ,K) = 0.0e+00_fp
+ ENDDO
+ ENDDO
+
+ ! Map and vertically flip aerosols
+ DO M = 1, ntot_amode
+ DO SM = 1, nspec_amode(M)
+ P = map2MAM4(SM,M) ! Constituent index for GEOS-Chem
+ IF ( P <= 0 ) CYCLE
+ N = lmassptr_amode(SM,M)
+ K = map2GC(P) ! Index in State_Chm
+ ! /!\ MAM aerosols (with cnst index N) is mapped onto GEOS-Chem
+ ! species (with cnst index P, which corresponds to index K in
+ ! State_Chm)
+
+ ! Multiple MAM4 bins are mapped to same GEOS-Chem species
+ State_Chm(LCHNK)%Species(1,:nY,:nZ,K) = State_Chm(LCHNK)%Species(1,:nY,:nZ,K) &
+ + REAL(state%q(:nY,nZ:1:-1,N),fp) * &
+ adv_mass(mapCnst(P)) / &
+ adv_mass(mapCnst(N))
+ ENDDO
+ ENDDO
+
+ ! Compute ratios of bin to bulk mass
+ binRatio = 0.0e+00_r8
+ DO M = 1, ntot_amode
+ DO SM = 1, nspec_amode(M)
+ P = map2MAM4(SM,M)
+ IF ( P <= 0 ) CYCLE
+ K = map2GC(P) ! Index in State_Chm
+ N = lmassptr_amode(SM,M)
+ IF ( N < 0 ) CYCLE
+ DO J = 1, nY
+ DO L = 1, nZ
+ IF ( State_Chm(LCHNK)%Species(1,J,nZ+1-L,K) > 0.0e+00_r8 ) THEN
+ binRatio(SM,M,J,L) = state%q(J,L,N) &
+ * adv_mass(mapCnst(P)) / adv_mass(mapCnst(N)) &
+ / REAL(State_Chm(LCHNK)%Species(1,J,nZ+1-L,K), r8)
+ ENDIF
+ ENDDO
+ ENDDO
+ ! Overwrite MMR_Beg with value from MAM
+ MMR_Beg(:nY,:nZ,K) = State_Chm(LCHNK)%Species(1,:nY,:nZ,K)
+ ENDDO
+ ENDDO
+
+ ! Deal with secondary organic aerosols (SOAs). This mapping is using the
+ ! complex SOA option in GEOS-Chem.
+ ! MAM uses five volatility bins spanning saturation concentrations from 0.01
+ ! to 100 ug/m3 (logarithmically). The complex SOA option has four volatility
+ ! bins that 0.1 to 100 ug/m3. We lump the lowest two bins in CESM2 to the
+ ! lowest bin in GEOS-Chem.
+ !
+ ! The mapping goes as follows:
+ ! TSOA0 + ASOAN + SOAIE + SOAGX <- soa1_a* + soa2_a*
+ ! TSOA1 + ASOA1 <- soa3_a*
+ ! TSOA2 + ASOA2 <- soa4_a*
+ ! TSOA3 + ASOA3 <- soa5_a*
+ ! TSOG0 <- SOAG0 + SOAG1
+ ! TSOG1 + ASOG1 <- SOAG2
+ ! TSOG2 + ASOG2 <- SOAG3
+ ! TSOG3 + ASOG3 <- SOAG4
+
+ IF ( iStep > 1 ) THEN
+ ! Do not perform this mapping on initialization as we first want to
+ ! overwrite soa*_a* with the GEOS-Chem SOAs.
+ nMapping = 8
+ DO iMap = 1, nMapping
+ speciesName_1 = ''
+ speciesName_2 = ''
+ speciesName_3 = ''
+ speciesName_4 = ''
+ IF ( iMap == 1 ) THEN
+ binSOA_1 = 1
+ binSOA_2 = 2
+ speciesName_1 = 'TSOA0'
+ speciesName_2 = 'ASOAN'
+ speciesName_3 = 'SOAIE'
+ speciesName_4 = 'SOAGX'
+ ELSEIF ( iMap == 2 ) THEN
+ binSOA_1 = 3
+ binSOA_2 = 3
+ speciesName_1 = 'TSOA1'
+ speciesName_2 = 'ASOA1'
+ ELSEIF ( iMap == 3 ) THEN
+ binSOA_1 = 4
+ binSOA_2 = 4
+ speciesName_1 = 'TSOA2'
+ speciesName_2 = 'ASOA2'
+ ELSEIF ( iMap == 4 ) THEN
+ binSOA_1 = 5
+ binSOA_2 = 5
+ speciesName_1 = 'TSOA3'
+ speciesName_2 = 'ASOA3'
+ ELSEIF ( iMap == 5 ) THEN
+ binSOA_1 = 1
+ binSOA_2 = 2
+ speciesName_1 = 'TSOG0'
+ speciesName_2 = 'TSOG0'
+ ELSEIF ( iMap == 6 ) THEN
+ binSOA_1 = 3
+ binSOA_2 = 3
+ speciesName_1 = 'TSOG1'
+ speciesName_2 = 'ASOG1'
+ ELSEIF ( iMap == 7 ) THEN
+ binSOA_1 = 4
+ binSOA_2 = 4
+ speciesName_1 = 'TSOG2'
+ speciesName_2 = 'ASOG2'
+ ELSEIF ( iMap == 8 ) THEN
+ binSOA_1 = 5
+ binSOA_2 = 5
+ speciesName_1 = 'TSOG3'
+ speciesName_2 = 'ASOG3'
+ ELSE
+ CALL ENDRUN('Unknown SOA mapping!')
+ ENDIF
+ isSOA_aerosol = .False.
+ IF ( iMap <= 4 ) isSOA_aerosol = .True.
+
+ ! Compute total mass from GEOS-Chem species. This sets the ratio between
+ ! speciesId_1 and speciesId_2
+ totMass(:nY,:nZ) = 0.0e+00_r8
+
+ CALL cnst_get_ind( speciesName_1, speciesId_1, abort=.True. )
+ CALL cnst_get_ind( speciesName_2, speciesId_2, abort=.False. )
+ CALL cnst_get_ind( speciesName_3, speciesId_3, abort=.False. )
+ CALL cnst_get_ind( speciesName_4, speciesId_4, abort=.False. )
+ IF ( speciesId_1 > 0 ) totMass(:nY,:nZ) = totMass(:nY,:nZ) + state%q(:nY,:nZ,speciesId_1)
+ IF ( speciesId_2 > 0 ) totMass(:nY,:nZ) = totMass(:nY,:nZ) + state%q(:nY,:nZ,speciesId_2)
+ IF ( speciesId_3 > 0 ) totMass(:nY,:nZ) = totMass(:nY,:nZ) + state%q(:nY,:nZ,speciesId_3)
+ IF ( speciesId_4 > 0 ) totMass(:nY,:nZ) = totMass(:nY,:nZ) + state%q(:nY,:nZ,speciesId_4)
+
+ ! Compute total bulk mass from MAM
+ bulkMass(:nY,:nZ) = 0.0e+00_r8
+ IF ( isSOA_aerosol ) THEN
+ DO iBin = binSOA_1, binSOA_2
+ DO M = 1, ntot_amode
+ N = lptr2_soa_a_amode(M,iBin)
+ IF ( N <= 0 ) CYCLE
+ tmpMW_g = adv_mass(mapCnst(N))
+ bulkMass(:nY,:nZ) = bulkMass(:nY,:nZ) + state%q(:nY,:nZ,N)
+ ENDDO
+ ENDDO
+ ELSE
+ DO iBin = binSOA_1, binSOA_2
+ N = lptr2_soa_g_amode(iBin)
+ IF ( N <= 0 ) CYCLE
+ tmpMW_g = adv_mass(mapCnst(N))
+ bulkMass(:nY,:nZ) = bulkMass(:nY,:nZ) + state%q(:nY,:nZ,N)
+ ENDDO
+ ENDIF
+
+ K1 = Ind_(speciesName_1)
+ K2 = Ind_(speciesName_2)
+ K3 = Ind_(speciesName_3)
+ K4 = Ind_(speciesName_4)
+ DO J = 1, nY
+ DO L = 1, nZ
+ IF ( totMass(J,L) > 0.0e+00_r8 ) THEN
+ IF ( K1 > 0 ) State_Chm(LCHNK)%Species(1,J,L,K1) = state%q(J,nZ+1-L,speciesId_1) / totMass(J,nZ+1-L) * bulkMass(J,nZ+1-L) * adv_mass(mapCnst(speciesId_1)) / tmpMW_g
+ IF ( K2 > 0 ) State_Chm(LCHNK)%Species(1,J,L,K2) = state%q(J,nZ+1-L,speciesId_2) / totMass(J,nZ+1-L) * bulkMass(J,nZ+1-L) * adv_mass(mapCnst(speciesId_2)) / tmpMW_g
+ IF ( K3 > 0 ) State_Chm(LCHNK)%Species(1,J,L,K3) = state%q(J,nZ+1-L,speciesId_3) / totMass(J,nZ+1-L) * bulkMass(J,nZ+1-L) * adv_mass(mapCnst(speciesId_3)) / tmpMW_g
+ IF ( K4 > 0 ) State_Chm(LCHNK)%Species(1,J,L,K4) = state%q(J,nZ+1-L,speciesId_4) / totMass(J,nZ+1-L) * bulkMass(J,nZ+1-L) * adv_mass(mapCnst(speciesId_4)) / tmpMW_g
+ ELSE
+ IF ( K1 == K2 ) THEN
+ State_Chm(LCHNK)%Species(1,J,L,K1) = bulkMass(J,nZ+1-L) * adv_mass(mapCnst(speciesId_1)) / tmpMW_g
+ ELSE
+ State_Chm(LCHNK)%Species(1,J,L,K1) = bulkMass(J,nZ+1-L) * adv_mass(mapCnst(speciesId_1)) / tmpMW_g / 2.0_r8
+ State_Chm(LCHNK)%Species(1,J,L,K2) = bulkMass(J,nZ+1-L) * adv_mass(mapCnst(speciesId_1)) / tmpMW_g / 2.0_r8
+ ENDIF
+ ENDIF
+ ENDDO
+ ENDDO
+ IF ( K1 > 0 ) MMR_Beg(:nY,:nZ,K1) = State_Chm(LCHNK)%Species(1,:nY,:nZ,K1)
+ IF ( K2 > 0 ) MMR_Beg(:nY,:nZ,K2) = State_Chm(LCHNK)%Species(1,:nY,:nZ,K2)
+ IF ( K3 > 0 ) MMR_Beg(:nY,:nZ,K4) = State_Chm(LCHNK)%Species(1,:nY,:nZ,K3)
+ IF ( K4 > 0 ) MMR_Beg(:nY,:nZ,K3) = State_Chm(LCHNK)%Species(1,:nY,:nZ,K4)
+ ENDDO
+ ENDIF
+
+ ! Add gas-phase H2SO4 to GEOS-Chem SO4 (which lumps SO4 aerosol and gaseous)
+ K = iSO4
+ N = cH2SO4
+ IF ( K > 0 .AND. N > 0 .AND. l_SO4 > 0 ) THEN
+ State_Chm(LCHNK)%Species(1,:nY,:nZ,K) = State_Chm(LCHNK)%Species(1,:nY,:nZ,K) &
+ + REAL(state%q(:nY,nZ:1:-1,N),fp) * &
+ adv_mass(l_SO4) / adv_mass(mapCnst(N))
+ ! SO4_gasRatio is in mol/mol
+ SO4_gasRatio(:nY,:nZ) = state%q(:nY,:nZ,N) &
+ * adv_mass(l_SO4) / adv_mass(mapCnst(N)) &
+ / State_Chm(LCHNK)%Species(1,:nY,nZ:1:-1,K)
+ MMR_Beg(:nY,:nZ,K) = State_Chm(LCHNK)%Species(1,:nY,:nZ,K)
+ ENDIF
+#endif
+
+ DO N = 1, gas_pcnst
+ ! See definition of map2chm
+ M = map2chm(N)
+ IF ( M > 0 ) THEN
+ vmr0(:nY,:nZ,N) = State_Chm(LCHNK)%Species(1,:nY,nZ:1:-1,M) * &
+ MWDry / adv_mass(N)
+ ! We'll substract concentrations after chemistry later
+ mmr_tend(:nY,:nZ,N) = REAL(State_Chm(LCHNK)%Species(1,:nY,nZ:1:-1,M),r8)
+ ELSEIF ( M < 0 ) THEN
+ vmr0(:nY,:nZ,N) = state%q(:nY,:nZ,-M) * &
+ MWDry / adv_mass(N)
+ mmr_tend(:nY,:nZ,N) = state%q(:nY,:nZ,-M)
+ ENDIF
+ ENDDO
+
+ ! If H2O tendencies are propagated to specific humidity, then make sure
+ ! that Q actually applies tendencies
+ IF ( Input_Opt%applyQtend ) lq(cQ) = .True.
+
+ IF ( ghg_chem ) lq(1) = .True.
+
+ ! Initialize tendency array
+ CALL Physics_ptend_init(ptend, state%psetcols, 'chemistry', lq=lq)
+
+ ! Reset chemical tendencies
+ ptend%q(:,:,:) = 0.0e+0_r8
+
+ ! Determine current date and time
+ CALL Get_Curr_Date( yr = currYr, &
+ mon = currMo, &
+ day = currDy, &
+ tod = currTOD )
+
+ currYMD = (currYr*1000) + (currMo*100) + (currDy)
+ ! Deal with subdaily
+ currUTC = REAL(currTOD,f4)/3600.0e+0_f4
+ currSc = 0
+ currMn = 0
+ currHr = 0
+ DO WHILE (currTOD >= 3600)
+ currTOD = currTOD - 3600
+ currHr = currHr + 1
+ ENDDO
+ DO WHILE (currTOD >= 60)
+ currTOD = currTOD - 60
+ currMn = currMn + 1
+ ENDDO
+ currSc = currTOD
+ currHMS = (currHr*1000) + (currMn*100) + (currSc)
+
+ ! Calculate COS(SZA)
+ Calday = Get_Curr_Calday( INT(dT/2) )
+ CALL Zenith( Calday, Rlats, Rlons, CSZAmid, nY )
+
+ Calday = Get_Curr_Calday( )
+ CALL Zenith( Calday, Rlats, Rlons, CSZA, nY )
+
+ ! Get all required data from physics buffer
+ TIM_NDX = pbuf_old_tim_idx()
+ CALL pbuf_get_field( pbuf, NDX_PBLH, PblH )
+ CALL pbuf_get_field( pbuf, NDX_FSDS, Fsds )
+ CALL pbuf_get_field( pbuf, NDX_CLDTOP, cldTop )
+ CALL pbuf_get_field( pbuf, NDX_CLDFRC, cldFrc, START=(/1,1,TIM_NDX/), KOUNT=(/NCOL,PVER,1/) )
+ CALL pbuf_get_field( pbuf, NDX_NEVAPR, NEvapr, START=(/1,1/), KOUNT=(/NCOL,PVER/))
+ CALL pbuf_get_field( pbuf, NDX_PRAIN, PRain, START=(/1,1/), KOUNT=(/NCOL,PVER/))
+ CALL pbuf_get_field( pbuf, NDX_LSFLXPRC, LsFlxPrc, START=(/1,1/), KOUNT=(/NCOL,PVERP/))
+ CALL pbuf_get_field( pbuf, NDX_LSFLXSNW, LsFlxSnw, START=(/1,1/), KOUNT=(/NCOL,PVERP/))
+ CALL pbuf_get_field( pbuf, NDX_CMFDQR, cmfdqr, START=(/1,1/), KOUNT=(/NCOL,PVER/))
+
+ ! Get VMR and MMR of H2O
+ h2ovmr = 0.0e0_fp
+ qH2O = 0.0e0_fp
+ ! Note MWDry = 28.966 g/mol
+ DO J = 1, nY
+ DO L = 1, nZ
+ qH2O(J,L) = REAL(state%q(J,L,cQ),r8)
+ ! Set GEOS-Chem's H2O mixing ratio to CAM's specific humidity 'q'
+ State_Chm(LCHNK)%Species(1,J,nZ+1-L,iH2O) = qH2O(J,L)
+ h2ovmr(J,L) = qH2O(J,L) * MWDry / 18.016e+0_fp
+ ENDDO
+ ENDDO
+
+ !-----------------------------------------------------------------------
+ ! ... Set the "invariants"
+ !-----------------------------------------------------------------------
+ CALL Setinv( invariants, state%t(:,:), h2ovmr, vmr0, &
+ state%pmid(:,:), nY, LCHNK, pbuf )
+
+ ! Calculate RH (range 0-1, note still level 1 = TOA)
+ relHum(:,:) = 0.0e+0_r8
+ CALL QSat(state%t(:nY,:), state%pmid(:nY,:), satV, satQ)
+ DO J = 1, nY
+ DO L = 1, nZ
+ relHum(J,L) = 0.622e+0_r8 * h2ovmr(J,L) / satQ(J,L)
+ relHum(J,L) = MAX( 0.0e+0_r8, MIN( 1.0e+0_r8, relHum(J,L) ) )
+ ENDDO
+ ENDDO
+
+ Z0 = 0.0e+0_r8
+ DO J = 1, nY
+ Z0(J) = cam_in%landFrac(J) * zlnd &
+ + cam_in%iceFrac(J) * zsice &
+ + cam_in%ocnFrac(J) * zocn
+ IF (( cam_in%snowhLand(J) > 0.01_r8 ) .OR. &
+ ( cam_in%snowhIce(J) > 0.01_r8 )) THEN
+ ! Land is covered in snow
+ Z0(J) = zslnd
+ ENDIF
+ ENDDO
+
+ ! Estimate cloud liquid water content and OD
+ TauCli = 0.0e+0_r8
+ TauClw = 0.0e+0_r8
+
+ cldW(:nY,:nZ) = state%q(:nY,:nZ,ixCldLiq) + state%q(:nY,:nZ,ixCldIce)
+ IF ( ixNDrop > 0 ) nCldWtr(:nY,:nZ) = state%q(:nY,:nZ,ixNDrop)
+
+ DO J = 1, nY
+ DO L = nZ, 1, -1
+ ! =================================================================
+ ! =========== Compute cloud optical depth based on ============
+ ! =========== Liao et al. JGR, 104, 23697, 1999 ============
+ ! =================================================================
+ !
+ ! Tau = 3/2 * LWC * dZ / ( \rho_w * r_e )
+ ! dZ = - dP / ( \rho_air * g )
+ ! since Pint is ascending, we can neglect the minus sign
+ !
+ ! Tau = 3/2 * LWC * dP / ( \rho_air * r_e * \rho_w * g )
+ ! LWC / \rho_air = Q
+ !
+ ! Tau = 3/2 * Q * dP / ( r_e * rho_w * g )
+ ! Tau(L) = 3/2 * Q(L) * (Pint(L+1) - Pint(L)) / (re * rho_w * g )
+ ! Tau(L) = Q(L) * (Pint(L+1) - Pint(L)) * Cnst
+ ! Then divide by cloud fraction to get the in-cloud optical depth
+
+ ! Unit check: |
+ ! Q : [kg H2O/kg air] |
+ ! Pint : [Pa]=[kg air/m/s^2] |
+ ! re : [m] | = 1.0e-5
+ ! rho_w: [kg H2O/m^3] | = 1.0e+3
+ ! g : [m/s^2] | = 9.81
+ IF ( cldFrc(J,L) > cldMin ) THEN
+ TauClw(J,L) = state%q(J,L,ixCldLiq) &
+ * (state%pint(J,L+1)-state%pint(J,L)) &
+ * cnst / cldFrc(J,L)
+ TauClw(J,L) = MAX(TauClw(J,L), 0.0e+00_r8)
+ TauCli(J,L) = state%q(J,L,ixCldIce) &
+ * (state%pint(J,L+1)-state%pint(J,L)) &
+ * cnst / cldFrc(J,L)
+ TauCli(J,L) = MAX(TauCli(J,L), 0.0e+00_r8)
+ ENDIF
+ ENDDO
+ ENDDO
+
+ ! Retrieve tropopause level
+ Trop_Lev = 0.0e+0_r8
+ CALL Tropopause_FindChemTrop(state, Trop_Lev)
+ ! Back out the pressure
+ Trop_P = 1000.0e+0_r8
+ DO J = 1, nY
+ Trop_P(J) = state%pmid(J,Trop_Lev(J)) * 0.01e+0_r8
+ ENDDO
+
+ ! Calculate snow depth
+ snowDepth = 0.0e+0_r8
+ DO J = 1, nY
+ Sd_Ice = MAX(0.0e+0_r8,cam_in%snowhIce(J))
+ Sd_Lnd = MAX(0.0e+0_r8,cam_in%snowhLand(J))
+ Frc_Ice = MAX(0.0e+0_r8,cam_in%iceFrac(J))
+ IF (Frc_Ice > 0.0e+0_r8) THEN
+ Sd_Avg = (Sd_Lnd*(1.0e+0_r8 - Frc_Ice)) + (Sd_Ice * Frc_Ice)
+ ELSE
+ Sd_Avg = Sd_Lnd
+ ENDIF
+ snowDepth(J) = Sd_Avg
+ ENDDO
+
+ ! Field : ALBD
+ ! Description: Visible surface albedo
+ ! Unit : -
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%ALBD (1,:nY) = cam_in%asdir(:nY)
+
+ ! Field : CLDFRC
+ ! Description: Column cloud fraction
+ ! Unit : -
+ ! Dimensions : nX, nY
+ ! Note : Estimate column cloud fraction as the maximum cloud
+ ! fraction in the column (pessimistic assumption)
+ DO J = 1, nY
+ State_Met(LCHNK)%CLDFRC(1,J) = MAXVAL(cldFrc(J,:))
+ ENDDO
+
+ ! Field : EFLUX, HFLUX
+ ! Description: Latent heat flux, sensible heat flux
+ ! Unit : W/m^2
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%EFLUX (1,:nY) = cam_in%Lhf(:nY)
+ State_Met(LCHNK)%HFLUX (1,:nY) = cam_in%Shf(:nY)
+
+ ! Field : LandTypeFrac
+ ! Description: Olson fraction per type
+ ! Unit : - (between 0 and 1)
+ ! Dimensions : nX, nY, NSURFTYPE
+ ! Note : Index 1 is water
+ IF ( Input_Opt%onlineLandTypes ) THEN
+ ! Fill in water
+ State_Met(LCHNK)%LandTypeFrac(1,:nY,1) = cam_in%ocnFrac(:nY) &
+ + cam_in%iceFrac(:nY)
+ IF ( .NOT. Input_Opt%ddVel_CLM ) THEN
+ CALL getLandTypes( cam_in, &
+ nY, &
+ State_Met(LCHNK) )
+ ENDIF
+ ELSE
+ DO N = 1, NSURFTYPE
+ Write(FieldName, '(a,i2.2)') 'HCO_LANDTYPE', N-1
+ tmpIdx = pbuf_get_index(FieldName, rc)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ ELSE
+ CALL pbuf_get_field(pbuf, tmpIdx, pbuf_i)
+ DO J = 1, nY
+ State_Met(LCHNK)%LandTypeFrac(1,J,N) = pbuf_i(J)
+ ENDDO
+ pbuf_i => NULL()
+ ENDIF
+
+ Write(FieldName, '(a,i2.2)') 'HCO_XLAI', N-1
+ tmpIdx = pbuf_get_index(FieldName, rc)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ ELSE
+ CALL pbuf_get_field(pbuf, tmpIdx, pbuf_i)
+ DO J = 1, nY
+ State_Met(LCHNK)%XLAI_NATIVE(1,J,N) = pbuf_i(J)
+ ENDDO
+ pbuf_i => NULL()
+ ENDIF
+ ENDDO
+ ENDIF
+
+ ! Field : FRCLND, FRLAND, FROCEAN, FRSEAICE, FRLAKE, FRLANDIC
+ ! Description: Olson land fraction
+ ! Fraction of land
+ ! Fraction of ocean
+ ! Fraction of sea ice
+ ! Fraction of lake
+ ! Fraction of land ice
+ ! Fraction of snow
+ ! Unit : -
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%FRCLND (1,:ny) = 1.e+0_fp - &
+ State_Met(LCHNK)%LandTypeFrac(1,:nY,1) ! Olson Land Fraction
+ State_Met(LCHNK)%FRLAND (1,:nY) = cam_in%landFrac(:nY)
+ State_Met(LCHNK)%FROCEAN (1,:nY) = cam_in%ocnFrac(:nY) + cam_in%iceFrac(:nY)
+ State_Met(LCHNK)%FRSEAICE (1,:nY) = cam_in%iceFrac(:nY)
+ IF ( Input_Opt%onlineLandTypes ) THEN
+ State_Met(LCHNK)%FRLAKE (1,:nY) = cam_in%lwtgcell(:,3) + &
+ cam_in%lwtgcell(:,4)
+ State_Met(LCHNK)%FRLANDIC (1,:nY) = cam_in%lwtgcell(:,2)
+ State_Met(LCHNK)%FRSNO (1,:nY) = 0.0e+0_fp
+ ELSE
+ State_Met(LCHNK)%FRLAKE (1,:nY) = 0.0e+0_fp
+ State_Met(LCHNK)%FRLANDIC (1,:nY) = 0.0e+0_fp
+ State_Met(LCHNK)%FRSNO (1,:nY) = 0.0e+0_fp
+ ENDIF
+
+ ! Field : GWETROOT, GWETTOP
+ ! Description: Root and top soil moisture
+ ! Unit : -
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%GWETROOT (1,:nY) = 0.0e+0_fp
+ State_Met(LCHNK)%GWETTOP (1,:nY) = 0.0e+0_fp
+
+ ! Field : LAI
+ ! Description: Leaf area index
+ ! Unit : m^2/m^2
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%LAI (1,:nY) = 0.0e+0_fp
+
+ ! Field : PARDR, PARDF
+ ! Description: Direct and diffuse photosynthetically active radiation
+ ! Unit : W/m^2
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%PARDR (1,:nY) = 0.0e+0_fp
+ State_Met(LCHNK)%PARDF (1,:nY) = 0.0e+0_fp
+
+ ! Field : PBLH
+ ! Description: PBL height
+ ! Unit : m
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%PBLH (1,:nY) = PblH(:nY)
+
+ ! Field : PHIS
+ ! Description: Surface geopotential height
+ ! Unit : m
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%PHIS (1,:nY) = state%Phis(:nY)
+
+ ! Field : PRECANV, PRECCON, PRECLSC, PRECTOT
+ ! Description: Anvil precipitation @ ground
+ ! Convective precipitation @ ground
+ ! Large-scale precipitation @ ground
+ ! Total precipitation @ ground
+ ! Unit : kg/m^2/s
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%PRECANV (1,:nY) = 0.0e+0_fp
+ State_Met(LCHNK)%PRECCON (1,:nY) = cam_out%Precc(:nY)
+ State_Met(LCHNK)%PRECLSC (1,:nY) = cam_out%Precl(:nY)
+ State_Met(LCHNK)%PRECTOT (1,:nY) = cam_out%Precc(:nY) + cam_out%Precl(:nY)
+
+ ! Field : TROPP
+ ! Description: Tropopause pressure
+ ! Unit : hPa
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%TROPP (1,:nY) = Trop_P(:nY)
+
+ ! Field : PS1_WET, PS2_WET
+ ! Description: Wet surface pressure at start and end of timestep
+ ! Unit : hPa
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%PS1_WET (1,:nY) = state%ps(:nY)*0.01e+0_fp
+ State_Met(LCHNK)%PS2_WET (1,:nY) = state%ps(:nY)*0.01e+0_fp
+
+ ! Field : SLP
+ ! Description: Sea level pressure
+ ! Unit : hPa
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%SLP (1,:nY) = state%ps(:nY)*0.01e+0_fp
+
+ ! Field : TS, TSKIN
+ ! Description: Surface temperature, surface skin temperature
+ ! Unit : K
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%TS (1,:nY) = cam_in%TS(:nY)
+ State_Met(LCHNK)%TSKIN (1,:nY) = cam_in%TS(:nY)
+
+ ! Field : SWGDN
+ ! Description: Incident radiation @ ground
+ ! Unit : W/m^2
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%SWGDN (1,:nY) = fsds(:nY)
+
+ ! Field : SNODP, SNOMAS
+ ! Description: Snow depth, snow mass
+ ! Unit : m, kg/m^2
+ ! Dimensions : nX, nY
+ ! Note : Conversion from m to kg/m^2
+ ! \rho_{ice} = 916.7 kg/m^3
+ State_Met(LCHNK)%SNODP (1,:nY) = snowDepth(:nY)
+ State_Met(LCHNK)%SNOMAS (1,:nY) = snowDepth(:nY) * 916.7e+0_r8
+
+ ! Field : SUNCOS, SUNCOSmid
+ ! Description: COS(solar zenith angle) at current time and midpoint
+ ! of chemistry timestep
+ ! Unit : -
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%SUNCOS (1,:nY) = CSZA(:nY)
+ State_Met(LCHNK)%SUNCOSmid (1,:nY) = CSZAmid(:nY)
+
+ ! Field : UVALBEDO
+ ! Description: UV surface albedo
+ ! Unit : -
+ ! Dimensions : nX, nY
+ IF ( Input_Opt%onlineAlbedo ) THEN
+ State_Met(LCHNK)%UVALBEDO(1,:nY) = cam_in%asdir(:nY)
+ ELSE
+ FieldName = 'HCO_UV_ALBEDO'
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ State_Met(LCHNK)%UVALBEDO(1,:nY) = 0.0e+0_fp
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_i)
+ State_Met(LCHNK)%UVALBEDO(1,:nY) = pbuf_i(:nY)
+ pbuf_chnk => NULL()
+ pbuf_i => NULL()
+ ENDIF
+ ENDIF
+
+ ! Field : U10M, V10M
+ ! Description: E/W and N/S wind speed @ 10m height
+ ! Unit : m/s
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%U10M (1,:nY) = state%U(:nY,nZ)
+ State_Met(LCHNK)%V10M (1,:nY) = state%V(:nY,nZ)
+
+ ! Field : USTAR
+ ! Description: Friction velocity
+ ! Unit : m/s
+ ! Dimensions : nX, nY
+ ! Note : We here combine the land friction velocity (fv) with
+ ! the ocean friction velocity (ustar)
+ DO J = 1, nY
+ State_Met(LCHNK)%USTAR (1,J) = &
+ cam_in%fv(J) * ( cam_in%landFrac(J)) &
+ + cam_in%uStar(J) * ( 1.0e+0_fp - cam_in%landFrac(J))
+ ENDDO
+
+ ! Field : Z0
+ ! Description: Surface roughness length
+ ! Unit : m
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%Z0 (1,:nY) = Z0(:nY)
+
+ ! Field : IODIDE
+ ! Description: Surface iodide concentration
+ ! Unit : nM
+ ! Dimensions : nX, nY
+ FieldName = 'HCO_iodide'
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ State_Chm(LCHNK)%IODIDE(1,:nY) = 0.0e+0_fp
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_i)
+ State_Chm(LCHNK)%IODIDE(1,:nY) = pbuf_i(:nY)
+ pbuf_chnk => NULL()
+ pbuf_i => NULL()
+ ENDIF
+
+ ! Field : SALINITY
+ ! Description: Ocean salinity
+ ! Unit : PSU
+ ! Dimensions : nX, nY
+ ! Note : Possibly get ocean salinity from POP?
+ FieldName = 'HCO_salinity'
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ State_Chm(LCHNK)%SALINITY(1,:nY) = 0.0e+0_fp
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_i)
+ State_Chm(LCHNK)%SALINITY(1,:nY) = pbuf_i(:nY)
+ pbuf_chnk => NULL()
+ pbuf_i => NULL()
+ ENDIF
+
+ ! Field : OMOC
+ ! Description: OM/OC ratio
+ ! Unit : -
+ ! Dimensions : nX, nY
+ IF ( currMo == 12 .or. currMo == 1 .or. currMo == 2 ) THEN
+ FieldName = 'HCO_OMOC_DJF'
+ ELSE IF ( currMo == 3 .or. currMo == 4 .or. currMo == 5 ) THEN
+ FieldName = 'HCO_OMOC_MAM'
+ ELSE IF ( currMo == 6 .or. currMo == 7 .or. currMo == 8 ) THEN
+ FieldName = 'HCO_OMOC_JJA'
+ ELSE IF ( currMo == 9 .or. currMo == 10 .or. currMo == 11 ) THEN
+ FieldName = 'HCO_OMOC_SON'
+ ENDIF
+ tmpIdx = pbuf_get_index(FieldName, rc)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ ! there is an error here and the field was not found
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ ELSE
+ CALL pbuf_get_field(pbuf, tmpIdx, pbuf_i)
+ DO J = 1, nY
+ State_Chm(LCHNK)%OMOC(1,J) = pbuf_i(J)
+ ENDDO
+ pbuf_i => NULL()
+ ENDIF
+
+ ! Three-dimensional fields on level edges
+ DO J = 1, nY
+ DO L = 1, nZ+1
+ ! Field : PEDGE
+ ! Description: Wet air pressure at (vertical) level edges
+ ! Unit : hPa
+ ! Dimensions : nX, nY, nZ+1
+ State_Met(LCHNK)%PEDGE (1,J,L) = state%pint(J,nZ+2-L)*0.01e+0_fp
+
+ ! Field : CMFMC
+ ! Description: Upward moist convective mass flux
+ ! Unit : kg/m^2/s
+ ! Dimensions : nX, nY, nZ+1
+ State_Met(LCHNK)%CMFMC (1,J,L) = 0.0e+0_fp
+
+ ! Field : PFICU, PFLCU
+ ! Description: Downward flux of ice/liquid precipitation (convective)
+ ! Unit : kg/m^2/s
+ ! Dimensions : nX, nY, nZ+1
+ State_Met(LCHNK)%PFICU (1,J,L) = 0.0e+0_fp
+ State_Met(LCHNK)%PFLCU (1,J,L) = 0.0e+0_fp
+
+ ! Field : PFILSAN, PFLLSAN
+ ! Description: Downward flux of ice/liquid precipitation (Large-scale & anvil)
+ ! Unit : kg/m^2/s
+ ! Dimensions : nX, nY, nZ+1
+ State_Met(LCHNK)%PFILSAN (1,J,L) = LsFlxSnw(J,nZ+2-L) ! kg/m2/s
+ State_Met(LCHNK)%PFLLSAN (1,J,L) = MAX(0.0e+0_fp,LsFlxPrc(J,nZ+2-L) - LsFlxSnw(J,nZ+2-L)) ! kg/m2/s
+ ENDDO
+ ENDDO
+
+ DO J = 1, nY
+ ! Field : CLDTOPS
+ ! Description: Max cloud top height
+ ! Unit : level
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%CLDTOPS(1,J) = nZ + 1 - NINT(cldTop(J))
+ ENDDO
+
+ ! Three-dimensional fields on level centers
+ DO J = 1, nY
+ DO L = 1, nZ
+ ! Field : U, V
+ ! Description: E/W and N/S component of wind
+ ! Unit : m/s
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%U (1,J,L) = state%U(J,nZ+1-L)
+ State_Met(LCHNK)%V (1,J,L) = state%V(J,nZ+1-L)
+
+ ! Field : OMEGA
+ ! Description: Updraft velocity
+ ! Unit : Pa/s
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%OMEGA (1,J,L) = state%Omega(J,nZ+1-L)
+
+ ! Field : CLDF
+ ! Description: 3-D cloud fraction
+ ! Unit : -
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%CLDF (1,J,L) = cldFrc(J,nZ+1-L)
+
+ ! Field : DTRAIN
+ ! Description: Detrainment flux
+ ! Unit : kg/m^2/s
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%DTRAIN (1,J,L) = 0.0e+0_fp ! Used in convection
+
+ ! Field : DQRCU
+ ! Description: Convective precipitation production rate
+ ! Unit : kg/kg dry air/s
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%DQRCU (1,J,L) = 0.0e+0_fp ! Used in convection
+
+ ! Field : DQRLSAN
+ ! Description: Large-scale precipitation production rate
+ ! Unit : kg/kg dry air/s
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%DQRLSAN (1,J,L) = PRain(J,nZ+1-L) ! kg/kg/s
+
+ ! Field : QI, QL
+ ! Description: Cloud ice/water mixing ratio
+ ! Unit : kg/kg dry air
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%QI (1,J,L) = MAX(1.0e-10_fp, state%q(J,nZ+1-L,ixCldIce)) ! kg ice / kg dry air
+ State_Met(LCHNK)%QL (1,J,L) = MAX(1.0e-10_fp, state%q(J,nZ+1-L,ixCldLiq)) ! kg water / kg dry air
+
+ ! Field : RH
+ ! Description: Relative humidity
+ ! Unit : %
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%RH (1,J,L) = relHum(J,nZ+1-L) * 100.0e+0_fp
+
+ ! Field : TAUCLI, TAUCLW
+ ! Description: Optical depth of ice/H2O clouds
+ ! Unit : -
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%TAUCLI (1,J,L) = TauCli(J,nZ+1-L)
+ State_Met(LCHNK)%TAUCLW (1,J,L) = TauClw(J,nZ+1-L)
+
+ ! Field : REEVAPCN
+ ! Description: Evaporation of convective precipitation
+ ! (w/r/t dry air)
+ ! Unit : kg
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%REEVAPCN (1,J,L) = 0.0e+0_fp
+
+ ! Field : REEVAPLS
+ ! Description: Evaporation of large-scale + anvil precipitation
+ ! (w/r/t dry air)
+ ! Unit : kg/kg/s
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%REEVAPLS (1,J,L) = NEvapr(J,nZ+1-L) ! kg/kg/s
+
+ ! Field : SPHU1, SPHU2
+ ! Description: Specific humidity at current and next timestep
+ ! Unit : g H2O/ kg air
+ ! Dimensions : nX, nY, nZ
+ ! Note : Since we are using online meteorology, we do not have
+ ! access to the data at the next time step
+ ! Compute tendency in g H2O/kg air/s (tmmf, 1/13/20) ?
+ State_Met(LCHNK)%SPHU1 (1,J,L) = qH2O(J,nZ+1-L) * 1.0e+3_fp ! g/kg
+ State_Met(LCHNK)%SPHU2 (1,J,L) = qH2O(J,nZ+1-L) * 1.0e+3_fp ! g/kg
+
+ ! Field : TMPU1, TMPU2
+ ! Description: Temperature at current and next timestep
+ ! Unit : K
+ ! Dimensions : nX, nY, nZ
+ ! Note : Since we are using online meteorology, we do not have
+ ! access to the data at the next time step
+ ! Compute tendency in K/s (tmmf, 1/13/20) ?
+ State_Met(LCHNK)%TMPU1 (1,J,L) = state%t(J,nZ+1-L)
+ State_Met(LCHNK)%TMPU2 (1,J,L) = state%t(J,nZ+1-L)
+ ENDDO
+ ENDDO
+ ! Note: Setting DQRLSAN to zero in the top layer prevents upcoming NaNs
+ ! in the GEOS-Chem wet deposition routines. Given the altitude, it should
+ ! be zero anyway, this is just to prevent any numerical artifacts from
+ ! creeping in.
+ State_Met(LCHNK)%DQRLSAN (1,:nY,nZ) = 0.0e+00_fp
+
+ ! Field : T
+ ! Description: Temperature at current time
+ ! Unit : K
+ ! Dimensions : nX, nY, nZ
+ ! Note : Since we are using online meteorology, we do not have
+ ! access to the data at the next time step
+ ! Compute tendency in K/s (tmmf, 1/13/20) ?
+ State_Met(LCHNK)%T = (State_Met(LCHNK)%TMPU1 + State_Met(LCHNK)%TMPU2)*0.5e+0_fp
+
+ ! Field : SPHU
+ ! Description: Specific humidity at current time
+ ! Unit : g H2O/ kg air
+ ! Dimensions : nX, nY, nZ
+ ! Note : Since we are using online meteorology, we do not have
+ ! access to the data at the next time step
+ ! Compute tendency in g H2O/kg air/s (tmmf, 1/13/20) ?
+ State_Met(LCHNK)%SPHU = (State_Met(LCHNK)%SPHU1 + State_Met(LCHNK)%SPHU2)*0.5e+0_fp
+
+ ! Field : OPTD
+ ! Description: Total in-cloud optical depth (visible band)
+ ! Unit : -
+ ! Dimensions : nX, nY, nZ
+ State_Met(LCHNK)%OPTD = State_Met(LCHNK)%TAUCLI + State_Met(LCHNK)%TAUCLW
+
+ ! Pass time values obtained from the ESMF environment to GEOS-Chem
+ CALL Accept_External_Date_Time( value_NYMD = currYMD, &
+ value_NHMS = currHMS, &
+ value_YEAR = currYr, &
+ value_MONTH = currMo, &
+ value_DAY = currDy, &
+ value_DAYOFYR = INT(FLOOR(Calday)), &
+ value_HOUR = currHr, &
+ value_MINUTE = currMn, &
+ value_HELAPSED = 0.0e+0_f4, &
+ value_UTC = currUTC, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Failed to update time in GEOS-Chem!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ CALL Accept_External_PEdge( State_Met = State_Met(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Failed to update pressure edges!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Field : PS1_DRY, PS2_DRY
+ ! Description: Dry surface pressure at current and next timestep
+ ! Unit : hPa
+ ! Dimensions : nX, nY, nZ+1
+ ! Note : 1. Use the CAM PSDry fields instead of using the
+ ! GEOS-Chem calculation
+ ! 2. As we are using online meteorology, we do not
+ ! have access to the fields at the next time step
+ ! Compute Pa/s tendency? (tmmf, 1/13/20)
+ State_Met(LCHNK)%PS1_DRY (1,:nY) = state%PSDry(:nY) * 0.01e+0_fp
+ State_Met(LCHNK)%PS2_DRY (1,:nY) = state%PSDry(:nY) * 0.01e+0_fp
+
+ ! Field : PSC2_WET, PSC2_DRY
+ ! Description: Interpolated wet and dry surface pressure at the
+ ! current time
+ ! Unit : hPa
+ ! Dimensions : nX, nY, nZ+1
+ ! Note : As we are using online meteorology, we do not
+ ! have access to the fields at the next time step
+ ! Compute Pa/s tendency? (tmmf, 1/13/20)
+ State_Met(LCHNK)%PSC2_WET = State_Met(LCHNK)%PS1_WET
+ State_Met(LCHNK)%PSC2_DRY = State_Met(LCHNK)%PS1_DRY
+
+ CALL Set_Floating_Pressures( State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Failed to set floating pressures!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Set quantities of interest but do not change VMRs
+ ! This function updates:
+ ! ====================================================================
+ ! (1) PEDGE : Moist air pressure at grid box bottom [hPa]
+ ! (2) PEDGE_DRY : Dry air partial pressure at box bottom [hPa]
+ ! (3) PMID : Moist air pressure at grid box centroid [hPa]
+ ! (4) PMID_DRY : Dry air partial pressure at box centroid [hPa]
+ ! (5) PMEAN : Altitude-weighted mean moist air pressure [hPa]
+ ! (6) PMEAN_DRY : Alt-weighted mean dry air partial pressure [hPa]
+ ! (7) DELP : Delta-P extent of grid box [hPa]
+ ! (Same for both moist and dry air since we
+ ! assume constant water vapor pressure
+ ! across box)
+ ! (8) AIRDEN : Mean grid box dry air density [kg/m^3]
+ ! (defined as total dry air mass/box vol)
+ ! (9) AIRNUMDEN : Mean grid box dry air number density [molec/m^3]
+ ! (10) MAIRDEN : Mean grid box moist air density [kg/m^3]
+ ! (defined as total moist air mass/box vol)
+ ! (11) AD : Total dry air mass in grid box [kg]
+ ! (12) ADMOIST : Total moist air mass in grid box [kg]
+ ! (13) BXHEIGHT : Vertical height of grid box [m]
+ ! (14) AIRVOL : Volume of grid box [m^3]
+ ! (15) MOISTMW : Molecular weight of moist air in box [g/mol]
+ ! (16) IsLand : Logical for grid cells over land [-]
+ ! (17) IsWater : Logical for grid cells over water [-]
+ ! (18) IsIce : Logical for grid cells over ice [-]
+ ! (19) IsSnow : Logical for grid cells over snow [-]
+ ! (20) InTroposph: Logical for tropospheric grid cells [-]
+ ! (21) InStratMes: Logical for non-tropospheric grid cells [-]
+ ! (22) InStratosp: Logical for stratospheric grid cells [-]
+ ! (23) InChemGrid: Logical for chemistry grid cells [-]
+ ! (24) LocalSolar: Local solar time [-]
+ ! (25) IsLocalNoo: Logical for local noon [-]
+ ! (26) TropLev : Maximum tropopause level [-]
+ ! (27) TropHt : Maximum tropopause height [km]
+ ! ====================================================================
+ CALL AirQnt( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC, &
+ Update_Mixing_Ratio = .False. )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Failed to calculate air properties!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! SDE 05/28/13: Set H2O to State_Chm tracer if relevant and,
+ ! if LUCX=T and LSETH2O=F and LACTIVEH2O=T, update specific humidity
+ ! in the stratosphere
+ !
+ ! NOTE: Specific humidity may change in SET_H2O_TRAC and
+ ! therefore this routine may call AIRQNT again to update
+ ! air quantities and tracer concentrations (ewl, 10/28/15)
+ IF ( Input_Opt%Its_A_Fullchem_Sim .and. iH2O > 0 ) THEN
+ CALL Set_H2O_Trac( SETSTRAT = ( ( .not. Input_Opt%LUCX ) &
+ .or. Input_Opt%LSETH2O ), &
+ Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Set_H2O_Trac" #1!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Only force strat once if using UCX
+ IF (Input_Opt%LSETH2O) Input_Opt%LSETH2O = .FALSE.
+ ENDIF
+
+ ! Do this after AirQnt, such that we overwrite GEOS-Chem isLand, isWater and
+ ! isIce, which are based on albedo. Rather, we use CLM landFranc, ocnFrac
+ ! and iceFrac. We also compute isSnow
+ DO J = 1, nY
+ iMaxLoc = MAXLOC( (/ State_Met(LCHNK)%FRLAND(1,J) + &
+ State_Met(LCHNK)%FRLANDIC(1,J) + &
+ State_Met(LCHNK)%FRLAKE(1,J), &
+ State_Met(LCHNK)%FRSEAICE(1,J), &
+ State_Met(LCHNK)%FROCEAN(1,J) - &
+ State_Met(LCHNK)%FRSEAICE(1,J) /) )
+ IF ( iMaxLoc(1) == 3 ) iMaxLoc(1) = 0
+ ! reset ocean to 0
+
+ ! Field : LWI
+ ! Description: Land/water indices
+ ! Unit : -
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%LWI(1,J) = FLOAT( iMaxLoc(1) )
+
+ IF ( iMaxLoc(1) == 0 ) THEN
+ State_Met(LCHNK)%isLand(1,J) = .False.
+ State_Met(LCHNK)%isWater(1,J) = .True.
+ State_Met(LCHNK)%isIce(1,J) = .False.
+ ELSEIF ( iMaxLoc(1) == 1 ) THEN
+ State_Met(LCHNK)%isLand(1,J) = .True.
+ State_Met(LCHNK)%isWater(1,J) = .False.
+ State_Met(LCHNK)%isIce(1,J) = .False.
+ ELSEIF ( iMaxLoc(1) == 2 ) THEN
+ State_Met(LCHNK)%isLand(1,J) = .False.
+ State_Met(LCHNK)%isWater(1,J) = .False.
+ State_Met(LCHNK)%isIce(1,J) = .True.
+ ELSE
+ Write(iulog,*) " iMaxLoc gets value: ", iMaxLoc
+ ErrMsg = 'Failed to figure out land/water'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ State_Met(LCHNK)%isSnow(1,J) = ( State_Met(LCHNK)%FRSEAICE(1,J) > 0.0e+0_fp &
+ .or. State_Met(LCHNK)%SNODP(1,J) > 0.01 )
+
+ ENDDO
+
+ ! Do this after AirQnt in order to use AIRDEN and BXHEIGHT
+ DO J = 1, nY
+ O3col(J) = 0.0e+0_fp
+ DO L = 1, nZ
+ O3col(J) = O3col(J) &
+ + State_Chm(LCHNK)%Species(1,J,L,iO3) &
+ * State_Met(LCHNK)%AIRDEN(1,J,L) &
+ * State_Met(LCHNK)%BXHEIGHT(1,J,L)
+ ENDDO
+ O3col(J) = O3col(J) * ( AVO / MWO3 ) / 1e+1_fp / 2.69e+16_fp
+ ENDDO
+
+ ! Field : TO3
+ ! Description: Total overhead ozone column
+ ! Unit : DU
+ ! Dimensions : nX, nY
+ State_Met(LCHNK)%TO3 (1,:nY) = O3col(:nY)
+
+ IF ( Input_Opt%LSCHEM .AND. &
+ State_Grid(LCHNK)%MaxChemLev /= State_Grid(LCHNK)%nZ ) THEN
+ IF ( iStep == 1 ) THEN
+ ALLOCATE( BrPtrDay ( 6 ), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating BrPtrDay')
+ ALLOCATE( BrPtrNight( 6 ), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating BrPtrNight')
+ DO N = 1, 6
+ ! Skip if species is not defined
+ IF ( GC_Bry_TrID(N) <= 0 ) CYCLE
+
+ ! Get Bry name
+ SpcName = State_Chm(LCHNK)%SpcData(GC_Bry_TrID(N))%Info%Name
+
+ ! Construct field name using Bry name
+ PREFIX = 'GEOSCCM_'//TRIM(SpcName)
+
+ ALLOCATE( BrPtrDay(N)%MR(1,PCOLS,nZ), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating BrPtrDay%MR')
+ ALLOCATE( BrPtrNight(N)%MR(1,PCOLS,nZ), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating BrPtrNight%MR')
+
+ ! Get pointer to this field. These are the mixing ratios (pptv).
+
+ ! Day
+ FieldName = TRIM(PREFIX) // '_DAY'
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ BrPtrDay(N)%MR(1,:nY,nZ:1:-1) = 0.0e+0_f4
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_ik)
+ BrPtrDay(N)%MR(1,:nY,nZ:1:-1) = REAL(pbuf_ik(:nY,:nZ), f4)
+ pbuf_chnk => NULL()
+ pbuf_ik => NULL()
+ ENDIF
+
+ ! Night
+ FieldName = TRIM(PREFIX) // '_NIGHT'
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ BrPtrDay(N)%MR(1,:nY,nZ:1:-1) = 0.0e+0_f4
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_ik)
+ BrPtrNight(N)%MR(1,:nY,nZ:1:-1) = REAL(pbuf_ik(:nY,:nZ), f4)
+ pbuf_chnk => NULL()
+ pbuf_ik => NULL()
+ ENDIF
+
+ ENDDO
+
+ DO N = 1,NSCHEM
+
+ ! Get GEOS-Chem species index
+ M = Strat_TrID_GC(N)
+
+ ! Skip if species is not defined
+ IF ( M <= 0 ) CYCLE
+
+ ! Get species name
+ SpcName = State_Chm(LCHNK)%SpcData(M)%Info%Name
+
+ ! ---------------------------------------------------------------
+ ! Get pointers to fields
+ ! ---------------------------------------------------------------
+
+ ! Production rates [v/v/s]
+ IF ( Input_Opt%LUCX ) THEN
+ FieldName = 'GMI_PROD_'//TRIM(SpcName)
+ ELSE
+ FieldName = 'UCX_PROD_'//TRIM(SpcName)
+ ENDIF
+
+ ALLOCATE( PLVEC(N)%PROD(1,PCOLS,nZ), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating PLVEC%PROD')
+ ALLOCATE( PLVEC(N)%LOSS(1,PCOLS,nZ), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating PLVEC%PROD')
+
+ ! Get pointer from HEMCO
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ PLVEC(N)%PROD(1,:nY,nZ:1:-1) = 0.0e+0_f4
+ FND = .False.
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_ik)
+ PLVEC(N)%PROD(1,:nY,nZ:1:-1) = REAL(pbuf_ik(:nY,:nZ),f4)
+ FND = .True.
+ pbuf_chnk => NULL()
+ pbuf_ik => NULL()
+ ENDIF
+
+ ! Warning message
+ IF ( .NOT. FND .AND. Input_Opt%amIRoot ) THEN
+ ErrMsg = 'Cannot find archived production rates for ' // &
+ TRIM(SpcName) // ' - will use value of 0.0. ' // &
+ 'To use archived rates, add the following field ' // &
+ 'to the HEMCO configuration file: '// TRIM( FieldName )
+ CALL GC_Warning( ErrMsg, RC, ThisLoc )
+ ENDIF
+
+ ! Loss frequency [s-1]
+ IF ( Input_Opt%LUCX ) THEN
+ FieldName = 'GMI_LOSS_'//TRIM(SpcName)
+ ELSE
+ FieldName = 'UCX_LOSS_'//TRIM(SpcName)
+ ENDIF
+
+ ! Get pointer from HEMCO
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ PLVEC(N)%LOSS(1,:nY,nZ:1:-1) = 0.0e+0_f4
+ FND = .False.
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_ik)
+ PLVEC(N)%LOSS(1,:nY,nZ:1:-1) = REAL(pbuf_ik(:nY,:nZ), f4)
+ FND = .True.
+ pbuf_chnk => NULL()
+ pbuf_ik => NULL()
+ ENDIF
+
+ ! Warning message
+ IF ( .NOT. FND .AND. Input_Opt%amIRoot ) THEN
+ ErrMsg= 'Cannot find archived loss frequencies for ' // &
+ TRIM(SpcName) // ' - will use value of 0.0. ' // &
+ 'To use archived rates, add the following field ' // &
+ 'to the HEMCO configuration file: '//TRIM(FieldName)
+ CALL GC_Warning( ErrMsg, RC, ThisLoc )
+ ENDIF
+
+ ENDDO !N
+
+ ! Get pointer to STRAT_OH
+
+ ALLOCATE( STRAT_OH(1,PCOLS,nZ), STAT=IERR )
+ IF ( IERR .NE. 0 ) CALL ENDRUN('Failure while allocating STRAT_OH')
+
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ STRAT_OH(1,:nY,nZ:1:-1) = 0.0e+0_f4
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_ik)
+ STRAT_OH(1,:nY,nZ:1:-1) = REAL(pbuf_ik(:nY,:nZ), f4)
+ pbuf_chnk => NULL()
+ pbuf_ik => NULL()
+ ENDIF
+ ENDIF
+
+ ENDIF
+
+ ! This is not necessary as we prescribe CH4 surface mixing ratios
+ ! through CAM.
+ !! Prescribe methane surface concentrations throughout PBL
+ !IF ( ITS_A_FULLCHEM_SIM .and. id_CH4 > 0 ) THEN
+ !
+ ! ! Set CH4 concentrations
+ ! CALL SET_CH4( Input_Opt = Input_Opt, &
+ ! State_Chm = State_Chm(LCHNK), &
+ ! State_Diag = State_Diag(LCHNK), &
+ ! State_Grid = State_Grid(LCHNK), &
+ ! State_Met = State_Met(LCHNK), &
+ ! RC = RC )
+ !
+ ! ! Trap potential errors
+ ! IF ( RC /= GC_SUCCESS ) THEN
+ ! ErrMsg = 'Error encountered in call to "SET_CH4"!'
+ ! CALL Error_Stop( ErrMsg, ThisLoc )
+ ! ENDIF
+ !ENDIF
+
+ ! Eventually initialize/reset wetdep
+ IF ( Input_Opt%LConv .OR. Input_Opt%LChem .OR. Input_Opt%LWetD ) THEN
+ CALL Setup_WetScav( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Setup_WetScav"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+ ENDIF
+
+ !==============================================================
+ ! ***** C O M P U T E P B L H E I G H T etc. *****
+ !==============================================================
+ ! Move this call from the PBL mixing routines because the PBL
+ ! height is used by drydep and some of the emissions routines.
+ ! (ckeller, 3/5/15)
+ ! This function updates:
+ ! ====================================================================
+ ! (1) InPbl : Logical indicating if we are in the PBL [-]
+ ! (2) PBL_TOP_L : Number of layers in the PBL [-]
+ ! (3) PBL_TOP_hPa: Pressure at the top of the PBL [hPa]
+ ! (4) PBL_TOP_m : PBL height [m]
+ ! (5) PBL_THICK : PBL thickness [hPa]
+ ! (6) F_OF_PBL : Fraction of grid box within the PBL [-]
+ ! (7) F_UNDER_PBLTOP: Fraction of grid box underneath the PBL top [-]
+ ! (8) PBL_MAX_L : Model level where PBL top occurs [-]
+ ! ====================================================================
+ CALL Compute_PBL_Height( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Compute_PBL_Height"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ !--------------------------------------------------------------
+ ! Test for emission timestep
+ ! Now always do emissions here, even for full-mixing
+ ! (ckeller, 3/5/15)
+ !--------------------------------------------------------------
+ !==================================================================
+ ! ***** D R Y D E P O S I T I O N *****
+ !==================================================================
+ !==================================================================
+ ! Compute dry deposition velocities
+ !
+ ! CLM computes dry deposition velocities over land.
+ ! We need to merge the land component passed through cam_in and
+ ! the ocn/ice dry deposition velocities.
+ !
+ ! If using the CLM velocities, then use GEOS-Chem's dry deposition
+ ! module to compute velocities and then scale them with the ocean
+ ! fraction (Input_Opt%ddVel_CLM)
+ !
+ ! A second option would be to let GEOS-Chem compute dry deposition
+ ! velocity, thus overwriting the input from CLM
+ !
+ ! drydep_method must be set to DD_XLND.
+ !
+ ! The GEOS-Chem option (.not. Input_Opt%ddVel_CLM) option coupled
+ ! with Input_Opt%onlineLandTypes requires that CLM passes land
+ ! type information (land type and leaf area index).
+ !==================================================================
+ !
+ ! State_Chm expects dry deposition velocities in m/s, whereas
+ ! CLM returns land deposition velocities in cm/s!
+ !
+ ! For now, dry deposition velocities are only computed for gases
+ ! (which is what CLM deals with). Dry deposition for aerosols is
+ ! work in progress.
+ !
+ ! Thibaud M. Fritz - 27 Feb 2020
+ !==================================================================
+
+ IF ( Input_Opt%LDryD ) THEN
+ ! Compute the Olson landmap fields of State_Met
+ ! (e.g. State_Met%IREG, State_Met%ILAND, etc.)
+ CALL Compute_Olson_Landmap( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Compute_Olson_Landmap"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Compute State_Met%XLAI (for drydep) and State_Met%MODISLAI,
+ ! which is the average LAI per grid box (for soil NOx emissions)
+ CALL Compute_Xlai( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Compute_Xlai"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! Compute drydep velocities and update State_Chm%DryDepVel
+ CALL Do_Drydep( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Diag = State_Diag(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Do_Drydep"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ IF ( Input_Opt%ddVel_CLM ) THEN
+ DO N = 1, nddvels
+
+ !! Print debug
+ !IF ( rootChunk ) THEN
+ ! IF ( N == 1 ) THEN
+ ! Write(iulog,*) "Number of GC dry deposition species = ", &
+ ! SIZE(State_Chm(LCHNK)%DryDepVel(:,:,:),3)
+ ! Write(iulog,*) "Number of CESM dry deposition species = ", &
+ ! nddvels
+ ! ENDIF
+ ! Write(iulog,*) "N = ", N
+ ! Write(iulog,*) "drySpc_ndx = ", drySpc_ndx(N)
+ ! Write(iulog,*) "GC index = ", map2GC_dryDep(N)
+ ! IF ( map2GC_dryDep(N) > 0 ) THEN
+ ! Write(iulog,*) "GC name = ", TRIM(DEPNAME(map2GC_dryDep(N)))
+ ! ENDIF
+ ! Write(iulog,*) "dry Species= ", TRIM(drydep_list(N))
+ ! IF ( drySpc_ndx(N) > 0 ) THEN
+ ! Write(iulog,*) "tracerName = ", TRIM(tracerNames(drySpc_ndx(N)))
+ ! ENDIF
+ ! Write(iulog,*) "CLM-depVel = ", &
+ ! MAXVAL(cam_in%depvel(:nY,N)) * 1.0e-02_fp, " [m/s]"
+ ! IF ( map2GC_dryDep(N) > 0 ) THEN
+ ! Write(iulog,*) "GC-depVel = ", &
+ ! MAXVAL(State_Chm(LCHNK)%DryDepVel(1,:nY,map2GC_dryDep(N))), " [m/s]"
+ ! ENDIF
+ !ENDIF
+
+ IF ( map2GC_dryDep(N) > 0 ) THEN
+ ! State_Chm%DryDepVel is in m/s
+ State_Chm(LCHNK)%DryDepVel(1,:nY,map2GC_dryDep(N)) = &
+ ! This first bit corresponds to the dry deposition
+ ! velocities over land as computed from CLM and
+ ! converted to m/s. This is scaled by the fraction
+ ! of land.
+ cam_in%depVel(:nY,N) * 1.0e-02_fp &
+ * MAX(0._fp, 1.0_fp - State_Met(LCHNK)%FROCEAN(1,:nY)) &
+ ! This second bit corresponds to the dry deposition
+ ! velocities over ocean and sea ice as computed from
+ ! GEOS-Chem. This is scaled by the fraction of ocean
+ ! and sea ice.
+ + State_Chm(LCHNK)%DryDepVel(1,:nY,map2GC_dryDep(N)) &
+ * State_Met(LCHNK)%FROCEAN(1,:nY)
+ ENDIF
+ ENDDO
+ ENDIF
+
+ CALL Update_DryDepFreq( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Diag = State_Diag(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ ENDIF
+
+ !===========================================================
+ ! ***** M I X E D L A Y E R M I X I N G *****
+ !===========================================================
+
+ ! Updates from Bob Yantosca, 06/2020
+ ! Compute the surface flux for the non-local mixing,
+ ! (which means getting emissions & drydep from HEMCO)
+ ! and store it in State_Chm%Surface_Flux
+ !
+ ! For CESM-GC, Surface_Flux will be equal to the opposite of the
+ ! dry deposition flux since emissions are loaded externally
+ ! ( SurfaceFlux = eflx - dflx = - dflx )
+ IF ( Input_Opt%LTURB .and. Input_Opt%LNLPBL ) THEN
+ CALL Compute_Sflx_For_Vdiff( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Diag = State_Diag(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Compute_Sflx_for_Vdiff"!'
+ CALL Error_Stop( errMsg, thisLoc )
+ ENDIF
+ ENDIF
+
+ !-----------------------------------------------------------------------
+ ! Get emissions from HEMCO + Lightning + Fire
+ ! Add surface emissions to cam_in
+ !-----------------------------------------------------------------------
+
+ CALL CESMGC_Emissions_Calc( state = state, &
+ hco_pbuf2d = hco_pbuf2d, &
+ State_Met = State_Met(LCHNK), &
+ cam_in = cam_in, &
+ eflx = eflx, &
+ iStep = iStep )
+
+ !-----------------------------------------------------------------------
+ ! Add dry deposition flux
+ ! (stored as SurfaceFlux = -dflx)
+ !-----------------------------------------------------------------------
+
+ DO ND = 1, State_Chm(BEGCHUNK)%nDryDep
+ ! Get the species ID from the drydep ID
+ N = State_Chm(BEGCHUNK)%Map_DryDep(ND)
+ IF ( N <= 0 ) CYCLE
+
+ M = map2GCinv(N)
+ IF ( M <= 0 ) CYCLE
+
+ cam_in%cflx(1:nY,M) = cam_in%cflx(1:nY,M) &
+ + State_Chm(LCHNK)%SurfaceFlux(1,1:nY,N)
+ ENDDO
+
+ !-----------------------------------------------------------------------
+ ! Add non-surface emissions
+ !-----------------------------------------------------------------------
+
+ ! Use units of kg/m2 as State_Chm%Species to add emissions fluxes
+ CALL Convert_Spc_Units( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ OutUnit = 'kg/m2', &
+ RC = RC, &
+ OrigUnit = OrigUnit )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Convert_Spc_Units"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ DO N = 1, pcnst
+ M = map2GC(N)
+ IF ( M > 0 ) THEN
+ ! Add to GEOS-Chem species
+ State_Chm(LCHNK)%Species(1,:nY,:nZ,M) = State_Chm(LCHNK)%Species(1,:nY,:nZ,M) &
+ + eflx(:nY,nZ:1:-1,N) * dT
+ ELSEIF ( M < 0 ) THEN
+ ! Add to constituent (mostly for MAM4 aerosols)
+ ! Convert from kg/m2/s to kg/kg/s
+ ptend%q(:nY,nZ:1:-1,N) = ptend%q(:nY,nZ:1:-1,N) &
+ + eflx(:nY,nZ:1:-1,N) &
+ / ( g0_100 * State_Met(LCHNK)%DELP_DRY(1,:nY,:nZ) )
+ ENDIF
+ ENDDO
+
+ ! Convert back to original unit
+ CALL Convert_Spc_Units( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ OutUnit = OrigUnit, &
+ RC = RC )
+
+ ! Convert State_Chm%Species back to original units
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Convert_Spc_Units"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ !==============================================================
+ ! ***** C H E M I S T R Y *****
+ !==============================================================
+
+ call t_startf( 'chemdr' )
+
+ ! Get the overhead column O3 for use with FAST-J
+ IF ( Input_Opt%Its_A_FullChem_Sim .OR. &
+ Input_Opt%Its_An_Aerosol_Sim ) THEN
+
+ IF ( Input_Opt%LChem ) THEN
+ CALL Compute_Overhead_O3( Input_Opt = Input_Opt, &
+ State_Grid = State_Grid(LCHNK), &
+ State_Chm = State_Chm(LCHNK), &
+ DAY = currDy, &
+ USE_O3_FROM_MET = Input_Opt%Use_O3_From_Met, &
+ TO3 = State_Met(LCHNK)%TO3, &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Compute_Overhead_O3"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+ ENDIF
+ ENDIF
+
+ IF ( Input_Opt%Its_A_Fullchem_Sim .and. iH2O > 0 ) THEN
+ CALL Set_H2O_Trac( SETSTRAT = (.not. Input_Opt%LUCX), &
+ Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ ! Trap potential errors
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Set_H2O_Trac" #2!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+ ENDIF
+
+ ! Here, we apply surface mixing ratios for long-lived species
+ ! (copied from sfcvmr_mod.F90)
+ ! Loop over all objects
+ iSfcMrObj => SfcMrHead
+ DO WHILE( ASSOCIATED( iSfcMrObj ) )
+
+ ! Get concentration for this species
+ tmpIdx = pbuf_get_index(TRIM(iSfcMrObj%FldName), RC)
+ IF ( tmpIdx < 0 .OR. (iStep == 1) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(iSfcMrObj%FldName)
+ ELSE
+ CALL pbuf_get_field(pbuf, tmpIdx, pbuf_i)
+
+ ! Set mixing ratio in PBL
+ SpcInfo => State_Chm(LCHNK)%SpcData(iSfcMrObj%SpcID)%Info
+ N = SpcInfo%ModelID
+ IF ( N > 0 ) THEN
+ DO L = 1, nZ
+ DO J = 1, nY
+ IF ( State_Met(LCHNK)%F_UNDER_PBLTOP(1,J,L) > 0.0_fp ) THEN
+ State_Chm(LCHNK)%Species(1,J,L,N) = &
+ ( pbuf_i(J) * 1.0e-9_fp ) &
+ / ( MWDry / SpcInfo%MW_g )
+ ENDIF ! end selection of PBL boxes
+ ENDDO
+ ENDDO
+ ENDIF
+ ENDIF
+
+ ! Point to next element in list
+ iSfcMrObj => iSfcMrObj%Next
+ ENDDO
+
+ ! Reset photolysis rates
+ ZPJ = 0.0e+0_r8
+
+ ! Perform chemistry
+ CALL Do_Chemistry( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Diag = State_Diag(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ RC = RC )
+
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Do_Chemistry"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ! GEOS-Chem considers CO2 as a dead species and resets its concentration
+ ! internally. Right after the call to `Do_Chemistry`, State_Chm%Species(iCO2)
+ ! corresponds to the chemically-produced CO2. The real CO2 concentration
+ ! is thus the concentration before chemistry + the chemically-produced CO2.
+ State_Chm(LCHNK)%Species(1,:nY,:nZ,iCO2) = State_Chm(LCHNK)%Species(1,:nY,:nZ,iCO2) &
+ + MMR_Beg(:nY,:nZ,iCO2)
+
+ ! Make sure State_Chm(LCHNK) is back in kg/kg dry!
+ IF ( TRIM(State_Chm(LCHNK)%Spc_Units) /= 'kg/kg dry' ) THEN
+ Write(iulog,*) 'Current unit = ', TRIM(State_Chm(LCHNK)%Spc_Units)
+ Write(iulog,*) 'Expected unit = kg/ kg dry'
+ CALL ENDRUN('Incorrect unit in GEOS-Chem State_Chm%Species')
+ ENDIF
+
+ call t_stopf( 'chemdr' )
+
+ ! Save and write J-values to pbuf for HEMCO
+ ! in HCO_IN_JNO2, HCO_IN_JOH
+ FieldName = 'HCO_IN_JNO2'
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_i)
+
+ ! RXN_NO2: NO2 + hv --> NO + O
+ pbuf_i(:nY) = ZPJ(1,RXN_NO2,1,:nY)
+
+ pbuf_chnk => NULL()
+ pbuf_i => NULL()
+ ENDIF
+
+ FieldName = 'HCO_IN_JOH'
+ tmpIdx = pbuf_get_index(FieldName, RC)
+ IF ( tmpIdx < 0 .or. ( iStep == 1 ) ) THEN
+ IF ( rootChunk ) Write(iulog,*) "chem_timestep_tend: Field not found ", TRIM(FieldName)
+ ELSE
+ pbuf_chnk => pbuf_get_chunk(hco_pbuf2d, LCHNK)
+ CALL pbuf_get_field(pbuf_chnk, tmpIdx, pbuf_i)
+
+ IF ( Input_Opt%LUCX ) THEN
+ ! RXN_O3_1: O3 + hv --> O2 + O
+ pbuf_i(:nY) = ZPJ(1,RXN_O3_1,1,:nY)
+ ELSE
+ ! RXN_O3_2a: O3 + hv --> 2OH
+ pbuf_i(:nY) = ZPJ(1,RXN_O3_2a,1,:nY)
+ ENDIF
+ pbuf_chnk => NULL()
+ pbuf_i => NULL()
+ ENDIF
+
+ DO N = 1, gas_pcnst
+ ! See definition of map2chm
+ M = map2chm(N)
+ IF ( M > 0 ) THEN
+ vmr1(:nY,:nZ,N) = State_Chm(LCHNK)%Species(1,:nY,nZ:1:-1,M) * &
+ MWDry / adv_mass(N)
+ ELSEIF ( M < 0 ) THEN
+ vmr1(:nY,:nZ,N) = state%q(:nY,:nZ,-M) * &
+ MWDry / adv_mass(N)
+ ENDIF
+ ENDDO
+
+ !==============================================================
+ ! ***** M A M G A S - A E R O S O L E X C H A N G E *****
+ !==============================================================
+
+#if defined( MODAL_AERO )
+ ! Repartition SO4 into H2SO4 and so4_a*
+ IF ( l_H2SO4 > 0 .AND. l_SO4 > 0 ) THEN
+ P = l_H2SO4
+ ! SO4_gasRatio is mol(SO4) (gaseous) / mol(SO4) (gaseous+aerosol)
+ vmr1(:nY,:nZ,P) = SO4_gasRatio(:nY,:nZ) * vmr1(:nY,:nZ,l_SO4)
+ ! binRatio is mol(SO4) (current bin) / mol(SO4) (all bins)
+ DO M = 1, ntot_amode
+ N = lptr_so4_a_amode(M)
+ IF ( N <= 0 ) CYCLE
+ P = mapCnst(N)
+ vmr1(:nY,:nZ,P) = vmr1(:nY,:nZ,l_SO4) &
+ * ( 1.0_r8 - SO4_gasRatio(:nY,:nZ) ) &
+ * binRatio(iSulf(M),M,:nY,:nZ)
+ ENDDO
+ ENDIF
+
+ ! Amount of chemically-produced H2SO4 (mol/mol)
+ del_h2so4_gasprod(:nY,:nZ) = vmr1(:nY,:nZ,l_H2SO4) &
+ - vmr0(:nY,:nZ,l_H2SO4)
+
+ call aero_model_gasaerexch( loffset = iFirstCnst - 1, &
+ ncol = NCOL, &
+ lchnk = LCHNK, &
+ troplev = Trop_Lev(:), &
+ delt = dT, &
+ reaction_rates = reaction_rates, &
+ tfld = state%t(:,:), &
+ pmid = state%pmid(:,:), &
+ pdel = state%pdel(:,:), &
+ mbar = mBar, &
+ relhum = relHum(:,:), &
+ zm = state%zm(:,:), &
+ qh2o = qH2O(:,:), &
+ cwat = cldW, &
+ cldfr = cldFrc, &
+ cldnum = nCldWtr, &
+ airdens = invariants(:,:,indexm), &
+ invariants = invariants, &
+ del_h2so4_gasprod = del_h2so4_gasprod, &
+ vmr0 = vmr0, &
+ vmr = vmr1, &
+ pbuf = pbuf )
+
+ ! Repartition MAM SOAs following mapping:
+ ! TSOA0 + ASOAN + SOAIE + SOAGX -> soa1_a* + soa2_a*
+ ! TSOA1 + ASOA1 -> soa3_a*
+ ! TSOA2 + ASOA2 -> soa4_a*
+ ! TSOA3 + ASOA3 -> soa5_a*
+ ! TSOG0 -> SOAG0 + SOAG1
+ ! TSOG1 + ASOG1 -> SOAG2
+ ! TSOG2 + ASOG2 -> SOAG3
+ ! TSOG3 + ASOG3 -> SOAG4
+
+ ! Deal with aerosol SOA species
+ ! First deal with lowest two volatility bins
+ speciesName_1 = 'TSOA0'
+ speciesName_2 = 'ASOAN'
+ speciesName_2 = 'SOAIE'
+ speciesName_2 = 'SOAGX'
+ K1 = get_spc_ndx(TRIM(speciesName_1))
+ K2 = get_spc_ndx(TRIM(speciesName_2))
+ K3 = get_spc_ndx(TRIM(speciesName_3))
+ K4 = get_spc_ndx(TRIM(speciesName_4))
+ bulkMass(:nY,:nZ) = 0.0e+00_r8
+ DO iBin = 1, 2
+ DO M = 1, ntot_amode
+ N = lptr2_soa_a_amode(M,iBin)
+ IF ( N <= 0 ) CYCLE
+ bulkMass(:nY,:nZ) = bulkMass(:nY,:nZ) + state%q(:nY,:nZ,N)
+ ENDDO
+ ENDDO
+ DO iBin = 1, 2
+ DO M = 1, ntot_amode
+ N = lptr2_soa_a_amode(M,iBin)
+ IF ( N <= 0 ) CYCLE
+ P = mapCnst(N)
+ IF ( P > 0 .AND. K1 > 0 .AND. K2 > 0 .AND. K3 > 0 .AND. K4 > 0 ) THEN
+ vmr1(:nY,:nZ,P) = state%q(:nY,:nZ,N) / bulkMass(:nY,:nZ) &
+ * (vmr1(:nY,:nZ,K1) + vmr1(:nY,:nZ,K2) + &
+ vmr1(:nY,:nZ,K3) + vmr1(:nY,:nZ,K4))
+ ENDIF
+ ENDDO
+ ENDDO
+
+ ! Now deal with other volatility bins
+ DO iBin = 3, nsoa
+ IF ( iBin == 3 ) THEN
+ speciesName_1 = 'TSOA1'
+ speciesName_2 = 'ASOA1'
+ ELSEIF ( iBin == 4 ) THEN
+ speciesName_1 = 'TSOA2'
+ speciesName_2 = 'ASOA2'
+ ELSEIF ( iBin == 5 ) THEN
+ speciesName_1 = 'TSOA3'
+ speciesName_2 = 'ASOA3'
+ ENDIF
+ K1 = get_spc_ndx(TRIM(speciesName_1))
+ K2 = get_spc_ndx(TRIM(speciesName_2))
+ bulkMass(:nY,:nZ) = 0.0e+00_r8
+ DO M = 1, ntot_amode
+ N = lptr2_soa_a_amode(M,iBin)
+ IF ( N <= 0 ) CYCLE
+ bulkMass(:nY,:nZ) = bulkMass(:nY,:nZ) + state%q(:nY,:nZ,N)
+ ENDDO
+ DO M = 1, ntot_amode
+ N = lptr2_soa_a_amode(M,iBin)
+ IF ( N <= 0 ) CYCLE
+ P = mapCnst(N)
+ IF ( P > 0 .AND. K1 > 0 .AND. K2 > 0 ) THEN
+ vmr1(:nY,:nZ,P) = state%q(:nY,:nZ,N) / bulkMass(:nY,:nZ) &
+ * (vmr1(:nY,:nZ,K1) + vmr1(:nY,:nZ,K2))
+ ENDIF
+ ENDDO
+ ENDDO
+
+ ! Now deal with gaseous SOA species
+ ! Deal with lowest two volatility bins
+ speciesName_1 = 'TSOG0'
+ K1 = get_spc_ndx(TRIM(speciesName_1))
+ N = lptr2_soa_g_amode(1)
+ P = mapCnst(N)
+ vmr1(:nY,:nZ,P) = vmr0(:nY,:nZ,P) / (vmr0(:nY,:nZ,P) + vmr0(:nY,:nZ,mapCnst(lptr2_soa_g_amode(2)))) &
+ * vmr1(:nY,:nZ,K1)
+ N = lptr2_soa_g_amode(2)
+ P = mapCnst(N)
+ vmr1(:nY,:nZ,P) = vmr0(:nY,:nZ,P) / (vmr0(:nY,:nZ,P) + vmr0(:nY,:nZ,mapCnst(lptr2_soa_g_amode(1)))) &
+ * vmr1(:nY,:nZ,K1)
+
+ ! Deal with other volatility bins
+ DO iBin = 3, nsoa
+ N = lptr2_soa_g_amode(iBin)
+ P = mapCnst(N)
+ IF ( iBin == 3 ) THEN
+ speciesName_1 = 'TSOG1'
+ speciesName_2 = 'ASOG1'
+ ELSEIF ( iBin == 4 ) THEN
+ speciesName_1 = 'TSOG2'
+ speciesName_2 = 'ASOG2'
+ ELSEIF ( iBin == 5 ) THEN
+ speciesName_1 = 'TSOG3'
+ speciesName_2 = 'ASOG3'
+ ENDIF
+ K1 = get_spc_ndx(TRIM(speciesName_1))
+ K2 = get_spc_ndx(TRIM(speciesName_2))
+ IF ( P > 0 .AND. K1 > 0 .AND. K2 > 0 ) vmr1(:nY,:nZ,P) = vmr1(:nY,:nZ,K1) + vmr1(:nY,:nZ,K2)
+ ENDDO
+
+#endif
+
+ !==============================================================
+ ! ***** W E T D E P O S I T I O N (rainout + washout) *****
+ !==============================================================
+ IF ( Input_Opt%LWetD ) THEN
+
+ IF ( gas_wetdep_method == 'NEU' ) THEN
+ CALL Neu_wetdep_tend( LCHNK = LCHNK, &
+ NCOL = NCOL, &
+ mmr = state%q, &
+ pmid = state%pmid, &
+ pdel = state%pdel, &
+ zint = state%zi, &
+ tfld = state%t, &
+ delt = dT, &
+ prain = PRain, &
+ nevapr = NEvapr, &
+ cld = cldFrc, &
+ cmfdqr = cmfdqr, &
+ wd_tend = ptend%q, &
+ wd_tend_int = wetdepflx )
+ ELSE
+ ErrMsg = 'Unknown gas_wetdep_method '//TRIM(gas_wetdep_method)
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ ENDIF
+
+ !==============================================================
+ ! ***** B O U N D A R Y C O N D I T I O N S *****
+ !==============================================================
+ ! Set boundary conditions of long-lived species (most likely
+ ! CH4, OCS, N2O, CFC11, CFC12).
+ ! Note: This will overwrite the UCX boundary conditions
+
+ CALL flbc_set( vmr1(:nY,:nZ,:), nY, LCHNK, mapCnst )
+
+ IF ( ghg_chem ) THEN
+ CALL ghg_chem_set_flbc( vmr1, nY )
+ ENDIF
+
+ DO N = 1, gas_pcnst
+ ! See definition of map2chm
+ M = map2chm(N)
+ IF ( M <= 0 ) CYCLE
+ State_Chm(LCHNK)%Species(1,:nY,nZ:1:-1,M) = vmr1(:nY,:nZ,N) * &
+ adv_mass(N) / MWDry
+ ENDDO
+
+ ! Make sure State_Chm(LCHNK) is back in kg/kg dry!
+ IF ( TRIM(State_Chm(LCHNK)%Spc_Units) /= 'kg/kg dry' ) THEN
+ Write(iulog,*) 'Current unit = ', TRIM(State_Chm(LCHNK)%Spc_Units)
+ Write(iulog,*) 'Expected unit = kg/ kg dry'
+ CALL ENDRUN('Incorrect unit in GEOS-Chem State_Chm%Species')
+ ENDIF
+
+ ! Reset H2O MMR to the initial value (no chemistry tendency in H2O just yet)
+ State_Chm(LCHNK)%Species(1,:,:,iH2O) = MMR_Beg(:,:,iH2O)
+
+ ! Store unadvected species data
+ SlsData = 0.0e+0_r8
+ DO N = 1, nSls
+ M = map2GC_Sls(N)
+ IF ( M <= 0 ) CYCLE
+ SlsData(:nY,nZ:1:-1,N) = REAL(State_Chm(LCHNK)%Species(1,:nY,:nZ,M),r8)
+ ENDDO
+ CALL set_short_lived_species( SlsData, LCHNK, nY, pbuf )
+
+ ! Apply tendencies to GEOS-Chem species
+ DO N = 1, pcnst
+ M = map2GC(N)
+ IF ( M <= 0 ) CYCLE
+ ! Add change in mass mixing ratio to tendencies.
+ ! For NEU wet deposition, the wet removal rates are added to
+ ! ptend.
+ MMR_End(:nY,:nZ,M) = REAL(State_Chm(LCHNK)%Species(1,:nY,:nZ,M),r8)
+ ptend%q(:nY,nZ:1:-1,N) = ptend%q(:nY,nZ:1:-1,N) &
+ + (MMR_End(:nY,:nZ,M)-MMR_Beg(:nY,:nZ,M))/dT
+ ENDDO
+
+#if defined( MODAL_AERO )
+ ! Here apply tendencies to MAM aerosols
+ ! Initial mass in bin SM is stored as state%q(N)
+ ! Final mass in bin SM is stored as binRatio(SM,M) * State_Chm(P)
+ !
+ ! We decide to apply chemical tendencies to all MAM aerosols,
+ ! except so4, for which the chemically-produced sulfate gets
+ ! partitioned in aero_model_gasaerexch.
+ DO M = 1, ntot_amode
+ DO SM = 1, nspec_amode(M)
+ N = lmassptr_amode(SM,M)
+ P = mapCnst(N)
+ IF ( P <= 0 ) CYCLE
+ ! Apply tendency from MAM gasaerexch
+ ptend%q(:nY,:nZ,N) = ptend%q(:nY,:nZ,N) &
+ + (vmr1(:nY,:nZ,P) - vmr0(:nY,:nZ,P))/dT &
+ * adv_mass(P) / MWDry
+ P = map2MAM4(SM,M)
+ IF ( P <= 0 ) CYCLE
+ K = map2GC(P)
+ IF ( K <= 0 .or. K == iSO4 ) CYCLE
+ ! Apply MAM4 chemical tendencies owing to GEOS-Chem aerosol processing
+ ptend%q(:nY,:nZ,N) = ptend%q(:nY,:nZ,N) &
+ + (binRatio(SM,M,:nY,:nZ) * &
+ REAL(State_Chm(LCHNK)%Species(1,:nY,nZ:1:-1,K),r8) &
+ * adv_mass(mapCnst(N)) / adv_mass(mapCnst(P)) &
+ - state%q(:nY,:nZ,N))/dT
+ ENDDO
+ N = numptr_amode(M)
+ P = mapCnst(N)
+ IF ( P <= 0 ) CYCLE
+ ptend%q(:nY,:nZ,N) = ptend%q(:nY,:nZ,N) &
+ + (vmr1(:nY,:nZ,P) - vmr0(:nY,:nZ,P))/dT &
+ * adv_mass(P) / MWDry
+ ENDDO
+ N = cH2SO4
+ P = l_H2SO4
+ IF ( P > 0 ) THEN
+ ptend%q(:nY,:nZ,N) = ptend%q(:nY,:nZ,N) &
+ + (vmr1(:nY,:nZ,P) - vmr0(:nY,:nZ,P))/dT &
+ * adv_mass(P) / MWDry
+ ENDIF
+ DO iBin = 1, nsoa
+ N = lptr2_soa_g_amode(iBin)
+ P = mapCnst(N)
+ IF ( P > 0 ) THEN
+ ptend%q(:nY,:nZ,N) = ptend%q(:nY,:nZ,N) &
+ + (vmr1(:nY,:nZ,P) - vmr0(:nY,:nZ,P))/dT &
+ * adv_mass(P) / MWDry
+ ENDIF
+ ENDDO
+#endif
+
+ DO N = 1, gas_pcnst
+ ! See definition of map2chm
+ M = map2chm(N)
+ IF ( M > 0 ) THEN
+ mmr_tend(:nY,:nZ,N) = ( REAL(State_Chm(LCHNK)%Species(1,:nY,nZ:1:-1,M),r8) - mmr_tend(:nY,:nZ,N) ) / dT
+ ELSEIF ( M < 0 ) THEN
+ mmr_tend(:nY,:nZ,N) = ptend%q(:nY,:nZ,-M)
+ ENDIF
+ ENDDO
+
+ IF ( Input_Opt%applyQtend ) THEN
+ ! Apply GEOS-Chem's H2O mixing ratio tendency to CAM's specific humidity
+ ! This requires to set lq(cQ) = lq(cH2O) ( = .True. )
+ ptend%q(:,:,cQ) = ptend%q(:,:,cH2O)
+ ENDIF
+
+ CALL CESMGC_Diag_Calc( Input_Opt = Input_Opt, &
+ State_Chm = State_Chm(LCHNK), &
+ State_Diag = State_Diag(LCHNK), &
+ State_Grid = State_Grid(LCHNK), &
+ State_Met = State_Met(LCHNK), &
+ cam_in = cam_in, &
+ state = state, &
+ mmr_tend = mmr_tend, &
+ LCHNK = LCHNK )
+
+ IF ( ghg_chem ) THEN
+ ptend%lq(1) = .True.
+ CALL outfld( 'CT_H2O_GHG', ptend%q(:,:,1), PCOLS, LCHNK )
+ ENDIF
+
+ !! Debug statements
+ !! Ozone tendencies
+ !IF ( rootChunk ) THEN
+ ! Write(iulog,*) " MMR_Beg = ", MMR_Beg(1,:,iO3)
+ ! Write(iulog,*) " MMR_End = ", MMR_End(1,:,iO3)
+ !ENDIF
+
+ IF (PRESENT(fh2o)) THEN
+ fh2o(:nY) = 0.0e+0_r8
+ !DO L = 1, nZ
+ ! fh2o(:nY) = fh2o(:nY) + ptend%q(:nY,L,iH2O)*state%pdel(:nY,L)/Gravit
+ !ENDDO
+ ENDIF
+
+ ! Nullify all pointers
+ Nullify(PblH )
+ Nullify(Fsds )
+ Nullify(PRain )
+ Nullify(LsFlxSnw)
+ Nullify(LsFlxPrc)
+ Nullify(cldTop )
+ Nullify(cldFrc )
+ Nullify(NEvapr )
+ Nullify(cmfdqr )
+
+ IF ( rootChunk ) WRITE(iulog,*) ' GEOS-Chem Chemistry step ', iStep, ' completed'
+ IF ( lastChunk ) WRITE(iulog,*) ' Chemistry completed on all chunks completed of MasterProc'
+
+ end subroutine chem_timestep_tend
+
+!===============================================================================
+
+ subroutine chem_init_cnst(name, latvals, lonvals, mask, q)
+
+ CHARACTER(LEN=*), INTENT(IN) :: name ! constituent name
+ REAL(r8), INTENT(IN) :: latvals(:) ! lat in degrees (NCOL)
+ REAL(r8), INTENT(IN) :: lonvals(:) ! lon in degrees (NCOL)
+ LOGICAL, INTENT(IN) :: mask(:) ! Only initialize where .true.
+ REAL(r8), INTENT(OUT) :: q(:,:) ! kg tracer/kg dry air (NCOL, PVER)
+ ! Used to initialize tracer fields if desired.
+ ! Will need a simple mapping structure as well as the CAM tracer registration
+ ! routines.
+
+ INTEGER :: ilev, nlev, M
+ REAL(r8) :: QTemp, Min_MMR
+
+ nlev = SIZE(q, 2)
+
+ ! Retrieve a "background value" for this from the database
+ Min_MMR = 1.0e-38_r8
+ CALL cnst_get_ind(TRIM(name), M, abort=.False.)
+ IF ( M > 0 ) Min_MMR = ref_MMR(M)
+
+ DO ilev = 1, nlev
+ WHERE(mask)
+ ! Set to the minimum mixing ratio
+ q(:,ilev) = Min_MMR
+ END WHERE
+ ENDDO
+
+ end subroutine chem_init_cnst
+
+!===============================================================================
+
+ subroutine chem_final
+
+ use Input_Opt_Mod, only : Cleanup_Input_Opt
+ use State_Chm_Mod, only : Cleanup_State_Chm
+ use State_Diag_Mod, only : Cleanup_State_Diag
+ use State_Grid_Mod, only : Cleanup_State_Grid
+ use State_Met_Mod, only : Cleanup_State_Met
+ use Error_Mod, only : Cleanup_Error
+
+ use FlexChem_Mod, only : Cleanup_FlexChem
+ use UCX_Mod, only : Cleanup_UCX
+ use Drydep_Mod, only : Cleanup_Drydep
+ use Carbon_Mod, only : Cleanup_Carbon
+ use Dust_Mod, only : Cleanup_Dust
+ use Seasalt_Mod, only : Cleanup_Seasalt
+ use Aerosol_Mod, only : Cleanup_Aerosol
+ use Sulfate_Mod, only : Cleanup_Sulfate
+ use Pressure_Mod, only : Cleanup_Pressure
+ use Strat_Chem_Mod, only : Cleanup_Strat_Chem
+
+ use CMN_Size_Mod, only : Cleanup_CMN_Size
+ use CMN_FJX_Mod, only : Cleanup_CMN_FJX
+
+#ifdef BPCH_DIAG
+ use CMN_O3_Mod, only : Cleanup_CMN_O3
+ ! Special: cleans up after NDXX_Setup
+ use Diag_Mod, only : Cleanup_Diag
+#endif
+
+ use CESMGC_Emissions_Mod, only: CESMGC_Emissions_Final
+
+ ! Local variables
+ INTEGER :: I, RC
+
+ ! Finalize GEOS-Chem
+
+ CALL Cleanup_UCX
+ CALL Cleanup_Aerosol
+ CALL Cleanup_Carbon
+ CALL Cleanup_Drydep
+ CALL Cleanup_Dust
+ CALL Cleanup_FlexChem( RC )
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Cleanup_FlexChem"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ CALL Cleanup_Pressure
+ CALL Cleanup_Seasalt
+ CALL Cleanup_Sulfate
+ CALL Cleanup_Strat_Chem
+
+ CALL CESMGC_Emissions_Final
+
+ CALL Cleanup_CMN_SIZE( RC )
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Cleanup_CMN_SIZE"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+ CALL Cleanup_CMN_FJX( RC )
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Cleanup_CMN_FJX"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+
+#ifdef BPCH_DIAG
+ CALL Cleanup_Diag
+
+ ! Call extra cleanup routines, from modules in Headers/
+ CALL Cleanup_CMN_O3( RC )
+ IF ( RC /= GC_SUCCESS ) THEN
+ ErrMsg = 'Error encountered in "Cleanup_CMN_O3"!'
+ CALL Error_Stop( ErrMsg, ThisLoc )
+ ENDIF
+#endif
+
+ ! Cleanup Input_Opt
+ CALL Cleanup_Input_Opt( Input_Opt, RC )
+
+ ! Loop over each chunk and cleanup the variables
+ DO I = BEGCHUNK, ENDCHUNK
+ CALL Cleanup_State_Chm ( State_Chm(I), RC )
+ CALL Cleanup_State_Diag( State_Diag(I), RC )
+ CALL Cleanup_State_Grid( State_Grid(I), RC )
+ CALL Cleanup_State_Met ( State_Met(I), RC )
+ ENDDO
+ CALL Cleanup_Error
+
+ ! Finally deallocate state variables
+ IF ( ALLOCATED( State_Chm ) ) DEALLOCATE( State_Chm )
+ IF ( ALLOCATED( State_Diag ) ) DEALLOCATE( State_Diag )
+ IF ( ALLOCATED( State_Grid ) ) DEALLOCATE( State_Grid )
+ IF ( ALLOCATED( State_Met ) ) DEALLOCATE( State_Met )
+
+ IF ( ALLOCATED( slvd_Lst ) ) DEALLOCATE( slvd_Lst )
+ IF ( ALLOCATED( slvd_ref_MMR ) ) DEALLOCATE( slvd_ref_MMR )
+
+ RETURN
+
+ end subroutine chem_final
+
+!===============================================================================
+
+ subroutine chem_init_restart(File)
+ use tracer_cnst, only: init_tracer_cnst_restart
+ use tracer_srcs, only: init_tracer_srcs_restart
+ use pio, only : file_desc_t
+
+ IMPLICIT NONE
+
+ TYPE(file_desc_t) :: File
+
+ IF (MasterProc) WRITE(iulog,'(a)') 'GCCALL CHEM_INIT_RESTART'
+
+ !
+ ! data for offline tracers
+ !
+ call init_tracer_cnst_restart(File)
+ call init_tracer_srcs_restart(File)
+ !call init_linoz_data_restart(File)
+
+ end subroutine chem_init_restart
+
+!===============================================================================
+
+ subroutine chem_write_restart( File )
+ use tracer_cnst, only: write_tracer_cnst_restart
+ use tracer_srcs, only: write_tracer_srcs_restart
+ !use linoz_data, only: write_linoz_data_restart
+ use pio, only : file_desc_t
+
+ IMPLICIT NONE
+
+ TYPE(file_desc_t) :: File
+
+ IF ( MasterProc ) WRITE(iulog,'(a)') 'GCCALL CHEM_WRITE_RESTART'
+ !
+ ! data for offline tracers
+ !
+ call write_tracer_cnst_restart(File)
+ call write_tracer_srcs_restart(File)
+ !call write_linoz_data_restart(File)
+ end subroutine chem_write_restart
+
+!===============================================================================
+
+ subroutine chem_read_restart( File )
+ use tracer_cnst, only: read_tracer_cnst_restart
+ use tracer_srcs, only: read_tracer_srcs_restart
+ !use linoz_data, only: read_linoz_data_restart
+ use pio, only : file_desc_t
+
+ IMPLICIT NONE
+
+ TYPE(file_desc_t) :: File
+
+ IF ( MasterProc ) WRITE(iulog,'(a)') 'GCCALL CHEM_READ_RESTART'
+ !
+ ! data for offline tracers
+ !
+ call read_tracer_cnst_restart(File)
+ call read_tracer_srcs_restart(File)
+ !call read_linoz_data_restart(File)
+ end subroutine chem_read_restart
+
+!================================================================================
+
+ subroutine chem_emissions( state, cam_in )
+
+ use camsrfexch, only : cam_in_t
+
+ ! Arguments:
+
+ TYPE(physics_state), INTENT(IN) :: state ! Physics state variables
+ TYPE(cam_in_t), INTENT(INOUT) :: cam_in ! import state
+
+ INTEGER :: M, N
+ INTEGER :: LCHNK, nY
+ LOGICAL :: rootChunk
+
+
+ ! LCHNK: which chunk we have on this process
+ LCHNK = state%LCHNK
+ ! NCOL: number of atmospheric columns on this chunk
+ nY = state%NCOL
+ rootChunk = ( MasterProc.and.(LCHNK.EQ.BEGCHUNK) )
+
+ !-----------------------------------------------------------------------
+ ! Reset surface fluxes
+ !-----------------------------------------------------------------------
+
+ DO M = iFirstCnst, pcnst
+ !N = map2chm(M)
+ !IF ( N > 0 ) cam_in%cflx(1:nY,N) = 0.0e+0_r8
+ cam_in%cflx(1:nY,M) = 0.0e+0_r8
+ ENDDO
+
+ end subroutine chem_emissions
+
+!===============================================================================
+
+end module chemistry
diff --git a/src/chemistry/geoschem/clybry_fam.F90 b/src/chemistry/geoschem/clybry_fam.F90
new file mode 100644
index 0000000000..d53a32fdf0
--- /dev/null
+++ b/src/chemistry/geoschem/clybry_fam.F90
@@ -0,0 +1,180 @@
+!-----------------------------------------------------------------------
+!
+! Manages the adjustment of ClOy and BrOy family components in response
+! to conservation issues resulting from advection.
+!
+! Created by: Francis Vitt
+! Date: 21 May 2008
+! Modified by Stacy Walters
+! Date: 13 August 2008
+!-----------------------------------------------------------------------
+
+module clybry_fam
+
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use ppgrid, only : pcols, pver
+ use chem_mods, only : gas_pcnst, adv_mass
+ use constituents, only : pcnst
+ use short_lived_species,only: set_short_lived_species,get_short_lived_species
+
+ implicit none
+
+ save
+
+ private
+ public :: clybry_fam_set
+ public :: clybry_fam_adj
+ public :: clybry_fam_init
+
+ integer :: id_cly,id_bry
+
+ integer :: id_cl,id_clo,id_hocl,id_cl2,id_cl2o2,id_oclo,id_hcl,id_clono2
+ integer :: id_br,id_bro,id_hbr,id_brono2,id_brcl,id_hobr
+
+ logical :: has_clybry
+
+contains
+
+ !------------------------------------------
+ !------------------------------------------
+ subroutine clybry_fam_init
+
+ !use mo_chem_utls, only : get_spc_ndx
+ implicit none
+
+ integer :: ids(16)
+
+ !id_cly = get_spc_ndx('CLY')
+ !id_bry = get_spc_ndx('BRY')
+
+ !id_cl = get_spc_ndx('CL')
+ !id_clo = get_spc_ndx('CLO')
+ !id_hocl = get_spc_ndx('HOCL')
+ !id_cl2 = get_spc_ndx('CL2')
+ !id_cl2o2 = get_spc_ndx('CL2O2')
+ !id_oclo = get_spc_ndx('OCLO')
+ !id_hcl = get_spc_ndx('HCL')
+ !id_clono2 = get_spc_ndx('CLONO2')
+
+ !id_br = get_spc_ndx('BR')
+ !id_bro = get_spc_ndx('BRO')
+ !id_hbr = get_spc_ndx('HBR')
+ !id_brono2 = get_spc_ndx('BRONO2')
+ !id_brcl = get_spc_ndx('BRCL')
+ !id_hobr = get_spc_ndx('HOBR')
+
+ !ids = (/ id_cly,id_bry, &
+ ! id_cl,id_clo,id_hocl,id_cl2,id_cl2o2,id_oclo,id_hcl,id_clono2, &
+ ! id_br,id_bro,id_hbr,id_brono2,id_brcl,id_hobr /)
+
+ !has_clybry = all( ids(:) > 0 )
+
+ endsubroutine clybry_fam_init
+
+!--------------------------------------------------------------
+! set the ClOy and BrOy mass mixing ratios
+! - this is call before advection
+!--------------------------------------------------------------
+ subroutine clybry_fam_set( ncol, lchnk, map2chm, q, pbuf )
+
+ use time_manager, only : get_nstep
+ use physics_buffer, only : physics_buffer_desc
+
+ implicit none
+
+!--------------------------------------------------------------
+! ... dummy arguments
+!--------------------------------------------------------------
+ integer, intent(in) :: ncol, lchnk
+ integer, intent(in) :: map2chm(pcnst)
+ real(r8), intent(inout) :: q(pcols,pver,pcnst)
+ type(physics_buffer_desc), pointer :: pbuf(:)
+
+ !real(r8) :: wrk(ncol,pver,2)
+ !real(r8) :: mmr(pcols,pver,gas_pcnst)
+ !integer :: n, m
+
+ if (.not. has_clybry) return
+
+ end subroutine clybry_fam_set
+
+!--------------------------------------------------------------
+! adjust the ClOy and BrOy individual family members
+! - this is call after advection
+!--------------------------------------------------------------
+ subroutine clybry_fam_adj( ncol, lchnk, map2chm, q, pbuf )
+
+ use time_manager, only : is_first_step
+ use physics_buffer, only : physics_buffer_desc
+
+ implicit none
+
+!--------------------------------------------------------------
+! ... dummy arguments
+!--------------------------------------------------------------
+ integer, intent(in) :: ncol, lchnk
+ integer, intent(in) :: map2chm(pcnst)
+ real(r8), intent(inout) :: q(pcols,pver,pcnst)
+ type(physics_buffer_desc), pointer :: pbuf(:)
+
+ end subroutine clybry_fam_adj
+
+!--------------------------------------------------------------
+! private methods
+!--------------------------------------------------------------
+
+!--------------------------------------------------------------
+! compute the mass mixing retio of ClOy
+!--------------------------------------------------------------
+ function cloy( q, pcols, ncol )
+
+!--------------------------------------------------------------
+! ... dummy arguments
+!--------------------------------------------------------------
+ integer, intent(in) :: pcols
+ integer, intent(in) :: ncol
+ real(r8), intent(in) :: q(pcols,pver,gas_pcnst)
+
+!--------------------------------------------------------------
+! ... function declaration
+!--------------------------------------------------------------
+ real(r8) :: cloy(ncol,pver)
+
+!--------------------------------------------------------------
+! ... local variables
+!--------------------------------------------------------------
+ real(r8) :: wrk(ncol)
+ integer :: k
+
+ cloy = 0._r8
+
+ end function cloy
+
+!--------------------------------------------------------------
+! compute the mass mixing retio of BrOy
+!--------------------------------------------------------------
+ function broy( q, pcols, ncol )
+
+!--------------------------------------------------------------
+! ... dummy arguments
+!--------------------------------------------------------------
+ integer, intent(in) :: pcols
+ integer, intent(in) :: ncol
+ real(r8), intent(in) :: q(pcols,pver,gas_pcnst)
+
+!--------------------------------------------------------------
+! ... function declaration
+!--------------------------------------------------------------
+ real(r8) :: broy(ncol,pver)
+
+!--------------------------------------------------------------
+! ... local variables
+!--------------------------------------------------------------
+ real(r8) :: wrk(ncol)
+ integer :: k
+
+ broy = 0._r8
+
+ end function broy
+
+end module clybry_fam
diff --git a/src/chemistry/geoschem/epp_ionization.F90 b/src/chemistry/geoschem/epp_ionization.F90
new file mode 100644
index 0000000000..98276cd5f3
--- /dev/null
+++ b/src/chemistry/geoschem/epp_ionization.F90
@@ -0,0 +1,508 @@
+!-------------------------------------------------------------------------------
+! Energetic Particle Precipitation (EPP) forcings module
+! Manages ionization of the atmosphere due to energetic particles, which consists of
+! solar protons events (SPE), galactic cosmic rays(GCR), medium energy electrons (MEE)
+!-------------------------------------------------------------------------------
+module epp_ionization
+ use shr_kind_mod, only : r8 => shr_kind_r8, cs => shr_kind_cs, cl=> shr_kind_cl
+ use spmd_utils, only : masterproc
+ use cam_abortutils, only : endrun
+ use cam_logfile, only : iulog
+ use phys_grid, only : pcols, pver, begchunk, endchunk, get_ncols_p
+ use pio, only : var_desc_t, file_desc_t
+ use pio, only : pio_get_var, pio_inq_varid, pio_get_att
+ use pio, only : pio_inq_varndims, pio_inq_vardimid, pio_inq_dimname, pio_inq_dimlen
+ use pio, only : PIO_NOWRITE
+ use cam_pio_utils, only : cam_pio_openfile
+ use ioFileMod, only : getfil
+ use input_data_utils, only : time_coordinate
+
+ implicit none
+ private
+
+ public :: epp_ionization_readnl ! read namelist variables
+ public :: epp_ionization_init ! initialization
+ public :: epp_ionization_adv ! read and time/space interpolate the data
+ public :: epp_ionization_ionpairs! ion pairs production rates
+ public :: epp_ionization_setmag ! update geomagnetic coordinates mapping
+ public :: epp_ionization_active
+
+ character(len=cl) :: epp_all_filepath = 'NONE'
+ character(len=cs) :: epp_all_varname = 'epp_ion_rates'
+ character(len=cl) :: epp_mee_filepath = 'NONE'
+ character(len=cs) :: epp_mee_varname = 'iprm'
+ character(len=cl) :: epp_spe_filepath = 'NONE'
+ character(len=cs) :: epp_spe_varname = 'iprp'
+ character(len=cl) :: epp_gcr_filepath = 'NONE'
+ character(len=cs) :: epp_gcr_varname = 'iprg'
+
+ logical, protected :: epp_ionization_active = .false.
+
+ type input_obj_t
+ type(file_desc_t) :: fid
+ type(var_desc_t) :: vid
+ character(len=32) :: units
+ integer :: nlevs = 0
+ integer :: nglats = 0
+ real(r8), allocatable :: press(:)
+ real(r8), allocatable :: glats(:)
+ real(r8), allocatable :: gwght(:,:) ! (pcol, begchunk:endchunk)
+ integer, allocatable :: glatn(:,:) ! (pcol, begchunk:endchunk)
+ real(r8), allocatable :: indata(:,:,:,:) ! (pcol,nlevs,begchunk:endchunk,2) inputs at indexm and indexp
+ type(time_coordinate) :: time_coord
+ endtype input_obj_t
+
+ type(input_obj_t), pointer :: epp_in => null()
+ type(input_obj_t), pointer :: spe_in => null()
+ type(input_obj_t), pointer :: mee_in => null()
+ type(input_obj_t), pointer :: gcr_in => null()
+
+contains
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine epp_ionization_readnl(nlfile)
+
+ use namelist_utils, only: find_group_name
+ use units, only: getunit, freeunit
+ use spmd_utils, only: mpicom, mpi_character, masterprocid
+
+ character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
+
+ !! Local variables
+ !integer :: unitn, ierr
+ !character(len=*), parameter :: subname = 'epp_ionization_readnl'
+
+ !namelist /epp_ionization_nl/ epp_all_filepath, epp_all_varname, &
+ ! epp_mee_filepath, epp_mee_varname, epp_spe_filepath, epp_spe_varname, epp_gcr_filepath, epp_gcr_varname
+
+ !! Read namelist
+ !if (masterproc) then
+ ! unitn = getunit()
+ ! open( unitn, file=trim(nlfile), status='old' )
+ ! call find_group_name(unitn, 'epp_ionization_nl', status=ierr)
+ ! if (ierr == 0) then
+ ! read(unitn, epp_ionization_nl, iostat=ierr)
+ ! if (ierr /= 0) then
+ ! call endrun(subname // ':: ERROR reading namelist')
+ ! end if
+ ! end if
+ ! close(unitn)
+ ! call freeunit(unitn)
+ !end if
+
+ !! Broadcast namelist variables
+ !call mpi_bcast(epp_all_filepath, len(epp_all_filepath), mpi_character, masterprocid, mpicom, ierr)
+ !call mpi_bcast(epp_mee_filepath, len(epp_mee_filepath), mpi_character, masterprocid, mpicom, ierr)
+ !call mpi_bcast(epp_spe_filepath, len(epp_spe_filepath), mpi_character, masterprocid, mpicom, ierr)
+ !call mpi_bcast(epp_gcr_filepath, len(epp_gcr_filepath), mpi_character, masterprocid, mpicom, ierr)
+
+ !call mpi_bcast(epp_all_varname, len(epp_all_varname), mpi_character, masterprocid, mpicom, ierr)
+ !call mpi_bcast(epp_mee_varname, len(epp_mee_varname), mpi_character, masterprocid, mpicom, ierr)
+ !call mpi_bcast(epp_spe_varname, len(epp_spe_varname), mpi_character, masterprocid, mpicom, ierr)
+ !call mpi_bcast(epp_gcr_varname, len(epp_gcr_varname), mpi_character, masterprocid, mpicom, ierr)
+
+ !epp_ionization_active = epp_all_filepath /= 'NONE'
+ !epp_ionization_active = epp_mee_filepath /= 'NONE' .or. epp_ionization_active
+ !epp_ionization_active = epp_spe_filepath /= 'NONE' .or. epp_ionization_active
+ !epp_ionization_active = epp_gcr_filepath /= 'NONE' .or. epp_ionization_active
+
+ !if ( epp_ionization_active .and. masterproc ) then
+ ! write(iulog,*) subname//':: epp_all_filepath = '//trim(epp_all_filepath)
+ ! write(iulog,*) subname//':: epp_mee_filepath = '//trim(epp_mee_filepath)
+ ! write(iulog,*) subname//':: epp_spe_filepath = '//trim(epp_spe_filepath)
+ ! write(iulog,*) subname//':: epp_gcr_filepath = '//trim(epp_gcr_filepath)
+ !endif
+
+ end subroutine epp_ionization_readnl
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine epp_ionization_init()
+ !use cam_history, only : addfld
+
+ !character(len=32) :: fldunits
+ !fldunits = ''
+ !
+ !if (epp_all_filepath /= 'NONE') then
+ ! epp_in => create_input_obj(epp_all_filepath,epp_all_varname)
+ ! fldunits = trim(epp_in%units)
+ !else
+ ! if (epp_mee_filepath /= 'NONE') then
+ ! mee_in => create_input_obj(epp_mee_filepath,epp_mee_varname)
+ ! fldunits = trim(mee_in%units)
+ ! endif
+ ! if (epp_spe_filepath /= 'NONE') then
+ ! spe_in => create_input_obj(epp_spe_filepath,epp_spe_varname)
+ ! fldunits = trim(spe_in%units)
+ ! endif
+ ! if (epp_gcr_filepath /= 'NONE') then
+ ! gcr_in => create_input_obj(epp_gcr_filepath,epp_gcr_varname)
+ ! fldunits = trim(gcr_in%units)
+ ! endif
+ !endif
+ !call addfld( 'EPPions', (/ 'lev' /), 'A', fldunits, 'EPP ionization data' )
+
+ end subroutine epp_ionization_init
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine epp_ionization_setmag( maglat )
+ real(r8), intent(in) :: maglat(pcols,begchunk:endchunk)
+
+ if (.not.epp_ionization_active) return
+
+ !if ( associated(epp_in) ) then
+ ! call set_wghts(maglat,epp_in)
+ !else
+ ! if ( associated(mee_in) ) then
+ ! call set_wghts(maglat,mee_in)
+ ! endif
+ ! if ( associated(spe_in) ) then
+ ! call set_wghts(maglat,spe_in)
+ ! endif
+ ! if ( associated(gcr_in) ) then
+ ! call set_wghts(maglat,gcr_in)
+ ! endif
+ !endif
+
+ end subroutine epp_ionization_setmag
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine epp_ionization_adv
+
+ if (.not.epp_ionization_active) return
+
+ !if ( associated(epp_in) ) then
+ ! call update_input(epp_in)
+ !else
+ ! if ( associated(spe_in) ) then
+ ! call update_input(spe_in)
+ ! endif
+ ! if ( associated(gcr_in) ) then
+ ! call update_input(gcr_in)
+ ! endif
+ ! if ( associated(mee_in) ) then
+ ! call update_input(mee_in)
+ ! endif
+ !endif
+
+ end subroutine epp_ionization_adv
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine epp_ionization_ionpairs( ncol, lchnk, pmid, temp, ionpairs )
+
+ integer, intent(in) :: ncol, lchnk
+ real(r8), intent(in) :: pmid(:,:), temp(:,:)
+ real(r8), intent(out) :: ionpairs(:,:) ! ion pair production rate
+
+ ionpairs = 0._r8
+ if (.not.epp_ionization_active) return
+
+ !if ( associated(epp_in) ) then
+ ! ionpairs(:ncol,:) = ionpairs(:ncol,:) + interp_ionpairs( ncol, lchnk, pmid, temp, epp_in )
+ !else
+ ! if ( associated(spe_in) ) then
+ ! ionpairs(:ncol,:) = ionpairs(:ncol,:) + interp_ionpairs( ncol, lchnk, pmid, temp, spe_in )
+ ! endif
+ ! if ( associated(gcr_in) ) then
+ ! ionpairs(:ncol,:) = ionpairs(:ncol,:) + interp_ionpairs( ncol, lchnk, pmid, temp, gcr_in )
+ ! endif
+ ! if ( associated(mee_in) ) then
+ ! ionpairs(:ncol,:) = ionpairs(:ncol,:) + interp_ionpairs( ncol, lchnk, pmid, temp, mee_in )
+ ! endif
+ !endif
+
+ end subroutine epp_ionization_ionpairs
+
+ ! private methods
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine update_input( input )
+ type(input_obj_t), pointer :: input
+
+ if ( input%time_coord%read_more() ) then
+ call input%time_coord%advance()
+ call read_next_data( input )
+ else
+ call input%time_coord%advance()
+ endif
+
+ end subroutine update_input
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ subroutine read_next_data( input )
+ type(input_obj_t), pointer :: input
+
+ !! read data corresponding surrounding time indices
+ !if ( input%nglats > 0 ) then
+ ! call read_2d_profile( input )
+ !else
+ ! call read_1d_profile( input )
+ !endif
+
+ end subroutine read_next_data
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ function interp_ionpairs( ncol, lchnk, pmid, temp, input ) result( ionpairs )
+ use interpolate_data, only : lininterp
+ use physconst, only : rairv
+ use cam_history, only : outfld
+
+ integer, intent(in) :: ncol, lchnk
+ real(r8), intent(in) :: pmid(:,:) ! Pa
+ real(r8), intent(in) :: temp(:,:) ! K
+ type(input_obj_t), pointer :: input
+ real(r8) :: ionpairs(ncol,pver)
+
+ real(r8) :: fctr1, fctr2
+ real(r8) :: wrk(ncol,input%nlevs)
+ real(r8) :: ions_diags(ncol,pver) ! for diagnostics
+ integer :: i
+
+ !if (input%time_coord%time_interp) then
+ ! ! time interpolate
+ ! fctr1 = input%time_coord%wghts(1)
+ ! fctr2 = input%time_coord%wghts(2)
+ ! wrk(:ncol,:) = fctr1*input%indata(:ncol,:,lchnk,1) + fctr2*input%indata(:ncol,:,lchnk,2)
+ !else
+ ! wrk(:ncol,:) = input%indata(:ncol,:,lchnk,1)
+ !endif
+
+ !! vertical interpolate ...
+ !! interpolate to model levels
+ !do i = 1,ncol
+
+ ! ! interpolate over log pressure
+ ! call lininterp( wrk(i,:input%nlevs), log(input%press(:input%nlevs)*1.e2_r8), input%nlevs, &
+ ! ionpairs(i,:pver), log(pmid(i,:pver)), pver )
+ ! ions_diags(i,:pver) = ionpairs(i,:pver)
+ !
+ ! if ( index(trim(input%units), 'g^-1') > 0 ) then
+ ! ! convert to ionpairs/cm3/sec
+ ! ionpairs(i,:pver) = ionpairs(i,:pver) *(1.e-3_r8*pmid(i,:pver)/(rairv(i,:pver,lchnk)*temp(i,:pver)))
+ ! endif
+ !enddo
+
+ !call outfld( 'EPPions', ions_diags(:ncol,:), ncol, lchnk )
+
+ end function interp_ionpairs
+
+ !-----------------------------------------------------------------------------
+ ! read 2D profile (geomag-lat vs press) and transfer to geographic grid
+ !-----------------------------------------------------------------------------
+ subroutine read_2d_profile( input )
+
+ type(input_obj_t), pointer :: input
+
+ ! local vars
+ real(r8) :: wrk2d( input%nglats, input%nlevs, 2 )
+ integer :: t, c, i, ntimes, ncols, ierr
+ real(r8) :: wght1, wght2
+ integer :: gndx1, gndx2
+ integer :: cnt(3), strt(3)
+
+ !if (input%time_coord%time_interp) then
+ ! ntimes = 2
+ !else
+ ! ntimes = 1
+ !endif
+
+ !cnt(1) = input%nglats
+ !cnt(2) = input%nlevs
+ !cnt(3) = ntimes
+
+ !strt(:) = 1
+ !strt(3) = input%time_coord%indxs(1)
+
+ !ierr = pio_get_var( input%fid, input%vid, strt, cnt, wrk2d )
+
+ !do t = 1,ntimes
+ ! do c=begchunk,endchunk
+ ! ncols = get_ncols_p(c)
+ ! do i = 1,ncols
+ ! gndx1 = input%glatn(i,c)
+ ! if (gndx1>0) then
+ ! wght1 = input%gwght(i,c)
+ ! gndx2 = gndx1+1
+ ! if (gndx2.le.input%nglats) then
+ ! wght2 = 1._r8-wght1
+ ! input%indata(i,:,c,t) = wght1*wrk2d(gndx1,:,t) &
+ ! + wght2*wrk2d(gndx2,:,t)
+ ! else
+ ! input%indata(i,:,c,t) = wght1*wrk2d(gndx1,:,t)
+ ! endif
+ ! else
+ ! input%indata(i,:,c,t) = 0._r8
+ ! endif
+ ! end do
+ ! end do
+ !end do
+
+ end subroutine read_2d_profile
+
+ !-----------------------------------------------------------------------------
+ ! read 1D vertical profile and transfer to geographic grid poleward of 60 degrees geomag-lat
+ !-----------------------------------------------------------------------------
+ subroutine read_1d_profile( input )
+
+ type(input_obj_t), pointer :: input
+
+ ! local vars
+ real(r8) :: wrk( input%nlevs, 2 )
+ integer :: t, c, i, ntimes, ncols, ierr
+ integer :: cnt(2), strt(2)
+
+ !if (input%time_coord%time_interp) then
+ ! ntimes = 2
+ !else
+ ! ntimes = 1
+ !endif
+
+ !cnt(1) = input%nlevs
+ !cnt(2) = ntimes
+
+ !strt(:) = 1
+ !strt(2) = input%time_coord%indxs(1)
+
+ !ierr = pio_get_var( input%fid, input%vid, strt, cnt, wrk )
+
+ !do t = 1,ntimes
+ ! do c=begchunk,endchunk
+ ! ncols = get_ncols_p(c)
+ ! do i = 1,ncols
+ ! input%indata(i,:,c,t) = input%gwght(i,c)*wrk(:,t)
+ ! end do
+ ! end do
+ !end do
+
+ end subroutine read_1d_profile
+
+ !-----------------------------------------------------------------------------
+ !-----------------------------------------------------------------------------
+ function create_input_obj( path, varname ) result(in_obj)
+ use infnan, only : nan, assignment(=)
+
+ character(*), intent(in) :: path
+ character(*), intent(in) :: varname
+ type(input_obj_t), pointer :: in_obj
+
+ character(len=cl) :: filen
+ character(len=cl) :: data_units
+ character(len=cs) :: dimname
+ integer :: i, ierr
+ integer, allocatable :: dimids(:)
+ integer :: pres_did, pres_vid, glat_did, glat_vid, ndims
+
+ if (path .eq. 'NONE') return
+
+ !allocate(in_obj)
+
+ !call in_obj%time_coord%initialize( path )
+
+ !call getfil( path, filen, 0 )
+ !call cam_pio_openfile( in_obj%fid, filen, PIO_NOWRITE )
+
+ !ierr = pio_inq_varid( in_obj%fid, varname, in_obj%vid )
+
+ !ierr = pio_get_att( in_obj%fid, in_obj%vid, 'units', data_units)
+ !in_obj%units = trim(data_units(1:32))
+
+ !ierr = pio_inq_varndims( in_obj%fid, in_obj%vid, ndims )
+ !allocate( dimids(ndims) )
+
+ !ierr = pio_inq_vardimid( in_obj%fid, in_obj%vid, dimids)
+ !pres_did = -1
+ !glat_did = -1
+ !do i = 1,ndims
+ ! ierr = pio_inq_dimname( in_obj%fid, dimids(i), dimname )
+ ! select case( trim(dimname(1:4)) )
+ ! case ( 'pres', 'lev', 'plev' )
+ ! pres_did = dimids(i)
+ ! ierr = pio_inq_varid( in_obj%fid, dimname, pres_vid)
+ ! case ( 'glat' )
+ ! glat_did = dimids(i)
+ ! ierr = pio_inq_varid( in_obj%fid, dimname, glat_vid)
+ ! case default
+ ! end select
+ !end do
+
+ !deallocate( dimids )
+
+ !if (pres_did>0) then
+ ! ierr = pio_inq_dimlen( in_obj%fid, pres_did, in_obj%nlevs )
+ ! allocate( in_obj%press(in_obj%nlevs) )
+ ! ierr = pio_get_var( in_obj%fid, pres_vid, in_obj%press )
+ !endif
+ !if (glat_did>0) then
+ ! ierr = pio_inq_dimlen( in_obj%fid, glat_did, in_obj%nglats )
+ ! allocate( in_obj%glats(in_obj%nglats) )
+ ! ierr = pio_get_var( in_obj%fid, glat_vid, in_obj%glats )
+ ! allocate( in_obj%glatn(pcols,begchunk:endchunk) )
+ !endif
+ !
+ !allocate( in_obj%gwght(pcols,begchunk:endchunk) )
+
+ !if (in_obj%time_coord%time_interp) then
+ ! allocate( in_obj%indata(pcols,in_obj%nlevs,begchunk:endchunk,2) )
+ !else
+ ! allocate( in_obj%indata(pcols,in_obj%nlevs,begchunk:endchunk,1) )
+ !endif
+ !in_obj%indata = nan
+
+ end function create_input_obj
+
+ !-----------------------------------------------------------------------
+ !-----------------------------------------------------------------------
+ subroutine set_wghts( maglat, input )
+
+ real(r8), intent(in) :: maglat(pcols,begchunk:endchunk)
+ type(input_obj_t), pointer :: input
+
+ integer :: i, c, ncols, imag
+
+ !if (input%nglats>1) then ! read in general EPP 2D ionpairs production rates
+ ! do c = begchunk,endchunk
+ ! ncols = get_ncols_p(c)
+ ! col_loop: do i = 1,ncols
+ ! if ( maglat(i,c) .lt. input%glats(1) ) then
+ ! input%glatn(i,c) = 1
+ ! input%gwght(i,c) = 1._r8
+ ! elseif ( maglat(i,c) .gt. input%glats(input%nglats) ) then
+ ! input%glatn(i,c) = input%nglats
+ ! input%gwght(i,c) = 1._r8
+ ! else
+ ! mag_loop: do imag = 1,input%nglats-1
+ ! if ( maglat(i,c) .ge. input%glats(imag) .and. &
+ ! maglat(i,c) .lt. input%glats(imag+1) ) then
+ ! input%gwght(i,c) = (input%glats(imag+1)-maglat(i,c) ) &
+ ! / (input%glats(imag+1)-input%glats(imag))
+ ! input%glatn(i,c) = imag
+ ! exit mag_loop
+ ! endif
+ ! enddo mag_loop
+ ! endif
+ ! enddo col_loop
+ ! enddo
+ !else ! read in 1D SPE ionpairs profile ...
+ ! do c = begchunk,endchunk
+ ! ncols = get_ncols_p(c)
+ ! do i = 1,ncols
+ ! if ( abs(maglat(i,c)) .ge. 60._r8 ) then ! poleward of 60 degrees
+ ! input%gwght(i,c) = 1._r8
+ ! else
+ ! input%gwght(i,c) = 0._r8
+ ! endif
+ ! enddo
+ ! enddo
+ !endif
+
+ !call read_next_data( input ) ! update the inputs when wghts are updated
+
+ end subroutine set_wghts
+
+end module epp_ionization
diff --git a/src/chemistry/geoschem/fire_emissions.F90 b/src/chemistry/geoschem/fire_emissions.F90
new file mode 120000
index 0000000000..7b9f50ff22
--- /dev/null
+++ b/src/chemistry/geoschem/fire_emissions.F90
@@ -0,0 +1 @@
+../mozart/fire_emissions.F90
\ No newline at end of file
diff --git a/src/chemistry/geoschem/gas_wetdep_opts.F90 b/src/chemistry/geoschem/gas_wetdep_opts.F90
new file mode 100644
index 0000000000..908e352239
--- /dev/null
+++ b/src/chemistry/geoschem/gas_wetdep_opts.F90
@@ -0,0 +1,79 @@
+!-----------------------------------------------------------------------
+! Reads namelist options for gas-phase wet deposition
+!
+! Created by Francis Vitt -- 22 Apr 2011
+!-----------------------------------------------------------------------
+module gas_wetdep_opts
+
+ use constituents, only : pcnst
+ use cam_logfile, only : iulog
+ use constituents, only : pcnst
+ use spmd_utils, only : masterproc
+ use cam_abortutils, only : endrun
+
+ implicit none
+
+ character(len=16), protected :: gas_wetdep_list(pcnst) = ' '
+ character(len=9), protected :: gas_wetdep_method = 'MOZ'
+ integer, protected :: gas_wetdep_cnt = 0
+
+contains
+
+ !-----------------------------------------------------------------------
+ !-----------------------------------------------------------------------
+
+ subroutine gas_wetdep_readnl(nlfile)
+
+ use cam_abortutils, only: endrun
+ use namelist_utils, only: find_group_name
+ use units, only: getunit, freeunit
+#ifdef SPMD
+ use mpishorthand, only: mpichar, mpicom
+#endif
+
+ implicit none
+
+ character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
+
+ integer :: unitn, i, ierr
+
+ namelist /wetdep_inparm/ gas_wetdep_list
+ namelist /wetdep_inparm/ gas_wetdep_method
+
+ if (masterproc) then
+ unitn = getunit()
+ open( unitn, file=trim(nlfile), status='old' )
+ call find_group_name(unitn, 'wetdep_inparm', status=ierr)
+ if (ierr == 0) then
+ read(unitn, wetdep_inparm, iostat=ierr)
+ if (ierr /= 0) then
+ call endrun('mo_neu_wetdep->wetdep_readnl: ERROR reading wetdep_inparm namelist')
+ end if
+ end if
+ close(unitn)
+ call freeunit(unitn)
+ end if
+
+#ifdef SPMD
+ call mpibcast (gas_wetdep_list, len(gas_wetdep_list(1))*pcnst, mpichar, 0, mpicom)
+ call mpibcast (gas_wetdep_method, len(gas_wetdep_method), mpichar, 0, mpicom)
+#endif
+
+ gas_wetdep_cnt = 0
+ do i = 1,pcnst
+ if ( len_trim(gas_wetdep_list(i)) > 0 ) then
+ gas_wetdep_cnt = gas_wetdep_cnt + 1
+ endif
+ enddo
+
+ if (( gas_wetdep_cnt>0 ).and. &
+ ( .not.(gas_wetdep_method=='MOZ' .or. &
+ gas_wetdep_method=='NEU' .or. &
+ gas_wetdep_method=='GEOS-CHEM' .or. &
+ gas_wetdep_method=='OFF') )) then
+ call endrun('gas_wetdep_readnl; gas_wetdep_method must be set to either MOZ, NEU or GEOS-CHEM')
+ endif
+
+ end subroutine gas_wetdep_readnl
+
+end module gas_wetdep_opts
diff --git a/src/chemistry/geoschem/getLandTypes.F90 b/src/chemistry/geoschem/getLandTypes.F90
new file mode 100644
index 0000000000..2a7ef31932
--- /dev/null
+++ b/src/chemistry/geoschem/getLandTypes.F90
@@ -0,0 +1,550 @@
+!------------------------------------------------------------------------------
+!BOP
+!
+! !ROUTINE: getLandTypes.F90
+!
+! !DESCRIPTION: Subroutine getLandTypes converts the land types and leaf
+! area indices from the land model to the LandTypeFrac and XLAI_NATIVE
+! arrays in GEOS-Chem.
+!
+! !INTERFACE:
+!
+ SUBROUTINE getLandTypes( cam_in, nY, State_Met )
+!
+! !USES:
+!
+ USE camsrfexch, ONLY : cam_in_t
+ USE State_Met_Mod, ONLY : MetState
+ USE seq_drydep_mod, ONLY : NPatch
+ USE shr_kind_mod, ONLY : r8 => shr_kind_r8
+ USE PRECISION_MOD, ONLY : fp, f4 ! Flexible precision
+ USE CMN_SIZE_Mod, ONLY : NSURFTYPE
+ USE cam_abortutils, ONLY : endrun
+
+ IMPLICIT NONE
+!
+! !INPUT PARAMETERS:
+!
+ TYPE(cam_in_t), INTENT(IN ) :: cam_in ! CAM
+ INTEGER, INTENT(IN ) :: nY ! Number of grid cells on chunk
+!
+! !INPUT/OUTPUT PARAMETERS:
+!
+ TYPE(MetState), INTENT(INOUT) :: State_Met
+!
+! !REVISION HISTORY:
+! 8 May 2020 - Thibaud M. Fritz - Initial version
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+! !LOCAL VARIABLES:
+!
+ INTEGER :: J, T
+ REAL(r8) :: waterFrac, landFrac
+
+#if defined( CLM40 )
+
+ ! Mapping for CLM4.0
+ ! -----------------------------------|--------------------------------------
+ ! Olson land type | CLM land type
+ ! -----------------------------------|--------------------------------------
+ ! Inland/sea water (ID = 1) | Ocean fraction
+ ! | Deeplake & Shallowlake (LUID =3/4)
+ ! Urban (ID = 2) | Urban - Not Applied (LUID = 6)
+ ! Low Sparse Grassland (ID = 3) |
+ ! Coniferous Forest (ID = 4) |
+ ! Deciduous Conifer Forest (ID = 5) | Needleleaf Deciduous Bor. (PAID = 3)
+ ! Deciduous Broadleaf For. (ID = 6) |
+ ! Evergreen Broadleaf For. (ID = 7) | Broadleaf Evergreen Temp. (PAID = 5)
+ ! Tall Grasses and Shrubs (ID = 8) |
+ ! Bare Desert (ID = 9) | Not veg. \ Ice (PAID = 0\LUID = 2)
+ ! Upland Tundra (ID = 10) | Broadleaf Deciduous Bore. (PAID = 11)
+ ! Irrigated Grassland (ID = 11) |
+ ! Semi Desert (ID = 12) |
+ ! Glacier ice (ID = 13) | Land ice (LUID = 2)
+ ! Wooded Wet Swamp (ID = 14) |
+ ! - (ID = 15) |
+ ! - (ID = 16) |
+ ! Shrub Evergreen (ID = 17) | Broadleaf Evergreen Shru. (PAID = 9)
+ ! - (ID = 18) |
+ ! Shrub Deciduous (ID = 19) |
+ ! Evergreen Forest and Fi. (ID = 20) |
+ ! Cool Rain Forest (ID = 21) |
+ ! Conifer Boreal Forest (ID = 22) | Needleleaf Evergreen Bor. (PAID = 2)
+ ! Cool Conifer Forest (ID = 23) |
+ ! Cool Mixed Forest (ID = 24) | Broadleaf Deciduous Bore. (PAID = 8)
+ ! Mixed Forest (ID = 25) |
+ ! Cool Broadleaf Forest (ID = 26) | Broadleaf Deciduous Temp. (PAID = 7)
+ ! Deciduous Broadleaf For. (ID = 27) |
+ ! Conifer Forest (ID = 28) | Needleleaf Evergreen Tem. (PAID = 1)
+ ! Montane Tropical Forests (ID = 29) |
+ ! Seasonal Tropical Fores. (ID = 30) |
+ ! Cool Crops and Towns (ID = 31) | Winter Temp. Cereal (PAID = 19)
+ ! Crops and Town (ID = 32) | C3 Crop (PAID = 15)
+ ! | C3 Irrigated (PAID = 16)
+ ! | Spring Temp. Cereal (PAID = 18)
+ ! Dry Tropical Woods (ID = 33) |
+ ! Tropical Rainforest (ID = 34) | Broadleaf Evergreen Trop. (PAID = 4)
+ ! Tropical Degraded Forest (ID = 35) |
+ ! Corn and Beans Cropland (ID = 36) | Corn (PAID = 17)
+ ! | Soybean (PAID = 20)
+ ! Rice Paddy and Field (ID = 37) |
+ ! Hot Irrigated Cropland (ID = 38) |
+ ! Cool Irrigated Cropland (ID = 39) |
+ ! - (ID = 40) |
+ ! Cool Grasses and Shrubs (ID = 41) |
+ ! Hot and Mild Grasses and (ID = 42) | C3 Non-Arctic Grass (PAID = 13)
+ ! Cold Grassland (ID = 43) | C3 Arctic Grass (PAID = 12)
+ ! Savanna (Woods) (ID = 44) | Broadleaf Deciduous Trop. (PAID = 6)
+ ! | C4 Grass (PAID = 14)
+ ! Mire, Bog, Fen (ID = 45) | Wetland - Not Applied (LUID = 5)
+ ! Marsh Wetland (ID = 46) |
+ ! Mediterranean Scrub (ID = 47) |
+ ! Dry Woody Scrub (ID = 48) | Broadleaf Deciduous Temp. (PAID = 10)
+ ! - (ID = 49) |
+ ! - (ID = 50) |
+ ! - (ID = 51) |
+ ! Semi Desert Shrubs (ID = 52) |
+ ! Semi Desert Sage (ID = 53) |
+ ! Barren Tundra (ID = 54) |
+ ! Cool Southern Hemisphere (ID = 55) |
+ ! Cool Fields and Woods (ID = 56) |
+ ! Forest and Field (ID = 57) |
+ ! Cool Forest and Field (ID = 58) |
+ ! Fields and Woody Savanna (ID = 59) |
+ ! Succulent and Thorn Scr. (ID = 60) |
+ ! Small Leaf Mixed Woods (ID = 61) |
+ ! Deciduous and Mixed Bor. (ID = 62) |
+ ! Narrow Conifers (ID = 63) |
+ ! Wooded Tundra (ID = 64) |
+ ! Heath Scrub (ID = 65) |
+ ! - (ID = 66) |
+ ! - (ID = 67) |
+ ! - (ID = 68) |
+ ! - (ID = 69) |
+ ! Polar and Alpine Desert (ID = 70) |
+ ! - (ID = 71) |
+ ! - (ID = 72) |
+ ! Mangrove (ID = 73) |
+
+ !==================================================================
+ ! The urban and wetland land unit types seem to be already
+ ! accounted for in patches, as it introduces total land fractions
+ ! (summed over all types) greater than 100%.
+ ! Thibaud M. Fritz - 06 May 2020
+ !==================================================================
+
+ DO J = 1, nY
+ waterFrac = cam_in%ocnFrac(J) + cam_in%iceFrac(J) &
+ + cam_in%lwtgcell(J,3) + cam_in%lwtgcell(J,4)
+ landFrac = 1.0e+0_fp - waterFrac
+
+ ! Initialize fraction land for this grid cell
+ State_Met%LandTypeFrac(1,J, 1) = waterFrac
+ !State_Met%LandTypeFrac(1,J, 2) = cam_in%lwtgcell(J, 6)
+ State_Met%LandTypeFrac(1,J, 5) = cam_in%pwtgcell(J, 4)
+ State_Met%LandTypeFrac(1,J, 7) = cam_in%pwtgcell(J, 6)
+ State_Met%LandTypeFrac(1,J, 9) = cam_in%pwtgcell(J, 1) &
+ - cam_in%lwtgcell(J, 2)
+ State_Met%LandTypeFrac(1,J,10) = cam_in%pwtgcell(J,12)
+ State_Met%LandTypeFrac(1,J,13) = cam_in%lwtgcell(J, 2)
+ State_Met%LandTypeFrac(1,J,17) = cam_in%pwtgcell(J,10)
+ State_Met%LandTypeFrac(1,J,22) = cam_in%pwtgcell(J, 3)
+ State_Met%LandTypeFrac(1,J,24) = cam_in%pwtgcell(J, 9)
+ State_Met%LandTypeFrac(1,J,26) = cam_in%pwtgcell(J, 8)
+ State_Met%LandTypeFrac(1,J,28) = cam_in%pwtgcell(J, 2)
+ State_Met%LandTypeFrac(1,J,31) = cam_in%pwtgcell(J,20)
+ State_Met%LandTypeFrac(1,J,32) = cam_in%pwtgcell(J,16) &
+ + cam_in%pwtgcell(J,17) &
+ + cam_in%pwtgcell(J,19)
+ State_Met%LandTypeFrac(1,J,34) = cam_in%pwtgcell(J, 5)
+ State_Met%LandTypeFrac(1,J,36) = cam_in%pwtgcell(J,18) &
+ + cam_in%pwtgcell(J,21)
+ State_Met%LandTypeFrac(1,J,42) = cam_in%pwtgcell(J,14)
+ State_Met%LandTypeFrac(1,J,43) = cam_in%pwtgcell(J,13)
+ State_Met%LandTypeFrac(1,J,44) = cam_in%pwtgcell(J, 7) &
+ + cam_in%pwtgcell(J,15)
+ !State_Met%LandTypeFrac(1,J,45) = cam_in%lwtgcell(J, 5)
+ State_Met%LandTypeFrac(1,J,48) = cam_in%pwtgcell(J,11)
+
+ State_Met%XLAI_NATIVE(1,J, 5) = cam_in%lai(J, 4)
+ State_Met%XLAI_NATIVE(1,J, 7) = cam_in%lai(J, 6)
+ State_Met%XLAI_NATIVE(1,J,10) = cam_in%lai(J,12)
+ State_Met%XLAI_NATIVE(1,J,17) = cam_in%lai(J,10)
+ State_Met%XLAI_NATIVE(1,J,22) = cam_in%lai(J, 3)
+ State_Met%XLAI_NATIVE(1,J,24) = cam_in%lai(J, 9)
+ State_Met%XLAI_NATIVE(1,J,26) = cam_in%lai(J, 8)
+ State_Met%XLAI_NATIVE(1,J,28) = cam_in%lai(J, 2)
+ State_Met%XLAI_NATIVE(1,J,31) = cam_in%lai(J,20)
+ State_Met%XLAI_NATIVE(1,J,32) = cam_in%lai(J,16) &
+ + cam_in%lai(J,17) &
+ + cam_in%lai(J,19)
+ State_Met%XLAI_NATIVE(1,J,34) = cam_in%lai(J, 5)
+ State_Met%XLAI_NATIVE(1,J,36) = cam_in%lai(J,18) &
+ + cam_in%lai(J,21)
+ State_Met%XLAI_NATIVE(1,J,42) = cam_in%lai(J,14)
+ State_Met%XLAI_NATIVE(1,J,43) = cam_in%lai(J,13)
+ State_Met%XLAI_NATIVE(1,J,44) = cam_in%lai(J, 7) &
+ + cam_in%lai(J,15)
+ State_Met%XLAI_NATIVE(1,J,48) = cam_in%lai(J,11)
+
+ DO T = 2, NSURFTYPE
+ State_Met%LandTypeFrac(1,J,T) = &
+ State_Met%LandTypeFrac(1,J,T) * landFrac
+
+ State_Met%XLAI_NATIVE(1,J,T) = &
+ State_Met%XLAI_NATIVE(1,J,T) * landFrac
+
+ ! Make sure that the land type fractions do not exceed 1
+ IF ( State_Met%LandTypeFrac(1,J,T) > 1.0e+0_fp ) THEN
+ State_Met%LandTypeFrac(1,J,T) = 1.0e+0_fp
+ ELSEIF ( State_Met%LandTypeFrac(1,J,T) < 0.0e+0_fp ) THEN
+ State_Met%LandTypeFrac(1,J,T) = 0.0e+0_fp
+ ENDIF
+ ENDDO
+
+ ENDDO
+
+#elif defined( CLM45 ) || defined( CLM50 )
+
+ ! Mapping for CLM4.5/CLM5.0
+ ! -----------------------------------|--------------------------------------
+ ! Olson land type | CLM land type
+ ! -----------------------------------|--------------------------------------
+ ! Inland/sea water (ID = 1) | Ocean fraction
+ ! | Deeplake (LUID = 5)
+ ! Urban (ID = 2) | Urban - Not Applied (LUID =7-9)
+ ! Low Sparse Grassland (ID = 3) |
+ ! Coniferous Forest (ID = 4) |
+ ! Deciduous Conifer Forest (ID = 5) | Needleleaf Deciduous Bor. (PAID = 3)
+ ! Deciduous Broadleaf For. (ID = 6) |
+ ! Evergreen Broadleaf For. (ID = 7) | Broadleaf Evergreen Temp. (PAID = 5)
+ ! Tall Grasses and Shrubs (ID = 8) |
+ ! Bare Desert (ID = 9) | Not veg. \ Ice (PAID = 0\LUID = 4)
+ ! Upland Tundra (ID = 10) | Broadleaf Deciduous Bore. (PAID = 11)
+ ! Irrigated Grassland (ID = 11) |
+ ! Semi Desert (ID = 12) |
+ ! Glacier ice (ID = 13) | Land ice (LUID = 4)
+ ! Wooded Wet Swamp (ID = 14) |
+ ! - (ID = 15) |
+ ! - (ID = 16) |
+ ! Shrub Evergreen (ID = 17) | Broadleaf Evergreen Shru. (PAID = 9)
+ ! - (ID = 18) |
+ ! Shrub Deciduous (ID = 19) |
+ ! Evergreen Forest and Fi. (ID = 20) |
+ ! Cool Rain Forest (ID = 21) |
+ ! Conifer Boreal Forest (ID = 22) | Needleleaf Evergreen Bor. (PAID = 2)
+ ! Cool Conifer Forest (ID = 23) |
+ ! Cool Mixed Forest (ID = 24) | Broadleaf Deciduous Bore. (PAID = 8)
+ ! Mixed Forest (ID = 25) |
+ ! Cool Broadleaf Forest (ID = 26) | Broadleaf Deciduous Temp. (PAID = 7)
+ ! Deciduous Broadleaf For. (ID = 27) |
+ ! Conifer Forest (ID = 28) | Needleleaf Evergreen Tem. (PAID = 1)
+ ! Montane Tropical Forests (ID = 29) |
+ ! Seasonal Tropical Fores. (ID = 30) |
+ ! Cool Crops and Towns (ID = 31) |
+ ! Crops and Town (ID = 32) | C3 Crop (PAID = 15)
+ ! | C3 Irrigated (PAID = 16)
+ ! Dry Tropical Woods (ID = 33) |
+ ! Tropical Rainforest (ID = 34) | Broadleaf Evergreen Trop. (PAID = 4)
+ ! Tropical Degraded Forest (ID = 35) |
+ ! Corn and Beans Cropland (ID = 36) | Corn (PAID = 17)
+ ! | Irrigated Temperate Corn (PAID = 18)
+ ! | Spring Wheat (PAID = 19)
+ ! | Irrigated Spring Wheat (PAID = 20)
+ ! | Winter Wheat (PAID = 21)
+ ! | Irrigated Winter Wheat (PAID = 22)
+ ! | Temperated Soybean (PAID = 23)
+ ! | Irrigated Temperate Soyb. (PAID = 24)
+ ! | Barley (PAID = 25)
+ ! | Irrigated Barley (PAID = 26)
+ ! | Winter Barley (PAID = 27)
+ ! | Irrigated Winter Barley (PAID = 28)
+ ! | Rye (PAID = 29)
+ ! | Irrigated Rye (PAID = 30)
+ ! | Winter Rye (PAID = 31)
+ ! | Irrigated Winter Rye (PAID = 32)
+ ! | Cassava (PAID = 33)
+ ! | Irrigated Cassava (PAID = 34)
+ ! | Citrus (PAID = 35)
+ ! | Irrigated Citrus (PAID = 36)
+ ! | Cocoa (PAID = 37)
+ ! | Irrigated Cocoa (PAID = 38)
+ ! | Coffee (PAID = 39)
+ ! | Irrigated Coffee (PAID = 40)
+ ! | Cotton (PAID = 41)
+ ! | Irrigated Cotton (PAID = 42)
+ ! | Datepalm (PAID = 43)
+ ! | Irrigated Datepalm (PAID = 44)
+ ! | Foddergrass (PAID = 45)
+ ! | Irrigated Foddergrass (PAID = 46)
+ ! | Grapes (PAID = 47)
+ ! | Irrigated Grapes (PAID = 48)
+ ! | Groundnuts (PAID = 49)
+ ! | Irrigated Groundnuts (PAID = 50)
+ ! | Millet (PAID = 51)
+ ! | Irrigated Millet (PAID = 52)
+ ! | Oilpalm (PAID = 53)
+ ! | Irrigated Oilpalm (PAID = 54)
+ ! | Potatoes (PAID = 55)
+ ! | Irrigated Potatoes (PAID = 56)
+ ! | Pulses (PAID = 57)
+ ! | Irrigated Pulses (PAID = 58)
+ ! | Rapeseed (PAID = 59)
+ ! | Irrigated Rapeseed (PAID = 60)
+ ! | Rice (PAID = 61)
+ ! | Irrigated Rice (PAID = 62)
+ ! | Sorghum (PAID = 63)
+ ! | Irrigated Sorghum (PAID = 64)
+ ! | Sugarbeet (PAID = 65)
+ ! | Irrigated Sugarbeet (PAID = 66)
+ ! | Sugarcane (PAID = 67)
+ ! | Irrigated Sugarcane (PAID = 68)
+ ! | Sunflower (PAID = 69)
+ ! | Irrigated Sunflower (PAID = 70)
+ ! | Miscanthus (PAID = 71)
+ ! | Irrigated Miscanthus (PAID = 72)
+ ! | Switchgrass (PAID = 73)
+ ! | Irrigated Switchgrass (PAID = 74)
+ ! | Tropical Corn (PAID = 75)
+ ! | Irrigated Tropical Corn (PAID = 76)
+ ! | Tropical Soybean (PAID = 77)
+ ! | Irrigated Tropical Soybe. (PAID = 78)
+ ! Rice Paddy and Field (ID = 37) |
+ ! Hot Irrigated Cropland (ID = 38) |
+ ! Cool Irrigated Cropland (ID = 39) |
+ ! - (ID = 40) |
+ ! Cool Grasses and Shrubs (ID = 41) |
+ ! Hot and Mild Grasses and (ID = 42) | C3 Non-Arctic Grass (PAID = 13)
+ ! Cold Grassland (ID = 43) | C3 Arctic Grass (PAID = 12)
+ ! Savanna (Woods) (ID = 44) | Broadleaf Deciduous Trop. (PAID = 6)
+ ! | C4 Grass (PAID = 14)
+ ! Mire, Bog, Fen (ID = 45) | Wetland - Not Applied (LUID = 6)
+ ! Marsh Wetland (ID = 46) |
+ ! Mediterranean Scrub (ID = 47) |
+ ! Dry Woody Scrub (ID = 48) | Broadleaf Deciduous Temp. (PAID = 10)
+ ! - (ID = 49) |
+ ! - (ID = 50) |
+ ! - (ID = 51) |
+ ! Semi Desert Shrubs (ID = 52) |
+ ! Semi Desert Sage (ID = 53) |
+ ! Barren Tundra (ID = 54) |
+ ! Cool Southern Hemisphere (ID = 55) |
+ ! Cool Fields and Woods (ID = 56) |
+ ! Forest and Field (ID = 57) |
+ ! Cool Forest and Field (ID = 58) |
+ ! Fields and Woody Savanna (ID = 59) |
+ ! Succulent and Thorn Scr. (ID = 60) |
+ ! Small Leaf Mixed Woods (ID = 61) |
+ ! Deciduous and Mixed Bor. (ID = 62) |
+ ! Narrow Conifers (ID = 63) |
+ ! Wooded Tundra (ID = 64) |
+ ! Heath Scrub (ID = 65) |
+ ! - (ID = 66) |
+ ! - (ID = 67) |
+ ! - (ID = 68) |
+ ! - (ID = 69) |
+ ! Polar and Alpine Desert (ID = 70) |
+ ! - (ID = 71) |
+ ! - (ID = 72) |
+ ! Mangrove (ID = 73) |
+
+ State_Met%LandTypeFrac(:,:,:) = 0.0e+0_fp
+ State_Met%XLAI_NATIVE(:,:,:) = 0.0e+0_fp
+
+ DO J = 1, nY
+ waterFrac = cam_in%ocnFrac(J) + cam_in%iceFrac(J) &
+ + cam_in%lwtgcell(J,5)
+ landFrac = 1.0e+0_fp - waterFrac
+
+ ! Initialize fraction land for this grid cell
+ State_Met%LandTypeFrac(1,J, 1) = waterFrac
+ !State_Met%LandTypeFrac(1,J, 2) = cam_in%lwtgcell(J, 7) &
+ ! + cam_in%lwtgcell(J, 8) &
+ ! + cam_in%lwtgcell(J, 9)
+ State_Met%LandTypeFrac(1,J, 5) = cam_in%pwtgcell(J, 4)
+ State_Met%LandTypeFrac(1,J, 7) = cam_in%pwtgcell(J, 6)
+ State_Met%LandTypeFrac(1,J, 9) = cam_in%pwtgcell(J, 1) &
+ * ( 1.0e+0_fp - cam_in%lwtgcell(J, 4) )
+ State_Met%LandTypeFrac(1,J,10) = cam_in%pwtgcell(J,12)
+ State_Met%LandTypeFrac(1,J,13) = cam_in%lwtgcell(J, 4)
+ State_Met%LandTypeFrac(1,J,17) = cam_in%pwtgcell(J,10)
+ State_Met%LandTypeFrac(1,J,22) = cam_in%pwtgcell(J, 3)
+ State_Met%LandTypeFrac(1,J,24) = cam_in%pwtgcell(J, 9)
+ State_Met%LandTypeFrac(1,J,26) = cam_in%pwtgcell(J, 8)
+ State_Met%LandTypeFrac(1,J,28) = cam_in%pwtgcell(J, 2)
+ State_Met%LandTypeFrac(1,J,32) = cam_in%pwtgcell(J,16) &
+ + cam_in%pwtgcell(J,17)
+ State_Met%LandTypeFrac(1,J,34) = cam_in%pwtgcell(J, 5)
+ State_Met%LandTypeFrac(1,J,36) = cam_in%pwtgcell(J,18) &
+ + cam_in%pwtgcell(J,19) &
+ + cam_in%pwtgcell(J,20) &
+ + cam_in%pwtgcell(J,21) &
+ + cam_in%pwtgcell(J,22) &
+ + cam_in%pwtgcell(J,23) &
+ + cam_in%pwtgcell(J,24) &
+ + cam_in%pwtgcell(J,25) &
+ + cam_in%pwtgcell(J,26) &
+ + cam_in%pwtgcell(J,27) &
+ + cam_in%pwtgcell(J,28) &
+ + cam_in%pwtgcell(J,29) &
+ + cam_in%pwtgcell(J,30) &
+ + cam_in%pwtgcell(J,31) &
+ + cam_in%pwtgcell(J,32) &
+ + cam_in%pwtgcell(J,33) &
+ + cam_in%pwtgcell(J,34) &
+ + cam_in%pwtgcell(J,35) &
+ + cam_in%pwtgcell(J,36) &
+ + cam_in%pwtgcell(J,37) &
+ + cam_in%pwtgcell(J,38) &
+ + cam_in%pwtgcell(J,39) &
+ + cam_in%pwtgcell(J,40) &
+ + cam_in%pwtgcell(J,41) &
+ + cam_in%pwtgcell(J,42) &
+ + cam_in%pwtgcell(J,43) &
+ + cam_in%pwtgcell(J,44) &
+ + cam_in%pwtgcell(J,45) &
+ + cam_in%pwtgcell(J,46) &
+ + cam_in%pwtgcell(J,47) &
+ + cam_in%pwtgcell(J,48) &
+ + cam_in%pwtgcell(J,49) &
+ + cam_in%pwtgcell(J,50) &
+ + cam_in%pwtgcell(J,51) &
+ + cam_in%pwtgcell(J,52) &
+ + cam_in%pwtgcell(J,53) &
+ + cam_in%pwtgcell(J,54) &
+ + cam_in%pwtgcell(J,55) &
+ + cam_in%pwtgcell(J,56) &
+ + cam_in%pwtgcell(J,57) &
+ + cam_in%pwtgcell(J,58) &
+ + cam_in%pwtgcell(J,59) &
+ + cam_in%pwtgcell(J,60) &
+ + cam_in%pwtgcell(J,61) &
+ + cam_in%pwtgcell(J,62) &
+ + cam_in%pwtgcell(J,63) &
+ + cam_in%pwtgcell(J,64) &
+ + cam_in%pwtgcell(J,65) &
+ + cam_in%pwtgcell(J,66) &
+ + cam_in%pwtgcell(J,67) &
+ + cam_in%pwtgcell(J,68) &
+ + cam_in%pwtgcell(J,69) &
+ + cam_in%pwtgcell(J,70) &
+ + cam_in%pwtgcell(J,71) &
+ + cam_in%pwtgcell(J,72) &
+ + cam_in%pwtgcell(J,73) &
+ + cam_in%pwtgcell(J,74) &
+ + cam_in%pwtgcell(J,75) &
+ + cam_in%pwtgcell(J,76) &
+ + cam_in%pwtgcell(J,77) &
+ + cam_in%pwtgcell(J,78) &
+ + cam_in%pwtgcell(J,79)
+ State_Met%LandTypeFrac(1,J,42) = cam_in%pwtgcell(J,14)
+ State_Met%LandTypeFrac(1,J,43) = cam_in%pwtgcell(J,13)
+ State_Met%LandTypeFrac(1,J,44) = cam_in%pwtgcell(J, 7) &
+ + cam_in%pwtgcell(J,15)
+ !State_Met%LandTypeFrac(1,J,45) = cam_in%lwtgcell(J, 6)
+ State_Met%LandTypeFrac(1,J,48) = cam_in%pwtgcell(J,11)
+
+ State_Met%XLAI_NATIVE(1,J, 5) = cam_in%lai(J, 4)
+ State_Met%XLAI_NATIVE(1,J, 7) = cam_in%lai(J, 6)
+ State_Met%XLAI_NATIVE(1,J,10) = cam_in%lai(J,12)
+ State_Met%XLAI_NATIVE(1,J,17) = cam_in%lai(J,10)
+ State_Met%XLAI_NATIVE(1,J,22) = cam_in%lai(J, 3)
+ State_Met%XLAI_NATIVE(1,J,24) = cam_in%lai(J, 9)
+ State_Met%XLAI_NATIVE(1,J,26) = cam_in%lai(J, 8)
+ State_Met%XLAI_NATIVE(1,J,28) = cam_in%lai(J, 2)
+ State_Met%XLAI_NATIVE(1,J,32) = cam_in%lai(J,16) &
+ + cam_in%lai(J,17)
+ State_Met%XLAI_NATIVE(1,J,34) = cam_in%lai(J, 5)
+ State_Met%XLAI_NATIVE(1,J,36) = cam_in%lai(J,18) &
+ + cam_in%lai(J,19) &
+ + cam_in%lai(J,20) &
+ + cam_in%lai(J,21) &
+ + cam_in%lai(J,22) &
+ + cam_in%lai(J,23) &
+ + cam_in%lai(J,24) &
+ + cam_in%lai(J,25) &
+ + cam_in%lai(J,26) &
+ + cam_in%lai(J,27) &
+ + cam_in%lai(J,28) &
+ + cam_in%lai(J,29) &
+ + cam_in%lai(J,30) &
+ + cam_in%lai(J,31) &
+ + cam_in%lai(J,32) &
+ + cam_in%lai(J,33) &
+ + cam_in%lai(J,34) &
+ + cam_in%lai(J,35) &
+ + cam_in%lai(J,36) &
+ + cam_in%lai(J,37) &
+ + cam_in%lai(J,38) &
+ + cam_in%lai(J,39) &
+ + cam_in%lai(J,40) &
+ + cam_in%lai(J,41) &
+ + cam_in%lai(J,42) &
+ + cam_in%lai(J,43) &
+ + cam_in%lai(J,44) &
+ + cam_in%lai(J,45) &
+ + cam_in%lai(J,46) &
+ + cam_in%lai(J,47) &
+ + cam_in%lai(J,48) &
+ + cam_in%lai(J,49) &
+ + cam_in%lai(J,50) &
+ + cam_in%lai(J,51) &
+ + cam_in%lai(J,52) &
+ + cam_in%lai(J,53) &
+ + cam_in%lai(J,54) &
+ + cam_in%lai(J,55) &
+ + cam_in%lai(J,56) &
+ + cam_in%lai(J,57) &
+ + cam_in%lai(J,58) &
+ + cam_in%lai(J,59) &
+ + cam_in%lai(J,60) &
+ + cam_in%lai(J,61) &
+ + cam_in%lai(J,62) &
+ + cam_in%lai(J,63) &
+ + cam_in%lai(J,64) &
+ + cam_in%lai(J,65) &
+ + cam_in%lai(J,66) &
+ + cam_in%lai(J,67) &
+ + cam_in%lai(J,68) &
+ + cam_in%lai(J,69) &
+ + cam_in%lai(J,70) &
+ + cam_in%lai(J,71) &
+ + cam_in%lai(J,72) &
+ + cam_in%lai(J,73) &
+ + cam_in%lai(J,74) &
+ + cam_in%lai(J,75) &
+ + cam_in%lai(J,76) &
+ + cam_in%lai(J,77) &
+ + cam_in%lai(J,78) &
+ + cam_in%lai(J,79)
+ State_Met%XLAI_NATIVE(1,J,42) = cam_in%lai(J,14)
+ State_Met%XLAI_NATIVE(1,J,43) = cam_in%lai(J,13)
+ State_Met%XLAI_NATIVE(1,J,44) = cam_in%lai(J, 7) &
+ + cam_in%lai(J,15)
+ State_Met%XLAI_NATIVE(1,J,48) = cam_in%lai(J,11)
+
+ DO T = 2, NSURFTYPE
+ State_Met%LandTypeFrac(1,J,T) = &
+ State_Met%LandTypeFrac(1,J,T) * landFrac
+
+ State_Met%XLAI_NATIVE(1,J,T) = &
+ State_Met%XLAI_NATIVE(1,J,T) * landFrac
+
+ ! Make sure that the land type fractions do not exceed 1
+ IF ( State_Met%LandTypeFrac(1,J,T) > 1.0e+0_fp ) THEN
+ State_Met%LandTypeFrac(1,J,T) = 1.0e+0_fp
+ ELSEIF ( State_Met%LandTypeFrac(1,J,T) < 0.0e+0_fp ) THEN
+ State_Met%LandTypeFrac(1,J,T) = 0.0e+0_fp
+ ENDIF
+ ENDDO
+
+ ENDDO
+
+#else
+ CALL endrun('Cannot figure out which version of CLM')
+#endif
+
+ END SUBROUTINE getLandTypes
+!EOC
diff --git a/src/chemistry/geoschem/m_spc_id.F90 b/src/chemistry/geoschem/m_spc_id.F90
new file mode 100644
index 0000000000..14a949048d
--- /dev/null
+++ b/src/chemistry/geoschem/m_spc_id.F90
@@ -0,0 +1,3 @@
+ module m_spc_id
+ implicit none
+ end module m_spc_id
diff --git a/src/chemistry/geoschem/mo_apex.F90 b/src/chemistry/geoschem/mo_apex.F90
new file mode 100644
index 0000000000..0737f7e278
--- /dev/null
+++ b/src/chemistry/geoschem/mo_apex.F90
@@ -0,0 +1,314 @@
+module mo_apex
+
+!-------------------------------------------------------------------------------
+! Purpose:
+!
+! Calculate apex coordinates and magnetic field magnitudes
+! at global geographic grid for year of current model run.
+!
+! Method:
+!
+! The magnetic field parameters output by this module are time and height
+! independent. They are chunked for waccm physics, i.e., allocated as
+! (pcols,begchunk:endchunk)
+! Interface sub apexmag is called once per run from sub inti.
+! Sub apexmag may be called for years 1900 through 2005.
+! This module is dependent on routines in apex_subs.F (modified IGRF model).
+! Apex_subs has several authors, but has been modified and maintained
+! in recent years by Roy Barnes (bozo@ucar.edu).
+! Subs apxmka and apxmall are called with the current lat x lon grid
+! resolution.
+!
+! Author: Ben Foster, foster@ucar.edu (Nov, 2003)
+!-------------------------------------------------------------------------------
+
+ use shr_kind_mod, only: r8 => shr_kind_r8
+ use ppgrid, only: pcols, begchunk, endchunk ! physics grid
+ use cam_abortutils, only: endrun
+ use cam_logfile, only: iulog
+ use spmd_utils, only: masterproc
+ !use apex, only: apex_mka, apex_mall, apex_dypol, apex_set_igrf
+ !use apex, only: apex_beg_yr, apex_end_yr
+ implicit none
+
+ private
+ public :: mo_apex_readnl
+ public :: mo_apex_init
+ public :: mo_apex_init1
+ public :: alatm, alonm, bnorth, beast, bdown, bmag
+ public :: d1vec, d2vec, colatp, elonp
+ public :: maglon0 ! geographic longitude at the equator where geomagnetic longitude is zero (radians)
+
+ ! year to initialize apex
+ real(r8), public, protected :: geomag_year = -1._r8
+ logical, public, protected :: geomag_year_updated = .true.
+
+ integer :: fixed_geomag_year = -1
+
+!-------------------------------------------------------------------------------
+! Magnetic field output arrays, chunked for physics:
+! (these are allocated (pcols,begchunk:endchunk) by sub allocate_arrays)
+!-------------------------------------------------------------------------------
+ real(r8), protected, allocatable, dimension(:,:) :: & ! (pcols,begchunk:endchunk)
+ alatm, & ! apex mag latitude at each geographic grid point (radians)
+ alonm, & ! apex mag longitude at each geographic grid point (radians)
+ bnorth, & ! northward component of magnetic field
+ beast, & ! eastward component of magnetic field
+ bdown, & ! downward component of magnetic field
+ bmag ! magnitude of magnetic field
+ real(r8), protected, allocatable, dimension(:,:,:) :: & ! (3,pcols,begchunk:endchunk)
+ d1vec, & ! base vectors more-or-less magnetic eastward direction
+ d2vec ! base vectors more-or-less magnetic downward/equatorward direction
+ real(r8), protected :: &
+ colatp, & ! geocentric colatitude of geomagnetic dipole north pole (deg)
+ elonp ! East longitude of geomagnetic dipole north pole (deg)
+
+ real(r8), protected :: maglon0
+
+ character(len=256) :: igrf_geomag_coefs_file = 'igrf_geomag_coefs_file'
+
+contains
+
+!======================================================================
+!======================================================================
+subroutine mo_apex_readnl(nlfile)
+
+ use namelist_utils, only : find_group_name
+ use units, only : getunit, freeunit
+ use spmd_utils, only : mpicom, masterprocid, mpi_integer, mpi_character
+
+ character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
+
+ !! Local variables
+ !integer :: unitn, ierr
+ !character(len=*), parameter :: subname = 'mo_apex_readnl'
+
+ !namelist /geomag_nl/ fixed_geomag_year, igrf_geomag_coefs_file
+
+ !! Read namelist
+ !if (masterproc) then
+ ! unitn = getunit()
+ ! open( unitn, file=trim(nlfile), status='old' )
+ ! call find_group_name(unitn, 'geomag_nl', status=ierr)
+ ! if (ierr == 0) then
+ ! read(unitn, geomag_nl, iostat=ierr)
+ ! if (ierr /= 0) then
+ ! call endrun(subname // ':: ERROR reading namelist')
+ ! end if
+ ! end if
+ ! close(unitn)
+ ! call freeunit(unitn)
+ !end if
+
+ !! Broadcast namelist variables
+ !call mpi_bcast(fixed_geomag_year, 1, mpi_integer, masterprocid, mpicom, ierr)
+ !call mpi_bcast(igrf_geomag_coefs_file, len(igrf_geomag_coefs_file), mpi_character, masterprocid, mpicom, ierr)
+
+end subroutine mo_apex_readnl
+
+!======================================================================
+!======================================================================
+subroutine mo_apex_init1()
+ use time_manager, only: get_curr_date
+ use dyn_grid, only: get_horiz_grid_dim_d
+
+
+end subroutine mo_apex_init1
+
+!======================================================================
+!======================================================================
+subroutine mo_apex_init(phys_state)
+!-------------------------------------------------------------------------------
+! Driver for apex code to calculate apex magnetic coordinates at
+! current geographic spatial resolution for given year. This calls
+! routines in apex_subs.F.
+!
+! This is called once per run from sub inti.
+!-------------------------------------------------------------------------------
+
+ use physconst,only : pi
+ use physics_types, only: physics_state
+ !use epp_ionization,only: epp_ionization_setmag
+
+ ! Input/output arguments
+ type(physics_state), intent(in), dimension(begchunk:endchunk) :: phys_state
+
+!!-------------------------------------------------------------------------------
+!! Local variables
+!!-------------------------------------------------------------------------------
+! real(r8), parameter :: re = 6.378165e8_r8 ! earth radius (cm)
+! real(r8), parameter :: h0 = 9.0e6_r8 ! base height (90 km)
+! real(r8), parameter :: hs = 1.3e7_r8
+! real(r8), parameter :: eps = 1.e-6_r8 ! epsilon
+! real(r8), parameter :: cm2km = 1.e-5_r8
+!
+! integer :: c, i, ist ! indices
+! integer :: ncol
+!
+! real(r8) :: alt, hr, alon, alat, & ! apxmall args
+! vmp, w, d, be3, sim, xlatqd, f, si, collat, collon
+!
+!!-------------------------------------------------------------------------------
+!! Non-scalar arguments returned by APXMALL:
+!!-------------------------------------------------------------------------------
+! real(r8) :: bhat(3)
+! real(r8) :: d3(3)
+! real(r8) :: e1(3), e2(3), e3(3)
+! real(r8) :: f1(2), f2(2)
+!
+! real(r8) :: bg(3), d1g(3), d2g(3), bmg
+!
+! real(r8) :: rdum
+!
+! real(r8) :: maglat(pcols,begchunk:endchunk)
+!
+! real(r8), parameter :: rtd = 180._r8/pi ! radians to degrees
+! real(r8), parameter :: dtr = pi/180._r8 ! degrees to radians
+!
+! call mo_apex_init1()
+! if ((.not.geomag_year_updated) .and. (allocated(alatm))) return
+!
+!!-------------------------------------------------------------------------------
+!! Allocate output arrays
+!!-------------------------------------------------------------------------------
+! call allocate_arrays()
+!
+! alt = hs*cm2km ! altitude for apxmall (km)
+! hr = alt ! reference altitude (km)
+!
+!!------------------------------------------------------------------------------
+!! Apex coords alon, alat are returned for each geographic grid point:
+!! first form global arrays
+!!------------------------------------------------------------------------------
+! do c = begchunk, endchunk
+! ncol = phys_state(c)%ncol
+! do i = 1,ncol
+! collat = phys_state(c)%lat(i)*rtd ! latitude of current column (deg)
+! collon = phys_state(c)%lon(i)*rtd ! latitude of current column (deg)
+! if ( collon < -180._r8 ) collon = collon+360._r8
+! if ( collon > 180._r8 ) collon = collon-360._r8
+! call apex_mall( &
+! collat, collon, alt, hr, & ! Inputs
+! bg, bhat, bmag(i,c), si, & ! Mag Fld
+! alon, alat, & ! Apex lon,lat output
+! vmp, w, d, be3, sim, d1vec(:,i,c), d2vec(:,i,c), d3, e1, e2, e3, & ! Mod Apex
+! xlatqd, f, f1, f2, ist ) ! Qsi-Dpl
+! if( ist /= 0 ) then
+! write(iulog,"(/,'>>> mo_apex_init: Error from apxmall: ist=',i4)") ist
+! call endrun('mo_apex_init: Error from apxmall')
+! end if
+! beast (i,c) = bg(1)
+! bnorth(i,c) = bg(2)
+! bdown (i,c) = -bg(3)
+! alonm (i,c) = alon*dtr ! mag lons (radians)
+! alatm (i,c) = alat*dtr ! mag lats (radians)
+! maglat(i,c) = alat ! mag lats (degrees)
+! enddo
+! enddo
+!
+! ! find geograghic latitude ( maglon0 ) where the geomagnetic latitude is zero at the equator
+! ! by first extracting the geographic coordinates at zero degrees longitude ...
+! collat = 0._r8
+! collon = 0._r8
+! call apex_mall( &
+! collat, collon, alt, hr, & ! Inputs
+! bg, bhat, bmg, si, & ! Mag Fld
+! alon, alat, & ! Apex lon,lat output
+! vmp, w, d, be3, sim, d1g, d2g, d3, e1, e2, e3, & ! Mod Apex
+! xlatqd, f, f1, f2, ist ) ! Qsi-Dpl
+!
+! if( ist /= 0 ) then
+! write(iulog,"(/,'>>> mo_apex_init: Error from apxmall: ist=',i4)") ist
+! call endrun('mo_apex_init: Error from apxmall')
+! end if
+!
+! maglon0 = -alon*dtr ! (radians) geograghic latitude where the geomagnetic latitude is zero
+! ! where longitude ranges from -180E to 180E
+!
+! call apex_dypol( colatp, elonp, rdum ) ! get geomagnetic dipole north pole
+!
+! if (masterproc) then
+! write(iulog, "('mo_apex_init: colatp,elonp ', 2f12.6)") colatp, elonp
+! write(iulog, "('mo_apex_init: Calculated apex magnetic coordinates for year AD ',f8.2)") geomag_year
+! endif
+!
+! call epp_ionization_setmag(maglat)
+
+end subroutine mo_apex_init
+
+subroutine allocate_arrays
+!!------------------------------------------------------------------------------
+!! Allocate module output arrays for chunked physics grid.
+!!------------------------------------------------------------------------------
+!
+!!------------------------------------------------------------------------------
+!! local variables
+!!------------------------------------------------------------------------------
+! integer :: istat ! status of allocate statements
+!
+! if (.not.allocated(alatm)) then
+! allocate(alatm(pcols,begchunk:endchunk),stat=istat)
+! if (istat /= 0) then
+! write(iulog,"('>>> allocate_arrays: allocate of alatm failed: istat=',i5)") istat
+! call endrun
+! end if
+! end if
+!
+! if (.not.allocated(alonm)) then
+! allocate(alonm(pcols,begchunk:endchunk),stat=istat)
+! if (istat /= 0) then
+! write(iulog,"('>>> allocate_arrays: allocate of alonm failed: istat=',i5)") istat
+! call endrun
+! end if
+! end if
+!
+! if (.not.allocated(bnorth)) then
+! allocate(bnorth(pcols,begchunk:endchunk),stat=istat)
+! if (istat /= 0) then
+! write(iulog,"('>>> allocate_arrays: allocate of bnorth failed: istat=',i5)") istat
+! call endrun
+! end if
+! end if
+!
+! if (.not.allocated(beast)) then
+! allocate(beast(pcols,begchunk:endchunk),stat=istat)
+! if (istat /= 0) then
+! write(iulog,"('>>> allocate_arrays: allocate of beast failed: istat=',i5)") istat
+! call endrun
+! end if
+! end if
+!
+! if (.not.allocated(bdown)) then
+! allocate(bdown(pcols,begchunk:endchunk),stat=istat)
+! if (istat /= 0) then
+! write(iulog,"('>>> allocate_arrays: allocate of bdown failed: istat=',i5)") istat
+! call endrun
+! end if
+! end if
+!
+! if (.not.allocated(bmag)) then
+! allocate(bmag(pcols,begchunk:endchunk),stat=istat)
+! if (istat /= 0) then
+! write(iulog,"('>>> allocate_arrays: allocate of bmag failed: istat=',i5)") istat
+! call endrun
+! end if
+! end if
+! if (.not.allocated(d1vec)) then
+! allocate(d1vec(3,pcols,begchunk:endchunk),stat=istat)
+! if (istat /= 0) then
+! write(iulog,"('>>> allocate_arrays: allocate of d1vec failed: istat=',i5)") istat
+! call endrun
+! endif
+! endif
+!
+! if (.not.allocated(d2vec)) then
+! allocate(d2vec(3,pcols,begchunk:endchunk),stat=istat)
+! if (istat /= 0) then
+! write(iulog,"('>>> allocate_arrays: allocate of d2vec failed: istat=',i5)") istat
+! call endrun
+! endif
+! endif
+!
+end subroutine allocate_arrays
+
+end module mo_apex
diff --git a/src/chemistry/geoschem/mo_chem_utls.F90 b/src/chemistry/geoschem/mo_chem_utls.F90
new file mode 100644
index 0000000000..43e2d7317e
--- /dev/null
+++ b/src/chemistry/geoschem/mo_chem_utls.F90
@@ -0,0 +1,180 @@
+
+module mo_chem_utls
+
+ private
+ public :: get_spc_ndx
+ public :: get_inv_ndx
+ public :: get_extfrc_ndx
+ public :: get_rxt_ndx
+ public :: utls_chem_is
+ !, get_het_ndx
+
+ save
+
+contains
+
+ integer function get_spc_ndx( spc_name )
+ !-----------------------------------------------------------------------
+ ! ... return overall species index associated with spc_name
+ !-----------------------------------------------------------------------
+
+ use chem_mods, only : gas_pcnst
+ use mo_tracname, only : tracnam => solsym
+ use string_utils, only : to_upper
+
+ implicit none
+
+ !-----------------------------------------------------------------------
+ ! ... dummy arguments
+ !-----------------------------------------------------------------------
+ character(len=*), intent(in) :: spc_name
+
+ !-----------------------------------------------------------------------
+ ! ... local variables
+ !-----------------------------------------------------------------------
+ integer :: m
+
+ get_spc_ndx = -1
+ do m = 1, gas_pcnst
+ if( trim( to_upper( spc_name ) ) == trim( to_upper( tracnam(m) ) ) ) then
+ get_spc_ndx = m
+ exit
+ end if
+ end do
+
+ end function get_spc_ndx
+
+ integer function get_inv_ndx( invariant )
+ !-----------------------------------------------------------------------
+ ! ... return overall external frcing index associated with spc_name
+ !-----------------------------------------------------------------------
+
+ use chem_mods, only : nfs, inv_lst
+
+ implicit none
+
+ !-----------------------------------------------------------------------
+ ! ... dummy arguments
+ !-----------------------------------------------------------------------
+ character(len=*), intent(in) :: invariant
+
+ !-----------------------------------------------------------------------
+ ! ... local variables
+ !-----------------------------------------------------------------------
+ integer :: m
+
+ get_inv_ndx = -1
+ do m = 1,nfs
+ if( trim( invariant ) == trim( inv_lst(m) ) ) then
+ get_inv_ndx = m
+ exit
+ end if
+ end do
+
+ end function get_inv_ndx
+
+ logical function utls_chem_is (name) result(chem_is)
+ use string_utils, only : to_lower
+
+ character(len=*), intent(in) :: name
+ chem_is = .false.
+ if (( to_lower(name) == 'geoschem' ) .or. &
+ ( to_lower(name) == 'geos-chem' )) then
+ chem_is = .true.
+ endif
+
+ end function utls_chem_is
+!
+! integer function get_het_ndx( het_name )
+! !-----------------------------------------------------------------------
+! ! ... return overall het process index associated with spc_name
+! !-----------------------------------------------------------------------
+!
+! use gas_wetdep_opts,only : gas_wetdep_method, gas_wetdep_list, gas_wetdep_cnt
+!
+! implicit none
+!
+! !-----------------------------------------------------------------------
+! ! ... dummy arguments
+! !-----------------------------------------------------------------------
+! character(len=*), intent(in) :: het_name
+!
+! !-----------------------------------------------------------------------
+! ! ... local variables
+! !-----------------------------------------------------------------------
+! integer :: m
+!
+! get_het_ndx=-1
+!
+! do m=1,gas_wetdep_cnt
+!
+! if( trim( het_name ) == trim( gas_wetdep_list(m) ) ) then
+! get_het_ndx = get_spc_ndx( gas_wetdep_list(m) )
+! return
+! endif
+!
+! enddo
+!
+! end function get_het_ndx
+!
+ integer function get_extfrc_ndx( frc_name )
+ !-----------------------------------------------------------------------
+ ! ... return overall external frcing index associated with spc_name
+ !-----------------------------------------------------------------------
+
+ use chem_mods, only : extcnt, extfrc_lst
+
+ implicit none
+
+ !-----------------------------------------------------------------------
+ ! ... dummy arguments
+ !-----------------------------------------------------------------------
+ character(len=*), intent(in) :: frc_name
+
+ !-----------------------------------------------------------------------
+ ! ... local variables
+ !-----------------------------------------------------------------------
+ integer :: m
+
+ get_extfrc_ndx = -1
+ if( extcnt > 0 ) then
+ do m = 1,max(1,extcnt)
+ if( trim( frc_name ) == trim( extfrc_lst(m) ) ) then
+ get_extfrc_ndx = m
+ exit
+ end if
+ end do
+ end if
+
+ end function get_extfrc_ndx
+
+ integer function get_rxt_ndx( rxt_tag )
+ !-----------------------------------------------------------------------
+ ! ... return overall external frcing index associated with spc_name
+ !-----------------------------------------------------------------------
+
+ use chem_mods, only : rxt_tag_cnt, rxt_tag_lst, rxt_tag_map
+
+ implicit none
+
+ !-----------------------------------------------------------------------
+ ! ... dummy arguments
+ !-----------------------------------------------------------------------
+ character(len=*), intent(in) :: rxt_tag
+
+ !-----------------------------------------------------------------------
+ ! ... local variables
+ !-----------------------------------------------------------------------
+ integer :: m
+
+ get_rxt_ndx = -1
+ do m = 1,rxt_tag_cnt
+ if( trim( rxt_tag ) == trim( rxt_tag_lst(m) ) ) then
+ get_rxt_ndx = rxt_tag_map(m)
+ exit
+ end if
+ end do
+
+ end function get_rxt_ndx
+
+end module mo_chem_utls
diff --git a/src/chemistry/geoschem/mo_drydep.F90 b/src/chemistry/geoschem/mo_drydep.F90
new file mode 120000
index 0000000000..fcb098953c
--- /dev/null
+++ b/src/chemistry/geoschem/mo_drydep.F90
@@ -0,0 +1 @@
+../mozart/mo_drydep.F90
\ No newline at end of file
diff --git a/src/chemistry/geoschem/mo_gas_phase_chemdr.F90 b/src/chemistry/geoschem/mo_gas_phase_chemdr.F90
new file mode 100644
index 0000000000..a881683024
--- /dev/null
+++ b/src/chemistry/geoschem/mo_gas_phase_chemdr.F90
@@ -0,0 +1,1180 @@
+module mo_gas_phase_chemdr
+
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use shr_const_mod, only : pi => shr_const_pi
+ use constituents, only : pcnst
+ use cam_history, only : fieldname_len
+ use chem_mods, only : phtcnt, rxntot, gas_pcnst
+ use chem_mods, only : rxt_tag_cnt, rxt_tag_lst, rxt_tag_map, extcnt, num_rnts
+ !use dust_model, only : dust_names, ndust => dust_nbin
+ use ppgrid, only : pcols, pver
+ use phys_control, only : phys_getopts
+ use carma_flags_mod, only : carma_hetchem_feedback
+ use chem_prod_loss_diags, only: chem_prod_loss_diags_init, chem_prod_loss_diags_out
+
+ implicit none
+ save
+
+ private
+ public :: gas_phase_chemdr, gas_phase_chemdr_inti
+ public :: map2chm
+
+ integer :: map2chm(pcnst) = 0 ! index map to/from chemistry/constituents list
+
+ integer :: synoz_ndx, so4_ndx, h2o_ndx, o2_ndx, o_ndx, hno3_ndx, hcl_ndx, dst_ndx, cldice_ndx, snow_ndx
+ integer :: o3_ndx, o3s_ndx
+ integer :: het1_ndx
+ integer :: ndx_cldfr, ndx_cmfdqr, ndx_nevapr, ndx_cldtop, ndx_prain
+ integer :: ndx_h2so4
+!
+! CCMI
+!
+ integer :: st80_25_ndx
+ integer :: st80_25_tau_ndx
+ integer :: aoa_nh_ndx
+ integer :: aoa_nh_ext_ndx
+ integer :: nh_5_ndx
+ integer :: nh_50_ndx
+ integer :: nh_50w_ndx
+ integer :: sad_pbf_ndx
+ integer :: cb1_ndx,cb2_ndx,oc1_ndx,oc2_ndx,dst1_ndx,dst2_ndx,sslt1_ndx,sslt2_ndx
+ integer :: soa_ndx,soai_ndx,soam_ndx,soat_ndx,soab_ndx,soax_ndx
+
+ character(len=fieldname_len),dimension(rxt_tag_cnt) :: tag_names
+ character(len=fieldname_len),dimension(extcnt) :: extfrc_name
+
+ logical :: pm25_srf_diag
+ logical :: pm25_srf_diag_soa
+
+ logical :: convproc_do_aer
+ integer :: ele_temp_ndx, ion_temp_ndx
+
+contains
+
+ subroutine gas_phase_chemdr_inti()
+
+ !use mo_chem_utls, only : get_spc_ndx, get_extfrc_ndx, get_rxt_ndx
+ use cam_history, only : addfld,add_default,horiz_only
+ !use mo_chm_diags, only : chm_diags_inti
+ use constituents, only : cnst_get_ind
+ use physics_buffer, only : pbuf_get_index
+ use rate_diags, only : rate_diags_init
+ use cam_abortutils, only : endrun
+
+ implicit none
+
+ character(len=3) :: string
+ integer :: n, m, err, ii
+ logical :: history_cesm_forcing
+ character(len=16) :: unitstr
+ !-----------------------------------------------------------------------
+ logical :: history_scwaccm_forcing
+
+ call phys_getopts( history_scwaccm_forcing_out = history_scwaccm_forcing )
+
+ call phys_getopts( convproc_do_aer_out = convproc_do_aer, history_cesm_forcing_out=history_cesm_forcing )
+
+ !ndx_h2so4 = get_spc_ndx('H2SO4')
+!
+! CCMI
+!
+ !st80_25_ndx = get_spc_ndx ('ST80_25')
+ !st80_25_tau_ndx = get_rxt_ndx ('ST80_25_tau')
+ !aoa_nh_ndx = get_spc_ndx ('AOA_NH')
+ !aoa_nh_ext_ndx = get_extfrc_ndx('AOA_NH')
+ !nh_5_ndx = get_spc_ndx('NH_5')
+ !nh_50_ndx = get_spc_ndx('NH_50')
+ !nh_50w_ndx = get_spc_ndx('NH_50W')
+!
+ !cb1_ndx = get_spc_ndx('CB1')
+ !cb2_ndx = get_spc_ndx('CB2')
+ !oc1_ndx = get_spc_ndx('OC1')
+ !oc2_ndx = get_spc_ndx('OC2')
+ !dst1_ndx = get_spc_ndx('DST01')
+ !dst2_ndx = get_spc_ndx('DST02')
+ !sslt1_ndx = get_spc_ndx('SSLT01')
+ !sslt2_ndx = get_spc_ndx('SSLT02')
+ !soa_ndx = get_spc_ndx('SOA')
+ !soam_ndx = get_spc_ndx('SOAM')
+ !soai_ndx = get_spc_ndx('SOAI')
+ !soat_ndx = get_spc_ndx('SOAT')
+ !soab_ndx = get_spc_ndx('SOAB')
+ !soax_ndx = get_spc_ndx('SOAX')
+
+ !pm25_srf_diag = cb1_ndx>0 .and. cb2_ndx>0 .and. oc1_ndx>0 .and. oc2_ndx>0 &
+ ! .and. dst1_ndx>0 .and. dst2_ndx>0 .and. sslt1_ndx>0 .and. sslt2_ndx>0 &
+ ! .and. soa_ndx>0
+
+ !pm25_srf_diag_soa = cb1_ndx>0 .and. cb2_ndx>0 .and. oc1_ndx>0 .and. oc2_ndx>0 &
+ ! .and. dst1_ndx>0 .and. dst2_ndx>0 .and. sslt1_ndx>0 .and. sslt2_ndx>0 &
+ ! .and. soam_ndx>0 .and. soai_ndx>0 .and. soat_ndx>0 .and. soab_ndx>0 .and. soax_ndx>0
+ !
+ !if ( pm25_srf_diag .or. pm25_srf_diag_soa) then
+ ! call addfld('PM25_SRF',horiz_only,'I','kg/kg','bottom layer PM2.5 mixing ratio' )
+ !endif
+ !call addfld('U_SRF',horiz_only,'I','m/s','bottom layer wind velocity' )
+ !call addfld('V_SRF',horiz_only,'I','m/s','bottom layer wind velocity' )
+ !call addfld('Q_SRF',horiz_only,'I','kg/kg','bottom layer specific humidity' )
+!
+ !het1_ndx= get_rxt_ndx('het1')
+ !o3_ndx = get_spc_ndx('O3')
+ !o3s_ndx = get_spc_ndx('O3S')
+ !o_ndx = get_spc_ndx('O')
+ !o2_ndx = get_spc_ndx('O2')
+ !so4_ndx = get_spc_ndx('SO4')
+ !h2o_ndx = get_spc_ndx('H2O')
+ !hno3_ndx = get_spc_ndx('HNO3')
+ !hcl_ndx = get_spc_ndx('HCL')
+ !dst_ndx = get_spc_ndx( dust_names(1) )
+ !synoz_ndx = get_extfrc_ndx( 'SYNOZ' )
+ !call cnst_get_ind( 'CLDICE', cldice_ndx )
+ !call cnst_get_ind( 'SNOWQM', snow_ndx, abort=.false. )
+
+
+ !do m = 1,extcnt
+ ! WRITE(UNIT=string, FMT='(I2.2)') m
+ ! extfrc_name(m) = 'extfrc_'// trim(string)
+ ! call addfld( extfrc_name(m), (/ 'lev' /), 'I', ' ', 'ext frcing' )
+ !end do
+
+ !do n = 1,rxt_tag_cnt
+ ! tag_names(n) = trim(rxt_tag_lst(n))
+ ! if (n<=phtcnt) then
+ ! call addfld( tag_names(n), (/ 'lev' /), 'I', '/s', 'photolysis rate constant' )
+ ! else
+ ! ii = n-phtcnt
+ ! select case(num_rnts(ii))
+ ! case(1)
+ ! unitstr='/s'
+ ! case(2)
+ ! unitstr='cm3/molecules/s'
+ ! case(3)
+ ! unitstr='cm6/molecules2/s'
+ ! case default
+ ! call endrun('gas_phase_chemdr_inti: invalid value in num_rnts used to set units in reaction rate constant')
+ ! end select
+ ! call addfld( tag_names(n), (/ 'lev' /), 'I', unitstr, 'reaction rate constant' )
+ ! endif
+ ! if (history_scwaccm_forcing) then
+ ! select case (trim(tag_names(n)))
+ ! case ('jh2o_a', 'jh2o_b', 'jh2o_c' )
+ ! call add_default( tag_names(n), 1, ' ')
+ ! end select
+ ! endif
+ !enddo
+
+ !call addfld( 'DTCBS', horiz_only, 'I', ' ','photolysis diagnostic black carbon OD' )
+ !call addfld( 'DTOCS', horiz_only, 'I', ' ','photolysis diagnostic organic carbon OD' )
+ !call addfld( 'DTSO4', horiz_only, 'I', ' ','photolysis diagnostic SO4 OD' )
+ !call addfld( 'DTSOA', horiz_only, 'I', ' ','photolysis diagnostic SOA OD' )
+ !call addfld( 'DTANT', horiz_only, 'I', ' ','photolysis diagnostic NH4SO4 OD' )
+ !call addfld( 'DTSAL', horiz_only, 'I', ' ','photolysis diagnostic salt OD' )
+ !call addfld( 'DTDUST', horiz_only, 'I', ' ','photolysis diagnostic dust OD' )
+ !call addfld( 'DTTOTAL', horiz_only, 'I', ' ','photolysis diagnostic total aerosol OD' )
+ !call addfld( 'FRACDAY', horiz_only, 'I', ' ','photolysis diagnostic fraction of day' )
+
+ !call addfld( 'QDSAD', (/ 'lev' /), 'I', '/s', 'water vapor sad delta' )
+ !call addfld( 'SAD_STRAT', (/ 'lev' /), 'I', 'cm2/cm3', 'stratospheric aerosol SAD' )
+ !call addfld( 'SAD_SULFC', (/ 'lev' /), 'I', 'cm2/cm3', 'chemical sulfate aerosol SAD' )
+ !call addfld( 'SAD_SAGE', (/ 'lev' /), 'I', 'cm2/cm3', 'SAGE sulfate aerosol SAD' )
+ !call addfld( 'SAD_LNAT', (/ 'lev' /), 'I', 'cm2/cm3', 'large-mode NAT aerosol SAD' )
+ !call addfld( 'SAD_ICE', (/ 'lev' /), 'I', 'cm2/cm3', 'water-ice aerosol SAD' )
+ !call addfld( 'RAD_SULFC', (/ 'lev' /), 'I', 'cm', 'chemical sad sulfate' )
+ !call addfld( 'RAD_LNAT', (/ 'lev' /), 'I', 'cm', 'large nat radius' )
+ !call addfld( 'RAD_ICE', (/ 'lev' /), 'I', 'cm', 'sad ice' )
+ !call addfld( 'SAD_TROP', (/ 'lev' /), 'I', 'cm2/cm3', 'tropospheric aerosol SAD' )
+ !call addfld( 'SAD_AERO', (/ 'lev' /), 'I', 'cm2/cm3', 'aerosol surface area density' )
+ !if (history_cesm_forcing) then
+ ! call add_default ('SAD_AERO',8,' ')
+ !endif
+ !call addfld( 'REFF_AERO', (/ 'lev' /), 'I', 'cm', 'aerosol effective radius' )
+ !call addfld( 'SULF_TROP', (/ 'lev' /), 'I', 'mol/mol', 'tropospheric aerosol SAD' )
+ !call addfld( 'QDSETT', (/ 'lev' /), 'I', '/s', 'water vapor settling delta' )
+ !call addfld( 'QDCHEM', (/ 'lev' /), 'I', '/s', 'water vapor chemistry delta')
+ !call addfld( 'HNO3_TOTAL', (/ 'lev' /), 'I', 'mol/mol', 'total HNO3' )
+ !call addfld( 'HNO3_STS', (/ 'lev' /), 'I', 'mol/mol', 'STS condensed HNO3' )
+ !call addfld( 'HNO3_NAT', (/ 'lev' /), 'I', 'mol/mol', 'NAT condensed HNO3' )
+ !call addfld( 'HNO3_GAS', (/ 'lev' /), 'I', 'mol/mol', 'gas-phase hno3' )
+ !call addfld( 'H2O_GAS', (/ 'lev' /), 'I', 'mol/mol', 'gas-phase h2o' )
+ !call addfld( 'HCL_TOTAL', (/ 'lev' /), 'I', 'mol/mol', 'total hcl' )
+ !call addfld( 'HCL_GAS', (/ 'lev' /), 'I', 'mol/mol', 'gas-phase hcl' )
+ !call addfld( 'HCL_STS', (/ 'lev' /), 'I', 'mol/mol', 'STS condensed HCL' )
+
+ !if (het1_ndx>0) then
+ ! call addfld( 'het1_total', (/ 'lev' /), 'I', '/s', 'total N2O5 + H2O het rate constant' )
+ !endif
+ !call addfld( 'SZA', horiz_only, 'I', 'degrees', 'solar zenith angle' )
+
+ !call chm_diags_inti()
+ !call rate_diags_init()
+
+!-----------------------------------------------------------------------
+! get pbuf indicies
+!-----------------------------------------------------------------------
+ !ndx_cldfr = pbuf_get_index('CLD')
+ !ndx_cmfdqr = pbuf_get_index('RPRDTOT')
+ !ndx_nevapr = pbuf_get_index('NEVAPR')
+ !ndx_prain = pbuf_get_index('PRAIN')
+ !ndx_cldtop = pbuf_get_index('CLDTOP')
+
+ !sad_pbf_ndx= pbuf_get_index('VOLC_SAD',errcode=err) ! prescribed strat aerosols (volcanic)
+ !if (.not.sad_pbf_ndx>0) sad_pbf_ndx = pbuf_get_index('SADSULF',errcode=err) ! CARMA's version of strat aerosols
+
+ !ele_temp_ndx = pbuf_get_index('TElec',errcode=err)! electron temperature index
+ !ion_temp_ndx = pbuf_get_index('TIon',errcode=err) ! ion temperature index
+
+ !! diagnostics for stratospheric heterogeneous reactions
+ !call addfld( 'GAMMA_HET1', (/ 'lev' /), 'I', '1', 'Reaction Probability' )
+ !call addfld( 'GAMMA_HET2', (/ 'lev' /), 'I', '1', 'Reaction Probability' )
+ !call addfld( 'GAMMA_HET3', (/ 'lev' /), 'I', '1', 'Reaction Probability' )
+ !call addfld( 'GAMMA_HET4', (/ 'lev' /), 'I', '1', 'Reaction Probability' )
+ !call addfld( 'GAMMA_HET5', (/ 'lev' /), 'I', '1', 'Reaction Probability' )
+ !call addfld( 'GAMMA_HET6', (/ 'lev' /), 'I', '1', 'Reaction Probability' )
+ !call addfld( 'WTPER', (/ 'lev' /), 'I', '%', 'H2SO4 Weight Percent' )
+
+ !call chem_prod_loss_diags_init
+
+ end subroutine gas_phase_chemdr_inti
+
+
+!-----------------------------------------------------------------------
+!-----------------------------------------------------------------------
+ subroutine gas_phase_chemdr(lchnk, ncol, imozart, q, &
+ phis, zm, zi, calday, &
+ tfld, pmid, pdel, pint, &
+ cldw, troplev, troplevchem, &
+ ncldwtr, ufld, vfld, &
+ delt, ps, xactive_prates, &
+ fsds, ts, asdir, ocnfrac, icefrac, &
+ precc, precl, snowhland, ghg_chem, latmapback, &
+ drydepflx, wetdepflx, cflx, fire_sflx, fire_ztop, nhx_nitrogen_flx, noy_nitrogen_flx, qtend, pbuf)
+
+ !-----------------------------------------------------------------------
+ ! ... Chem_solver advances the volumetric mixing ratio
+ ! forward one time step via a combination of explicit,
+ ! ebi, hov, fully implicit, and/or rodas algorithms.
+ !-----------------------------------------------------------------------
+
+ use chem_mods, only : nabscol, nfs, indexm, clscnt4
+ use physconst, only : rga
+ !use mo_photo, only : set_ub_col, setcol, table_photo, xactive_photo
+ !use mo_exp_sol, only : exp_sol
+ !use mo_imp_sol, only : imp_sol
+ !use mo_setrxt, only : setrxt
+ !use mo_adjrxt, only : adjrxt
+ !use mo_phtadj, only : phtadj
+ !use llnl_O1D_to_2OH_adj,only : O1D_to_2OH_adj
+ !use mo_usrrxt, only : usrrxt
+ !use mo_setinv, only : setinv
+ !use mo_negtrc, only : negtrc
+ !use mo_sulf, only : sulf_interp
+ !use mo_setext, only : setext
+ !use fire_emissions, only : fire_emissions_vrt
+ !use mo_sethet, only : sethet
+ !use mo_drydep, only : drydep, set_soilw
+ !use seq_drydep_mod, only : DD_XLND, DD_XATM, DD_TABL, drydep_method
+ !use mo_fstrat, only : set_fstrat_vals, set_fstrat_h2o
+ !use noy_ubc, only : noy_ubc_set
+ !use mo_flbc, only : flbc_set
+ !use phys_grid, only : get_rlat_all_p, get_rlon_all_p, get_lat_all_p, get_lon_all_p
+ !use mo_mean_mass, only : set_mean_mass
+ !use cam_history, only : outfld
+ !use wv_saturation, only : qsat
+ !use constituents, only : cnst_mw
+ !use mo_drydep, only : has_drydep
+ !use time_manager, only : get_ref_date
+ !use mo_ghg_chem, only : ghg_chem_set_rates, ghg_chem_set_flbc
+ !use mo_sad, only : sad_strat_calc
+ !use charge_neutrality, only : charge_balance
+ !use mo_strato_rates, only : ratecon_sfstrat
+ !use mo_aero_settling, only : strat_aer_settling
+ !use shr_orb_mod, only : shr_orb_decl
+ !use cam_control_mod, only : lambm0, eccen, mvelpp, obliqr
+ !use mo_strato_rates, only : has_strato_chem
+ !use short_lived_species,only: set_short_lived_species,get_short_lived_species
+ !use mo_chm_diags, only : chm_diags, het_diags
+ !use perf_mod, only : t_startf, t_stopf
+ !use gas_wetdep_opts, only : gas_wetdep_method
+ use physics_buffer, only : physics_buffer_desc, pbuf_get_field, pbuf_old_tim_idx
+ !use infnan, only : nan, assignment(=)
+ !use rate_diags, only : rate_diags_calc
+ !use mo_mass_xforms, only : mmr2vmr, vmr2mmr, h2o_to_vmr, mmr2vmri
+ !use orbit, only : zenith
+!
+! LINOZ
+!
+ !use lin_strat_chem, only : do_lin_strat_chem, lin_strat_chem_solve
+ !use linoz_data, only : has_linoz_data
+!
+! for aqueous chemistry and aerosol growth
+!
+ !use aero_model, only : aero_model_gasaerexch
+
+ !use aero_model, only : aero_model_strat_surfarea
+
+ implicit none
+
+ !-----------------------------------------------------------------------
+ ! ... Dummy arguments
+ !-----------------------------------------------------------------------
+ integer, intent(in) :: lchnk ! chunk index
+ integer, intent(in) :: ncol ! number columns in chunk
+ integer, intent(in) :: imozart ! gas phase start index in q
+ real(r8), intent(in) :: delt ! timestep (s)
+ real(r8), intent(in) :: calday ! day of year
+ real(r8), intent(in) :: ps(pcols) ! surface pressure
+ real(r8), intent(in) :: phis(pcols) ! surface geopotential
+ real(r8),target,intent(in) :: tfld(pcols,pver) ! midpoint temperature (K)
+ real(r8), intent(in) :: pmid(pcols,pver) ! midpoint pressures (Pa)
+ real(r8), intent(in) :: pdel(pcols,pver) ! pressure delta about midpoints (Pa)
+ real(r8), intent(in) :: ufld(pcols,pver) ! zonal velocity (m/s)
+ real(r8), intent(in) :: vfld(pcols,pver) ! meridional velocity (m/s)
+ real(r8), intent(in) :: cldw(pcols,pver) ! cloud water (kg/kg)
+ real(r8), intent(in) :: ncldwtr(pcols,pver) ! droplet number concentration (#/kg)
+ real(r8), intent(in) :: zm(pcols,pver) ! midpoint geopotential height above the surface (m)
+ real(r8), intent(in) :: zi(pcols,pver+1) ! interface geopotential height above the surface (m)
+ real(r8), intent(in) :: pint(pcols,pver+1) ! interface pressures (Pa)
+ real(r8), intent(in) :: q(pcols,pver,pcnst) ! species concentrations (kg/kg)
+ real(r8),pointer, intent(in) :: fire_sflx(:,:) ! fire emssions surface flux (kg/m^2/s)
+ real(r8),pointer, intent(in) :: fire_ztop(:) ! top of vertical distribution of fire emssions (m)
+ logical, intent(in) :: xactive_prates
+ real(r8), intent(in) :: fsds(pcols) ! longwave down at sfc
+ real(r8), intent(in) :: icefrac(pcols) ! sea-ice areal fraction
+ real(r8), intent(in) :: ocnfrac(pcols) ! ocean areal fraction
+ real(r8), intent(in) :: asdir(pcols) ! albedo: shortwave, direct
+ real(r8), intent(in) :: ts(pcols) ! sfc temp (merged w/ocean if coupled)
+ real(r8), intent(in) :: precc(pcols) !
+ real(r8), intent(in) :: precl(pcols) !
+ real(r8), intent(in) :: snowhland(pcols) !
+ logical, intent(in) :: ghg_chem
+ integer, intent(in) :: latmapback(pcols)
+ integer, intent(in) :: troplev(pcols) ! trop/strat separation vertical index
+ integer, intent(in) :: troplevchem(pcols) ! trop/strat chemistry separation vertical index
+ real(r8), intent(inout) :: qtend(pcols,pver,pcnst) ! species tendencies (kg/kg/s)
+ real(r8), intent(inout) :: cflx(pcols,pcnst) ! constituent surface flux (kg/m^2/s)
+ real(r8), intent(out) :: drydepflx(pcols,pcnst) ! dry deposition flux (kg/m^2/s)
+ real(r8), intent(in) :: wetdepflx(pcols,pcnst) ! wet deposition flux (kg/m^2/s)
+ real(r8), intent(out) :: nhx_nitrogen_flx(pcols)
+ real(r8), intent(out) :: noy_nitrogen_flx(pcols)
+
+ type(physics_buffer_desc), pointer :: pbuf(:)
+
+ !!-----------------------------------------------------------------------
+ !! ... Local variables
+ !!-----------------------------------------------------------------------
+ !real(r8), parameter :: m2km = 1.e-3_r8
+ !real(r8), parameter :: Pa2mb = 1.e-2_r8
+
+ !real(r8), pointer :: prain(:,:)
+ !real(r8), pointer :: nevapr(:,:)
+ !real(r8), pointer :: cmfdqr(:,:)
+ !real(r8), pointer :: cldfr(:,:)
+ !real(r8), pointer :: cldtop(:)
+
+ !integer :: i, k, m, n
+ !integer :: tim_ndx
+ !real(r8) :: delt_inverse
+ !real(r8) :: esfact
+ !integer :: latndx(pcols) ! chunk lat indicies
+ !integer :: lonndx(pcols) ! chunk lon indicies
+ !real(r8) :: invariants(ncol,pver,nfs)
+ !real(r8) :: col_dens(ncol,pver,max(1,nabscol)) ! column densities (molecules/cm^2)
+ !real(r8) :: col_delta(ncol,0:pver,max(1,nabscol)) ! layer column densities (molecules/cm^2)
+ !real(r8) :: extfrc(ncol,pver,max(1,extcnt))
+ !real(r8) :: vmr(ncol,pver,gas_pcnst) ! xported species (vmr)
+ !real(r8) :: reaction_rates(ncol,pver,max(1,rxntot)) ! reaction rates
+ !real(r8) :: depvel(ncol,gas_pcnst) ! dry deposition velocity (cm/s)
+ !real(r8) :: het_rates(ncol,pver,max(1,gas_pcnst)) ! washout rate (1/s)
+ !real(r8), dimension(ncol,pver) :: &
+ ! h2ovmr, & ! water vapor volume mixing ratio
+ ! mbar, & ! mean wet atmospheric mass ( amu )
+ ! zmid, & ! midpoint geopotential in km
+ ! zmidr, & ! midpoint geopotential in km realitive to surf
+ ! sulfate, & ! trop sulfate aerosols
+ ! pmb ! pressure at midpoints ( hPa )
+ !real(r8), dimension(ncol,pver) :: &
+ ! cwat, & ! cloud water mass mixing ratio (kg/kg)
+ ! wrk
+ !real(r8), dimension(ncol,pver+1) :: &
+ ! zintr ! interface geopotential in km realitive to surf
+ !real(r8), dimension(ncol,pver+1) :: &
+ ! zint ! interface geopotential in km
+ !real(r8), dimension(ncol) :: &
+ ! zen_angle, & ! solar zenith angles
+ ! zsurf, & ! surface height (m)
+ ! rlats, rlons ! chunk latitudes and longitudes (radians)
+ !real(r8) :: sza(ncol) ! solar zenith angles (degrees)
+ !real(r8), parameter :: rad2deg = 180._r8/pi ! radians to degrees conversion factor
+ !real(r8) :: relhum(ncol,pver) ! relative humidity
+ !real(r8) :: satv(ncol,pver) ! wrk array for relative humidity
+ !real(r8) :: satq(ncol,pver) ! wrk array for relative humidity
+
+ !integer :: j
+ !integer :: ltrop_sol(pcols) ! tropopause vertical index used in chem solvers
+ !real(r8), pointer :: strato_sad(:,:) ! stratospheric sad (1/cm)
+
+ !real(r8) :: sad_trop(pcols,pver) ! total tropospheric sad (cm^2/cm^3)
+ !real(r8) :: reff(pcols,pver) ! aerosol effective radius (cm)
+ !real(r8) :: reff_strat(pcols,pver) ! stratospheric aerosol effective radius (cm)
+
+ !real(r8) :: tvs(pcols)
+ !integer :: ncdate,yr,mon,day,sec
+ !real(r8) :: wind_speed(pcols) ! surface wind speed (m/s)
+ !logical, parameter :: dyn_soilw = .false.
+ !logical :: table_soilw
+ !real(r8) :: soilw(pcols)
+ !real(r8) :: prect(pcols)
+ !real(r8) :: sflx(pcols,gas_pcnst)
+ !real(r8) :: wetdepflx_diag(pcols,gas_pcnst)
+ !real(r8) :: dust_vmr(ncol,pver,ndust)
+ !real(r8) :: dt_diag(pcols,8) ! od diagnostics
+ !real(r8) :: fracday(pcols) ! fraction of day
+ !real(r8) :: o2mmr(ncol,pver) ! o2 concentration (kg/kg)
+ !real(r8) :: ommr(ncol,pver) ! o concentration (kg/kg)
+ !real(r8) :: mmr(pcols,pver,gas_pcnst) ! chem working concentrations (kg/kg)
+ !real(r8) :: mmr_new(pcols,pver,gas_pcnst) ! chem working concentrations (kg/kg)
+ !real(r8) :: hno3_gas(ncol,pver) ! hno3 gas phase concentration (mol/mol)
+ !real(r8) :: hno3_cond(ncol,pver,2) ! hno3 condensed phase concentration (mol/mol)
+ !real(r8) :: hcl_gas(ncol,pver) ! hcl gas phase concentration (mol/mol)
+ !real(r8) :: hcl_cond(ncol,pver) ! hcl condensed phase concentration (mol/mol)
+ !real(r8) :: h2o_gas(ncol,pver) ! h2o gas phase concentration (mol/mol)
+ !real(r8) :: h2o_cond(ncol,pver) ! h2o condensed phase concentration (mol/mol)
+ !real(r8) :: cldice(pcols,pver) ! cloud water "ice" (kg/kg)
+ !real(r8) :: radius_strat(ncol,pver,3) ! radius of sulfate, nat, & ice ( cm )
+ !real(r8) :: sad_strat(ncol,pver,3) ! surf area density of sulfate, nat, & ice ( cm^2/cm^3 )
+ !real(r8) :: mmr_tend(pcols,pver,gas_pcnst) ! chemistry species tendencies (kg/kg/s)
+ !real(r8) :: qh2o(pcols,pver) ! specific humidity (kg/kg)
+ !real(r8) :: delta
+
+ ! !for aerosol formation....
+ !real(r8) :: del_h2so4_gasprod(ncol,pver)
+ !real(r8) :: vmr0(ncol,pver,gas_pcnst)
+
+!
+! CCMI
+!
+ !real(r8) :: xlat
+ !real(r8) :: pm25(ncol)
+
+ !real(r8) :: dlats(ncol)
+
+ !real(r8), dimension(ncol,pver) :: & ! aerosol reaction diagnostics
+ ! gprob_n2o5, &
+ ! gprob_cnt_hcl, &
+ ! gprob_cnt_h2o, &
+ ! gprob_bnt_h2o, &
+ ! gprob_hocl_hcl, &
+ ! gprob_hobr_hcl, &
+ ! wtper
+
+ !real(r8), pointer :: ele_temp_fld(:,:) ! electron temperature pointer
+ !real(r8), pointer :: ion_temp_fld(:,:) ! ion temperature pointer
+ !real(r8) :: prod_out(ncol,pver,max(1,clscnt4))
+ !real(r8) :: loss_out(ncol,pver,max(1,clscnt4))
+
+ !if ( ele_temp_ndx>0 .and. ion_temp_ndx>0 ) then
+ ! call pbuf_get_field(pbuf, ele_temp_ndx, ele_temp_fld)
+ ! call pbuf_get_field(pbuf, ion_temp_ndx, ion_temp_fld)
+ !else
+ ! ele_temp_fld => tfld
+ ! ion_temp_fld => tfld
+ !endif
+
+ !! initialize to NaN to hopefully catch user defined rxts that go unset
+ !reaction_rates(:,:,:) = nan
+
+ !Dummy output
+ qtend = 0.0e+0_r8
+ cflx = 0.0e+0_r8
+ drydepflx = 0.0e+0_r8
+
+ !delt_inverse = 1._r8 / delt
+ !!-----------------------------------------------------------------------
+ !! ... Get chunck latitudes and longitudes
+ !!-----------------------------------------------------------------------
+ !call get_lat_all_p( lchnk, ncol, latndx )
+ !call get_lon_all_p( lchnk, ncol, lonndx )
+ !call get_rlat_all_p( lchnk, ncol, rlats )
+ !call get_rlon_all_p( lchnk, ncol, rlons )
+ !tim_ndx = pbuf_old_tim_idx()
+ !call pbuf_get_field(pbuf, ndx_prain, prain, start=(/1,1/), kount=(/ncol,pver/))
+ !call pbuf_get_field(pbuf, ndx_cldfr, cldfr, start=(/1,1,tim_ndx/), kount=(/ncol,pver,1/) )
+ !call pbuf_get_field(pbuf, ndx_cmfdqr, cmfdqr, start=(/1,1/), kount=(/ncol,pver/))
+ !call pbuf_get_field(pbuf, ndx_nevapr, nevapr, start=(/1,1/), kount=(/ncol,pver/))
+ !call pbuf_get_field(pbuf, ndx_cldtop, cldtop )
+
+ !reff_strat(:,:) = 0._r8
+
+ !dlats(:) = rlats(:)*rad2deg ! convert to degrees
+
+ !!-----------------------------------------------------------------------
+ !! ... Calculate cosine of zenith angle
+ !! then cast back to angle (radians)
+ !!-----------------------------------------------------------------------
+ !call zenith( calday, rlats, rlons, zen_angle, ncol )
+ !zen_angle(:) = acos( zen_angle(:) )
+
+ !sza(:) = zen_angle(:) * rad2deg
+ !call outfld( 'SZA', sza, ncol, lchnk )
+
+ !!-----------------------------------------------------------------------
+ !! ... Xform geopotential height from m to km
+ !! and pressure from Pa to mb
+ !!-----------------------------------------------------------------------
+ !zsurf(:ncol) = rga * phis(:ncol)
+ !do k = 1,pver
+ ! zintr(:ncol,k) = m2km * zi(:ncol,k)
+ ! zmidr(:ncol,k) = m2km * zm(:ncol,k)
+ ! zmid(:ncol,k) = m2km * (zm(:ncol,k) + zsurf(:ncol))
+ ! zint(:ncol,k) = m2km * (zi(:ncol,k) + zsurf(:ncol))
+ ! pmb(:ncol,k) = Pa2mb * pmid(:ncol,k)
+ !end do
+ !zint(:ncol,pver+1) = m2km * (zi(:ncol,pver+1) + zsurf(:ncol))
+ !zintr(:ncol,pver+1)= m2km * zi(:ncol,pver+1)
+
+ !!-----------------------------------------------------------------------
+ !! ... map incoming concentrations to working array
+ !!-----------------------------------------------------------------------
+ !do m = 1,pcnst
+ ! n = map2chm(m)
+ ! if( n > 0 ) then
+ ! mmr(:ncol,:,n) = q(:ncol,:,m)
+ ! end if
+ !end do
+
+ !call get_short_lived_species( mmr, lchnk, ncol, pbuf )
+
+ !!-----------------------------------------------------------------------
+ !! ... Set atmosphere mean mass
+ !!-----------------------------------------------------------------------
+ !call set_mean_mass( ncol, mmr, mbar )
+
+ !!-----------------------------------------------------------------------
+ !! ... Xform from mmr to vmr
+ !!-----------------------------------------------------------------------
+ !call mmr2vmr( mmr(:ncol,:,:), vmr(:ncol,:,:), mbar(:ncol,:), ncol )
+
+!
+! CCMI
+!
+! reset STE tracer to specific vmr of 200 ppbv
+!
+ !if ( st80_25_ndx > 0 ) then
+ ! where ( pmid(:ncol,:) < 80.e+2_r8 )
+ ! vmr(:ncol,:,st80_25_ndx) = 200.e-9_r8
+ ! end where
+ !end if
+!
+! reset AOA_NH, NH_5, NH_50, NH_50W surface mixing ratios between 30N and 50N
+!
+ !if ( aoa_nh_ndx>0 ) then
+ ! do j=1,ncol
+ ! xlat = dlats(j)
+ ! if ( xlat >= 30._r8 .and. xlat <= 50._r8 ) then
+ ! vmr(j,pver,aoa_nh_ndx) = 0._r8
+ ! end if
+ ! end do
+ !end if
+ !if ( nh_5_ndx>0 ) then
+ ! do j=1,ncol
+ ! xlat = dlats(j)
+ ! if ( xlat >= 30._r8 .and. xlat <= 50._r8 ) then
+ ! vmr(j,pver,nh_5_ndx) = 100.e-9_r8
+ ! end if
+ ! end do
+ !end if
+ !if ( nh_50_ndx>0 ) then
+ ! do j=1,ncol
+ ! xlat = dlats(j)
+ ! if ( xlat >= 30._r8 .and. xlat <= 50._r8 ) then
+ ! vmr(j,pver,nh_50_ndx) = 100.e-9_r8
+ ! end if
+ ! end do
+ !end if
+ !if ( nh_50w_ndx>0 ) then
+ ! do j=1,ncol
+ ! xlat = dlats(j)
+ ! if ( xlat >= 30._r8 .and. xlat <= 50._r8 ) then
+ ! vmr(j,pver,nh_50w_ndx) = 100.e-9_r8
+ ! end if
+ ! end do
+ !end if
+
+ !if (h2o_ndx>0) then
+ ! !-----------------------------------------------------------------------
+ ! ! ... store water vapor in wrk variable
+ ! !-----------------------------------------------------------------------
+ ! qh2o(:ncol,:) = mmr(:ncol,:,h2o_ndx)
+ ! h2ovmr(:ncol,:) = vmr(:ncol,:,h2o_ndx)
+ !else
+ ! qh2o(:ncol,:) = q(:ncol,:,1)
+ ! !-----------------------------------------------------------------------
+ ! ! ... Xform water vapor from mmr to vmr and set upper bndy values
+ ! !-----------------------------------------------------------------------
+ ! call h2o_to_vmr( q(:ncol,:,1), h2ovmr(:ncol,:), mbar(:ncol,:), ncol )
+
+ ! call set_fstrat_h2o( h2ovmr, pmid, troplev, calday, ncol, lchnk )
+
+ !endif
+
+ !!-----------------------------------------------------------------------
+ !! ... force ion/electron balance
+ !!-----------------------------------------------------------------------
+ !call charge_balance( ncol, vmr )
+
+ !!-----------------------------------------------------------------------
+ !! ... Set the "invariants"
+ !!-----------------------------------------------------------------------
+ !call setinv( invariants, tfld, h2ovmr, vmr, pmid, ncol, lchnk, pbuf )
+
+ !!-----------------------------------------------------------------------
+ !! ... stratosphere aerosol surface area
+ !!-----------------------------------------------------------------------
+ !if (sad_pbf_ndx>0) then
+ ! call pbuf_get_field(pbuf, sad_pbf_ndx, strato_sad)
+ !else
+ ! allocate(strato_sad(pcols,pver))
+ ! strato_sad(:,:) = 0._r8
+
+ ! ! Prognostic modal stratospheric sulfate: compute dry strato_sad
+ ! call aero_model_strat_surfarea( ncol, mmr, pmid, tfld, troplevchem, pbuf, strato_sad, reff_strat )
+
+ !endif
+
+ !stratochem: if ( has_strato_chem ) then
+ ! !-----------------------------------------------------------------------
+ ! ! ... initialize condensed and gas phases; all hno3 to gas
+ ! !-----------------------------------------------------------------------
+ ! hcl_cond(:,:) = 0.0_r8
+ ! hcl_gas (:,:) = 0.0_r8
+ ! do k = 1,pver
+ ! hno3_gas(:,k) = vmr(:,k,hno3_ndx)
+ ! h2o_gas(:,k) = h2ovmr(:,k)
+ ! hcl_gas(:,k) = vmr(:,k,hcl_ndx)
+ ! wrk(:,k) = h2ovmr(:,k)
+ ! if (snow_ndx>0) then
+ ! cldice(:ncol,k) = q(:ncol,k,cldice_ndx) + q(:ncol,k,snow_ndx)
+ ! else
+ ! cldice(:ncol,k) = q(:ncol,k,cldice_ndx)
+ ! endif
+ ! end do
+ ! do m = 1,2
+ ! do k = 1,pver
+ ! hno3_cond(:,k,m) = 0._r8
+ ! end do
+ ! end do
+
+ ! call mmr2vmri( cldice(:ncol,:), h2o_cond(:ncol,:), mbar(:ncol,:), cnst_mw(cldice_ndx), ncol )
+
+ ! !-----------------------------------------------------------------------
+ ! ! ... call SAD routine
+ ! !-----------------------------------------------------------------------
+ ! call sad_strat_calc( lchnk, invariants(:ncol,:,indexm), pmb, tfld, hno3_gas, &
+ ! hno3_cond, h2o_gas, h2o_cond, hcl_gas, hcl_cond, strato_sad(:ncol,:), radius_strat, &
+ ! sad_strat, ncol, pbuf )
+
+! ! NOTE: output of total HNO3 is before vmr is set to gas-phase.
+ ! call outfld( 'HNO3_TOTAL', vmr(:ncol,:,hno3_ndx), ncol ,lchnk )
+
+
+ ! do k = 1,pver
+ ! vmr(:,k,hno3_ndx) = hno3_gas(:,k)
+ ! h2ovmr(:,k) = h2o_gas(:,k)
+ ! vmr(:,k,h2o_ndx) = h2o_gas(:,k)
+ ! wrk(:,k) = (h2ovmr(:,k) - wrk(:,k))*delt_inverse
+ ! end do
+
+ ! call outfld( 'QDSAD', wrk(:,:), ncol, lchnk )
+!
+ ! call outfld( 'SAD_STRAT', strato_sad(:ncol,:), ncol, lchnk )
+ ! call outfld( 'SAD_SULFC', sad_strat(:,:,1), ncol, lchnk )
+ ! call outfld( 'SAD_LNAT', sad_strat(:,:,2), ncol, lchnk )
+ ! call outfld( 'SAD_ICE', sad_strat(:,:,3), ncol, lchnk )
+!
+ ! call outfld( 'RAD_SULFC', radius_strat(:,:,1), ncol, lchnk )
+ ! call outfld( 'RAD_LNAT', radius_strat(:,:,2), ncol, lchnk )
+ ! call outfld( 'RAD_ICE', radius_strat(:,:,3), ncol, lchnk )
+!
+ ! call outfld( 'HNO3_GAS', vmr(:ncol,:,hno3_ndx), ncol, lchnk )
+ ! call outfld( 'HNO3_STS', hno3_cond(:,:,1), ncol, lchnk )
+ ! call outfld( 'HNO3_NAT', hno3_cond(:,:,2), ncol, lchnk )
+!
+ ! call outfld( 'HCL_TOTAL', vmr(:ncol,:,hcl_ndx), ncol, lchnk )
+ ! call outfld( 'HCL_GAS', hcl_gas (:,:), ncol ,lchnk )
+ ! call outfld( 'HCL_STS', hcl_cond(:,:), ncol ,lchnk )
+
+ ! !-----------------------------------------------------------------------
+ ! ! ... call aerosol reaction rates
+ ! !-----------------------------------------------------------------------
+ ! call ratecon_sfstrat( ncol, invariants(:,:,indexm), pmid, tfld, &
+ ! radius_strat(:,:,1), sad_strat(:,:,1), sad_strat(:,:,2), &
+ ! sad_strat(:,:,3), h2ovmr, vmr, reaction_rates, &
+ ! gprob_n2o5, gprob_cnt_hcl, gprob_cnt_h2o, gprob_bnt_h2o, &
+ ! gprob_hocl_hcl, gprob_hobr_hcl, wtper )
+
+ ! call outfld( 'GAMMA_HET1', gprob_n2o5 (:ncol,:), ncol, lchnk )
+ ! call outfld( 'GAMMA_HET2', gprob_cnt_h2o (:ncol,:), ncol, lchnk )
+ ! call outfld( 'GAMMA_HET3', gprob_bnt_h2o (:ncol,:), ncol, lchnk )
+ ! call outfld( 'GAMMA_HET4', gprob_cnt_hcl (:ncol,:), ncol, lchnk )
+ ! call outfld( 'GAMMA_HET5', gprob_hocl_hcl(:ncol,:), ncol, lchnk )
+ ! call outfld( 'GAMMA_HET6', gprob_hobr_hcl(:ncol,:), ncol, lchnk )
+ ! call outfld( 'WTPER', wtper (:ncol,:), ncol, lchnk )
+
+ !endif stratochem
+
+! ! NOTE: For gas-phase solver only.
+! ! ratecon_sfstrat needs total hcl.
+ !if (hcl_ndx>0) then
+ ! vmr(:,:,hcl_ndx) = hcl_gas(:,:)
+ !endif
+
+ !!-----------------------------------------------------------------------
+ !! ... Set the column densities at the upper boundary
+ !!-----------------------------------------------------------------------
+ !call set_ub_col( col_delta, vmr, invariants, pint(:,1), pdel, ncol, lchnk)
+
+ !!-----------------------------------------------------------------------
+ !! ... Set rates for "tabular" and user specified reactions
+ !!-----------------------------------------------------------------------
+ !call setrxt( reaction_rates, tfld, invariants(1,1,indexm), ncol )
+ !
+ !sulfate(:,:) = 0._r8
+ !if ( .not. carma_hetchem_feedback ) then
+ ! if( so4_ndx < 1 ) then ! get offline so4 field if not prognostic
+ ! call sulf_interp( ncol, lchnk, sulfate )
+ ! else
+ ! sulfate(:,:) = vmr(:,:,so4_ndx)
+ ! endif
+ !endif
+ !
+ !!-----------------------------------------------------------------
+ !! ... zero out sulfate above tropopause
+ !!-----------------------------------------------------------------
+ !do k = 1, pver
+ ! do i = 1, ncol
+ ! if (k < troplevchem(i)) then
+ ! sulfate(i,k) = 0.0_r8
+ ! end if
+ ! end do
+ !end do
+
+ !call outfld( 'SULF_TROP', sulfate(:ncol,:), ncol, lchnk )
+
+ !!-----------------------------------------------------------------
+ !! ... compute the relative humidity
+ !!-----------------------------------------------------------------
+ !call qsat(tfld(:ncol,:), pmid(:ncol,:), satv, satq)
+
+ !do k = 1,pver
+ ! relhum(:,k) = .622_r8 * h2ovmr(:,k) / satq(:,k)
+ ! relhum(:,k) = max( 0._r8,min( 1._r8,relhum(:,k) ) )
+ !end do
+ !
+ !cwat(:ncol,:pver) = cldw(:ncol,:pver)
+
+ !call usrrxt( reaction_rates, tfld, ion_temp_fld, ele_temp_fld, invariants, h2ovmr, &
+ ! pmid, invariants(:,:,indexm), sulfate, mmr, relhum, strato_sad, &
+ ! troplevchem, dlats, ncol, sad_trop, reff, cwat, mbar, pbuf )
+
+ !call outfld( 'SAD_TROP', sad_trop(:ncol,:), ncol, lchnk )
+
+ !! Add trop/strat components of SAD for output
+ !sad_trop(:ncol,:)=sad_trop(:ncol,:)+strato_sad(:ncol,:)
+ !call outfld( 'SAD_AERO', sad_trop(:ncol,:), ncol, lchnk )
+
+ !! Add trop/strat components of effective radius for output
+ !reff(:ncol,:)=reff(:ncol,:)+reff_strat(:ncol,:)
+ !call outfld( 'REFF_AERO', reff(:ncol,:), ncol, lchnk )
+
+ !if (het1_ndx>0) then
+ ! call outfld( 'het1_total', reaction_rates(:,:,het1_ndx), ncol, lchnk )
+ !endif
+
+ !if (ghg_chem) then
+ ! call ghg_chem_set_rates( reaction_rates, latmapback, zen_angle, ncol, lchnk )
+ !endif
+
+ !do i = phtcnt+1,rxt_tag_cnt
+ ! call outfld( tag_names(i), reaction_rates(:ncol,:,rxt_tag_map(i)), ncol, lchnk )
+ !enddo
+
+ !call adjrxt( reaction_rates, invariants, invariants(1,1,indexm), ncol,pver )
+
+ !!-----------------------------------------------------------------------
+ !! ... Compute the photolysis rates at time = t(n+1)
+ !!-----------------------------------------------------------------------
+ !!-----------------------------------------------------------------------
+ !! ... Set the column densities
+ !!-----------------------------------------------------------------------
+ !call setcol( col_delta, col_dens, vmr, pdel, ncol )
+
+ !!-----------------------------------------------------------------------
+ !! ... Calculate the photodissociation rates
+ !!-----------------------------------------------------------------------
+
+ !esfact = 1._r8
+ !call shr_orb_decl( calday, eccen, mvelpp, lambm0, obliqr , &
+ ! delta, esfact )
+
+
+ !if ( xactive_prates ) then
+ ! if ( dst_ndx > 0 ) then
+ ! dust_vmr(:ncol,:,1:ndust) = vmr(:ncol,:,dst_ndx:dst_ndx+ndust-1)
+ ! else
+ ! dust_vmr(:ncol,:,:) = 0._r8
+ ! endif
+
+ ! !-----------------------------------------------------------------
+ ! ! ... compute the photolysis rates
+ ! !-----------------------------------------------------------------
+ ! call xactive_photo( reaction_rates, vmr, tfld, cwat, cldfr, &
+ ! pmid, zmidr, col_dens, zen_angle, asdir, &
+ ! invariants(1,1,indexm), ps, ts, &
+ ! esfact, relhum, dust_vmr, dt_diag, fracday, ncol, lchnk )
+
+ ! call outfld('DTCBS', dt_diag(:ncol,1), ncol, lchnk )
+ ! call outfld('DTOCS', dt_diag(:ncol,2), ncol, lchnk )
+ ! call outfld('DTSO4', dt_diag(:ncol,3), ncol, lchnk )
+ ! call outfld('DTANT', dt_diag(:ncol,4), ncol, lchnk )
+ ! call outfld('DTSAL', dt_diag(:ncol,5), ncol, lchnk )
+ ! call outfld('DTDUST', dt_diag(:ncol,6), ncol, lchnk )
+ ! call outfld('DTSOA', dt_diag(:ncol,7), ncol, lchnk )
+ ! call outfld('DTTOTAL', dt_diag(:ncol,8), ncol, lchnk )
+ ! call outfld('FRACDAY', fracday(:ncol), ncol, lchnk )
+
+ !else
+ ! !-----------------------------------------------------------------
+ ! ! ... lookup the photolysis rates from table
+ ! !-----------------------------------------------------------------
+ ! call table_photo( reaction_rates, pmid, pdel, tfld, zmid, zint, &
+ ! col_dens, zen_angle, asdir, cwat, cldfr, &
+ ! esfact, vmr, invariants, ncol, lchnk, pbuf )
+ !endif
+
+ !do i = 1,phtcnt
+ ! call outfld( tag_names(i), reaction_rates(:ncol,:,rxt_tag_map(i)), ncol, lchnk )
+ !enddo
+
+ !!-----------------------------------------------------------------------
+ !! ... Adjust the photodissociation rates
+ !!-----------------------------------------------------------------------
+ !call O1D_to_2OH_adj( reaction_rates, invariants, invariants(:,:,indexm), ncol, tfld )
+ !call phtadj( reaction_rates, invariants, invariants(:,:,indexm), ncol,pver )
+
+ !!-----------------------------------------------------------------------
+ !! ... Compute the extraneous frcing at time = t(n+1)
+ !!-----------------------------------------------------------------------
+ !if ( o2_ndx > 0 .and. o_ndx > 0 ) then
+ ! do k = 1,pver
+ ! o2mmr(:ncol,k) = mmr(:ncol,k,o2_ndx)
+ ! ommr(:ncol,k) = mmr(:ncol,k,o_ndx)
+ ! end do
+ !endif
+ !call setext( extfrc, zint, zintr, cldtop, &
+ ! zmid, lchnk, tfld, o2mmr, ommr, &
+ ! pmid, mbar, rlats, calday, ncol, rlons, pbuf )
+ !! include forcings from fire emissions ...
+ !call fire_emissions_vrt( ncol, lchnk, zint, fire_sflx, fire_ztop, extfrc )
+
+ !do m = 1,extcnt
+ ! if( m /= synoz_ndx .and. m /= aoa_nh_ext_ndx ) then
+ ! do k = 1,pver
+ ! extfrc(:ncol,k,m) = extfrc(:ncol,k,m) / invariants(:ncol,k,indexm)
+ ! end do
+ ! endif
+ ! call outfld( extfrc_name(m), extfrc(:ncol,:,m), ncol, lchnk )
+ !end do
+
+ !!-----------------------------------------------------------------------
+ !! ... Form the washout rates
+ !!-----------------------------------------------------------------------
+ !if ( gas_wetdep_method=='MOZ' ) then
+ ! call sethet( het_rates, pmid, zmid, phis, tfld, &
+ ! cmfdqr, prain, nevapr, delt, invariants(:,:,indexm), &
+ ! vmr, ncol, lchnk )
+ ! if (.not. convproc_do_aer) then
+ ! call het_diags( het_rates(:ncol,:,:), mmr(:ncol,:,:), pdel(:ncol,:), lchnk, ncol )
+ ! endif
+ !else
+ ! het_rates = 0._r8
+ !end if
+!
+! CCMI
+!
+! set loss to below the tropopause only
+!
+ !if ( st80_25_tau_ndx > 0 ) then
+ ! do i = 1,ncol
+ ! reaction_rates(i,1:troplev(i),st80_25_tau_ndx) = 0._r8
+ ! enddo
+ !end if
+
+ !if ( has_linoz_data ) then
+ ! ltrop_sol(:ncol) = troplev(:ncol)
+ !else
+ ! ltrop_sol(:ncol) = 0 ! apply solver to all levels
+ !endif
+
+ !! save h2so4 before gas phase chem (for later new particle nucleation)
+ !if (ndx_h2so4 > 0) then
+ ! del_h2so4_gasprod(1:ncol,:) = vmr(1:ncol,:,ndx_h2so4)
+ !else
+ ! del_h2so4_gasprod(:,:) = 0.0_r8
+ !endif
+
+ !vmr0(:ncol,:,:) = vmr(:ncol,:,:) ! mixing ratios before chemistry changes
+
+ !!=======================================================================
+ !! ... Call the class solution algorithms
+ !!=======================================================================
+ !!-----------------------------------------------------------------------
+ !! ... Solve for "Explicit" species
+ !!-----------------------------------------------------------------------
+ !call exp_sol( vmr, reaction_rates, het_rates, extfrc, delt, invariants(1,1,indexm), ncol, lchnk, ltrop_sol )
+
+ !!-----------------------------------------------------------------------
+ !! ... Solve for "Implicit" species
+ !!-----------------------------------------------------------------------
+ !if ( has_strato_chem ) wrk(:,:) = vmr(:,:,h2o_ndx)
+ !call t_startf('imp_sol')
+ !!
+ !call imp_sol( vmr, reaction_rates, het_rates, extfrc, delt, &
+ ! ncol,pver, lchnk, prod_out, loss_out )
+
+ !call t_stopf('imp_sol')
+
+ !call chem_prod_loss_diags_out( ncol, lchnk, vmr, reaction_rates, prod_out, loss_out, invariants(:ncol,:,indexm) )
+ !if( h2o_ndx>0) call outfld( 'H2O_GAS', vmr(1,1,h2o_ndx), ncol ,lchnk )
+
+ !! reset O3S to O3 in the stratosphere ...
+ !if ( o3_ndx > 0 .and. o3s_ndx > 0 ) then
+ ! do i = 1,ncol
+ ! vmr(i,1:troplev(i),o3s_ndx) = vmr(i,1:troplev(i),o3_ndx)
+ ! end do
+ !end if
+
+ !if (convproc_do_aer) then
+ ! call vmr2mmr( vmr(:ncol,:,:), mmr_new(:ncol,:,:), mbar(:ncol,:), ncol )
+ ! ! mmr_new = average of mmr values before and after imp_sol
+ ! mmr_new(:ncol,:,:) = 0.5_r8*( mmr(:ncol,:,:) + mmr_new(:ncol,:,:) )
+ ! call het_diags( het_rates(:ncol,:,:), mmr_new(:ncol,:,:), pdel(:ncol,:), lchnk, ncol )
+ !endif
+
+ !! save h2so4 change by gas phase chem (for later new particle nucleation)
+ !if (ndx_h2so4 > 0) then
+ ! del_h2so4_gasprod(1:ncol,:) = vmr(1:ncol,:,ndx_h2so4) - del_h2so4_gasprod(1:ncol,:)
+ !endif
+
+!
+! Aerosol processes ...
+!
+
+ !call aero_model_gasaerexch( imozart-1, ncol, lchnk, troplevchem, delt, reaction_rates, &
+ ! tfld, pmid, pdel, mbar, relhum, &
+ ! zm, qh2o, cwat, cldfr, ncldwtr, &
+ ! invariants(:,:,indexm), invariants, del_h2so4_gasprod, &
+ ! vmr0, vmr, pbuf )
+
+ !if ( has_strato_chem ) then
+
+ ! wrk(:ncol,:) = (vmr(:ncol,:,h2o_ndx) - wrk(:ncol,:))*delt_inverse
+ ! call outfld( 'QDCHEM', wrk(:ncol,:), ncol, lchnk )
+ ! call outfld( 'HNO3_GAS', vmr(:ncol,:,hno3_ndx), ncol ,lchnk )
+
+ ! !-----------------------------------------------------------------------
+ ! ! ... aerosol settling
+ ! ! first settle hno3(2) using radius ice
+ ! ! secnd settle hno3(3) using radius large nat
+ ! !-----------------------------------------------------------------------
+ ! wrk(:,:) = vmr(:,:,h2o_ndx)
+#ifdef ALT_SETTL
+ ! where( h2o_cond(:,:) > 0._r8 )
+ ! settl_rad(:,:) = radius_strat(:,:,3)
+ ! elsewhere
+ ! settl_rad(:,:) = 0._r8
+ ! endwhere
+ ! call strat_aer_settling( invariants(1,1,indexm), pmid, delt, zmid, tfld, &
+ ! hno3_cond(1,1,2), settl_rad, ncol, lchnk, 1 )
+
+ ! where( h2o_cond(:,:) == 0._r8 )
+ ! settl_rad(:,:) = radius_strat(:,:,2)
+ ! elsewhere
+ ! settl_rad(:,:) = 0._r8
+ ! endwhere
+ ! call strat_aer_settling( invariants(1,1,indexm), pmid, delt, zmid, tfld, &
+ ! hno3_cond(1,1,2), settl_rad, ncol, lchnk, 2 )
+#else
+ ! call strat_aer_settling( invariants(1,1,indexm), pmid, delt, zmid, tfld, &
+ ! hno3_cond(1,1,2), radius_strat(1,1,2), ncol, lchnk, 2 )
+#endif
+
+ !-----------------------------------------------------------------------
+ ! ... reform total hno3 and hcl = gas + all condensed
+ !-----------------------------------------------------------------------
+! NOTE: vmr for hcl and hno3 is gas-phase at this point.
+! hno3_cond(:,k,1) = STS; hno3_cond(:,k,2) = NAT
+
+ ! do k = 1,pver
+ ! vmr(:,k,hno3_ndx) = vmr(:,k,hno3_ndx) + hno3_cond(:,k,1) &
+ ! + hno3_cond(:,k,2)
+ ! vmr(:,k,hcl_ndx) = vmr(:,k,hcl_ndx) + hcl_cond(:,k)
+ !
+ ! end do
+
+ ! wrk(:,:) = (vmr(:,:,h2o_ndx) - wrk(:,:))*delt_inverse
+ ! call outfld( 'QDSETT', wrk(:,:), ncol, lchnk )
+
+ !endif
+
+!
+! LINOZ
+!
+ !if ( do_lin_strat_chem ) then
+ ! call lin_strat_chem_solve( ncol, lchnk, vmr(:,:,o3_ndx), col_dens(:,:,1), tfld, zen_angle, pmid, delt, rlats, troplev )
+ !end if
+
+ !!-----------------------------------------------------------------------
+ !! ... Check for negative values and reset to zero
+ !!-----------------------------------------------------------------------
+ !call negtrc( 'After chemistry ', vmr, ncol )
+
+ !!-----------------------------------------------------------------------
+ !! ... Set upper boundary mmr values
+ !!-----------------------------------------------------------------------
+ !call set_fstrat_vals( vmr, pmid, pint, troplev, calday, ncol,lchnk )
+
+ !!-----------------------------------------------------------------------
+ !! ... Set fixed lower boundary mmr values
+ !!-----------------------------------------------------------------------
+ !call flbc_set( vmr, ncol, lchnk, map2chm )
+
+ !!-----------------------------------------------------------------------
+ !! set NOy UBC
+ !!-----------------------------------------------------------------------
+ !call noy_ubc_set( lchnk, ncol, vmr )
+
+ !if ( ghg_chem ) then
+ ! call ghg_chem_set_flbc( vmr, ncol )
+ !endif
+
+ !!-----------------------------------------------------------------------
+ !! force ion/electron balance -- ext forcings likely do not conserve charge
+ !!-----------------------------------------------------------------------
+ !call charge_balance( ncol, vmr )
+
+ !!-----------------------------------------------------------------------
+ !! ... Xform from vmr to mmr
+ !!-----------------------------------------------------------------------
+ !call vmr2mmr( vmr(:ncol,:,:), mmr_tend(:ncol,:,:), mbar(:ncol,:), ncol )
+
+ !call set_short_lived_species( mmr_tend, lchnk, ncol, pbuf )
+
+ !!-----------------------------------------------------------------------
+ !! ... Form the tendencies
+ !!-----------------------------------------------------------------------
+ !do m = 1,gas_pcnst
+ ! mmr_new(:ncol,:,m) = mmr_tend(:ncol,:,m)
+ ! mmr_tend(:ncol,:,m) = (mmr_tend(:ncol,:,m) - mmr(:ncol,:,m))*delt_inverse
+ !enddo
+
+ !do m = 1,pcnst
+ ! n = map2chm(m)
+ ! if( n > 0 ) then
+ ! qtend(:ncol,:,m) = qtend(:ncol,:,m) + mmr_tend(:ncol,:,n)
+ ! end if
+ !end do
+
+ !tvs(:ncol) = tfld(:ncol,pver) * (1._r8 + qh2o(:ncol,pver))
+
+ !sflx(:,:) = 0._r8
+ !call get_ref_date(yr, mon, day, sec)
+ !ncdate = yr*10000 + mon*100 + day
+ !wind_speed(:ncol) = sqrt( ufld(:ncol,pver)*ufld(:ncol,pver) + vfld(:ncol,pver)*vfld(:ncol,pver) )
+ !prect(:ncol) = precc(:ncol) + precl(:ncol)
+
+ !if ( drydep_method == DD_XLND ) then
+ ! soilw = -99
+ ! call drydep( ocnfrac, icefrac, ncdate, ts, ps, &
+ ! wind_speed, qh2o(:,pver), tfld(:,pver), pmid(:,pver), prect, &
+ ! snowhland, fsds, depvel, sflx, mmr, &
+ ! tvs, soilw, relhum(:,pver:pver), ncol, lonndx, latndx, lchnk )
+ !else if ( drydep_method == DD_XATM ) then
+ ! table_soilw = has_drydep( 'H2' ) .or. has_drydep( 'CO' )
+ ! if( .not. dyn_soilw .and. table_soilw ) then
+ ! call set_soilw( soilw, lchnk, calday )
+ ! end if
+ ! call drydep( ncdate, ts, ps, &
+ ! wind_speed, qh2o(:,pver), tfld(:,pver), pmid(:,pver), prect, &
+ ! snowhland, fsds, depvel, sflx, mmr, &
+ ! tvs, soilw, relhum(:,pver:pver), ncol, lonndx, latndx, lchnk )
+ !else if ( drydep_method == DD_TABL ) then
+ ! call drydep( calday, ts, zen_angle, &
+ ! depvel, sflx, mmr, pmid(:,pver), &
+ ! tvs, ncol, icefrac, ocnfrac, lchnk )
+ !endif
+
+ !drydepflx(:,:) = 0._r8
+ !do m = 1,pcnst
+ ! n = map2chm( m )
+ ! if ( n > 0 ) then
+ ! cflx(:ncol,m) = cflx(:ncol,m) - sflx(:ncol,n)
+ ! drydepflx(:ncol,m) = sflx(:ncol,n)
+ ! wetdepflx_diag(:ncol,n) = wetdepflx(:ncol,m)
+ ! endif
+ !end do
+
+ !call chm_diags( lchnk, ncol, vmr(:ncol,:,:), mmr_new(:ncol,:,:), &
+ ! reaction_rates(:ncol,:,:), invariants(:ncol,:,:), depvel(:ncol,:), sflx(:ncol,:), &
+ ! mmr_tend(:ncol,:,:), pdel(:ncol,:), pmid(:ncol,:), troplev(:ncol), wetdepflx_diag(:ncol,:), &
+ ! nhx_nitrogen_flx(:ncol), noy_nitrogen_flx(:ncol) )
+
+ !call rate_diags_calc( reaction_rates(:,:,:), vmr(:,:,:), invariants(:,:,indexm), ncol, lchnk )
+!
+! jfl
+!
+! surface vmr
+!
+ !if ( pm25_srf_diag ) then
+ ! pm25(:ncol) = mmr_new(:ncol,pver,cb1_ndx) &
+ ! + mmr_new(:ncol,pver,cb2_ndx) &
+ ! + mmr_new(:ncol,pver,oc1_ndx) &
+ ! + mmr_new(:ncol,pver,oc2_ndx) &
+ ! + mmr_new(:ncol,pver,dst1_ndx) &
+ ! + mmr_new(:ncol,pver,dst2_ndx) &
+ ! + mmr_new(:ncol,pver,sslt1_ndx) &
+ ! + mmr_new(:ncol,pver,sslt2_ndx) &
+ ! + mmr_new(:ncol,pver,soa_ndx) &
+ ! + mmr_new(:ncol,pver,so4_ndx)
+ ! call outfld('PM25_SRF',pm25(:ncol) , ncol, lchnk )
+ !endif
+ !if ( pm25_srf_diag_soa ) then
+ ! pm25(:ncol) = mmr_new(:ncol,pver,cb1_ndx) &
+ ! + mmr_new(:ncol,pver,cb2_ndx) &
+ ! + mmr_new(:ncol,pver,oc1_ndx) &
+ ! + mmr_new(:ncol,pver,oc2_ndx) &
+ ! + mmr_new(:ncol,pver,dst1_ndx) &
+ ! + mmr_new(:ncol,pver,dst2_ndx) &
+ ! + mmr_new(:ncol,pver,sslt1_ndx) &
+ ! + mmr_new(:ncol,pver,sslt2_ndx) &
+ ! + mmr_new(:ncol,pver,soam_ndx) &
+ ! + mmr_new(:ncol,pver,soai_ndx) &
+ ! + mmr_new(:ncol,pver,soat_ndx) &
+ ! + mmr_new(:ncol,pver,soab_ndx) &
+ ! + mmr_new(:ncol,pver,soax_ndx) &
+ ! + mmr_new(:ncol,pver,so4_ndx)
+ ! call outfld('PM25_SRF',pm25(:ncol) , ncol, lchnk )
+ !endif
+!
+!
+ !call outfld('Q_SRF',qh2o(:ncol,pver) , ncol, lchnk )
+ !call outfld('U_SRF',ufld(:ncol,pver) , ncol, lchnk )
+ !call outfld('V_SRF',vfld(:ncol,pver) , ncol, lchnk )
+
+!
+ !if (.not.sad_pbf_ndx>0) then
+ ! deallocate(strato_sad)
+ !endif
+
+ end subroutine gas_phase_chemdr
+
+end module mo_gas_phase_chemdr
diff --git a/src/chemistry/geoschem/mo_ghg_chem.F90 b/src/chemistry/geoschem/mo_ghg_chem.F90
new file mode 120000
index 0000000000..f8a8b4ba4c
--- /dev/null
+++ b/src/chemistry/geoschem/mo_ghg_chem.F90
@@ -0,0 +1 @@
+../mozart/mo_ghg_chem.F90
\ No newline at end of file
diff --git a/src/chemistry/geoschem/mo_lightning.F90 b/src/chemistry/geoschem/mo_lightning.F90
new file mode 120000
index 0000000000..8b731ae98f
--- /dev/null
+++ b/src/chemistry/geoschem/mo_lightning.F90
@@ -0,0 +1 @@
+../mozart/mo_lightning.F90
\ No newline at end of file
diff --git a/src/chemistry/geoschem/mo_mean_mass.F90 b/src/chemistry/geoschem/mo_mean_mass.F90
new file mode 120000
index 0000000000..e4231e65f7
--- /dev/null
+++ b/src/chemistry/geoschem/mo_mean_mass.F90
@@ -0,0 +1 @@
+../mozart/mo_mean_mass.F90
\ No newline at end of file
diff --git a/src/chemistry/geoschem/mo_neu_wetdep.F90 b/src/chemistry/geoschem/mo_neu_wetdep.F90
new file mode 100644
index 0000000000..b70718015a
--- /dev/null
+++ b/src/chemistry/geoschem/mo_neu_wetdep.F90
@@ -0,0 +1,1805 @@
+!
+! code written by J.-F. Lamarque, S. Walters and F. Vitt
+! based on the original code from J. Neu developed for UC Irvine
+! model
+!
+! LKE 2/23/2018 - correct setting flag for mass-limited (HNO3,etc.) vs Henry's Law washout
+!
+module mo_neu_wetdep
+!
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use cam_logfile, only : iulog
+ use constituents, only : pcnst
+ use spmd_utils, only : masterproc
+ use cam_abortutils, only : endrun
+ use seq_drydep_mod, only : n_species_table, species_name_table, dheff
+ use gas_wetdep_opts, only : gas_wetdep_method, gas_wetdep_list, gas_wetdep_cnt
+!
+ implicit none
+!
+ private
+ public :: neu_wetdep_init
+ public :: neu_wetdep_tend
+!
+ save
+!
+ integer, allocatable, dimension(:) :: mapping_to_heff,mapping_to_mmr
+ real(r8),allocatable, dimension(:) :: mol_weight
+ logical ,allocatable, dimension(:) :: ice_uptake
+ integer :: index_cldice,index_cldliq,nh3_ndx,co2_ndx
+ logical :: debug = .false.
+ integer :: hno3_ndx = 0
+ integer :: h2o2_ndx = 0
+!
+! diagnostics
+!
+ logical :: do_diag = .false.
+ integer, parameter :: kdiag = 18
+!
+ real(r8), parameter :: zero = 0._r8
+ real(r8), parameter :: one = 1._r8
+!
+ logical :: do_neu_wetdep
+!
+ real(r8), parameter :: TICE=263._r8
+
+contains
+
+!-----------------------------------------------------------------------
+!-----------------------------------------------------------------------
+!
+subroutine neu_wetdep_init
+!
+ use constituents, only : cnst_get_ind,cnst_mw
+ use cam_history, only : addfld, add_default, horiz_only
+ use phys_control, only : phys_getopts
+!
+ integer :: m,l
+ character*20 :: test_name
+
+ logical :: history_chemistry
+
+ call phys_getopts(history_chemistry_out=history_chemistry)
+
+ do_neu_wetdep = gas_wetdep_method == 'NEU' .and. gas_wetdep_cnt>0
+
+ if (.not.do_neu_wetdep) return
+
+ allocate( mapping_to_heff(gas_wetdep_cnt) )
+ allocate( mapping_to_mmr(gas_wetdep_cnt) )
+ allocate( ice_uptake(gas_wetdep_cnt) )
+ allocate( mol_weight(gas_wetdep_cnt) )
+
+!
+! find mapping to heff table
+!
+ if ( debug ) then
+ print '(a,i4)','gas_wetdep_cnt=',gas_wetdep_cnt
+ print '(a,i4)','n_species_table=',n_species_table
+ end if
+ mapping_to_heff = -99
+ do m=1,gas_wetdep_cnt
+!
+ test_name = gas_wetdep_list(m)
+ if ( debug ) print '(i4,a)',m,trim(test_name)
+!
+! mapping based on the MOZART4 wet removal subroutine;
+! this might need to be redone (JFL: Sep 2010)
+!
+ select case( trim(test_name) )
+!
+! CCMI: added SO2t and NH_50W
+!
+ case( 'HYAC', 'CH3COOH' , 'HCOOH', 'EOOH', 'IEPOX' )
+ test_name = 'CH2O'
+ case ( 'SOGB','SOGI','SOGM','SOGT','SOGX' )
+ test_name = 'H2O2'
+ case ( 'SO2t' )
+ test_name = 'SO2'
+ case ( 'CLONO2','BRONO2','HCL','HOCL','HOBR','HBR', 'Pb', 'MACROOH', 'ISOPOOH', 'XOOH', 'H2SO4', 'HF', 'COF2', 'COFCL')
+ test_name = 'HNO3'
+ case ( 'NH_50W', 'NDEP', 'NHDEP', 'NH4NO3' )
+ test_name = 'HNO3'
+ case ( 'ALKOOH', 'MEKOOH', 'TOLOOH' )
+ test_name = 'CH3OOH'
+ case( 'PHENOOH', 'BENZOOH', 'C6H5OOH', 'BZOOH', 'XYLOLOOH', 'XYLENOOH', 'HPALD' )
+ test_name = 'CH3OOH'
+ case( 'TERPOOH', 'TERP2OOH', 'MBOOOH' )
+ test_name = 'HNO3'
+ case( 'TERPROD1', 'TERPROD2' )
+ test_name = 'CH2O'
+ case( 'HMPROP' )
+ test_name = 'GLYALD'
+ case( 'NOA', 'ALKNIT', 'ISOPNITA', 'ISOPNITB', 'HONITR', 'ISOPNOOH' )
+ test_name = 'H2O2'
+ case( 'NC4CHO', 'NC4CH2OH', 'TERPNIT', 'NTERPOOH' )
+ test_name = 'H2O2'
+ case( 'SOAGbb0' ) ! Henry's Law coeff. added for VBS SOA's, biomass burning is the same as fossil fuels
+ test_name = 'SOAGff0'
+ case( 'SOAGbb1' )
+ test_name = 'SOAGff1'
+ case( 'SOAGbb2' )
+ test_name = 'SOAGff2'
+ case( 'SOAGbb3' )
+ test_name = 'SOAGff3'
+ case( 'SOAGbb4' )
+ test_name = 'SOAGff4'
+ case( 'H2O2' )
+ test_name = 'GC_H2O2'
+ case( 'HCHO' )
+ test_name = 'GC_CH2O'
+ case( 'CH2O' )
+ test_name = 'GC_CH2O'
+ case( 'NO2' )
+ test_name = 'GC_NO2'
+ !case( 'HNO3' )
+ ! test_name = 'GC_HNO3'
+ case( 'NH3' )
+ test_name = 'GC_NH3'
+ case( 'N2O5' )
+ test_name = 'GC_N2O5'
+ case( 'PAN' )
+ test_name = 'GC_PAN'
+ !case( 'SO2' )
+ ! test_name = 'GC_SO2'
+ ! Now list all non-MAM GEOS-Chem aerosols. These will be scavenged similarly
+ ! to HNO3
+ case( 'AERI', 'BRSALA', 'BRSALC', 'INDIOL', &
+ 'IONITA', 'ISALA', 'ISALC', 'LVOCOA', 'MONITA', &
+ 'MSA', 'NH4', 'NIT', 'NITS', 'PFE', &
+ 'SALAAL', 'SALACL', 'SALCAL', 'SALCCL', 'SO4S', &
+ 'SOAS', 'SOAGX', 'SOAIE', 'TSOA0', 'TSOA1', &
+ 'TSOA2', 'TSOA3', 'ASOAN', 'ASOA1', 'ASOA2', &
+ 'ASOA3' )
+ test_name = 'HNO3'
+ case( 'ASOG1', 'ASOG2', 'ASOG3' )
+ test_name = 'ASOG'
+ case( 'TSOG0', 'TSOG1', 'TSOG2', 'TSOG3' )
+ test_name = 'TSOG'
+ end select
+!
+ do l = 1,n_species_table
+!
+! if ( debug ) print '(i4,a)',l,trim(species_name_table(l))
+!
+ if( trim(test_name) == trim( species_name_table(l) ) ) then
+ mapping_to_heff(m) = l
+ if ( debug ) print '(a,a,i4)','mapping to heff of ',trim(species_name_table(l)),l
+ exit
+ end if
+ end do
+ if ( mapping_to_heff(m) == -99 ) then
+ if (masterproc) print *,'problem with mapping_to_heff of ',trim(test_name)
+! call endrun()
+ end if
+!
+! special cases for NH3 and CO2
+!
+ if ( trim(test_name) == 'NH3' ) then
+ nh3_ndx = m
+ end if
+ if ( trim(test_name) == 'CO2' ) then
+ co2_ndx = m
+ end if
+ if ( trim(gas_wetdep_list(m)) == 'HNO3' ) then
+ hno3_ndx = m
+ end if
+!
+ end do
+
+ if (any ( mapping_to_heff(:) == -99 )) call endrun('mo_neu_wet->depwetdep_init: unmapped species error' )
+!
+ if ( debug ) then
+ print '(a,i4)','co2_ndx',co2_ndx
+ print '(a,i4)','nh3_ndx',nh3_ndx
+ end if
+!
+! find mapping to species
+!
+ mapping_to_mmr = -99
+ do m=1,gas_wetdep_cnt
+ if ( debug ) print '(i4,a)',m,trim(gas_wetdep_list(m))
+ call cnst_get_ind(gas_wetdep_list(m), mapping_to_mmr(m), abort=.false. )
+ if ( debug ) print '(a,i4)','mapping_to_mmr ',mapping_to_mmr(m)
+ if ( mapping_to_mmr(m) <= 0 ) then
+ print *,'problem with mapping_to_mmr of ',gas_wetdep_list(m)
+ call endrun('problem with mapping_to_mmr of '//trim(gas_wetdep_list(m)))
+ end if
+ end do
+!
+! define species-dependent arrays
+!
+ do m=1,gas_wetdep_cnt
+!
+ mol_weight(m) = cnst_mw(mapping_to_mmr(m))
+ if ( debug ) print '(i4,a,f8.4)',m,' mol_weight ',mol_weight(m)
+ ice_uptake(m) = .false.
+ if ( trim(gas_wetdep_list(m)) == 'HNO3' ) then
+ ice_uptake(m) = .true.
+ end if
+!
+!
+ end do
+!
+! indices for cloud quantities
+!
+ call cnst_get_ind( 'CLDICE', index_cldice )
+ call cnst_get_ind( 'CLDLIQ', index_cldliq )
+!
+! define output
+!
+ do m=1,gas_wetdep_cnt
+ call addfld ('DTWR_'//trim(gas_wetdep_list(m)),(/ 'lev' /), 'A','kg/kg/s','wet removal Neu scheme tendency')
+ call addfld ('WD_'//trim(gas_wetdep_list(m)),horiz_only, 'A','kg/m2/s','vertical integrated wet deposition flux')
+ call addfld ('HEFF_'//trim(gas_wetdep_list(m)),(/ 'lev' /), 'A','M/atm','Effective Henrys Law coeff.')
+ !call add_default('DTWR_'//trim(gas_wetdep_list(m)), 2, ' ')
+ !call add_default('WD_'//trim(gas_wetdep_list(m)), 2, ' ')
+ !call add_default('HEFF_'//trim(gas_wetdep_list(m)), 2, ' ')
+ if (history_chemistry) then
+ call add_default('DTWR_'//trim(gas_wetdep_list(m)), 1, ' ')
+ call add_default('WD_'//trim(gas_wetdep_list(m)), 1, ' ')
+ end if
+ end do
+!
+ if ( do_diag ) then
+ call addfld ('QT_RAIN_HNO3',(/ 'lev' /), 'A','mol/mol/s','wet removal Neu scheme rain tendency')
+ call addfld ('QT_RIME_HNO3',(/ 'lev' /), 'A','mol/mol/s','wet removal Neu scheme rain tendency')
+ call addfld ('QT_WASH_HNO3',(/ 'lev' /), 'A','mol/mol/s','wet removal Neu scheme rain tendency')
+ call addfld ('QT_EVAP_HNO3',(/ 'lev' /), 'A','mol/mol/s','wet removal Neu scheme rain tendency')
+ if (history_chemistry) then
+ call add_default('QT_RAIN_HNO3',1,' ')
+ call add_default('QT_RIME_HNO3',1,' ')
+ call add_default('QT_WASH_HNO3',1,' ')
+ call add_default('QT_EVAP_HNO3',1,' ')
+ end if
+ end if
+!
+ return
+!
+end subroutine neu_wetdep_init
+!
+subroutine neu_wetdep_tend(lchnk,ncol,mmr,pmid,pdel,zint,tfld,delt, &
+ prain, nevapr, cld, cmfdqr, wd_tend, wd_tend_int)
+!
+ use ppgrid, only : pcols, pver
+!!DEK
+ use phys_grid, only : get_area_all_p, get_rlat_all_p
+ use shr_const_mod, only : SHR_CONST_REARTH,SHR_CONST_G
+ use cam_history, only : outfld
+!
+ implicit none
+!
+ integer, intent(in) :: lchnk,ncol
+ real(r8), intent(in) :: mmr(pcols,pver,pcnst) ! mass mixing ratio (kg/kg)
+ real(r8), intent(in) :: pmid(pcols,pver) ! midpoint pressures (Pa)
+ real(r8), intent(in) :: pdel(pcols,pver) ! pressure delta about midpoints (Pa)
+ real(r8), intent(in) :: zint(pcols,pver+1) ! interface geopotential height above the surface (m)
+ real(r8), intent(in) :: tfld(pcols,pver) ! midpoint temperature (K)
+ real(r8), intent(in) :: delt ! timestep (s)
+!
+ real(r8), intent(in) :: prain(ncol, pver)
+ real(r8), intent(in) :: nevapr(ncol, pver)
+ real(r8), intent(in) :: cld(ncol, pver)
+ real(r8), intent(in) :: cmfdqr(ncol, pver)
+ real(r8), intent(inout) :: wd_tend(pcols,pver,pcnst)
+ real(r8), intent(inout) :: wd_tend_int(pcols,pcnst)
+!
+! local arrays and variables
+!
+ integer :: i,k,l,kk,m,id
+ real(r8), parameter :: rearth = SHR_CONST_REARTH ! radius earth (m)
+ real(r8), parameter :: gravit = SHR_CONST_G ! m/s^2
+ real(r8), dimension(ncol) :: area, wk_out
+ real(r8), dimension(ncol,pver) :: cldice,cldliq,cldfrc,totprec,totevap,delz,delp,p
+ real(r8), dimension(ncol,pver) :: rls,evaprate,mass_in_layer,temp
+ real(r8), dimension(ncol,pver,gas_wetdep_cnt) :: trc_mass,heff,dtwr
+ real(r8), dimension(ncol,pver,gas_wetdep_cnt) :: wd_mmr
+ logical , dimension(gas_wetdep_cnt) :: tckaqb
+ integer , dimension(ncol) :: test_flag
+!
+! arrays for HNO3 diagnostics
+!
+ real(r8), dimension(ncol,pver) :: qt_rain,qt_rime,qt_wash,qt_evap
+!
+! for Henry's law calculations
+!
+ real(r8), parameter :: t0 = 298._r8
+ real(r8), parameter :: ph = 1.e-5_r8
+ real(r8), parameter :: ph_inv = 1._r8/ph
+ real(r8) :: e298, dhr
+ real(r8), dimension(ncol) :: dk1s,dk2s,wrk
+!!DEK
+ real(r8) :: pi
+ real(r8) :: lats(pcols)
+!
+! from cam/src/physics/cam/stratiform.F90
+!
+!!DEK
+ pi = 4._r8*atan(1.0_r8)
+
+ if (.not.do_neu_wetdep) return
+!
+! don't do anything if there are no species to be removed
+!
+ if ( gas_wetdep_cnt == 0 ) return
+!
+! reset output variables
+!
+ wd_tend_int = 0._r8
+!
+! get area (in radians square)
+!
+ call get_area_all_p(lchnk, ncol, area)
+ area = area * rearth**2 ! in m^2
+!
+! reverse order along the vertical before calling
+! J. Neu's wet removal subroutine
+!
+ do k=1,pver
+ kk = pver - k + 1
+ do i=1,ncol
+!
+ mass_in_layer(i,k) = area(i) * pdel(i,kk)/gravit ! kg
+!
+ cldice (i,k) = mmr(i,kk,index_cldice) ! kg/kg
+ cldliq (i,k) = mmr(i,kk,index_cldliq) ! kg/kg
+ cldfrc (i,k) = cld(i,kk) ! unitless
+!
+ totprec(i,k) = (prain(i,kk)+cmfdqr(i,kk)) &
+ * mass_in_layer(i,k) ! kg/s
+ totevap(i,k) = nevapr(i,kk) * mass_in_layer(i,k) ! kg/s
+!
+ delz(i,k) = zint(i,kk) - zint(i,kk+1) ! in m
+!
+ temp(i,k) = tfld(i,kk)
+!
+! convert tracer mass to kg to kg/kg
+!
+ trc_mass(i,k,:) = mmr(i,kk,mapping_to_mmr(:)) * mass_in_layer(i,k)
+!
+ delp(i,k) = pdel(i,kk) * 0.01_r8 ! in hPa
+ p (i,k) = pmid(i,kk) * 0.01_r8 ! in hPa
+!
+ end do
+ end do
+!
+! define array for tendency calculation (on model grid)
+!
+ dtwr(1:ncol,:,:) = mmr(1:ncol,:,mapping_to_mmr(:))
+!
+! compute 1) integrated precipitation flux across the interfaces (rls)
+! 2) evaporation rate
+!
+ rls (:,pver) = 0._r8
+ evaprate (:,pver) = 0._r8
+ do k=pver-1,1,-1
+ rls (:,k) = max(0._r8,totprec(:,k)-totevap(:,k)+rls(:,k+1))
+ !evaprate(:,k) = min(1._r8,totevap(:,k)/(rls(:,k+1)+totprec(:,k)+1.e-36_r8))
+ evaprate(:,k) = min(1._r8,totevap(:,k)/(rls(:,k+1)+1.e-36_r8))
+ end do
+!
+! compute effective Henry's law coefficients
+! code taken from models/drv/shr/seq_drydep_mod.F90
+!
+ heff = 0._r8
+ do k=1,pver
+!
+ kk = pver - k + 1
+!
+ wrk(:) = (t0-tfld(1:ncol,kk))/(t0*tfld(1:ncol,kk))
+!
+ do m=1,gas_wetdep_cnt
+!
+ l = mapping_to_heff(m)
+ id = 6*(l - 1)
+ e298 = dheff(id+1)
+ dhr = dheff(id+2)
+ heff(:,k,m) = e298*exp( dhr*wrk(:) )
+ test_flag = -99
+ if( dheff(id+3) /= 0._r8 .and. dheff(id+5) == 0._r8 ) then
+ e298 = dheff(id+3)
+ dhr = dheff(id+4)
+ dk1s(:) = e298*exp( dhr*wrk(:) )
+ where( heff(:,k,m) /= 0._r8 )
+ heff(:,k,m) = heff(:,k,m)*(1._r8 + dk1s(:)*ph_inv)
+ elsewhere
+ test_flag = 1
+ heff(:,k,m) = dk1s(:)*ph_inv
+ endwhere
+ end if
+!
+ if (k.eq.1 .and. maxval(test_flag) > 0 .and. debug ) print '(a,i4)','heff for m=',m
+!
+ if( dheff(id+5) /= 0._r8 ) then
+ if( nh3_ndx > 0 .or. co2_ndx > 0 ) then
+ e298 = dheff(id+3)
+ dhr = dheff(id+4)
+ dk1s(:) = e298*exp( dhr*wrk(:) )
+ e298 = dheff(id+5)
+ dhr = dheff(id+6)
+ dk2s(:) = e298*exp( dhr*wrk(:) )
+ if( m == co2_ndx ) then
+ heff(:,k,m) = heff(:,k,m)*(1._r8 + dk1s(:)*ph_inv)*(1._r8 + dk2s(:)*ph_inv)
+ else if( m == nh3_ndx ) then
+ heff(:,k,m) = heff(:,k,m)*(1._r8 + dk1s(:)*ph/dk2s(:))
+ else
+ write(iulog,*) 'error in assigning henrys law coefficients'
+ write(iulog,*) 'species ',m
+ end if
+ end if
+ end if
+!
+ end do
+ end do
+!
+ if ( debug ) then
+ print '(a,50f8.2)','tckaqb ',tckaqb
+ print '(a,50e12.4)','heff ',heff(1,1,:)
+ print '(a,50i4)' ,'ice_uptake ',ice_uptake
+ print '(a,50f8.2)','mol_weight ',mol_weight(:)
+ print '(a,50f8.2)','temp ',temp(1,:)
+ print '(a,50f8.2)','p ',p (1,:)
+ end if
+!
+! call J. Neu's subroutine
+!
+ do i=1,ncol
+!
+ call washo(pver,gas_wetdep_cnt,delt,trc_mass(i,:,:),mass_in_layer(i,:),p(i,:),delz(i,:) &
+ ,rls(i,:),cldliq(i,:),cldice(i,:),cldfrc(i,:),temp(i,:),evaprate(i,:) &
+ ,area(i),heff(i,:,:),mol_weight(:),tckaqb(:),ice_uptake(:) &
+ ,qt_rain(i,:),qt_rime(i,:),qt_wash(i,:),qt_evap(i,:) )
+!
+ end do
+!
+! compute tendencies and convert back to mmr
+! on original vertical grid
+!
+ do k=1,pver
+ kk = pver - k + 1
+ do i=1,ncol
+!
+! convert tracer mass from kg
+!
+ wd_mmr(i,kk,:) = trc_mass(i,k,:) / mass_in_layer(i,k)
+!
+ end do
+ end do
+!
+! tendency calculation (on model grid)
+!
+ dtwr(1:ncol,:,:) = wd_mmr(1:ncol,:,:) - dtwr(1:ncol,:,:)
+ dtwr(1:ncol,:,:) = dtwr(1:ncol,:,:) / delt
+
+!!DEK polarward of 60S, 60N and <200hPa set to zero!
+ call get_rlat_all_p(lchnk, pcols, lats )
+ do k = 1, pver
+ do i= 1, ncol
+ if ( abs( lats(i)*180._r8/pi ) > 60._r8 ) then
+ if ( pmid(i,k) < 20000._r8) then
+ dtwr(i,k,:) = 0._r8
+ endif
+ endif
+ end do
+ end do
+!
+! output tendencies
+!
+ do m=1,gas_wetdep_cnt
+ wd_tend(1:ncol,:,mapping_to_mmr(m)) = wd_tend(1:ncol,:,mapping_to_mmr(m)) + dtwr(1:ncol,:,m)
+ call outfld( 'DTWR_'//trim(gas_wetdep_list(m)),dtwr(:,:,m),ncol,lchnk )
+
+ call outfld( 'HEFF_'//trim(gas_wetdep_list(m)),heff(:,pver:1:-1,m),ncol,lchnk )
+!
+! vertical integrated wet deposition rate [kg/m2/s]
+!
+ wk_out = 0._r8
+ do k=1,pver
+ kk = pver - k + 1
+ wk_out(1:ncol) = wk_out(1:ncol) + (dtwr(1:ncol,k,m) * mass_in_layer(1:ncol,kk)/area(1:ncol))
+ end do
+ call outfld( 'WD_'//trim(gas_wetdep_list(m)),wk_out,ncol,lchnk )
+!
+! to be used in mo_chm_diags to compute wet_deposition_NOy_as_N and wet_deposition_NHx_as_N (units: kg/m2/s)
+!
+ if ( debug) print *,'mo_neu ',mapping_to_mmr(m),(wk_out(1:ncol))
+ wd_tend_int(1:ncol,mapping_to_mmr(m)) = wk_out(1:ncol)
+!
+ end do
+!
+ if ( do_diag ) then
+ call outfld('QT_RAIN_HNO3', qt_rain, ncol, lchnk )
+ call outfld('QT_RIME_HNO3', qt_rime, ncol, lchnk )
+ call outfld('QT_WASH_HNO3', qt_wash, ncol, lchnk )
+ call outfld('QT_EVAP_HNO3', qt_evap, ncol, lchnk )
+ end if
+!
+ return
+end subroutine neu_wetdep_tend
+
+!-----------------------------------------------------------------------
+!
+! Original code from Jessica Neu
+! Updated by S. Walters and J.-F. Lamarque (March-April 2011)
+!
+!-----------------------------------------------------------------------
+
+ subroutine WASHO(LPAR,NTRACE,DTSCAV,QTTJFL,QM,POFL,DELZ, &
+ RLS,CLWC,CIWC,CFR,TEM,EVAPRATE,GAREA,HSTAR,TCMASS,TCKAQB, &
+ TCNION, qt_rain, qt_rime, qt_wash, qt_evap)
+!
+ implicit none
+
+!-----------------------------------------------------------------------
+!---p-conde 5.4 (2007) -----called from main-----
+!---called from pmain to calculate rainout and washout of tracers
+!---revised by JNEU 8/2007
+!---
+!-LAER has been removed - no scavenging for aerosols
+!-LAER could be used as LWASHTYP
+!---WILL THIS WORK FOR T42->T21???????????
+!-----------------------------------------------------------------------
+
+ integer LPAR, NTRACE
+ real(r8), intent(inout) :: QTTJFL(LPAR,NTRACE)
+ real(r8), intent(in) :: DTSCAV, QM(LPAR),POFL(LPAR),DELZ(LPAR),GAREA
+ real(r8), intent(in) :: RLS(LPAR),CLWC(LPAR),CIWC(LPAR),CFR(LPAR),TEM(LPAR), &
+ EVAPRATE(LPAR)
+ real(r8), intent(in) :: HSTAR(LPAR,NTRACE),TCMASS(NTRACE)
+ logical , intent(in) :: TCKAQB(NTRACE),TCNION(NTRACE)
+!
+ real(r8), intent(inout) :: qt_rain(lpar)
+ real(r8), intent(inout) :: qt_rime(lpar)
+ real(r8), intent(inout) :: qt_wash(lpar)
+ real(r8), intent(inout) :: qt_evap(lpar)
+!
+ integer I,J,L,N,LE, LM1
+ real(r8), dimension(LPAR) :: CFXX
+ real(r8), dimension(LPAR) :: QTT, QTTNEW
+
+ real(r8) WRK, RNEW_TST
+ real(r8) CLWX
+ real(r8) RNEW,RPRECIP,DELTARIMEMASS,DELTARIME,RAMPCT
+ real(r8) MASSLOSS
+ real(r8) DOR,DNEW,DEMP,COLEFFSNOW,RHOSNOW
+ real(r8) WEMP,REMP,RRAIN,RWASH
+ real(r8) QTPRECIP,QTRAIN,QTCXA,QTAX,QTOC
+
+ real(r8) FAMA,RAMA,DAMA,FCA,RCA,DCA
+ real(r8) FAX,RAX,DAX,FCXA,RCXA,DCXA,FCXB,RCXB,DCXB
+ real(r8) RAXADJ,FAXADJ,RAXADJF
+ real(r8) QTDISCF,QTDISRIME,QTDISCXA
+ real(r8) QTEVAPAXP,QTEVAPAXW,QTEVAPAX
+ real(r8) QTWASHAX
+ real(r8) QTEVAPCXAP,QTEVAPCXAW,QTEVAPCXA
+ real(r8) QTWASHCXA,QTRIMECXA
+ real(r8) QTRAINCXA,QTRAINCXB
+ real(r8) QTTOPCA,QTTOPAA,QTTOPCAX,QTTOPAAX
+
+ real(r8) AMPCT,AMCLPCT,CLNEWPCT,CLNEWAMPCT,CLOLDPCT,CLOLDAMPCT
+ real(r8) RAXLOC,RCXALOC,RCXBLOC,RCALOC,RAMALOC,RCXPCT
+
+ real(r8) QTNETLCXA,QTNETLCXB,QTNETLAX,QTNETL
+ real(r8) QTDISSTAR
+
+
+ real(r8), parameter :: CFMIN=0.1_r8
+ real(r8), parameter :: CWMIN=1.0e-5_r8
+ real(r8), parameter :: DMIN=1.0e-1_r8 !mm
+ real(r8), parameter :: VOLPOW=1._r8/3._r8
+ real(r8), parameter :: RHORAIN=1.0e3_r8 !kg/m3
+ real(r8), parameter :: RHOSNOWFIX=1.0e2_r8 !kg/m3
+ real(r8), parameter :: COLEFFRAIN=0.7_r8
+ real(r8), parameter :: TMIX=258._r8
+ real(r8), parameter :: TFROZ=240._r8
+ real(r8), parameter :: COLEFFAER=0.05_r8
+!
+! additional work arrays and diagnostics
+!
+ real(r8) :: rls_wrk(lpar)
+ real(r8) :: rnew_wrk(lpar)
+ real(r8) :: rca_wrk(lpar)
+ real(r8) :: fca_wrk(lpar)
+ real(r8) :: rcxa_wrk(lpar)
+ real(r8) :: fcxa_wrk(lpar)
+ real(r8) :: rcxb_wrk(lpar)
+ real(r8) :: fcxb_wrk(lpar)
+ real(r8) :: rax_wrk(lpar,2)
+ real(r8) :: fax_wrk(lpar,2)
+ real(r8) :: rama_wrk(lpar)
+ real(r8) :: fama_wrk(lpar)
+ real(r8) :: deltarime_wrk(lpar)
+ real(r8) :: clwx_wrk(lpar)
+ real(r8) :: frc(lpar,3)
+ real(r8) :: rlsog(lpar)
+!
+ logical :: is_hno3
+ logical :: rls_flag(lpar)
+ logical :: rnew_flag(lpar)
+ logical :: cf_trigger(lpar)
+ logical :: freezing(lpar)
+!
+ real(r8), parameter :: four = 4._r8
+ real(r8), parameter :: adj_factor = one + 10._r8*epsilon( one )
+!
+ integer :: LWASHTYP,LICETYP
+!
+ if ( debug ) then
+ print '(a,50f8.2)','tckaqb ',tckaqb
+ print '(a,50e12.4)','hstar ',hstar(1,:)
+ print '(a,50i4)' ,'ice_uptake ',TCNION
+ print '(a,50f8.2)','mol_weight ',TCMASS(:)
+ print '(a,50f8.2)','temp ',tem(:)
+ print '(a,50f8.2)','p ',pofl(:)
+ end if
+
+!-----------------------------------------------------------------------
+ LE = LPAR-1
+!
+ rls_flag(1:le) = rls(1:le) > zero
+ freezing(1:le) = tem(1:le) < tice
+ rlsog(1:le) = rls(1:le)/garea
+!
+species_loop : &
+ do N = 1,NTRACE
+ QTT(:lpar) = QTTJFL(:lpar,N)
+ QTTNEW(:lpar) = QTTJFL(:lpar,N)
+ is_hno3 = n == hno3_ndx
+ if( is_hno3 ) then
+ qt_rain(:lpar) = zero
+ qt_rime(:lpar) = zero
+ qt_wash(:lpar) = zero
+ qt_evap(:lpar) = zero
+ rca_wrk(:lpar) = zero
+ fca_wrk(:lpar) = zero
+ rcxa_wrk(:lpar) = zero
+ fcxa_wrk(:lpar) = zero
+ rcxb_wrk(:lpar) = zero
+ fcxb_wrk(:lpar) = zero
+ rls_wrk(:lpar) = zero
+ rnew_wrk(:lpar) = zero
+ cf_trigger(:lpar) = .false.
+ clwx_wrk(:lpar) = -9999._r8
+ deltarime_wrk(:lpar) = -9999._r8
+ rax_wrk(:lpar,:) = zero
+ fax_wrk(:lpar,:) = zero
+ endif
+
+!-----------------------------------------------------------------------
+! check whether soluble in ice
+!-----------------------------------------------------------------------
+ if( TCNION(N) ) then
+ LICETYP = 1
+ else
+ LICETYP = 2
+ end if
+
+!-----------------------------------------------------------------------
+! initialization
+!-----------------------------------------------------------------------
+ QTTOPAA = zero
+ QTTOPCA = zero
+
+ RCA = zero
+ FCA = zero
+ DCA = zero
+ RAMA = zero
+ FAMA = zero
+ DAMA = zero
+
+ AMPCT = zero
+ AMCLPCT = zero
+ CLNEWPCT = zero
+ CLNEWAMPCT = zero
+ CLOLDPCT = zero
+ CLOLDAMPCT = zero
+
+
+!-----------------------------------------------------------------------
+! Check whether precip in top layer - if so, require CF ge 0.2
+!-----------------------------------------------------------------------
+ if( RLS(LE) > zero ) then
+ CFXX(LE) = max( CFMIN,CFR(LE) )
+ else
+ CFXX(LE) = CFR(LE)
+ endif
+
+ rnew_flag(1:le) = .false.
+
+level_loop : &
+ do L = LE,1,-1
+ LM1 = L - 1
+ FAX = zero
+ RAX = zero
+ DAX = zero
+ FCXA = zero
+ FCXB = zero
+ DCXA = zero
+ DCXB = zero
+ RCXA = zero
+ RCXB = zero
+
+ QTDISCF = zero
+ QTDISRIME = zero
+ QTDISCXA = zero
+
+ QTEVAPAXP = zero
+ QTEVAPAXW = zero
+ QTEVAPAX = zero
+ QTWASHAX = zero
+
+ QTEVAPCXAP = zero
+ QTEVAPCXAW = zero
+ QTEVAPCXA = zero
+ QTRIMECXA = zero
+ QTWASHCXA = zero
+ QTRAINCXA = zero
+ QTRAINCXB = zero
+
+ RAMPCT = zero
+ RCXPCT = zero
+
+ RCXALOC = zero
+ RCXBLOC = zero
+ RAXLOC = zero
+ RAMALOC = zero
+ RCALOC = zero
+
+ RPRECIP = zero
+ DELTARIMEMASS = zero
+ DELTARIME = zero
+ DOR = zero
+ DNEW = zero
+
+ QTTOPAAX = zero
+ QTTOPCAX = zero
+
+has_rls : &
+ if( rls_flag(l) ) then
+!-----------------------------------------------------------------------
+!-----Evaporate ambient precip and decrease area-------------------------
+!-----If ice, diam=diam falling from above If rain, diam=4mm (not used)
+!-----Evaporate tracer contained in evaporated precip
+!-----Can't evaporate more than we start with-----------------------------
+!-----Don't do washout until we adjust ambient precip to match Rbot if needed
+!------(after RNEW if statements)
+!-----------------------------------------------------------------------
+ FAX = max( zero,FAMA*(one - evaprate(l)) )
+ RAX = RAMA !kg/m2/s
+ if ( debug ) then
+ if( (l == 3 .or. l == 2) ) then
+ write(*,*) 'washout: l,rls,fax = ',l,rls(l),fax
+ endif
+ endif
+ if( FAMA > zero ) then
+ if( freezing(l) ) then
+ DAX = DAMA !mm
+ else
+ DAX = four !mm - not necessary
+ endif
+ else
+ DAX = zero
+ endif
+
+ if( RAMA > zero ) then
+ QTEVAPAXP = min( QTTOPAA,EVAPRATE(L)*QTTOPAA )
+ else
+ QTEVAPAXP = zero
+ endif
+ if( is_hno3 ) then
+ rax_wrk(l,1) = rax
+ fax_wrk(l,1) = fax
+ endif
+
+
+!-----------------------------------------------------------------------
+! Determine how much the in-cloud precip rate has increased------
+!-----------------------------------------------------------------------
+ WRK = RAX*FAX + RCA*FCA
+ if( WRK > 0._r8 ) then
+ RNEW_TST = RLS(L)/(GAREA * WRK)
+ else
+ RNEW_TST = 10._r8
+ endif
+ RNEW = RLSOG(L) - (RAX*FAX + RCA*FCA) !GBA*CF
+ rnew_wrk(l) = rnew_tst
+ if ( debug ) then
+ if( is_hno3 .and. l == kdiag-1 ) then
+ write(*,*) ' '
+ write(*,*) 'washout: rls,rax,fax,rca,fca'
+ write(*,'(1p,5g15.7)') rls(l),rax,fax,rca,fca
+ write(*,*) ' '
+ endif
+ endif
+!-----------------------------------------------------------------------
+! if RNEW>0, there is growth and/or new precip formation
+!-----------------------------------------------------------------------
+has_rnew: if( rlsog(l) > adj_factor*(rax*fax + rca*fca) ) then
+!-----------------------------------------------------------------------
+! Min cloudwater requirement for cloud with new precip
+! Min CF is set at top for LE, at end for other levels
+! CWMIN is only needed for new precip formation - do not need for RNEW<0
+!-----------------------------------------------------------------------
+ if( cfxx(l) == zero ) then
+ if ( do_diag ) then
+ write(*,*) 'cfxx(l) == zero',l
+ write(*,*) qttjfl(:,n)
+ write(*,*) qm(:)
+ write(*,*) pofl(:)
+ write(*,*) delz(:)
+ write(*,*) rls(:)
+ write(*,*) clwc(:)
+ write(*,*) ciwc(:)
+ write(*,*) cfr(:)
+ write(*,*) tem(:)
+ write(*,*) evaprate(:)
+ write(*,*) hstar(:,n)
+ end if
+!
+! if we are here,, that means that there is
+! a inconsistency and this will lead to a division
+! by 0 later on! This column should then be skipped
+!
+ QTTJFL(:lpar,n) = QTT(:lpar)
+ cycle species_loop
+!
+! call endrun()
+!
+ endif
+ rnew_flag(l) = .true.
+ CLWX = max( CLWC(L)+CIWC(L),CWMIN*CFXX(L) )
+ if( is_hno3 ) then
+ clwx_wrk(l) = clwx
+ endif
+!-----------------------------------------------------------------------
+! Area of old cloud and new cloud
+!-----------------------------------------------------------------------
+ FCXA = FCA
+ FCXB = max( zero,CFXX(L)-FCXA )
+!-----------------------------------------------------------------------
+! ICE
+! For ice and mixed phase, grow precip in old cloud by riming
+! Use only portion of cloudwater in old cloud fraction
+! and rain above old cloud fraction
+! COLEFF from Lohmann and Roeckner (1996), Loss rate from Rotstayn (1997)
+!-----------------------------------------------------------------------
+is_freezing : &
+ if( freezing(l) ) then
+ COLEFFSNOW = exp( 2.5e-2_r8*(TEM(L) - TICE) )
+ if( TEM(L) <= TFROZ ) then
+ RHOSNOW = RHOSNOWFIX
+ else
+ RHOSNOW = 0.303_r8*(TEM(L) - TFROZ)*RHOSNOWFIX
+ endif
+ if( FCXA > zero ) then
+ if( DCA > zero ) then
+ DELTARIMEMASS = CLWX*QM(L)*(FCXA/CFXX(L))* &
+ (one - exp( (-COLEFFSNOW/(DCA*1.e-3_r8))*((RCA)/(2._r8*RHOSNOW))*DTSCAV )) !uses GBA R
+ else
+ DELTARIMEMASS = zero
+ endif
+ else
+ DELTARIMEMASS = zero
+ endif
+!-----------------------------------------------------------------------
+! Increase in precip rate due to riming (kg/m2/s):
+! Limit to total increase in R in cloud
+!-----------------------------------------------------------------------
+ if( FCXA > zero ) then
+ DELTARIME = min( RNEW/FCXA,DELTARIMEMASS/(FCXA*GAREA*DTSCAV) ) !GBA
+ else
+ DELTARIME = zero
+ endif
+ if( is_hno3 ) then
+ deltarime_wrk(l) = deltarime
+ endif
+!-----------------------------------------------------------------------
+! Find diameter of rimed precip, must be at least .1mm
+!-----------------------------------------------------------------------
+ if( RCA > zero ) then
+ DOR = max( DMIN,(((RCA+DELTARIME)/RCA)**VOLPOW)*DCA )
+ else
+ DOR = zero
+ endif
+!-----------------------------------------------------------------------
+! If there is some in-cloud precip left, we have new precip formation
+! Will be spread over whole cloud fraction
+!-----------------------------------------------------------------------
+! Calculate precip rate in old and new cloud fractions
+!-----------------------------------------------------------------------
+ RPRECIP = (RNEW-(DELTARIME*FCXA))/CFXX(L) !kg/m2/s !GBA
+!-----------------------------------------------------------------------
+! Calculate precip rate in old and new cloud fractions
+!-----------------------------------------------------------------------
+ RCXA = RCA + DELTARIME + RPRECIP !kg/m2/s GBA
+ RCXB = RPRECIP !kg/m2/s GBA
+
+!-----------------------------------------------------------------------
+! Find diameter of new precip from empirical relation using Rprecip
+! in given area of box- use density of water, not snow, to convert kg/s
+! to mm/s -> as given in Field and Heymsfield
+! Also calculate diameter of mixed precip,DCXA, from empirical relation
+! using total R in FCXA - this will give larger particles than averaging DOR and
+! DNEW in the next level
+! DNEW and DCXA must be at least .1mm
+!-----------------------------------------------------------------------
+ if( RPRECIP > zero ) then
+ WEMP = (CLWX*QM(L))/(GAREA*CFXX(L)*DELZ(L)) !kg/m3
+ REMP = RPRECIP/((RHORAIN/1.e3_r8)) !mm/s local
+ DNEW = DEMPIRICAL( WEMP, REMP )
+ if ( debug ) then
+ if( is_hno3 .and. l >= 15 ) then
+ write(*,*) ' '
+ write(*,*) 'washout: wemp,remp.dnew @ l = ',l
+ write(*,'(1p,3g15.7)') wemp,remp,dnew
+ write(*,*) ' '
+ endif
+ endif
+ DNEW = max( DMIN,DNEW )
+ if( FCXB > zero ) then
+ DCXB = DNEW
+ else
+ DCXB = zero
+ endif
+ else
+ DCXB = zero
+ endif
+
+ if( FCXA > zero ) then
+ WEMP = (CLWX*QM(L)*(FCXA/CFXX(L)))/(GAREA*FCXA*DELZ(L)) !kg/m3
+ REMP = RCXA/((RHORAIN/1.e3_r8)) !mm/s local
+ DEMP = DEMPIRICAL( WEMP, REMP )
+ DCXA = ((RCA+DELTARIME)/RCXA)*DOR + (RPRECIP/RCXA)*DNEW
+ DCXA = max( DEMP,DCXA )
+ DCXA = max( DMIN,DCXA )
+ else
+ WEMP = zero
+ REMP = zero
+ DEMP = zero
+ DCXA = zero
+ endif
+ if ( debug ) then
+ if( is_hno3 .and. l >= 15 ) then
+ write(*,*) ' '
+ write(*,*) 'washout: rca,rcxa,deltarime,dor,rprecip,dnew @ l = ',l
+ write(*,'(1p,6g15.7)') rca,rcxa,deltarime,dor,rprecip,dnew
+ write(*,*) 'washout: dcxa,dcxb,wemp,remp,demp'
+ write(*,'(1p,5g15.7)') dcxa,dcxb,wemp,remp,demp
+ write(*,*) ' '
+ end if
+ endif
+
+ if( QTT(L) > zero ) then
+!-----------------------------------------------------------------------
+! ICE SCAVENGING
+!-----------------------------------------------------------------------
+! For ice, rainout only hno3/aerosols using new precip
+! Tracer dissolved given by Kaercher and Voigt (2006) for T<258K
+! For T>258K, use Henry's Law with Retention coefficient
+! Rain out in whole CF
+!-----------------------------------------------------------------------
+ if( RPRECIP > zero ) then
+ if( LICETYP == 1 ) then
+ RRAIN = RPRECIP*GAREA !kg/s local
+ call DISGAS( CLWX, CFXX(L), TCMASS(N), HSTAR(L,N), &
+ TEM(L),POFL(L),QM(L), &
+ QTT(L)*CFXX(L),QTDISCF )
+ call RAINGAS( RRAIN, DTSCAV, CLWX, CFXX(L), &
+ QM(L), QTT(L), QTDISCF, QTRAIN )
+ WRK = QTRAIN/CFXX(L)
+ QTRAINCXA = FCXA*WRK
+ QTRAINCXB = FCXB*WRK
+ elseif( LICETYP == 2 ) then
+ QTRAINCXA = zero
+ QTRAINCXB = zero
+ endif
+ if( debug .and. is_hno3 .and. l == kdiag ) then
+ write(*,*) ' '
+ write(*,*) 'washout: Ice Scavenging'
+ write(*,*) 'washout: qtraincxa, qtraincxb, fcxa, fcxb, qt_rain, cfxx(l), wrk @ level = ',l
+ write(*,'(1p,7g15.7)') qtraincxa, qtraincxb, fcxa, fcxb, qt_rain(l), cfxx(l), wrk
+ write(*,*) ' '
+ endif
+ endif
+!-----------------------------------------------------------------------
+! For ice, accretion removal for hno3 and aerosols is propotional to riming,
+! no accretion removal for gases
+! remove only in mixed portion of cloud
+! Limit DELTARIMEMASS to RNEW*DTSCAV for ice - evaporation of rimed ice to match
+! RNEW precip rate would result in HNO3 escaping from ice (no trapping)
+!-----------------------------------------------------------------------
+ if( DELTARIME > zero ) then
+ if( LICETYP == 1 ) then
+ if( TEM(L) <= TFROZ ) then
+ RHOSNOW = RHOSNOWFIX
+ else
+ RHOSNOW = 0.303_r8*(TEM(L) - TFROZ)*RHOSNOWFIX
+ endif
+ QTCXA = QTT(L)*FCXA
+ call DISGAS( CLWX*(FCXA/CFXX(L)), FCXA, TCMASS(N), &
+ HSTAR(L,N), TEM(L), POFL(L), &
+ QM(L), QTCXA, QTDISRIME )
+ QTDISSTAR = (QTDISRIME*QTCXA)/(QTDISRIME + QTCXA)
+ if ( debug ) then
+ if( is_hno3 .and. l >= 15 ) then
+ write(*,*) ' '
+ write(*,*) 'washout: fcxa,dca,rca,qtdisstar @ l = ',l
+ write(*,'(1p,4g15.7)') fcxa,dca,rca,qtdisstar
+ write(*,*) ' '
+ endif
+ endif
+ QTRIMECXA = QTCXA* &
+ (one - exp((-COLEFFSNOW/(DCA*1.e-3_r8))* &
+ (RCA/(2._r8*RHOSNOW))* & !uses GBA R
+ (QTDISSTAR/QTCXA)*DTSCAV))
+ QTRIMECXA = min( QTRIMECXA, &
+ ((RNEW*GAREA*DTSCAV)/(CLWX*QM(L)*(FCXA/CFXX(L))))*QTDISSTAR)
+ elseif( LICETYP == 2 ) then
+ QTRIMECXA = zero
+ endif
+ endif
+ else
+ QTRAINCXA = zero
+ QTRAINCXB = zero
+ QTRIMECXA = zero
+ endif
+!-----------------------------------------------------------------------
+! For ice, no washout in interstitial cloud air
+!-----------------------------------------------------------------------
+ QTWASHCXA = zero
+ QTEVAPCXA = zero
+
+!-----------------------------------------------------------------------
+! RAIN
+! For rain, accretion increases rain rate but diameter remains constant
+! Diameter is 4mm (not used)
+!-----------------------------------------------------------------------
+ else is_freezing
+ if( FCXA > zero ) then
+ DELTARIMEMASS = (CLWX*QM(L))*(FCXA/CFXX(L))* &
+ (one - exp( -0.24_r8*COLEFFRAIN*((RCA)**0.75_r8)*DTSCAV )) !local
+ else
+ DELTARIMEMASS = zero
+ endif
+!-----------------------------------------------------------------------
+! Increase in precip rate due to riming (kg/m2/s):
+! Limit to total increase in R in cloud
+!-----------------------------------------------------------------------
+ if( FCXA > zero ) then
+ DELTARIME = min( RNEW/FCXA,DELTARIMEMASS/(FCXA*GAREA*DTSCAV) ) !GBA
+ else
+ DELTARIME = zero
+ endif
+!-----------------------------------------------------------------------
+! If there is some in-cloud precip left, we have new precip formation
+!-----------------------------------------------------------------------
+ RPRECIP = (RNEW-(DELTARIME*FCXA))/CFXX(L) !GBA
+
+ RCXA = RCA + DELTARIME + RPRECIP !kg/m2/s GBA
+ RCXB = RPRECIP !kg/m2/s GBA
+ DCXA = FOUR
+ if( FCXB > zero ) then
+ DCXB = FOUR
+ else
+ DCXB = zero
+ endif
+!-----------------------------------------------------------------------
+! RAIN SCAVENGING
+! For rain, rainout both hno3/aerosols and gases using new precip
+!-----------------------------------------------------------------------
+ if( QTT(L) > zero ) then
+ if( RPRECIP > zero ) then
+ RRAIN = (RPRECIP*GAREA) !kg/s local
+ call DISGAS( CLWX, CFXX(L), TCMASS(N), HSTAR(L,N), &
+ TEM(L), POFL(L), QM(L), &
+ QTT(L)*CFXX(L), QTDISCF )
+ call RAINGAS( RRAIN, DTSCAV, CLWX, CFXX(L), &
+ QM(L), QTT(L), QTDISCF, QTRAIN )
+ WRK = QTRAIN/CFXX(L)
+ QTRAINCXA = FCXA*WRK
+ QTRAINCXB = FCXB*WRK
+ if( debug .and. is_hno3 .and. l == kdiag ) then
+ write(*,*) ' '
+ write(*,*) 'washout: Rain Scavenging'
+ write(*,*) 'washout: qtraincxa, qtraincxb, fcxa, fcxb, qt_rain, cfxx(l), wrk @ level = ',l
+ write(*,'(1p,7g15.7)') qtraincxa, qtraincxb, fcxa, fcxb, qt_rain(l), cfxx(l), wrk
+ write(*,*) ' '
+ endif
+ endif
+!-----------------------------------------------------------------------
+! For rain, accretion removal is propotional to riming
+! caclulate for hno3/aerosols and gases
+! Remove only in mixed portion of cloud
+! Limit DELTARIMEMASS to RNEW*DTSCAV
+!-----------------------------------------------------------------------
+ if( DELTARIME > zero ) then
+ QTCXA = QTT(L)*FCXA
+ call DISGAS( CLWX*(FCXA/CFXX(L)), FCXA, TCMASS(N), &
+ HSTAR(L,N), TEM(L), POFL(L), &
+ QM(L), QTCXA, QTDISRIME )
+ QTDISSTAR = (QTDISRIME*QTCXA)/(QTDISRIME + QTCXA)
+ QTRIMECXA = QTCXA* &
+ (one - exp(-0.24_r8*COLEFFRAIN* &
+ ((RCA)**0.75_r8)* & !local
+ (QTDISSTAR/QTCXA)*DTSCAV))
+ QTRIMECXA = min( QTRIMECXA, &
+ ((RNEW*GAREA*DTSCAV)/(CLWX*QM(L)*(FCXA/CFXX(L))))*QTDISSTAR)
+ else
+ QTRIMECXA = zero
+ endif
+ else
+ QTRAINCXA = zero
+ QTRAINCXB = zero
+ QTRIMECXA = zero
+ endif
+!-----------------------------------------------------------------------
+! For rain, washout gases and HNO3/aerosols using rain from above old cloud
+! Washout for HNO3/aerosols is only on non-dissolved portion, impaction-style
+! Washout for gases is on non-dissolved portion, limited by QTTOP+QTRIME
+!-----------------------------------------------------------------------
+ if( RCA > zero ) then
+ QTPRECIP = FCXA*QTT(L) - QTDISRIME
+ if( HSTAR(L,N) > 1.e4_r8 ) then
+ if( QTPRECIP > zero ) then
+ QTWASHCXA = QTPRECIP*(one - exp( -0.24_r8*COLEFFAER*((RCA)**0.75_r8)*DTSCAV )) !local
+ else
+ QTWASHCXA = zero
+ endif
+ QTEVAPCXA = zero
+ else
+ RWASH = RCA*GAREA !kg/s local
+ if( QTPRECIP > zero ) then
+ call WASHGAS( RWASH, FCA, DTSCAV, QTTOPCA+QTRIMECXA, &
+ HSTAR(L,N), TEM(L), POFL(L), &
+ QM(L), QTPRECIP, QTWASHCXA, QTEVAPCXA )
+ else
+ QTWASHCXA = zero
+ QTEVAPCXA = zero
+ endif
+ endif
+ endif
+ endif is_freezing
+!-----------------------------------------------------------------------
+! If RNEW zero ) then
+ RCXA = min( RCA,RLS(L)/(GAREA*FCXA) ) !kg/m2/s GBA
+ if( FAX > zero .and. ((RCXA+1.e-12_r8) < RLS(L)/(GAREA*FCXA)) ) then
+ RAXADJF = RLS(L)/GAREA - RCXA*FCXA
+ RAMPCT = RAXADJF/(RAX*FAX)
+ FAXADJ = RAMPCT*FAX
+ if( FAXADJ > zero ) then
+ RAXADJ = RAXADJF/FAXADJ
+ else
+ RAXADJ = zero
+ endif
+ else
+ RAXADJ = zero
+ RAMPCT = zero
+ FAXADJ = zero
+ endif
+ else
+ RCXA = zero
+ if( FAX > zero ) then
+ RAXADJF = RLS(L)/GAREA
+ RAMPCT = RAXADJF/(RAX*FAX)
+ FAXADJ = RAMPCT*FAX
+ if( FAXADJ > zero ) then
+ RAXADJ = RAXADJF/FAXADJ
+ else
+ RAXADJ = zero
+ endif
+ else
+ RAXADJ = zero
+ RAMPCT = zero
+ FAXADJ = zero
+ endif
+ endif
+
+ QTEVAPAXP = min( QTTOPAA,QTTOPAA - (RAMPCT*(QTTOPAA-QTEVAPAXP)) )
+ FAX = FAXADJ
+ RAX = RAXADJ
+ if ( debug ) then
+ if( (l == 3 .or. l == 2) ) then
+ write(*,*) 'washout: l,fcxa,fax = ',l,fcxa,fax
+ endif
+ endif
+
+!-----------------------------------------------------------------------
+! IN-CLOUD EVAPORATION/WASHOUT
+! If precip out the bottom of the cloud is 0, evaporate everything
+! If there is no cloud, QTTOPCA=0, so nothing happens
+!-----------------------------------------------------------------------
+ if( RCXA <= zero ) then
+ QTEVAPCXA = QTTOPCA
+ RCXA = zero
+ DCXA = zero
+ else
+!-----------------------------------------------------------------------
+! If rain out the bottom of the cloud is >0 (but .le. RCA):
+! For ice, decrease particle size,
+! no washout
+! no evap for non-ice gases (b/c there is nothing in ice)
+! TTmix, hno3&aerosols are incorporated into ice structure:
+! do not release
+! For rain, assume full evaporation of some raindrops
+! proportional evaporation for all species
+! washout for gases using Rbot
+! impact washout for hno3/aerosol portion in gas phase
+!-----------------------------------------------------------------------
+! if (TEM(L) < TICE ) then
+is_freezing_a : &
+ if( freezing(l) ) then
+ QTWASHCXA = zero
+ DCXA = ((RCXA/RCA)**VOLPOW)*DCA
+ if( LICETYP == 1 ) then
+ if( TEM(L) <= TMIX ) then
+ MASSLOSS = (RCA-RCXA)*FCXA*GAREA*DTSCAV
+!-----------------------------------------------------------------------
+! note-QTT doesn't matter b/c T<258K
+!-----------------------------------------------------------------------
+ call DISGAS( (MASSLOSS/QM(L)), FCXA, TCMASS(N), &
+ HSTAR(L,N), TEM(L), POFL(L), &
+ QM(L), QTT(L), QTEVAPCXA )
+ QTEVAPCXA = min( QTTOPCA,QTEVAPCXA )
+ else
+ QTEVAPCXA = zero
+ endif
+ elseif( LICETYP == 2 ) then
+ QTEVAPCXA = zero
+ endif
+ else is_freezing_a
+ QTEVAPCXAP = (RCA - RCXA)/RCA*QTTOPCA
+ DCXA = FOUR
+ QTCXA = FCXA*QTT(L)
+ if( HSTAR(L,N) > 1.e4_r8 ) then
+ if( QTT(L) > zero ) then
+ call DISGAS( CLWX*(FCXA/CFXX(L)), FCXA, TCMASS(N), &
+ HSTAR(L,N), TEM(L), POFL(L), &
+ QM(L), QTCXA, QTDISCXA )
+ if( QTCXA > QTDISCXA ) then
+ QTWASHCXA = (QTCXA - QTDISCXA)*(one - exp( -0.24_r8*COLEFFAER*((RCXA)**0.75_r8)*DTSCAV )) !local
+ else
+ QTWASHCXA = zero
+ endif
+ QTEVAPCXAW = zero
+ else
+ QTWASHCXA = zero
+ QTEVAPCXAW = zero
+ endif
+ else
+ RWASH = RCXA*GAREA !kg/s local
+ call WASHGAS( RWASH, FCXA, DTSCAV, QTTOPCA, HSTAR(L,N), &
+ TEM(L), POFL(L), QM(L), &
+ QTCXA-QTDISCXA, QTWASHCXA, QTEVAPCXAW )
+ endif
+ QTEVAPCXA = QTEVAPCXAP + QTEVAPCXAW
+ endif is_freezing_a
+ endif
+ endif has_rnew
+
+!-----------------------------------------------------------------------
+! AMBIENT WASHOUT
+! Ambient precip is finalized - if it is rain, washout
+! no ambient washout for ice, since gases are in vapor phase
+!-----------------------------------------------------------------------
+ if( RAX > zero ) then
+ if( .not. freezing(l) ) then
+ QTAX = FAX*QTT(L)
+ if( HSTAR(L,N) > 1.e4_r8 ) then
+ QTWASHAX = QTAX* &
+ (one - exp(-0.24_r8*COLEFFAER* &
+ ((RAX)**0.75_r8)*DTSCAV)) !local
+ QTEVAPAXW = zero
+ else
+ RWASH = RAX*GAREA !kg/s local
+ call WASHGAS( RWASH, FAX, DTSCAV, QTTOPAA, HSTAR(L,N), &
+ TEM(L), POFL(L), QM(L), QTAX, &
+ QTWASHAX, QTEVAPAXW )
+ endif
+ else
+ QTEVAPAXW = zero
+ QTWASHAX = zero
+ endif
+ else
+ QTEVAPAXW = zero
+ QTWASHAX = zero
+ endif
+ QTEVAPAX = QTEVAPAXP + QTEVAPAXW
+
+!-----------------------------------------------------------------------
+! END SCAVENGING
+! Require CF if our ambient evaporation rate would give less
+! precip than R from model.
+!-----------------------------------------------------------------------
+ if( do_diag .and. is_hno3 ) then
+ rls_wrk(l) = rls(l)/garea
+ rca_wrk(l) = rca
+ fca_wrk(l) = fca
+ rcxa_wrk(l) = rcxa
+ fcxa_wrk(l) = fcxa
+ rcxb_wrk(l) = rcxb
+ fcxb_wrk(l) = fcxb
+ rax_wrk(l,2) = rax
+ fax_wrk(l,2) = fax
+ endif
+upper_level : &
+ if( L > 1 ) then
+ FAMA = max( FCXA + FCXB + FAX - CFR(LM1),zero )
+ if( FAX > zero ) then
+ RAXLOC = RAX/FAX
+ else
+ RAXLOC = zero
+ endif
+ if( FCXA > zero ) then
+ RCXALOC = RCXA/FCXA
+ else
+ RCXALOC = zero
+ endif
+ if( FCXB > zero ) then
+ RCXBLOC = RCXB/FCXB
+ else
+ RCXBLOC = zero
+ endif
+
+ if( CFR(LM1) >= CFMIN ) then
+ CFXX(LM1) = CFR(LM1)
+ else
+ if( adj_factor*RLSOG(LM1) >= (RCXA*FCXA + RCXB*FCXB + RAX*FAX)*(one - EVAPRATE(LM1)) ) then
+ CFXX(LM1) = CFMIN
+ cf_trigger(lm1) = .true.
+ else
+ CFXX(LM1) = CFR(LM1)
+ endif
+ if( is_hno3 .and. lm1 == kdiag .and. debug ) then
+ write(*,*) ' '
+ write(*,*) 'washout: rls,garea,rcxa,fcxa,rcxb,fcxb,rax,fax'
+ write(*,'(1p,8g15.7)') rls(lm1),garea,rcxa,fcxa,rcxb,fcxb,rax,fax
+ write(*,*) ' '
+ endif
+ endif
+!-----------------------------------------------------------------------
+! Figure out what will go into ambient and cloud below
+! Don't do for lowest level
+!-----------------------------------------------------------------------
+ if( FAX > zero ) then
+ RAXLOC = RAX/FAX
+ AMPCT = max( zero,min( one,(CFXX(L) + FAX - CFXX(LM1))/FAX ) )
+ AMCLPCT = one - AMPCT
+ else
+ RAXLOC = zero
+ AMPCT = zero
+ AMCLPCT = zero
+ endif
+ if( FCXB > zero ) then
+ RCXBLOC = RCXB/FCXB
+ CLNEWPCT = max( zero,min( (CFXX(LM1) - FCXA)/FCXB,one ) )
+ CLNEWAMPCT = one - CLNEWPCT
+ else
+ RCXBLOC = zero
+ CLNEWPCT = zero
+ CLNEWAMPCT = zero
+ endif
+ if( FCXA > zero ) then
+ RCXALOC = RCXA/FCXA
+ CLOLDPCT = max( zero,min( CFXX(LM1)/FCXA,one ) )
+ CLOLDAMPCT = one - CLOLDPCT
+ else
+ RCXALOC = zero
+ CLOLDPCT = zero
+ CLOLDAMPCT = zero
+ endif
+!-----------------------------------------------------------------------
+! Remix everything for the next level
+!-----------------------------------------------------------------------
+ FCA = min( CFXX(LM1),FCXA*CLOLDPCT + CLNEWPCT*FCXB + AMCLPCT*FAX )
+ if( FCA > zero ) then
+!-----------------------------------------------------------------------
+! Maintain cloud core by reducing NC and AM area going into cloud below
+!-----------------------------------------------------------------------
+ RCA = (RCXA*FCXA*CLOLDPCT + RCXB*FCXB*CLNEWPCT + RAX*FAX*AMCLPCT)/FCA
+ if ( debug ) then
+ if( is_hno3 ) then
+ write(*,*) ' '
+ write(*,*) 'washout: rcxa,fcxa,cloldpctrca,rca,fca,dcxa @ l = ',l
+ write(*,'(1p,6g15.7)') rcxa,fcxa,cloldpct,rca,fca,dcxa
+ write(*,*) 'washout: rcxb,fcxb,clnewpct,dcxb'
+ write(*,'(1p,4g15.7)') rcxb,fcxb,clnewpct,dcxb
+ write(*,*) 'washout: rax,fax,amclpct,dax'
+ write(*,'(1p,4g15.7)') rax,fax,amclpct,dax
+ write(*,*) ' '
+ endif
+ endif
+
+ if (RCA > zero) then
+ DCA = (RCXA*FCXA*CLOLDPCT)/(RCA*FCA)*DCXA + &
+ (RCXB*FCXB*CLNEWPCT)/(RCA*FCA)*DCXB + &
+ (RAX*FAX*AMCLPCT)/(RCA*FCA)*DAX
+ else
+ DCA = zero
+ FCA = zero
+ endif
+
+ else
+ FCA = zero
+ DCA = zero
+ RCA = zero
+ endif
+
+ FAMA = FCXA + FCXB + FAX - CFXX(LM1)
+ if( FAMA > zero ) then
+ RAMA = (RCXA*FCXA*CLOLDAMPCT + RCXB*FCXB*CLNEWAMPCT + RAX*FAX*AMPCT)/FAMA
+ if( RAMA > zero ) then
+ DAMA = (RCXA*FCXA*CLOLDAMPCT)/(RAMA*FAMA)*DCXA + &
+ (RCXB*FCXB*CLNEWAMPCT)/(RAMA*FAMA)*DCXB + &
+ (RAX*FAX*AMPCT)/(RAMA*FAMA)*DAX
+ else
+ FAMA = zero
+ DAMA = zero
+ endif
+ else
+ FAMA = zero
+ DAMA = zero
+ RAMA = zero
+ endif
+ else upper_level
+ AMPCT = zero
+ AMCLPCT = zero
+ CLNEWPCT = zero
+ CLNEWAMPCT = zero
+ CLOLDPCT = zero
+ CLOLDAMPCT = zero
+ endif upper_level
+ else has_rls
+ RNEW = zero
+ QTEVAPCXA = QTTOPCA
+ QTEVAPAX = QTTOPAA
+ if( L > 1 ) then
+ if( RLS(LM1) > zero ) then
+ CFXX(LM1) = max( CFMIN,CFR(LM1) )
+! if( CFR(LM1) >= CFMIN ) then
+! CFXX(LM1) = CFR(LM1)
+! else
+! CFXX(LM1) = CFMIN
+! endif
+ else
+ CFXX(LM1) = CFR(LM1)
+ endif
+ endif
+ AMPCT = zero
+ AMCLPCT = zero
+ CLNEWPCT = zero
+ CLNEWAMPCT = zero
+ CLOLDPCT = zero
+ CLOLDAMPCT = zero
+ RCA = zero
+ RAMA = zero
+ FCA = zero
+ FAMA = zero
+ DCA = zero
+ DAMA = zero
+ endif has_rls
+
+ if( do_diag .and. is_hno3 ) then
+ fama_wrk(l) = fama
+ rama_wrk(l) = rama
+ endif
+!-----------------------------------------------------------------------
+! Net loss can not exceed QTT in each region
+!-----------------------------------------------------------------------
+ QTNETLCXA = QTRAINCXA + QTRIMECXA + QTWASHCXA - QTEVAPCXA
+ QTNETLCXA = min( QTT(L)*FCXA,QTNETLCXA )
+
+ QTNETLCXB =QTRAINCXB
+ QTNETLCXB = min( QTT(L)*FCXB,QTNETLCXB )
+
+ QTNETLAX = QTWASHAX - QTEVAPAX
+ QTNETLAX = min( QTT(L)*FAX,QTNETLAX )
+
+ QTTNEW(L) = QTT(L) - (QTNETLCXA + QTNETLCXB + QTNETLAX)
+
+ if( do_diag .and. is_hno3 ) then
+ qt_rain(l) = qtraincxa + qtraincxb
+ qt_rime(l) = qtrimecxa
+ qt_wash(l) = qtwashcxa + qtwashax
+ qt_evap(l) = qtevapcxa + qtevapax
+ frc(l,1) = qtnetlcxa
+ frc(l,2) = qtnetlcxb
+ frc(l,3) = qtnetlax
+ endif
+ if( debug .and. is_hno3 .and. l == kdiag ) then
+ write(*,*) ' '
+ write(*,*) 'washout: qtraincxa, qtraincxb, qtrimecxa @ level = ',l
+ write(*,'(1p,3g15.7)') qtraincxa, qtraincxb, qtrimecxa
+ write(*,*) ' '
+ endif
+ if ( debug ) then
+ if( (l == 3 .or. l == 2) ) then
+ write(*,*) 'washout: hno3, hno3, qtnetlca,b, qtnetlax @ level = ',l
+ write(*,'(1p,5g15.7)') qttnew(l), qtt(l), qtnetlcxa, qtnetlcxb, qtnetlax
+ write(*,*) 'washout: qtwashax, qtevapax,fax,fama'
+ write(*,'(1p,5g15.7)') qtwashax, qtevapax, fax, fama
+ endif
+ endif
+
+ QTTOPCAX = (QTTOPCA + QTNETLCXA)*CLOLDPCT + QTNETLCXB*CLNEWPCT + (QTTOPAA + QTNETLAX)*AMCLPCT
+ QTTOPAAX = (QTTOPCA + QTNETLCXA)*CLOLDAMPCT + QTNETLCXB*CLNEWAMPCT + (QTTOPAA + QTNETLAX)*AMPCT
+ QTTOPCA = QTTOPCAX
+ QTTOPAA = QTTOPAAX
+ end do level_loop
+
+ if ( debug ) then
+ if( is_hno3 ) then
+ write(*,*) ' '
+ write(*,*) 'washout: clwx_wrk'
+ write(*,'(1p,5g15.7)') clwx_wrk(1:le)
+ write(*,*) 'washout: cfr'
+ write(*,'(1p,5g15.7)') cfr(1:le)
+ write(*,*) 'washout: cfxx'
+ write(*,'(1p,5g15.7)') cfxx(1:le)
+ write(*,*) 'washout: cf trigger'
+ write(*,'(10l4)') cf_trigger(1:le)
+ write(*,*) 'washout: evaprate'
+ write(*,'(1p,5g15.7)') evaprate(1:le)
+ write(*,*) 'washout: rls'
+ write(*,'(1p,5g15.7)') rls(1:le)
+ write(*,*) 'washout: rls/garea'
+ write(*,'(1p,5g15.7)') rls_wrk(1:le)
+ write(*,*) 'washout: rnew_wrk'
+ write(*,'(1p,5g15.7)') rnew_wrk(1:le)
+ write(*,*) 'washout: rnew_flag'
+ write(*,'(10l4)') rnew_flag(1:le)
+ write(*,*) 'washout: deltarime_wrk'
+ write(*,'(1p,5g15.7)') deltarime_wrk(1:le)
+ write(*,*) 'washout: rama_wrk'
+ write(*,'(1p,5g15.7)') rama_wrk(1:le)
+ write(*,*) 'washout: fama_wrk'
+ write(*,'(1p,5g15.7)') fama_wrk(1:le)
+ write(*,*) 'washout: rca_wrk'
+ write(*,'(1p,5g15.7)') rca_wrk(1:le)
+ write(*,*) 'washout: fca_wrk'
+ write(*,'(1p,5g15.7)') fca_wrk(1:le)
+ write(*,*) 'washout: rcxa_wrk'
+ write(*,'(1p,5g15.7)') rcxa_wrk(1:le)
+ write(*,*) 'washout: fcxa_wrk'
+ write(*,'(1p,5g15.7)') fcxa_wrk(1:le)
+ write(*,*) 'washout: rcxb_wrk'
+ write(*,'(1p,5g15.7)') rcxb_wrk(1:le)
+ write(*,*) 'washout: fcxb_wrk'
+ write(*,'(1p,5g15.7)') fcxb_wrk(1:le)
+ write(*,*) 'washout: rax1_wrk'
+ write(*,'(1p,5g15.7)') rax_wrk(1:le,1)
+ write(*,*) 'washout: fax1_wrk'
+ write(*,'(1p,5g15.7)') fax_wrk(1:le,1)
+ write(*,*) 'washout: rax2_wrk'
+ write(*,'(1p,5g15.7)') rax_wrk(1:le,2)
+ write(*,*) 'washout: fax2_wrk'
+ write(*,'(1p,5g15.7)') fax_wrk(1:le,2)
+ write(*,*) 'washout: rls_flag'
+ write(*,'(1p,10l4)') rls_flag(1:le)
+ write(*,*) 'washout: freezing'
+ write(*,'(1p,10l4)') freezing(1:le)
+ write(*,*) 'washout: qtnetlcxa'
+ write(*,'(1p,5g15.7)') frc(1:le,1)
+ write(*,*) 'washout: qtnetlcxb'
+ write(*,'(1p,5g15.7)') frc(1:le,2)
+ write(*,*) 'washout: qtnetlax'
+ write(*,'(1p,5g15.7)') frc(1:le,3)
+ write(*,*) ' '
+ endif
+ endif
+!-----------------------------------------------------------------------
+! reload new tracer mass and rescale moments: check upper limits (LE)
+!-----------------------------------------------------------------------
+ QTTJFL(:le,N) = QTTNEW(:le)
+
+ end do species_loop
+!
+ return
+ end subroutine washo
+!---------------------------------------------------------------------
+ subroutine DISGAS (CLWX,CFX,MOLMASS,HSTAR,TM,PR,QM,QT,QTDIS)
+!---------------------------------------------------------------------
+ implicit none
+ real(r8), intent(in) :: CLWX,CFX !cloud water,cloud fraction
+ real(r8), intent(in) :: MOLMASS !molecular mass of tracer
+ real(r8), intent(in) :: HSTAR !Henry's Law coeffs A*exp(-B/T)
+ real(r8), intent(in) :: TM !temperature of box (K)
+ real(r8), intent(in) :: PR !pressure of box (hPa)
+ real(r8), intent(in) :: QM !air mass in box (kg)
+ real(r8), intent(in) :: QT !tracer in box (kg)
+ real(r8), intent(out) :: QTDIS !tracer dissolved in aqueous phase
+
+ real(r8) MUEMP
+ real(r8), parameter :: INV298 = 1._r8/298._r8
+ real(r8), parameter :: TMIX=258._r8
+ real(r8), parameter :: RETEFF=0.5_r8
+!---Next calculate rate of uptake of tracer
+
+!---effective Henry's Law constant: H* = moles-T / liter-precip / press(atm-T)
+!---p(atm of tracer-T) = (QT/QM) * (.029/MolWt-T) * pressr(hPa)/1000
+!---limit temperature effects to T above freezing
+!----MU from fit to Kaercher and Voigt (2006)
+
+ if(TM .ge. TICE) then
+ QTDIS=(HSTAR*(QT/(QM*CFX))*0.029_r8*(PR/1.0e3_r8))*(CLWX*QM)
+ elseif (TM .le. TMIX) then
+ MUEMP=exp(-14.2252_r8+(1.55704e-1_r8*TM)-(7.1929e-4_r8*(TM**2.0_r8)))
+ QTDIS=MUEMP*(MOLMASS/18._r8)*(CLWX*QM)
+ else
+ QTDIS=RETEFF*((HSTAR*(QT/(QM*CFX))*0.029_r8*(PR/1.0e3_r8))*(CLWX*QM))
+ endif
+
+ return
+ end subroutine DISGAS
+
+!-----------------------------------------------------------------------
+ subroutine RAINGAS (RRAIN,DTSCAV,CLWX,CFX,QM,QT,QTDIS,QTRAIN)
+!-----------------------------------------------------------------------
+!---New trace-gas rainout from large-scale precip with two time scales,
+!---one based on precip formation from cloud water and one based on
+!---Henry's Law solubility: correct limit for delta-t
+!---
+!---NB this code does not consider the aqueous dissociation (eg, C-q)
+!--- that makes uptake of HNO3 and H2SO4 so complete. To do so would
+!--- require that we keep track of the pH of the falling rain.
+!---THUS the Henry's Law coefficient KHA needs to be enhanced to incldue this!
+!---ALSO the possible formation of other soluble species from, eg, CH2O, H2O2
+!--- can be considered with enhanced values of KHA.
+!---
+!---Does NOT now use RMC (moist conv rain) but could, assuming 30% coverage
+!-----------------------------------------------------------------------
+ implicit none
+ real(r8), intent(in) :: RRAIN !new rain formation in box (kg/s)
+ real(r8), intent(in) :: DTSCAV !time step (s)
+ real(r8), intent(in) :: CLWX,CFX !cloud water and cloud fraction
+ real(r8), intent(in) :: QM !air mass in box (kg)
+ real(r8), intent(in) :: QT !tracer in box (kg)
+ real(r8), intent(in) :: QTDIS !tracer in aqueous phase (kg)
+ real(r8), intent(out) :: QTRAIN !tracer picked up by new rain
+
+ real(r8) QTLF,QTDISSTAR
+
+
+
+
+
+ QTDISSTAR=(QTDIS*(QT*CFX))/(QTDIS+(QT*CFX))
+
+!---Tracer Loss frequency (1/s) within cloud fraction:
+ QTLF = (RRAIN*QTDISSTAR)/(CLWX*QM*QT*CFX)
+
+!---in time = DTSCAV, the amount of QTT scavenged is calculated
+!---from CF*AMOUNT OF UPTAKE
+ QTRAIN = QT*CFX*(1._r8 - exp(-DTSCAV*QTLF))
+
+ return
+ end subroutine RAINGAS
+
+
+!-----------------------------------------------------------------------
+ subroutine WASHGAS (RWASH,BOXF,DTSCAV,QTRTOP,HSTAR,TM,PR,QM, &
+ QT,QTWASH,QTEVAP)
+!-----------------------------------------------------------------------
+!---for most gases below-cloud washout assume Henry-Law equilib with precip
+!---assumes that precip is liquid, if frozen, do not call this sub
+!---since solubility is moderate, fraction of box with rain does not matter
+!---NB this code does not consider the aqueous dissociation (eg, C-q)
+!--- that makes uptake of HNO3 and H2SO4 so complete. To do so would
+!--- require that we keep track of the pH of the falling rain.
+!---THUS the Henry's Law coefficient KHA needs to be enhanced to incldue this!
+!---ALSO the possible formation of other soluble species from, eg, CH2O, H2O2
+!--- can be considered with enhanced values of KHA.
+!-----------------------------------------------------------------------
+ implicit none
+ real(r8), intent(in) :: RWASH ! precip leaving bottom of box (kg/s)
+ real(r8), intent(in) :: BOXF ! fraction of box with washout
+ real(r8), intent(in) :: DTSCAV ! time step (s)
+ real(r8), intent(in) :: QTRTOP ! tracer-T in rain entering top of box
+! over time step (kg)
+ real(r8), intent(in) :: HSTAR ! Henry's Law coeffs A*exp(-B/T)
+ real(r8), intent(in) :: TM ! temperature of box (K)
+ real(r8), intent(in) :: PR ! pressure of box (hPa)
+ real(r8), intent(in) :: QT ! tracer in box (kg)
+ real(r8), intent(in) :: QM ! air mass in box (kg)
+ real(r8), intent(out) :: QTWASH ! tracer picked up by precip (kg)
+ real(r8), intent(out) :: QTEVAP ! tracer evaporated from precip (kg)
+
+ real(r8), parameter :: INV298 = 1._r8/298._r8
+ real(r8) :: FWASH, QTMAX, QTDIF
+
+!---effective Henry's Law constant: H* = moles-T / liter-precip / press(atm-T)
+!---p(atm of tracer-T) = (QT/QM) * (.029/MolWt-T) * pressr(hPa)/1000
+!---limit temperature effects to T above freezing
+
+!
+! jfl
+!
+! added test for BOXF = 0.
+!
+ if ( BOXF == 0._r8 ) then
+ QTWASH = 0._r8
+ QTEVAP = 0._r8
+ return
+ end if
+
+!---effective washout frequency (1/s):
+ FWASH = (RWASH*HSTAR*29.e-6_r8*PR)/(QM*BOXF)
+!---equilib amount of T (kg) in rain thru bottom of box over time step
+ QTMAX = QT*FWASH*DTSCAV
+ if (QTMAX .gt. QTRTOP) then
+!---more of tracer T can go into rain
+ QTDIF = min (QT, QTMAX-QTRTOP)
+ QTWASH = QTDIF * (1._r8 - exp(-DTSCAV*FWASH))
+ QTEVAP=0._r8
+ else
+!--too much of T in rain, must degas/evap T
+ QTWASH = 0._r8
+ QTEVAP = QTRTOP - QTMAX
+ endif
+
+ return
+ end subroutine WASHGAS
+
+!-----------------------------------------------------------------------
+ function DEMPIRICAL (CWATER,RRATE)
+!-----------------------------------------------------------------------
+ use shr_spfn_mod, only: shr_spfn_gamma
+
+ implicit none
+ real(r8), intent(in) :: CWATER
+ real(r8), intent(in) :: RRATE
+
+ real(r8) :: DEMPIRICAL
+
+ real(r8) RRATEX,WX,THETA,PHI,ETA,BETA,ALPHA,BEE
+ real(r8) GAMTHETA,GAMBETA
+
+
+
+ RRATEX=RRATE*3600._r8 !mm/hr
+ WX=CWATER*1.0e3_r8 !g/m3
+
+ if(RRATEX .gt. 0.04_r8) then
+ THETA=exp(-1.43_r8*dlog10(7._r8*RRATEX))+2.8_r8
+ else
+ THETA=5._r8
+ endif
+ PHI=RRATEX/(3600._r8*10._r8) !cgs units
+ ETA=exp((3.01_r8*THETA)-10.5_r8)
+ BETA=THETA/(1._r8+0.638_r8)
+ ALPHA=exp(4._r8*(BETA-3.5_r8))
+ BEE=(.638_r8*THETA/(1._r8+.638_r8))-1.0_r8
+ GAMTHETA = shr_spfn_gamma(THETA)
+ GAMBETA = shr_spfn_gamma(BETA+1._r8)
+ DEMPIRICAL=(((WX*ETA*GAMTHETA)/(1.0e6_r8*ALPHA*PHI*GAMBETA))** &
+ (-1._r8/BEE))*10._r8 ! in mm (wx/1e6 for cgs)
+
+
+ return
+ end function DEMPIRICAL
+!
+end module mo_neu_wetdep
diff --git a/src/chemistry/geoschem/mo_setinv.F90 b/src/chemistry/geoschem/mo_setinv.F90
new file mode 120000
index 0000000000..eeca85151d
--- /dev/null
+++ b/src/chemistry/geoschem/mo_setinv.F90
@@ -0,0 +1 @@
+../mozart/mo_setinv.F90
\ No newline at end of file
diff --git a/src/chemistry/geoschem/mo_sim_dat.F90 b/src/chemistry/geoschem/mo_sim_dat.F90
new file mode 100644
index 0000000000..46c344415b
--- /dev/null
+++ b/src/chemistry/geoschem/mo_sim_dat.F90
@@ -0,0 +1,357 @@
+
+ module mo_sim_dat
+
+ private
+ public :: set_sim_dat
+
+ contains
+
+ subroutine set_sim_dat
+
+ use chem_mods, only : clscnt, cls_rxt_cnt, clsmap, permute, adv_mass, fix_mass, crb_mass
+ use chem_mods, only : diag_map
+ use chem_mods, only : phtcnt, rxt_tag_cnt, rxt_tag_lst, rxt_tag_map
+ use chem_mods, only : pht_alias_lst, pht_alias_mult
+ use chem_mods, only : extfrc_lst, inv_lst, slvd_lst
+ use chem_mods, only : enthalpy_cnt, cph_enthalpy, cph_rid, num_rnts, rxntot
+ use cam_abortutils,only : endrun
+ use mo_tracname, only : solsym
+ use chem_mods, only : frc_from_dataset
+ use chem_mods, only : is_scalar, is_vector
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use cam_logfile, only : iulog
+
+ implicit none
+
+!--------------------------------------------------------------
+! ... local variables
+!--------------------------------------------------------------
+ integer :: ios
+
+ ! is_scalar = .false.
+ ! is_vector = .true.
+
+ ! clscnt(:) = (/ 30, 0, 0, 191, 0 /)
+
+ ! cls_rxt_cnt(:,1) = (/ 37, 61, 0, 30 /)
+ ! cls_rxt_cnt(:,4) = (/ 23, 174, 326, 191 /)
+
+ ! GEOS-Chem tracers (advected species) are placed first along MAM
+ ! aerosols, as those will be constituents. MAM requires that there
+ ! is a linear mapping between solsym and constituents
+
+ solsym(:331) = (/ 'ACET ','ACTA ','AERI ', &
+ 'ALD2 ','ALK4 ','ASOA1 ', &
+ 'ASOA2 ','ASOA3 ','ASOAN ', &
+ 'ASOG1 ','ASOG2 ','ASOG3 ', &
+ 'ATOOH ','BCPI ','BCPO ', &
+ 'BENZ ','BR ','BR2 ', &
+ 'BRCL ','BRNO2 ','BRNO3 ', &
+ 'BRO ','BRSALA ','BRSALC ', &
+ 'C2H6 ','C3H8 ','CCL4 ', &
+ 'CFC11 ','CFC113 ','CFC114 ', &
+ 'CFC115 ','CFC12 ','CH2BR2 ', &
+ 'CH2CL2 ','CH2I2 ','CH2IBR ', &
+ 'CH2ICL ','CH2O ','CH3BR ', &
+ 'CH3CCL3 ','CH3CL ','CH3I ', &
+ 'CH4 ','CHBR3 ','CHCL3 ', &
+ 'CL ','CL2 ','CL2O2 ', &
+ 'CLNO2 ','CLNO3 ','CLO ', &
+ 'CLOO ','CLOCK ', &
+ 'CO ','DMS ','DST1 ', &
+ 'DST2 ','DST3 ','DST4 ', &
+ 'EOH ','ETHLN ','ETNO3 ', &
+ 'ETP ','GLYC ','GLYX ', &
+ 'H1211 ','H1301 ','H2402 ', &
+ 'H2O ','H2O2 ','HAC ', &
+ 'HBR ','HC5A ','HCFC123 ', &
+ 'HCFC141B ','HCFC142B ','HCFC22 ', &
+ 'HCL ','HCOOH ','HI ', &
+ 'HMHP ','HMML ','HNO2 ', &
+ 'HNO3 ','HNO4 ','HOBR ', &
+ 'HOCL ','HOI ','HONIT ', &
+ 'HPALD1 ','HPALD2 ','HPALD3 ', &
+ 'HPALD4 ','HPETHNL ','I ', &
+ 'I2 ','I2O2 ','I2O3 ', &
+ 'I2O4 ','IBR ','ICHE ', &
+ 'ICL ','ICN ','ICPDH ', &
+ 'IDC ','IDCHP ','IDHDP ', &
+ 'IDHPE ','IDN ','IEPOXA ', &
+ 'IEPOXB ','IEPOXD ','IHN1 ', &
+ 'IHN2 ','IHN3 ','IHN4 ', &
+ 'INDIOL ','INO ','INPB ', &
+ 'INPD ','IO ','IONITA ', &
+ 'IONO ','IONO2 ','IPRNO3 ', &
+ 'ISALA ','ISALC ','ISOP ', &
+ 'ITCN ','ITHN ','LIMO ', &
+ 'LVOC ','LVOCOA ','MACR ', &
+ 'MACR1OOH ','MAP ','MCRDH ', &
+ 'MCRENOL ','MCRHN ','MCRHNB ', &
+ 'MCRHP ','MEK ','MENO3 ', &
+ 'MGLY ','MOH ','MONITA ', &
+ 'MONITS ','MONITU ','MP ', &
+ 'MPAN ','MPN ','MSA ', &
+ 'MTPA ','MTPO ','MVK ', &
+ 'MVKDH ','MVKHC ','MVKHCB ', &
+ 'MVKHP ','MVKN ','MVKPC ', &
+ 'N2O ','N2O5 ','NH3 ', &
+ 'NH4 ','NIT ','NITS ', &
+ 'NO ','NO2 ','NO3 ', &
+ 'NPRNO3 ','O3 ','OCLO ', &
+ 'OCPI ','OCPO ','OCS ', &
+ 'OIO ','PAN ','PFE ', &
+ 'PIP ','PP ','PPN ', &
+ 'PROPNN ','PRPE ','PRPN ', &
+ 'PYAC ','R4N2 ','R4P ', &
+ 'RA3P ','RB3P ','RCHO ', &
+ 'RIPA ','RIPB ','RIPC ', &
+ 'RIPD ','RP ','SALA ', &
+ 'SALAAL ','SALACL ','SALC ', &
+ 'SALCAL ','SALCCL ','SO2 ', &
+ 'SO4 ','SO4S ','SOAGX ', &
+ 'SOAIE ','TOLU ','TSOA0 ', &
+ 'TSOA1 ','TSOA2 ','TSOA3 ', &
+ 'TSOG0 ','TSOG1 ','TSOG2 ', &
+ 'TSOG3 ','XYLE ','bc_a1 ', &
+ 'bc_a4 ','dst_a1 ','dst_a2 ', &
+ 'dst_a3 ','ncl_a1 ','ncl_a2 ', &
+ 'ncl_a3 ','num_a1 ','num_a2 ', &
+ 'num_a3 ','num_a4 ','pom_a1 ', &
+ 'pom_a4 ','so4_a1 ','so4_a2 ', &
+ 'so4_a3 ','soa1_a1 ','soa1_a2 ', &
+ 'soa2_a1 ','soa2_a2 ','soa3_a1 ', &
+ 'soa3_a2 ','soa4_a1 ','soa4_a2 ', &
+ 'soa5_a1 ','soa5_a2 ','H2SO4 ', &
+ 'SOAG0 ','SOAG1 ','SOAG2 ', &
+ 'SOAG3 ','SOAG4 ','CO2 ', &
+ 'LBRO2H ','LBRO2N ','LISOPOH ', &
+ 'LISOPNO3 ','LTRO2H ','LTRO2N ', &
+ 'LXRO2H ','LXRO2N ','SO4H1 ', &
+ 'SO4H2 ','SO4H3 ','SO4H4 ', &
+ 'POX ','LOX ','PCO ', &
+ 'LCO ','PSO4 ','LCH4 ', &
+ 'PH2O2 ','BRO2 ','TRO2 ', &
+ 'N ','XRO2 ','HPALD2OO ', &
+ 'HPALD1OO ','INA ','C4HVP1 ', &
+ 'C4HVP2 ','IDNOO ','ICNOO ', &
+ 'ISOPNOO2 ','ROH ','ISOPNOO1 ', &
+ 'IDHNDOO1 ','IDHNDOO2 ','H ', &
+ 'IHPOO2 ','IHPOO1 ','IHPOO3 ', &
+ 'IHPNDOO ','ICHOO ','R4N1 ', &
+ 'PRN1 ','MVKOHOO ','MCROHOO ', &
+ 'MACR1OO ','PO2 ','OLNN ', &
+ 'OLND ','ETO2 ','IHPNBOO ', &
+ 'RCO3 ','LIMO2 ','KO2 ', &
+ 'IEPOXAOO ','IEPOXBOO ','CH3CHOO ', &
+ 'PIO2 ','IDHNBOO ','A3O2 ', &
+ 'IHOO4 ','IHOO1 ','INO2D ', &
+ 'INO2B ','MACRNO2 ','ATO2 ', &
+ 'OTHRO2 ','R4O2 ','B3O2 ', &
+ 'CH2OO ','MCO3 ','MO2 ', &
+ 'O1D ','OH ','HO2 ', &
+ 'O ','H2 ','N2 ', &
+ 'O2 ','RCOOH ' /)
+
+ inv_lst(: 6) = (/ 'M ', 'N2 ', 'O2 ', &
+ 'H2 ', 'MOH ', 'RCOOH ' /)
+
+ fix_mass(: 6) = (/ 0.00000000_r8, 28.0134800_r8, 31.9988000_r8, 2.020000_r8, 32.050000_r8, &
+ 74.090000_r8 /)
+
+ adv_mass(:331) = (/ 58.090000_r8, 60.060000_r8, 126.900000_r8, 44.060000_r8, 58.120000_r8, &
+ 150.000000_r8, 150.000000_r8, 150.000000_r8, 150.000000_r8, 150.000000_r8, &
+ 150.00000_r8, 150.000000_r8, 90.0900000_r8, 12.010000_r8, 12.010000_r8, &
+ 78.120000_r8, 79.900000_r8, 159.800000_r8, 115.450000_r8, 125.910000_r8, &
+ 141.910000_r8, 95.900000_r8, 79.900000_r8, 79.900000_r8, 30.080000_r8, &
+ 44.110000_r8, 153.820000_r8, 137.370000_r8, 187.380000_r8, 170.920000_r8, &
+ 154.470000_r8, 120.910000_r8, 173.830000_r8, 84.930000_r8, 267.840000_r8, &
+ 220.840000_r8, 176.380000_r8, 30.030000_r8, 94.940000_r8, 133.350000_r8, &
+ 50.450000_r8, 141.940000_r8, 16.050000_r8, 252.730000_r8, 119.350000_r8, &
+ 35.450000_r8, 70.900000_r8, 102.910000_r8, 81.450000_r8, 97.450000_r8, &
+ 51.450000_r8, 67.450000_r8, 1.000000_r8, 28.010000_r8, 62.130000_r8, &
+ 29.000000_r8, 29.000000_r8, 29.000000_r8, 29.000000_r8, 46.080000_r8, &
+ 105.060000_r8, 91.080000_r8, 62.080000_r8, 60.060000_r8, 58.040000_r8, &
+ 165.360000_r8, 148.910000_r8, 259.820000_r8, 18.020000_r8, 34.020000_r8, &
+ 74.080000_r8, 80.910000_r8, 100.130000_r8, 152.930000_r8, 116.940000_r8, &
+ 100.500000_r8, 86.470000_r8, 36.450000_r8, 46.030000_r8, 127.910000_r8, &
+ 64.050000_r8, 102.100000_r8, 47.010000_r8, 63.010000_r8, 79.010000_r8, &
+ 96.910000_r8, 52.450000_r8, 143.890000_r8, 215.000000_r8, 116.130000_r8, &
+ 116.130000_r8, 116.130000_r8, 116.130000_r8, 76.060000_r8, 126.900000_r8, &
+ 253.800000_r8, 285.800000_r8, 301.800000_r8, 317.800000_r8, 206.900000_r8, &
+ 116.130000_r8, 162.450000_r8, 145.130000_r8, 150.150000_r8, 98.110000_r8, &
+ 148.130000_r8, 168.170000_r8, 150.150000_r8, 192.150000_r8, 106.140000_r8, &
+ 106.140000_r8, 106.140000_r8, 147.150000_r8, 147.150000_r8, 147.150000_r8, &
+ 147.150000_r8, 102.000000_r8, 156.910000_r8, 163.150000_r8, 163.150000_r8, &
+ 142.900000_r8, 14.010000_r8, 172.910000_r8, 188.910000_r8, 105.110000_r8, &
+ 126.900000_r8, 126.900000_r8, 68.130000_r8, 195.150000_r8, 197.170000_r8, &
+ 136.260000_r8, 154.190000_r8, 154.190000_r8, 70.100000_r8, 102.100000_r8, &
+ 76.060000_r8, 104.120000_r8, 86.100000_r8, 149.110000_r8, 149.110000_r8, &
+ 120.120000_r8, 72.110000_r8, 77.050000_r8, 72.070000_r8, 32.050000_r8, &
+ 14.010000_r8, 215.280000_r8, 215.280000_r8, 48.050000_r8, 147.100000_r8, &
+ 93.050000_r8, 96.100000_r8, 136.260000_r8, 136.260000_r8, 70.090000_r8, &
+ 105.130000_r8, 102.100000_r8, 102.100000_r8, 120.120000_r8, 149.120000_r8, &
+ 118.100000_r8, 44.020000_r8, 108.020000_r8, 17.040000_r8, 18.050000_r8, &
+ 62.010000_r8, 31.400000_r8, 30.010000_r8, 46.010000_r8, 62.010000_r8, &
+ 105.110000_r8, 48.000000_r8, 67.450000_r8, 12.010000_r8, 12.010000_r8, &
+ 60.070000_r8, 158.900000_r8, 121.060000_r8, 55.850000_r8, 186.280000_r8, &
+ 92.110000_r8, 135.080000_r8, 119.080000_r8, 42.090000_r8, 137.110000_r8, &
+ 88.070000_r8, 119.100000_r8, 90.140000_r8, 76.110000_r8, 76.110000_r8, &
+ 58.090000_r8, 118.150000_r8, 118.150000_r8, 118.150000_r8, 118.150000_r8, &
+ 90.090000_r8, 31.400000_r8, 31.400000_r8, 35.450000_r8, 31.400000_r8, &
+ 31.400000_r8, 35.450000_r8, 64.040000_r8, 96.060000_r8, 31.400000_r8, &
+ 58.040000_r8, 118.150000_r8, 92.150000_r8, 150.000000_r8, 150.000000_r8, &
+ 150.000000_r8, 150.000000_r8, 150.000000_r8, 150.000000_r8, 150.000000_r8, &
+ 150.000000_r8, 106.180000_r8, 12.011000_r8, 12.011000_r8, 135.064039_r8, &
+ 135.064039_r8, 135.064039_r8, 58.442468_r8, 58.442468_r8, 58.442468_r8, &
+ 1.007400_r8, 1.007400_r8, 1.007400_r8, 1.007400_r8, 12.011000_r8, &
+ 12.011000_r8, 115.107340_r8, 115.107340_r8, 115.107340_r8, 250.445000_r8, &
+ 250.445000_r8, 250.445000_r8, 250.445000_r8, 250.445000_r8, 250.445000_r8, &
+ 250.445000_r8, 250.445000_r8, 250.445000_r8, 250.445000_r8, 98.078400_r8, &
+ 250.445000_r8, 250.445000_r8, 250.445000_r8, 250.445000_r8, 250.445000_r8, &
+ 44.010000_r8, -1.000000_r8, -1.000000_r8, -1.000000_r8, -1.000000_r8, &
+ -1.000000_r8, -1.000000_r8, -1.000000_r8, -1.000000_r8, 96.060000_r8, &
+ 96.060000_r8, 96.060000_r8, 96.060000_r8, -1.000000_r8, -1.000000_r8, &
+ -1.000000_r8, -1.000000_r8, -1.000000_r8, -1.000000_r8, -1.000000_r8, &
+ 159.130000_r8, 173.160000_r8, 14.010000_r8, 187.190000_r8, 147.120000_r8, &
+ 147.120000_r8, 146.140000_r8, 103.110000_r8, 103.110000_r8, 241.140000_r8, &
+ 194.140000_r8, 196.160000_r8, 60.110000_r8, 196.160000_r8, 196.160000_r8, &
+ 196.160000_r8, 1.010000_r8, 167.160000_r8, 167.160000_r8, 167.160000_r8, &
+ 212.160000_r8, 149.140000_r8, 150.130000_r8, 136.090000_r8, 119.110000_r8, &
+ 119.110000_r8, 101.090000_r8, 91.100000_r8, 230.270000_r8, 230.270000_r8, &
+ 61.070000_r8, 212.160000_r8, 89.080000_r8, 185.270000_r8, 101.090000_r8, &
+ 149.140000_r8, 149.140000_r8, 60.060000_r8, 185.270000_r8, 196.160000_r8, &
+ 75.100000_r8, 117.140000_r8, 117.140000_r8, 162.140000_r8, 162.140000_r8, &
+ 180.100000_r8, 89.080000_r8, 61.070000_r8, 89.130000_r8, 75.100000_r8, &
+ 46.030000_r8, 75.050000_r8, 47.040000_r8, 16.000000_r8, 17.010000_r8, &
+ 33.010000_r8, 16.000000_r8, 2.020000_r8, 28.020000_r8, 32.000000_r8, &
+ 74.090000_r8 /)
+
+ extfrc_lst(: 1) = (/ ' ' /)
+
+ frc_from_dataset(: 1) = (/ .false. /)
+
+ ! crb_mass(:221) = (/ 60.055000_r8, 60.055000_r8, 12.011000_r8, 12.011000_r8, 12.011000_r8, &
+ ! 180.165000_r8, 72.066000_r8, 72.066000_r8, 72.066000_r8, 60.055000_r8, &
+ ! 48.044000_r8, 60.055000_r8, 60.055000_r8, 72.066000_r8, 60.055000_r8, &
+ ! 48.044000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 84.077000_r8, 84.077000_r8, 24.022000_r8, 24.022000_r8, &
+ ! 24.022000_r8, 24.022000_r8, 24.022000_r8, 36.033000_r8, 36.033000_r8, &
+ ! 36.033000_r8, 72.066000_r8, 12.011000_r8, 12.011000_r8, 12.011000_r8, &
+ ! 12.011000_r8, 24.022000_r8, 24.022000_r8, 24.022000_r8, 12.011000_r8, &
+ ! 12.011000_r8, 12.011000_r8, 12.011000_r8, 24.022000_r8, 24.022000_r8, &
+ ! 12.011000_r8, 24.022000_r8, 36.033000_r8, 36.033000_r8, 24.022000_r8, &
+ ! 24.022000_r8, 12.011000_r8, 12.011000_r8, 12.011000_r8, 12.011000_r8, &
+ ! 0.000000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 12.011000_r8, 12.011000_r8, 12.011000_r8, 12.011000_r8, 12.011000_r8, &
+ ! 84.077000_r8, 24.022000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 12.011000_r8, 24.022000_r8, 0.000000_r8, 24.022000_r8, 24.022000_r8, &
+ ! 0.000000_r8, 0.000000_r8, 24.022000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 24.022000_r8, 24.022000_r8, 12.011000_r8, 0.000000_r8, &
+ ! 12.011000_r8, 12.011000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 0.000000_r8, 48.044000_r8, 60.055000_r8, 36.033000_r8, &
+ ! 60.055000_r8, 60.055000_r8, 60.055000_r8, 60.055000_r8, 60.055000_r8, &
+ ! 60.055000_r8, 60.055000_r8, 60.055000_r8, 156.143000_r8, 48.044000_r8, &
+ ! 48.044000_r8, 48.044000_r8, 48.044000_r8, 48.044000_r8, 120.110000_r8, &
+ ! 48.044000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, 60.055000_r8, &
+ ! 60.055000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 12.011000_r8, 12.011000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 36.033000_r8, 120.110000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 12.011000_r8, 48.044000_r8, 24.022000_r8, 84.077000_r8, 72.066000_r8, &
+ ! 72.066000_r8, 72.066000_r8, 12.011000_r8, 12.011000_r8, 36.033000_r8, &
+ ! 36.033000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, 180.165000_r8, &
+ ! 180.165000_r8, 180.165000_r8, 180.165000_r8, 180.165000_r8, 180.165000_r8, &
+ ! 180.165000_r8, 180.165000_r8, 180.165000_r8, 180.165000_r8, 180.165000_r8, &
+ ! 180.165000_r8, 180.165000_r8, 180.165000_r8, 180.165000_r8, 12.011000_r8, &
+ ! 264.242000_r8, 84.077000_r8, 120.110000_r8, 120.110000_r8, 120.110000_r8, &
+ ! 120.110000_r8, 108.099000_r8, 84.077000_r8, 84.077000_r8, 60.055000_r8, &
+ ! 96.088000_r8, 96.088000_r8, 96.088000_r8, 96.088000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 84.077000_r8, 60.055000_r8, 72.066000_r8, 84.077000_r8, &
+ ! 24.022000_r8, 36.033000_r8, 72.066000_r8, 24.022000_r8, 12.011000_r8, &
+ ! 60.055000_r8, 48.044000_r8, 24.022000_r8, 24.022000_r8, 0.000000_r8, &
+ ! 12.011000_r8, 60.055000_r8, 60.055000_r8, 48.044000_r8, 48.044000_r8, &
+ ! 48.044000_r8, 48.044000_r8, 48.044000_r8, 120.110000_r8, 0.000000_r8, &
+ ! 0.000000_r8, 72.066000_r8, 36.033000_r8, 36.033000_r8, 120.110000_r8, &
+ ! 120.110000_r8, 84.077000_r8, 60.055000_r8, 96.088000_r8, 96.088000_r8, &
+ ! 0.000000_r8 /)
+
+ ! fix_mass(: 3) = (/ 0.00000000_r8, 28.0134800_r8, 31.9988000_r8 /)
+
+ ! clsmap(: 30,1) = (/ 3, 21, 33, 34, 35, 36, 37, 38, 39, 40, &
+ ! 41, 43, 44, 46, 54, 55, 61, 63, 71, 78, &
+ ! 82, 83, 84, 113, 122, 123, 148, 170, 185, 186 /)
+ ! clsmap(:191,4) = (/ 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, &
+ ! 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, &
+ ! 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, &
+ ! 42, 45, 47, 48, 49, 50, 51, 52, 53, 56, &
+ ! 57, 58, 59, 60, 62, 64, 65, 66, 67, 68, &
+ ! 69, 70, 72, 73, 74, 75, 76, 77, 79, 80, &
+ ! 81, 85, 86, 87, 88, 89, 90, 91, 92, 93, &
+ ! 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, &
+ ! 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, &
+ ! 115, 116, 117, 118, 119, 120, 121, 124, 125, 126, &
+ ! 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, &
+ ! 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, &
+ ! 147, 149, 150, 151, 152, 153, 154, 155, 156, 157, &
+ ! 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, &
+ ! 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, &
+ ! 179, 180, 181, 182, 183, 184, 187, 188, 189, 190, &
+ ! 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, &
+ ! 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, &
+ ! 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, &
+ ! 221 /)
+
+ ! permute(:191,4) = (/ 121, 120, 1, 2, 144, 46, 85, 47, 86, 96, &
+ ! 68, 117, 75, 60, 81, 174, 61, 187, 110, 62, &
+ ! 78, 70, 111, 64, 79, 71, 149, 90, 39, 65, &
+ ! 189, 161, 38, 147, 166, 108, 102, 134, 91, 184, &
+ ! 45, 36, 183, 148, 155, 40, 50, 52, 69, 3, &
+ ! 4, 5, 41, 132, 151, 142, 176, 162, 114, 42, &
+ ! 138, 177, 49, 133, 57, 175, 83, 131, 136, 154, &
+ ! 58, 156, 72, 43, 139, 113, 107, 164, 89, 123, &
+ ! 34, 165, 73, 104, 74, 106, 145, 169, 82, 67, &
+ ! 84, 152, 6, 7, 8, 37, 9, 190, 185, 179, &
+ ! 141, 87, 10, 11, 12, 13, 188, 186, 76, 80, &
+ ! 59, 97, 44, 98, 48, 77, 14, 15, 109, 88, &
+ ! 103, 167, 140, 63, 16, 17, 18, 19, 20, 21, &
+ ! 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, &
+ ! 32, 33, 35, 53, 115, 118, 99, 150, 153, 116, &
+ ! 51, 54, 55, 124, 56, 92, 105, 146, 100, 93, &
+ ! 137, 135, 119, 173, 182, 129, 112, 66, 125, 178, &
+ ! 94, 168, 171, 170, 126, 172, 143, 122, 159, 180, &
+ ! 181, 95, 130, 160, 158, 157, 127, 163, 128, 101, &
+ ! 191 /)
+
+ ! diag_map(:191) = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, &
+ ! 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, &
+ ! 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, &
+ ! 31, 32, 33, 39, 45, 46, 49, 52, 55, 59, &
+ ! 62, 65, 68, 71, 74, 81, 87, 91, 96, 100, &
+ ! 109, 116, 121, 125, 134, 142, 147, 150, 155, 158, &
+ ! 161, 164, 168, 172, 176, 180, 184, 190, 193, 199, &
+ ! 205, 211, 214, 219, 224, 229, 234, 240, 245, 250, &
+ ! 258, 266, 272, 278, 284, 290, 296, 302, 308, 314, &
+ ! 320, 326, 334, 340, 347, 353, 356, 363, 367, 376, &
+ ! 384, 391, 397, 403, 409, 415, 423, 431, 435, 443, &
+ ! 451, 459, 467, 476, 483, 494, 503, 507, 515, 522, &
+ ! 533, 544, 552, 563, 576, 583, 594, 610, 621, 630, &
+ ! 640, 649, 657, 661, 666, 677, 687, 695, 709, 726, &
+ ! 732, 739, 744, 761, 787, 809, 819, 827, 841, 856, &
+ ! 865, 874, 886, 898, 911, 915, 928, 950, 969, 985, &
+ ! 996,1007,1024,1044,1060,1072,1083,1108,1130,1153, &
+ ! 1186,1205,1236,1250,1263,1276,1296,1390,1448,1473, &
+ ! 1621,1672,1699,1734,1776,1837,1862,1893,1917,1996, &
+ ! 2022 /)
+
+ ! slvd_lst(: 34) = (/ 'ACBZO2 ', 'ALKO2 ', 'BENZO2 ', 'BZOO ', 'C2H5O2 ', &
+ ! 'C3H7O2 ', 'C6H5O2 ', 'CH3CO3 ', 'CH3O2 ', 'DICARBO2 ', &
+ ! 'ENEO2 ', 'EO ', 'EO2 ', 'HO2 ', 'HOCH2OO ', &
+ ! 'ISOPAO2 ', 'ISOPBO2 ', 'MACRO2 ', 'MALO2 ', 'MCO3 ', &
+ ! 'MDIALO2 ', 'MEKO2 ', 'NTERPO2 ', 'O1D ', 'OH ', &
+ ! 'PHENO2 ', 'PO2 ', 'RO2 ', 'TERP2O2 ', 'TERPO2 ', &
+ ! 'TOLO2 ', 'XO2 ', 'XYLENO2 ', 'XYLOLO2 ' /)
+
+ end subroutine set_sim_dat
+
+ end module mo_sim_dat
diff --git a/src/chemistry/geoschem/mo_tracname.F90 b/src/chemistry/geoschem/mo_tracname.F90
new file mode 100644
index 0000000000..8e8a80b9a3
--- /dev/null
+++ b/src/chemistry/geoschem/mo_tracname.F90
@@ -0,0 +1,14 @@
+
+ module mo_tracname
+!-----------------------------------------------------------
+! ... List of advected and non-advected trace species, and
+! surface fluxes for the advected species.
+!-----------------------------------------------------------
+
+ use chem_mods, only : gas_pcnst
+
+ implicit none
+
+ character(len=16) :: solsym(gas_pcnst) ! species names
+
+ end module mo_tracname
diff --git a/src/chemistry/geoschem/rate_diags.F90 b/src/chemistry/geoschem/rate_diags.F90
new file mode 100644
index 0000000000..40b5fa6dde
--- /dev/null
+++ b/src/chemistry/geoschem/rate_diags.F90
@@ -0,0 +1,177 @@
+!--------------------------------------------------------------------------------
+! Manages writing reaction rates to history
+!--------------------------------------------------------------------------------
+module rate_diags
+
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use shr_kind_mod, only : CL => SHR_KIND_CL
+ use cam_history, only : fieldname_len
+ use cam_history, only : addfld, add_default
+ use cam_history, only : outfld
+ use chem_mods, only : rxt_tag_cnt, rxt_tag_lst, rxt_tag_map
+ use ppgrid, only : pver
+ use spmd_utils, only : masterproc
+ use cam_abortutils, only : endrun
+! use sums_utils, only : sums_grp_t, parse_sums
+
+ implicit none
+ private
+ public :: rate_diags_init
+ public :: rate_diags_calc
+ public :: rate_diags_readnl
+
+ character(len=fieldname_len) :: rate_names(rxt_tag_cnt)
+
+! integer :: ngrps = 0
+! type(sums_grp_t), allocatable :: grps(:)
+
+ integer, parameter :: maxlines = 200
+ character(len=CL), allocatable :: rxn_rate_sums(:)
+
+contains
+
+!-------------------------------------------------------------------
+!-------------------------------------------------------------------
+ subroutine rate_diags_readnl(nlfile)
+
+ use namelist_utils, only: find_group_name
+ use units, only: getunit, freeunit
+ use spmd_utils, only: mpicom, mpi_character, masterprocid
+
+ ! args
+ character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
+
+ ! Local variables
+ integer :: unitn, ierr
+
+ namelist /rxn_rate_diags_nl/ rxn_rate_sums
+
+ allocate( rxn_rate_sums( maxlines ) )
+ rxn_rate_sums(:) = ' '
+
+ !! Read namelist
+ !if (masterproc) then
+ ! unitn = getunit()
+ ! open( unitn, file=trim(nlfile), status='old' )
+ ! call find_group_name(unitn, 'rxn_rate_diags_nl', status=ierr)
+ ! if (ierr == 0) then
+ ! read(unitn, rxn_rate_diags_nl, iostat=ierr)
+ ! if (ierr /= 0) then
+ ! call endrun('rate_diags_readnl:: ERROR reading namelist')
+ ! end if
+ ! end if
+ ! close(unitn)
+ ! call freeunit(unitn)
+ !end if
+
+ ! Broadcast namelist variables
+ call mpi_bcast(rxn_rate_sums,len(rxn_rate_sums(1))*maxlines, mpi_character, masterprocid, mpicom, ierr)
+
+ end subroutine rate_diags_readnl
+!--------------------------------------------------------------------------------
+!--------------------------------------------------------------------------------
+ subroutine rate_diags_init
+ use phys_control, only : phys_getopts
+
+ integer :: i, len, pos
+ character(len=64) :: name
+ logical :: history_scwaccm_forcing
+
+ call phys_getopts( history_scwaccm_forcing_out = history_scwaccm_forcing )
+
+ !do i = 1,rxt_tag_cnt
+ ! pos = 0
+ ! pos = index(rxt_tag_lst(i),'tag_')
+ ! if (pos <= 0) pos = index(rxt_tag_lst(i),'usr_')
+ ! if (pos <= 0) pos = index(rxt_tag_lst(i),'cph_')
+ ! if (pos <= 0) pos = index(rxt_tag_lst(i),'ion_')
+ ! if (pos>0) then
+ ! name = 'r_'//trim(rxt_tag_lst(i)(5:))
+ ! else
+ ! name = 'r_'//trim(rxt_tag_lst(i)(1:))
+ ! endif
+ ! len = min(fieldname_len,len_trim(name))
+ ! rate_names(i) = trim(name(1:len))
+ ! call addfld(rate_names(i), (/ 'lev' /),'A', 'molecules/cm3/sec','reaction rate')
+ ! if (history_scwaccm_forcing .and. rate_names(i) == 'r_O1D_H2O') then
+ ! call add_default( rate_names(i), 1, ' ')
+ ! endif
+ !enddo
+
+ !! parse the terms of the summations
+ !call parse_sums(rxn_rate_sums, ngrps, grps)
+ !deallocate( rxn_rate_sums )
+
+ !do i = 1, ngrps
+ ! call addfld( grps(i)%name, (/ 'lev' /),'A', 'molecules/cm3/sec','reaction rate group')
+ !enddo
+
+ end subroutine rate_diags_init
+
+!--------------------------------------------------------------------------------
+!--------------------------------------------------------------------------------
+ subroutine rate_diags_calc( rxt_rates, vmr, m, ncol, lchnk )
+
+ !use mo_rxt_rates_conv, only: set_rates
+
+ real(r8), intent(inout) :: rxt_rates(:,:,:) ! 'molec/cm3/sec'
+ real(r8), intent(in) :: vmr(:,:,:)
+ real(r8), intent(in) :: m(:,:) ! air density (molecules/cm3)
+ integer, intent(in) :: ncol, lchnk
+
+ !integer :: i, j, ndx
+ !real(r8) :: group_rate(ncol,pver)
+
+ rxt_rates(:,:,:) = 0.0e+0_r8
+
+ !call set_rates( rxt_rates, vmr, ncol )
+
+ !! output individual tagged rates
+ !do i = 1, rxt_tag_cnt
+ ! ! convert from vmr/sec to molecules/cm3/sec
+ ! rxt_rates(:ncol,:,rxt_tag_map(i)) = rxt_rates(:ncol,:,rxt_tag_map(i)) * m(:ncol,:)
+ ! call outfld( rate_names(i), rxt_rates(:ncol,:,rxt_tag_map(i)), ncol, lchnk )
+ !enddo
+
+ !! output rate groups ( or families )
+ !do i = 1, ngrps
+ ! group_rate(:,:) = 0._r8
+ ! do j = 1, grps(i)%nmembers
+ ! ndx = lookup_tag_ndx(grps(i)%term(j))
+ ! group_rate(:ncol,:) = group_rate(:ncol,:) + grps(i)%multipler(j)*rxt_rates(:ncol,:,ndx)
+ ! enddo
+ ! call outfld( grps(i)%name, group_rate(:ncol,:), ncol, lchnk )
+ !end do
+
+ end subroutine rate_diags_calc
+
+!-------------------------------------------------------------------
+! Private routines :
+!-------------------------------------------------------------------
+!-------------------------------------------------------------------
+
+!-------------------------------------------------------------------
+! finds the index corresponging to a given reacton name
+!-------------------------------------------------------------------
+ function lookup_tag_ndx( name ) result( ndx )
+ character(len=*) :: name
+ integer :: ndx
+
+ integer :: i
+
+ ndx = -1
+
+ !findloop: do i = 1,rxt_tag_cnt
+ ! if (trim(name) .eq. trim(rate_names(i)(3:))) then
+ ! ndx = i
+ ! return
+ ! endif
+ !end do findloop
+
+ !if (ndx<0) then
+ ! call endrun('rate_diags: not able to find rxn tag name: '//trim(name))
+ !endif
+
+ end function lookup_tag_ndx
+
+end module rate_diags
diff --git a/src/chemistry/geoschem/short_lived_species.F90 b/src/chemistry/geoschem/short_lived_species.F90
new file mode 100644
index 0000000000..293aaa65cd
--- /dev/null
+++ b/src/chemistry/geoschem/short_lived_species.F90
@@ -0,0 +1,221 @@
+!---------------------------------------------------------------------
+! Manages the storage of non-transported short-lived chemical species
+! in the physics buffer.
+!
+! Created by: Francis Vitt -- 20 Aug 2008
+!---------------------------------------------------------------------
+module short_lived_species
+
+ use shr_kind_mod, only : r8 => shr_kind_r8
+ use chem_mods, only : slvd_lst, nslvd, gas_pcnst, slvd_ref_mmr
+ use cam_logfile, only : iulog
+ use ppgrid, only : pcols, pver, begchunk, endchunk
+ use spmd_utils, only : masterproc
+
+
+ implicit none
+
+ save
+ private
+ public :: register_short_lived_species
+ public :: short_lived_species_initic
+ public :: short_lived_species_writeic
+ public :: initialize_short_lived_species
+ public :: set_short_lived_species
+ public :: get_short_lived_species
+ public :: slvd_index
+ public :: pbf_idx
+
+ integer :: pbf_idx
+
+ character(len=16), parameter :: pbufname = 'ShortLivedSpecies'
+
+contains
+
+!---------------------------------------------------------------------
+!---------------------------------------------------------------------
+ subroutine register_short_lived_species
+ use physics_buffer, only : pbuf_add_field, dtype_r8
+
+ implicit none
+
+ integer :: m
+
+ if ( nslvd < 1 ) return
+
+ call pbuf_add_field(pbufname,'global',dtype_r8,(/pcols,pver,nslvd/),pbf_idx)
+
+ end subroutine register_short_lived_species
+
+!---------------------------------------------------------------------
+!---------------------------------------------------------------------
+ subroutine short_lived_species_initic
+#ifdef WACCMX_IONOS
+ use cam_history, only : addfld, add_default
+
+ integer :: m
+ character(len=24) :: varname
+
+ do m=1,nslvd
+ varname = trim(slvd_lst(m))//'&IC'
+ call addfld (varname, (/ 'lev' /),'I','kg/kg',trim(varname)//' not-transported species',gridname='physgrid')
+ call add_default (varname,0, 'I')
+ enddo
+#endif
+ end subroutine short_lived_species_initic
+
+!---------------------------------------------------------------------
+!---------------------------------------------------------------------
+ subroutine short_lived_species_writeic( lchnk, pbuf )
+ use cam_history, only : outfld, write_inithist
+ use physics_buffer, only : physics_buffer_desc, pbuf_get_field
+
+ integer , intent(in) :: lchnk ! chunk identifier
+ type(physics_buffer_desc), pointer :: pbuf(:)
+#ifdef WACCMX_IONOS
+ real(r8),pointer :: tmpptr(:,:)
+ integer :: m
+ character(len=24) :: varname
+
+ if ( write_inithist() ) then
+ do m=1,nslvd
+ varname = trim(slvd_lst(m))//'&IC'
+ call pbuf_get_field(pbuf, pbf_idx, tmpptr, start=(/1,1,m/), kount=(/ pcols,pver,1 /))
+ call outfld(varname, tmpptr, pcols,lchnk)
+ enddo
+ endif
+#endif
+ end subroutine short_lived_species_writeic
+
+!---------------------------------------------------------------------
+!---------------------------------------------------------------------
+ subroutine initialize_short_lived_species(ncid_ini, pbuf2d)
+ use cam_grid_support, only : cam_grid_check, cam_grid_id
+ use cam_grid_support, only : cam_grid_get_dim_names
+ use cam_abortutils, only : endrun
+ !use mo_tracname, only : solsym !TMMF
+ use ncdio_atm, only : infld
+ use pio, only : file_desc_t
+ use physics_buffer, only : physics_buffer_desc, pbuf_set_field, pbuf_get_chunk, pbuf_get_field
+
+ implicit none
+
+ type(file_desc_t), intent(inout) :: ncid_ini
+ type(physics_buffer_desc), pointer :: pbuf2d(:,:)
+
+ integer :: m,n,lchnk
+ integer :: grid_id
+ character(len=255) :: fieldname
+ character(len=4) :: dim1name, dim2name
+ logical :: found
+ real(r8),pointer :: tmpptr(:,:,:) ! temporary pointer
+ real(r8),pointer :: tmpptr2(:,:,:) ! temporary pointer
+ character(len=*), parameter :: subname='INITIALIZE_SHORT_LIVED_SPECIES'
+
+ if ( nslvd < 1 ) return
+
+ found = .false.
+
+ grid_id = cam_grid_id('physgrid')
+ if (.not. cam_grid_check(grid_id)) then
+ call endrun(trim(subname)//': Internal error, no "physgrid" grid')
+ end if
+ call cam_grid_get_dim_names(grid_id, dim1name, dim2name)
+
+ call pbuf_set_field(pbuf2d, pbf_idx, 0._r8)
+
+ allocate(tmpptr(pcols,pver,begchunk:endchunk))
+
+ do m=1,nslvd
+ write(fieldname,'(a,a)') trim(slvd_lst(m))
+ call infld( fieldname,ncid_ini,dim1name, 'lev', dim2name, 1, pcols, 1, pver, begchunk, endchunk, &
+ tmpptr, found, gridname='physgrid')
+
+ if (.not.found) then
+ !tmpptr(:,:,:) = 1.e-36_r8
+ tmpptr(:,:,:) = slvd_ref_mmr(m)
+ endif
+
+ call pbuf_set_field(pbuf2d, pbf_idx, tmpptr, start=(/1,1,m/),kount=(/pcols,pver,1/))
+
+ if (MasterProc) write(iulog,'(a20,a)') TRIM(fieldname), ' is set to short-lived'
+ ! DEBUG: remove as this will be confusing to most due to the negative
+ ! dummy MW which was used to calculate the reference MMR
+ if (MasterProc) write(iulog,'(a, E16.5E4)') ' --> reference MMR: ', slvd_ref_mmr(m)
+
+ enddo
+
+ deallocate(tmpptr)
+
+ end subroutine initialize_short_lived_species
+
+!---------------------------------------------------------------------
+!---------------------------------------------------------------------
+ subroutine set_short_lived_species( q, lchnk, ncol, pbuf )
+
+ use physics_buffer, only : physics_buffer_desc, pbuf_set_field
+
+ implicit none
+
+ real(r8), intent(in) :: q(pcols,pver,nslvd)
+ integer, intent(in) :: lchnk, ncol
+ type(physics_buffer_desc), pointer :: pbuf(:)
+
+ integer :: m,n
+
+ if ( nslvd < 1 ) return
+
+ do m=1,nslvd
+ call pbuf_set_field(pbuf, pbf_idx, q(:,:,m), start=(/1,1,m/),kount=(/pcols,pver,1/))
+ enddo
+
+ end subroutine set_short_lived_species
+
+!---------------------------------------------------------------------
+!---------------------------------------------------------------------
+ subroutine get_short_lived_species( q, lchnk, ncol, pbuf )
+ use physics_buffer, only : physics_buffer_desc, pbuf_get_field
+
+ implicit none
+
+ real(r8), intent(inout) :: q(pcols,pver,nslvd)
+ integer, intent(in) :: lchnk, ncol
+ type(physics_buffer_desc), pointer :: pbuf(:)
+ real(r8),pointer :: tmpptr(:,:)
+
+
+ integer :: m,n
+
+ if ( nslvd < 1 ) return
+
+ do m=1,nslvd
+ call pbuf_get_field(pbuf, pbf_idx, tmpptr, start=(/1,1,m/), kount=(/ pcols,pver,1 /))
+ q(:ncol,:,m) = tmpptr(:ncol,:)
+ enddo
+
+ endsubroutine get_short_lived_species
+
+!---------------------------------------------------------------------
+!---------------------------------------------------------------------
+ function slvd_index( name )
+ implicit none
+
+ character(len=*) :: name
+ integer :: slvd_index
+
+ integer :: m
+
+ slvd_index = -1
+
+ if ( nslvd < 1 ) return
+
+ do m=1,nslvd
+ if ( name == slvd_lst(m) ) then
+ slvd_index = m
+ return
+ endif
+ enddo
+
+ endfunction slvd_index
+
+end module short_lived_species
diff --git a/src/chemistry/geoschem/tracer_cnst.F90 b/src/chemistry/geoschem/tracer_cnst.F90
new file mode 120000
index 0000000000..be79edec09
--- /dev/null
+++ b/src/chemistry/geoschem/tracer_cnst.F90
@@ -0,0 +1 @@
+../mozart/tracer_cnst.F90
\ No newline at end of file
diff --git a/src/chemistry/geoschem/tracer_srcs.F90 b/src/chemistry/geoschem/tracer_srcs.F90
new file mode 120000
index 0000000000..136404bf05
--- /dev/null
+++ b/src/chemistry/geoschem/tracer_srcs.F90
@@ -0,0 +1 @@
+../mozart/tracer_srcs.F90
\ No newline at end of file
diff --git a/src/chemistry/geoschem/upper_bc.F90 b/src/chemistry/geoschem/upper_bc.F90
new file mode 100644
index 0000000000..61f4dab886
--- /dev/null
+++ b/src/chemistry/geoschem/upper_bc.F90
@@ -0,0 +1,243 @@
+
+module upper_bc
+
+!---------------------------------------------------------------------------------
+! Module to compute the upper boundary condition for temperature (dry static energy)
+! and trace gases. Uses the MSIS model, and SNOE and TIME GCM data.
+!
+! original code by Stacy Walters
+! adapted by B. A. Boville
+!---------------------------------------------------------------------------------
+
+ use shr_kind_mod, only: r8 => shr_kind_r8
+ use shr_const_mod,only: grav => shr_const_g, & ! gravitational constant (m/s^2)
+ kboltz => shr_const_boltz, & ! Boltzmann constant
+ pi => shr_const_pi, & ! pi
+ rEarth => shr_const_rearth ! Earth radius
+ use ppgrid, only: pcols, pver, pverp
+ use constituents, only: pcnst
+ use cam_logfile, only: iulog
+ use spmd_utils, only: masterproc
+ use ref_pres, only: ptop_ref
+
+ implicit none
+ private
+ save
+!
+! Public interfaces
+!
+ public :: ubc_defaultopts ! set default values of namelist variables
+ public :: ubc_setopts ! get namelist input
+ public :: ubc_init ! global initialization
+ public :: ubc_timestep_init ! time step initialization
+ public :: ubc_get_vals ! get ubc values for this step
+
+! Namelist variables
+ character(len=256) :: snoe_ubc_file = ' '
+ real(r8) :: t_pert_ubc = 0._r8
+ real(r8) :: no_xfac_ubc = 1._r8
+
+ character(len=256) :: tgcm_ubc_file = ' '
+ integer :: tgcm_ubc_cycle_yr = 0
+ integer :: tgcm_ubc_fixed_ymd = 0
+ integer :: tgcm_ubc_fixed_tod = 0
+ integer :: f_ndx, hf_ndx
+ character(len=32) :: tgcm_ubc_data_type = 'CYCLICAL'
+
+ logical :: apply_upper_bc = .true.
+
+!================================================================================================
+contains
+!================================================================================================
+
+subroutine ubc_defaultopts(tgcm_ubc_file_out, tgcm_ubc_data_type_out, tgcm_ubc_cycle_yr_out, tgcm_ubc_fixed_ymd_out, &
+ tgcm_ubc_fixed_tod_out, snoe_ubc_file_out, t_pert_ubc_out, no_xfac_ubc_out)
+!-----------------------------------------------------------------------
+! Purpose: Return default runtime options
+!-----------------------------------------------------------------------
+
+ real(r8), intent(out), optional :: t_pert_ubc_out
+ real(r8), intent(out), optional :: no_xfac_ubc_out
+ character(len=*), intent(out), optional :: tgcm_ubc_file_out
+ character(len=*), intent(out), optional :: snoe_ubc_file_out
+ integer , intent(out), optional :: tgcm_ubc_cycle_yr_out
+ integer , intent(out), optional :: tgcm_ubc_fixed_ymd_out
+ integer , intent(out), optional :: tgcm_ubc_fixed_tod_out
+ character(len=*), intent(out), optional :: tgcm_ubc_data_type_out
+
+!-----------------------------------------------------------------------
+
+ if ( present(tgcm_ubc_file_out) ) then
+ tgcm_ubc_file_out = tgcm_ubc_file
+ endif
+ if ( present(tgcm_ubc_data_type_out) ) then
+ tgcm_ubc_data_type_out = tgcm_ubc_data_type
+ endif
+ if ( present(tgcm_ubc_cycle_yr_out) ) then
+ tgcm_ubc_cycle_yr_out = tgcm_ubc_cycle_yr
+ endif
+ if ( present(tgcm_ubc_fixed_ymd_out) ) then
+ tgcm_ubc_fixed_ymd_out = tgcm_ubc_fixed_ymd
+ endif
+ if ( present(tgcm_ubc_fixed_tod_out) ) then
+ tgcm_ubc_fixed_tod_out = tgcm_ubc_fixed_tod
+ endif
+ if ( present(snoe_ubc_file_out) ) then
+ snoe_ubc_file_out = snoe_ubc_file
+ endif
+ if ( present(t_pert_ubc_out) ) then
+ t_pert_ubc_out = t_pert_ubc
+ endif
+ if ( present(no_xfac_ubc_out) ) then
+ no_xfac_ubc_out = no_xfac_ubc
+ endif
+
+end subroutine ubc_defaultopts
+
+!================================================================================================
+
+subroutine ubc_setopts(tgcm_ubc_file_in, tgcm_ubc_data_type_in, tgcm_ubc_cycle_yr_in, tgcm_ubc_fixed_ymd_in, &
+ tgcm_ubc_fixed_tod_in, snoe_ubc_file_in, t_pert_ubc_in, no_xfac_ubc_in)
+!-----------------------------------------------------------------------
+! Purpose: Set runtime options
+!-----------------------------------------------------------------------
+
+ use cam_abortutils, only : endrun
+
+ real(r8), intent(in), optional :: t_pert_ubc_in
+ real(r8), intent(in), optional :: no_xfac_ubc_in
+ character(len=*), intent(in), optional :: tgcm_ubc_file_in
+ character(len=*), intent(in), optional :: snoe_ubc_file_in
+ integer , intent(in), optional :: tgcm_ubc_cycle_yr_in
+ integer , intent(in), optional :: tgcm_ubc_fixed_ymd_in
+ integer , intent(in), optional :: tgcm_ubc_fixed_tod_in
+ character(len=*), intent(in), optional :: tgcm_ubc_data_type_in
+
+!-----------------------------------------------------------------------
+
+ if ( present(tgcm_ubc_file_in) ) then
+ tgcm_ubc_file = tgcm_ubc_file_in
+ endif
+ if ( present(tgcm_ubc_data_type_in) ) then
+ tgcm_ubc_data_type = tgcm_ubc_data_type_in
+ endif
+ if ( present(tgcm_ubc_cycle_yr_in) ) then
+ tgcm_ubc_cycle_yr = tgcm_ubc_cycle_yr_in
+ endif
+ if ( present(tgcm_ubc_fixed_ymd_in) ) then
+ tgcm_ubc_fixed_ymd = tgcm_ubc_fixed_ymd_in
+ endif
+ if ( present(tgcm_ubc_fixed_tod_in) ) then
+ tgcm_ubc_fixed_tod = tgcm_ubc_fixed_tod_in
+ endif
+ if ( present(snoe_ubc_file_in) ) then
+ snoe_ubc_file = snoe_ubc_file_in
+ endif
+ if ( present(t_pert_ubc_in) ) then
+ t_pert_ubc = t_pert_ubc_in
+ endif
+ if ( present(no_xfac_ubc_in) ) then
+ no_xfac_ubc = no_xfac_ubc_in
+ if( no_xfac_ubc < 0._r8 ) then
+ write(iulog,*) 'ubc_setopts: no_xfac_ubc = ',no_xfac_ubc,' must be >= 0'
+ call endrun
+ end if
+ endif
+
+end subroutine ubc_setopts
+
+!===============================================================================
+
+ subroutine ubc_init()
+!-----------------------------------------------------------------------
+! Initialization of time independent fields for the upper boundary condition
+! Calls initialization routine for MSIS, TGCM and SNOE
+!-----------------------------------------------------------------------
+
+ ! Assume we are running in a simulation with ptop >= 1 Pa
+ apply_upper_bc = .false.
+
+ if (.not.apply_upper_bc) return
+
+ end subroutine ubc_init
+
+!===============================================================================
+
+ subroutine ubc_timestep_init(pbuf2d, state)
+!-----------------------------------------------------------------------
+! timestep dependent setting
+!-----------------------------------------------------------------------
+
+ use solar_parms_data, only: kp=>solar_parms_kp, ap=>solar_parms_ap, f107=>solar_parms_f107
+ use solar_parms_data, only: f107a=>solar_parms_f107a, f107p=>solar_parms_f107p
+ use physics_types, only: physics_state
+ use ppgrid, only: begchunk, endchunk
+ use physics_buffer, only: physics_buffer_desc
+
+ type(physics_state), intent(in) :: state(begchunk:endchunk)
+ type(physics_buffer_desc), pointer :: pbuf2d(:,:)
+
+ if (.not.apply_upper_bc) return
+
+ end subroutine ubc_timestep_init
+
+!===============================================================================
+
+ subroutine ubc_get_vals (lchnk, ncol, pint, zi, t, q, omega, phis, &
+ msis_temp, ubc_mmr, ubc_flux)
+
+!-----------------------------------------------------------------------
+! interface routine for vertical diffusion and pbl scheme
+!-----------------------------------------------------------------------
+ use cam_abortutils, only: endrun
+ use physconst, only: avogad, rairv, mbarv, rga ! Avogadro, gas constant, mean mass, universal gas constant
+ use phys_control, only: waccmx_is
+ use constituents, only: cnst_get_ind, cnst_mw, cnst_fixed_ubc ! Needed for ubc_flux
+
+!------------------------------Arguments--------------------------------
+ integer, intent(in) :: lchnk ! chunk identifier
+ integer, intent(in) :: ncol ! number of atmospheric columns
+ real(r8), intent(in) :: pint(pcols,pverp) ! interface pressures
+ real(r8), intent(in) :: zi(pcols,pverp) ! interface geoptl height above sfc
+ real(r8), intent(in) :: t(pcols,pver) ! midpoint temperature
+ real(r8), intent(in),target :: q(pcols,pver,pcnst) ! contituent mixing ratios (kg/kg)
+ real(r8), intent(in) :: omega(pcols,pver) ! Vertical pressure velocity (Pa/s)
+ real(r8), intent(in) :: phis(pcols) ! Surface geopotential (m2/s2)
+
+ real(r8), intent(out) :: msis_temp(pcols) ! upper bndy temperature (K)
+ real(r8), intent(out) :: ubc_mmr(pcols,pcnst) ! upper bndy mixing ratios (kg/kg)
+ real(r8), intent(out) :: ubc_flux(pcols,pcnst) ! upper bndy flux (kg/s/m^2)
+
+!---------------------------Local storage-------------------------------
+ integer :: m ! constituent index
+ integer :: ierr ! error flag for allocates
+ integer :: indx_H ! cnst index for H
+ integer :: indx_HE ! cnst index for He
+ integer :: iCol ! column loop counter
+
+ real(r8), parameter :: m2km = 1.e-3_r8 ! meter to km
+ real(r8) :: rho_top(pcols) ! density at top interface
+ real(r8) :: z_top(pcols) ! height of top interface (km)
+
+ real(r8), parameter :: hfluxlimitfac = 0.72_r8 ! Hydrogen upper boundary flux limiting factor
+
+ real(r8) :: nmbartop ! Top level density (rho)
+ real(r8) :: zkt ! Factor for H Jean's escape flux calculation
+ real(r8) :: nDensHETop ! Helium number density (kg/m3)
+ real(r8) :: pScaleHeight ! Scale height (m)
+ real(r8) :: wN2 ! Neutral vertical velocity second level (m/s)
+ real(r8) :: wN3 ! Neutral vertical velocity at third level (m/s)
+ real(r8) :: wNTop ! Neutral vertical velocity at top level (m/s)
+
+ real(r8), pointer :: qh_top(:) ! Top level hydrogen mixing ratio (kg/kg)
+!-----------------------------------------------------------------------
+
+ ubc_mmr(:,:) = 0._r8
+ ubc_flux(:,:) = 0._r8
+ msis_temp(:) = 0._r8
+
+ if (.not. apply_upper_bc) return
+
+ end subroutine ubc_get_vals
+
+end module upper_bc
diff --git a/src/chemistry/modal_aero/aero_model.F90 b/src/chemistry/modal_aero/aero_model.F90
index 23fa250357..489f06a69b 100644
--- a/src/chemistry/modal_aero/aero_model.F90
+++ b/src/chemistry/modal_aero/aero_model.F90
@@ -179,13 +179,13 @@ subroutine aero_model_init( pbuf2d )
use mo_chem_utls, only: get_inv_ndx
use cam_history, only: addfld, add_default, horiz_only
- use mo_chem_utls, only: get_rxt_ndx, get_spc_ndx
+ use mo_chem_utls, only: get_spc_ndx
use modal_aero_data, only: cnst_name_cw
use modal_aero_data, only: modal_aero_data_init
use rad_constituents,only: rad_cnst_get_info
use dust_model, only: dust_init, dust_names, dust_active, dust_nbin, dust_nnum
use seasalt_model, only: seasalt_init, seasalt_names, seasalt_active,seasalt_nbin
- use drydep_mod, only: inidrydep
+ use aer_drydep_mod, only: inidrydep
use wetdep, only: wetdep_init
use modal_aero_calcsize, only: modal_aero_calcsize_init
@@ -388,7 +388,7 @@ subroutine aero_model_init( pbuf2d )
call pbuf_set_field(pbuf2d, rate1_cw2pr_st_idx, 0.0_r8)
do m = 1,ndrydep
-
+
! units
if (drydep_list(m)(1:3) == 'num') then
unit_basename = ' 1'
@@ -418,7 +418,7 @@ subroutine aero_model_init( pbuf2d )
enddo
do m = 1,nwetdep
-
+
! units
if (wetdep_list(m)(1:3) == 'num') then
unit_basename = ' 1'
@@ -666,7 +666,7 @@ end subroutine aero_model_init
subroutine aero_model_drydep ( state, pbuf, obklen, ustar, cam_in, dt, cam_out, ptend )
use dust_sediment_mod, only: dust_sediment_tend
- use drydep_mod, only: d3ddflux, calcram
+ use aer_drydep_mod, only: d3ddflux, calcram
use modal_aero_data, only: qqcw_get_field
use modal_aero_data, only: cnst_name_cw
use modal_aero_data, only: alnsg_amode
@@ -2066,14 +2066,16 @@ subroutine surf_area_dens( ncol, mmr, pmid, temp, diam, beglev, endlev, sad, ref
chm_mass = chm_mass + mmr(i,k,index_chm_mass(l,m))
end do
if ( tot_mass > 0._r8 ) then
- sad_mode(i,k,l) = (chm_mass/tot_mass)**(2._r8/3._r8) * &
- mmr(i,k,num_idx(l))*rho_air*pi*diam(i,k,l)**2._r8*&
- exp(2._r8*alnsg_amode(l)**2._r8) ! m^2/m^3
+ ! surface area density
+ sad_mode(i,k,l) = chm_mass/tot_mass &
+ * mmr(i,k,num_idx(l))*rho_air*pi*diam(i,k,l)**2._r8 &
+ * exp(2._r8*alnsg_amode(l)**2._r8) ! m^2/m^3
sad_mode(i,k,l) = 1.e-2_r8 * sad_mode(i,k,l) ! cm^2/cm^3
- vol_mode(i,k,l) = chm_mass/tot_mass * &
- mmr(i,k,num_idx(l))*rho_air*pi/6._r8*diam(i,k,l)**3._r8*&
- exp(3._r8*alnsg_amode(l)**2._r8) ! m^3/m^3 = cm^3/cm^3
+ ! volume calculation, for use in effective radius calculation
+ vol_mode(i,k,l) = chm_mass/tot_mass &
+ * mmr(i,k,num_idx(l))*rho_air*pi/6._r8*diam(i,k,l)**3._r8 &
+ * exp(4.5_r8*alnsg_amode(l)**2._r8) ! m^3/m^3 = cm^3/cm^3
else
sad_mode(i,k,l) = 0._r8
vol_mode(i,k,l) = 0._r8
diff --git a/src/chemistry/modal_aero/modal_aero_data.F90 b/src/chemistry/modal_aero/modal_aero_data.F90
index e45d254dcc..1f23b28f18 100644
--- a/src/chemistry/modal_aero/modal_aero_data.F90
+++ b/src/chemistry/modal_aero/modal_aero_data.F90
@@ -110,7 +110,7 @@ module modal_aero_data
logical, public, protected :: soa_multi_species = .false.
- character(len=16), allocatable :: xname_massptr(:,:) ! names of species in each mode
+ character(len=16), public, protected, allocatable :: xname_massptr(:,:) ! names of species in each mode
character(len=16), allocatable :: xname_massptrcw(:,:) ! names of cloud-borne species in each mode
complex(r8), allocatable :: &
@@ -451,7 +451,7 @@ subroutine modal_aero_data_init(pbuf2d)
lptr2_soa_g_amode(:) = -1
soa_ndx = 0
do i = 1, pcnst
- if (cnst_name(i)(:4) == 'SOAG') then
+ if (cnst_name(i)(:4) == 'SOAG' .and. cnst_name(i)(:5) /= 'SOAGX') then
soa_ndx = soa_ndx+1
lptr2_soa_g_amode(soa_ndx) = i
endif
diff --git a/src/chemistry/modal_aero/modal_aero_gasaerexch.F90 b/src/chemistry/modal_aero/modal_aero_gasaerexch.F90
index aa7155a78a..b940757b1d 100644
--- a/src/chemistry/modal_aero/modal_aero_gasaerexch.F90
+++ b/src/chemistry/modal_aero/modal_aero_gasaerexch.F90
@@ -106,6 +106,7 @@ subroutine modal_aero_gasaerexch_sub( &
use physconst, only: gravit, mwdry, rair
use cam_abortutils, only: endrun
use spmd_utils, only: iam, masterproc
+use mo_chem_utls, only: utls_chem_is
implicit none
@@ -260,7 +261,11 @@ subroutine modal_aero_gasaerexch_sub( &
! set gas species indices
call cnst_get_ind( 'H2SO4', l_so4g, .false. )
call cnst_get_ind( 'NH3', l_nh4g, .false. )
- call cnst_get_ind( 'MSA', l_msag, .false. )
+ if ( .not. utls_chem_is('GEOS-Chem') ) then
+ call cnst_get_ind( 'MSA', l_msag, .false. )
+ else
+ l_msag = 0
+ endif
l_so4g = l_so4g - loffset
l_nh4g = l_nh4g - loffset
l_msag = l_msag - loffset
@@ -590,7 +595,6 @@ subroutine modal_aero_gasaerexch_sub( &
end do
mw_poa_host = 12.0_r8
mw_soa_host = 250.0_r8
-
call modal_aero_soaexch( deltat, t(i,k), pmid(i,k), &
niter, niter_max, ntot_amode, ntot_soamode, npoa, nsoa, &
mw_poa_host, mw_soa_host, &
diff --git a/src/chemistry/modal_aero/sox_cldaero_mod.F90 b/src/chemistry/modal_aero/sox_cldaero_mod.F90
index bacf94246c..589c881279 100644
--- a/src/chemistry/modal_aero/sox_cldaero_mod.F90
+++ b/src/chemistry/modal_aero/sox_cldaero_mod.F90
@@ -7,6 +7,7 @@ module sox_cldaero_mod
use cam_abortutils, only : endrun
use ppgrid, only : pcols, pver
use mo_chem_utls, only : get_spc_ndx
+ use mo_chem_utls, only: utls_chem_is
use cldaero_mod, only : cldaero_conc_t, cldaero_allocate, cldaero_deallocate
use modal_aero_data, only : ntot_amode, modeptr_accum, lptr_so4_cw_amode, lptr_msa_cw_amode
use modal_aero_data, only : numptrcw_amode, lptr_nh4_cw_amode
@@ -229,6 +230,12 @@ subroutine sox_cldaero_update( &
dqdt_aqhprxn(:,:) = 0.0_r8
dqdt_aqo3rxn(:,:) = 0.0_r8
+ ! Avoid double counting in-cloud sulfur oxidation when running with
+ ! GEOS-Chem (CESM2-GC). If running with CESM2-GC, sulfur oxidation
+ ! is performed internally to GEOS-Chem. Here, we just return to the
+ ! parent routine and thus we do not apply tendencies calculated by MAM.
+ if ( utls_chem_is('GEOS-Chem') ) return
+
lev_loop: do k = 1,pver
col_loop: do i = 1,ncol
cloud: if (cldfrc(i,k) >= 1.0e-5_r8) then
diff --git a/src/chemistry/mozart/chemistry.F90 b/src/chemistry/mozart/chemistry.F90
index dc7db5eadd..5afddc2d64 100644
--- a/src/chemistry/mozart/chemistry.F90
+++ b/src/chemistry/mozart/chemistry.F90
@@ -7,7 +7,7 @@ module chemistry
use shr_kind_mod, only : r8 => shr_kind_r8, shr_kind_cl
use ppgrid, only : pcols, pver, begchunk, endchunk
use physconst, only : gravit
- use constituents, only : pcnst, cnst_add, cnst_name, cnst_fixed_ubc, cnst_type
+ use constituents, only : pcnst, cnst_add, cnst_name, cnst_fixed_ubc
use chem_mods, only : gas_pcnst
use cam_history, only : fieldname_len
use physics_types, only : physics_state, physics_ptend, physics_ptend_init
@@ -852,12 +852,6 @@ subroutine chem_init(phys_state, pbuf2d)
endif
endif
- ! this is moved out of chem_register because we need to know where (what pressure)
- ! the upper boundary is to determine if this is a high top configuration -- after
- ! initialization of ref_pres ...
- if ( do_molec_diff ) then ! molecular diffusion requires 'wet' mixing ratios
- cnst_type(n) = 'wet'
- endif
endif
end do
diff --git a/src/chemistry/mozart/mo_chem_utls.F90 b/src/chemistry/mozart/mo_chem_utls.F90
index 1620422e12..6d47ed3a0a 100644
--- a/src/chemistry/mozart/mo_chem_utls.F90
+++ b/src/chemistry/mozart/mo_chem_utls.F90
@@ -3,6 +3,7 @@ module mo_chem_utls
private
public :: get_spc_ndx, get_het_ndx, get_extfrc_ndx, get_rxt_ndx, get_inv_ndx
+ public :: utls_chem_is
save
@@ -159,4 +160,15 @@ integer function get_rxt_ndx( rxt_tag )
end function get_rxt_ndx
+ logical function utls_chem_is (name) result(chem_is)
+ use string_utils, only : to_lower
+
+ character(len=*), intent(in) :: name
+ chem_is = .false.
+ if ( to_lower(name) == 'mozart' ) then
+ chem_is = .true.
+ endif
+
+ end function utls_chem_is
+
end module mo_chem_utls
diff --git a/src/chemistry/pp_trop_strat_mam4_vbs/chem_mods.F90 b/src/chemistry/pp_trop_strat_mam4_vbs/chem_mods.F90
index 8050030043..b6cbc77dcc 100644
--- a/src/chemistry/pp_trop_strat_mam4_vbs/chem_mods.F90
+++ b/src/chemistry/pp_trop_strat_mam4_vbs/chem_mods.F90
@@ -14,7 +14,7 @@ module chem_mods
relcnt = 0, & ! number of relationship species
grpcnt = 0, & ! number of group members
nzcnt = 2022, & ! number of non-zero matrix entries
- extcnt = 17, & ! number of species with external forcing
+ extcnt = 25, & ! number of species with external forcing
clscnt1 = 30, & ! number of species in explicit class
clscnt2 = 0, & ! number of species in hov class
clscnt3 = 0, & ! number of species in ebi class
diff --git a/src/chemistry/pp_trop_strat_mam4_vbs/mo_sim_dat.F90 b/src/chemistry/pp_trop_strat_mam4_vbs/mo_sim_dat.F90
index b4acb1295a..5eec3adef2 100644
--- a/src/chemistry/pp_trop_strat_mam4_vbs/mo_sim_dat.F90
+++ b/src/chemistry/pp_trop_strat_mam4_vbs/mo_sim_dat.F90
@@ -242,15 +242,17 @@ subroutine set_sim_dat
1621,1672,1699,1734,1776,1837,1862,1893,1917,1996, &
2022 /)
- extfrc_lst(: 17) = (/ 'so4_a2 ','NO ','NO2 ','SO2 ','SVOC ', &
+ extfrc_lst(: 25) = (/ 'so4_a2 ','NO ','NO2 ','SO2 ','SVOC ', &
'pom_a1 ','pom_a4 ','so4_a1 ','CO ','bc_a1 ', &
- 'bc_a4 ','num_a1 ','num_a2 ','num_a4 ','OH ', &
- 'N ','AOA_NH ' /)
+ 'bc_a4 ','num_a1 ','num_a2 ','num_a4 ','CH3COCH3 ', &
+ 'CH3CHO ','BIGALK ','C2H6 ','C3H8 ','CH2O ', &
+ 'C3H6 ','MACR ','OH ','N ','AOA_NH ' /)
- frc_from_dataset(: 17) = (/ .true., .true., .true., .true., .true., &
+ frc_from_dataset(: 25) = (/ .true., .true., .true., .true., .true., &
.true., .true., .true., .true., .true., &
- .true., .true., .true., .true., .false., &
- .false., .false. /)
+ .true., .true., .true., .true., .true., &
+ .true., .true., .true., .true., .true., &
+ .true., .true., .false., .false., .false. /)
inv_lst(: 3) = (/ 'M ', 'N2 ', 'O2 ' /)
diff --git a/src/chemistry/pp_trop_strat_mam4_vbsext/chem_mods.F90 b/src/chemistry/pp_trop_strat_mam4_vbsext/chem_mods.F90
index 9665256a26..02c648cbcb 100644
--- a/src/chemistry/pp_trop_strat_mam4_vbsext/chem_mods.F90
+++ b/src/chemistry/pp_trop_strat_mam4_vbsext/chem_mods.F90
@@ -14,7 +14,7 @@ module chem_mods
relcnt = 0, & ! number of relationship species
grpcnt = 0, & ! number of group members
nzcnt = 2078, & ! number of non-zero matrix entries
- extcnt = 17, & ! number of species with external forcing
+ extcnt = 25, & ! number of species with external forcing
clscnt1 = 26, & ! number of species in explicit class
clscnt2 = 0, & ! number of species in hov class
clscnt3 = 0, & ! number of species in ebi class
diff --git a/src/chemistry/pp_trop_strat_mam4_vbsext/mo_sim_dat.F90 b/src/chemistry/pp_trop_strat_mam4_vbsext/mo_sim_dat.F90
index ec5d8e28ed..6559e5596d 100644
--- a/src/chemistry/pp_trop_strat_mam4_vbsext/mo_sim_dat.F90
+++ b/src/chemistry/pp_trop_strat_mam4_vbsext/mo_sim_dat.F90
@@ -269,15 +269,17 @@ subroutine set_sim_dat
1395,1418,1513,1538,1698,1722,1764,1822,1873,1934, &
1959,1986,2017,2052,2078 /)
- extfrc_lst(: 17) = (/ 'pombb1_a4 ','bc_a4 ','CO ','NO ','NO2 ', &
+ extfrc_lst(: 25) = (/ 'pombb1_a4 ','bc_a4 ','CO ','NO ','NO2 ', &
'num_a1 ','num_a2 ','num_a4 ','SO2 ','so4_a1 ', &
'so4_a2 ','SVOCbb ','SVOCff ','pomff1_a4 ','bc_a1 ', &
- 'N ','OH ' /)
+ 'CH3COCH3 ','CH3CHO ','BIGALK ','C2H6 ','C3H8 ', &
+ 'CH2O ','C3H6 ','MACR ','N ','OH ' /)
- frc_from_dataset(: 17) = (/ .true., .true., .true., .true., .true., &
+ frc_from_dataset(: 25) = (/ .true., .true., .true., .true., .true., &
.true., .true., .true., .true., .true., &
.true., .true., .true., .true., .true., &
- .false., .false. /)
+ .true., .true., .true., .true., .true., &
+ .true., .true., .true., .false., .false. /)
inv_lst(: 3) = (/ 'M ', 'O2 ', 'N2 ' /)
diff --git a/src/chemistry/utils/apex.F90 b/src/chemistry/utils/apex.F90
index 6e24ec9dd4..d4b60af9b1 100644
--- a/src/chemistry/utils/apex.F90
+++ b/src/chemistry/utils/apex.F90
@@ -36,6 +36,7 @@ module apex
use shr_kind_mod, only : r8 => shr_kind_r8
use cam_logfile, only : iulog
use cam_abortutils,only : endrun
+ use spmd_utils, only : masterproc
implicit none
@@ -121,6 +122,7 @@ module apex
integer, protected :: apex_end_yr
logical :: igrf_set = .false.
+ logical :: first_warning = .false.
contains
!-----------------------------------------------------------------------
@@ -203,9 +205,11 @@ subroutine ggrid(nvert,glatmin,glatmax,glonmin,glonmax,altmin,altmax, &
if (gplon(nlon-1) >= glonmax) nlon = nlon-1
gpalt(1) = max(gpalt(1),0._r8)
- write(iulog,"('ggrid: nlat=',i4,' gplat=',/,(6f9.2))") nlat,gplat
- write(iulog,"('ggrid: nlon=',i4,' gplon=',/,(6f9.2))") nlon,gplon
- write(iulog,"('ggrid: nalt=',i4,' gpalt=',/,(6f9.2))") nalt,gpalt
+ if (masterproc) then
+ write(iulog,"('ggrid: nlat=',i4,' gplat=',/,(6f9.2))") nlat,gplat
+ write(iulog,"('ggrid: nlon=',i4,' gplon=',/,(6f9.2))") nlon,gplon
+ write(iulog,"('ggrid: nalt=',i4,' gpalt=',/,(6f9.2))") nalt,gpalt
+ endif
end subroutine ggrid
@@ -1947,10 +1951,13 @@ subroutine cofrm(date)
call endrun( 'cofrm' )
endif
if (date > apex_end_yr-5) then
+ if (masterproc .and. .not. first_warning) then
write(iulog,"('>>> WARNING cofrm:')")
write(iulog,"(/,' This version of IGRF is intended for use up to ')")
write(iulog,"(' 2020. Values for ',f9.3,' will be computed but')") date
write(iulog,"(' may be of reduced accuracy.',/)")
+ first_warning=.true.
+ endif
endif
!
! Set gh from g1,g2:
diff --git a/src/control/cam_comp.F90 b/src/control/cam_comp.F90
index 1d8cb92aa9..5066ca2cd4 100644
--- a/src/control/cam_comp.F90
+++ b/src/control/cam_comp.F90
@@ -88,6 +88,10 @@ subroutine cam_init(EClock, &
use history_defaults, only: initialize_iop_history
#endif
+#if (defined HEMCO_CESM)
+ use hemco_interface, only: HCOI_Chunk_Init
+#endif
+
use camsrfexch, only: hub2atm_alloc, atm2hub_alloc
use cam_history, only: intht
use history_scam, only: scm_intht
@@ -181,6 +185,11 @@ subroutine cam_init(EClock, &
! initialize ionosphere
call ionosphere_init()
+#if (defined HEMCO_CESM)
+ ! initialize harmonized emissions component (HEMCO)
+ call hcoi_chunk_init()
+#endif
+
if (initial_run) then
call dyn_init(dyn_in, dyn_out)
@@ -227,6 +236,10 @@ subroutine cam_run1(cam_in, cam_out)
use stepon, only: stepon_run1
use ionosphere_interface,only: ionosphere_run1
+#if (defined HEMCO_CESM)
+ use hemco_interface, only: HCOI_Chunk_Run
+#endif
+
type(cam_in_t) :: cam_in(begchunk:endchunk)
type(cam_out_t) :: cam_out(begchunk:endchunk)
@@ -248,6 +261,13 @@ subroutine cam_run1(cam_in, cam_out)
!----------------------------------------------------------
call ionosphere_run1(pbuf2d)
+#if (defined HEMCO_CESM)
+ !----------------------------------------------------------
+ ! run hemco (first phase?)
+ !----------------------------------------------------------
+ call HCOI_Chunk_Run(cam_in, phys_state, pbuf2d, 1)
+#endif
+
!
!----------------------------------------------------------
! PHYS_RUN Call the Physics package
@@ -279,6 +299,10 @@ subroutine cam_run2( cam_out, cam_in )
use stepon, only: stepon_run2
use ionosphere_interface, only: ionosphere_run2
+#if (defined HEMCO_CESM)
+ use hemco_interface, only: HCOI_Chunk_Run
+#endif
+
type(cam_out_t), intent(inout) :: cam_out(begchunk:endchunk)
type(cam_in_t), intent(inout) :: cam_in(begchunk:endchunk)
@@ -287,6 +311,13 @@ subroutine cam_run2( cam_out, cam_in )
return
endif
+#if (defined HEMCO_CESM)
+ !----------------------------------------------------------
+ ! run hemco (phase 2 before chemistry)
+ !----------------------------------------------------------
+ call HCOI_Chunk_Run(cam_in, phys_state, pbuf2d, 2)
+#endif
+
!
! Second phase of physics (after surface model update)
!
@@ -428,6 +459,10 @@ subroutine cam_final( cam_out, cam_in )
use camsrfexch, only: atm2hub_deallocate, hub2atm_deallocate
use ionosphere_interface, only: ionosphere_final
+#if (defined HEMCO_CESM)
+ use hemco_interface, only: HCOI_Chunk_Final
+#endif
+
!
! Arguments
!
@@ -442,6 +477,13 @@ subroutine cam_final( cam_out, cam_in )
call stepon_final(dyn_in, dyn_out)
call ionosphere_final()
+#if (defined HEMCO_CESM)
+ !----------------------------------------------------------
+ ! cleanup hemco
+ !----------------------------------------------------------
+ call HCOI_Chunk_Final()
+#endif
+
if (initial_run) then
call cam_initfiles_close()
end if
diff --git a/src/control/cam_history.F90 b/src/control/cam_history.F90
index 0f08e35904..56fd7e0f25 100644
--- a/src/control/cam_history.F90
+++ b/src/control/cam_history.F90
@@ -1557,6 +1557,7 @@ subroutine read_restart_history (File)
use sat_hist, only: sat_hist_define, sat_hist_init
use cam_grid_support, only: cam_grid_read_dist_array, cam_grid_num_grids
use cam_history_support, only: get_hist_coord_index, add_hist_coord
+ use constituents, only: cnst_get_ind, cnst_get_type_byind
use shr_sys_mod, only: shr_sys_getenv
use spmd_utils, only: mpicom, mpi_character, masterprocid
@@ -1620,6 +1621,8 @@ subroutine read_restart_history (File)
integer :: fdims(3) ! Field dims
integer :: nfdims ! 2 or 3 (for 2D,3D)
integer :: fdecomp ! Grid ID for field
+ integer :: idx
+ character(len=3) :: mixing_ratio
!
! Get users logname and machine hostname
@@ -1838,6 +1841,15 @@ subroutine read_restart_history (File)
tape(t)%hlist(f)%field%numlev = tmpnumlev(f,t)
tape(t)%hlist(f)%hwrt_prec = tmpprec(f,t)
+ ! If the field is an advected constituent set the mixing_ratio attribute
+ fname_tmp = strip_suffix(tape(t)%hlist(f)%field%name)
+ call cnst_get_ind(fname_tmp, idx, abort=.false.)
+ mixing_ratio = ''
+ if (idx > 0) then
+ mixing_ratio = cnst_get_type_byind(idx)
+ end if
+ tape(t)%hlist(f)%field%mixing_ratio = mixing_ratio
+
mdimcnt = count(allmdims(:,f,t) > 0)
if(mdimcnt > 0) then
allocate(tape(t)%hlist(f)%field%mdims(mdimcnt))
@@ -2184,7 +2196,8 @@ subroutine fldlst ()
use cam_grid_support, only: cam_grid_num_grids
use spmd_utils, only: mpicom
- !
+ use dycore, only: dycore_is
+
!-----------------------------------------------------------------------
!
! Purpose: Define the contents of each history file based on namelist input for initial or branch
@@ -2198,6 +2211,7 @@ subroutine fldlst ()
!
integer t, f ! tape, field indices
integer ff ! index into include, exclude and fprec list
+ integer :: i
character(len=fieldname_len) :: name ! field name portion of fincl (i.e. no avgflag separator)
character(len=max_fieldname_len) :: mastername ! name from masterlist field
character(len=max_chars) :: errormsg ! error output field
@@ -2215,17 +2229,54 @@ subroutine fldlst ()
! on that grid.
integer, allocatable :: gridsontape(:,:)
- !
+ ! The following list of field names are only valid for the FV dycore. They appear
+ ! in fincl settings of WACCM use case files which are not restricted to the FV dycore.
+ ! To avoid duplicating long fincl lists in use case files to provide both FV and non-FV
+ ! versions this short list of fields is checked for and removed from fincl lists when
+ ! the dycore is not FV.
+ integer, parameter :: n_fv_only = 10
+ character(len=6) :: fv_only_flds(n_fv_only) = &
+ [ 'VTHzm ', 'WTHzm ', 'UVzm ', 'UWzm ', 'Uzm ', 'Vzm ', 'Wzm ', &
+ 'THzm ', 'TH ', 'MSKtem' ]
+
+ integer :: n_vec_comp, add_fincl_idx
+ integer, parameter :: nvecmax = 50 ! max number of vector components in a fincl list
+ character(len=2) :: avg_suffix
+ character(len=max_fieldname_len) :: vec_comp_names(nvecmax)
+ character(len=1) :: vec_comp_avgflag(nvecmax)
+ !--------------------------------------------------------------------------
+
! First ensure contents of fincl, fexcl, and fwrtpr are all valid names
!
errors_found = 0
do t=1,ptapes
+
f = 1
- do while (f < pflds .and. fincl(f,t) /= ' ')
+ n_vec_comp = 0
+ vec_comp_names = ' '
+ vec_comp_avgflag = ' '
+fincls: do while (f < pflds .and. fincl(f,t) /= ' ')
name = getname (fincl(f,t))
+
+ if (.not. dycore_is('FV')) then
+ ! filter out fields only provided by FV dycore
+ do i = 1, n_fv_only
+ if (name == fv_only_flds(i)) then
+ write(errormsg,'(3a,2(i0,a))')'FLDLST: ', trim(name), &
+ ' in fincl(', f,', ',t, ') only available with FV dycore'
+ if (masterproc) then
+ write(iulog,*) trim(errormsg)
+ call shr_sys_flush(iulog)
+ end if
+ f = f + 1
+ cycle fincls
+ end if
+ end do
+ end if
+
mastername=''
listentry => get_entry_by_name(masterlinkedlist, name)
- if(associated(listentry)) mastername = listentry%field%name
+ if (associated(listentry)) mastername = listentry%field%name
if (name /= mastername) then
write(errormsg,'(3a,2(i0,a))')'FLDLST: ', trim(name), ' in fincl(', f,', ',t, ') not found'
if (masterproc) then
@@ -2233,9 +2284,53 @@ subroutine fldlst ()
call shr_sys_flush(iulog)
end if
errors_found = errors_found + 1
+ else
+ if (len_trim(mastername)>0 .and. interpolate_output(t)) then
+ if (n_vec_comp >= nvecmax) call endrun('FLDLST: need to increase nvecmax')
+ ! If this is a vector component then save the name of the complement
+ avgflag = getflag(fincl(f,t))
+ if (len_trim(listentry%meridional_field) > 0) then
+ n_vec_comp = n_vec_comp + 1
+ vec_comp_names(n_vec_comp) = listentry%meridional_field
+ vec_comp_avgflag(n_vec_comp) = avgflag
+ else if (len_trim(listentry%zonal_field) > 0) then
+ n_vec_comp = n_vec_comp + 1
+ vec_comp_names(n_vec_comp) = listentry%zonal_field
+ vec_comp_avgflag(n_vec_comp) = avgflag
+ end if
+ end if
end if
f = f + 1
- end do
+ end do fincls
+
+ ! Interpolation of vector components requires that both be present. If the fincl
+ ! specifier contains any vector components, then the complement was saved in the
+ ! array vec_comp_names. Next insure (for interpolated output only) that all complements
+ ! are also present in the fincl array.
+
+ ! The first empty slot in the current fincl array is index f from loop above.
+ add_fincl_idx = f
+ if (f > 1 .and. interpolate_output(t)) then
+ do i = 1, n_vec_comp
+ call list_index(fincl(:,t), vec_comp_names(i), ff)
+ if (ff == 0) then
+
+ ! Add vector component to fincl. Don't need to check whether its in the master
+ ! list since this was done at the time of registering the vector components.
+ avg_suffix = ' '
+ if (len_trim(vec_comp_avgflag(i)) > 0) avg_suffix = ':' // vec_comp_avgflag(i)
+ fincl(add_fincl_idx,t) = trim(vec_comp_names(i)) // avg_suffix
+ add_fincl_idx = add_fincl_idx + 1
+
+ write(errormsg,'(3a,1(i0,a))')'FLDLST: ', trim(vec_comp_names(i)), &
+ ' added to fincl', t, '. Both vector components are required for interpolated output.'
+ if (masterproc) then
+ write(iulog,*) trim(errormsg)
+ call shr_sys_flush(iulog)
+ end if
+ end if
+ end do
+ end if
f = 1
do while (f < pflds .and. fexcl(f,t) /= ' ')
@@ -4239,13 +4334,20 @@ subroutine h_define (t, restart)
'h_define: cannot define units for '//trim(fname_tmp))
end if
+ str = tape(t)%hlist(f)%field%mixing_ratio
+ if (len_trim(str) > 0) then
+ ierr=pio_put_att (tape(t)%File, varid, 'mixing_ratio', trim(str))
+ call cam_pio_handle_error(ierr, &
+ 'h_define: cannot define mixing_ratio for '//trim(fname_tmp))
+ end if
+
str = tape(t)%hlist(f)%field%long_name
ierr=pio_put_att (tape(t)%File, varid, 'long_name', trim(str))
call cam_pio_handle_error(ierr, &
'h_define: cannot define long_name for '//trim(fname_tmp))
- !
+
! Assign field attributes defining valid levels and averaging info
- !
+
cell_methods = ''
if (len_trim(tape(t)%hlist(f)%field%cell_methods) > 0) then
if (len_trim(cell_methods) > 0) then
@@ -5051,6 +5153,7 @@ subroutine addfld_nd(fname, dimnames, avgflag, units, long_name, &
use cam_history_support, only: fillvalue, hist_coord_find_levels
use cam_grid_support, only: cam_grid_id, cam_grid_is_zonal
use cam_grid_support, only: cam_grid_get_coord_names
+ use constituents, only: pcnst, cnst_get_ind, cnst_get_type_byind
!
! Arguments
@@ -5075,9 +5178,11 @@ subroutine addfld_nd(fname, dimnames, avgflag, units, long_name, &
character(len=max_fieldname_len) :: fname_tmp ! local copy of fname
character(len=max_fieldname_len) :: coord_name ! for cell_methods
character(len=128) :: errormsg
+ character(len=3) :: mixing_ratio
type(master_entry), pointer :: listentry
integer :: dimcnt
+ integer :: idx
if (htapes_defined) then
call endrun ('ADDFLD: Attempt to add field '//trim(fname)//' after history files set')
@@ -5110,14 +5215,22 @@ subroutine addfld_nd(fname, dimnames, avgflag, units, long_name, &
call endrun ('ADDFLD: '//fname//' already on list')
end if
- !
+ ! If the field is an advected constituent determine whether its concentration
+ ! is based on dry or wet air.
+ call cnst_get_ind(fname_tmp, idx, abort=.false.)
+ mixing_ratio = ''
+ if (idx > 0) then
+ mixing_ratio = cnst_get_type_byind(idx)
+ end if
+
! Add field to Master Field List arrays fieldn and iflds
!
allocate(listentry)
- listentry%field%name = fname
- listentry%field%long_name = long_name
- listentry%field%numlev = 1 ! Will change if lev or ilev in shape
- listentry%field%units = units
+ listentry%field%name = fname
+ listentry%field%long_name = long_name
+ listentry%field%numlev = 1 ! Will change if lev or ilev in shape
+ listentry%field%units = units
+ listentry%field%mixing_ratio = mixing_ratio
listentry%field%meridional_complement = -1
listentry%field%zonal_complement = -1
listentry%htapeindx(:) = -1
diff --git a/src/control/cam_history_support.F90 b/src/control/cam_history_support.F90
index 948080e19c..49c5e77437 100644
--- a/src/control/cam_history_support.F90
+++ b/src/control/cam_history_support.F90
@@ -121,6 +121,7 @@ module cam_history_support
character(len=max_fieldname_len) :: name ! field name
character(len=max_chars) :: long_name ! long name
character(len=max_chars) :: units ! units
+ character(len=3) :: mixing_ratio ! 'dry' or 'wet'
character(len=max_chars) :: sampling_seq ! sampling sequence - if not every timestep, how often field is sampled
! (i.e., how often "outfld" is called): every other; only during LW/SW
! radiation calcs; etc.
diff --git a/src/control/camsrfexch.F90 b/src/control/camsrfexch.F90
index d48e42b433..fae49a18ab 100644
--- a/src/control/camsrfexch.F90
+++ b/src/control/camsrfexch.F90
@@ -120,6 +120,9 @@ module camsrfexch
real(r8) :: re(pcols) ! atm/ocn saved version of re
real(r8) :: ssq(pcols) ! atm/ocn saved version of ssq
real(r8), pointer, dimension(:,:) :: depvel ! deposition velocities
+ real(r8), pointer, dimension(:,:) :: lwtgcell ! landunit areas
+ real(r8), pointer, dimension(:,:) :: pwtgcell ! patch areas
+ real(r8), pointer, dimension(:,:) :: lai ! leaf area indices
real(r8), pointer, dimension(:,:) :: dstflx ! dust fluxes
real(r8), pointer, dimension(:,:) :: meganflx ! MEGAN fluxes
real(r8), pointer, dimension(:,:) :: fireflx ! wild fire emissions
@@ -146,7 +149,7 @@ module camsrfexch
! !INTERFACE
!
subroutine hub2atm_alloc( cam_in )
- use seq_drydep_mod, only: lnd_drydep, n_drydep
+ use seq_drydep_mod, only: lnd_drydep, n_drydep, NLUse, NPatch
use cam_cpl_indices, only: index_x2a_Sl_ram1, index_x2a_Sl_fv, index_x2a_Sl_soilw, index_x2a_Fall_flxdst1
use cam_cpl_indices, only: index_x2a_Fall_flxvoc
use shr_megan_mod, only: shr_megan_mechcomps_n
@@ -177,6 +180,9 @@ subroutine hub2atm_alloc( cam_in )
nullify(cam_in(c)%fv)
nullify(cam_in(c)%soilw)
nullify(cam_in(c)%depvel)
+ nullify(cam_in(c)%lwtgcell)
+ nullify(cam_in(c)%pwtgcell)
+ nullify(cam_in(c)%lai)
nullify(cam_in(c)%dstflx)
nullify(cam_in(c)%meganflx)
nullify(cam_in(c)%fireflx)
@@ -210,6 +216,12 @@ subroutine hub2atm_alloc( cam_in )
do c = begchunk,endchunk
allocate (cam_in(c)%depvel(pcols,n_drydep), stat=ierror)
if ( ierror /= 0 ) call endrun('HUB2ATM_ALLOC error: allocation error depvel')
+ allocate (cam_in(c)%lwtgcell(pcols,NLUse), stat=ierror)
+ if ( ierror /= 0 ) call endrun('HUB2ATM_ALLOC error: allocation error lwtgcell')
+ allocate (cam_in(c)%pwtgcell(pcols,NPatch), stat=ierror)
+ if ( ierror /= 0 ) call endrun('HUB2ATM_ALLOC error: allocation error pwtgcell')
+ allocate (cam_in(c)%lai(pcols,NPatch), stat=ierror)
+ if ( ierror /= 0 ) call endrun('HUB2ATM_ALLOC error: allocation error lai')
end do
endif
@@ -266,6 +278,11 @@ subroutine hub2atm_alloc( cam_in )
if (lnd_drydep .and. n_drydep>0) then
cam_in(c)%depvel (:,:) = 0._r8
endif
+ if (lnd_drydep) then
+ cam_in(c)%lwtgcell (:,:) = 0._r8
+ cam_in(c)%pwtgcell (:,:) = 0._r8
+ cam_in(c)%lai (:,:) = 0._r8
+ endif
if ( index_x2a_Fall_flxfire>0 .and. shr_fire_emis_mechcomps_n>0 ) then
cam_in(c)%fireflx(:,:) = 0._r8
cam_in(c)%fireztop(:) = 0._r8
@@ -411,6 +428,18 @@ subroutine hub2atm_deallocate(cam_in)
deallocate(cam_in(c)%depvel)
nullify(cam_in(c)%depvel)
end if
+ if(associated(cam_in(c)%lwtgcell)) then
+ deallocate(cam_in(c)%lwtgcell)
+ nullify(cam_in(c)%lwtgcell)
+ end if
+ if(associated(cam_in(c)%pwtgcell)) then
+ deallocate(cam_in(c)%pwtgcell)
+ nullify(cam_in(c)%pwtgcell)
+ end if
+ if(associated(cam_in(c)%lai)) then
+ deallocate(cam_in(c)%lai)
+ nullify(cam_in(c)%lai)
+ end if
enddo
diff --git a/src/control/runtime_opts.F90 b/src/control/runtime_opts.F90
index f390d45744..adf7dc2485 100644
--- a/src/control/runtime_opts.F90
+++ b/src/control/runtime_opts.F90
@@ -95,6 +95,10 @@ subroutine read_namelist(nlfilename, single_column, scmlat, scmlon)
use ionosphere_interface,only: ionosphere_readnl
use qneg_module, only: qneg_readnl
+#if (defined HEMCO_CESM)
+ use hemco_interface, only: hemco_readnl
+#endif
+
!---------------------------Arguments-----------------------------------
character(len=*), intent(in) :: nlfilename
@@ -189,6 +193,9 @@ subroutine read_namelist(nlfilename, single_column, scmlat, scmlon)
call dyn_readnl(nlfilename)
call ionosphere_readnl(nlfilename)
call qneg_readnl(nlfilename)
+#if (defined HEMCO_CESM)
+ call hemco_readnl(nlfilename)
+#endif
end subroutine read_namelist
diff --git a/src/cpl/atm_import_export.F90 b/src/cpl/atm_import_export.F90
index 8ff1839da6..31e8d803e5 100644
--- a/src/cpl/atm_import_export.F90
+++ b/src/cpl/atm_import_export.F90
@@ -13,7 +13,7 @@ subroutine atm_import( x2a, cam_in, restart_init )
use phys_grid , only: get_ncols_p
use ppgrid , only: begchunk, endchunk
use shr_const_mod, only: shr_const_stebol
- use seq_drydep_mod, only: n_drydep
+ use seq_drydep_mod, only: n_drydep, NLUse, NPatch
use shr_fire_emis_mod, only: shr_fire_emis_mechcomps_n
use co2_cycle , only: c_i, co2_readFlux_ocn, co2_readFlux_fuel
use co2_cycle , only: co2_transport, co2_time_interp_ocn, co2_time_interp_fuel
@@ -101,6 +101,24 @@ subroutine atm_import( x2a, cam_in, restart_init )
cam_in(c)%depvel(i,:n_drydep) = &
x2a(index_x2a_Sl_ddvel:index_x2a_Sl_ddvel+n_drydep-1, ig)
endif
+
+ ! for landunit weights
+ if (index_x2a_Sl_lwtgcell /= 0 ) then
+ cam_in(c)%lwtgcell(i,:NLUse) = &
+ x2a(index_x2a_Sl_lwtgcell:index_x2a_Sl_lwtgcell+NLUse-1, ig)
+ end if
+
+ ! for patch weights
+ if (index_x2a_Sl_pwtgcell /= 0 ) then
+ cam_in(c)%pwtgcell(i,:NPatch) = &
+ x2a(index_x2a_Sl_pwtgcell:index_x2a_Sl_pwtgcell+NPatch-1, ig)
+ end if
+
+ ! for leaf area indices
+ if (index_x2a_Sl_lai /= 0 ) then
+ cam_in(c)%lai(i,:NPatch) = &
+ x2a(index_x2a_Sl_lai:index_x2a_Sl_lai+NPatch-1, ig)
+ end if
!
! fields needed to calculate water isotopes to ocean evaporation processes
!
diff --git a/src/cpl/cam_cpl_indices.F90 b/src/cpl/cam_cpl_indices.F90
index ec6d7a1546..acc02abe8f 100644
--- a/src/cpl/cam_cpl_indices.F90
+++ b/src/cpl/cam_cpl_indices.F90
@@ -3,6 +3,8 @@ module cam_cpl_indices
use seq_flds_mod
use mct_mod
use seq_drydep_mod, only: drydep_fields_token, lnd_drydep
+ use seq_drydep_mod, only: luse_fields_token, patch_fields_token
+ use seq_drydep_mod, only: lai_fields_token
use shr_megan_mod, only: shr_megan_fields_token, shr_megan_mechcomps_n
use shr_fire_emis_mod, only: shr_fire_emis_fields_token, shr_fire_emis_ztop_token, shr_fire_emis_mechcomps_n
@@ -86,6 +88,9 @@ module cam_cpl_indices
integer :: index_x2a_So_re ! square of atm/ocn exch. coeff
integer :: index_x2a_So_ssq ! surface saturation specific humidity in ocean
integer :: index_x2a_Sl_ddvel ! dry deposition velocities from land
+ integer :: index_x2a_Sl_lwtgcell ! landunit area weights
+ integer :: index_x2a_Sl_pwtgcell ! patch area weights
+ integer :: index_x2a_Sl_lai ! leaf area indices
integer :: index_x2a_Sx_u10 ! 10m wind
contains
@@ -157,9 +162,15 @@ subroutine cam_cpl_indices_set( )
endif
if ( lnd_drydep )then
- index_x2a_Sl_ddvel = mct_avect_indexra(x2a, trim(drydep_fields_token))
+ index_x2a_Sl_ddvel = mct_avect_indexra(x2a, trim(drydep_fields_token))
+ index_x2a_Sl_lwtgcell = mct_avect_indexra(x2a, trim(luse_fields_token))
+ index_x2a_Sl_pwtgcell = mct_avect_indexra(x2a, trim(patch_fields_token))
+ index_x2a_Sl_lai = mct_avect_indexra(x2a, trim(lai_fields_token))
else
- index_x2a_Sl_ddvel = 0
+ index_x2a_Sl_ddvel = 0
+ index_x2a_Sl_lwtgcell = 0
+ index_x2a_Sl_pwtgcell = 0
+ index_x2a_Sl_lai = 0
end if
index_a2x_Sa_z = mct_avect_indexra(a2x,'Sa_z')
diff --git a/src/dynamics/eul/dyn_comp.F90 b/src/dynamics/eul/dyn_comp.F90
index d50ef6df21..5208bd122d 100644
--- a/src/dynamics/eul/dyn_comp.F90
+++ b/src/dynamics/eul/dyn_comp.F90
@@ -918,6 +918,7 @@ subroutine global_int()
use hycoef, only: hyai, ps0
use eul_control_mod, only: pdela, qmass1, tmassf, fixmas, &
tmass0, zgsint, qmass2, qmassf
+ use inic_analytic, only: analytic_ic_active
!---------------------------Local workspace-----------------------------
@@ -1020,11 +1021,15 @@ subroutine global_int()
zgsint_tmp = zgsint_tmp*.5_r8/gravit
qmassf_tmp = qmass1_tmp + qmass2_tmp
- ! Globally avgd sfc. partial pressure of dry air (i.e. global dry mass):
- tmass0 = 98222._r8/gravit
- if (.not. associated(fh_topo)) tmass0 = (101325._r8-245._r8)/gravit
- if (adiabatic) tmass0 = tmassf_tmp
- if (ideal_phys ) tmass0 = 100000._r8/gravit
+ if (analytic_ic_active()) then
+ tmass0 = tmassf_tmp
+ else
+ ! Globally avgd sfc. partial pressure of dry air (i.e. global dry mass):
+ tmass0 = 98222._r8/gravit
+ if (.not. associated(fh_topo)) tmass0 = (101325._r8-245._r8)/gravit
+ if (adiabatic) tmass0 = tmassf_tmp
+ if (ideal_phys ) tmass0 = 100000._r8/gravit
+ end if
if (masterproc) then
write(iulog,*) sub//': INFO:'
@@ -1034,14 +1039,18 @@ subroutine global_int()
write(iulog,*) ' Globally averaged geopotential height (m) = ', zgsint_tmp
end if
- ! Compute and apply an initial mass fix factor which preserves horizontal
- ! gradients of ln(ps).
- if (.not. moist_physics) then
- fixmas = tmass0/tmassf_tmp
+ if (analytic_ic_active()) then
+ fixmas = 1._r8
else
- fixmas = (tmass0 + qmass1_tmp)/(tmassf_tmp - qmass2_tmp)
+ ! Compute and apply an initial mass fix factor which preserves horizontal
+ ! gradients of ln(ps).
+ if (.not. moist_physics) then
+ fixmas = tmass0/tmassf_tmp
+ else
+ fixmas = (tmass0 + qmass1_tmp)/(tmassf_tmp - qmass2_tmp)
+ end if
+ ps_tmp = ps_tmp*fixmas
end if
- ps_tmp = ps_tmp*fixmas
! Global integerals
tmassf = tmassf_tmp
diff --git a/src/dynamics/fv/diag_dynvar_ic.F90 b/src/dynamics/fv/diag_dynvar_ic.F90
index d568932845..06f89acc11 100644
--- a/src/dynamics/fv/diag_dynvar_ic.F90
+++ b/src/dynamics/fv/diag_dynvar_ic.F90
@@ -8,7 +8,7 @@ subroutine diag_dynvar_ic(grid, phis, ps, t3, u3s, v3s, tracer)
! !USES:
use shr_kind_mod , only: r8 => shr_kind_r8
use cam_history , only: outfld, write_inithist
- use constituents , only: cnst_name, pcnst
+ use constituents , only: cnst_name, pcnst, cnst_type
use dynamics_vars, only: T_FVDYCORE_GRID
implicit none
@@ -92,12 +92,23 @@ subroutine diag_dynvar_ic(grid, phis, ps, t3, u3s, v3s, tracer)
enddo
call outfld ('VS&IC ', tmp , idim, j)
+ ! The tracers are all wet mixing ratios in the dycore. If cnst_type is dry
+ ! then need to convert before writing to initial file.
do m = 1, pcnst
- do k = 1, km
- do i = ifirstxy, ilastxy
- tmp(i,k) = tracer(i,j,k,m)
+ if (cnst_type(m) == 'dry') then
+ do k = 1, km
+ do i = ifirstxy, ilastxy
+ ! convert wet to dry
+ tmp(i,k) = tracer(i,j,k,m) / (1._r8 - tracer(i,j,k,1))
+ enddo
enddo
- enddo
+ else
+ do k = 1, km
+ do i = ifirstxy, ilastxy
+ tmp(i,k) = tracer(i,j,k,m)
+ enddo
+ enddo
+ end if
call outfld(trim(cnst_name(m))//'&IC' , tmp , idim, j)
end do
@@ -105,6 +116,4 @@ subroutine diag_dynvar_ic(grid, phis, ps, t3, u3s, v3s, tracer)
end if
- return
-!EOC
end subroutine diag_dynvar_ic
diff --git a/src/dynamics/fv/dp_coupling.F90 b/src/dynamics/fv/dp_coupling.F90
index 61f2465308..a40afe461f 100644
--- a/src/dynamics/fv/dp_coupling.F90
+++ b/src/dynamics/fv/dp_coupling.F90
@@ -630,7 +630,8 @@ subroutine d_p_coupling(grid, phys_state, phys_tend, pbuf2d, dyn_out)
! and compute molecular viscosity(kmvis) and conductivity(kmcnd)
!-----------------------------------------------------------------------------
if ( waccmx_is('ionosphere') .or. waccmx_is('neutral') ) then
- call physconst_update(phys_state(lchnk)%q, phys_state(lchnk)%t, lchnk, ncol)
+ call physconst_update(phys_state(lchnk)%q, phys_state(lchnk)%t, lchnk, ncol, &
+ phys_state(lchnk)%pdel, phys_state(lchnk)%pdeldry, moist=.true.)
endif
!------------------------------------------------------------------------
diff --git a/src/dynamics/fv/dyn_comp.F90 b/src/dynamics/fv/dyn_comp.F90
index a16f0672e0..f7f8226c70 100644
--- a/src/dynamics/fv/dyn_comp.F90
+++ b/src/dynamics/fv/dyn_comp.F90
@@ -44,7 +44,7 @@ module dyn_comp
use spmd_utils, only: masterproc, iam
use pmgrid, only: plon, plat
-use constituents, only: cnst_name, cnst_read_iv, qmin
+use constituents, only: pcnst, cnst_name, cnst_read_iv, qmin
use time_manager, only: get_step_size
@@ -61,14 +61,14 @@ module dyn_comp
use cam_initfiles, only: initial_file_get_id, topo_file_get_id, pertlim
use cam_pio_utils, only: clean_iodesc_list
use ncdio_atm, only: infld
-use pio, only: pio_inq_varid, pio_get_att
-
+use pio, only: pio_seterrorhandling, pio_bcast_error, pio_noerr, &
+ file_desc_t, pio_inq_dimid, pio_inq_dimlen, &
+ pio_inq_varid, pio_get_att
use perf_mod, only: t_startf, t_stopf, t_barrierf
use cam_logfile, only: iulog
use cam_abortutils, only: endrun
-use pio, only: file_desc_t, pio_inq_dimid, pio_inq_dimlen
use par_vecsum_mod, only: par_vecsum
use te_map_mod, only: te_map
@@ -87,7 +87,8 @@ module dyn_comp
dyn_state, &
frontgf_idx, &
frontga_idx, &
- uzm_idx
+ uzm_idx, &
+ initial_mr
type (t_fvdycore_state), target :: dyn_state
@@ -138,6 +139,8 @@ module dyn_comp
integer, protected :: frontga_idx = -1
integer, protected :: uzm_idx = -1
+character(len=3), protected :: initial_mr(pcnst) ! constituents initialized with wet or dry mr
+
logical :: readvar ! inquiry flag: true => variable exists on netCDF file
character(len=8) :: fv_print_dpcoup_warn = "off"
@@ -2810,7 +2813,7 @@ subroutine read_inidat(dyn_in)
use physconst, only: pi
use dyn_grid, only: get_horiz_grid_dim_d
use commap, only: clat, clon, clat_staggered, londeg_st
- use constituents, only: pcnst
+ use constituents, only: cnst_type
! Read initial dataset
@@ -2855,6 +2858,14 @@ subroutine read_inidat(dyn_in)
km = grid%km
ntotq = grid%ntotq
+ ! Set the array initial_mr assuming that constituents are initialized with mixing ratios
+ ! that are consistent with their declared type in the constituents module. This array
+ ! may be modified below to provide backwards compatibility for reading old initial files
+ ! that contain wet mixing ratios for all constituents regardless of how they were registered.
+ do i = 1, pcnst
+ initial_mr(i) = cnst_type(i)
+ end do
+
if (analytic_ic_active()) then
readvar = .false.
if (jfirstxy == 1) then
@@ -3007,9 +3018,11 @@ subroutine process_inidat(fh_ini, grid, dyn_in, fieldname, m_cnst)
real(r8) :: xsum(grid%km) ! temp array for parallel sums
+ integer :: err_handling
integer :: varid ! variable id
integer :: ret ! return values
character(len=256) :: trunits ! tracer untis
+ character(len=3) :: mixing_ratio
character(len=*), parameter :: sub='process_inidat'
!----------------------------------------------------------------------------
@@ -3098,6 +3111,26 @@ subroutine process_inidat(fh_ini, grid, dyn_in, fieldname, m_cnst)
//trim(cnst_name(m_cnst))//' must be in KG/KG')
end if
+ ! Check for mixing_ratio attribute. If present then use it to
+ ! specify whether the initial file contains wet or dry values. If
+ ! not present then assume the mixing ratio is wet. This is for
+ ! backwards compatibility with old initial files that were written
+ ! will all wet mixing ratios.
+
+ ! We will handle errors for this routine
+ call pio_seterrorhandling(fh_ini, pio_bcast_error, err_handling)
+
+ ret = pio_get_att(fh_ini, varid, 'mixing_ratio', mixing_ratio)
+ if (ret == pio_noerr) then
+ initial_mr(m_cnst) = mixing_ratio
+ else
+ initial_mr(m_cnst) = 'wet'
+ end if
+
+ ! reset PIO to handle errors as before
+ call pio_seterrorhandling(fh_ini, err_handling)
+
+
else if (.not. analytic_ic_active()) then
! Constituents not read from initial file are initialized by the
diff --git a/src/dynamics/fv/stepon.F90 b/src/dynamics/fv/stepon.F90
index d91867bdbe..4aa446cdb0 100644
--- a/src/dynamics/fv/stepon.F90
+++ b/src/dynamics/fv/stepon.F90
@@ -20,7 +20,7 @@ module stepon
use physics_types, only: physics_state, physics_tend
-use dyn_comp, only: dyn_import_t, dyn_export_t
+use dyn_comp, only: dyn_import_t, dyn_export_t, initial_mr
use dynamics_vars, only: t_fvdycore_state, t_fvdycore_grid
use dyn_internal_state, only: get_dyn_state, get_dyn_state_grid
@@ -55,7 +55,7 @@ module stepon
subroutine stepon_init(dyn_in, dyn_out)
- use constituents, only: pcnst, cnst_get_type_byind
+ use constituents, only: pcnst
use time_manager, only: get_step_size
use physconst, only: physconst_calc_kappav, rair, cpair
use inic_analytic, only: analytic_ic_active
@@ -238,7 +238,7 @@ subroutine stepon_init(dyn_in, dyn_out)
enddo
enddo
do m = 1,pcnst
- if (cnst_get_type_byind(m).eq.'dry') then
+ if (initial_mr(m) == 'dry') then
do k=1, km
do j = jfirstxy, jlastxy
do i = ifirstxy, ilastxy
@@ -254,7 +254,6 @@ subroutine stepon_init(dyn_in, dyn_out)
end if
-!EOC
end subroutine stepon_init
!=========================================================================================
diff --git a/src/dynamics/se/dyn_comp.F90 b/src/dynamics/se/dyn_comp.F90
index 45da6ea86f..c7b3cbde6b 100644
--- a/src/dynamics/se/dyn_comp.F90
+++ b/src/dynamics/se/dyn_comp.F90
@@ -1649,50 +1649,7 @@ subroutine read_phis(dyn_in)
if (associated(fh_topo)) then
- ! Set PIO to return error flags.
- call pio_seterrorhandling(fh_topo, PIO_BCAST_ERROR, pio_errtype)
-
- ! Set name of grid object which will be used to read data from file
- ! into internal data structure via PIO.
- if (fv_nphys == 0) then
- grid_name = 'GLL'
- else
- grid_name = 'physgrid_d'
- end if
-
- ! Get number of global columns from the grid object and check that
- ! it matches the file data.
- call cam_grid_dimensions(grid_name, dims)
- dyn_cols = dims(1)
-
- ! The dimension of the unstructured grid in the TOPO file is 'ncol'.
- ierr = pio_inq_dimid(fh_topo, 'ncol', ncol_did)
- if (ierr /= PIO_NOERR) then
- call endrun(subname//': dimension ncol not found in bnd_topo file')
- end if
- ierr = pio_inq_dimlen(fh_topo, ncol_did, ncol_size)
- if (ncol_size /= dyn_cols) then
- if (masterproc) then
- write(iulog,*) subname//': ncol_size=', ncol_size, ' : dyn_cols=', dyn_cols
- end if
- call endrun(subname//': ncol size in bnd_topo file does not match grid definition')
- end if
-
- fieldname = 'PHIS'
- if (dyn_field_exists(fh_topo, trim(fieldname))) then
- if (fv_nphys == 0) then
- call read_dyn_var(fieldname, fh_topo, 'ncol', phis_tmp)
- else
- call read_phys_field_2d(fieldname, fh_topo, 'ncol', phis_phys_tmp)
- call map_phis_from_physgrid_to_gll(dyn_in%fvm, elem, phis_phys_tmp, &
- phis_tmp, pmask)
- end if
- else
- call endrun(subname//': Could not find PHIS field on input datafile')
- end if
-
- ! Put the error handling back the way it was
- call pio_seterrorhandling(fh_topo, pio_errtype)
+ call endrun(subname//': surface components with topography not supported')
else if (analytic_ic_active() .and. (iam < par%nprocs)) then
diff --git a/src/dynamics/tests/initial_conditions/ic_baroclinic.F90 b/src/dynamics/tests/initial_conditions/ic_baroclinic.F90
index 34a25922c3..4bc9b0e7bb 100644
--- a/src/dynamics/tests/initial_conditions/ic_baroclinic.F90
+++ b/src/dynamics/tests/initial_conditions/ic_baroclinic.F90
@@ -113,6 +113,7 @@ subroutine bc_wav_set_ic(vcoord,latvals, lonvals, U, V, T, PS, PHIS, &
real(r8) :: psurface
real(r8) :: wvp,qdry
logical :: lU, lV, lT, lQ, l3d_vars
+ logical :: cnst1_is_moisture
real(r8), allocatable :: pdry_half(:), pwet_half(:),zdry_half(:),zk(:)
if ((vcoord == vc_moist_pressure) .or. (vcoord == vc_dry_pressure)) then
@@ -216,7 +217,13 @@ subroutine bc_wav_set_ic(vcoord,latvals, lonvals, U, V, T, PS, PHIS, &
if (lu) nlev = size(U, 2)
if (lv) nlev = size(V, 2)
if (lt) nlev = size(T, 2)
- if (lq) nlev = size(Q, 2)
+
+ if (lq) then
+ nlev = size(Q, 2)
+ ! check whether first constituent in Q is water vapor.
+ cnst1_is_moisture = m_cnst(1) == 1
+ end if
+
allocate(zk(nlev+1))
if ((lq.or.lt) .and. (vcoord == vc_dry_pressure)) then
allocate(pdry_half(nlev+1))
@@ -259,7 +266,7 @@ subroutine bc_wav_set_ic(vcoord,latvals, lonvals, U, V, T, PS, PHIS, &
else
qk = 0.d0
end if
- if (lq) Q(i,k,1) = qk
+ if (lq .and. cnst1_is_moisture) Q(i,k,1) = qk
if (lt) then
tvk = Tv_given_z(zk(k),latvals(i))
T(i,k) = tvk / (1.d0 + Mvap * qk)
@@ -290,7 +297,7 @@ subroutine bc_wav_set_ic(vcoord,latvals, lonvals, U, V, T, PS, PHIS, &
else
qdry = 0.0_r8
end if
- if (lq) then
+ if (lq .and. cnst1_is_moisture) then
Q(i,k,1) = qdry
end if
if (lt) then
@@ -307,21 +314,25 @@ subroutine bc_wav_set_ic(vcoord,latvals, lonvals, U, V, T, PS, PHIS, &
if(lu .and. masterproc.and. verbose_use) write(iulog,*) ' U initialized by "',subname,'"'
if(lv .and. masterproc.and. verbose_use) write(iulog,*) ' V initialized by "',subname,'"'
if(lt .and. masterproc.and. verbose_use) write(iulog,*) ' T initialized by "',subname,'"'
- if(lq .and. masterproc.and. verbose_use) write(iulog,*) &
+ if(lq .and. cnst1_is_moisture .and. masterproc.and. verbose_use) write(iulog,*) &
' ', trim(cnst_name(m_cnst(1))), ' initialized by "',subname,'"'
end if
if (lq) then
ncnst = size(m_cnst, 1)
if ((vcoord == vc_moist_pressure) .or. (vcoord == vc_dry_pressure)) then
- do m = 2, ncnst
- call cnst_init_default(m_cnst(m), latvals, lonvals, Q(:,:,m_cnst(m)),&
+ do m = 1, ncnst
+
+ ! water vapor already done above
+ if (m_cnst(m) == 1) cycle
+
+ call cnst_init_default(m_cnst(m), latvals, lonvals, Q(:,:,m),&
mask=mask_use, verbose=verbose_use, notfound=.false.)
#if 0
do k = 1, nlev
do i=1,ncol
if (mask_use(i)) then
- Q(i,k,m_cnst(m)) = test_func(latvals(i),lonvals(i), k, m)
+ Q(i,k,m) = test_func(latvals(i),lonvals(i), k, m)
end if
end do
end do
@@ -330,8 +341,10 @@ subroutine bc_wav_set_ic(vcoord,latvals, lonvals, U, V, T, PS, PHIS, &
end if
#endif
end do
- end if
- end if
+
+ end if ! vcoord
+ end if ! lq
+
deallocate(mask_use)
if (l3d_vars) then
deallocate(zk)
diff --git a/src/physics/cam/cam_diagnostics.F90 b/src/physics/cam/cam_diagnostics.F90
index 8b046924d1..bda3b5661b 100644
--- a/src/physics/cam/cam_diagnostics.F90
+++ b/src/physics/cam/cam_diagnostics.F90
@@ -898,7 +898,6 @@ subroutine diag_phys_writeout_dry(state, pbuf, p_surf_t)
use time_manager, only: get_nstep
use interpolate_data, only: vertinterp
use constituent_burden, only: constituent_burden_comp
- use co2_cycle, only: c_i, co2_transport
use tidal_diag, only: tidal_diag_write
!-----------------------------------------------------------------------
@@ -1235,7 +1234,7 @@ subroutine diag_phys_writeout_moist(state, pbuf, p_surf_t)
epsilo, rh2o
use interpolate_data, only: vertinterp
use constituent_burden, only: constituent_burden_comp
- use co2_cycle, only: c_i, co2_transport
+ use co2_cycle, only: c_i, co2_transport, co2_readFlux_aircraft
!-----------------------------------------------------------------------
!
! Arguments
@@ -1270,6 +1269,11 @@ subroutine diag_phys_writeout_moist(state, pbuf, p_surf_t)
do m = 1,4
call outfld(trim(cnst_name(c_i(m)))//'_BOT', state%q(1,pver,c_i(m)), pcols, lchnk)
end do
+
+ if (co2_readFlux_aircraft) then
+ call pbuf_get_field(pbuf, pbuf_get_index('ac_CO2'), ftem_ptr)
+ call outfld('TMac_CO2', sum(ftem_ptr(:ncol,:), dim=2), pcols, lchnk)
+ end if
end if
! column burdens of all constituents except water vapor
diff --git a/src/physics/cam/clubb_intr.F90 b/src/physics/cam/clubb_intr.F90
index 2531857278..1d2648d676 100644
--- a/src/physics/cam/clubb_intr.F90
+++ b/src/physics/cam/clubb_intr.F90
@@ -1027,18 +1027,19 @@ subroutine clubb_tend_cam( &
use physics_types, only: physics_state, physics_ptend, &
physics_state_copy, physics_ptend_init, &
- physics_ptend_sum, physics_update
+ physics_ptend_sum, physics_update, set_dry_to_wet
use physics_buffer, only: pbuf_get_index, pbuf_old_tim_idx, pbuf_get_field, &
physics_buffer_desc
- use constituents, only: cnst_get_ind
+ use constituents, only: cnst_get_ind, cnst_type
+ use co2_cycle, only: co2_cycle_set_cnst_type
use camsrfexch, only: cam_in_t
use time_manager, only: is_first_step
use cam_abortutils, only: endrun
use cam_logfile, only: iulog
use tropopause, only: tropopause_findChemTrop
-
+
#ifdef CLUBB_SGS
use hb_diff, only: pblintd
use scamMOD, only: single_column,scm_clubb_iop_name
@@ -1266,6 +1267,7 @@ subroutine clubb_tend_cam( &
type(pdf_parameter), dimension(pverp) :: pdf_params ! PDF parameters [units vary]
character(len=200) :: temp1, sub ! Strings needed for CLUBB output
+ character(len=3) :: cnst_type_loc(pcnst) ! local copy of cnst_type
! --------------- !
! Pointers !
@@ -1368,13 +1370,18 @@ subroutine clubb_tend_cam( &
call cnst_get_ind('NUMLIQ',ixnumliq)
call cnst_get_ind('NUMICE',ixnumice)
- ! Copy the state to state1 array to use in this routine
-
! Initialize physics tendency arrays, copy the state to state1 array to use in this routine
call physics_ptend_init(ptend_loc,state%psetcols, 'clubb', ls=.true., lu=.true., lv=.true., lq=lq)
call physics_ptend_init(ptend_all, state%psetcols, 'clubb')
- call physics_state_copy(state,state1)
+ ! Copy the state to state1 array to use in this routine
+ call physics_state_copy(state, state1)
+
+ ! constituents are all treated as wet mmr by clubb
+ ! lie about cnst_type of co2_cycle constituents, so that they don't get converted to wet
+ cnst_type_loc(:) = cnst_type(:)
+ call co2_cycle_set_cnst_type(cnst_type_loc, 'wet')
+ call set_dry_to_wet(state1, cnst_type_loc)
if (clubb_do_liqsupersat) then
npccn_idx = pbuf_get_index('NPCCN')
@@ -2389,6 +2396,18 @@ subroutine clubb_tend_cam( &
call physics_ptend_sum(ptend_loc,ptend_all,ncol)
call physics_update(state1,ptend_loc,hdtime)
+ ! ptend_all now has all accumulated tendencies. Convert the tendencies for the
+ ! dry constituents to dry air basis.
+ do ixind = 1, pcnst
+ if (lq(ixind) .and. cnst_type(ixind).eq.'dry') then
+ do k = 1, pver
+ do i = 1, ncol
+ ptend_all%q(i,k,ixind) = ptend_all%q(i,k,ixind)*state1%pdel(i,k)/state1%pdeldry(i,k)
+ end do
+ end do
+ end if
+ end do
+
! ------------------------------------------------- !
! Diagnose relative cloud water variance !
! ------------------------------------------------- !
@@ -2650,6 +2669,7 @@ subroutine clubb_tend_cam( &
call outfld( 'QT', qt_output, pcols, lchnk )
call outfld( 'SL', sl_output, pcols, lchnk )
call outfld( 'CONCLD', concld, pcols, lchnk )
+ call outfld( 'DP_CLD', deepcu, pcols, lchnk )
call outfld( 'CLUBB_GRID_SIZE', grid_dx, pcols, lchnk )
call outfld( 'QSATFAC', qsatfac, pcols, lchnk)
diff --git a/src/physics/cam/co2_cycle.F90 b/src/physics/cam/co2_cycle.F90
index ebf2ca3303..12e929313b 100644
--- a/src/physics/cam/co2_cycle.F90
+++ b/src/physics/cam/co2_cycle.F90
@@ -28,10 +28,12 @@ module co2_cycle
public co2_time_interp_ocn ! time interpolate co2 flux
public co2_time_interp_fuel ! time interpolate co2 flux
public co2_cycle_set_ptend ! set tendency from aircraft emissions
+ public co2_cycle_set_cnst_type ! set cnst_type for co2_cycle tracers
! Public data
public data_flux_ocn ! data read in for co2 flux from ocn
public data_flux_fuel ! data read in for co2 flux from fuel
+ public co2_readFlux_aircraft ! true => read aircraft co2 flux from data file, namelist variable
type(co2_data_flux_type) :: data_flux_ocn
type(co2_data_flux_type) :: data_flux_fuel
@@ -42,9 +44,9 @@ module co2_cycle
! Namelist variables
logical :: co2_flag = .false. ! true => turn on co2 code, namelist variable
- logical :: co2_readFlux_ocn = .false. ! true => read ocn co2 flux from date file, namelist variable
- logical :: co2_readFlux_fuel = .false. ! true => read fuel co2 flux from date file, namelist variable
- logical :: co2_readFlux_aircraft = .false. ! true => read aircraft co2 flux from date file, namelist variable
+ logical :: co2_readFlux_ocn = .false. ! true => read ocn co2 flux from data file, namelist variable
+ logical :: co2_readFlux_fuel = .false. ! true => read fuel co2 flux from data file, namelist variable
+ logical :: co2_readFlux_aircraft = .false. ! true => read aircraft co2 flux from data file, namelist variable
character(len=cl) :: co2flux_ocn_file = 'unset' ! co2 flux from ocn
character(len=cl) :: co2flux_fuel_file = 'unset' ! co2 flux from fossil fuel
@@ -157,7 +159,7 @@ subroutine co2_register
c_mw = (/ mwco2, mwco2, mwco2, mwco2 /)
c_cp = (/ cpair, cpair, cpair, cpair /)
- c_qmin = (/ 1.e-20_r8, 1.e-20_r8, 1.e-20_r8, 1.e-20_r8 /)
+ c_qmin = (/ -1.e36_r8, -1.e36_r8, -1.e36_r8, -1.e36_r8 /) ! disable qneg3
! register CO2 constiuents as dry tracers, set indices
@@ -324,6 +326,10 @@ subroutine co2_init
call co2_data_flux_init ( co2flux_fuel_file, 'CO2_flux', data_flux_fuel )
end if
+ if (co2_readFlux_aircraft) then
+ call addfld('TMac_CO2', horiz_only,'A', 'kg/m2/s', 'vertical integral of aircraft emission ac_CO2')
+ end if
+
end subroutine co2_init
!===============================================================================
@@ -424,4 +430,30 @@ end subroutine co2_cycle_set_ptend
!===============================================================================
+subroutine co2_cycle_set_cnst_type(cnst_type_array, cnst_type_val)
+
+!-------------------------------------------------------------------------------
+! Purpose:
+! set cnst_type for co2_cycle tracers
+!-------------------------------------------------------------------------------
+
+ ! Arguments
+ character(len=*), intent(inout) :: cnst_type_array(:)
+ character(len=*), intent(in) :: cnst_type_val
+
+ ! Local variables
+ integer :: m
+
+ !----------------------------------------------------------------------------
+
+ if (.not. co2_flag) return
+
+ do m = 1, ncnst
+ cnst_type_array(c_i(m)) = cnst_type_val
+ end do
+
+end subroutine co2_cycle_set_cnst_type
+
+!===============================================================================
+
end module co2_cycle
diff --git a/src/physics/cam/constituents.F90 b/src/physics/cam/constituents.F90
index 4f26c10988..89231628e4 100644
--- a/src/physics/cam/constituents.F90
+++ b/src/physics/cam/constituents.F90
@@ -51,7 +51,7 @@ module constituents
real(r8), public :: cnst_cp (pcnst) ! specific heat at constant pressure (J/kg/K)
real(r8), public :: cnst_cv (pcnst) ! specific heat at constant volume (J/kg/K)
real(r8), public :: cnst_mw (pcnst) ! molecular weight (kg/kmole)
-character*3, public :: cnst_type(pcnst) ! wet or dry mixing ratio
+character*3, public, protected :: cnst_type(pcnst)! wet or dry mixing ratio
character*5, public :: cnst_molec(pcnst) ! major or minor species molecular diffusion
real(r8), public :: cnst_rgas(pcnst) ! gas constant ()
real(r8), public :: qmin (pcnst) ! minimum permitted constituent concentration (kg/kg)
diff --git a/src/physics/cam/gw_drag.F90 b/src/physics/cam/gw_drag.F90
index 796a0fb3d2..0aa212c0a1 100644
--- a/src/physics/cam/gw_drag.F90
+++ b/src/physics/cam/gw_drag.F90
@@ -1172,6 +1172,10 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
!-----------------------------------------------------------------------
! Interface for multiple gravity wave drag parameterization.
!-----------------------------------------------------------------------
+
+ use physics_types, only: physics_state_copy, set_dry_to_wet
+ use constituents, only: cnst_type
+ use co2_cycle, only: co2_cycle_set_cnst_type
use physics_buffer, only: physics_buffer_desc, pbuf_get_field
use camsrfexch, only: cam_in_t
! Location-dependent cpair
@@ -1183,8 +1187,9 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
use gw_oro, only: gw_oro_src
use gw_front, only: gw_cm_src
use gw_convect, only: gw_beres_src
+
!------------------------------Arguments--------------------------------
- type(physics_state), intent(in) :: state ! physics state structure
+ type(physics_state), intent(in) :: state ! physics state structure
type(physics_buffer_desc), pointer :: pbuf(:) ! Physics buffer
real(r8), intent(in) :: dt ! time step
! Parameterization net tendencies.
@@ -1193,6 +1198,9 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
real(r8), intent(out) :: flx_heat(pcols)
!---------------------------Local storage-------------------------------
+
+ type(physics_state) :: state1 ! Local copy of state variable
+
integer :: lchnk ! chunk identifier
integer :: ncol ! number of atmospheric columns
@@ -1326,24 +1334,35 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
real(r8) :: zm(state%ncol,pver)
real(r8) :: zi(state%ncol,pver+1)
+ character(len=3) :: cnst_type_loc(pcnst) ! local copy of cnst_type
+
!------------------------------------------------------------------------
- lchnk = state%lchnk
- ncol = state%ncol
+ ! Make local copy of input state.
+ call physics_state_copy(state, state1)
+
+ ! constituents are all treated as wet mmr
+ ! lie about cnst_type of co2_cycle constituents, so that they don't get converted to wet
+ cnst_type_loc(:) = cnst_type(:)
+ call co2_cycle_set_cnst_type(cnst_type_loc, 'wet')
+ call set_dry_to_wet(state1, cnst_type_loc)
- p = Coords1D(state%pint(:ncol,:))
+ lchnk = state1%lchnk
+ ncol = state1%ncol
- dse = state%s(:ncol,:)
- t = state%t(:ncol,:)
- u = state%u(:ncol,:)
- v = state%v(:ncol,:)
- q = state%q(:ncol,:,:)
- piln = state%lnpint(:ncol,:)
- zm = state%zm(:ncol,:)
- zi = state%zi(:ncol,:)
+ p = Coords1D(state1%pint(:ncol,:))
+
+ dse = state1%s(:ncol,:)
+ t = state1%t(:ncol,:)
+ u = state1%u(:ncol,:)
+ v = state1%v(:ncol,:)
+ q = state1%q(:ncol,:,:)
+ piln = state1%lnpint(:ncol,:)
+ zm = state1%zm(:ncol,:)
+ zi = state1%zi(:ncol,:)
lq = .true.
- call physics_ptend_init(ptend, state%psetcols, "Gravity wave drag", &
+ call physics_ptend_init(ptend, state1%psetcols, "Gravity wave drag", &
ls=.true., lu=.true., lv=.true., lq=lq)
! Profiles of background state variables
@@ -1377,7 +1396,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
end if
if (use_gw_front_igw) then
- u_coriolis = coriolis_speed(band_long, state%lat(:ncol))
+ u_coriolis = coriolis_speed(band_long, state1%lat(:ncol))
end if
! Totals that accumulate over different sources.
@@ -1399,7 +1418,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
! Efficiency of gravity wave momentum transfer.
! This is really only to remove the pole points.
- where (pi/2._r8 - abs(state%lat(:ncol)) >= 4*epsilon(1._r8))
+ where (pi/2._r8 - abs(state1%lat(:ncol)) >= 4*epsilon(1._r8))
effgw = effgw_beres_dp
elsewhere
effgw = 0._r8
@@ -1484,7 +1503,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
! Efficiency of gravity wave momentum transfer.
! This is really only to remove the pole points.
- where (pi/2._r8 - abs(state%lat(:ncol)) >= 4*epsilon(1._r8))
+ where (pi/2._r8 - abs(state1%lat(:ncol)) >= 4*epsilon(1._r8))
effgw = effgw_beres_sh
elsewhere
effgw = 0._r8
@@ -1574,7 +1593,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
effgw = effgw_cm
! Frontogenesis is too high at the poles (at least for the FV
! dycore), so introduce a polar taper.
- if (gw_polar_taper) effgw = effgw * cos(state%lat(:ncol))
+ if (gw_polar_taper) effgw = effgw * cos(state1%lat(:ncol))
! Determine the wave source for C&M background spectrum
call gw_cm_src(ncol, band_mid, cm_desc, u, v, frontgf(:ncol,:), &
@@ -1651,10 +1670,10 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
! Frontogenesis is too high at the poles (at least for the FV
! dycore), so introduce a polar taper.
if (gw_polar_taper) then
- where (abs(state%lat(:ncol)) <= 89._r8*degree2radian)
+ where (abs(state1%lat(:ncol)) <= 89._r8*degree2radian)
effgw = effgw * 0.25_r8 * &
- (1._r8+tanh((state%lat(:ncol)+al0)/dlat0)) * &
- (1._r8-tanh((state%lat(:ncol)-al0)/dlat0))
+ (1._r8+tanh((state1%lat(:ncol)+al0)/dlat0)) * &
+ (1._r8-tanh((state1%lat(:ncol)-al0)/dlat0))
elsewhere
effgw = 0._r8
end where
@@ -1757,7 +1776,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
src_level, tend_level, tau, ubm, ubi, xv, yv, c)
endif
do i = 1, ncol
- if (state%lat(i) < 0._r8) then
+ if (state1%lat(i) < 0._r8) then
tau(i,:,:) = tau(i,:,:) * gw_oro_south_fac
end if
end do
@@ -1885,6 +1904,18 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
endif
+ ! ptend now has all accumulated tendencies. Convert the tendencies for the
+ ! dry constituents to dry air basis.
+ do m = 1, pcnst
+ if (cnst_type(m).eq.'dry') then
+ do k = 1, pver
+ do i = 1, ncol
+ ptend%q(i,k,m) = ptend%q(i,k,m)*state1%pdel(i,k)/state1%pdeldry(i,k)
+ end do
+ end do
+ end if
+ end do
+
! Write totals to history file.
call outfld('EKGW', egwdffi_tot , ncol, lchnk)
call outfld('TTGW', ptend%s/cpairv(:,:,lchnk), pcols, lchnk)
diff --git a/src/physics/cam/phys_control.F90 b/src/physics/cam/phys_control.F90
index 743bcf80ff..2ad2eae6fa 100644
--- a/src/physics/cam/phys_control.F90
+++ b/src/physics/cam/phys_control.F90
@@ -44,6 +44,7 @@ module phys_control
character(len=16) :: microp_scheme = unset_str ! microphysics package
character(len=16) :: macrop_scheme = unset_str ! macrophysics package
character(len=16) :: radiation_scheme = unset_str ! radiation package
+character(len=256) :: cam_physics_mesh = unset_str ! SCRIP file for phys
integer :: srf_flux_avg = unset_int ! 1 => smooth surface fluxes, 0 otherwise
logical :: use_subcol_microp = .false. ! if .true. then use sub-columns in microphysics
@@ -126,7 +127,7 @@ subroutine phys_ctl_readnl(nlfile)
history_cesm_forcing, history_scwaccm_forcing, history_chemspecies_srf, &
do_clubb_sgs, state_debug_checks, use_hetfrz_classnuc, use_gw_oro, use_gw_front, &
use_gw_front_igw, use_gw_convect_dp, use_gw_convect_sh, cld_macmic_num_steps, &
- offline_driver, convproc_do_aer
+ offline_driver, convproc_do_aer, cam_physics_mesh
!-----------------------------------------------------------------------------
if (masterproc) then
@@ -184,6 +185,7 @@ subroutine phys_ctl_readnl(nlfile)
call mpi_bcast(cld_macmic_num_steps, 1, mpi_integer, masterprocid, mpicom, ierr)
call mpi_bcast(offline_driver, 1, mpi_logical, masterprocid, mpicom, ierr)
call mpi_bcast(convproc_do_aer, 1, mpi_logical, masterprocid, mpicom, ierr)
+ call mpi_bcast(cam_physics_mesh, len(cam_physics_mesh), mpi_character, masterprocid, mpicom, ierr)
use_spcam = ( cam_physpkg_is('spcam_sam1mom') &
.or. cam_physpkg_is('spcam_m2005'))
@@ -280,7 +282,7 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, mi
history_cesm_forcing_out, history_scwaccm_forcing_out, history_chemspecies_srf_out, &
cam_chempkg_out, prog_modal_aero_out, macrop_scheme_out, &
do_clubb_sgs_out, use_spcam_out, state_debug_checks_out, cld_macmic_num_steps_out, &
- offline_driver_out, convproc_do_aer_out)
+ offline_driver_out, convproc_do_aer_out, physics_grid_out)
!-----------------------------------------------------------------------
! Purpose: Return runtime settings
! deep_scheme_out : deep convection scheme
@@ -323,6 +325,7 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, mi
integer, intent(out), optional :: cld_macmic_num_steps_out
logical, intent(out), optional :: offline_driver_out
logical, intent(out), optional :: convproc_do_aer_out
+ character(len=256), intent(out), optional :: physics_grid_out
if ( present(deep_scheme_out ) ) deep_scheme_out = deep_scheme
if ( present(shallow_scheme_out ) ) shallow_scheme_out = shallow_scheme
@@ -357,6 +360,7 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, mi
if ( present(cld_macmic_num_steps_out) ) cld_macmic_num_steps_out = cld_macmic_num_steps
if ( present(offline_driver_out ) ) offline_driver_out = offline_driver
if ( present(convproc_do_aer_out ) ) convproc_do_aer_out = convproc_do_aer
+ if ( present(physics_grid_out ) ) physics_grid_out = cam_physics_mesh
end subroutine phys_getopts
diff --git a/src/physics/cam/physics_types.F90 b/src/physics/cam/physics_types.F90
index f08911ad50..548f2f5da3 100644
--- a/src/physics/cam/physics_types.F90
+++ b/src/physics/cam/physics_types.F90
@@ -395,7 +395,7 @@ subroutine physics_update(state, ptend, dt, tend)
! Get indices for molecular weights and call WACCM-X physconst_update
!------------------------------------------------------------------------
if ( waccmx_is('ionosphere') .or. waccmx_is('neutral') ) then
- call physconst_update(state%q, state%t, state%lchnk, ncol)
+ call physconst_update(state%q, state%t, state%lchnk, state%ncol, state%pdel, state%pdeldry)
endif
if ( waccmx_is('ionosphere') .or. waccmx_is('neutral') ) then
@@ -490,7 +490,7 @@ subroutine physics_state_check(state, name)
shr_infnan_posinf, shr_infnan_neginf
use shr_assert_mod, only: shr_assert, shr_assert_in_domain
use physconst, only: pi
- use constituents, only: pcnst, qmin
+ use constituents, only: pcnst
!------------------------------Arguments--------------------------------
! State to check.
@@ -663,7 +663,7 @@ subroutine physics_state_check(state, name)
! 3-D variables
do m = 1,pcnst
- call shr_assert_in_domain(state%q(:ncol,:,m), lt=posinf_r8, ge=qmin(m), &
+ call shr_assert_in_domain(state%q(:ncol,:,m), lt=posinf_r8, gt=neginf_r8, &
varname="state%q ("//trim(cnst_name(m))//")", msg=msg)
end do
@@ -1438,18 +1438,25 @@ end subroutine set_state_pdry
!===============================================================================
-subroutine set_wet_to_dry (state)
+subroutine set_wet_to_dry (state, cnst_type_in)
use constituents, only: pcnst, cnst_type
type(physics_state), intent(inout) :: state
+ character(len=*), optional, intent(in) :: cnst_type_in(:)
integer m, ncol
+ logical l_conv_cnst ! should the dry->wet conversion be applied to this constituent
ncol = state%ncol
do m = 1,pcnst
- if (cnst_type(m).eq.'dry') then
+ if (present(cnst_type_in)) then
+ l_conv_cnst = cnst_type_in(m).eq.'dry'
+ else
+ l_conv_cnst = cnst_type(m).eq.'dry'
+ endif
+ if (l_conv_cnst) then
state%q(:ncol,:,m) = state%q(:ncol,:,m)*state%pdel(:ncol,:)/state%pdeldry(:ncol,:)
endif
end do
@@ -1458,18 +1465,25 @@ end subroutine set_wet_to_dry
!===============================================================================
-subroutine set_dry_to_wet (state)
+subroutine set_dry_to_wet (state, cnst_type_in)
use constituents, only: pcnst, cnst_type
type(physics_state), intent(inout) :: state
+ character(len=*), optional, intent(in) :: cnst_type_in(:)
integer m, ncol
+ logical l_conv_cnst ! should the dry->wet conversion be applied to this constituent
ncol = state%ncol
do m = 1,pcnst
- if (cnst_type(m).eq.'dry') then
+ if (present(cnst_type_in)) then
+ l_conv_cnst = cnst_type_in(m).eq.'dry'
+ else
+ l_conv_cnst = cnst_type(m).eq.'dry'
+ endif
+ if (l_conv_cnst) then
state%q(:ncol,:,m) = state%q(:ncol,:,m)*state%pdeldry(:ncol,:)/state%pdel(:ncol,:)
endif
end do
diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90
index d74a16a512..aec046cff5 100644
--- a/src/physics/cam/vertical_diffusion.F90
+++ b/src/physics/cam/vertical_diffusion.F90
@@ -444,11 +444,8 @@ subroutine vertical_diffusion_init(pbuf2d)
enddo
end if
- if( cnst_get_type_byind(k) .eq. 'wet' ) then
- if( vdiff_select( fieldlist_wet, 'q', k ) .ne. '' ) call endrun( vdiff_select( fieldlist_wet, 'q', k ) )
- else
- if( vdiff_select( fieldlist_dry, 'q', k ) .ne. '' ) call endrun( vdiff_select( fieldlist_dry, 'q', k ) )
- endif
+ ! Convert all constituents to wet before doing diffusion.
+ if( vdiff_select( fieldlist_wet, 'q', k ) .ne. '' ) call endrun( vdiff_select( fieldlist_wet, 'q', k ) )
! ----------------------------------------------- !
! Select constituents for molecular diffusion !
@@ -653,6 +650,9 @@ subroutine vertical_diffusion_tend( &
!---------------------------------------------------- !
use physics_buffer, only : physics_buffer_desc, pbuf_get_field, pbuf_set_field
use physics_types, only : physics_state, physics_ptend, physics_ptend_init
+ use physics_types, only : set_dry_to_wet, set_wet_to_dry
+ use co2_cycle, only : co2_cycle_set_cnst_type
+
use camsrfexch, only : cam_in_t
use cam_history, only : outfld
@@ -662,7 +662,7 @@ subroutine vertical_diffusion_tend( &
use hb_diff, only : compute_hb_diff
use wv_saturation, only : qsat
use molec_diff, only : compute_molec_diff, vd_lu_qdecomp
- use constituents, only : qmincg, qmin
+ use constituents, only : qmincg, qmin, cnst_type
use diffusion_solver, only : compute_vdiff, any, operator(.not.)
use physconst, only : cpairv, rairv !Needed for calculation of upward H flux
use time_manager, only : get_nstep
@@ -677,7 +677,7 @@ subroutine vertical_diffusion_tend( &
! Input Arguments !
! --------------- !
- type(physics_state), intent(in) :: state ! Physics state variables
+ type(physics_state), intent(inout) :: state ! Physics state variables
type(cam_in_t), intent(in) :: cam_in ! Surface inputs
real(r8), intent(in) :: ztodt ! 2 delta-t [ s ]
@@ -841,10 +841,18 @@ subroutine vertical_diffusion_tend( &
logical :: lq(pcnst)
+ character(len=3) :: cnst_type_loc(pcnst) ! local copy of cnst_type
+
! ----------------------- !
! Main Computation Begins !
! ----------------------- !
+ ! Assume 'wet' mixing ratios in diffusion code.
+ ! lie about cnst_type of co2_cycle constituents, so that they don't get converted to wet
+ cnst_type_loc(:) = cnst_type(:)
+ call co2_cycle_set_cnst_type(cnst_type_loc, 'wet')
+ call set_dry_to_wet(state, cnst_type_loc)
+
rztodt = 1._r8 / ztodt
lchnk = state%lchnk
ncol = state%ncol
@@ -1168,7 +1176,7 @@ subroutine vertical_diffusion_tend( &
if (prog_modal_aero) then
! Modal aerosol species not diffused, so just add the explicit surface fluxes to the
- ! lowest layer
+ ! lowest layer. **NOTE** This code assumes wet mmr.
tmp1(:ncol) = ztodt * gravit * state%rpdel(:ncol,pver)
do m = 1, pmam_ncnst
@@ -1262,7 +1270,6 @@ subroutine vertical_diffusion_tend( &
! Convert the new profiles into vertical diffusion tendencies. !
! Convert KE dissipative heat change into "temperature" tendency. !
! --------------------------------------------------------------- !
-
! All variables are modified by vertical diffusion
lq(:) = .TRUE.
@@ -1273,6 +1280,16 @@ subroutine vertical_diffusion_tend( &
ptend%u(:ncol,:) = ( u_tmp(:ncol,:) - state%u(:ncol,:) ) * rztodt
ptend%v(:ncol,:) = ( v_tmp(:ncol,:) - state%v(:ncol,:) ) * rztodt
ptend%q(:ncol,:pver,:) = ( q_tmp(:ncol,:pver,:) - state%q(:ncol,:pver,:) ) * rztodt
+
+ ! Convert tendencies of dry constituents to dry basis.
+ do m = 1,pcnst
+ if (cnst_type(m).eq.'dry') then
+ ptend%q(:ncol,:pver,m) = ptend%q(:ncol,:pver,m)*state%pdel(:ncol,:pver)/state%pdeldry(:ncol,:pver)
+ endif
+ end do
+ ! convert wet mmr back to dry before conservation check
+ call set_wet_to_dry(state, cnst_type_loc)
+
if (.not. do_pbl_diags) then
slten(:ncol,:) = ( sl(:ncol,:) - sl_prePBL(:ncol,:) ) * rztodt
qtten(:ncol,:) = ( qt(:ncol,:) - qt_prePBL(:ncol,:) ) * rztodt
@@ -1341,6 +1358,7 @@ subroutine vertical_diffusion_tend( &
end if
+
! -------------------------------------------------------------- !
! mass conservation check.........
! -------------------------------------------------------------- !
@@ -1372,7 +1390,7 @@ subroutine vertical_diffusion_tend( &
'MASSCHECK vert diff : nstep,lon,lat,mass1,mass2,sum3,sflx,rel-diff : ', &
trim(cnst_name(m)), ' : ', nstep, state%lon(i)*180._r8/pi, state%lat(i)*180._r8/pi, &
sum1, sum2, sum3, sflx, abs(sum2-sum1)/sum1
- call endrun('vertical_diffusion_tend : mass not conserved' )
+!xxx call endrun('vertical_diffusion_tend : mass not conserved' )
endif
endif
enddo col_loop
diff --git a/src/physics/simple/tj2016.F90 b/src/physics/simple/tj2016.F90
index 542ae54da4..5f46b13e2d 100644
--- a/src/physics/simple/tj2016.F90
+++ b/src/physics/simple/tj2016.F90
@@ -176,7 +176,7 @@ subroutine Thatcher_Jablonowski_sfc_pbl_hs(ncol, pver, dtime, clat, &
real(r8), intent(in) :: clat(ncol) ! latitude
real(r8), intent(in) :: PS(ncol) ! surface pressure (Pa)
real(r8), intent(in) :: pmid(ncol,pver) ! mid-point pressure (Pa)
- real(r8), intent(in) :: pint(ncol,pver) ! interface pressure (Pa)
+ real(r8), intent(in) :: pint(ncol,pver+1) ! interface pressure (Pa)
real(r8), intent(in) :: lnpint(ncol,2) ! ln(interface pressure (Pa)) at and above the surface
real(r8), intent(in) :: rpdel(ncol,pver) ! reciprocal of layer thickness (Pa)
diff --git a/src/utils/physconst.F90 b/src/utils/physconst.F90
index 7670cd22b4..dda00a8155 100644
--- a/src/utils/physconst.F90
+++ b/src/utils/physconst.F90
@@ -254,7 +254,7 @@ end subroutine physconst_init
!===============================================================================
- subroutine physconst_update(mmr, t, lchnk, ncol)
+ subroutine physconst_update(mmr, t, lchnk, ncol, pdel, pdeldry, moist)
!-----------------------------------------------------------------------
! Update the physics "constants" that vary
@@ -266,6 +266,9 @@ subroutine physconst_update(mmr, t, lchnk, ncol)
real(r8), intent(in) :: t(pcols,pver) ! temperature t array from state structure
integer, intent(in) :: lchnk ! Chunk number
integer, intent(in) :: ncol ! number of columns
+ real(r8), intent(in) :: pdel(pcols,pver)
+ real(r8), intent(in) :: pdeldry(pcols,pver)
+ logical, optional, intent(in) :: moist
!
!---------------------------Local storage-------------------------------------------------------------
integer :: i,k ! column,level,constituent indices
@@ -275,6 +278,9 @@ subroutine physconst_update(mmr, t, lchnk, ncol)
real(r8):: dof1, dof2 ! Degress of freedom for cpairv calculation
real(r8):: kv1, kv2, kv3, kv4 ! Coefficients for kmvis calculation
real(r8):: kc1, kc2, kc3, kc4 ! Coefficients for kmcnd calculation
+ logical :: moist_mixtype
+ real(r8) :: to_moist_fact(ncol,pver)
+
!--------------------------------------------
! Set constants needed for updates
!--------------------------------------------
@@ -289,6 +295,17 @@ subroutine physconst_update(mmr, t, lchnk, ncol)
kc3 = 75.9_r8
kc4 = 0.69_r8
+ moist_mixtype = .false.
+
+ if (present(moist)) then
+ moist_mixtype = moist
+ end if
+ if (moist_mixtype) then
+ to_moist_fact(:ncol,:) = 1._r8
+ else
+ to_moist_fact(:ncol,:) = pdeldry(:ncol,:)/pdel(:ncol,:)
+ end if
+
if (o2_ndx<0 .or. o_ndx<0 .or. h_ndx<0) then
call endrun('physconst_update: ERROR -- needed constituents are not available')
endif
@@ -298,9 +315,9 @@ subroutine physconst_update(mmr, t, lchnk, ncol)
!--------------------------------------------
do k=1,pver
do i=1,ncol
- mmro = mmr(i,k, o_ndx)
- mmro2 = mmr(i,k, o2_ndx)
- mmrh = mmr(i,k, h_ndx)
+ mmro = mmr(i,k,o_ndx)*to_moist_fact(i,k) ! convert to moist mass mixing ratios
+ mmro2 = mmr(i,k,o2_ndx)*to_moist_fact(i,k)
+ mmrh = mmr(i,k,h_ndx)*to_moist_fact(i,k)
mmrn2 = 1._r8-mmro-mmro2-mmrh
mbarv(i,k,lchnk) = 1._r8/( mmro *o_mwi + &
mmro2*o2_mwi + &
@@ -319,9 +336,10 @@ subroutine physconst_update(mmr, t, lchnk, ncol)
do k=2,pver
do i=1,ncol
- mmro = .5_r8*(mmr(i,k-1, o_ndx)+mmr(i,k,o_ndx))
- mmro2 = .5_r8*(mmr(i,k-1, o2_ndx)+mmr(i,k,o2_ndx))
- mmrn2 = 1._r8-mmro-mmro2
+ mmro = .5_r8*(mmr(i,k-1,o_ndx) *to_moist_fact(i,k-1)+mmr(i,k,o_ndx) *to_moist_fact(i,k))
+ mmro2 = .5_r8*(mmr(i,k-1,o2_ndx)*to_moist_fact(i,k-1)+mmr(i,k,o2_ndx)*to_moist_fact(i,k))
+ mmrh = .5_r8*(mmr(i,k-1,h_ndx) *to_moist_fact(i,k-1)+mmr(i,k,h_ndx) *to_moist_fact(i,k))
+ mmrn2 = 1._r8-mmro-mmro2-mmrh
mbarvi = .5_r8*(mbarv(i,k-1,lchnk)+mbarv(i,k,lchnk))
tint = .5_r8*(t(i,k-1)+t(i,k))
@@ -347,7 +365,8 @@ end subroutine physconst_update
!===============================================================================
subroutine physconst_calc_kappav( i0,i1,j0,j1,k0,k1,ntotq, tracer, kappav, cpv )
-
+ ! assumes moist MMRs
+
! args
integer, intent(in) :: i0,i1,j0,j1,k0,k1, ntotq
real(r8), intent(in) :: tracer(i0:i1,j0:j1,k0:k1,ntotq) ! Tracer array