diff --git a/.gitignore b/.gitignore
index fbccc45e74..6beb06fc54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,6 +13,7 @@ src/physics/silhs
src/physics/pumas
src/physics/pumas-frozen
src/dynamics/fv3/atmos_cubed_sphere
+src/hemco
libraries/FMS
libraries/mct
libraries/parallelio
diff --git a/Externals.cfg b/Externals.cfg
index 133bfa0561..45d8422403 100644
--- a/Externals.cfg
+++ b/Externals.cfg
@@ -3,15 +3,15 @@
#-----------------------------
[parallelio]
-tag = pio2_5_10
protocol = git
+tag = pio2_5_10
repo_url = https://github.com/NCAR/ParallelIO
local_path = libraries/parallelio
required = True
[mct]
-tag = MCT_2.11.0
protocol = git
+tag = MCT_2.11.0
repo_url = https://github.com/MCSclimate/MCT
local_path = libraries/mct
required = True
@@ -21,15 +21,15 @@ required = True
#-----------------------------
[ccs_config]
-tag = ccs_config_noresm0.0.13
protocol = git
+tag = ccs_config_noresm0.0.14
repo_url = https://github.com/NorESMhub/ccs_config_noresm.git
local_path = ccs_config
required = True
[cime]
-tag = cime6.0.105_noresm_v2
protocol = git
+tag = cime6.0.105_noresm_v4
repo_url = https://github.com/NorESMhub/cime.git
local_path = cime
required = True
@@ -39,8 +39,8 @@ required = True
#-----------------------------
[share]
-tag = share1.0.17_noresm_v1
protocol = git
+tag = share1.0.17_noresm_v1
repo_url = https://github.com/NorESMHub/NorESM_share
local_path = share
required = True
@@ -50,24 +50,24 @@ required = True
#-----------------------------
[cice6]
-tag = cesm_cice6_4_1_7_noresm_v1
protocol = git
+tag = cesm_cice6_4_1_7_noresm_v1
repo_url = https://github.com/NorESMhub/NorESM_CICE
local_path = components/cice
externals = Externals.cfg
required = True
[cdeps]
-tag = cdeps1.0.10
protocol = git
+tag = cdeps1.0.10
repo_url = https://github.com/NorESMhub/CDEPS.git
local_path = components/cdeps
externals = Externals_CDEPS.cfg
required = True
[cmeps]
-tag = cmeps0.14.32_noresm_v0
protocol = git
+tag = cmeps0.14.32_noresm_v2
repo_url = https://github.com/NorESMhub/CMEPS.git
local_path = components/cmeps
required = True
@@ -81,30 +81,30 @@ externals = Externals_CISM.cfg
required = True
[clm]
-tag = ctsm5.1.dev124-noresm_v1
protocol = git
+tag = ctsm5.1dev130-noresm_v1
repo_url = https://github.com/NorESMhub/CTSM
local_path = components/clm
externals = Externals_CLM.cfg
required = True
[mosart]
-tag = mosart1_0_48_noresm_v1
protocol = git
+tag = mosart1_0_48_noresm_v1
repo_url = https://github.com/NorESMhub/MOSART
local_path = components/mosart
required = True
[rtm]
-tag = rtm1_0_78
protocol = git
+tag = rtm1_0_78
repo_url = https://github.com/ESCOMP/RTM
local_path = components/rtm
required = True
[cam]
-local_path = .
protocol = externals_only
+local_path = .
externals = Externals_CAM.cfg
required = True
diff --git a/Externals_CAM.cfg b/Externals_CAM.cfg
index 539a9c7361..4a43ae2d5d 100644
--- a/Externals_CAM.cfg
+++ b/Externals_CAM.cfg
@@ -1,72 +1,80 @@
[chem_proc]
-local_path = chem_proc
protocol = git
-repo_url = https://github.com/ESCOMP/CHEM_PREPROCESSOR.git
tag = chem_proc5_0_05
+repo_url = https://github.com/ESCOMP/CHEM_PREPROCESSOR.git
+local_path = chem_proc
required = True
[carma]
-local_path = src/physics/carma/base
protocol = git
-repo_url = https://github.com/ESCOMP/CARMA_base.git
tag = carma4_00
+repo_url = https://github.com/ESCOMP/CARMA_base.git
+local_path = src/physics/carma/base
required = True
[cosp2]
-local_path = src/physics/cosp2/src
protocol = svn
-repo_url = https://github.com/CFMIP/COSPv2.0/tags/
tag = v2.1.4cesm/src
+repo_url = https://github.com/CFMIP/COSPv2.0/tags/
+local_path = src/physics/cosp2/src
required = True
[clubb]
-local_path = src/physics/clubb
protocol = svn
-repo_url = https://github.com/larson-group/clubb_release/tags/
tag = clubb_4ncar_20221129_59cb19f_20230330_branchtag/src/CLUBB_core
+repo_url = https://github.com/larson-group/clubb_release/tags/
+local_path = src/physics/clubb
required = True
[silhs]
-local_path = src/physics/silhs
protocol = svn
-repo_url = https://github.com/larson-group/clubb_release/tags/
tag = clubb_4ncar_20221129_59cb19f_20230330_branchtag/src/SILHS
+repo_url = https://github.com/larson-group/clubb_release/tags/
+local_path = src/physics/silhs
required = True
[pumas]
-local_path = src/physics/pumas
protocol = git
-repo_url = https://github.com/ESCOMP/PUMAS
tag = pumas_cam-release_v1.29
+repo_url = https://github.com/ESCOMP/PUMAS
+local_path = src/physics/pumas
required = True
[pumas-frozen]
-local_path = src/physics/pumas-frozen
protocol = git
-repo_url = https://github.com/ESCOMP/PUMAS
tag = pumas_cam-release_v1.17_rename
+repo_url = https://github.com/ESCOMP/PUMAS
+local_path = src/physics/pumas-frozen
required = True
[ali_arms]
-local_path = src/physics/ali_arms
protocol = git
+tag = ALI_ARMS_v1.0.1
repo_url = https://github.com/ESCOMP/ALI-ARMS
-tag = ALI_ARMS_v1.0.0
+local_path = src/physics/ali_arms
required = True
[atmos_phys]
-tag = atmos_phys0_00_011
protocol = git
+tag = atmos_phys0_00_011
repo_url = https://github.com/NCAR/atmospheric_physics
-required = True
local_path = src/atmos_phys
+required = True
[camnor_phys]
-tag = camnor_noresm_v0.0.1
protocol = git
+tag = camnor_noresm_v0.0.3
repo_url = https://github.com/NorESMhub/CAM-Nor-physics
-required = True
local_path = src/physics/camnor_phys
+required = True
+
+[hemco]
+protocol = git
+tag = hemco-cesm1_2_0_hemco3_6_2_cesm
+repo_url = https://github.com/ESCOMP/HEMCO_CESM.git
+local_path = src/hemco
+required = True
+externals = Externals_HCO.cfg
[externals_description]
-schema_version = 1.0.0
+schema_version = 1.0.01
diff --git a/bld/build-namelist b/bld/build-namelist
index 8e7ea8d2b2..efd42d4949 100755
--- a/bld/build-namelist
+++ b/bld/build-namelist
@@ -3,8 +3,7 @@
#
# build-namelist
#
-# This script builds the namelists for the standalone CAM configuration of
-# CESM.
+# This script builds the namelists for the CAM component of CESM.
#
# build-namelist is designed to be used in conjuction with configure.
# By default configure produces a config_cache.xml file that contains all
@@ -49,7 +48,7 @@ OPTIONS
-case "name" Case identifier up to 32 characters
-config "filepath" Read the given configuration cache file to determine the configuration
of the CAM executable. Default: "config_cache.xml".
- -csmdata "dir" Root directory of CCSM input data.
+ -csmdata "dir" Root directory of CESM input data.
Can also be set by using the CSMDATA environment variable.
-dir "directory" Directory where output namelist files for each component will be
written, i.e., atm_in, drv_in, ice_in, lnd_in, rof_in, and ocn_in.
@@ -93,7 +92,7 @@ EOF
(my $ProgName = $0) =~ s!(.*)/!!; # name of this script
$ProgName = "CAM $ProgName"; # Since multiple components are now using a build-namelist
# utility add "CAM" qualifier to the name. This helps when
- # looking at error output from the whole CCSM system.
+ # looking at error output from the whole CESM system.
my $ProgDir = $1; # name of directory containing this script -- may be a
# relative or absolute path, or null if the script is in
# the user's PATH
@@ -183,7 +182,7 @@ EOF
if ($print>=2) { print "Using CAM configuration cache file $opts{'config'}$eol"; }
-# Check that the CCSM inputdata root directory has been specified.
+# Check that the CESM inputdata root directory has been specified.
my $inputdata_rootdir = undef;
if (defined($opts{'csmdata'})) {
$inputdata_rootdir = $opts{'csmdata'};
@@ -192,16 +191,16 @@ elsif (defined $ENV{'CSMDATA'}) {
$inputdata_rootdir = $ENV{'CSMDATA'};
}
else {
- die "$ProgName - ERROR: CCSM inputdata root directory must be specified by either -csmdata argument\n" .
+ die "$ProgName - ERROR: CESM inputdata root directory must be specified by either -csmdata argument\n" .
" or by the CSMDATA environment variable. :";
}
-if ($print>=2) { print "CCSM inputdata root directory: $inputdata_rootdir$eol"; }
+if ($print>=2) { print "CESM inputdata root directory: $inputdata_rootdir$eol"; }
# If the -test option is specified, then the inputdata root directory must be local or nfs mounted.
if ($opts{'test'}) {
(-d $inputdata_rootdir) or die <<"EOF";
-** $ProgName - ERROR: CCSM inputdata root is not a directory: \"$inputdata_rootdir\" **
+** $ProgName - ERROR: CESM inputdata root is not a directory: \"$inputdata_rootdir\" **
EOF
}
@@ -369,7 +368,9 @@ if (defined $opts{'case'}) { add_default($nl, 'case_name', 'val'=>$opts{'case'})
# Run type
if (defined $opts{'runtype'}) { add_default($nl, 'start_type', 'val'=>$opts{'runtype'}); }
-# Process the -namelist arg.
+# Process the -namelist argument. CIME uses this argument to pass the values that have been
+# set by the compset definition via the CAM_NAMELIST_OPTS variable, along with additional
+# settings made in the buildnml script.
if (defined $opts{'namelist'}) {
# Parse commandline namelist
@@ -387,7 +388,8 @@ if (defined $opts{'namelist'}) {
$nl->merge_nl($nl_arg_valid);
}
-# Process the -infile arg.
+# Process the -infile argument. CIME uses this argument to pass the contents of the user_nl_cam
+# file, along with additional settings made in the buildnml script.
if (defined $opts{'infile'}) {
# Parse namelist input from a file
@@ -405,6 +407,11 @@ if (defined $opts{'infile'}) {
$nl->merge_nl($nl_infile_valid);
}
+# Check for user input via the user_nl_cam file which is inconsistent with settings determined by
+# the compset definition.
+
+check_user_input($nl);
+
# Process the -use_case arg.
# Declare global symbol $uc_defaults even if it's not defined, because we check whether it's
# defined before using it in the get_default_value method below.
@@ -473,10 +480,26 @@ if ($phys eq 'adiabatic') {
++$phys_mode_flags;
}
my $ideal_mode = 0;
-if ($phys eq 'kessler' or $phys eq 'held_suarez' or $phys eq 'tj2016') {
+if ($phys eq 'kessler' or $phys eq 'held_suarez' or $phys eq 'tj2016' or $phys eq 'grayrad' ) {
$ideal_mode = 1;
++$phys_mode_flags;
}
+if ($phys eq 'grayrad' ) {
+ add_default($nl, 'frierson_albedo');
+ add_default($nl, 'frierson_c0');
+ add_default($nl, 'frierson_deltas');
+ add_default($nl, 'frierson_fb');
+ add_default($nl, 'frierson_linfrac');
+ add_default($nl, 'frierson_ri_c');
+ add_default($nl, 'frierson_tau_eqtr');
+ add_default($nl, 'frierson_tau_pole');
+ add_default($nl, 'frierson_tdlt');
+ add_default($nl, 'frierson_tmin');
+ add_default($nl, 'frierson_twidth');
+ add_default($nl, 'frierson_wetdrycoef');
+ add_default($nl, 'frierson_wind_min');
+ add_default($nl, 'frierson_z0');
+}
if ($phys_mode_flags > 1) {
die "$ProgName - ERROR: Only one of the variables atm_adiabatic, atm_ideal_phys, and aqua_planet can be set .true. \n";
}
@@ -2319,18 +2342,18 @@ if (($chem =~ /_mam4/ or $chem =~ /_mam5/) and ($phys =~ /cam6/ or $phys =~ /cam
if ($chem eq 'trop_mam4' or $chem eq 'waccm_sc_mam4'or $chem eq 'ghg_mam4') {
# SOA yields (used for the interactive emissions) have been calculated based on the VBS yields in CAM-chem.
# Duseong S. Jo, et al. to be submitted to GMD, 2023 -- see https://github.com/ESCOMP/CAM/pull/727 discussion for additional detail.
- my %soae_fctrs = ('BENZENE_an_srf_file' => '3.4192D0',
- 'BENZENE_bb_srf_file' => '3.4192D0',
- 'ISOP_bb_srf_file' => '0.9058D0',
- 'MTERP_bb_srf_file' => '5.8638D0',
- 'TOLUENE_an_srf_file' => '9.4429D0',
- 'TOLUENE_bb_srf_file' => '9.4429D0',
- 'XYLENES_an_srf_file' => '7.3804D0',
- 'XYLENES_bb_srf_file' => '7.3804D0',
- 'IVOC_an_srf_file' => '8.6158D0',
- 'IVOC_bb_srf_file' => '8.6158D0',
- 'SVOC_an_srf_file' => '16.7388D0',
- 'SVOC_bb_srf_file' => '16.7388D0');
+ my %soae_fctrs = ('BENZENE_an_srf_file' => '2.5592D0',
+ 'BENZENE_bb_srf_file' => '2.5592D0',
+ 'ISOP_bb_srf_file' => '0.5954D0',
+ 'MTERP_bb_srf_file' => '5.1004D0',
+ 'TOLUENE_an_srf_file' => '8.2367D0',
+ 'TOLUENE_bb_srf_file' => '8.2367D0',
+ 'XYLENES_an_srf_file' => '6.5013D0',
+ 'XYLENES_bb_srf_file' => '6.5013D0',
+ 'IVOC_an_srf_file' => '8.5371D0',
+ 'IVOC_bb_srf_file' => '8.5371D0',
+ 'SVOC_an_srf_file' => '16.650D0',
+ 'SVOC_bb_srf_file' => '16.650D0');
foreach my $id (sort keys %soae_fctrs) {
my $rel_filepath = get_default_value($id, \%verhash);
my $abs_filepath = set_abs_filepath($rel_filepath, $inputdata_rootdir);
@@ -2413,12 +2436,12 @@ if (($chem =~ /_mam4/ or $chem =~ /_mam5/) and ($phys =~ /cam6/ or $phys =~ /cam
# MEGAN emissions
if (($chem eq 'trop_mam4' or $chem eq 'waccm_sc_mam4' or $chem eq 'ghg_mam4') and !$aqua_mode and !$scam){
- my $val = "'SOAE = 0.9058*isoprene + 5.8638*(carene_3 + pinene_a + thujene_a + bornene +',"
+ my $val = "'SOAE = 0.5954*isoprene + 5.1004*(carene_3 + pinene_a + thujene_a + bornene +',"
. "' terpineol_4 + terpineol_a + terpinyl_ACT_a + myrtenal + sabinene + pinene_b + camphene +',"
. "' fenchene_a + limonene + phellandrene_a + terpinene_a + terpinene_g + terpinolene +',"
. "' phellandrene_b + linalool + ionone_b + geranyl_acetone + neryl_acetone + jasmone +',"
. "' verbenene + ipsenol + myrcene + ocimene_t_b + ocimene_al + ocimene_c_b + 2met_nonatriene) + ',"
- . "' 13.4042*(farnescene_a + caryophyllene_b + acoradiene + aromadendrene + bergamotene_a +',"
+ . "' 12.3942*(farnescene_a + caryophyllene_b + acoradiene + aromadendrene + bergamotene_a +',"
. "' bergamotene_b + bisabolene_a + bisabolene_b + bourbonene_b + cadinene_d + cadinene_g +',"
. "' cedrene_a + copaene_a + cubebene_a + cubebene_b + elemene_b + farnescene_b +',"
. "' germacrene_B + germacrene_D + gurjunene_b + humulene_a + humulene_g + isolongifolene +',"
@@ -2854,6 +2877,23 @@ else {
}
}
+# Harmonized Emissions Component (HEMCO) options
+# Because HEMCO is configured at runtime, all of the options will be
+# present in the namelist.
+add_default($nl, 'use_hemco');
+if ($nl->get_value('use_hemco') =~ m/$TRUE/io) {
+ add_default($nl, 'cam_physics_mesh');
+ add_default($nl, 'hemco_data_root');
+ add_default($nl, 'hemco_config_file');
+ add_default($nl, 'hemco_diagn_file');
+ add_default($nl, 'hemco_grid_xdim');
+ add_default($nl, 'hemco_grid_ydim');
+ # Remove these variables if present in the namelist since they are
+ # ignored at runtime when HEMCO is used.
+ $nl->delete_variable('chem_inparm', 'ext_frc_specifier');
+ $nl->delete_variable('chem_inparm', 'srf_emis_specifier');
+}
+
# Physics options
# Add the name of the physics package based on the info in configure. If the user tries
@@ -3029,7 +3069,6 @@ if ($cfg->get('microphys') =~ /^mg/) {
add_default($nl, 'nucleate_ice_subgrid_strat');
add_default($nl, 'nucleate_ice_use_troplev');
add_default($nl, 'cld_macmic_num_steps', 'dtime'=>$dtime);
- add_default($nl, 'micro_mg_dcs');
add_default($nl, 'micro_mg_precip_frac_method');
add_default($nl, 'micro_mg_berg_eff_factor');
add_default($nl, 'nucleate_ice_incloud');
@@ -3057,6 +3096,31 @@ if ($cfg->get('microphys') =~ /^mg/) {
add_default($nl, 'micro_mg_accre_sees_auto');
add_default($nl, 'micro_mg_implicit_fall');
}
+
+ # tunings for micro_mg_dcs
+ my $microphys = $cfg->get('microphys');
+ my $hgrid = $cfg->get('hgrid');
+ my $silhs = $cfg->get('silhs');
+
+ my $micro_mg_dcs = '400.D-6'; # default for cam5/mg1
+
+ if ($microphys =~ /mg2|mg3/) {
+ if ($silhs eq '1') {
+ $micro_mg_dcs = '390.D-6'; # default for SIHLS
+ }
+ elsif ($hgrid =~ /1.9x2.5/ and $phys eq 'cam6') {
+ $micro_mg_dcs = '200.D-6'; # default for FV 2-deg
+ }
+ elsif ($phys eq 'cam6') {
+ $micro_mg_dcs = '500.D-6'; # default for cam6
+ }
+ elsif ($phys eq 'cam_dev') {
+ $micro_mg_dcs = '250.D-6'; # default for cam_dev
+ }
+ }
+
+
+ add_default($nl, 'micro_mg_dcs', 'val'=>$micro_mg_dcs);
}
# Aerosol Namelist options
@@ -3564,6 +3628,11 @@ if ($waccm_phys or
}
add_default($nl, 'gw_qbo_hdepth_scaling', 'val'=>$hdepth_scaling);
add_default($nl, 'gw_top_taper');
+} elsif ($phys =~ /cam_dev/) {
+ # cam_dev settings for nlev<60 (Other cam_dev set above)
+ add_default($nl, 'use_gw_front' , 'val'=>'.true.');
+ add_default($nl, 'use_gw_convect_dp', 'val'=>'.true.');
+ add_default($nl, 'gw_qbo_hdepth_scaling', 'val'=>'1.0D0');
} else {
add_default($nl, 'use_gw_front' , 'val'=>'.false.');
add_default($nl, 'use_gw_convect_dp', 'val'=>'.false.');
@@ -3619,6 +3688,7 @@ if ($do_gw_front_igw) {
if ($do_gw_front or $do_gw_front_igw) {
add_default($nl, 'frontgfc');
+ add_default($nl, 'front_gaussian_width');
}
if ($do_gw_convect_dp) {
@@ -3636,8 +3706,8 @@ if ($do_gw_rdg_beta) {
die "$ProgName - ERROR: beta ridge scheme requires data from a topo file.\n";
}
add_default($nl, 'n_rdg_beta', 'val'=>'10');
- add_default($nl, 'effgw_rdg_beta', 'val'=>'1.0D0');
- add_default($nl, 'effgw_rdg_beta_max', 'val'=>'1.0D0');
+ add_default($nl, 'effgw_rdg_beta');
+ add_default($nl, 'effgw_rdg_beta_max');
add_default($nl, 'trpd_leewv_rdg_beta', 'val'=>'.false.');
add_default($nl, 'rdg_beta_cd_llb', 'val'=>'1.0D0');
}
@@ -3693,7 +3763,9 @@ if (($do_gw_rdg_beta or $do_gw_rdg_gamma)) {
# use tau_0_ubc = .false. to avoid changing answers.
if ((not $waccm_phys) and
($do_gw_front or $do_gw_front_igw or
- $do_gw_convect_dp or $do_gw_convect_sh)) {
+ $do_gw_convect_dp or $do_gw_convect_sh )) {
+ add_default($nl, 'tau_0_ubc', 'val'=>'.true.');
+} elsif ($phys =~ /cam_dev/) {
add_default($nl, 'tau_0_ubc', 'val'=>'.true.');
} elsif (!$simple_phys) {
add_default($nl, 'tau_0_ubc', 'val'=>'.false.');
@@ -4299,7 +4371,7 @@ sub add_default {
#
# ***** N.B. ***** This routine assumes the following variables are in package main::
# $definition -- the namelist definition object
-# $inputdata_rootdir -- CCSM inputdata root directory
+# $inputdata_rootdir -- CESM inputdata root directory
my $nl = shift; # namelist object
my $var = shift; # name of namelist variable
@@ -4352,7 +4424,7 @@ sub add_default {
# The default values for input pathnames are relative. If the namelist
# variable is defined to be an absolute pathname, then prepend
- # the CCSM inputdata root directory.
+ # the CESM inputdata root directory.
if ($is_input_pathname eq 'abs') {
$val = set_abs_filepath($val, $inputdata_rootdir);
}
@@ -4522,6 +4594,37 @@ sub fv3_decomp_set{
#-----------------------------------------------------------------------------------------------
+sub check_user_input {
+
+# Check that user input in the user_nl_cam file is consistent with input that has been set by
+# the compset definition via CAM_NAMELIST_OPTS. This routine is called after build-namelist has
+# processed both the -namelist argument which contains the input from CAM_NAMELIST_OPTS, and
+# the -infile argument which contains input from user_nl_cam.
+#
+# Checks for specific inconsistencies are added here by CAM developers as deemed useful for
+# improving robustness of the user interface.
+
+ my $nl = shift; # namelist object
+
+ # When HEMCO is being used any emissions or external forcings specified by the
+ # srf_emis_specifier and ext_frc_specifier variables will be ignored at runtime.
+ # Check here that these variable are not set if the compset definition sets
+ # use_hemco=.true.
+
+ my $hemco = $nl->get_value('use_hemco');
+ if (defined $hemco and $hemco =~ m/$TRUE/io) {
+ if (defined $nl->get_value('srf_emis_specifier') or
+ defined $nl->get_value('ext_frc_specifier') ) {
+ die "$ProgName - ERROR: It is not allowed to set either srf_emis_specifier \n",
+ " or ext_frc_specifier when HEMCO is used.\n";
+ }
+ }
+
+
+}
+
+#-----------------------------------------------------------------------------------------------
+
sub check_input_files {
# For each variable in the namelist which is an input dataset, or contains filepaths
@@ -4687,7 +4790,7 @@ sub check_input_files {
# If $name2 starts with a slash, then it is an absolute filepath.
# If $name2 starts with a $, then it is an unresolved filepath
- # (generated when run from CCSM scripts).
+ # (generated when run from CIME scripts).
# Otherwise check for more fields
if ($name2 =~ m:^[/\$]:) {
@@ -4827,6 +4930,8 @@ sub check_snapshot_settings {
push (@validList_bc, ("'kessler_tend'"));
} elsif ($phys eq 'tj2016') {
push (@validList_bc, ("'thatcher_jablonowski_precip_tend'"));
+ } elsif ($phys eq 'grayrad') {
+ push (@validList_bc, ("'frierson_tend'"));
}
if ($chem ne 'none') {
push (@validList_bc, ("'chem_timestep_tend'"));
@@ -4945,38 +5050,6 @@ sub check_snapshot_settings {
#-----------------------------------------------------------------------------------------------
-sub strip_rootdir {
-
-# Strip a root directory from the begining of a filepath.
-# Allow for the possibility that the root directory is specified as a shell variable
-# to support a CCSM script requirement.
-
- my ($filepath, $rootdir) = @_;
-
- # Check whether the rootdir is specified as a shell variable.
- if ($rootdir =~ m/^\$(\w*)/) {
-
- my $rootname = $1;
-
- # Strip off the root directory with the following regexp that
- # avoids the problem of $rootdir being interpolated to a scalar variable
- # name...
- #$filepath =~ s:^\$$rootname::;
-
- # The CCSM scripts are currently set up to expect the shell variable in the
- # output file that contains the list of inputdata files. So in this case
- # do nothing.
-
- }
- else {
- # Strip off the rootdir specified as a resolved pathname
- $filepath =~ s:^$rootdir::;
- }
- return $filepath;
-}
-
-#-----------------------------------------------------------------------------------------------
-
sub set_abs_filepath {
# check whether the input filepath is an absolute path, and if it isn't then
diff --git a/bld/config_files/definition.xml b/bld/config_files/definition.xml
index f286a6ff29..251669792a 100644
--- a/bld/config_files/definition.xml
+++ b/bld/config_files/definition.xml
@@ -46,14 +46,22 @@ Switch to turn on analytic initial conditions for the dynamics state:
0 => no
1 => yes.
+
+Model top specifier - set by compset definition
+ lt: ~ 40 km top
+ mt: ~ 80 km top
+
Option to turn on waccmx thermosphere/ionosphere extension: 0 => no, 1 => yes
Ionosphere model used in WACCMX.
-
-Physics package: cam3, cam4, cam5, cam6, cam_dev, held_suarez, adiabatic, kessler, tj2016, spcam_sam1mom, spcam_m2005.
+
+Physics package: cam3, cam4, cam5, cam6, cam_dev, held_suarez, adiabatic, kessler, tj2016, grayrad, spcam_sam1mom, spcam_m2005.
+
+
+Switch to turn on Harmonized Emissions Component (HEMCO) for chemistry: 0 => no, 1 => yes.
Option to turn on NorESM modifications to baseline CESM/CAM physics and dynamics
diff --git a/bld/configure b/bld/configure
index 724694f850..dce056db30 100755
--- a/bld/configure
+++ b/bld/configure
@@ -90,6 +90,7 @@ OPTIONS
-max_n_rad_cnst Maximum number of constituents that are either radiatively
active, or in any single diagnostic list for the radiation.
-microphys Specify the microphysics option [mg1 | mg2 | mg3| rk].
+ -model_top Specify the model_top option [ lt | mt ].
-nadv Set total number of advected species to .
-nadv_tt Set number of advected test tracers .
-nlev Set number of levels to .
@@ -98,7 +99,7 @@ OPTIONS
-pcols Set maximum number of columns in a chunk to .
-pergro Switch enables building CAM for perturbation growth tests.
-phys Physics option [cam3 | cam4 | cam5 | cam6 | cam_dev |
- held_suarez | adiabatic | kessler | tj2016 |
+ held_suarez | adiabatic | kessler | tj2016 | grayrad |
spcam_sam1mom | spcam_m2005]. Default: cam6
-prog_species Comma-separate list of prognostic mozart species packages.
Currently available: DST,SSLT,SO4,GHG,OC,BC,CARBON16
@@ -270,6 +271,7 @@ GetOptions(
"max_n_rad_cnst=s" => \$opts{'max_n_rad_cnst'},
"mct_libdir=s" => \$opts{'mct_libdir'},
"microphys=s" => \$opts{'microphys'},
+ "model_top=s" => \$opts{'model_top'},
"mpi_inc=s" => \$opts{'mpi_inc'},
"mpi_lib=s" => \$opts{'mpi_lib'},
"nadv=s" => \$opts{'nadv'},
@@ -574,7 +576,7 @@ if ($print>=2) {
# Set flag to indicate a simple physics option
my $simple_phys = 0;
-if ($phys_pkg =~ m/^adiabatic$|^held_suarez$|^kessler$|^tj2016$/) {
+if ($phys_pkg =~ m/^adiabatic$|^held_suarez$|^kessler$|^tj2016$|^grayrad$/) {
$simple_phys = 1;
}
@@ -687,6 +689,18 @@ my $max_n_rad_cnst = $cfg_ref->get('max_n_rad_cnst');
if ($print>=2) { print "Maximum radiatively active tracers: $max_n_rad_cnst$eol"; }
+#-----------------------------------------------------------------------------------------------
+# model_top - not set by default
+my $model_top = 'none';
+$cfg_ref->set('model_top', $model_top);
+
+# user override
+if (defined $opts{'model_top'}) {
+ $cfg_ref->set('model_top', $opts{'model_top'});
+}
+if ($print>=2) { print "model_top: $model_top$eol"; }
+
+
#-----------------------------------------------------------------------------------------------
# waccm physics
my $waccm_phys = 0;
@@ -1559,6 +1573,8 @@ $nadv = $cfg_ref->get('nadv');
if ($print>=2) { print "Total advected constituents: $nadv$eol"; }
#-----------------------------------------------------------------------------------------------
+
+##-----------------------------------------------------------------------------------------------
# Makefile configuration #######################################################################
#-----------------------------------------------------------------------------------------------
@@ -1913,9 +1929,20 @@ if ($silhs == 1) {
$cfg_cppdefs .= ' -DSILHS';
}
+# Simple Models
+if ($simple_phys) { $cfg_cppdefs .= ' -DSIMPLE'; }
+
# UNICON
if ($unicon) { $cfg_cppdefs .= ' -DUSE_UNICON'; }
+# Harmonized Emissions Component (HEMCO)
+# These CPP definitions are used by HEMCO to recognize -
+# MODEL_ - HEMCO/GEOS-Chem components running in model environment
+# MODEL_CESM - ...within CESM
+# USE_REAL8 - HEMCO/GEOS-Chem should use real8 internal precision
+# HEMCO_CESM - indicates CESM model environment. Deprecated, will be removed soon.
+$cfg_cppdefs .= ' -DMODEL_ -DMODEL_CESM -DHEMCO_CESM -DUSE_REAL8 ';
+
#-----------------------------------------------------------------------------------------------
# CPP defines to put on Makefile
@@ -2125,6 +2152,21 @@ sub write_filepath
print $fh "$camsrcdir/src/ionosphere\n";
print $fh "$camsrcdir/src/chemistry/mozart\n";
+
+ print $fh "$camsrcdir/src/hemco\n";
+
+ # shared dependencies for HEMCO (Harmonized Emissions Component)
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Shared\n";
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Shared/Headers\n";
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Shared/GeosUtil\n";
+ print $fh "$camsrcdir/src/hemco/HEMCO/src/Shared/NcdfUtil\n";
+
+ # HEMCO source code directory paths from HEMCO external
+ 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";
+
+
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 0db8c5b711..6eb81ca2e8 100644
--- a/bld/namelist_files/namelist_defaults_cam.xml
+++ b/bld/namelist_files/namelist_defaults_cam.xml
@@ -78,6 +78,7 @@
atm/cam/inic/fv/f.e22.FC2010climo.f09_f09_mg17.cam6_2_022.001.cam.i.0016-01-01-00000_c200610.nc
atm/cam/inic/fv/f.e22.FC2010climo.f09_f09_mg17.cam6_2_022.001.cam.i.0016-01-01-00000_c200610.nc
atm/cam/inic/fv/f.e22.FC2010climo.f09_f09_mg17.cam6_2_022.001.cam.i.0016-01-01-00000_c200610.nc
+atm/cam/inic/fv/FC2000mam5_f10_0002-01-01_c221214.nc
atm/cam/inic/fv/cami-mam3_0000-01-01_0.9x1.25_L32_c141031.nc
atm/cam/inic/fv/cami-mam3_0000-01-01_1.9x2.5_L32_c150407.nc
atm/cam/inic/fv/cami-mam4_0000-01-01_10x15_L32_c170914.nc
@@ -123,10 +124,9 @@
atm/cam/inic/se/f.e22.FCnudged.ne0CONUSne30x8_ne0CONUSne30x8_mt12.cam6_2_032.002.cam.i.2013-01-01-00000_c200623.nc
atm/cam/inic/se/f.e22.FCnudged.ne30_ne30_mg17.release-cesm2.2.0_spinup.2010_2020.001.cam.i.2011-01-01-00000_L58_c220310.nc
atm/cam/inic/se/FCMTHIST_ne30pg3_1980-01-01_c221214.nc
-atm/cam/inic/fv/FC2000mam5_f10_0002-01-01_c221214.nc
-atm/cam/inic/se/FWsc_ne30pg3_58L_GRID_48_taperstart10km_lowtop_BL10_v3_beta1p75_Top_43km.nc
-atm/cam/inic/se/L93_ne30pg3_ne30pg3_mg17_450_short.cam.i.1979-01-07-00000.nc
+atm/cam/inic/se/FLT_L58_ne30pg3_IC_c220623.nc
+atm/cam/inic/se/cam7_FMT_ne30pg3_mg17_L93_c221118.nc
atm/cam/chem/trop_mozart/ic/cami_0000-09-01_4x5_L26_c060217.nc
atm/cam/chem/trop_mozart/ic/cami_0000-09-01_10x15_L26_c060216.nc
@@ -217,8 +217,13 @@
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/se/cam6_QPC6_topo_ne3pg3_mg37_L32_01-01-31_c221214.nc
+atm/cam/inic/se/cam6_QPC6_topo_ne3pg3_mg37_L58_01-01-31_c221214.nc
+atm/cam/inic/se/cam6_QPC6_topo_ne3pg3_mg37_L93_01-01-31_c221214.nc
atm/cam/inic/homme/cami-mam3_0000-01_ne5np4_L30.140707.nc
+atm/cam/inic/se/F2000climo_ne5pg3_mg37_L32_01-01-31_c230520.nc
+atm/cam/inic/se/F2000climo_ne5pg3_mg37_L58_01-01-31_c230520.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
@@ -236,6 +241,9 @@
atm/cam/inic/homme/cami-mam3_0000-01-ne240np4_L30_c111004.nc
+atm/cam/inic/se/cam6_QPC6_aqua_ne3pg3_mg37_L32_01-01-31_c221214.nc
+atm/cam/inic/se/cam6_QPC6_aqua_ne3pg3_mg37_L58_01-01-31_c221214.nc
+atm/cam/inic/se/cam6_QPC6_aqua_ne3pg3_mg37_L93_01-01-31_c221214.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
@@ -361,6 +369,24 @@
held_suarez_1994
moist_baroclinic_wave_dcmip2016
moist_baroclinic_wave_dcmip2016
+ moist_baroclinic_wave_dcmip2016
+
+
+
+ 1.0d-5
+ 3.21d-5
+ 1.0d0
+ 0.1d0
+ 0.310d0
+ 1.4d0
+ 6.0d0
+ 1.5d0
+ 0.1d0
+ 1.d7
+ 1.d0
+ 271.d0
+ 39.d0
+ 26.d0
@@ -691,6 +717,7 @@
3.00D-15
7.5D-16
3.0D-15
+ 30.D0
@@ -705,6 +732,8 @@
0.7D0
0.4D0
+0.30D0
+0.70D0
0.55D0
0.5D0
0.5D0
@@ -713,8 +742,17 @@
0.5D0
0.5D0
0.5D0
+
0.0625D0
+1.0D0
+0.5D0
+0.5D0
+
+1.0D0
+0.5D0
+0.5D0
+
0.03D0
@@ -745,9 +783,8 @@
.true.
.true.
.true.
-.true.
-.false.
-.false.
+.true.
+.false.
.false.
.false.
.false.
@@ -797,15 +834,15 @@
320x385
-atm/cam/coords/fv0.47x0.63_esmf_c210305.nc
-atm/cam/coords/fv0.9x1.25_esmf_c210305.nc
-atm/cam/coords/fv1.9x2.5_esmf_200428.nc
-atm/cam/coords/fv4x5_esmf_c210305.nc
-atm/cam/coords/ne5np4_esmf_20191204.nc
-atm/cam/coords/ne5np4.pg3_esmf_mesh_c210121.nc
-atm/cam/coords/ne16np4_esmf_c210305.nc
-atm/cam/coords/ne30np4_esmf_c210305.nc
-atm/cam/coords/ne30pg3_esmf_20200428.nc
+atm/cam/coords/fv0.47x0.63_esmf_c210305.nc
+atm/cam/coords/fv0.9x1.25_esmf_c210305.nc
+atm/cam/coords/fv1.9x2.5_esmf_200428.nc
+atm/cam/coords/fv4x5_esmf_c210305.nc
+atm/cam/coords/ne5np4_esmf_20191204.nc
+atm/cam/coords/ne5np4.pg3_esmf_mesh_c210121.nc
+atm/cam/coords/ne16np4_esmf_c210305.nc
+atm/cam/coords/ne30np4_esmf_c210305.nc
+atm/cam/coords/ne30pg3_esmf_20200428.nc
1.00D0
@@ -1859,8 +1896,10 @@
atm/cam/chem/trop_mam/atmsrf_ne3np4.pg3_cdf5_c221214.nc
+atm/cam/chem/trop_mam/atmsrf_ne5pg3_201105.nc
atm/cam/chem/trop_mam/atmsrf_ne5np4_cdf5_110920.nc
atm/cam/chem/trop_mam/atmsrf_ne16np4_cdf5_110920.nc
+atm/cam/chem/trop_mam/atmsrf_ne16pg3_c230520.nc
atm/cam/chem/trop_mam/atmsrf_ne30np4_cdf5_110920.nc
atm/cam/chem/trop_mam/atmsrf_ne30pg3_cdf5_180522.nc
atm/cam/chem/trop_mam/atmsrf_ne60np4_110920.nc
@@ -1995,6 +2034,7 @@
6.0
1.0
0.5
+ 0.1
0.5
4.2
0.0
@@ -2013,6 +2053,7 @@
1.25
0.25
0.3
+ 0.1
0.3
0.0
0.4
@@ -2023,7 +2064,7 @@
.true.
.false.
0.308
- 0.280
+ 0.280
0.270
0.32
2
@@ -2047,10 +2088,11 @@
.true.
.true.
.true.
- .false.
- .false.
+ .true.
+ .true.
.false.
.false.
+ .true.
.false.
.false.
.false.
@@ -2145,21 +2187,13 @@
1
0
1
- 400.D-6
-
- 2
- 0
- 1
- 500.D-6
- 390.D-6
- 200.D-6
-
- 3
- 0
- 1
- 500.D-6
- 390.D-6
- 200.D-6
+ 2
+ 0
+ 1
+
+ 3
+ 0
+ 1
.false.
.true.
@@ -2190,6 +2224,7 @@
1.D0
1.D0
+ 2.5D0
0.2D0
@@ -2199,7 +2234,7 @@
25.D-6
1.D0
- 1.D0
+ 0.5D0
1.D0
1.D0
@@ -2334,7 +2369,7 @@
0.55D0
0.22D0
0.70D0
-0.70D0
+0.80D0
0.8D0
0.8D0
0.8D0
@@ -2370,13 +2405,14 @@
-1.35D0
-1.62D0
-0.90D0
-1.00D0
-1.10D0
-1.2D0
-0.60D0
+1.35D0
+1.62D0
+0.90D0
+1.00D0
+1.5D0
+1.10D0
+1.2D0
+0.60D0
1.0D0
@@ -2925,6 +2961,7 @@
1
3
1
+ 1
0
0
-10
@@ -2980,12 +3017,12 @@
3.22D0
- 3
- 2
- 4
- 4
- 3
- 1
+ 3
+ 2
+ 4
+ 4
+ 3
+ 1
1
20
@@ -3012,9 +3049,9 @@
-1
- 1.25e5
- 1.0e6
- 1.0e6
+ 1.25e5
+ 1.0e6
+ 1.0e6
0.0
1.0
@@ -3034,18 +3071,18 @@
2
1
- 3
- 5
- 3
- 5
- 3
- 10
+ 3
+ 5
+ 3
+ 5
+ 3
+ 10
7
3
4
- 6
+ 6
3
-1
@@ -3140,6 +3177,16 @@
+
+ 'O3S_Loss = 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 + S_O3'
+
+
+ 'O3S_Loss = 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 + S_O3',
+ 'SolIonRate_Tot = jeuv_1 + jeuv_2 + jeuv_3 + jeuv_4 + jeuv_5 + jeuv_6 + jeuv_7 + jeuv_8 + jeuv_9 + jeuv_10 + jeuv_11 + ',
+ 'jeuv_14 + jeuv_15 + jeuv_16 + jeuv_17 + jeuv_18 + jeuv_19 + jeuv_20 + jeuv_21 + jeuv_22 + jeuv_23',
+
'O3_Prod = NO_HO2 + CH3O2_NO + HOCH2OO_NO + C2H5O2_NO + CH3CO3_NO + EO2_NO + C3H7O2_NO + PO2_NO + ',
'RO2_NO + ENEO2_NO + MACRO2_NOa + jhonitr + ',
@@ -3291,4 +3338,31 @@
' C3H6_O3 + ISOP_O3 + MVK_O3 + MACR_O3 + MTERP_O3 + BCARY_O3 + S_O3 + SO_O3'
+
+.false.
+atm/cam/geoschem/emis/ExtData/HEMCO
+atm/cam/geoschem/emis/HEMCO_Config.CC.CEDS_AEIC19.NEx.c230615.rc
+atm/cam/geoschem/emis/HEMCO_Diagn.3_5_0.c230307.rc
+-1
+
+
+144
+91
+
+
+576
+361
+
+
+288
+201
+
+
+288
+201
+
+
+144
+91
+
diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml
index 14a8864857..3ba59737e0 100644
--- a/bld/namelist_files/namelist_definition.xml
+++ b/bld/namelist_files/namelist_definition.xml
@@ -54,6 +54,122 @@
that have only a small number of allowed values.
-->
+
+
+
+ Minimum Wind Threshold for surface flux calculations which is
+ added to avoid possible cases that would result in a division by zero.
+ Default: 1.0d-5
+
+
+
+ Surface Roughness Length for surface drag calculation.
+ Default: 3.21d-5
+
+
+
+ Critical Richardson Number for stable mixing cutoff.
+ Default: 1.0
+
+
+
+ Surface Layer Fraction of boundary layer depth.
+ The prescribed fraction of the boundary layer depth
+ for surface interactions.
+ Default: 0.1
+
+
+
+ Frierson Albedo: Frierson's Net Solar Flux=> 938.4 = 1360*(1.-0.31)
+ The Frierson model prescribes a net solar flux which incorporated the
+ effects of albedo. Rather than adhering to this formulation, the net
+ solar flux is obtained by a more common practice of specifying an albedo
+ value. For the approximate (simple) solar flux of 1360 W m-2, the albedo
+ value of 0.31 yields the value used by Frierson.
+ Default: 0.31
+
+
+
+ Latitudinal Variation of Shortwave Radiation.
+ Shortwave radiation contains no seasonal/diurnal variations and has a
+ Latitudinal variation specified by DeltaS according to:
+ R_solar = (R_net/4)*[1 + DeltaS*P_2(Lat)]
+ where P_2 is the second Legendre polynomial.
+ Default: 1.4
+
+
+
+ Longwave Optical Depth at Equator.
+ The optical depths are specified as a function of Latitude to approximate
+ the effects of water vapor according to:
+ Tau_0 = Tau_eqtr + (Tau_pole - Tau_eqtr)*sin^2(Lat)
+ Default: 6.0
+
+
+
+ Longwave Optical Depth at Poles.
+ The optical depths are specified as a function of Latitude to approximate
+ the effects of water vapor according to:
+ Tau_0 = Tau_eqtr + (Tau_pole - Tau_eqtr)*sin^2(Lat)
+ Default: 1.5
+
+
+
+ Linear Optical Depth Parameter for stratosphere.
+ The pressure dependence of optical depths that approximate the effects of
+ water vapor varies according to:
+ Tau = Tau_0*[ LinFrac*(P/P_s) + (1-LinFrac)*(P/P_s)^4 ]
+ Default: 0.1
+
+
+
+ Ocean Mixed-Layer Heat Capacity.
+ The ocean surface is a slab mixed layer with a specified heat capacity in units of J K-1 m-2
+ Default: 1.e7
+
+
+
+ Scale Factor for E0 (saturation vapor pressure) to contol wet/dry experiments.
+ WetDryCoef=0 corresponds to the atmosphere in the dry limit.
+ Friersons wet limit corresponds to WetDryCoef=10.
+ Default: 1.
+
+
+
+ Tsrf Initial Condition: Minimum SST (K).
+ The ocean temperatures are initailized with the values:
+ T_s = Tmin + Tdlt*exp[-0.5*(Lat/Twidth)^2]
+ Default: 271.
+
+
+
+ Tsrf Initial Condition: Equator-Pole SST difference (K).
+ The ocean temperatures are initailized with the values:
+ T_s = Tmin + Tdlt*exp[-0.5*(Lat/Twidth)^2]
+ Default: 39.
+
+
+
+ Tsrf Initial Condition: Latitudinal width parameter for sst (degrees latitude)
+ The ocean temperatures are initailized with the values:
+ T_s = Tmin + Tdlt*exp[-0.5*(Lat/Twidth)^2]
+ Default: 26.
+
+
+
+Width of gaussian used to create frontogenesis tau profile [m/s].
+Default: set by build-namelist.
+
+
Full pathname of Beres lookup table data file for gravity waves sourced
@@ -2830,7 +2952,7 @@ Default: .false.
Heterogeneous freezing scaling factor for black carbon aerosols.
-Default: 0.0
+Default: 0.01
+ group="phys_ctl_nl" valid_values="cam3,cam4,cam5,cam6,adiabatic,held_suarez,kessler,frierson" >
Name of the CAM physics package. 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.
@@ -4798,6 +4920,14 @@ cache file to be consistent with how CAM was built.
Default: set by build-namelist
+
+If TRUE then the Harmonized Emissions Component, HEMCO, will be used
+to calculate emissions in chemistry. ext_frc_specifier and srf_emis_specifier
+will be ignored.
+Default: FALSE
+
+
Runtime options of upper thermosphere WACCM-X. 'ionosphere' for
@@ -4929,6 +5059,45 @@ List of full pathnames of LTR electic potential inputs for both hemispheres.
Default: NONE.
+
+
+Full pathname of HEMCO data root for use in reading HEMCO input files.
+(e.g., '$DIN_LOC_ROOT/atm/cam/geoschem/emis/ExtData/HEMCO').
+Default: set by build-namelist.
+
+
+
+Full pathname of the HEMCO_Config.rc input file used to configure HEMCO.
+Default: set by build-namelist.
+
+
+
+Full pathname of the HEMCO_Diagn.rc input file used to configure HEMCO diagnostics.
+Default: set by build-namelist.
+
+
+
+Number of x-dimensions in HEMCO internal grid.
+Default: set by build-namelist.
+
+
+
+Number of y-dimensions in HEMCO internal grid.
+Default: set by build-namelist.
+
+
+
+Force emission year for HEMCO clock if positive. This will force cycling of data on this year.
+Default: set by build-namelist for climo cases, otherwise -1 to use model clock.
+
+
+
18500101
FIXED
-
-atm/cam/inic/se/FWsc_ne30pg3_58L_GRID_48_taperstart10km_lowtop_BL10_v3_beta1p75_Top_43km.nc
-
atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
1850
diff --git a/bld/namelist_files/use_cases/1850_cam_mt.xml b/bld/namelist_files/use_cases/1850_cam_mt.xml
index 67049703f3..5a535f27be 100644
--- a/bld/namelist_files/use_cases/1850_cam_mt.xml
+++ b/bld/namelist_files/use_cases/1850_cam_mt.xml
@@ -6,9 +6,6 @@
18500101
FIXED
-
-atm/cam/inic/se/L93_ne30pg3_ne30pg3_mg17_450_short.cam.i.1979-01-07-00000.nc
-
atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
1850
diff --git a/bld/namelist_files/use_cases/2000_cam4_trop_chem.xml b/bld/namelist_files/use_cases/2000_cam4_trop_chem.xml
index 3d96dd4c48..a47840883e 100644
--- a/bld/namelist_files/use_cases/2000_cam4_trop_chem.xml
+++ b/bld/namelist_files/use_cases/2000_cam4_trop_chem.xml
@@ -63,7 +63,7 @@
'C10H16', 'TERPO2', 'TERPOOH', 'TOLUENE', 'CRESOL', 'TOLO2', 'TOLOOH', 'XOH', 'BIGALD', 'GLYOXAL', 'PAN',
'ONIT', 'MPAN', 'ISOPNO3', 'ONITR', 'CB1', 'CB2', 'OC1', 'OC2', 'SOA', 'SO2', 'SO4', 'DMS', 'NH3', 'NH4', 'NH4NO3',
'SSLT01', 'SSLT02', 'SSLT03', 'SSLT04', 'DST01', 'DST02', 'DST03', 'DST04', 'Rn', 'Pb','HCN','CH3CN',
- 'SFNO','SFNO2','SFCO','SFBIGALK','SFBIGENE','SFC10H16','SFC2H4','SFC2H5OH','SFC2H6','SFC3H6','SFC3H8',
+ 'SFNO','SFCO','SFBIGALK','SFBIGENE','SFC10H16','SFC2H4','SFC2H5OH','SFC2H6','SFC3H6','SFC3H8',
'SFCH2O','SFCH3CHO','SFCH3COCH3','SFCH3OH','SFDMS','SFISOP','SFMEK','SFNH3',
'SFCB1','SFCB2','SFOC1','SFOC2','SFSO2','SFTOLUENE','SFHCN','SFCH3CN',
'DV_HCN','DV_CH3CN','WD_HCN','WD_CH3CN','WD_SO2','WD_HNO3','WD_H2O2','WD_CH2O',
diff --git a/bld/namelist_files/use_cases/2000_cam6.xml b/bld/namelist_files/use_cases/2000_cam6.xml
index fef59dc7d3..05d019beb2 100644
--- a/bld/namelist_files/use_cases/2000_cam6.xml
+++ b/bld/namelist_files/use_cases/2000_cam6.xml
@@ -63,20 +63,23 @@
'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_so4_a1_anthro-ag-ship_surface_2000climo_0.9x1.25_c20170616.nc',
'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_so4_a1_bb_surface_2000climo_0.9x1.25_c20170322.nc',
'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_so4_a2_anthro-res_surface_2000climo_0.9x1.25_c20170616.nc',
- 'SOAE -> 4.4323D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_BENZENE_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 4.4323D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_BENZENE_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 1.2021D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_ISOP_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 6.6625D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_MTERP_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 9.9042D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_TOLUENE_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 9.9042D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_TOLUENE_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 8.3792D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_XYLENES_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 8.3792D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_XYLENES_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 8.6865D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_IVOC_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 8.6865D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_IVOC_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 16.8188D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_SVOC_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 16.8188D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_SVOC_bb_surface_2000climo_0.9x1.25_c20170322.nc'
+ 'SOAE -> 2.5592D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_BENZENE_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 2.5592D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_BENZENE_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 0.5954D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_ISOP_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 5.1004D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_MTERP_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 8.2367D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_TOLUENE_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 8.2367D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_TOLUENE_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 6.5013D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_XYLENES_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 6.5013D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_XYLENES_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 8.5371D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_IVOC_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 8.5371D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_IVOC_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 16.650D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_SVOC_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 16.650D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_SVOC_bb_surface_2000climo_0.9x1.25_c20170322.nc'
+
+2000
+
'atm/waccm/lb/LBC_2000climo_CMIP6_0p5degLat_c180227.nc'
'CO2','CH4','N2O','CFC11eq','CFC12'
'CYCLICAL'
diff --git a/bld/namelist_files/use_cases/2000_trop_strat_vbs_cam6.xml b/bld/namelist_files/use_cases/2000_trop_strat_vbs_cam6.xml
index d00387437c..2ba0c53847 100644
--- a/bld/namelist_files/use_cases/2000_trop_strat_vbs_cam6.xml
+++ b/bld/namelist_files/use_cases/2000_trop_strat_vbs_cam6.xml
@@ -128,6 +128,9 @@
'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_so4_a2_anthro-res_surface_2000climo_0.9x1.25_c20170616.nc'
+
+2000
+
'noy', 'nhx'
@@ -148,7 +151,7 @@
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
+ 'CFC11STAR', 'AODDUST', 'AODDUST02', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO',
'CH3CL', 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113', 'CFC12',
@@ -180,8 +183,8 @@
'SAD_SULFC', 'SAD_TROP', 'SAD_AERO', 'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C',
'HNO3_GAS', 'HNO3_STS', 'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY',
'BROX', 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB', 'AODVISdn', 'AODdnMODE1', 'AODVISstdn', 'AODNIRstdn',
- 'AODUVstdn', 'AODdnMODE2', 'AODdnMODE3', 'AODdnDUST1', 'AODdnDUST2', 'AODdnDUST3', 'AODVISstdn', 'AODUVstdn', 'AODNIRstdn',
+ 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB', 'AODVISdn', 'AODdn_aitken', 'AODVISstdn', 'AODNIRstdn',
+ 'AODUVstdn', 'AODdn_accum', 'AODdn_coarse', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODVISstdn', 'AODUVstdn', 'AODNIRstdn',
'AODNIRstdn', 'AODVISdn', 'AODUVdn', 'EXTINCTdn', 'EXTxASYMdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', '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_CH3COCHO', 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3COCH3', 'WD_CH3OH', 'WD_CH3OOH', 'WD_CLONO2', 'WD_COF2', 'WD_COFCL',
diff --git a/bld/namelist_files/use_cases/2010_cam6.xml b/bld/namelist_files/use_cases/2010_cam6.xml
index f0adab0c26..239f5436f6 100644
--- a/bld/namelist_files/use_cases/2010_cam6.xml
+++ b/bld/namelist_files/use_cases/2010_cam6.xml
@@ -58,20 +58,23 @@
'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_so4_a1_anthro-ag-ship_surface_2010climo_0.9x1.25_c20180918.nc',
'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_so4_a1_bb_surface_2010climo_0.9x1.25_c20180918.nc',
'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_so4_a2_anthro-res_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 4.4323D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_BENZENE_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 4.4323D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_BENZENE_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 1.2021D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_ISOP_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 6.6625D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_MTERP_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 9.9042D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_TOLUENE_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 9.9042D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_TOLUENE_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 8.3792D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_XYLENES_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 8.3792D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_XYLENES_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 8.6865D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_IVOC_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 8.6865D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_IVOC_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 16.8188D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_SVOC_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 16.8188D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_SVOC_bb_surface_2010climo_0.9x1.25_c20180918.nc'
+ 'SOAE -> 2.5592D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_BENZENE_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 2.5592D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_BENZENE_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 0.5954D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_ISOP_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 5.1004D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_MTERP_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 8.2367D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_TOLUENE_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 8.2367D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_TOLUENE_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 6.5013D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_XYLENES_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 6.5013D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_XYLENES_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 8.5371D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_IVOC_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 8.5371D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_IVOC_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 16.650D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_SVOC_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 16.650D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_SVOC_bb_surface_2010climo_0.9x1.25_c20180918.nc'
+
+2010
+
CYCLICAL
2010
diff --git a/bld/namelist_files/use_cases/2010_trop_strat_vbs_cam6.xml b/bld/namelist_files/use_cases/2010_trop_strat_vbs_cam6.xml
index ebc15d2115..1000976390 100644
--- a/bld/namelist_files/use_cases/2010_trop_strat_vbs_cam6.xml
+++ b/bld/namelist_files/use_cases/2010_trop_strat_vbs_cam6.xml
@@ -319,6 +319,9 @@
'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/ne30pg3/2010climo/emissions-cmip6_so4_a2_anthro-res_surface_mol_2010climo_ne30pg3_c20200224.nc'
+
+2010
+
'noy', 'nhx'
@@ -339,7 +342,7 @@
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
+ 'CFC11STAR', 'AODDUST', 'AODDUST02', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO',
'CH3CL', 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113', 'CFC12',
@@ -371,8 +374,8 @@
'SAD_SULFC', 'SAD_TROP', 'SAD_AERO', 'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C',
'HNO3_GAS', 'HNO3_STS', 'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY',
'BROX', 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB', 'AODVISdn', 'AODdnMODE1', 'AODVISstdn', 'AODNIRstdn',
- 'AODUVstdn', 'AODdnMODE2', 'AODdnMODE3', 'AODdnDUST1', 'AODdnDUST2', 'AODdnDUST3', 'AODVISstdn', 'AODUVstdn', 'AODNIRstdn',
+ 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB', 'AODVISdn', 'AODdn_aitken', 'AODVISstdn', 'AODNIRstdn',
+ 'AODUVstdn', 'AODdn_accum', 'AODdn_coarse', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODVISstdn', 'AODUVstdn', 'AODNIRstdn',
'AODNIRstdn', 'AODVISdn', 'AODUVdn', 'EXTINCTdn', 'EXTxASYMdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', '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_CH3COCHO', 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3COCH3', 'WD_CH3OH', 'WD_CH3OOH', 'WD_CLONO2', 'WD_COF2', 'WD_COFCL',
diff --git a/bld/namelist_files/use_cases/dctest_frierson.xml b/bld/namelist_files/use_cases/dctest_frierson.xml
new file mode 100644
index 0000000000..340052bc84
--- /dev/null
+++ b/bld/namelist_files/use_cases/dctest_frierson.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+0.
+0.
+0.
+fixed_parameters
+
+
+.false.
+
+
+.true.
+-720
+'A'
+
+
+ 'U:A','T:A','V:A','Q:A','Z3:A','PRECL:A','PRECC:A','PS:A','SST:A','TS:A', 'gray_DTCOND', 'gray_DQCOND', 'gray_EVAPDT', 'gray_EVAPDQ', 'gray_PRECL' , 'gray_PRECC' , 'gray_Tsurf' , 'gray_Qsurf' , 'gray_Cdrag' , 'gray_Zpbl' , 'gray_KVH' , 'gray_KVM' , 'gray_VSE' , 'gray_Zm' , 'gray_Rf' , 'gray_DTV' , 'gray_DUV' , 'gray_DVV' , 'gray_VD01' , 'gray_SHflux', 'gray_LHflux', 'gray_TauU' , 'gray_TauV' , 'gray_QRL' , 'gray_QRS' , 'gray_SWflux', 'gray_LUflux', 'gray_LDflux', 'gray_LWflux', 'gray_LUflux_TOA', 'gray_LDflux_TOA', 'gray_LWflux_TOA'
+
+
+'moist_baroclinic_wave_dcmip2016'
+
+atm/cam/inic/fv/FGRAYRAD_f19.cam.i.0051-01-01-00000_c20230510.nc
+
+
+ 'TT_SLOT','TT_GBALL','TT_TANH','TT_EM8','TT_Y2_2','TT_Y32_16'
+
+
+
diff --git a/bld/namelist_files/use_cases/hist_cam_lt.xml b/bld/namelist_files/use_cases/hist_cam_lt.xml
index 577610275c..81834955c3 100644
--- a/bld/namelist_files/use_cases/hist_cam_lt.xml
+++ b/bld/namelist_files/use_cases/hist_cam_lt.xml
@@ -6,9 +6,6 @@
atm/cam/solar/SolarForcingCMIP6_18491230-23000102_c20200615.nc
-
-atm/cam/inic/se/FWsc_ne30pg3_58L_GRID_48_taperstart10km_lowtop_BL10_v3_beta1p75_Top_43km.nc
-
atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'SERIAL'
diff --git a/bld/namelist_files/use_cases/hist_cam_mt.xml b/bld/namelist_files/use_cases/hist_cam_mt.xml
index 08c53aa595..c100cc6e85 100644
--- a/bld/namelist_files/use_cases/hist_cam_mt.xml
+++ b/bld/namelist_files/use_cases/hist_cam_mt.xml
@@ -6,9 +6,6 @@
atm/cam/solar/SolarForcingCMIP6_18491230-23000102_c20200615.nc
-
-atm/cam/inic/se/L93_ne30pg3_ne30pg3_mg17_450_short.cam.i.1979-01-07-00000.nc
-
atm/waccm/lb/LBC_17500116-20150116_CMIP6_0p5degLat_c180905.nc
'SERIAL'
diff --git a/bld/namelist_files/use_cases/hist_trop_strat_nudged_cam6.xml b/bld/namelist_files/use_cases/hist_trop_strat_nudged_cam6.xml
index 2875336285..ff2a92b3ef 100644
--- a/bld/namelist_files/use_cases/hist_trop_strat_nudged_cam6.xml
+++ b/bld/namelist_files/use_cases/hist_trop_strat_nudged_cam6.xml
@@ -16,16 +16,116 @@
.false.
0.25D0
+
SERIAL
-atm/waccm/lb/LBC_1750-2014_CMIP6_0p5degLat_c170126.nc
+atm/waccm/lb/LBC_17500116-25001216_CMIP6_SSP585_0p5degLat_c20200824.nc
SERIAL
+2.70D0
+ 0.38D0
+ 'SERIAL'
+
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',
+ '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'
@@ -87,14 +187,14 @@
0, -24
'A', 'A'
- 1, 1
- 0, 0
-'A', 'A'
+ 1, 1
+ 0, 0
+'A', 'A'
.true.
.false.
.false.
-.false.
+.true.
.false.
.false.
.false.
@@ -102,236 +202,51 @@
.false.
-
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
- 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO',
- 'CH3CL', 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
- 'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113', 'CFC12',
- 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3OH', 'CH4',
- 'CO', 'H2O2', 'HCFC22', 'HCN', 'HNO3', 'ISOP', 'MTERP', 'N2O', 'O3', 'O3S',
- 'PAN', 'SO2', 'TOLUENE', 'OH', 'ALKNIT', 'ALKOOH', 'BCARY', 'BENZENE', 'BENZOOH',
- 'BEPOMUC', 'BIGALD', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALK', 'BIGENE', 'BR',
- 'BRCL', 'BRO', 'BRONO2', 'BRY', 'BZALD', 'BZOOH', 'C2H2', 'C2H4', 'C2H5OH',
- 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7OOH', 'C3H8', 'C6H5OOH', 'CCL4', 'CF2CLBR', 'CF3BR',
- 'CFC11', 'CFC113', 'CFC114', 'CFC115', 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3',
- 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3COCHO', 'CH3COOH', 'CH3COOOH', 'CH3OH', 'CH3OOH',
- 'CH4', 'CHBR3', 'CL', 'CL2', 'CL2O2', 'CLO', 'CLONO2', 'CLY', 'CO',
- 'CO2', 'COF2', 'COFCL', 'CRESOL', 'DMS', 'EOOH', 'F', 'GLYALD', 'GLYOXAL',
- 'H', 'H2', 'H2402', 'H2O2', 'H2SO4', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22',
- 'HCL', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HO2NO2', 'HOBR', 'HOCL', 'HONITR',
- 'HPALD', 'HYAC', 'HYDRALD', 'IEPOX', 'ISOP', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3', 'ISOPNOOH',
- 'ISOPOOH', 'IVOC', 'MACR', 'MACROOH', 'MEK', 'MEKOOH', 'MPAN', 'MTERP', 'MVK',
- 'N', 'N2O', 'N2O5', 'NC4CH2OH', 'NC4CHO', 'NH3', 'NH4', 'NO',
- 'NO2', 'NO3', 'NOA', 'NTERPOOH', 'O', 'OCLO',
- 'OCS', 'ONITR', 'PAN', 'PBZNIT', 'PHENO', 'PHENOL', 'PHENOOH', 'POOH', 'ROOH',
- 'S', 'SF6', 'SO', 'SO2', 'SO3', 'SOAG0', 'SOAG1', 'SOAG2', 'SOAG3',
- 'SOAG4', 'SVOC', 'TEPOMUC', 'TERP2OOH', 'TERPNIT', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TOLOOH',
- 'TOLUENE', 'XOOH', 'XYLENES', 'XYLENOOH', 'XYLOL', 'XYLOLOOH', 'NHDEP', 'NDEP', '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', 'H2O', 'SAD_ICE', 'SAD_LNAT',
- 'SAD_SULFC', 'SAD_TROP', 'SAD_AERO', 'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C',
- 'HNO3_GAS', 'HNO3_STS', 'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY',
- 'BROX', 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- '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_ALKNIT', 'WD_ALKOOH',
- 'WD_BENZOOH', 'WD_BRONO2', 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO',
- 'WD_CH3CN', 'WD_CH3COCHO', 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3COCH3', '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', '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',
- 'dry_deposition_NHx_as_N', 'DF_NH3', 'DF_NH4', 'DF_NO', 'DF_NO2', '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', 'dry_deposition_NOy_as_N', 'SO2_CLXF', 'SO2_XFRC', 'SVOC_CLXF', 'CO_CLXF', 'NO2_CLXF', 'LNO_PROD',
- 'LNO_COL_PROD', 'SFISOP', 'SFMTERP', 'SFBCARY', 'SFCH3OH', 'SFC2H5OH', 'SFCH3CHO', 'SFMEK', 'SFHCN',
- 'SFCH3CN', 'SFCH2O', 'SFC2H6', 'SFC3H8', 'SFC2H4', 'SFC3H6', 'SFCH3COCH3', 'SFBIGALK', 'SFBIGENE',
- 'SFBENZENE', 'SFTOLUENE', 'SFXYLENES', 'SFCO', 'SFNO', 'SFC2H2', 'SFHCOOH', 'SFCH3COOH', 'SFCH3COCH3',
- 'SFDMS', 'SFMEK', 'SFSO2', 'SFNH3', 'SFIVOC', 'SFSVOC', 'MEG_ISOP', 'MEG_MTERP', 'MEG_BCARY',
- 'MEG_CH3OH', 'MEG_C2H5OH', 'MEG_CH2O', 'MEG_CH3CHO', 'MEG_CH3COOH', 'MEG_CH3COCH3', 'MEG_HCOOH', 'MEG_HCN', 'MEG_CO',
- 'MEG_C2H6', 'MEG_C2H4', 'MEG_C3H8', 'MEG_C3H6', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_TOLUENE', 'Dso4_a1CHM', 'Dso4_a2CHM',
- 'Dso4_a3CHM', 'DO3CHM', 'DCOCHM', 'DHNO3CHM', 'DH2O2CHM', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML',
- 'CO2_CHML', 'AQ_SO2', 'GS_SO2', 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP',
- 'SOAG3_CHMP', 'SOAG4_CHMP', 'IVOC_CHMP', 'SVOC_CHML', 'MASS', 'ABSORB', 'WD_H2SO4', 'WD_IVOC', 'WD_SO2',
- 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC', 'DF_CO', 'DF_IVOC', 'DF_O3',
- 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3', 'DF_SOAG4', 'DF_SVOC', 'SO2_CLXF', 'SVOC_CLXF',
- 'SFISOP', 'SFMTERP', 'SFCH3OH', 'SFCH3COCH3', 'SFCO', 'SFIVOC', 'SFSVOC', 'DO3CHM', 'DCOCHM',
- 'O3_CHMP', 'O3_CHML', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML', 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF',
- 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP',
- 'r_HO2_O3', 'r_OH_O3', 'r_OH_O', 'r_O1D_H2O', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6',
- 'jo3_a', 'jno2', 'jpan', 'jh2o2', 'jcl2o2', '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',
- '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', 'soa1_a1_CHML', 'soa2_a1_CHML', 'soa3_a1_CHML', 'soa4_a1_CHML', 'soa5_a1_CHML', 'soa1_a2_CHML',
- 'soa2_a2_CHML', 'soa3_a2_CHML', 'soa4_a2_CHML', 'soa5_a2_CHML', 'so4_a1_CHMP', 'so4_a2_CHMP', 'so4_a3_CHMP', 'soa1_a1_CHMP', 'soa2_a1_CHMP',
- 'soa3_a1_CHMP', 'soa4_a1_CHMP', 'soa5_a1_CHMP', 'soa1_a2_CHMP', 'soa2_a2_CHMP', 'soa3_a2_CHMP', 'soa4_a2_CHMP', 'soa5_a2_CHMP', 'r_jsoa1_a1',
- 'r_jsoa2_a1', 'r_jsoa3_a1', 'r_jsoa4_a1', 'r_jsoa5_a1', 'r_jsoa1_a2', 'r_jsoa2_a2', 'r_jsoa3_a2', 'r_jsoa4_a2', 'r_jsoa5_a2',
- 'r_GLYOXAL_aer', 'H2SO4_sfnnuc1', 'num_a2_sfnnuc1', 'TMOCS', 'TMSO2', 'TMDMS', 'TMso4_a1', 'TMso4_a2', 'TMso4_a3',
- 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BURDENSEASALTdn','BURDENBCdn', 'PM25',
- 'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
- 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot',
- 'Ox_Prod','Ox_Loss'
+
+ 'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
+ 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE', 'CONCLD', 'CME', 'CMFDQ', 'CMFMC', 'CMFMC_DP',
+ 'CH3CCL3_CHML', 'CH4_CHML', 'CO2_CHML', 'CO_CHML', 'IVOC_CHML', 'N2O_CHML', 'O3_CHML', 'SO2_CHML',
+ 'CO_CHMP', 'O3_CHMP', 'SO2_CHMP', 'TMDMS', 'TMOCS', 'TMSO2','TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'soa1_a1_CHML', 'soa1_a2_CHML', 'soa2_a1_CHML', 'soa2_a2_CHML', 'soa3_a1_CHML', 'soa3_a2_CHML',
+ 'soa4_a1_CHML', 'soa4_a2_CHML', 'soa5_a1_CHML', 'soa5_a2_CHML', 'SVOC_CHML',
+ 'so4_a1_CHMP','so4_a2_CHMP', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'TOTH', 'TOT_CLD_VISTAU',
+ 'TREFHTMN', 'TREFHTMX', 'TROP_P', 'TROP_T', 'TROP_Z', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'ABSORB', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse',
+ 'AODDUST02', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn', 'AODUVstdn', 'AODVIS',
+ 'AODVISdn', 'AODVISstdn', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'FLDSC', 'FLNR', 'FSNR',
+ 'CME', 'CMFDQ', 'CMFMC','CMFMC_DP', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST','TAQ',
+ 'DCOCHM','DH2O2CHM', 'DHNO3CHM', 'DO3CHM', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM',
+ 'FLASHFRQ', 'LNO_COL_PROD', 'LNO_PROD','KVH_CLUBB','MASS', 'PDELDRY', 'NITROP_PD','PM25', 'PRECT', 'PTEQ', 'PTTEND',
+ 'QRLC', 'QRSC', 'QSNOW', 'QRAIN','GS_SO2', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS','H2SO4M_C', 'H2SO4_sfnnuc1','HCL_GAS',
+ 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP' 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RHREFHT',
+ 'EVAPPREC', 'EVAPQZM', 'EVAPTZM', 'FCTL','FREQZM', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU','VEL_NAT2',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF',
+ 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF', 'pom_c4DDF', 'num_c1DDF','num_c2DDF','num_c3DDF','num_c4DDF',
+ 'so4_a1_sfgaex1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_a2_sfgaex1', 'so4_c2AQH2SO4', 'so4_c2AQSO4', 'so4_c2DDF',
+ 'so4_a3_sfgaex1', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_a2_sfnnuc1', 'num_a2_sfnnuc1',
+ 'soa1_a1_sfgaex1','soa1_c1DDF', 'soa1_a2_sfgaex1','soa1_c2DDF', 'soa2_a1_sfgaex1','soa2_c1DDF', 'soa2_a2_sfgaex1','soa2_c2DDF',
+ 'soa3_a1_sfgaex1','soa3_c1DDF', 'soa3_a2_sfgaex1','soa3_c2DDF', 'soa4_a1_sfgaex1','soa4_c1DDF', 'soa4_a2_sfgaex1','soa4_c2DDF',
+ 'soa5_a1_sfgaex1','soa5_c1DDF', 'soa5_a2_sfgaex1','soa5_c2DDF', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan',
+ 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_het10', 'r_het11', 'r_het12', 'r_het13',
+ 'r_het15', 'r_het16', 'r_het17', '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_GLYOXAL_aer', 'r_HO2_O3', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O', 'r_OH_O3', 'r_OH_O',
+ 'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
+ 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot', 'Ox_Prod','Ox_Loss'
-
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH',
- 'NO3', 'HO2', 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO', 'CH3CL',
- 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
- 'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113',
- 'CFC12', 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3',
- 'CH3OH', 'CH4', 'CO', 'H2O2', 'HCFC22', 'HCN', 'HNO3', 'ISOP',
- 'N2O', 'O3', 'PAN', 'SO2', 'TOLUENE', 'OH', 'ALKNIT',
- 'ALKOOH', 'BCARY', 'BENZENE', 'BENZOOH', 'BEPOMUC', 'BIGALD1', 'BIGALD2',
- 'BIGALD3', 'BIGALD4', 'BIGALK', 'BIGENE', 'BR', 'BRCL', 'BRO', 'BRONO2',
- 'BRY', 'BZALD', 'BZOOH', 'C2H2', 'C2H4', 'C2H5OH', 'C2H5OOH', 'C2H6',
- 'C3H6', 'C3H7OOH', 'C3H8', 'C6H5OOH', 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11',
- 'CFC113', 'CFC114', 'CFC115', 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3',
- 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3COCHO', 'CH3COOH', 'CH3COOOH', 'CH3OH',
- 'CH3OOH', 'CH4', 'CHBR3', 'CL', 'CL2', 'CL2O2', 'CLO', 'CLONO2',
- 'CLY', 'CO', 'CO2', 'COF2', 'COFCL', 'CRESOL', 'DMS', 'EOOH',
- 'F', 'GLYALD', 'GLYOXAL', 'H', 'H2', 'H2402', 'H2O2', 'H2SO4',
- 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22', 'HCL', 'HCN', 'HCOOH', 'HF',
- 'HNO3', 'HO2NO2', 'HOBR', 'HOCL', 'HONITR', 'HYAC', 'HYDRALD',
- 'IEPOX', 'ISOP', 'ISOPNO3', 'ISOPOOH', 'IVOC',
- 'MACR', 'MACROOH', 'MEK', 'MEKOOH', 'MPAN', 'MVK', 'N',
- 'N2O', 'N2O5', 'NC4CHO', 'NH3', 'NH4', 'NO', 'NO2',
- 'NO3', 'NOA', 'O', 'OCLO', 'OCS', 'ONITR', 'PAN',
- 'PBZNIT', 'PHENO', 'PHENOL', 'PHENOOH', 'POOH', 'ROOH', 'S', 'SF6',
- 'SO', 'SO2', 'SO3', 'SOAG0', 'SOAG1', 'SOAG2', 'SOAG3', 'SOAG4',
- 'SVOC', 'TEPOMUC', 'TERP2AOOH', 'TERPOOH', 'TOLOOH',
- 'TOLUENE', 'XYLENES', 'XYLENOOH', 'XYLOL', 'XYLOLOOH', 'NHDEP', 'NDEP',
- 'ACBZO2', 'ALKO2', 'BENZO2', 'BZOO', 'C2H5O2', 'C3H7O2', 'C6H5O2', 'CH3CO3',
- 'CH3O2', 'DICARBO2', 'ENEO2', 'EO', 'EO2', 'HO2', 'HOCH2OO',
- 'MACRO2', 'MALO2', 'MCO3', 'MDIALO2', 'MEKO2', 'O1D',
- 'OH', 'PHENO2', 'PO2', 'RO2', 'TOLO2',
- 'XYLENO2', 'XYLOLO2', 'H2O', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP', 'SAD_AERO',
- 'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C', 'HNO3_GAS', 'HNO3_STS',
- 'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY', 'BROX',
- 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- '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_ALKNIT', 'WD_ALKOOH', 'WD_BENZOOH', 'WD_BRONO2', 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH',
- 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO', 'WD_CH3CN', 'WD_CH3COCHO', 'WD_CH3COOH', 'WD_CH3COOOH',
- 'WD_CH3COCH3', '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_HYAC', 'WD_HYDRALD', 'WD_IEPOX',
- 'WD_ISOPOOH', 'WD_IVOC', 'WD_MACR', 'WD_MACROOH',
- 'WD_MEKOOH', 'WD_MVK', 'WD_NC4CHO', 'WD_NDEP', 'WD_NH3', 'WD_NH4', 'WD_NHDEP',
- 'WD_NOA', 'WD_ONITR', 'WD_PHENOOH', 'WD_POOH', 'WD_ROOH', 'WD_SO2', 'WD_SOAG0',
- 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC', 'WD_TERP2AOOH', 'WD_TERPOOH',
- 'WD_TOLOOH', 'WD_XYLENOOH', 'WD_XYLOLOOH', '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_HYAC', 'DF_HYDRALD', 'DF_IEPOX',
- 'DF_ISOPOOH', 'DF_IVOC', 'DF_MACROOH', 'DF_MEKOOH', 'DF_MPAN', 'DF_NC4CHO',
- 'dry_deposition_NHx_as_N', 'DF_NH3', 'DF_NH4', 'DF_NO', 'DF_NO2', 'DF_NOA', '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_TERP2AOOH', 'DF_TERPOOH',
- 'DF_TOLOOH', 'DF_XYLENOOH', 'DF_XYLOLOOH', 'dry_deposition_NOy_as_N', 'SO2_CLXF', 'SO2_XFRC',
- 'SVOC_CLXF', 'CO_CLXF', 'NO2_CLXF', 'LNO_PROD', 'LNO_COL_PROD', 'SFISOP', 'SFBCARY',
- 'SFCH3OH', 'SFC2H5OH', 'SFCH3CHO', 'SFMEK', 'SFHCN', 'SFCH3CN', 'SFCH2O', 'SFC2H6',
- 'SFC3H8', 'SFC2H4', 'SFC3H6', 'SFCH3COCH3', 'SFBIGALK', 'SFBIGENE', 'SFBENZENE', 'SFTOLUENE',
- 'SFXYLENES', 'SFCO', 'SFNO', 'SFC2H2', 'SFHCOOH', 'SFCH3COOH', 'SFCH3COCH3', 'SFDMS',
- 'SFMEK', 'SFSO2', 'SFNH3', 'SFIVOC', 'SFSVOC', 'MEG_ISOP', 'MEG_BCARY',
- 'MEG_CH3OH', 'MEG_C2H5OH', 'MEG_CH2O', 'MEG_CH3CHO', 'MEG_CH3COOH', 'MEG_CH3COCH3', 'MEG_HCOOH', 'MEG_HCN',
- 'MEG_CO', 'MEG_C2H6', 'MEG_C2H4', 'MEG_C3H8', 'MEG_C3H6', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_TOLUENE',
- 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM', 'DO3CHM', 'DCOCHM', 'DHNO3CHM', 'DH2O2CHM', 'CH4_CHML',
- 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML', 'CO2_CHML', 'AQ_SO2', 'GS_SO2', 'SO2_CHML', 'SO2_CHMP',
- 'SO2_CLXF', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'IVOC_CHMP', 'SVOC_CHML',
- 'MASS', 'ABSORB', 'WD_H2SO4', 'WD_IVOC', 'WD_SO2', 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2',
- 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC', 'DF_CO', 'DF_IVOC', 'DF_O3', 'DF_SO2', 'DF_SOAG0',
- 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3', 'DF_SOAG4', 'DF_SVOC', 'SO2_CLXF', 'SVOC_CLXF', 'SFISOP',
- 'SFCH3OH', 'SFCH3COCH3', 'SFCO', 'SFIVOC', 'SFSVOC', 'DO3CHM', 'DCOCHM',
- 'O3_CHMP', 'O3_CHML', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML', 'SO2_CHML', 'SO2_CHMP',
- 'SO2_CLXF', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'O3_Prod', 'O3_Loss',
- 'OddOx_Ox_Loss', 'OddOx_HOx_Loss', 'OddOx_NOx_Loss', 'OddOx_CLOxBROx_Loss', 'OddOx_Loss_Tot', 'OddOx_Prod_Tot', 'O3_Prod', 'O3_Loss',
- 'r_HO2_O3', 'r_OH_O3', 'r_OH_O', 'r_O1D_H2O', 'r_het1', 'r_het2', 'r_het3', 'r_het4',
- 'r_het5', 'r_het6', 'jo3_a', 'jno2', 'jpan', 'jh2o2', 'jcl2o2', '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', 'soa1_a1_CHML', 'soa2_a1_CHML', 'soa3_a1_CHML', 'soa4_a1_CHML', 'soa5_a1_CHML',
- 'soa1_a2_CHML', 'soa2_a2_CHML', 'soa3_a2_CHML', 'soa4_a2_CHML', 'soa5_a2_CHML', 'so4_a1_CHMP', 'so4_a2_CHMP', 'so4_a3_CHMP',
- 'r_jsoa1_a1', 'r_jsoa2_a1', 'r_jsoa3_a1', 'r_jsoa4_a1', 'r_jsoa5_a1', 'r_jsoa1_a2', 'r_jsoa2_a2', 'r_jsoa3_a2',
- 'r_jsoa4_a2', 'r_jsoa5_a2', 'r_GLYOXAL_aer', 'H2SO4_sfnnuc1', 'num_a2_sfnnuc1', 'TMOCS', 'TMSO2', 'TMDMS',
- 'TMso4_a1', 'TMso4_a2', 'TMso4_a3', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BURDENSEASALTdn',
- 'BURDENBCdn', 'PM25',
- 'MEG_XYLENES','MEG_BZALD','MEG_MEK',
- 'DF_BCARY', 'DF_BENZENE', 'DF_BEPOMUC', 'DF_BIGALD1', 'DF_BIGALD2', 'DF_BIGALD3',
- 'DF_BIGALD4', 'DF_BIGALK', 'DF_BIGENE', 'DF_BZALD', 'DF_C2H2', 'DF_C2H4', 'DF_C2H6', 'DF_C3H6',
- 'DF_C3H8', 'DF_CRESOL', 'DF_DMS', 'DF_GLYOXAL', 'DF_ISOP', 'DF_MACR', 'DF_MEK',
- 'DF_MVK', 'DF_N2O5', 'DF_PBZNIT', 'DF_PHENOL', 'DF_TEPOMUC', 'DF_TOLUENE', 'DF_XYLENES', 'DF_XYLOL',
- 'WD_BCARY', 'WD_BENZENE', 'WD_BEPOMUC', 'WD_BIGALD1', 'WD_BIGALD2', 'WD_BIGALD3', 'WD_BIGALD4',
- 'WD_BIGALK', 'WD_BIGENE', 'WD_BZALD',
- 'WD_C2H2', 'WD_C2H4', 'WD_C2H6', 'WD_C3H6', 'WD_C3H8', 'WD_CO', 'WD_CRESOL', 'WD_DMS', 'WD_GLYOXAL', 'WD_ISOP',
- 'WD_MEK', 'WD_MPAN',
- 'WD_N2O5', 'WD_NO', 'WD_NO2', 'WD_PAN', 'WD_PBZNIT', 'WD_PHENOL', 'WD_TEPOMUC','WD_TOLUENE', 'WD_XYLENES', 'WD_XYLOL'
-
-
+
'PMID', 'PDELDRY','PS','PHIS:I','Z3','T','U','V','Q','TROP_P', 'CLOUD',
'CO','O3','O3S','NO2','NO','OH','ISOP','SO2', 'PAN', 'HNO3', 'C2H6', 'C3H8', 'CH2O', 'CH3COCH3',
'SFISOP','SFCO','SFNO','SFNO2',
'PM25_SRF', 'so4_a1','so4_a2','so4_a3','dst_a1','dst_a2','dst_a3','soa_a1','soa_a2',
'ncl_a1','ncl_a2','ncl_a3','bc_a1', 'bc_a4','pom_a1','pom_a4', 'AODVISdn',
-
+
'soa_a1 = soa1_a1 + soa2_a1 + soa3_a1 + soa4_a1 + soa5_a1',
'soa_a2 = soa1_a2 + soa2_a2 + soa3_a2 + soa4_a2 + soa5_a2'
-
+
'MEG_APIN','MEG_BPIN','MEG_LIMON','MEG_MYRC',
'ISOPFDN', 'ISOPFNP', 'ISOPN3B', 'ISOPN2B', 'ISOPN1D', 'ISOPN4D',
'ISOPNBNO3', 'ISOPNOOHB', 'ISOPNOOHD', 'INHEB','INHED',
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 98309c552e..f9ea8eb9eb 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
@@ -16,17 +16,114 @@
0.25D0
SERIAL
-atm/waccm/lb/LBC_1750-2014_CMIP6_0p5degLat_c170126.nc
+atm/waccm/lb/LBC_17500116-25001216_CMIP6_SSP585_0p5degLat_c20200824.nc
- SERIAL
+SERIAL
+2.70D0
+ 0.38D0
+ 'SERIAL'
+
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
-
-'noy', 'nhx'
+
+ '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',
+ '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'
+
@@ -37,113 +134,45 @@
.true.
.false.
.false.
-.false.
+.true.
.false.
.false.
.false.
.false.
.false.
-
+
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
- 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO',
- 'CH3CL', 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
- 'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113', 'CFC12',
- 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3OH', 'CH4',
- 'CO', 'H2O2', 'HCFC22', 'HCN', 'HNO3', 'ISOP', 'MTERP', 'N2O', 'O3', 'O3S',
- 'PAN', 'SO2', 'TOLUENE', 'OH', 'ALKNIT', 'ALKOOH', 'BCARY', 'BENZENE', 'BENZOOH',
- 'BEPOMUC', 'BIGALD', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALK', 'BIGENE', 'BR',
- 'BRCL', 'BRO', 'BRONO2', 'BRY', 'BZALD', 'BZOOH', 'C2H2', 'C2H4', 'C2H5OH',
- 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7OOH', 'C3H8', 'C6H5OOH', 'CCL4', 'CF2CLBR', 'CF3BR',
- 'CFC11', 'CFC113', 'CFC114', 'CFC115', 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3',
- 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3COCHO', 'CH3COOH', 'CH3COOOH', 'CH3OH', 'CH3OOH',
- 'CH4', 'CHBR3', 'CL', 'CL2', 'CL2O2', 'CLO', 'CLONO2', 'CLY', 'CO',
- 'CO2', 'COF2', 'COFCL', 'CRESOL', 'DMS', 'EOOH', 'F', 'GLYALD', 'GLYOXAL',
- 'H', 'H2', 'H2402', 'H2O2', 'H2SO4', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22',
- 'HCL', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HO2NO2', 'HOBR', 'HOCL', 'HONITR',
- 'HPALD', 'HYAC', 'HYDRALD', 'IEPOX', 'ISOP', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3', 'ISOPNOOH',
- 'ISOPOOH', 'IVOC', 'MACR', 'MACROOH', 'MEK', 'MEKOOH', 'MPAN', 'MTERP', 'MVK',
- 'N', 'N2O', 'N2O5', 'NC4CH2OH', 'NC4CHO', 'NH3', 'NH4', 'NO',
- 'NO2', 'NO3', 'NOA', 'NTERPOOH', 'O', 'OCLO',
- 'OCS', 'ONITR', 'PAN', 'PBZNIT', 'PHENO', 'PHENOL', 'PHENOOH', 'POOH', 'ROOH',
- 'S', 'SF6', 'SO', 'SO2', 'SO3', 'SOAG0', 'SOAG1', 'SOAG2', 'SOAG3',
- 'SOAG4', 'SVOC', 'TEPOMUC', 'TERP2OOH', 'TERPNIT', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TOLOOH',
- 'TOLUENE', 'XOOH', 'XYLENES', 'XYLENOOH', 'XYLOL', 'XYLOLOOH', 'NHDEP', 'NDEP', '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', 'H2O', 'SAD_ICE', 'SAD_LNAT',
- 'SAD_SULFC', 'SAD_TROP', 'SAD_AERO', 'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C',
- 'HNO3_GAS', 'HNO3_STS', 'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY',
- 'BROX', 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- '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_ALKNIT', 'WD_ALKOOH',
- 'WD_BENZOOH', 'WD_BRONO2', 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO',
- 'WD_CH3CN', 'WD_CH3COCHO', 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3COCH3', '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', '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',
- 'dry_deposition_NHx_as_N', 'DF_NH3', 'DF_NH4', 'DF_NO', 'DF_NO2', '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', 'dry_deposition_NOy_as_N', 'SO2_CLXF', 'SO2_XFRC', 'SVOC_CLXF', 'CO_CLXF', 'NO2_CLXF', 'LNO_PROD',
- 'LNO_COL_PROD', 'SFISOP', 'SFMTERP', 'SFBCARY', 'SFCH3OH', 'SFC2H5OH', 'SFCH3CHO', 'SFMEK', 'SFHCN',
- 'SFCH3CN', 'SFCH2O', 'SFC2H6', 'SFC3H8', 'SFC2H4', 'SFC3H6', 'SFCH3COCH3', 'SFBIGALK', 'SFBIGENE',
- 'SFBENZENE', 'SFTOLUENE', 'SFXYLENES', 'SFCO', 'SFNO', 'SFC2H2', 'SFHCOOH', 'SFCH3COOH', 'SFCH3COCH3',
- 'SFDMS', 'SFMEK', 'SFSO2', 'SFNH3', 'SFIVOC', 'SFSVOC', 'MEG_ISOP', 'MEG_MTERP', 'MEG_BCARY',
- 'MEG_CH3OH', 'MEG_C2H5OH', 'MEG_CH2O', 'MEG_CH3CHO', 'MEG_CH3COOH', 'MEG_CH3COCH3', 'MEG_HCOOH', 'MEG_HCN', 'MEG_CO',
- 'MEG_C2H6', 'MEG_C2H4', 'MEG_C3H8', 'MEG_C3H6', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_TOLUENE', 'Dso4_a1CHM', 'Dso4_a2CHM',
- 'Dso4_a3CHM', 'DO3CHM', 'DCOCHM', 'DHNO3CHM', 'DH2O2CHM', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML',
- 'CO2_CHML', 'AQ_SO2', 'GS_SO2', 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP',
- 'SOAG3_CHMP', 'SOAG4_CHMP', 'IVOC_CHMP', 'SVOC_CHML', 'MASS', 'ABSORB', 'WD_H2SO4', 'WD_IVOC', 'WD_SO2',
- 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC', 'DF_CO', 'DF_IVOC', 'DF_O3',
- 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3', 'DF_SOAG4', 'DF_SVOC', 'SO2_CLXF', 'SVOC_CLXF',
- 'SFISOP', 'SFMTERP', 'SFCH3OH', 'SFCH3COCH3', 'SFCO', 'SFIVOC', 'SFSVOC', 'DO3CHM', 'DCOCHM',
- 'O3_CHMP', 'O3_CHML', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML', 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF',
- 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP',
- 'r_HO2_O3', 'r_OH_O3', 'r_OH_O', 'r_O1D_H2O', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6',
- 'jo3_a', 'jno2', 'jpan', 'jh2o2', 'jcl2o2', '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',
- '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', 'soa1_a1_CHML', 'soa2_a1_CHML', 'soa3_a1_CHML', 'soa4_a1_CHML', 'soa5_a1_CHML', 'soa1_a2_CHML',
- 'soa2_a2_CHML', 'soa3_a2_CHML', 'soa4_a2_CHML', 'soa5_a2_CHML', 'so4_a1_CHMP', 'so4_a2_CHMP', 'so4_a3_CHMP', 'soa1_a1_CHMP', 'soa2_a1_CHMP',
- 'soa3_a1_CHMP', 'soa4_a1_CHMP', 'soa5_a1_CHMP', 'soa1_a2_CHMP', 'soa2_a2_CHMP', 'soa3_a2_CHMP', 'soa4_a2_CHMP', 'soa5_a2_CHMP', 'r_jsoa1_a1',
- 'r_jsoa2_a1', 'r_jsoa3_a1', 'r_jsoa4_a1', 'r_jsoa5_a1', 'r_jsoa1_a2', 'r_jsoa2_a2', 'r_jsoa3_a2', 'r_jsoa4_a2', 'r_jsoa5_a2',
- 'r_GLYOXAL_aer', 'H2SO4_sfnnuc1', 'num_a2_sfnnuc1', 'TMOCS', 'TMSO2', 'TMDMS', 'TMso4_a1', 'TMso4_a2', 'TMso4_a3',
- 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BURDENSEASALTdn','BURDENBCdn', 'PM25',
- 'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
- 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot',
- 'Ox_Prod','Ox_Loss'
+ 'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
+ 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE', 'CONCLD', 'CME', 'CMFMC', 'CMFMC_DP',
+ 'CH3CCL3_CHML', 'CH4_CHML', 'CO2_CHML', 'CO_CHML', 'IVOC_CHML', 'N2O_CHML', 'O3_CHML', 'SO2_CHML',
+ 'CO_CHMP', 'O3_CHMP', 'SO2_CHMP', 'TMDMS', 'TMOCS', 'TMSO2','TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'soa1_a1_CHML', 'soa1_a2_CHML', 'soa2_a1_CHML', 'soa2_a2_CHML', 'soa3_a1_CHML', 'soa3_a2_CHML',
+ 'soa4_a1_CHML', 'soa4_a2_CHML', 'soa5_a1_CHML', 'soa5_a2_CHML', 'SVOC_CHML',
+ 'so4_a1_CHMP','so4_a2_CHMP', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'TOTH', 'TOT_CLD_VISTAU',
+ 'TREFHTMN', 'TREFHTMX', 'TROP_P', 'TROP_T', 'TROP_Z', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'ABSORB', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse',
+ 'AODDUST02', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn', 'AODUVstdn', 'AODVIS',
+ 'AODVISdn', 'AODVISstdn', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'FLDSC', 'FLNR', 'FSNR',
+ 'SOLLD', 'SOLSD', 'SSAVIS', 'SST','TAQ',
+ 'DCOCHM','DH2O2CHM', 'DHNO3CHM', 'DO3CHM', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM',
+ 'FLASHFRQ', 'LNO_COL_PROD', 'LNO_PROD','KVH_CLUBB','MASS', 'PDELDRY', 'NITROP_PD','PM25', 'PRECT', 'PTEQ', 'PTTEND',
+ 'QRLC', 'QRSC', 'QSNOW', 'QRAIN','GS_SO2', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS','H2SO4M_C', 'H2SO4_sfnnuc1','HCL_GAS',
+ 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP' 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RHREFHT',
+ 'EVAPPREC', 'EVAPQZM', 'EVAPTZM', 'FCTL','FREQZM', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU','VEL_NAT2',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF',
+ 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF', 'pom_c4DDF', 'num_c1DDF','num_c2DDF','num_c3DDF','num_c4DDF',
+ 'so4_a1_sfgaex1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_a2_sfgaex1', 'so4_c2AQH2SO4', 'so4_c2AQSO4', 'so4_c2DDF',
+ 'so4_a3_sfgaex1', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_a2_sfnnuc1', 'num_a2_sfnnuc1',
+ 'soa1_a1_sfgaex1','soa1_c1DDF', 'soa1_a2_sfgaex1','soa1_c2DDF', 'soa2_a1_sfgaex1','soa2_c1DDF', 'soa2_a2_sfgaex1','soa2_c2DDF',
+ 'soa3_a1_sfgaex1','soa3_c1DDF', 'soa3_a2_sfgaex1','soa3_c2DDF', 'soa4_a1_sfgaex1','soa4_c1DDF', 'soa4_a2_sfgaex1','soa4_c2DDF',
+ 'soa5_a1_sfgaex1','soa5_c1DDF', 'soa5_a2_sfgaex1','soa5_c2DDF', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan',
+ 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_het10', 'r_het11', 'r_het12', 'r_het13',
+ 'r_het15', 'r_het16', 'r_het17', '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_GLYOXAL_aer', 'r_HO2_O3', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O', 'r_OH_O3', 'r_OH_O',
+ 'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
+ 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot', 'Ox_Prod','Ox_Loss'
diff --git a/bld/namelist_files/use_cases/hist_trop_strat_vbsext_cam6.xml b/bld/namelist_files/use_cases/hist_trop_strat_vbsext_cam6.xml
index 8d8ff90bf9..38e1439ed0 100644
--- a/bld/namelist_files/use_cases/hist_trop_strat_vbsext_cam6.xml
+++ b/bld/namelist_files/use_cases/hist_trop_strat_vbsext_cam6.xml
@@ -46,7 +46,7 @@
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'O3S',
+ 'CFC11STAR', 'AODDUST', 'AODDUST02', 'T', 'U', 'V', 'O3', 'OH', 'O3S',
'NO3', 'HO2', 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO', 'CH3CL',
'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113',
@@ -81,8 +81,8 @@
'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C', 'HNO3_GAS', 'HNO3_STS',
'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY', 'BROX',
'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB', 'AODVISdn', 'AODdnMODE1', 'AODVISstdn',
- 'AODNIRstdn', 'AODUVstdn', 'AODdnMODE2', 'AODdnMODE3', 'AODdnDUST1', 'AODdnDUST2', 'AODdnDUST3', 'AODVISstdn',
+ 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB', 'AODVISdn', 'AODdn_aitken', 'AODVISstdn',
+ 'AODNIRstdn', 'AODUVstdn', 'AODdn_accum', 'AODdn_coarse', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODVISstdn',
'AODUVstdn', 'AODNIRstdn', 'AODNIRstdn', 'AODVISdn', 'AODUVdn', 'EXTINCTdn', 'EXTxASYMdn', 'EXTINCTNIRdn',
'EXTINCTUVdn', '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',
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 896609e72a..7219cf0322 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
@@ -78,7 +78,7 @@
.true.
.false.
.false.
-.false.
+.true.
.false.
.false.
.false.
@@ -87,104 +87,36 @@
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
- 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO',
- 'CH3CL', 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
- 'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113', 'CFC12',
- 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3OH', 'CH4',
- 'CO', 'H2O2', 'HCFC22', 'HCN', 'HNO3', 'ISOP', 'MTERP', 'N2O', 'O3', 'O3S',
- 'PAN', 'SO2', 'TOLUENE', 'OH', 'ALKNIT', 'ALKOOH', 'BCARY', 'BENZENE', 'BENZOOH',
- 'BEPOMUC', 'BIGALD', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALK', 'BIGENE', 'BR',
- 'BRCL', 'BRO', 'BRONO2', 'BRY', 'BZALD', 'BZOOH', 'C2H2', 'C2H4', 'C2H5OH',
- 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7OOH', 'C3H8', 'C6H5OOH', 'CCL4', 'CF2CLBR', 'CF3BR',
- 'CFC11', 'CFC113', 'CFC114', 'CFC115', 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3',
- 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3COCHO', 'CH3COOH', 'CH3COOOH', 'CH3OH', 'CH3OOH',
- 'CH4', 'CHBR3', 'CL', 'CL2', 'CL2O2', 'CLO', 'CLONO2', 'CLY', 'CO',
- 'CO2', 'COF2', 'COFCL', 'CRESOL', 'DMS', 'EOOH', 'F', 'GLYALD', 'GLYOXAL',
- 'H', 'H2', 'H2402', 'H2O2', 'H2SO4', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22',
- 'HCL', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HO2NO2', 'HOBR', 'HOCL', 'HONITR',
- 'HPALD', 'HYAC', 'HYDRALD', 'IEPOX', 'ISOP', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3', 'ISOPNOOH',
- 'ISOPOOH', 'IVOC', 'MACR', 'MACROOH', 'MEK', 'MEKOOH', 'MPAN', 'MTERP', 'MVK',
- 'N', 'N2O', 'N2O5', 'NC4CH2OH', 'NC4CHO', 'NH3', 'NH4', 'NO',
- 'NO2', 'NO3', 'NOA', 'NTERPOOH', 'O', 'OCLO',
- 'OCS', 'ONITR', 'PAN', 'PBZNIT', 'PHENO', 'PHENOL', 'PHENOOH', 'POOH', 'ROOH',
- 'S', 'SF6', 'SO', 'SO2', 'SO3', 'SOAG0', 'SOAG1', 'SOAG2', 'SOAG3',
- 'SOAG4', 'SVOC', 'TEPOMUC', 'TERP2OOH', 'TERPNIT', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TOLOOH',
- 'TOLUENE', 'XOOH', 'XYLENES', 'XYLENOOH', 'XYLOL', 'XYLOLOOH', 'NHDEP', 'NDEP', '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', 'H2O', 'SAD_ICE', 'SAD_LNAT',
- 'SAD_SULFC', 'SAD_TROP', 'SAD_AERO', 'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C',
- 'HNO3_GAS', 'HNO3_STS', 'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY',
- 'BROX', 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- '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_ALKNIT', 'WD_ALKOOH',
- 'WD_BENZOOH', 'WD_BRONO2', 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO',
- 'WD_CH3CN', 'WD_CH3COCHO', 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3COCH3', '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', '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',
- 'dry_deposition_NHx_as_N', 'DF_NH3', 'DF_NH4', 'DF_NO', 'DF_NO2', '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', 'dry_deposition_NOy_as_N', 'SO2_CLXF', 'SO2_XFRC', 'SVOC_CLXF', 'CO_CLXF', 'NO2_CLXF', 'LNO_PROD',
- 'LNO_COL_PROD', 'SFISOP', 'SFMTERP', 'SFBCARY', 'SFCH3OH', 'SFC2H5OH', 'SFCH3CHO', 'SFMEK', 'SFHCN',
- 'SFCH3CN', 'SFCH2O', 'SFC2H6', 'SFC3H8', 'SFC2H4', 'SFC3H6', 'SFCH3COCH3', 'SFBIGALK', 'SFBIGENE',
- 'SFBENZENE', 'SFTOLUENE', 'SFXYLENES', 'SFCO', 'SFNO', 'SFC2H2', 'SFHCOOH', 'SFCH3COOH', 'SFCH3COCH3',
- 'SFDMS', 'SFMEK', 'SFSO2', 'SFNH3', 'SFIVOC', 'SFSVOC', 'MEG_ISOP', 'MEG_MTERP', 'MEG_BCARY',
- 'MEG_CH3OH', 'MEG_C2H5OH', 'MEG_CH2O', 'MEG_CH3CHO', 'MEG_CH3COOH', 'MEG_CH3COCH3', 'MEG_HCOOH', 'MEG_HCN', 'MEG_CO',
- 'MEG_C2H6', 'MEG_C2H4', 'MEG_C3H8', 'MEG_C3H6', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_TOLUENE', 'Dso4_a1CHM', 'Dso4_a2CHM',
- 'Dso4_a3CHM', 'DO3CHM', 'DCOCHM', 'DHNO3CHM', 'DH2O2CHM', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML',
- 'CO2_CHML', 'AQ_SO2', 'GS_SO2', 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP',
- 'SOAG3_CHMP', 'SOAG4_CHMP', 'IVOC_CHMP', 'SVOC_CHML', 'MASS', 'ABSORB', 'WD_H2SO4', 'WD_IVOC', 'WD_SO2',
- 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC', 'DF_CO', 'DF_IVOC', 'DF_O3',
- 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3', 'DF_SOAG4', 'DF_SVOC', 'SO2_CLXF', 'SVOC_CLXF',
- 'SFISOP', 'SFMTERP', 'SFCH3OH', 'SFCH3COCH3', 'SFCO', 'SFIVOC', 'SFSVOC', 'DO3CHM', 'DCOCHM',
- 'O3_CHMP', 'O3_CHML', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML', 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF',
- 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP',
- 'r_HO2_O3', 'r_OH_O3', 'r_OH_O', 'r_O1D_H2O', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6',
- 'jo3_a', 'jno2', 'jpan', 'jh2o2', 'jcl2o2', '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',
- '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', 'soa1_a1_CHML', 'soa2_a1_CHML', 'soa3_a1_CHML', 'soa4_a1_CHML', 'soa5_a1_CHML', 'soa1_a2_CHML',
- 'soa2_a2_CHML', 'soa3_a2_CHML', 'soa4_a2_CHML', 'soa5_a2_CHML', 'so4_a1_CHMP', 'so4_a2_CHMP', 'so4_a3_CHMP', 'soa1_a1_CHMP', 'soa2_a1_CHMP',
- 'soa3_a1_CHMP', 'soa4_a1_CHMP', 'soa5_a1_CHMP', 'soa1_a2_CHMP', 'soa2_a2_CHMP', 'soa3_a2_CHMP', 'soa4_a2_CHMP', 'soa5_a2_CHMP', 'r_jsoa1_a1',
- 'r_jsoa2_a1', 'r_jsoa3_a1', 'r_jsoa4_a1', 'r_jsoa5_a1', 'r_jsoa1_a2', 'r_jsoa2_a2', 'r_jsoa3_a2', 'r_jsoa4_a2', 'r_jsoa5_a2',
- 'r_GLYOXAL_aer', 'H2SO4_sfnnuc1', 'num_a2_sfnnuc1', 'TMOCS', 'TMSO2', 'TMDMS', 'TMso4_a1', 'TMso4_a2', 'TMso4_a3',
- 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BURDENSEASALTdn','BURDENBCdn', 'PM25',
- 'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
- 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot',
- 'Ox_Prod','Ox_Loss'
+ 'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
+ 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE', 'CONCLD', 'CME', 'CMFDQ', 'CMFMC', 'CMFMC_DP',
+ 'CH3CCL3_CHML', 'CH4_CHML', 'CO2_CHML', 'CO_CHML', 'IVOC_CHML', 'N2O_CHML', 'O3_CHML', 'SO2_CHML',
+ 'CO_CHMP', 'O3_CHMP', 'SO2_CHMP', 'TMDMS', 'TMOCS', 'TMSO2','TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'soa1_a1_CHML', 'soa1_a2_CHML', 'soa2_a1_CHML', 'soa2_a2_CHML', 'soa3_a1_CHML', 'soa3_a2_CHML',
+ 'soa4_a1_CHML', 'soa4_a2_CHML', 'soa5_a1_CHML', 'soa5_a2_CHML', 'SVOC_CHML',
+ 'so4_a1_CHMP','so4_a2_CHMP', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'TOTH', 'TOT_CLD_VISTAU',
+ 'TREFHTMN', 'TREFHTMX', 'TROP_P', 'TROP_T', 'TROP_Z', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'ABSORB', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse',
+ 'AODDUST02', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn', 'AODUVstdn', 'AODVIS',
+ 'AODVISdn', 'AODVISstdn', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'FLDSC', 'FLNR', 'FSNR',
+ 'CME', 'CMFDQ', 'CMFMC','CMFMC_DP', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST','TAQ',
+ 'DCOCHM','DH2O2CHM', 'DHNO3CHM', 'DO3CHM', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM',
+ 'FLASHFRQ', 'LNO_COL_PROD', 'LNO_PROD','KVH_CLUBB','MASS', 'PDELDRY', 'NITROP_PD','PM25', 'PRECT', 'PTEQ', 'PTTEND',
+ 'QRLC', 'QRSC', 'QSNOW', 'QRAIN','GS_SO2', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS','H2SO4M_C', 'H2SO4_sfnnuc1','HCL_GAS',
+ 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP' 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RHREFHT',
+ 'EVAPPREC', 'EVAPQZM', 'EVAPTZM', 'FCTL','FREQZM', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU','VEL_NAT2',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF',
+ 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF', 'pom_c4DDF', 'num_c1DDF','num_c2DDF','num_c3DDF','num_c4DDF',
+ 'so4_a1_sfgaex1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_a2_sfgaex1', 'so4_c2AQH2SO4', 'so4_c2AQSO4', 'so4_c2DDF',
+ 'so4_a3_sfgaex1', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_a2_sfnnuc1', 'num_a2_sfnnuc1',
+ 'soa1_a1_sfgaex1','soa1_c1DDF', 'soa1_a2_sfgaex1','soa1_c2DDF', 'soa2_a1_sfgaex1','soa2_c1DDF', 'soa2_a2_sfgaex1','soa2_c2DDF',
+ 'soa3_a1_sfgaex1','soa3_c1DDF', 'soa3_a2_sfgaex1','soa3_c2DDF', 'soa4_a1_sfgaex1','soa4_c1DDF', 'soa4_a2_sfgaex1','soa4_c2DDF',
+ 'soa5_a1_sfgaex1','soa5_c1DDF', 'soa5_a2_sfgaex1','soa5_c2DDF', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan',
+ 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_het10', 'r_het11', 'r_het12', 'r_het13',
+ 'r_het15', 'r_het16', 'r_het17', '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_GLYOXAL_aer', 'r_HO2_O3', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O', 'r_OH_O3', 'r_OH_O',
+ 'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
+ 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot', 'Ox_Prod','Ox_Loss'
diff --git a/bld/namelist_files/use_cases/sd_trop_strat2_cam6.xml b/bld/namelist_files/use_cases/sd_trop_strat2_cam6.xml
index 8ef3f6903d..4075ad584c 100644
--- a/bld/namelist_files/use_cases/sd_trop_strat2_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_trop_strat2_cam6.xml
@@ -51,7 +51,7 @@
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH',
+ 'CFC11STAR', 'AODDUST', 'AODDUST02', 'T', 'U', 'V', 'O3', 'OH',
'NO3', 'HO2', 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO', 'CH3CL',
'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113',
@@ -85,8 +85,8 @@
'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C', 'HNO3_GAS', 'HNO3_STS',
'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY', 'BROX',
'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB', 'AODVISdn', 'AODdnMODE1', 'AODVISstdn',
- 'AODNIRstdn', 'AODUVstdn', 'AODdnMODE2', 'AODdnMODE3', 'AODdnDUST1', 'AODdnDUST2', 'AODdnDUST3', 'AODVISstdn',
+ 'HCL_GAS', 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'ABSORB', 'AODVISdn', 'AODdn_aitken', 'AODVISstdn',
+ 'AODNIRstdn', 'AODUVstdn', 'AODdn_accum', 'AODdn_coarse', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODVISstdn',
'AODUVstdn', 'AODNIRstdn', 'AODNIRstdn', 'AODVISdn', 'AODUVdn', 'EXTINCTdn', 'EXTxASYMdn', 'EXTINCTNIRdn',
'EXTINCTUVdn', '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_CH3COCHO', 'WD_CH3COOH', 'WD_CH3COOOH',
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 10cf37265a..2fe99cb0eb 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
@@ -52,113 +52,45 @@
.true.
.false.
.false.
-.false.
+.true.
.false.
.false.
.false.
.false.
.false.
-
+
- 'CFC11STAR', 'AODDUST', 'AODDUST2', 'T', 'U', 'V', 'O3', 'OH', 'NO3', 'HO2',
- 'LNO_COL_PROD', 'NO2_CLXF', 'SFNO', 'SFNH3', 'BRO',
- 'CH3CL', 'CLO', 'CO2', 'HCL', 'HO2', 'HOCL', 'H2O', 'PHIS', 'Z3',
- 'BENZENE', 'C2H2', 'C2H4', 'C2H6', 'C3H8', 'CCL4', 'CFC11', 'CFC113', 'CFC12',
- 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3OH', 'CH4',
- 'CO', 'H2O2', 'HCFC22', 'HCN', 'HNO3', 'ISOP', 'MTERP', 'N2O', 'O3', 'O3S',
- 'PAN', 'SO2', 'TOLUENE', 'OH', 'ALKNIT', 'ALKOOH', 'BCARY', 'BENZENE', 'BENZOOH',
- 'BEPOMUC', 'BIGALD', 'BIGALD1', 'BIGALD2', 'BIGALD3', 'BIGALD4', 'BIGALK', 'BIGENE', 'BR',
- 'BRCL', 'BRO', 'BRONO2', 'BRY', 'BZALD', 'BZOOH', 'C2H2', 'C2H4', 'C2H5OH',
- 'C2H5OOH', 'C2H6', 'C3H6', 'C3H7OOH', 'C3H8', 'C6H5OOH', 'CCL4', 'CF2CLBR', 'CF3BR',
- 'CFC11', 'CFC113', 'CFC114', 'CFC115', 'CFC12', 'CH2BR2', 'CH2O', 'CH3BR', 'CH3CCL3',
- 'CH3CHO', 'CH3CL', 'CH3CN', 'CH3COCH3', 'CH3COCHO', 'CH3COOH', 'CH3COOOH', 'CH3OH', 'CH3OOH',
- 'CH4', 'CHBR3', 'CL', 'CL2', 'CL2O2', 'CLO', 'CLONO2', 'CLY', 'CO',
- 'CO2', 'COF2', 'COFCL', 'CRESOL', 'DMS', 'EOOH', 'F', 'GLYALD', 'GLYOXAL',
- 'H', 'H2', 'H2402', 'H2O2', 'H2SO4', 'HBR', 'HCFC141B', 'HCFC142B', 'HCFC22',
- 'HCL', 'HCN', 'HCOOH', 'HF', 'HNO3', 'HO2NO2', 'HOBR', 'HOCL', 'HONITR',
- 'HPALD', 'HYAC', 'HYDRALD', 'IEPOX', 'ISOP', 'ISOPNITA', 'ISOPNITB', 'ISOPNO3', 'ISOPNOOH',
- 'ISOPOOH', 'IVOC', 'MACR', 'MACROOH', 'MEK', 'MEKOOH', 'MPAN', 'MTERP', 'MVK',
- 'N', 'N2O', 'N2O5', 'NC4CH2OH', 'NC4CHO', 'NH3', 'NH4', 'NO',
- 'NO2', 'NO3', 'NOA', 'NTERPOOH', 'O', 'OCLO',
- 'OCS', 'ONITR', 'PAN', 'PBZNIT', 'PHENO', 'PHENOL', 'PHENOOH', 'POOH', 'ROOH',
- 'S', 'SF6', 'SO', 'SO2', 'SO3', 'SOAG0', 'SOAG1', 'SOAG2', 'SOAG3',
- 'SOAG4', 'SVOC', 'TEPOMUC', 'TERP2OOH', 'TERPNIT', 'TERPOOH', 'TERPROD1', 'TERPROD2', 'TOLOOH',
- 'TOLUENE', 'XOOH', 'XYLENES', 'XYLENOOH', 'XYLOL', 'XYLOLOOH', 'NHDEP', 'NDEP', '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', 'H2O', 'SAD_ICE', 'SAD_LNAT',
- 'SAD_SULFC', 'SAD_TROP', 'SAD_AERO', 'REFF_AERO', 'PDELDRY', 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'H2SO4M_C',
- 'HNO3_GAS', 'HNO3_STS', 'HNO3_NAT', 'VEL_NAT2', 'NITROP_PD', 'NOX', 'NOY', 'CLOX', 'CLOY',
- 'BROX', 'BROY', 'TCLY', 'TOTH', 'MASS', 'TBRY', 'HCL_GAS', 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N',
- '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_ALKNIT', 'WD_ALKOOH',
- 'WD_BENZOOH', 'WD_BRONO2', 'WD_BZOOH', 'WD_C2H5OH', 'WD_C2H5OOH', 'WD_C3H7OOH', 'WD_C6H5OOH', 'WD_CH2O', 'WD_CH3CHO',
- 'WD_CH3CN', 'WD_CH3COCHO', 'WD_CH3COOH', 'WD_CH3COOOH', 'WD_CH3COCH3', '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', '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',
- 'dry_deposition_NHx_as_N', 'DF_NH3', 'DF_NH4', 'DF_NO', 'DF_NO2', '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', 'dry_deposition_NOy_as_N', 'SO2_CLXF', 'SO2_XFRC', 'SVOC_CLXF', 'CO_CLXF', 'NO2_CLXF', 'LNO_PROD',
- 'LNO_COL_PROD', 'SFISOP', 'SFMTERP', 'SFBCARY', 'SFCH3OH', 'SFC2H5OH', 'SFCH3CHO', 'SFMEK', 'SFHCN',
- 'SFCH3CN', 'SFCH2O', 'SFC2H6', 'SFC3H8', 'SFC2H4', 'SFC3H6', 'SFCH3COCH3', 'SFBIGALK', 'SFBIGENE',
- 'SFBENZENE', 'SFTOLUENE', 'SFXYLENES', 'SFCO', 'SFNO', 'SFC2H2', 'SFHCOOH', 'SFCH3COOH', 'SFCH3COCH3',
- 'SFDMS', 'SFMEK', 'SFSO2', 'SFNH3', 'SFIVOC', 'SFSVOC', 'MEG_ISOP', 'MEG_MTERP', 'MEG_BCARY',
- 'MEG_CH3OH', 'MEG_C2H5OH', 'MEG_CH2O', 'MEG_CH3CHO', 'MEG_CH3COOH', 'MEG_CH3COCH3', 'MEG_HCOOH', 'MEG_HCN', 'MEG_CO',
- 'MEG_C2H6', 'MEG_C2H4', 'MEG_C3H8', 'MEG_C3H6', 'MEG_BIGALK', 'MEG_BIGENE', 'MEG_TOLUENE', 'Dso4_a1CHM', 'Dso4_a2CHM',
- 'Dso4_a3CHM', 'DO3CHM', 'DCOCHM', 'DHNO3CHM', 'DH2O2CHM', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML',
- 'CO2_CHML', 'AQ_SO2', 'GS_SO2', 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP',
- 'SOAG3_CHMP', 'SOAG4_CHMP', 'IVOC_CHMP', 'SVOC_CHML', 'MASS', 'ABSORB', 'WD_H2SO4', 'WD_IVOC', 'WD_SO2',
- 'WD_SOAG0', 'WD_SOAG1', 'WD_SOAG2', 'WD_SOAG3', 'WD_SOAG4', 'WD_SVOC', 'DF_CO', 'DF_IVOC', 'DF_O3',
- 'DF_SO2', 'DF_SOAG0', 'DF_SOAG1', 'DF_SOAG2', 'DF_SOAG3', 'DF_SOAG4', 'DF_SVOC', 'SO2_CLXF', 'SVOC_CLXF',
- 'SFISOP', 'SFMTERP', 'SFCH3OH', 'SFCH3COCH3', 'SFCO', 'SFIVOC', 'SFSVOC', 'DO3CHM', 'DCOCHM',
- 'O3_CHMP', 'O3_CHML', 'CH4_CHML', 'CO_CHMP', 'CO_CHML', 'CH3CCL3_CHML', 'SO2_CHML', 'SO2_CHMP', 'SO2_CLXF',
- 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP',
- 'r_HO2_O3', 'r_OH_O3', 'r_OH_O', 'r_O1D_H2O', 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6',
- 'jo3_a', 'jno2', 'jpan', 'jh2o2', 'jcl2o2', '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',
- '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', 'soa1_a1_CHML', 'soa2_a1_CHML', 'soa3_a1_CHML', 'soa4_a1_CHML', 'soa5_a1_CHML', 'soa1_a2_CHML',
- 'soa2_a2_CHML', 'soa3_a2_CHML', 'soa4_a2_CHML', 'soa5_a2_CHML', 'so4_a1_CHMP', 'so4_a2_CHMP', 'so4_a3_CHMP', 'soa1_a1_CHMP', 'soa2_a1_CHMP',
- 'soa3_a1_CHMP', 'soa4_a1_CHMP', 'soa5_a1_CHMP', 'soa1_a2_CHMP', 'soa2_a2_CHMP', 'soa3_a2_CHMP', 'soa4_a2_CHMP', 'soa5_a2_CHMP', 'r_jsoa1_a1',
- 'r_jsoa2_a1', 'r_jsoa3_a1', 'r_jsoa4_a1', 'r_jsoa5_a1', 'r_jsoa1_a2', 'r_jsoa2_a2', 'r_jsoa3_a2', 'r_jsoa4_a2', 'r_jsoa5_a2',
- 'r_GLYOXAL_aer', 'H2SO4_sfnnuc1', 'num_a2_sfnnuc1', 'TMOCS', 'TMSO2', 'TMDMS', 'TMso4_a1', 'TMso4_a2', 'TMso4_a3',
- 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSO4dn', 'BURDENSOAdn', 'BURDENSEASALTdn','BURDENBCdn', 'PM25',
- 'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
- 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot',
- 'Ox_Prod','Ox_Loss'
+ 'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
+ 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE', 'CONCLD', 'CME', 'CMFDQ', 'CMFMC', 'CMFMC_DP',
+ 'CH3CCL3_CHML', 'CH4_CHML', 'CO2_CHML', 'CO_CHML', 'IVOC_CHML', 'N2O_CHML', 'O3_CHML', 'SO2_CHML',
+ 'CO_CHMP', 'O3_CHMP', 'SO2_CHMP', 'TMDMS', 'TMOCS', 'TMSO2','TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'soa1_a1_CHML', 'soa1_a2_CHML', 'soa2_a1_CHML', 'soa2_a2_CHML', 'soa3_a1_CHML', 'soa3_a2_CHML',
+ 'soa4_a1_CHML', 'soa4_a2_CHML', 'soa5_a1_CHML', 'soa5_a2_CHML', 'SVOC_CHML',
+ 'so4_a1_CHMP','so4_a2_CHMP', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'TOTH', 'TOT_CLD_VISTAU',
+ 'TREFHTMN', 'TREFHTMX', 'TROP_P', 'TROP_T', 'TROP_Z', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO',
+ 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'ABSORB', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse',
+ 'AODDUST02', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn', 'AODUVstdn', 'AODVIS',
+ 'AODVISdn', 'AODVISstdn', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'FLDSC', 'FLNR', 'FSNR',
+ 'CME', 'CMFDQ', 'CMFMC','CMFMC_DP', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST','TAQ',
+ 'DCOCHM','DH2O2CHM', 'DHNO3CHM', 'DO3CHM', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM',
+ 'FLASHFRQ', 'LNO_COL_PROD', 'LNO_PROD','KVH_CLUBB','MASS', 'PDELDRY', 'NITROP_PD','PM25', 'PRECT', 'PTEQ', 'PTTEND',
+ 'QRLC', 'QRSC', 'QSNOW', 'QRAIN','GS_SO2', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS','H2SO4M_C', 'H2SO4_sfnnuc1','HCL_GAS',
+ 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP' 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RHREFHT',
+ 'EVAPPREC', 'EVAPQZM', 'EVAPTZM', 'FCTL','FREQZM', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU','VEL_NAT2',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF',
+ 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF', 'pom_c4DDF', 'num_c1DDF','num_c2DDF','num_c3DDF','num_c4DDF',
+ 'so4_a1_sfgaex1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_a2_sfgaex1', 'so4_c2AQH2SO4', 'so4_c2AQSO4', 'so4_c2DDF',
+ 'so4_a3_sfgaex1', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_a2_sfnnuc1', 'num_a2_sfnnuc1',
+ 'soa1_a1_sfgaex1','soa1_c1DDF', 'soa1_a2_sfgaex1','soa1_c2DDF', 'soa2_a1_sfgaex1','soa2_c1DDF', 'soa2_a2_sfgaex1','soa2_c2DDF',
+ 'soa3_a1_sfgaex1','soa3_c1DDF', 'soa3_a2_sfgaex1','soa3_c2DDF', 'soa4_a1_sfgaex1','soa4_c1DDF', 'soa4_a2_sfgaex1','soa4_c2DDF',
+ 'soa5_a1_sfgaex1','soa5_c1DDF', 'soa5_a2_sfgaex1','soa5_c2DDF', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan',
+ 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_het10', 'r_het11', 'r_het12', 'r_het13',
+ 'r_het15', 'r_het16', 'r_het17', '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_GLYOXAL_aer', 'r_HO2_O3', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O', 'r_OH_O3', 'r_OH_O',
+ 'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
+ 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot', 'Ox_Prod','Ox_Loss'
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 4c862f997c..8397165538 100644
--- a/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
@@ -68,8 +68,8 @@
'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',
+ 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02',
+ 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse', 'AODDUST02', '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',
@@ -120,7 +120,7 @@
'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',
+ 'SFISOP', 'SFIVOC', 'SFMEK', 'SFMTERP', 'SFncl_a1', 'SFncl_a2', 'SFncl_a3', 'SFNH3', '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',
diff --git a/bld/namelist_files/use_cases/sd_waccmx_ma_cam6.xml b/bld/namelist_files/use_cases/sd_waccmx_ma_cam6.xml
index c67531174b..6b56c46b17 100644
--- a/bld/namelist_files/use_cases/sd_waccmx_ma_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_waccmx_ma_cam6.xml
@@ -62,11 +62,11 @@
0, -1, -24, -24, -120, -24, -120, -240
1, 24, 7, 7, 10, 365, 73, 30
-
-
- 'Z3', 'T', 'TIon', 'TElec', 'e', 'U', 'V', 'OMEGA', 'UI', 'VI', 'WI', 'ElecColDens', 'PHIM2D', 'PS',
- 'PED_CONDUCTANCE', 'HALL_CONDUCTANCE', 'ED1', 'ED2' 'O', 'O2', 'H', 'NO', 'CO2', 'N', 'O1D', 'Op2P', 'Op2D', 'Op',
- 'Np', 'N2p', 'O2p', 'NOp', 'QJOULE', 'SIGMAHAL', 'SIGMAPED', 'SolIonRate_Tot', 'QRS_TOT', 'QO3', 'QCO2',
+
+
+ 'Z3', 'T', 'TIon', 'TElec', 'e', 'U', 'V', 'OMEGA', 'UI', 'VI', 'WI', 'ElecColDens', 'PHIM2D', 'PS',
+ 'PED_CONDUCTANCE', 'HALL_CONDUCTANCE', 'ED1', 'ED2' 'O', 'O2', 'H', 'NO', 'CO2', 'N', 'O1D', 'Op2P', 'Op2D', 'Op',
+ 'Np', 'N2p', 'O2p', 'NOp', 'QJOULE', 'SIGMAHAL', 'SIGMAPED', 'SolIonRate_Tot', 'QRS_TOT', 'QO3', 'QCO2',
'QNO', 'QO3P', 'QHC2S', 'QJOULE', 'EKGW', 'TTGW', 'UTGW_TOTAL',
'T_24_COS', 'T_24_SIN', 'T_12_COS', 'T_12_SIN', 'T_08_COS', 'T_08_SIN',
'U_24_COS', 'U_24_SIN', 'U_12_COS', 'U_12_SIN', 'U_08_COS', 'U_08_SIN',
@@ -75,49 +75,49 @@
'ALATM', 'ALONM', 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO', 'BRONO2', 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11',
'CFC113', 'CFC12', 'CH2O', 'CH3BR', 'CH3CCL3', 'CH3CL', 'CH3O2', 'CH3OOH', 'CH4', 'CL',
'CL2', 'CL2O2', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD', 'CO',
- 'DTCOND', 'DTV', 'DUV', 'DVV', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC','FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC',
- 'H2', 'H2O', 'H2O2', 'HBR', 'HCFC22', 'HCL', 'HNO3', 'HO2', 'HO2NO2', 'HOBR', 'HOCL', 'HORZ',
- 'LANDFRAC', 'LHFLX', 'N2O', 'N2O5', 'NO2', 'NO3', 'O3', 'OCLO', 'OCNFRAC', 'OH', 'PHIS',
+ 'DTCOND', 'DTV', 'DUV', 'DVV', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC','FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC',
+ 'H2', 'H2O', 'H2O2', 'HBR', 'HCFC22', 'HCL', 'HNO3', 'HO2', 'HO2NO2', 'HOBR', 'HOCL', 'HORZ',
+ 'LANDFRAC', 'LHFLX', 'N2O', 'N2O5', 'NO2', 'NO3', 'O3', 'OCLO', 'OCNFRAC', 'OH', 'PHIS',
'PRECC', 'PRECL', 'Q', 'QFLX', 'QRL', 'QRS', 'RELHUM', 'SHFLX', 'SOLIN', 'SWCF', 'QCP', 'QTHERMAL',
'QRL_TOT', 'PSL', 'HNO3_STS', 'HNO3_NAT', 'HNO3_GAS', 'NO_Aircraft', 'NO_Lightning',
'QRS_AUR', 'QRS_CO2NIR', 'QRS_EUV', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'TREFHT',
- 'VERT', 'VTGWORO', 'VTGWSPEC', 'O2_1S', 'O2_1D', 'NOX', 'NOY', 'CLOX', 'CLOY', 'BROX', 'BROY',
- 'TCLY', 'TOTH', 'UIONTEND', 'VIONTEND', 'DTCORE', 'CLDLIQ', 'CLDICE', 'CONCLD', 'FRONTGF:I',
- 'BTAUE', 'BTAUW', 'BTAUN', 'BTAUS', 'TAUE', 'TAUW', 'TAUN', 'TAUS', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY',
+ 'VERT', 'VTGWORO', 'VTGWSPEC', 'O2_1S', 'O2_1D', 'NOX', 'NOY', 'CLOX', 'CLOY', 'BROX', 'BROY',
+ 'TCLY', 'TOTH', 'UIONTEND', 'VIONTEND', 'DTCORE', 'CLDLIQ', 'CLDICE', 'CONCLD', 'FRONTGF:I',
+ 'BTAUE', 'BTAUW', 'BTAUN', 'BTAUS', 'TAUE', 'TAUW', 'TAUN', 'TAUS', 'TAUGWX', 'TAUGWY', 'TAUX', 'TAUY',
'SNOWHLND', 'SNOWHICE', 'ICEFRAC', 'FSDSC', 'SFNO', 'SFCO', 'SFCH2O', 'CFC11STAR', 'TROPP_FD',
'KVH', 'KVM', 'KVT', 'Qbkgndtot', 'Z3GM', 'OpDens', 'EDens'
-
-
- 'Z3', 'T', 'TIon', 'TElec', 'e', 'U', 'V', 'OMEGA', 'UI', 'VI', 'WI', 'ElecColDens', 'PHIM2D', 'PS',
+
+
+ 'Z3', 'T', 'TIon', 'TElec', 'e', 'U', 'V', 'OMEGA', 'UI', 'VI', 'WI', 'ElecColDens', 'PHIM2D', 'PS',
'PED_CONDUCTANCE', 'HALL_CONDUCTANCE', 'ED1', 'ED2', 'O', 'O2', 'H'
-
-
- 'Z3', 'T', 'TIon', 'TElec', 'e', 'U', 'V', 'OMEGA', 'UI', 'VI', 'WI', 'ElecColDens', 'PHIM2D', 'PS',
- 'PED_CONDUCTANCE', 'HALL_CONDUCTANCE', 'ED1', 'ED2', 'O', 'O2', 'H', 'NO', 'CO2', 'N', 'O1D',
+
+
+ 'Z3', 'T', 'TIon', 'TElec', 'e', 'U', 'V', 'OMEGA', 'UI', 'VI', 'WI', 'ElecColDens', 'PHIM2D', 'PS',
+ 'PED_CONDUCTANCE', 'HALL_CONDUCTANCE', 'ED1', 'ED2', 'O', 'O2', 'H', 'NO', 'CO2', 'N', 'O1D',
'Op2P', 'Op2D', 'Op', 'Np', 'N2p', 'O2p', 'NOp', 'QJOULE', 'SIGMAHAL', 'SIGMAPED', 'SolIonRate_Tot',
'Z3GM', 'OpDens', 'EDens'
-
-
- 'Z3', 'T', 'TIon', 'TElec', 'e', 'U', 'V', 'OMEGA', 'UI', 'VI', 'WI', 'ElecColDens', 'PHIM2D', 'PS',
- 'PED_CONDUCTANCE', 'HALL_CONDUCTANCE', 'ED1', 'ED2', 'O', 'O2', 'H', 'NO', 'CO2', 'N', 'QRS_TOT',
- 'QO3', 'QCO2', 'QNO', 'QO3P', 'QHC2S', 'QJOULE', 'EKGW', 'TTGW', 'UTGW_TOTAL',
+
+
+ 'Z3', 'T', 'TIon', 'TElec', 'e', 'U', 'V', 'OMEGA', 'UI', 'VI', 'WI', 'ElecColDens', 'PHIM2D', 'PS',
+ 'PED_CONDUCTANCE', 'HALL_CONDUCTANCE', 'ED1', 'ED2', 'O', 'O2', 'H', 'NO', 'CO2', 'N', 'QRS_TOT',
+ 'QO3', 'QCO2', 'QNO', 'QO3P', 'QHC2S', 'QJOULE', 'EKGW', 'TTGW', 'UTGW_TOTAL',
'SolIonRate_Tot', 'Z3GM', 'OpDens', 'EDens'
-
-
+
+
'T_24_COS', 'T_24_SIN', 'T_12_COS', 'T_12_SIN', 'T_08_COS', 'T_08_SIN',
'U_24_COS', 'U_24_SIN', 'U_12_COS', 'U_12_SIN', 'U_08_COS', 'U_08_SIN',
'V_24_COS', 'V_24_SIN', 'V_12_COS', 'V_12_SIN', 'V_08_COS', 'V_08_SIN',
'OMEGA_24_COS', 'OMEGA_24_SIN', 'OMEGA_12_COS', 'OMEGA_12_SIN', 'OMEGA_08_COS', 'OMEGA_08_SIN'
-
+
'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',
@@ -135,9 +135,4 @@
.false.
.false.
-
- 'SolIonRate_Tot = jeuv_1 + jeuv_2 + jeuv_3 + jeuv_4 + jeuv_5 + jeuv_6 + jeuv_7 + jeuv_8 + jeuv_9 + jeuv_10 + jeuv_11 + jeuv_14 + jeuv_15 + jeuv_16 +',
- 'jeuv_17 + jeuv_18 + jeuv_19 + jeuv_20 + jeuv_21 + jeuv_22 + jeuv_23',
-
-
diff --git a/bld/namelist_files/use_cases/waccm_sc_2000_cam6.xml b/bld/namelist_files/use_cases/waccm_sc_2000_cam6.xml
index 8625224f69..cdb217a987 100644
--- a/bld/namelist_files/use_cases/waccm_sc_2000_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_2000_cam6.xml
@@ -84,18 +84,18 @@
'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_so4_a1_anthro-ag-ship_surface_2000climo_0.9x1.25_c20170616.nc',
'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_so4_a1_bb_surface_2000climo_0.9x1.25_c20170322.nc',
'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_so4_a2_anthro-res_surface_2000climo_0.9x1.25_c20170616.nc',
- 'SOAE -> 4.4323D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_BENZENE_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 4.4323D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_BENZENE_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 1.2021D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_ISOP_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 6.6625D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_MTERP_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 9.9042D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_TOLUENE_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 9.9042D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_TOLUENE_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 8.3792D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_XYLENES_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 8.3792D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_XYLENES_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 8.6865D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_IVOC_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 8.6865D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_IVOC_bb_surface_2000climo_0.9x1.25_c20170322.nc',
- 'SOAE -> 16.8188D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_SVOC_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
- 'SOAE -> 16.8188D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_SVOC_bb_surface_2000climo_0.9x1.25_c20170322.nc'
+ 'SOAE -> 2.5592D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_BENZENE_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 2.5592D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_BENZENE_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 0.5954D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_ISOP_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 5.1004D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_MTERP_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 8.2367D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_TOLUENE_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 8.2367D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_TOLUENE_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 6.5013D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_XYLENES_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 6.5013D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_XYLENES_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 8.5371D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_IVOC_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 8.5371D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_IVOC_bb_surface_2000climo_0.9x1.25_c20170322.nc',
+ 'SOAE -> 16.650D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_SVOC_anthro_surface_2000climo_0.9x1.25_c20170608.nc',
+ 'SOAE -> 16.650D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2000climo/emissions-cmip6_SVOC_bb_surface_2000climo_0.9x1.25_c20170322.nc'
diff --git a/bld/namelist_files/use_cases/waccm_sc_2010_cam6.xml b/bld/namelist_files/use_cases/waccm_sc_2010_cam6.xml
index d24823caab..d878ba8f6d 100644
--- a/bld/namelist_files/use_cases/waccm_sc_2010_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_2010_cam6.xml
@@ -84,18 +84,18 @@
'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_so4_a1_anthro-ag-ship_surface_2010climo_0.9x1.25_c20180918.nc',
'so4_a1 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_so4_a1_bb_surface_2010climo_0.9x1.25_c20180918.nc',
'so4_a2 -> $INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_so4_a2_anthro-res_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 4.4323D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_BENZENE_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 4.4323D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_BENZENE_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 1.2021D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_ISOP_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 6.6625D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_MTERP_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 9.9042D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_TOLUENE_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 9.9042D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_TOLUENE_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 8.3792D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_XYLENES_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 8.3792D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_XYLENES_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 8.6865D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_IVOC_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 8.6865D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_IVOC_bb_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 16.8188D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_SVOC_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
- 'SOAE -> 16.8188D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_SVOC_bb_surface_2010climo_0.9x1.25_c20180918.nc'
+ 'SOAE -> 2.5592D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_BENZENE_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 2.5592D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_BENZENE_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 0.5954D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_ISOP_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 5.1004D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_MTERP_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 8.2367D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_TOLUENE_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 8.2367D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_TOLUENE_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 6.5013D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_XYLENES_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 6.5013D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_XYLENES_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 8.5371D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_IVOC_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 8.5371D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_IVOC_bb_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 16.650D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_SVOC_anthro_surface_2010climo_0.9x1.25_c20180918.nc',
+ 'SOAE -> 16.650D0*$INPUTDATA_ROOT/atm/cam/chem/emis/CMIP6_emissions_2010climo/emissions-cmip6_SVOC_bb_surface_2010climo_0.9x1.25_c20180918.nc'
CYCLICAL
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 cf01e5431a..800b9b228a 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
@@ -66,85 +66,36 @@
'AOA1SRC', 'AOA2SRC', 'NO2_CMXF', 'NO2_CLXF'
- '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',
- 'CMFMC_DP', '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', 'O3S', 'O3_CHML', 'O3_CHMP', 'O', 'OCLO', 'OCS', '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',
- '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', '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', 'V', 'VD01', 'VEL_NAT2', 'VV',
- 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
- 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU',
+ 'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
+ 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE', 'CONCLD', 'CME', 'CMFDQ', 'CMFMC', 'CMFMC_DP',
+ 'CH3CCL3_CHML', 'CH4_CHML', 'CO2_CHML', 'CO_CHML', 'IVOC_CHML', 'N2O_CHML', 'O3_CHML', 'SO2_CHML',
+ 'CO_CHMP', 'O3_CHMP', 'SO2_CHMP', 'TMDMS', 'TMOCS', 'TMSO2','TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'soa1_a1_CHML', 'soa1_a2_CHML', 'soa2_a1_CHML', 'soa2_a2_CHML', 'soa3_a1_CHML', 'soa3_a2_CHML',
+ 'soa4_a1_CHML', 'soa4_a2_CHML', 'soa5_a1_CHML', 'soa5_a2_CHML', 'SVOC_CHML',
+ 'so4_a1_CHMP','so4_a2_CHMP', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'TOTH', 'TOT_CLD_VISTAU',
+ 'TREFHTMN', 'TREFHTMX', 'TROP_P', 'TROP_T', 'TROP_Z', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO',
+ 'TS', 'TSMN:M', 'TSMX:X', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'ABSORB', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse',
+ 'AODDUST02', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn', 'AODUVstdn', 'AODVIS',
+ 'AODVISdn', 'AODVISstdn', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'FLDSC', 'FLNR', 'FSNR',
+ 'CME', 'CMFDQ', 'CMFMC','CMFMC_DP', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST','TAQ',
+ 'DCOCHM','DH2O2CHM', 'DHNO3CHM', 'DO3CHM', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM',
+ 'FLASHFRQ', 'LNO_COL_PROD', 'LNO_PROD','KVH_CLUBB','MASS', 'PDELDRY', 'NITROP_PD','PM25', 'PRECT', 'PTEQ', 'PTTEND',
+ 'QRLC', 'QRSC', 'QSNOW', 'QRAIN','GS_SO2', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS','H2SO4M_C', 'H2SO4_sfnnuc1','HCL_GAS',
+ 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP' 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RHREFHT',
+ 'EVAPPREC', 'EVAPQZM', 'EVAPTZM', 'FCTL','FREQZM', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU','VEL_NAT2',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF',
+ 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF', 'pom_c4DDF', 'num_c1DDF','num_c2DDF','num_c3DDF','num_c4DDF',
+ 'so4_a1_sfgaex1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_a2_sfgaex1', 'so4_c2AQH2SO4', 'so4_c2AQSO4', 'so4_c2DDF',
+ 'so4_a3_sfgaex1', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_a2_sfnnuc1', 'num_a2_sfnnuc1',
+ 'soa1_a1_sfgaex1','soa1_c1DDF', 'soa1_a2_sfgaex1','soa1_c2DDF', 'soa2_a1_sfgaex1','soa2_c1DDF', 'soa2_a2_sfgaex1','soa2_c2DDF',
+ 'soa3_a1_sfgaex1','soa3_c1DDF', 'soa3_a2_sfgaex1','soa3_c2DDF', 'soa4_a1_sfgaex1','soa4_c1DDF', 'soa4_a2_sfgaex1','soa4_c2DDF',
+ 'soa5_a1_sfgaex1','soa5_c1DDF', 'soa5_a2_sfgaex1','soa5_c2DDF', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan',
+ 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_het10', 'r_het11', 'r_het12', 'r_het13',
+ 'r_het15', 'r_het16', 'r_het17', '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_GLYOXAL_aer', 'r_HO2_O3', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O', 'r_OH_O3', 'r_OH_O',
'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
- 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot',
- 'Ox_Prod','Ox_Loss'
+ 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot', 'Ox_Prod','Ox_Loss'
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_2000_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_2000_cam6.xml
index 564cfaf660..3ad0c7db31 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_2000_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_2000_cam6.xml
@@ -263,85 +263,36 @@
'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',
- 'CMFMC_DP', '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', 'O3S', 'O3_CHML', 'O3_CHMP', 'O', 'OCLO', 'OCS', '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',
- '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', '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', 'V', 'VD01', 'VEL_NAT2', 'VV',
- 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
- 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU',
+ 'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
+ 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE', 'CONCLD', 'CME', 'CMFDQ', 'CMFMC', 'CMFMC_DP',
+ 'CH3CCL3_CHML', 'CH4_CHML', 'CO2_CHML', 'CO_CHML', 'IVOC_CHML', 'N2O_CHML', 'O3_CHML', 'SO2_CHML',
+ 'CO_CHMP', 'O3_CHMP', 'SO2_CHMP', 'TMDMS', 'TMOCS', 'TMSO2','TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'soa1_a1_CHML', 'soa1_a2_CHML', 'soa2_a1_CHML', 'soa2_a2_CHML', 'soa3_a1_CHML', 'soa3_a2_CHML',
+ 'soa4_a1_CHML', 'soa4_a2_CHML', 'soa5_a1_CHML', 'soa5_a2_CHML', 'SVOC_CHML',
+ 'so4_a1_CHMP','so4_a2_CHMP', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'TOTH', 'TOT_CLD_VISTAU',
+ 'TREFHTMN', 'TREFHTMX', 'TROP_P', 'TROP_T', 'TROP_Z', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO',
+ 'TS', 'TSMN:M', 'TSMX:X', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'ABSORB', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse',
+ 'AODDUST02', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn', 'AODUVstdn', 'AODVIS',
+ 'AODVISdn', 'AODVISstdn', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'FLDSC', 'FLNR', 'FSNR',
+ 'CME', 'CMFDQ', 'CMFMC','CMFMC_DP', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST','TAQ',
+ 'DCOCHM','DH2O2CHM', 'DHNO3CHM', 'DO3CHM', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM',
+ 'FLASHFRQ', 'LNO_COL_PROD', 'LNO_PROD','KVH_CLUBB','MASS', 'PDELDRY', 'NITROP_PD','PM25', 'PRECT', 'PTEQ', 'PTTEND',
+ 'QRLC', 'QRSC', 'QSNOW', 'QRAIN','GS_SO2', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS','H2SO4M_C', 'H2SO4_sfnnuc1','HCL_GAS',
+ 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP' 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RHREFHT',
+ 'EVAPPREC', 'EVAPQZM', 'EVAPTZM', 'FCTL','FREQZM', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU','VEL_NAT2',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF',
+ 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF', 'pom_c4DDF', 'num_c1DDF','num_c2DDF','num_c3DDF','num_c4DDF',
+ 'so4_a1_sfgaex1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_a2_sfgaex1', 'so4_c2AQH2SO4', 'so4_c2AQSO4', 'so4_c2DDF',
+ 'so4_a3_sfgaex1', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_a2_sfnnuc1', 'num_a2_sfnnuc1',
+ 'soa1_a1_sfgaex1','soa1_c1DDF', 'soa1_a2_sfgaex1','soa1_c2DDF', 'soa2_a1_sfgaex1','soa2_c1DDF', 'soa2_a2_sfgaex1','soa2_c2DDF',
+ 'soa3_a1_sfgaex1','soa3_c1DDF', 'soa3_a2_sfgaex1','soa3_c2DDF', 'soa4_a1_sfgaex1','soa4_c1DDF', 'soa4_a2_sfgaex1','soa4_c2DDF',
+ 'soa5_a1_sfgaex1','soa5_c1DDF', 'soa5_a2_sfgaex1','soa5_c2DDF', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan',
+ 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_het10', 'r_het11', 'r_het12', 'r_het13',
+ 'r_het15', 'r_het16', 'r_het17', '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_GLYOXAL_aer', 'r_HO2_O3', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O', 'r_OH_O3', 'r_OH_O',
'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
- 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot',
- 'Ox_Prod','Ox_Loss'
+ 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot', 'Ox_Prod','Ox_Loss'
diff --git a/bld/namelist_files/use_cases/waccm_tsmlt_2010_cam6.xml b/bld/namelist_files/use_cases/waccm_tsmlt_2010_cam6.xml
index 70a9f99e37..219083b1a4 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_2010_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_2010_cam6.xml
@@ -163,85 +163,36 @@
'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',
- 'CMFMC_DP', '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', 'O3S', 'O3_CHML', 'O3_CHMP', 'O', 'OCLO', 'OCS', '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',
- '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', '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', 'V', 'VD01', 'VEL_NAT2', 'VV',
- 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
- 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU',
+ 'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
+ 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE', 'CONCLD', 'CME', 'CMFDQ', 'CMFMC', 'CMFMC_DP',
+ 'CH3CCL3_CHML', 'CH4_CHML', 'CO2_CHML', 'CO_CHML', 'IVOC_CHML', 'N2O_CHML', 'O3_CHML', 'SO2_CHML',
+ 'CO_CHMP', 'O3_CHMP', 'SO2_CHMP', 'TMDMS', 'TMOCS', 'TMSO2','TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'soa1_a1_CHML', 'soa1_a2_CHML', 'soa2_a1_CHML', 'soa2_a2_CHML', 'soa3_a1_CHML', 'soa3_a2_CHML',
+ 'soa4_a1_CHML', 'soa4_a2_CHML', 'soa5_a1_CHML', 'soa5_a2_CHML', 'SVOC_CHML',
+ 'so4_a1_CHMP','so4_a2_CHMP', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'TOTH', 'TOT_CLD_VISTAU',
+ 'TREFHTMN', 'TREFHTMX', 'TROP_P', 'TROP_T', 'TROP_Z', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO',
+ 'TS', 'TSMN:M', 'TSMX:X', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'ABSORB', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse',
+ 'AODDUST02', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn', 'AODUVstdn', 'AODVIS',
+ 'AODVISdn', 'AODVISstdn', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'FLDSC', 'FLNR', 'FSNR',
+ 'CME', 'CMFDQ', 'CMFMC','CMFMC_DP', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST','TAQ',
+ 'DCOCHM','DH2O2CHM', 'DHNO3CHM', 'DO3CHM', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM',
+ 'FLASHFRQ', 'LNO_COL_PROD', 'LNO_PROD','KVH_CLUBB','MASS', 'PDELDRY', 'NITROP_PD','PM25', 'PRECT', 'PTEQ', 'PTTEND',
+ 'QRLC', 'QRSC', 'QSNOW', 'QRAIN','GS_SO2', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS','H2SO4M_C', 'H2SO4_sfnnuc1','HCL_GAS',
+ 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP' 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RHREFHT',
+ 'EVAPPREC', 'EVAPQZM', 'EVAPTZM', 'FCTL','FREQZM', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU','VEL_NAT2',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF',
+ 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF', 'pom_c4DDF', 'num_c1DDF','num_c2DDF','num_c3DDF','num_c4DDF',
+ 'so4_a1_sfgaex1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_a2_sfgaex1', 'so4_c2AQH2SO4', 'so4_c2AQSO4', 'so4_c2DDF',
+ 'so4_a3_sfgaex1', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_a2_sfnnuc1', 'num_a2_sfnnuc1',
+ 'soa1_a1_sfgaex1','soa1_c1DDF', 'soa1_a2_sfgaex1','soa1_c2DDF', 'soa2_a1_sfgaex1','soa2_c1DDF', 'soa2_a2_sfgaex1','soa2_c2DDF',
+ 'soa3_a1_sfgaex1','soa3_c1DDF', 'soa3_a2_sfgaex1','soa3_c2DDF', 'soa4_a1_sfgaex1','soa4_c1DDF', 'soa4_a2_sfgaex1','soa4_c2DDF',
+ 'soa5_a1_sfgaex1','soa5_c1DDF', 'soa5_a2_sfgaex1','soa5_c2DDF', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan',
+ 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_het10', 'r_het11', 'r_het12', 'r_het13',
+ 'r_het15', 'r_het16', 'r_het17', '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_GLYOXAL_aer', 'r_HO2_O3', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O', 'r_OH_O3', 'r_OH_O',
'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
- 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot',
- 'Ox_Prod','Ox_Loss'
+ 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot', 'Ox_Prod','Ox_Loss'
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 12628e4412..6ad0b14145 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
@@ -59,85 +59,36 @@
'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',
- 'CMFMC_DP', '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', 'O3S', 'O3_CHML', 'O3_CHMP', 'O', 'OCLO', 'OCS', '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',
- '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', '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', 'V', 'VD01', 'VEL_NAT2', 'VV',
- 'wet_deposition_NHx_as_N', 'wet_deposition_NOy_as_N', 'XO2', 'XOOH', 'XYLENES', 'XYLENO2', 'XYLENOOH', 'XYLOL', 'XYLOLO2',
- 'XYLOLOOH', 'Z3', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU',
+ 'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
+ 'BTTGWSPEC', 'BTTGWSDF', 'BTTGWSKE', 'CONCLD', 'CME', 'CMFDQ', 'CMFMC', 'CMFMC_DP',
+ 'CH3CCL3_CHML', 'CH4_CHML', 'CO2_CHML', 'CO_CHML', 'IVOC_CHML', 'N2O_CHML', 'O3_CHML', 'SO2_CHML',
+ 'CO_CHMP', 'O3_CHMP', 'SO2_CHMP', 'TMDMS', 'TMOCS', 'TMSO2','TMso4_a1', 'TMso4_a2', 'TMso4_a3',
+ 'soa1_a1_CHML', 'soa1_a2_CHML', 'soa2_a1_CHML', 'soa2_a2_CHML', 'soa3_a1_CHML', 'soa3_a2_CHML',
+ 'soa4_a1_CHML', 'soa4_a2_CHML', 'soa5_a1_CHML', 'soa5_a2_CHML', 'SVOC_CHML',
+ 'so4_a1_CHMP','so4_a2_CHMP', 'SOAG0_CHMP', 'SOAG1_CHMP', 'SOAG2_CHMP', 'SOAG3_CHMP', 'SOAG4_CHMP', 'TOTH', 'TOT_CLD_VISTAU',
+ 'TREFHTMN', 'TREFHTMX', 'TROP_P', 'TROP_T', 'TROP_Z', 'TTEND_TOT', 'TTGWORO', 'TTGWSDF', 'TTGWSDFORO', 'TTGWSKE', 'TTGWSKEORO',
+ 'TS', 'TSMN:M', 'TSMX:X', 'BURDENBCdn', 'BURDENDUSTdn', 'BURDENPOMdn', 'BURDENSEASALTdn', 'BURDENSO4dn', 'BURDENSOAdn',
+ 'ABSORB', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse',
+ 'AODDUST02', 'AODDUST', 'AODNIRstdn', 'AODPOMdn', 'AODSO4dn', 'AODSOAdn', 'AODSSdn', 'AODUVdn', 'AODUVstdn', 'AODVIS',
+ 'AODVISdn', 'AODVISstdn', 'EXTINCTdn', 'EXTINCTNIRdn', 'EXTINCTUVdn', 'EXTxASYMdn', 'FLDSC', 'FLNR', 'FSNR',
+ 'CME', 'CMFDQ', 'CMFMC','CMFMC_DP', 'SOLLD', 'SOLSD', 'SSAVIS', 'SST','TAQ',
+ 'DCOCHM','DH2O2CHM', 'DHNO3CHM', 'DO3CHM', 'Dso4_a1CHM', 'Dso4_a2CHM', 'Dso4_a3CHM',
+ 'FLASHFRQ', 'LNO_COL_PROD', 'LNO_PROD','KVH_CLUBB','MASS', 'PDELDRY', 'NITROP_PD','PM25', 'PRECT', 'PTEQ', 'PTTEND',
+ 'QRLC', 'QRSC', 'QSNOW', 'QRAIN','GS_SO2', 'HNO3_GAS', 'HNO3_NAT', 'HNO3_STS','H2SO4M_C', 'H2SO4_sfnnuc1','HCL_GAS',
+ 'SAD_AERO', 'SAD_ICE', 'SAD_LNAT', 'SAD_SULFC', 'SAD_TROP' 'RAD_ICE', 'RAD_LNAT', 'RAD_SULFC', 'REFF_AERO', 'RHREFHT',
+ 'EVAPPREC', 'EVAPQZM', 'EVAPTZM', 'FCTL','FREQZM', 'ZMDQ', 'ZMDT', 'ZMMTT', 'ZMMU','VEL_NAT2',
+ 'dgnumwet1', 'dgnumwet2', 'dgnumwet3', 'bc_c1DDF', 'bc_c4DDF', 'dst_c1DDF', 'dst_c2DDF', 'dst_c3DDF',
+ 'ncl_c1DDF', 'ncl_c2DDF', 'ncl_c3DDF', 'pom_c1DDF', 'pom_c4DDF', 'num_c1DDF','num_c2DDF','num_c3DDF','num_c4DDF',
+ 'so4_a1_sfgaex1', 'so4_c1AQH2SO4', 'so4_c1AQSO4', 'so4_c1DDF', 'so4_a2_sfgaex1', 'so4_c2AQH2SO4', 'so4_c2AQSO4', 'so4_c2DDF',
+ 'so4_a3_sfgaex1', 'so4_c3AQH2SO4', 'so4_c3AQSO4', 'so4_c3DDF', 'so4_a2_sfnnuc1', 'num_a2_sfnnuc1',
+ 'soa1_a1_sfgaex1','soa1_c1DDF', 'soa1_a2_sfgaex1','soa1_c2DDF', 'soa2_a1_sfgaex1','soa2_c1DDF', 'soa2_a2_sfgaex1','soa2_c2DDF',
+ 'soa3_a1_sfgaex1','soa3_c1DDF', 'soa3_a2_sfgaex1','soa3_c2DDF', 'soa4_a1_sfgaex1','soa4_c1DDF', 'soa4_a2_sfgaex1','soa4_c2DDF',
+ 'soa5_a1_sfgaex1','soa5_c1DDF', 'soa5_a2_sfgaex1','soa5_c2DDF', 'jcl2o2', 'jh2o2', 'jno2', 'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jpan',
+ 'r_het1', 'r_het2', 'r_het3', 'r_het4', 'r_het5', 'r_het6', 'r_het7', 'r_het8', 'r_het9', 'r_het10', 'r_het11', 'r_het12', 'r_het13',
+ 'r_het15', 'r_het16', 'r_het17', '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_GLYOXAL_aer', 'r_HO2_O3', 'r_N2O5_aer', 'r_NO2_aer', 'r_NO3_aer', 'r_O1D_H2O', 'r_OH_O3', 'r_OH_O',
'O3_Prod','O3_Loss','O3S_Loss','RO2_NO_sum','O3_alkenes','RO2_NO3_sum','RO2_HO2_sum','RO2_RO2_sum','RCO2_NO2_sum',
- 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot',
- 'Ox_Prod','Ox_Loss'
+ 'OddOx_Ox_Loss','OddOx_HOx_Loss','OddOx_NOx_Loss','OddOx_CLOxBROx_Loss','OddOx_Loss_Tot','OddOx_Prod_Tot', 'Ox_Prod','Ox_Loss'
diff --git a/bld/namelist_files/use_cases/waccmx_ma_2000_cam6.xml b/bld/namelist_files/use_cases/waccmx_ma_2000_cam6.xml
index cb86bc0f9c..7052ac83bb 100644
--- a/bld/namelist_files/use_cases/waccmx_ma_2000_cam6.xml
+++ b/bld/namelist_files/use_cases/waccmx_ma_2000_cam6.xml
@@ -101,9 +101,4 @@
42
-
- 'SolIonRate_Tot = jeuv_1 + jeuv_2 + jeuv_3 + jeuv_4 + jeuv_5 + jeuv_6 + jeuv_7 + jeuv_8 + jeuv_9 + jeuv_10 + jeuv_11 + jeuv_14 + jeuv_15 + jeuv_16 +',
- 'jeuv_17 + jeuv_18 + jeuv_19 + jeuv_20 + jeuv_21 + jeuv_22 + jeuv_23',
-
-
diff --git a/bld/namelist_files/use_cases/waccmx_ma_hist_cam6.xml b/bld/namelist_files/use_cases/waccmx_ma_hist_cam6.xml
index 7075565589..c928b43f28 100644
--- a/bld/namelist_files/use_cases/waccmx_ma_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccmx_ma_hist_cam6.xml
@@ -99,9 +99,4 @@
42
-
- 'SolIonRate_Tot = jeuv_1 + jeuv_2 + jeuv_3 + jeuv_4 + jeuv_5 + jeuv_6 + jeuv_7 + jeuv_8 + jeuv_9 + jeuv_10 + jeuv_11 + jeuv_14 + jeuv_15 + jeuv_16 +',
- 'jeuv_17 + jeuv_18 + jeuv_19 + jeuv_20 + jeuv_21 + jeuv_22 + jeuv_23',
-
-
diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml
index be98795548..6326bd3c8a 100644
--- a/cime_config/config_component.xml
+++ b/cime_config/config_component.xml
@@ -8,11 +8,11 @@
CAM
===============
-->
- CAM cam6 physics:
+ CAM cam6 physics:
CAM cam5 physics:
CAM cam4 physics:
CAM cam3 physics:
- CAM simplified and non-versioned physics :
+ CAM simplified and non-versioned physics :
CAM7 development physics:
+ With Harmonized Emissions Component (HEMCO) for chemistry:
+
-phys adiabatic
-phys adiabatic
-phys tj2016 -analytic_ic
+ -phys grayrad -analytic_ic
-phys held_suarez -analytic_ic
-phys kessler -chem terminator -analytic_ic -nadv_tt=6
@@ -295,6 +303,7 @@
dabi_p2004
held_suarez_1994
dctest_tj2016
+ dctest_frierson
dctest_baro_kessler
@@ -334,6 +343,8 @@
flbc_file='$DIN_LOC_ROOT/atm/waccm/lb/LBC_CMIP6_1pctCO2ramp_y1-165_0p5degLat_c180930.nc'
nlte_limit_co2=.true.
co2_cycle_rad_passive=.true.
+
+ use_hemco=.true.
rearth = 6.37122D6
diff --git a/cime_config/config_compsets.xml b/cime_config/config_compsets.xml
index ba14ff840e..264cde524f 100644
--- a/cime_config/config_compsets.xml
+++ b/cime_config/config_compsets.xml
@@ -56,12 +56,7 @@
- NFLT1850_TESTINGONLY_v0c
- 1850_CAM%DEV%NORESM%LT%GHGMAM4_CLM51%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
-
-
-
- NFLTHIST_v0c
+ NFLTHIST_v0d
HIST_CAM%DEV%LT%NORESM%GHGMAM4_CLM51%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
@@ -90,12 +85,12 @@
- FLTHIST_v0c
- HIST_CAM%DEV%GHGMAM4_CLM51%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+ FLTHIST_v0d
+ HIST_CAM%DEV%LT%GHGMAM4_CLM51%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
- FMTHIST_v0c
+ FMTHIST_v0d
HIST_CAM%DEV%MT%GHGMAM4_CLM51%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
@@ -339,11 +334,19 @@
FC2000climo
2000_CAM60%CCTS1_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
+ FC2000climo_HCO
+ 2000_CAM60%CCTS1%HEMCO_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
FC2010climo
2010_CAM60%CCTS1_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
+ FC2010climo_HCO
+ 2010_CAM60%CCTS1%HEMCO_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
FCHIST
@@ -365,6 +368,10 @@
FCfireHIST
HIST_CAM60%CFIRE_CLM50%BGC-CROP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
+ FCHIST_HCO
+ HIST_CAM60%CCTS1%HEMCO_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
FCnudged
@@ -374,6 +381,14 @@
FCts2nudged
HIST_CAM60%CCTS2%NUDG_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
+ FCnudged_HCO
+ HIST_CAM60%CCTS1%NUDG%HEMCO_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
+
+ FCts2nudged_HCO
+ HIST_CAM60%CCTS2%NUDG%HEMCO_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
FCSD
@@ -383,6 +398,10 @@
FCts2SD
HIST_CAM60%CCTS2%SDYN_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
+ FCSD_HCO
+ HIST_CAM60%CCTS1%SDYN%HEMCO_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV
+
FSD
@@ -404,6 +423,10 @@
HIST_CAM60_CLM50%SP_CICE%PRES_DOCN%DOM_SROF_SGLC_SWAV
+
+ FGRAYRAD
+ 2000_CAM%GRAYRAD_SLND_SICE_SOCN_SROF_SGLC_SWAV
+
diff --git a/cime_config/testdefs/testlist_cam.xml b/cime_config/testdefs/testlist_cam.xml
index d1f05ea1e2..3149a3f9d4 100644
--- a/cime_config/testdefs/testlist_cam.xml
+++ b/cime_config/testdefs/testlist_cam.xml
@@ -10,7 +10,7 @@
-
+
@@ -100,7 +100,7 @@
-
+
diff --git a/cime_config/testdefs/testmods_dirs/cam/scmarm/shell_commands b/cime_config/testdefs/testmods_dirs/cam/scmarm/shell_commands
index 31a36fb678..2898a75de3 100644
--- a/cime_config/testdefs/testmods_dirs/cam/scmarm/shell_commands
+++ b/cime_config/testdefs/testmods_dirs/cam/scmarm/shell_commands
@@ -3,7 +3,6 @@
./xmlchange GLC_NCPL=\$ATM_NCPL
./xmlchange EPS_AAREA=9.0e-4
./xmlchange EPS_AGRID=9.0e-5
-./xmlchange MPILIB=mpi-serial
./xmlchange REST_OPTION=never
./xmlchange CAM_NML_USE_CASE=UNSET
./xmlchange PTS_LAT=36.6
diff --git a/cime_config/usermods_dirs/CMIP6_B1850/user_nl_cam b/cime_config/usermods_dirs/CMIP6_B1850/user_nl_cam
index 45e18d1a6a..7958c8cd03 100644
--- a/cime_config/usermods_dirs/CMIP6_B1850/user_nl_cam
+++ b/cime_config/usermods_dirs/CMIP6_B1850/user_nl_cam
@@ -1,64 +1,62 @@
-nhtfrq = 0, -24, -6, -3, -1, 1, -24,-120,-240
+nhtfrq = 0, -24, -6, -3, -1, 1, -24,-120,-240
-mfilt = 1, 5, 20, 40, 120, 240, 365, 73, 365
+mfilt = 1, 5, 20, 40, 120, 240, 365, 73, 365
ndens = 2, 2, 2, 2, 2, 2, 1, 1, 1
-fincl1 = 'ABSORB:A', 'ACTREL:A', 'AODABSdn:A', 'AODBCdn:A', 'AODdnDUST1:A', 'AODdnDUST2:A',
- 'AODdnDUST3:A', 'AODdnMODE1:A', 'AODdnMODE2:A', 'AODdnMODE3:A', 'AODDUST2:A', 'AODDUST:A', 'AODNIRstdn:A', 'AODPOMdn:A', 'AODSO4dn:A', 'AODSOAdn:A', 'AODSSdn:A',
- 'AODUVdn:A', 'AODUVstdn:A', 'AODVIS:A', 'AODVISdn:A', 'AODVISstdn:A', 'AQ_SO2:A', 'AREA:A', 'AREI:A', 'AREL:A', 'bc_a1:A', 'bc_a1DDF:A',
- 'bc_a1SFWET:A', 'bc_a4:A', 'bc_a4DDF:A', 'bc_a4SFWET:A', 'bc_c1:A', 'bc_c1DDF:A', 'bc_c1SFWET:A', 'bc_c4:A', 'bc_c4DDF:A',
- 'bc_c4SFWET:A', 'BROX:A', 'BROY:A', 'BURDENBCdn', 'BURDENDUSTdn:A', 'BURDENPOMdn:A', 'BURDENSEASALTdn:A', 'BURDENSO4dn:A',
- 'BURDENSOAdn:A', 'CDNUMC:A', 'CLDICE:A', 'CLDLIQ:A', 'CLDTOT:A', 'CLOUD:A', 'CLOX:A', 'CLOY:A', 'CME:A', 'CMFDQ:A', 'CMFMC:A',
- 'CMFMC_DP:A', 'CO2:A', 'CONCLD:A', 'DF_H2O2:A', 'DF_H2SO4:A',
- 'DF_SO2:A', 'dgnumwet1:A', 'dgnumwet2:A', 'dgnumwet3:A', 'DH2O2CHM:A', 'DMS:A', 'dry_deposition_NHx_as_N:A',
- 'dry_deposition_NOy_as_N:A', 'Dso4_a1CHM:A', 'Dso4_a2CHM:A', 'Dso4_a3CHM:A', 'dst_a1:A', 'dst_a1DDF:A', 'dst_a1SFWET:A', 'dst_a2:A', 'dst_a2DDF:A',
- 'dst_a2SFWET:A', 'dst_a3:A', 'dst_a3DDF:A', 'dst_a3SFWET:A', 'dst_c1:A', 'dst_c1DDF:A', 'dst_c1SFWET:A', 'dst_c2:A', 'dst_c2DDF:A', 'dst_c2SFWET:A',
- 'dst_c3:A', 'dst_c3DDF:A', 'dst_c3SFWET:A', 'DTCORE:A', 'EVAPPREC:A',
- 'EVAPQZM:A', 'EVAPTZM:A', 'EXTINCTdn:A', 'EXTINCTNIRdn:A', 'EXTINCTUVdn:A', 'EXTxASYMdn:A', 'FCTL:A',
- 'FLDS:A', 'FLDSC:A', 'FLNR:A', 'FLNS:A', 'FLNSC:A', 'FLNT:A', 'FLNTC:A', 'FLUT:A', 'FLUTC:A', 'FREQI:A', 'FREQL:A', 'FREQZM:A', 'FSDS:A',
- 'FSDSC:A', 'FSNR:A', 'FSNS:A', 'FSNSC:A', 'FSNT:A', 'FSNTC:A', 'FSNTOAC:A', 'FSUTOA:A',
- 'GS_SO2:A', 'H2O2:A', 'H2O:A', 'H2SO4:A', 'H2SO4M_C:A', 'H2SO4_sfnnuc1:A',
+fincl1 = 'ABSORB:A', 'ACTREL:A', 'AODABSdn:A', 'AODBCdn:A', 'AODdnDUST01:A', 'AODdnDUST02:A',
+ 'AODdnDUST03:A', 'AODdn_aitken:A', 'AODdn_accum:A', 'AODdn_coarse:A', 'AODDUST02:A', 'AODDUST:A', 'AODNIRstdn:A', 'AODPOMdn:A', 'AODSO4dn:A', 'AODSOAdn:A', 'AODSSdn:A',
+ 'AODUVdn:A', 'AODUVstdn:A', 'AODVIS:A', 'AODVISdn:A', 'AODVISstdn:A', 'AQ_SO2:A', 'AREA:A', 'AREI:A', 'AREL:A', 'bc_a1:A', 'bc_a1DDF:A',
+ 'bc_a1SFWET:A', 'bc_a4:A', 'bc_a4DDF:A', 'bc_a4SFWET:A', 'bc_c1:A', 'bc_c1DDF:A', 'bc_c1SFWET:A', 'bc_c4:A', 'bc_c4DDF:A',
+ 'bc_c4SFWET:A', 'BROX:A', 'BROY:A', 'BURDENBCdn', 'BURDENDUSTdn:A', 'BURDENPOMdn:A', 'BURDENSEASALTdn:A', 'BURDENSO4dn:A',
+ 'BURDENSOAdn:A', 'CDNUMC:A', 'CLDICE:A', 'CLDLIQ:A', 'CLDTOT:A', 'CLOUD:A', 'CLOX:A', 'CLOY:A', 'CME:A', 'CMFDQ:A', 'CMFMC:A',
+ 'CMFMC_DP:A', 'CO2:A', 'CONCLD:A', 'DF_H2O2:A', 'DF_H2SO4:A',
+ 'DF_SO2:A', 'dgnumwet1:A', 'dgnumwet2:A', 'dgnumwet3:A', 'DH2O2CHM:A', 'DMS:A', 'dry_deposition_NHx_as_N:A',
+ 'dry_deposition_NOy_as_N:A', 'Dso4_a1CHM:A', 'Dso4_a2CHM:A', 'Dso4_a3CHM:A', 'dst_a1:A', 'dst_a1DDF:A', 'dst_a1SFWET:A', 'dst_a2:A', 'dst_a2DDF:A',
+ 'dst_a2SFWET:A', 'dst_a3:A', 'dst_a3DDF:A', 'dst_a3SFWET:A', 'dst_c1:A', 'dst_c1DDF:A', 'dst_c1SFWET:A', 'dst_c2:A', 'dst_c2DDF:A', 'dst_c2SFWET:A',
+ 'dst_c3:A', 'dst_c3DDF:A', 'dst_c3SFWET:A', 'DTCORE:A', 'EVAPPREC:A',
+ 'EVAPQZM:A', 'EVAPTZM:A', 'EXTINCTdn:A', 'EXTINCTNIRdn:A', 'EXTINCTUVdn:A', 'EXTxASYMdn:A', 'FCTL:A',
+ 'FLDS:A', 'FLDSC:A', 'FLNR:A', 'FLNS:A', 'FLNSC:A', 'FLNT:A', 'FLNTC:A', 'FLUT:A', 'FLUTC:A', 'FREQI:A', 'FREQL:A', 'FREQZM:A', 'FSDS:A',
+ 'FSDSC:A', 'FSNR:A', 'FSNS:A', 'FSNSC:A', 'FSNT:A', 'FSNTC:A', 'FSNTOAC:A', 'FSUTOA:A',
+ 'GS_SO2:A', 'H2O2:A', 'H2O:A', 'H2SO4:A', 'H2SO4M_C:A', 'H2SO4_sfnnuc1:A',
'HCL_GAS:A', 'HNO3_GAS:A', 'HNO3_NAT:A', 'HNO3_STS:A', 'HO2:A', 'ICEFRAC:A','jh2o2:A','KVH_CLUBB:A', 'LANDFRAC:A', 'LHFLX:A', 'MASS:A',
- 'ncl_a1:A', 'ncl_a1DDF:A', 'ncl_a1SFWET:A', 'ncl_a2:A', 'ncl_a2DDF:A', 'ncl_a2SFWET:A', 'ncl_a3:A', 'ncl_a3DDF:A', 'ncl_a3SFWET:A', 'ncl_c1:A',
+ 'ncl_a1:A', 'ncl_a1DDF:A', 'ncl_a1SFWET:A', 'ncl_a2:A', 'ncl_a2DDF:A', 'ncl_a2SFWET:A', 'ncl_a3:A', 'ncl_a3DDF:A', 'ncl_a3SFWET:A', 'ncl_c1:A',
'ncl_c1DDF:A', 'ncl_c1SFWET:A', 'ncl_c2:A', 'ncl_c2DDF:A', 'ncl_c2SFWET:A', 'ncl_c3:A', 'ncl_c3DDF:A', 'ncl_c3SFWET:A',
'NITROP_PD:A', 'NO3:A', 'NOX:A', 'NOY:A',
- 'num_a1:A', 'num_a1_CLXF:A', 'num_a1DDF:A', 'num_a2:A', 'num_a2_CLXF:A', 'num_a2DDF:A', 'num_a2_sfnnuc1:A', 'num_a3:A', 'num_a3DDF:A', 'num_a4:A',
+ 'num_a1:A', 'num_a1_CLXF:A', 'num_a1DDF:A', 'num_a2:A', 'num_a2_CLXF:A', 'num_a2DDF:A', 'num_a2_sfnnuc1:A', 'num_a3:A', 'num_a3DDF:A', 'num_a4:A',
'num_a4DDF:A', 'num_c1:A', 'num_c1DDF:A', 'num_c2:A', 'num_c2DDF:A', 'num_c3:A', 'num_c3DDF:A', 'num_c4:A', 'num_c4DDF:A', 'NUMLIQ:A', 'O3:A',
- 'OH:A', 'OMEGA:A', 'OMEGAT:A', 'PBLH:A', 'PDELDRY:A', 'PHIS:A', 'pom_a1:A', 'pom_a1DDF:A', 'pom_a1SFWET:A',
- 'pom_a4:A', 'pom_a4DDF:A', 'pom_a4SFWET:A', 'pom_c1:A', 'pom_c1DDF:A', 'pom_c1SFWET:A', 'pom_c4:A', 'pom_c4DDF:A', 'pom_c4SFWET:A',
- 'PRECC:A', 'PRECT:A', 'PS:A', 'PSL:A', 'PTEQ:A', 'PTTEND:A', 'Q:A', 'QFLX:A', 'QRAIN:A', 'QREFHT:A', 'QRL:A', 'QRLC:A', 'QRS:A',
+ 'OH:A', 'OMEGA:A', 'OMEGAT:A', 'PBLH:A', 'PDELDRY:A', 'PHIS:A', 'pom_a1:A', 'pom_a1DDF:A', 'pom_a1SFWET:A',
+ 'pom_a4:A', 'pom_a4DDF:A', 'pom_a4SFWET:A', 'pom_c1:A', 'pom_c1DDF:A', 'pom_c1SFWET:A', 'pom_c4:A', 'pom_c4DDF:A', 'pom_c4SFWET:A',
+ 'PRECC:A', 'PRECT:A', 'PS:A', 'PSL:A', 'PTEQ:A', 'PTTEND:A', 'Q:A', 'QFLX:A', 'QRAIN:A', 'QREFHT:A', 'QRL:A', 'QRLC:A', 'QRS:A',
'QRSC:A', 'QSNOW:A', 'RAD_ICE:A', 'RAD_LNAT:A', 'RAD_SULFC:A', 'REFF_AERO:A', 'RELHUM:A', 'RHREFHT:A',
'SAD_AERO:A', 'SAD_ICE:A', 'SAD_LNAT:A', 'SAD_SULFC:A', 'SAD_TROP:A', 'SFbc_a4:A',
- 'SFDMS:A', 'SFdst_a1:A', 'SFdst_a2:A', 'SFdst_a3:A',
- 'SFncl_a1:A', 'SFncl_a2:A', 'SFncl_a3:A', 'SFnum_a1:A', 'SFnum_a2:A',
- 'SFnum_a3:A', 'SFpom_a4:A', 'SFSO2:A', 'SFso4_a1:A', 'SFso4_a2:A', 'SHFLX:A', 'SO2:A',
- 'SO2_CHML:A', 'SO2_CHMP:A', 'SO2_CLXF:A', 'SO2_XFRC:A', 'so4_a1:A', 'so4_a1_CHMP:A', 'so4_a1_CLXF:A', 'so4_a1DDF:A', 'so4_a1_sfgaex1:A', 'so4_a1SFWET:A',
- 'so4_a2:A', 'so4_a2_CHMP:A', 'so4_a2_CLXF:A', 'so4_a2DDF:A', 'so4_a2_sfgaex1:A', 'so4_a2_sfnnuc1:A', 'so4_a2SFWET:A', 'so4_a3:A',
- 'so4_a3DDF:A', 'so4_a3_sfgaex1:A', 'so4_a3SFWET:A', 'so4_c1:A', 'so4_c1AQH2SO4:A', 'so4_c1AQSO4:A', 'so4_c1DDF:A', 'so4_c1SFWET:A', 'so4_c2:A', 'so4_c2AQH2SO4:A',
- 'so4_c2AQSO4:A', 'so4_c2DDF:A', 'so4_c2SFWET:A', 'so4_c3:A', 'so4_c3AQH2SO4:A', 'so4_c3AQSO4:A', 'so4_c3DDF:A', 'so4_c3SFWET:A',
+ 'SFDMS:A', 'SFdst_a1:A', 'SFdst_a2:A', 'SFdst_a3:A',
+ 'SFncl_a1:A', 'SFncl_a2:A', 'SFncl_a3:A', 'SFnum_a1:A', 'SFnum_a2:A',
+ 'SFnum_a3:A', 'SFpom_a4:A', 'SFSO2:A', 'SFso4_a1:A', 'SFso4_a2:A', 'SHFLX:A', 'SO2:A',
+ 'SO2_CHML:A', 'SO2_CHMP:A', 'SO2_CLXF:A', 'SO2_XFRC:A', 'so4_a1:A', 'so4_a1_CHMP:A', 'so4_a1_CLXF:A', 'so4_a1DDF:A', 'so4_a1_sfgaex1:A', 'so4_a1SFWET:A',
+ 'so4_a2:A', 'so4_a2_CHMP:A', 'so4_a2_CLXF:A', 'so4_a2DDF:A', 'so4_a2_sfgaex1:A', 'so4_a2_sfnnuc1:A', 'so4_a2SFWET:A', 'so4_a3:A',
+ 'so4_a3DDF:A', 'so4_a3_sfgaex1:A', 'so4_a3SFWET:A', 'so4_c1:A', 'so4_c1AQH2SO4:A', 'so4_c1AQSO4:A', 'so4_c1DDF:A', 'so4_c1SFWET:A', 'so4_c2:A', 'so4_c2AQH2SO4:A',
+ 'so4_c2AQSO4:A', 'so4_c2DDF:A', 'so4_c2SFWET:A', 'so4_c3:A', 'so4_c3AQH2SO4:A', 'so4_c3AQSO4:A', 'so4_c3DDF:A', 'so4_c3SFWET:A',
'SOLIN:A', 'SOLLD:A', 'SOLSD:A', 'SSAVIS:A', 'SST:A',
'T:A', 'TAQ:A', 'TAUBLJX:A', 'TAUBLJY:A', 'TAUGWX:A', 'TAUGWY:A', 'TAUX:A', 'TAUY:A', 'TBRY:A', 'TCLY:A',
- 'TGCLDIWP:A', 'TGCLDLWP:A', 'TMDMS:A', 'TMQ:A', 'TMSO2:A',
- 'TMso4_a1:A', 'TMso4_a2:A', 'TMso4_a3:A', 'TOT_CLD_VISTAU:A', 'TOTH:A', 'TREFHT:A', 'TREFHTMN:A', 'TREFHTMX:A', 'TROP_P:A',
+ 'TGCLDIWP:A', 'TGCLDLWP:A', 'TMDMS:A', 'TMQ:A', 'TMSO2:A',
+ 'TMso4_a1:A', 'TMso4_a2:A', 'TMso4_a3:A', 'TOT_CLD_VISTAU:A', 'TOTH:A', 'TREFHT:A', 'TREFHTMN:A', 'TREFHTMX:A', 'TROP_P:A',
'TROP_T:A', 'TROP_Z:A', 'TS:A', 'TSMN:M', 'TSMX:X', 'TTEND_TOT:A', 'TTGWORO:A', 'U10:A', 'U:A', 'UTGWORO:A',
'UU:A', 'V:A', 'VD01:A', 'VV:A', 'WD_H2O2:A', 'WD_H2SO4:A', 'WD_SO2:A', 'wet_deposition_NHx_as_N:A', 'wet_deposition_NOy_as_N:A',
'Z3:A', 'ZMDQ:A', 'ZMDT:A', 'ZMMTT:A', 'ZMMU:A'
- ! 'dst_a1_SRF:A', 'dst_a3_SRF:A', 'AODABS:A', 'soa_a1:A', 'soa_a2:A', 'soa_c1:A', 'soa_c2:A',
+ ! 'dst_a1_SRF:A', 'dst_a3_SRF:A', 'AODABS:A', 'soa_a1:A', 'soa_a2:A', 'soa_c1:A', 'soa_c2:A',
! 'soa_a1SFWET:A', 'soa_a2SFWET:A', 'soa_c1SFWET:A', 'soa_c2SFWET:A', 'soa_a1DDF:A', 'soa_a2DDF:A', 'soa_c1DDF:A', 'soa_c2DDF:A', 'bc_a4_CLXF:A',
! 'pom_a4_CLXF:A', 'soa_a1_sfgaex1:A', 'soa_a2_sfgaex1:A', 'ADRAIN:A', 'ADSNOW:A', 'ANRAIN:A', 'ANSNOW:A', 'AQRAIN:A', 'AQSNOW:A', 'AQSO4_H2O2:A',
- ! 'AQSO4_O3:A', 'AWNC:A', 'AWNI:A', 'CCN3:A', 'CLDHGH:A', 'CLDLOW:A', 'CLDMED:A', 'FICE:A', 'FREQR:A', 'FREQS:A', 'FSNTOA:A', 'FSNTOA:A', 'H2SO4_sfgaex1:A',
- ! 'ICIMR:A', 'ICWMR:A', 'IWC:A', 'LWCF:A', 'PRECL:A', 'PRECSC:A', 'PRECSL:A', 'QT:A', 'RAINQM:A', 'RCM_CLUBB:A', 'RELVAR:A', 'RTP2_CLUBB:A', 'RTPTHLP_CLUBB:A',
- ! 'SFSOAG:A', 'SNOWQM:A', 'SWCF:A', 'TGCLDCWP:A', 'UP2_CLUBB:A', 'UPWP_CLUBB:A', 'VP2_CLUBB:A', 'VPWP_CLUBB:A', 'VQ:A', 'VU:A', 'WP2_CLUBB:A', 'WP3_CLUBB:A',
+ ! 'AQSO4_O3:A', 'AWNC:A', 'AWNI:A', 'CCN3:A', 'CLDHGH:A', 'CLDLOW:A', 'CLDMED:A', 'FICE:A', 'FREQR:A', 'FREQS:A', 'FSNTOA:A', 'FSNTOA:A', 'H2SO4_sfgaex1:A',
+ ! 'ICIMR:A', 'ICWMR:A', 'IWC:A', 'LWCF:A', 'PRECL:A', 'PRECSC:A', 'PRECSL:A', 'QT:A', 'RAINQM:A', 'RCM_CLUBB:A', 'RELVAR:A', 'RTP2_CLUBB:A', 'RTPTHLP_CLUBB:A',
+ ! 'SFSOAG:A', 'SNOWQM:A', 'SWCF:A', 'TGCLDCWP:A', 'UP2_CLUBB:A', 'UPWP_CLUBB:A', 'VP2_CLUBB:A', 'VPWP_CLUBB:A', 'VQ:A', 'VU:A', 'WP2_CLUBB:A', 'WP3_CLUBB:A',
! 'WPRCP_CLUBB:A', 'WPRTP_CLUBB:A', 'WPTHLP_CLUBB:A', 'WPTHVP_CLUBB:A', 'WSUB:A', 'bc_a1_SRF:A', 'bc_a4_SRF:A', 'O3colAbove:A'
fincl2 = 'ACTNL:A', 'ACTREL:A', 'BURDENBCdn:A', 'BURDENDUSTdn:A', 'BURDENPOMdn:A', 'BURDENSEASALTdn:A', 'BURDENSO4dn:A', 'BURDENSOAdn:A',
- 'CDNUMC:A', 'CLDICE:A', 'CLDLIQ:A', 'CLDTOT:A', 'CLOUD:A', 'CMFMC:A', 'CMFMC_DP:A', 'FCTL:A', 'FLDS:A', 'FLDSC:A', 'FLNR:A', 'FLNS:A', 'FLNSC:A',
- 'FLNT:A', 'FLNTC:A', 'FLUT:A', 'FLUTC:A', 'FSDS:A', 'FSDSC:A', 'FSNR:A', 'FSNS:A', 'FSNSC:A', 'FSNTOA:A', 'FSNTOAC:A', 'LHFLX:A', 'MASS:A', 'OMEGA:A',
- 'OMEGA500:A', 'PBLH:A', 'PDELDRY:A', 'PRECC:A', 'PRECT:A', 'PS:A', 'PSL:A', 'Q:A', 'QREFHT:A', 'QSNOW:A', 'RELHUM:A', 'RHREFHT:A', 'SHFLX:A',
- 'SOLIN:A', 'SOLLD:A', 'SOLSD:A', 'T:A', 'T500:A', 'T700:A', 'T850:A', 'TAUBLJX:A', 'TAUBLJY:A', 'TAUGWX:A', 'TAUGWY:A', 'TAUX:A', 'TAUY:A',
+ 'CDNUMC:A', 'CLDICE:A', 'CLDLIQ:A', 'CLDTOT:A', 'CLOUD:A', 'CMFMC:A', 'CMFMC_DP:A', 'FCTL:A', 'FLDS:A', 'FLDSC:A', 'FLNR:A', 'FLNS:A', 'FLNSC:A',
+ 'FLNT:A', 'FLNTC:A', 'FLUT:A', 'FLUTC:A', 'FSDS:A', 'FSDSC:A', 'FSNR:A', 'FSNS:A', 'FSNSC:A', 'FSNTOA:A', 'FSNTOAC:A', 'LHFLX:A', 'MASS:A', 'OMEGA:A',
+ 'OMEGA500:A', 'PBLH:A', 'PDELDRY:A', 'PRECC:A', 'PRECT:A', 'PS:A', 'PSL:A', 'Q:A', 'QREFHT:A', 'QSNOW:A', 'RELHUM:A', 'RHREFHT:A', 'SHFLX:A',
+ 'SOLIN:A', 'SOLLD:A', 'SOLSD:A', 'T:A', 'T500:A', 'T700:A', 'T850:A', 'TAUBLJX:A', 'TAUBLJY:A', 'TAUGWX:A', 'TAUGWY:A', 'TAUX:A', 'TAUY:A',
'TGCLDIWP:A', 'TGCLDLWP:A', 'TMQ:A', 'TREFHT:A', 'TREFHTMN:A', 'TREFHTMX:A', 'TS:A', 'TSMN:M', 'TSMX:X', 'U:A', 'U10:A', 'UTGWORO:A',
'V:A', 'Z3:A', 'Z500:A'
-
-
diff --git a/cime_config/usermods_dirs/CMIP6_B1850_WACCM/user_nl_cam b/cime_config/usermods_dirs/CMIP6_B1850_WACCM/user_nl_cam
index 1b78d3bd33..033ae322f8 100644
--- a/cime_config/usermods_dirs/CMIP6_B1850_WACCM/user_nl_cam
+++ b/cime_config/usermods_dirs/CMIP6_B1850_WACCM/user_nl_cam
@@ -2,7 +2,7 @@
nhtfrq = 0,-24,-6,-3,-1,1,-24,-120,-240
fincl1 = 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn',
- 'AODBCdn', 'AODdnDUST1', 'AODdnDUST2', 'AODdnDUST3', 'AODdnMODE1', 'AODdnMODE2', 'AODdnMODE3', 'AODDUST2', 'AODDUST',
+ 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse', 'AODDUST02', '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',
@@ -20,7 +20,7 @@ fincl1 = 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AO
'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_HPALD', 'DF_HYAC', 'DF_HYDRALD', 'DF_IEPOX', 'DF_ISOPNITA', 'DF_ISOPNITB', 'DF_ISOP', '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',
@@ -66,7 +66,7 @@ fincl1 = 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AO
'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',
+ 'SFncl_a2', 'SFncl_a3', 'SFNH3', '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',
@@ -94,7 +94,7 @@ fincl1 = 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AO
'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_HYAC', 'WD_HYDRALD', 'WD_IEPOX', 'WD_ISOPNITA', 'WD_ISOPNITB', 'WD_ISOP', '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',
diff --git a/cime_config/usermods_dirs/CMIP6_BHIST/user_nl_cam b/cime_config/usermods_dirs/CMIP6_BHIST/user_nl_cam
index e9b1c0c5b0..9918e4e878 100644
--- a/cime_config/usermods_dirs/CMIP6_BHIST/user_nl_cam
+++ b/cime_config/usermods_dirs/CMIP6_BHIST/user_nl_cam
@@ -5,8 +5,8 @@ mfilt = 1, 5, 20, 40, 120, 240, 365, 73, 365
ndens = 2, 2, 2, 2, 2, 2, 1, 1, 1
-fincl1 = 'ABSORB:A', 'ACTREL:A', 'AODABSdn:A', 'AODBCdn:A', 'AODdnDUST1:A', 'AODdnDUST2:A',
- 'AODdnDUST3:A', 'AODdnMODE1:A', 'AODdnMODE2:A', 'AODdnMODE3:A', 'AODDUST2:A', 'AODDUST:A', 'AODNIRstdn:A', 'AODPOMdn:A', 'AODSO4dn:A', 'AODSOAdn:A', 'AODSSdn:A',
+fincl1 = 'ABSORB:A', 'ACTREL:A', 'AODABSdn:A', 'AODBCdn:A', 'AODdnDUST01:A', 'AODdnDUST02:A',
+ 'AODdnDUST03:A', 'AODdn_aitken:A', 'AODdn_accum:A', 'AODdn_coarse:A', 'AODDUST02:A', 'AODDUST:A', 'AODNIRstdn:A', 'AODPOMdn:A', 'AODSO4dn:A', 'AODSOAdn:A', 'AODSSdn:A',
'AODUVdn:A', 'AODUVstdn:A', 'AODVIS:A', 'AODVISdn:A', 'AODVISstdn:A', 'AQ_SO2:A', 'AREA:A', 'AREI:A', 'AREL:A', 'bc_a1:A', 'bc_a1DDF:A',
'bc_a1SFWET:A', 'bc_a4:A', 'bc_a4DDF:A', 'bc_a4SFWET:A', 'bc_c1:A', 'bc_c1DDF:A', 'bc_c1SFWET:A', 'bc_c4:A', 'bc_c4DDF:A',
'bc_c4SFWET:A', 'BROX:A', 'BROY:A', 'BURDENBCdn', 'BURDENDUSTdn:A', 'BURDENPOMdn:A', 'BURDENSEASALTdn:A', 'BURDENSO4dn:A',
diff --git a/cime_config/usermods_dirs/CMIP6_BHIST_WACCM/user_nl_cam b/cime_config/usermods_dirs/CMIP6_BHIST_WACCM/user_nl_cam
index 9a68109bc3..36485414c6 100644
--- a/cime_config/usermods_dirs/CMIP6_BHIST_WACCM/user_nl_cam
+++ b/cime_config/usermods_dirs/CMIP6_BHIST_WACCM/user_nl_cam
@@ -1,8 +1,8 @@
- mfilt = 1, 5, 20, 40, 120, 240, 365, 73, 365
+ mfilt = 1, 5, 20, 40, 120, 240, 365, 73, 365
nhtfrq = 0,-24,-6,-3,-1,1,-24,-120,-240
fincl1 = 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn',
- 'AODBCdn', 'AODdnDUST1', 'AODdnDUST2', 'AODdnDUST3', 'AODdnMODE1', 'AODdnMODE2', 'AODdnMODE3', 'AODDUST2', 'AODDUST',
+ 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02', 'AODdnDUST03', 'AODdn_aitken', 'AODdn_accum', 'AODdn_coarse', 'AODDUST02', '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',
@@ -20,7 +20,7 @@
'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_HPALD', 'DF_HYAC', 'DF_HYDRALD', 'DF_IEPOX', 'DF_ISOPNITA', 'DF_ISOPNITB', 'DF_ISOP', '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',
@@ -66,7 +66,7 @@
'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',
+ 'SFncl_a2', 'SFncl_a3', 'SFNH3', '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',
@@ -94,7 +94,7 @@
'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_HYAC', 'WD_HYDRALD', 'WD_IEPOX', 'WD_ISOPNITA', 'WD_ISOPNITB', 'WD_ISOP', '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',
diff --git a/cime_config/usermods_dirs/CMIP6_GENERIC/user_nl_cam b/cime_config/usermods_dirs/CMIP6_GENERIC/user_nl_cam
index 45e18d1a6a..9ae154c7bb 100644
--- a/cime_config/usermods_dirs/CMIP6_GENERIC/user_nl_cam
+++ b/cime_config/usermods_dirs/CMIP6_GENERIC/user_nl_cam
@@ -4,8 +4,8 @@ mfilt = 1, 5, 20, 40, 120, 240, 365, 73, 365
ndens = 2, 2, 2, 2, 2, 2, 1, 1, 1
-fincl1 = 'ABSORB:A', 'ACTREL:A', 'AODABSdn:A', 'AODBCdn:A', 'AODdnDUST1:A', 'AODdnDUST2:A',
- 'AODdnDUST3:A', 'AODdnMODE1:A', 'AODdnMODE2:A', 'AODdnMODE3:A', 'AODDUST2:A', 'AODDUST:A', 'AODNIRstdn:A', 'AODPOMdn:A', 'AODSO4dn:A', 'AODSOAdn:A', 'AODSSdn:A',
+fincl1 = 'ABSORB:A', 'ACTREL:A', 'AODABSdn:A', 'AODBCdn:A', 'AODdnDUST01:A', 'AODdnDUST02:A',
+ 'AODdnDUST03:A', 'AODdn_aitken:A', 'AODdn_accum:A', 'AODdn_coarse:A', 'AODDUST02:A', 'AODDUST:A', 'AODNIRstdn:A', 'AODPOMdn:A', 'AODSO4dn:A', 'AODSOAdn:A', 'AODSSdn:A',
'AODUVdn:A', 'AODUVstdn:A', 'AODVIS:A', 'AODVISdn:A', 'AODVISstdn:A', 'AQ_SO2:A', 'AREA:A', 'AREI:A', 'AREL:A', 'bc_a1:A', 'bc_a1DDF:A',
'bc_a1SFWET:A', 'bc_a4:A', 'bc_a4DDF:A', 'bc_a4SFWET:A', 'bc_c1:A', 'bc_c1DDF:A', 'bc_c1SFWET:A', 'bc_c4:A', 'bc_c4DDF:A',
'bc_c4SFWET:A', 'BROX:A', 'BROY:A', 'BURDENBCdn', 'BURDENDUSTdn:A', 'BURDENPOMdn:A', 'BURDENSEASALTdn:A', 'BURDENSO4dn:A',
diff --git a/cime_config/usermods_dirs/scam_mandatory/shell_commands b/cime_config/usermods_dirs/scam_mandatory/shell_commands
index 0772ae5f3c..5230507d8a 100755
--- a/cime_config/usermods_dirs/scam_mandatory/shell_commands
+++ b/cime_config/usermods_dirs/scam_mandatory/shell_commands
@@ -2,8 +2,8 @@
# these are necessary for scam runs.
#========================================
#
-# SCAM works in SPMD mode with a single task, but the default is to run serially.
-./xmlchange MPILIB=mpi-serial
+# SCAM works in SPMD mode with a single task.
+./xmlchange NTASKS=1
# SCAM doesn't have restart functionality yet.
./xmlchange REST_OPTION=never
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 7ca1e7b6ac..bf2db678b4 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,5 +1,1478 @@
===============================================================
+Tag name: cam6_3_123
+Originator(s): cacraig, jedwards, fvitt
+Date: August 16, 2023
+One-line Summary: Fix Derecho bugs
+Github PR URL: https://github.com/ESCOMP/CAM/pull/878
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+ - cam_history field order: https://github.com/ESCOMP/CAM/issues/876
+ - build failure on derecho: https://github.com/ESCOMP/ALI-ARMS/issues/2
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist: N/A
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: nusbaume
+
+List all files eliminated: N/A
+
+List all files added and what they do: N/A
+
+List all existing files that have been modified, and describe the changes:
+M Externals_CAM.cfg
+ - Update ALI-ARMS external
+
+M src/control/cam_history.F90
+ - Improve history writing for derecho
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam: all BFB except:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s (Overall: FAIL) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s COMPARE_base_rest
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_122: DIFF
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details:
+ FAIL ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 RUN time=272
+ PEND ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 COMPARE_base_rest
+ SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h (Overall: DIFF) details:
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_122: DIFF
+ - pre-existing failures
+
+izumi/nag/aux_cam: all BFB
+
+izumi/gnu/aux_cam: all BFB
+
+===============================================================
+===============================================================
+
+Tag name: cam6_3_122
+Originator(s): fvitt
+Date: 11 Aug 2023
+One-line Summary: Aerosol optics updates
+Github PR URL: https://github.com/ESCOMP/CAM/pull/868
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+ Issue #865 -- Aerosol optics answer changes
+
+ Generalization of the aerosol optics has resulted in answer changes. Here these answer changing
+ code modifications (in modal_aer_opt) are merged in separately which are as follows:
+ - use table_interp_mod utility rather than binterp subroutine -- answer changing (roundoff)
+ - use rh2odens parameter -- answer changing (roundoff)
+ - use model_size_parameters subroutine in modal_aero_lw rather than using separate
+ code block to compute the chebychev parameters -- answer changing (roundoff)
+
+ Updates to aerosol optics diagnostics:
+ - generalize history field names that will accumulate multiple bins of a sectional aerosol model
+ - add short wave diagnostic AODTOT
+ - add long wave diagnostics AODABSLW (at 10 microns) and TOTABSLW
+
+ Change in results are near roundoff level
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist: N/A
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: cacraigucar nusbaume
+
+List all files eliminated: N/A
+
+List all files added and what they do:
+A src/utils/table_interp_mod.F90
+ - utility module for interpolation of aerosol optics tables
+
+List all existing files that have been modified, and describe the changes:
+
+M src/physics/cam/modal_aer_opt.F90
+ - use table_interp_mod utility rather than binterp subroutine -- answer changing (roundoff)
+ - use rh2odens parameter -- answer changing (roundoff)
+ - use model_size_parameters subroutine in modal_aero_lw rather than
+ using separate code block to compute the chebychev parameters -- answer changing (roundoff)
+ - generalize history field names that will accumulate multiple bins of a sectional aerosol model
+ - add AODTOT SW diagnostic
+ - add AODABSLW (at 10 microns) and TOTABSLW diagnostics
+
+M src/physics/simple/radconstants.F90
+ - add stub subroutine get_lw_spectral_boundaries for building simple models
+
+M bld/namelist_files/use_cases/2000_trop_strat_vbs_cam6.xml
+M bld/namelist_files/use_cases/2010_trop_strat_vbs_cam6.xml
+M bld/namelist_files/use_cases/hist_trop_strat_nudged_cam6.xml
+M bld/namelist_files/use_cases/hist_trop_strat_vbs_cam6.xml
+M bld/namelist_files/use_cases/hist_trop_strat_vbsext_cam6.xml
+M bld/namelist_files/use_cases/hist_trop_strat_vbsfire_cam6.xml
+M bld/namelist_files/use_cases/sd_trop_strat2_cam6.xml
+M bld/namelist_files/use_cases/sd_trop_strat_vbs_cam6.xml
+M bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_2000_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_2010_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
+M cime_config/usermods_dirs/CMIP6_B1850/user_nl_cam
+M cime_config/usermods_dirs/CMIP6_B1850_WACCM/user_nl_cam
+M cime_config/usermods_dirs/CMIP6_BHIST/user_nl_cam
+M cime_config/usermods_dirs/CMIP6_BHIST_WACCM/user_nl_cam
+M cime_config/usermods_dirs/CMIP6_GENERIC/user_nl_cam
+ - adjust history field names
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s (Overall: FAIL) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s COMPARE_base_rest
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h (Overall: DIFF) details:
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h NLCOMP
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: PEND) details:
+ FAIL ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 NLCOMP
+ - pre-existing failures
+
+ ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.QPC5HIST.cheyenne_intel.cam-outfrq3s_usecase (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.QPC5HIST.cheyenne_intel.cam-outfrq3s_usecase BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_D_Ln9_Vnuopc.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_D_Ln9_Vnuopc.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ld3_Vnuopc.f09_f09_mg17.FWHIST.cheyenne_intel.cam-reduced_hist1d (Overall: DIFF) details:
+ FAIL ERP_Ld3_Vnuopc.f09_f09_mg17.FWHIST.cheyenne_intel.cam-reduced_hist1d BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes (Overall: DIFF) details:
+ FAIL ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: DIFF) details:
+ FAIL ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 (Overall: DIFF) details:
+ FAIL ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 (Overall: DIFF) details:
+ FAIL ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC5.cheyenne_intel.cam-scm_prep (Overall: DIFF) details:
+ FAIL SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC5.cheyenne_intel.cam-scm_prep BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ld2_Vnuopc.f19_f19_mg17.QPC5HIST.cheyenne_intel.cam-volc_usecase (Overall: DIFF) details:
+ FAIL SMS_D_Ld2_Vnuopc.f19_f19_mg17.QPC5HIST.cheyenne_intel.cam-volc_usecase BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCvbsxHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCvbsxHIST.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCvbsxHIST.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s_waccm_ma_mam4 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC2000climo.cheyenne_intel.cam-outfrq3s_usecase (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC2000climo.cheyenne_intel.cam-outfrq3s_usecase NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC2000climo.cheyenne_intel.cam-outfrq3s_usecase BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC5M7.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC5M7.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details:
+ FAIL SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d NLCOMP
+ FAIL SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details:
+ FAIL SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Ld1_Vnuopc.ne30pg3_ne30pg3_mg17.FC2010climo.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details:
+ FAIL SMS_Ld1_Vnuopc.ne30pg3_ne30pg3_mg17.FC2010climo.cheyenne_intel.cam-outfrq1d NLCOMP
+ FAIL SMS_Ld1_Vnuopc.ne30pg3_ne30pg3_mg17.FC2010climo.cheyenne_intel.cam-outfrq1d BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Ld5_Vnuopc.f09_f09_mg17.PC6.cheyenne_intel.cam-cam6_port_f09 (Overall: DIFF) details:
+ FAIL SMS_Ld5_Vnuopc.f09_f09_mg17.PC6.cheyenne_intel.cam-cam6_port_f09 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m (Overall: DIFF) details:
+ FAIL SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging (Overall: DIFF) details:
+ FAIL SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Ln9_Vnuopc.f09_f09_mg17.FW1850.cheyenne_intel.cam-reduced_hist3s (Overall: DIFF) details:
+ FAIL SMS_Ln9_Vnuopc.f09_f09_mg17.FW1850.cheyenne_intel.cam-reduced_hist3s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs (Overall: DIFF) details:
+ FAIL SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_121: DIFF
+ - expected baseline failures due to changes in aerosol optics
+ - namelist compare failures due changes in aerosol optics diagnostics field names
+
+izumi/nag/aux_cam:
+ DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ FAIL DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae RUN time=10
+ - pre-existing failures
+
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-carma_sea_salt (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-carma_sea_salt BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_cosp (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_cosp BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_subcol (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_subcol BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERI_D_Ln18_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac (Overall: DIFF) details:
+ FAIL ERI_D_Ln18_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 (Overall: DIFF) details:
+ FAIL ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ ERP_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ SMS_D_Ln7_Vnuopc.T42_T42_mg17.QPSCAMC5.izumi_nag.cam-scmarm (Overall: DIFF) details:
+ FAIL SMS_D_Ln7_Vnuopc.T42_T42_mg17.QPSCAMC5.izumi_nag.cam-scmarm BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-rad_diag_mam (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-rad_diag_mam BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase (Overall: DIFF) details:
+ FAIL SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ SUB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ FAIL SUB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ TMC_D_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac (Overall: DIFF) details:
+ FAIL TMC_D_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ TMC_D_Vnuopc.T5_T5_mg37.QPC5.izumi_nag.cam-ghgrmp_e8 (Overall: DIFF) details:
+ FAIL TMC_D_Vnuopc.T5_T5_mg37.QPC5.izumi_nag.cam-ghgrmp_e8 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_nag: DIFF
+ - expected baseline failures due to changes in aerosol optics
+
+izumi/gnu/aux_cam:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_gnu.cam-outfrq3s_unicon (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_gnu.cam-outfrq3s_unicon BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPSPCAMM.izumi_gnu.cam-outfrq3s (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPSPCAMM.izumi_gnu.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ ERP_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 (Overall: DIFF) details:
+ FAIL PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 (Overall: DIFF) details:
+ FAIL SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ SMS_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_121_gnu: DIFF
+ - expected baseline failures due to changes in aerosol optics
+ - namelist compare failures due changes in aerosol optics diagnostics field names
+
+ NOTE: Independent testing showed that the combination of round-off level changes
+ to modal_aer_opt (listed above) results in near round-off level changes in the
+ aerosol optics (~12-16 significant digits of agreement).
+
+Summarize any changes to answers: near roundoff
+
+===============================================================
+===============================================================
+
+Tag name: cam6_3_121
+Originator(s): fvitt
+Date: 8 Aug 2023
+One-line Summary: Update SOAE emissions factors
+Github PR URL: https://github.com/ESCOMP/CAM/pull/870
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+ Corrections to default namelist settings for:
+ - SAOE emissions factors (issue: Need to adjust SAOE emissions factors #860)
+ - 10x15 CAMChem IC file (issue: Unusable namelist default? #867)
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist: N/A
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: cacraigucar nusbaume
+
+List all files eliminated: N/A
+
+List all files added and what they do: N/A
+
+List all existing files that have been modified, and describe the changes:
+M bld/build-namelist
+M bld/namelist_files/use_cases/2000_cam6.xml
+M bld/namelist_files/use_cases/2010_cam6.xml
+M bld/namelist_files/use_cases/waccm_sc_2000_cam6.xml
+M bld/namelist_files/use_cases/waccm_sc_2010_cam6.xml
+ - update SAOE emissions factors
+
+M bld/namelist_files/namelist_defaults_cam.xml
+ - correction to default 10x15 CAMChem IC file
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam:
+ SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h (Overall: DIFF) details:
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s (Overall: FAIL) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s COMPARE_base_rest
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details:
+ FAIL ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 RUN time=284
+ PEND ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 COMPARE_base_rest
+ - pre-existing failures
+
+ ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase NLCOMP
+ FAIL ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp NLCOMP
+ FAIL ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 NLCOMP
+ FAIL ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: DIFF) details:
+ FAIL ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev NLCOMP
+ FAIL ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 (Overall: DIFF) details:
+ FAIL ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 NLCOMP
+ FAIL ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 (Overall: DIFF) details:
+ FAIL ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 NLCOMP
+ FAIL ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details:
+ FAIL SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d NLCOMP
+ FAIL SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m (Overall: DIFF) details:
+ FAIL SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m NLCOMP
+ FAIL SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging (Overall: DIFF) details:
+ FAIL SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging NLCOMP
+ FAIL SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs (Overall: DIFF) details:
+ FAIL SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs NLCOMP
+ FAIL SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_120: DIFF
+ - expected baseline failures due to update SAOE emissions factors
+
+ SMS_Ld5_Vnuopc.f09_f09_mg17.PC6.cheyenne_intel.cam-cam6_port_f09 (Overall: NLFAIL) details:
+ FAIL SMS_Ld5_Vnuopc.f09_f09_mg17.PC6.cheyenne_intel.cam-cam6_port_f09 NLCOMP
+ - expected namelist compare failures due to update SAOE emissions factors
+
+izumi/nag/aux_cam:
+ DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ FAIL DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae RUN time=16
+ PEND DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae COMPARE_base_da
+ - pre-existing failure
+
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am NLCOMP
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_120_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic NLCOMP
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_120_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist NLCOMP
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_120_nag: DIFF
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s NLCOMP
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_120_nag: DIFF
+ ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 (Overall: DIFF) details:
+ FAIL ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 NLCOMP
+ FAIL ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_120_nag: DIFF
+ SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase (Overall: DIFF) details:
+ FAIL SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase NLCOMP
+ FAIL SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_120_nag: DIFF
+ - expected baseline failures due to update SAOE emissions factors
+
+izumi/gnu/aux_cam:
+ SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 (Overall: DIFF) details:
+ FAIL SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 NLCOMP
+ FAIL SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_120_gnu: DIFF
+ SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_120_gnu: DIFF
+ - expected baseline failures due to update SAOE emissions factors
+
+Summarize any changes to answers: larger than roundoff
+
+===============================================================
+===============================================================
+
+Tag name: cam6_3_120
+Originator(s): fvitt
+Date: 28 Jul 2023
+One-line Summary: Add O3S diagnostic tracer to WACCM-MA; move gravity wave parameter to namelist
+Github PR URL: https://github.com/ESCOMP/CAM/pull/851
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+ Make frontal gravity wave spectrum half-width a namelist variable (issue #839)
+ MA chemistry scheme (waccm_ma_mam4) needs O3S (issue #793)
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist:
+
+ New namelist parameter:
+ front_gaussian_width
+ Width of gaussian used to create frontogenesis tau profile [m/s].
+ Defaults to 30 m/s
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: cacraigucar nusbaume
+
+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 bld/namelist_files/namelist_definition.xml
+ - new front_gaussian_width namelist parameter
+
+M bld/build-namelist
+ - set default front_gaussian_width
+
+M bld/namelist_files/namelist_defaults_cam.xml
+ - namelist defaults:
+ front_gaussian_width
+ O3S_Loss for WACCM-MA and SolIonRate_Tot for WACCM-X
+
+M bld/namelist_files/use_cases/sd_waccmx_ma_cam6.xml
+M bld/namelist_files/use_cases/waccmx_ma_2000_cam6.xml
+M bld/namelist_files/use_cases/waccmx_ma_hist_cam6.xml
+ - SolIonRate_Tot set by namelist_defaults_cam.xml
+
+M src/chemistry/pp_waccm_ma_mam5/chem_mech.doc
+M src/chemistry/pp_waccm_ma_mam5/chem_mech.in
+M src/chemistry/pp_waccm_ma_mam5/chem_mods.F90
+M src/chemistry/pp_waccm_ma_mam5/m_spc_id.F90
+M src/chemistry/pp_waccm_ma_mam5/mo_indprd.F90
+M src/chemistry/pp_waccm_ma_mam5/mo_lin_matrix.F90
+M src/chemistry/pp_waccm_ma_mam5/mo_nln_matrix.F90
+M src/chemistry/pp_waccm_ma_mam5/mo_prod_loss.F90
+M src/chemistry/pp_waccm_ma_mam5/mo_rxt_rates_conv.F90
+M src/chemistry/pp_waccm_ma_mam5/mo_sim_dat.F90
+ - add diagnostic tracer O3S (explicit solver)
+
+M src/physics/cam/gw_drag.F90
+ - move hard-wired parameter front_gaussian_width to namelist
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam:
+
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details:
+ FAIL ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 NLCOMP
+ FAIL ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 RUN time=291
+ - pre-existing failure
+
+ ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s (Overall: FAIL) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s COMPARE_base_rest
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_119: DIFF
+ SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h (Overall: DIFF) details:
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h NLCOMP
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_119: DIFF
+ - HEMCO baseline failures due to known issue with HEMCO external
+
+ ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes (Overall: DIFF) details:
+ FAIL ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes NLCOMP
+ FAIL ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_119: FIELDLIST field lists differ (otherwise bit-for-bit)
+ - new O3S tracer field
+
+ ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_119: DIFF
+ ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_119: DIFF
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_119: DIFF
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_119: DIFF
+ SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ FAIL SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_119: DIFF
+ - difference are due to O3S dry dep velocity surface fields, otherwise bit-for-bit
+
+ ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPX2000.cheyenne_intel.cam-outfrq3s (Overall: NLFAIL) details:
+ ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ld3_Vnuopc.f09_f09_mg17.FWHIST.cheyenne_intel.cam-reduced_hist1d (Overall: NLFAIL) details:
+ ERP_Lh12_Vnuopc.f19_f19_mg17.FW4madSD.cheyenne_intel.cam-outfrq3h (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCvbsxHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC2000climo.cheyenne_intel.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.QPX2000.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d (Overall: NLFAIL) details:
+ SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: NLFAIL) details:
+ SMS_Ld1_Vnuopc.ne30pg3_ne30pg3_mg17.FC2010climo.cheyenne_intel.cam-outfrq1d (Overall: NLFAIL) details:
+ SMS_Ln9_Vnuopc.f09_f09_mg17.FW1850.cheyenne_intel.cam-reduced_hist3s (Overall: NLFAIL) details:
+ - namelist compare failures due to new front_gaussian_width namelist parameter
+
+izumi/nag/aux_cam:
+ DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ FAIL DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae RUN time=10
+ - pre-existing failure
+
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s NLCOMP
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_119_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ - new O3S tracer field
+
+ SMS_D_Ln3_Vnuopc.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details:
+ SMS_D_Ln6_Vnuopc.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem (Overall: NLFAIL) details:
+ - namelist compare failures due to new front_gaussian_width namelist parameter
+
+izumi/gnu/aux_cam:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC4.izumi_gnu.cam-outfrq3s_diags (Overall: NLFAIL) details:
+ SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC4.izumi_gnu.cam-outfrq9s_apmee (Overall: NLFAIL) details:
+ SMS_P48x1_D_Ln9_Vnuopc.f19_f19_mg17.FW4madSD.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details:
+ - namelist compare failures due to new front_gaussian_width namelist parameter
+
+Summarize any changes to answers: bit-for-bit unchanged
+
+===============================================================
+===============================================================
+
+Tag name: cam6_3_119
+Originator(s): fvitt
+Date: 19 Jul 2023
+One-line Summary: CAM-Chem namelist updates and fix issue with maximum number of chemical emissions files
+Github PR URL: https://github.com/ESCOMP/CAM/pull/850
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+ - Updates to FCHIST and FCnudged compsets #771
+ - Issue with maximum number of chemical emissions files #538
+ -- fixes bug in SOAE emissions in cam6 configurations
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist: N/A
+
+List any changes to the defaults for the boundary datasets:
+
+ FCHIST and FCnudged compsets use SPS585 boundary conditions for FV 0.9x1.25 grid
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: cacraigucar nusbaume
+
+List all files eliminated: N/A
+
+List all files added and what they do: N/A
+
+List all existing files that have been modified, and describe the changes:
+
+M bld/namelist_files/use_cases/hist_trop_strat_nudged_cam6.xml
+M bld/namelist_files/use_cases/hist_trop_strat_vbs_cam6.xml
+ - use SPS585 boundary conditions for FV 0.9x1.25 grid
+ - history_chemitry=.true. enables shortening of the fincl1 list
+
+M bld/namelist_files/use_cases/2000_cam4_trop_chem.xml
+M bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
+ - remove SFNO2 from fincl list -- NO2 does not have surface emissions
+
+M bld/namelist_files/use_cases/sd_trop_strat_vbs_cam6.xml
+M bld/namelist_files/use_cases/hist_trop_strat_vbsfire_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_2000_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_2010_cam6.xml
+M bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
+ - history_chemitry=.true. enables shortening of the fincl1 list
+
+M src/chemistry/mozart/chemistry.F90
+ - changes for longer lists of emissions files
+ - add SF* history fields only if species has surface emissions
+
+M src/chemistry/mozart/mo_chm_diags.F90
+ - add DV_* and DF_* history fields only if species has dry deposition
+
+M src/chemistry/mozart/mo_srf_emissions.F90
+M src/chemistry/mozart/mo_extfrc.F90
+ - changes for longer lists of emissions files
+
+M src/chemistry/mozart/mo_neu_wetdep.F90
+ - remove add_default for DTWR_* history fields
+
+M src/chemistry/mozart/ocean_emis.F90
+ - add ocean_emis_species function
+ - add_default for OCN_FLUX_* fields if history_chemistry is .true.
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam:
+
+ FAIL ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 RUN time=2420
+ - pre-existing failure
+
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s COMPARE_base_rest
+ - expected failures in HEMCO tests due to known restart/reprocibility issues with HECMO
+
+ FAIL ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ - expected baseline differences due to bug fix for SOAE emissions used in cam6 (trop_mam4 chem)
+
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ FAIL SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: DIFF
+ - expected baseline differences due to change in namelist settings
+
+ FAIL ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPMOZ.cheyenne_intel.cam-outfrq3s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPX2000.cheyenne_intel.cam-outfrq3s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.QPC5HIST.cheyenne_intel.cam-outfrq3s_usecase BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERP_D_Ln9_Vnuopc.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERP_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ld2_Vnuopc.f19_f19_mg17.QPC5HIST.cheyenne_intel.cam-volc_usecase BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC5M7.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.QPX2000.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_118: FIELDLIST field lists differ (otherwise bit-for-bit)
+ - change in default history fields, otherwise bit-for-bit
+
+izumi/nag/aux_cam:
+
+ DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ - pre-existing failure
+
+ FAIL SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: DIFF
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: DIFF
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: DIFF
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: DIFF
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: DIFF
+ FAIL ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: DIFF
+ - expected baseline differences due to bug fix for SOAE emissions used in cam6 (trop_mam4 chem)
+
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-carma_sea_salt BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_cosp BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_subcol BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERI_D_Ln18_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERP_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln3_Vnuopc.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln7_Vnuopc.T42_T42_mg17.QPSCAMC5.izumi_nag.cam-scmarm BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-rad_diag_mam BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SUB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL TMC_D_Vnuopc.T5_T5_mg37.QPC5.izumi_nag.cam-ghgrmp_e8 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL TMC_D_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ - change in default history fields, otherwise bit-for-bit
+
+izumi/gnu/aux_cam:
+
+ FAIL SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: DIFF
+ - expected baseline differences due to bug fix for SOAE emissions used in cam6 (trop_mam4 chem)
+
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC4.izumi_gnu.cam-outfrq3s_diags BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_gnu.cam-outfrq3s_unicon BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPSPCAMM.izumi_gnu.cam-outfrq3s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL ERP_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln3_Vnuopc.f10_f10_mg37.QPMOZ.izumi_gnu.cam-outfrq3s_chemproc BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ FAIL SMS_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_3_118_gnu: FIELDLIST field lists differ (otherwise bit-for-bit)
+ - change in default history fields, otherwise bit-for-bit
+
+Summarize any changes to answers: larger than round off for cam6
+
+===============================================================
+===============================================================
+
+Tag name: cam6_3_118
+Originator(s): Haipeng Lin (jimmielin hplin@seas.harvard.edu), fvitt
+Date: 17 Jul 2023
+One-line Summary: Integration of Harmonized Emissions Component (HEMCO) as emissions infrastructure
+Github PR URL: https://github.com/ESCOMP/CAM/pull/560
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+ - Add HEMCO_CESM as interface between CAM to the Harmonized Emissions Component (HEMCO):
+ https://github.com/ESCOMP/CAM/issues/504
+ - Remove MCT test -- MCT coupling is no longer supported
+ - Remove mpi-serial MPILIB setting for SCAM
+
+Describe any changes made to build system:
+ - Adds HEMCO build paths under src/hemco
+ - Adds pre-processor constants MODEL_, MODEL_CESM, HEMCO_CESM, USE_REAL8 for use
+ by HEMCO to identify it is running in the CESM model environment and requires
+ 8-bit precision
+
+Describe any changes made to the namelist:
+ - cam_physics_mesh now is defined for all compsets instead of only for WACCMX
+ ionosphere-enabled compsets
+ - added %HEMCO component sets FC2000climo_HCO, FC2010climo_HCO, FCHIST_HCO,
+ FCnudged_HCO, FCts2nudged_HCO, and FCSD_HCO that enable HEMCO by default
+ - added use_hemco, hemco_config_file, hemco_emission_year, hemco_grid_xdim,
+ hemco_grid_ydim for configuring HEMCO
+ - ext_frc_specifier and srf_emis_specifier are ignored if use_hemco is true.
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: brian-eaton, cacragucar, nusbaume, fvitt, adamrher, lkemmons
+
+List all files eliminated: N/A
+
+List all files added and what they do:
+A src/chemistry/mozart/hco_cc_emissions.F90
+ - Provides surface emissions and external forcing when HEMCO is enabled
+
+List all existing files that have been modified, and describe the changes:
+M .gitignore
+M Externals_CAM.cfg
+ - Adds HEMCO-CESM external
+
+M bld/build-namelist
+M bld/config_files/definition.xml
+M bld/namelist_files/namelist_defaults_cam.xml
+M bld/namelist_files/namelist_definition.xml
+M bld/namelist_files/use_cases/2000_cam6.xml
+M bld/namelist_files/use_cases/2000_trop_strat_vbs_cam6.xml
+M bld/namelist_files/use_cases/2010_cam6.xml
+M bld/namelist_files/use_cases/2010_trop_strat_vbs_cam6.xml
+ - Refer to namelist changes
+
+M bld/configure
+ - Refer to build changes
+
+M cime_config/config_component.xml
+M cime_config/config_compsets.xml
+ - Adds %HEMCO compset modifier and _HCO compsets for CAM-chem compsets
+ to enable HEMCO by default
+
+M cime_config/testdefs/testlist_cam.xml
+ - Adds test for HEMCO on f09 in aux_cam and camchem_hco test sets, ne30
+ in prealpha and camchem_hco test sets to test CAM with HEMCO
+ - Remove MCT tests
+
+M cime_config/testdefs/testmods_dirs/cam/scmarm/shell_commands
+M cime_config/usermods_dirs/scam_mandatory/shell_commands
+ - Remove mpi-serial MPILIB setting for SCAM
+
+M src/chemistry/mozart/chemistry.F90
+M src/chemistry/mozart/mo_chemini.F90
+M src/chemistry/mozart/mo_gas_phase_chemdr.F90
+M src/chemistry/mozart/mo_setext.F90
+ - Calls HEMCO-provided routines in hco_cc_emissions instead of existing
+ set_srf_emissions and extfrc_set when HEMCO is enabled
+ - Adds pbuf argument to chem_emissions subroutine as necessary for
+ HEMCO-CESM interface to access pbuf to retrieve emissions computed by HEMCO
+
+M src/chemistry/pp_none/chemistry.F90
+M src/chemistry/pp_terminator/chemistry.F90
+ - Subroutine arguments added pbuf for consistent definition as mozart/chemistry.F90
+
+M src/control/runtime_opts.F90
+ - Read HEMCO namelist
+
+M src/physics/cam/phys_control.F90
+ - Read use_hemco variable from physics namelist
+
+M src/physics/cam/physpkg.F90
+M src/physics/cam_dev/physpkg.F90
+ - Call HEMCO routines in physics phase 2
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam: B4B
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details:
+ - pre-existing failure
+
+ ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPMOZ.cheyenne_intel.cam-outfrq3s (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPX2000.cheyenne_intel.cam-outfrq3s (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.FADIAB.cheyenne_intel.cam-terminator (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.QPC5HIST.cheyenne_intel.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.T42_T42_mg17.FDABIP04.cheyenne_intel.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.T42_T42_mg17.FHS94.cheyenne_intel.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ ERI_D_Ln18_Vnuopc.f45_f45_mg37.QPC41850.cheyenne_intel.cam-co2rmp_usecase (Overall: NLFAIL) details:
+ ERP_D_Ln9_Vnuopc.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ld3_Vnuopc.f09_f09_mg17.FWHIST.cheyenne_intel.cam-reduced_hist1d (Overall: NLFAIL) details:
+ ERP_Lh12_Vnuopc.f19_f19_mg17.FW4madSD.cheyenne_intel.cam-outfrq3h (Overall: NLFAIL) details:
+ ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: NLFAIL) details:
+ ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 (Overall: NLFAIL) details:
+ ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 (Overall: NLFAIL) details:
+ ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERS_Ln9_Vnuopc.f19_f19_mg17.FSPCAMS.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ ERS_Ln9_Vnuopc.ne0TESTONLYne5x4_ne0TESTONLYne5x4_mg37.FADIAB.cheyenne_intel.cam-outfrq3s_refined (Overall: NLFAIL) details:
+ SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC5.cheyenne_intel.cam-scm_prep (Overall: NLFAIL) details:
+ SMS_D_Ld2_Vnuopc.f19_f19_mg17.QPC5HIST.cheyenne_intel.cam-volc_usecase (Overall: NLFAIL) details:
+ SMS_D_Ld5_Vnuopc.f19_f19_mg17.PC4.cheyenne_intel.cam-cam4_port5d (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCvbsxHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC2000climo.cheyenne_intel.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC5M7.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.QPX2000.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d (Overall: NLFAIL) details:
+ SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: NLFAIL) details:
+ SMS_Ld1_Vnuopc.ne30pg3_ne30pg3_mg17.FC2010climo.cheyenne_intel.cam-outfrq1d (Overall: NLFAIL) details:
+ SMS_Ld5_Vnuopc.f09_f09_mg17.PC6.cheyenne_intel.cam-cam6_port_f09 (Overall: NLFAIL) details:
+ SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m (Overall: NLFAIL) details:
+ SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging (Overall: NLFAIL) details:
+ SMS_Ln9_Vnuopc.f09_f09_mg17.FW1850.cheyenne_intel.cam-reduced_hist3s (Overall: NLFAIL) details:
+ SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs (Overall: NLFAIL) details:
+ SMS_Ln9_Vnuopc.f19_f19_mg17.FHIST.cheyenne_intel.cam-outfrq9s_nochem (Overall: NLFAIL) details:
+ - namelist compare failures due to use_hemco new namelist switch
+
+ ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s (Overall: FAIL) details:
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s NLCOMP
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s COMPARE_base_rest
+ FAIL ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_117: ERROR BFAIL baseline directory '/glade/p/cesm/amwg/cesm_baselines/cam6_3_117/ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s' does not exist
+ SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h (Overall: DIFF) details:
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h NLCOMP
+ FAIL SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h BASELINE /glade/p/cesm/amwg/cesm_baselines/cam6_3_117: ERROR BFAIL baseline directory '/glade/p/cesm/amwg/cesm_baselines/cam6_3_117/SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h' does not exist
+ - new tests
+ - HEMCO tests are expected for fail due to known issue with reproducibility and restarts
+
+izumi/nag/aux_cam: B4B
+ DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ - pre-existing failure
+
+ ERC_D_Ln9_Vnuopc.T5_T5_mg37.QPC4.izumi_nag.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-carma_sea_salt (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_cosp (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_subcol (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QSPCAMS.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.mpasa480z32_mpasa480.FHS94.izumi_nag.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne16pg3_ne16pg3_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac (Overall: NLFAIL) details:
+ ERI_D_Ln18_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac (Overall: NLFAIL) details:
+ ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 (Overall: NLFAIL) details:
+ ERI_D_Ln18_Vnuopc.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s_bwic (Overall: NLFAIL) details:
+ ERI_D_Ln18_Vnuopc.ne5pg3_ne5pg3_mg37.FADIAB.izumi_nag.cam-outfrq3s_bwic (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: NLFAIL) details:
+ ERS_Ln27_Vnuopc.ne5pg3_ne5pg3_mg37.FKESSLER.izumi_nag.cam-outfrq9s (Overall: NLFAIL) details:
+ ERS_Ln9_Vnuopc.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq9s (Overall: NLFAIL) details:
+ PEM_D_Ln9_Vnuopc.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: NLFAIL) details:
+ SMS_D_Ld2_Vnuopc.f45_f45_mg37.PC5.izumi_nag.cam-outfrq24h_port (Overall: NLFAIL) details:
+ SMS_D_Ln3_Vnuopc.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details:
+ SMS_D_Ln6_Vnuopc.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem (Overall: NLFAIL) details:
+ SMS_D_Ln7_Vnuopc.T42_T42_mg17.QPSCAMC5.izumi_nag.cam-scmarm (Overall: NLFAIL) details:
+ SMS_D_Ln9_P1x1_Vnuopc.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-rad_diag_mam (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_ba (Overall: NLFAIL) details:
+ SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase (Overall: NLFAIL) details:
+ SUB_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details:
+ TMC_D_Vnuopc.T5_T5_mg37.QPC5.izumi_nag.cam-ghgrmp_e8 (Overall: NLFAIL) details:
+ TMC_D_Vnuopc.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac (Overall: NLFAIL) details:
+ - namelist compare failures due to use_hemco new namelist switch
+
+izumi/gnu/aux_cam: B4B
+ ERC_D_Ln9_Vnuopc.T5_T5_mg37.QPC3.izumi_gnu.cam-outfrq3s_usecase (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.FADIAB.izumi_gnu.cam-terminator (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC4.izumi_gnu.cam-outfrq3s_diags (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_gnu.cam-outfrq3s_unicon (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC5.izumi_gnu.cam-rad_diag (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPSPCAMM.izumi_gnu.cam-outfrq3s (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC4.izumi_gnu.cam-outfrq3s_nudging_ne5_L26 (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq3s_ba (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne5pg2_ne5pg2_mg37.FADIAB.izumi_gnu.cam-outfrq3s (Overall: NLFAIL) details:
+ ERC_D_Ln9_Vnuopc.ne5pg4_ne5pg4_mg37.FADIAB.izumi_gnu.cam-outfrq3s (Overall: NLFAIL) details:
+ ERI_D_Ln18_Vnuopc.T5_T5_mg37.QPC4.izumi_gnu.cam-co2rmp (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.ne5_ne5_mg37.FHS94.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details:
+ ERP_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details:
+ PEM_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.FADIAB.izumi_gnu.cam-outfrq3s (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 (Overall: NLFAIL) details:
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 (Overall: NLFAIL) details:
+ SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC4.izumi_gnu.cam-scm_prep (Overall: NLFAIL) details:
+ SCT_D_Ln7_Vnuopc.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 (Overall: NLFAIL) details:
+ SMS_D_Ln3_Vnuopc.f10_f10_mg37.QPMOZ.izumi_gnu.cam-outfrq3s_chemproc (Overall: NLFAIL) details:
+ SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC4.izumi_gnu.cam-outfrq9s_apmee (Overall: NLFAIL) details:
+ SMS_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac (Overall: NLFAIL) details:
+ SMS_P48x1_D_Ln9_Vnuopc.f19_f19_mg17.FW4madSD.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details:
+ - namelist compare failures due to use_hemco new namelist switch
+
+Summarize any changes to answers: bit-for-bit unchanged
+
+===============================================================
+===============================================================
+
+Tag name: cam6_3_117
+Originator(s): cacraig, patc, islas
+Date: June 28, 2023
+One-line Summary: Bring in Frierson Simple Model (gray radiation)
+Github PR URL: https://github.com/ESCOMP/CAM/pull/537
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+ - Frierson gray radiation: https://github.com/ESCOMP/CAM/issues/8
+
+Describe any changes made to build system:
+ - Add physics option "grayrad"
+
+Describe any changes made to the namelist:
+ - Introduced namelist settings for Frierson Gray radiation (all prepended with "frierson")
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: fvitt, peverwhee, nusbaume
+
+List all files eliminated: N/A
+
+List all files added and what they do:
+A bld/namelist_files/use_cases/dctest_frierson.xml
+ - Add use_case for Gray radiation model
+
+A src/physics/simple/frierson.F90
+A src/physics/simple/frierson_cam.F90
+ - Bring in Frierson code along with the CAM interface code to it
+
+List all existing files that have been modified, and describe the changes:
+M bld/build-namelist
+ - introduce grayrad physics option and accompanying namelist values
+
+M bld/config_files/definition.xml
+M bld/configure
+ - introduce grayrad physics option
+
+M bld/namelist_files/namelist_defaults_cam.xml
+M bld/namelist_files/namelist_definition.xml
+ - introduce grayrad namelist values
+
+M cime_config/config_component.xml
+ - introduce %GRAYRAD compset qualifier
+
+M cime_config/config_compsets.xml
+ - introduce FGRAYRAD compset
+
+M cime_config/testdefs/testlist_cam.xml
+ - introduce prebeta test for FGRAYRAD compset
+
+M src/control/cam_control_mod.F90
+M src/control/runtime_opts.F90
+M src/physics/simple/physpkg.F90
+M src/physics/simple/restart_physics.F90
+ - mods to support gray radiation
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam: all BFB except:
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details:
+ - pre-existing failure
+
+izumi/nag/aux_cam: all BFB except:
+ DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ - pre-existing failure
+
+izumi/gnu/aux_cam: all BFB
+
+Isla Simpson analyzed the results from these code mods and approved the release of the Gray Radiation option.
+
+===============================================================
+===============================================================
+
+Tag name:cam6_3_116
+Originator(s): cacraig, hannay, jedwards, eaton
+Date: June 23, 2023
+One-line Summary: CAM Tuning "F" and fix derecho CSLAM performance
+Github PR URL: https://github.com/ESCOMP/CAM/pull/820
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+ - Update tunings for LT and MT based on the "Tuning F": https://github.com/ESCOMP/CAM/issues/818
+ - New gw tuning to add to the trunk: https://github.com/ESCOMP/CAM/issues/829
+ - More tuning for LT and MT: https://github.com/ESCOMP/CAM/issues/838
+ - Derecho CSLAM performance issue: https://github.com/ESCOMP/CAM/discussions/827
+ - add pointers for intel performance, remove unused PI variable for nvhpc: https://github.com/ESCOMP/CAM/pull/845
+ - Introduce configure options "lt" and "mt"
+ - Use new ncdata file with required metadata for LT and MT ne30pg3 runs
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist:
+ - micro_mg_dcs is now set inside build-namelist
+ - Default settings were changed for: micro_mg_dcs, use_gw_front, use_gw_convect_dp,
+ eff_rdg_beta, eff_rdg_beta_max, tau_0_ubc, effgw_beres_dp, clubb_C7, clubb_C_uu_shr,
+ clubb_l_mono_flux_lim_um, clubb_l_mono_flux_lim_vm, clubb_l_predict_upwp_vpwp,
+ microp_aero_wsubi_scale, micro_mg_vtrmi_factor, dust_emis_fact, seasalt_emis_scale
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: fvitt, nusbaume, eaton, adamrher (jtruedal, nusbaume and Peter Lauritzen reveiwed PR#845)
+
+List all files eliminated: N/A
+
+List all files added and what they do: N/A
+
+List all existing files that have been modified, and describe the changes:
+M bld/build-namelist
+ - Add selection for micro_mg_dcs
+ - Additional settings for tuning "F"
+
+M bld/config_files/definition.xml
+M bld/configure
+M cime_config/config_component.xml
+ - Introduce model_top qualifier with lt and mt options
+
+M bld/namelist_files/namelist_defaults_cam.xml
+ - Tuning "F" namelist settings
+ - Update files to include LT and MT input files which contain metadata
+
+M bld/namelist_files/use_cases/1850_cam_lt.xml
+M bld/namelist_files/use_cases/1850_cam_mt.xml
+M bld/namelist_files/use_cases/hist_cam_lt.xml
+M bld/namelist_files/use_cases/hist_cam_mt.xml
+ - Remove ncdata files and use ones from namelist_defaults_cam.xml
+
+M cime_config/config_compsets.xml
+ - Update to FLTHIST_v0d and FMTHIST_v0d
+
+M src/control/cam_history.F90
+ - remove unused pi
+
+M src/dynamics/se/dycore/fvm_consistent_se_cslam.F90
+ - Fix derecho performance issue
+
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+Most tests had namelist differences
+
+cheyenne/intel/aux_cam: all BFB except:
+
+ Ran FLTHIST and FMTHIST with old and new ncdata file and the results were BFB
+
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details:
+ - pre-existing failure
+
+ ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details:
+ ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: DIFF) details:
+ SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details:
+ - cam_dev tests have answer changes due to namelist changes
+
+ SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs (Overall: DIFF) details:
+ - SILHS has answer changes due to namelist changes. Adam Herrington approved changing answers for this configuration
+
+izumi/nag/aux_cam: all BFB except:
+ DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ - pre-existing failure
+
+izumi/gnu/aux_cam: all BFB except:
+ SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
+ - cam_dev tests have answer changes due to namelist changes
+CAM tag used for the baseline comparison tests if different than previous
+tag:
+
+Summarize any changes to answers, i.e.,
+- what code configurations:
+- what platforms/compilers:
+- nature of change (roundoff; larger than roundoff but same climate; new
+ climate):
+
+If bitwise differences were observed, how did you show they were no worse
+than roundoff?
+
+If this tag changes climate describe the run(s) done to evaluate the new
+climate in enough detail that it(they) could be reproduced, i.e.,
+- source tag (all code used must be in the repository):
+- platform/compilers:
+- configure commandline:
+- build-namelist command (or complete namelist):
+- MSS location of output:
+
+MSS location of control simulations used to validate new climate:
+
+URL for AMWG diagnostics output used to validate new climate:
+
+===============================================================
+===============================================================
+Tag name: cam6_3_115
+Originator(s): aherring, jet
+Date: June 21, 2023
+One-line Summary: Add support for coarse se grid ne3np4 and additional support for ne5 and ne16 grids
+Github PR URL: https://github.com/ESCOMP/CAM/pull/815
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+ - Create coarser grids for SE dycore and use for regression testing: https://github.com/ESCOMP/CAM/issues/726
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist: N/A
+
+List any changes to the defaults for the boundary datasets: New coarse grid SE boundary data.
+ /glade/p/cesmdata/inputdata/atm/cam/inic/se/cam6_QPC6_aqua_ne3pg3_mg37_L32_01-01-31_c221214.nc
+ /glade/p/cesmdata/inputdata/atm/cam/inic/se/cam6_QPC6_aqua_ne3pg3_mg37_L58_01-01-31_c221214.nc
+ /glade/p/cesmdata/inputdata/atm/cam/inic/se/cam6_QPC6_aqua_ne3pg3_mg37_L93_01-01-31_c221214.nc
+ /glade/p/cesmdata/inputdata/atm/cam/inic/se/cam6_QPC6_topo_ne3pg3_mg37_L32_01-01-31_c221214.nc
+ /glade/p/cesmdata/inputdata/atm/cam/inic/se/cam6_QPC6_topo_ne3pg3_mg37_L58_01-01-31_c221214.nc
+ /glade/p/cesmdata/inputdata/atm/cam/inic/se/cam6_QPC6_topo_ne3pg3_mg37_L93_01-01-31_c221214.nc
+ /glade/p/cesmdata/inputdata/atm/cam/inic/se/F2000climo_ne5pg3_mg37_L32_01-01-31_c230520.nc
+ /glade/p/cesmdata/inputdata/atm/cam/inic/se/F2000climo_ne5pg3_mg37_L58_01-01-31_c230520.nc
+ /glade/p/cesmdata/inputdata/atm/cam/topo/se/ne3pg3_gmted2010_modis_bedmachine_nc0540_Laplace1000_noleak_20230209.nc
+ /glade/p/cesmdata/inputdata/atm/cam/chem/trop_mam/atmsrf_ne3np4.pg3_c221214.nc
+ /glade/p/cesmdata/inputdata/atm/cam/chem/trop_mam/atmsrf_ne5pg3_201105.nc
+ /glade/p/cesmdata/inputdata/atm/cam/chem/trop_mam/atmsrf_ne16pg3_c230520.nc
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: cacraig
+
+List all files eliminated: N/A
+
+List all files added and what they do: N/A
+
+List all existing files that have been modified, and describe the changes:
+ M bld/namelist_files/namelist_defaults_cam.xml
+ - New defaults for ne3 ne5 and ne16 boundary data
+ M cime_config/tsetdefs/testlist_cam.xml
+ - New test for ne3pg3 grid
+ M Changelog
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam:
+ ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 (Overall: FAIL) details:
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details:
+ - pre-existing failures - mpasa480 failure due to corrupted initial condition file.
+
+ ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase (Overall: DIFF) details:
+ - Expected Difference due to update dry dep surface data file
+
+izumi/nag/aux_cam:
+ DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ - Pre-existing failure
+
+ ERP_Ln9_Vmct.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) details:
+ ERP_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) details:
+ - expected failures due to updated initial condition file.
+
+ ERP_Ln9_Vnuopc.ne3pg3_ne3pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) details:
+ - expected failure against Baseline because this is a new test
+
+izumi/gnu/aux_cam:
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 (Overall: DIFF) details:
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 (Overall: DIFF) details:
+ PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 (Overall: DIFF) details:
+ SMS_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac (Overall: DIFF) details:
+ - expected failures due to updated initial condition file.
+===============================================================
+===============================================================
+
+Tag name: cam6_3_114
+Originator(s): cacraig
+Date: June 8, 2023
+One-line Summary: Update externals to match cesm2_3_beta14 +
+Github PR URL: https://github.com/ESCOMP/CAM/pull/836
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+Update externals to cesm2_3_beta14 + : https://github.com/ESCOMP/CAM/issues/835
+Update to ccs_config_cesm0.0.72: https://github.com/ESCOMP/CAM/issues/834
+Brings in CTSM external needed by https://github.com/ESCOMP/CAM/pull/815
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist: N/A
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: nusbaume
+
+List all files eliminated: N/A
+
+List all files added and what they do: N/A
+
+List all existing files that have been modified, and describe the changes:
+M Externals.cfg
+ Update externals to match cesm2_3_beta14 (plus more recent CTSM and ccs_config as described above)
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam: all NL changes
+ - NUOPC introduces namelist changes
+
+ ERP_Ld3_Vnuopc.f09_f09_mg17.FWHIST.cheyenne_intel.cam-reduced_hist1d (Overall: DIFF) details:
+ ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details:
+ ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: DIFF) details:
+ ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 (Overall: DIFF) details:
+ SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details:
+ - Answer changes due to CTSM
+
+ ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details:
+ ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 (Overall: FAIL) details:
+ - preexisting failure
+
+izumi/nag/aux_cam: all BFB, all NL changes
+ - NUOPC introduces namelist changes
+
+ FAIL DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae RUN time=10
+ - preexisting failure
+
+
+izumi/gnu/aux_cam: all BFB, all NL changes
+ - NUOPC introduces namelist changes
+
+CAM tag used for the baseline comparison tests if different than previous
+tag: cam6_3_112 as cam6_3_113 did not have regression tests run for it
+
+===============================================================
+===============================================================
+
+Tag name: cam6_3_113
+Originator(s): cacraig
+Date: June 5, 2023
+One-line Summary: Update manage_externals to manic-1.2.22
+Github PR URL: https://github.com/ESCOMP/CAM/pull/833
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+ - Update manage_externals to latest version: https://github.com/ESCOMP/CAM/issues/740
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist: N/A
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: nusbaume
+
+List all files eliminated: N/A
+
+List all files added and what they do: N/A
+A manage_externals/.github/workflows/bumpversion.yml
+A manage_externals/.github/workflows/tests.yml
+A manage_externals/test/repos/README.md
+ - Updates for manage_externals
+
+List all existing files that have been modified, and describe the changes:
+M manage_externals/.gitignore
+M manage_externals/.travis.yml
+M manage_externals/README.md
+M manage_externals/checkout_externals
+M manage_externals/manic/checkout.py
+M manage_externals/manic/externals_description.py
+M manage_externals/manic/externals_status.py
+M manage_externals/manic/repository_factory.py
+M manage_externals/manic/repository_git.py
+M manage_externals/manic/repository_svn.py
+M manage_externals/manic/sourcetree.py
+M manage_externals/manic/utils.py
+M manage_externals/test/README.md
+M manage_externals/test/test_sys_checkout.py
+M manage_externals/test/test_sys_repository_git.py
+M manage_externals/test/test_unit_externals_description.py
+M manage_externals/test/test_unit_externals_status.py
+M manage_externals/test/test_unit_repository.py
+M manage_externals/test/test_unit_repository_git.py
+M manage_externals/test/test_unit_repository_svn.py
+M manage_externals/test/test_unit_utils.py
+ - Updates for manage_externals
+
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+cheyenne/intel/aux_cam: None run
+
+izumi/nag/aux_cam: None run
+
+izumi/gnu/aux_cam: None run
+
+Ran manage_externals/checkout_externals on cheyenne and izumi and it worked fine
+
+===============================================================
+===============================================================
+
Tag name: cam6_3_112
Originator(s): fvitt
Date: 18 May 2023
diff --git a/manage_externals/.github/workflows/bumpversion.yml b/manage_externals/.github/workflows/bumpversion.yml
new file mode 100644
index 0000000000..f4dc9b7ca5
--- /dev/null
+++ b/manage_externals/.github/workflows/bumpversion.yml
@@ -0,0 +1,19 @@
+name: Bump version
+on:
+ push:
+ branches:
+ - main
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Bump version and push tag
+ id: tag_version
+ uses: mathieudutour/github-tag-action@v5.5
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ create_annotated_tag: true
+ default_bump: patch
+ dry_run: false
+ tag_prefix: manic-
diff --git a/manage_externals/.github/workflows/tests.yml b/manage_externals/.github/workflows/tests.yml
new file mode 100644
index 0000000000..dd75b91b49
--- /dev/null
+++ b/manage_externals/.github/workflows/tests.yml
@@ -0,0 +1,30 @@
+# This is a workflow to compile the cmeps source without cime
+name: Test Manic
+
+# Controls when the action will run. Triggers the workflow on push or pull request
+# events but only for the master branch
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ test-manic:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Test Manic
+ run: |
+ pushd test
+ git config --global user.email "devnull@example.com"
+ git config --global user.name "GITHUB tester"
+ git config --global protocol.file.allow always
+ make utest
+ make stest
+ popd
+
+ - name: Setup tmate session
+ if: ${{ failure() }}
+ uses: mxschmitt/action-tmate@v3
diff --git a/manage_externals/.gitignore b/manage_externals/.gitignore
index 411de5d96e..a71ac0cd75 100644
--- a/manage_externals/.gitignore
+++ b/manage_externals/.gitignore
@@ -12,3 +12,6 @@ components/
# generated python files
*.pyc
+
+# test tmp file
+test/tmp
diff --git a/manage_externals/.travis.yml b/manage_externals/.travis.yml
index 1990cb9604..d9b24c584d 100644
--- a/manage_externals/.travis.yml
+++ b/manage_externals/.travis.yml
@@ -1,7 +1,6 @@
language: python
os: linux
-python:
- - "2.7"
+python:
- "3.4"
- "3.5"
- "3.6"
diff --git a/manage_externals/README.md b/manage_externals/README.md
index c931c8e213..9475301b5d 100644
--- a/manage_externals/README.md
+++ b/manage_externals/README.md
@@ -201,6 +201,11 @@ The root of the source tree will be referred to as `${SRC_ROOT}` below.
externals description file pointed 'useful_library/sub-xternals.cfg',
Then the main 'externals' field in the top level repo should point to
'sub-externals.cfg'.
+ Note that by default, `checkout_externals` will clone an external's
+ submodules. As a special case, the entry, `externals = None`, will
+ prevent this behavior. For more control over which externals are
+ checked out, create an externals file (and see the `from_submodule`
+ configuration entry below).
* from_submodule (True / False) : used to pull the repo_url, local_path,
and hash properties for this external from the .gitmodules file in
diff --git a/manage_externals/checkout_externals b/manage_externals/checkout_externals
index a0698baef0..48bce24010 100755
--- a/manage_externals/checkout_externals
+++ b/manage_externals/checkout_externals
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Main driver wrapper around the manic/checkout utility.
diff --git a/manage_externals/manic/checkout.py b/manage_externals/manic/checkout.py
index edc5655954..3f5537adce 100755
--- a/manage_externals/manic/checkout.py
+++ b/manage_externals/manic/checkout.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""
Tool to assemble repositories represented in a model-description file.
@@ -227,6 +227,12 @@ def commandline_arguments(args=None):
Now, %(prog)s will process Externals.cfg and also process
Externals_LIBX.cfg as if it was a sub-external.
+ Note that by default, checkout_externals will clone an external's
+ submodules. As a special case, the entry, "externals = None", will
+ prevent this behavior. For more control over which externals are
+ checked out, create an externals file (and see the from_submodule
+ configuration entry below).
+
* from_submodule (True / False) : used to pull the repo_url, local_path,
and hash properties for this external from the .gitmodules file in
this repository. Note that the section name (the entry in square
@@ -279,6 +285,9 @@ def commandline_arguments(args=None):
help='The externals description filename. '
'Default: %(default)s.')
+ parser.add_argument('-x', '--exclude', nargs='*',
+ help='Component(s) listed in the externals file which should be ignored.')
+
parser.add_argument('-o', '--optional', action='store_true', default=False,
help='By default only the required externals '
'are checked out. This flag will also checkout the '
@@ -329,7 +338,34 @@ def commandline_arguments(args=None):
options = parser.parse_args()
return options
-
+def _dirty_local_repo_msg(program_name, config_file):
+ return """The external repositories labeled with 'M' above are not in a clean state.
+The following are four options for how to proceed:
+(1) Go into each external that is not in a clean state and issue either a 'git status' or
+ an 'svn status' command (depending on whether the external is managed by git or
+ svn). Either revert or commit your changes so that all externals are in a clean
+ state. (To revert changes in git, follow the instructions given when you run 'git
+ status'.) (Note, though, that it is okay to have untracked files in your working
+ directory.) Then rerun {program_name}.
+(2) Alternatively, you do not have to rely on {program_name}. Instead, you can manually
+ update out-of-sync externals (labeled with 's' above) as described in the
+ configuration file {config_file}. (For example, run 'git fetch' and 'git checkout'
+ commands to checkout the appropriate tags for each external, as given in
+ {config_file}.)
+(3) You can also use {program_name} to manage most, but not all externals: You can specify
+ one or more externals to ignore using the '-x' or '--exclude' argument to
+ {program_name}. Excluding externals labeled with 'M' will allow {program_name} to
+ update the other, non-excluded externals.
+(4) As a last resort, if you are confident that there is no work that needs to be saved
+ from a given external, you can remove that external (via "rm -rf [directory]") and
+ then rerun the {program_name} tool. This option is mainly useful as a workaround for
+ issues with this tool (such as https://github.com/ESMCI/manage_externals/issues/157).
+The external repositories labeled with '?' above are not under version
+control using the expected protocol. If you are sure you want to switch
+protocols, and you don't have any work you need to save from this
+directory, then run "rm -rf [directory]" before rerunning the
+{program_name} tool.
+""".format(program_name=program_name, config_file=config_file)
# ---------------------------------------------------------------------
#
# main
@@ -342,9 +378,9 @@ def main(args):
the --all option is passed.
Returns a tuple (overall_status, tree_status). overall_status is 0
- on success, non-zero on failure. tree_status gives the full status
- *before* executing the checkout command - i.e., the status that it
- used to determine if it's safe to proceed with the checkout.
+ on success, non-zero on failure. tree_status is a dict mapping local path
+ to ExternalStatus -- if no checkout is happening. If checkout is happening, tree_status
+ is None.
"""
if args.do_logging:
logging.basicConfig(filename=LOG_FILE_NAME,
@@ -360,57 +396,41 @@ def main(args):
load_all = True
root_dir = os.path.abspath(os.getcwd())
- external_data = read_externals_description_file(root_dir, args.externals)
- external = create_externals_description(
- external_data, components=args.components)
+ model_data = read_externals_description_file(root_dir, args.externals)
+ ext_description = create_externals_description(
+ model_data, components=args.components, exclude=args.exclude)
for comp in args.components:
- if comp not in external.keys():
+ if comp not in ext_description.keys():
+ # Note we can't print out the list of found externals because
+ # they were filtered in create_externals_description above.
fatal_error(
"No component {} found in {}".format(
comp, args.externals))
- source_tree = SourceTree(root_dir, external, svn_ignore_ancestry=args.svn_ignore_ancestry)
- printlog('Checking status of externals: ', end='')
- tree_status = source_tree.status()
+ source_tree = SourceTree(root_dir, ext_description, svn_ignore_ancestry=args.svn_ignore_ancestry)
+ if args.components:
+ components_str = 'specified components'
+ else:
+ components_str = 'required & optional components'
+ printlog('Checking local status of ' + components_str + ': ', end='')
+ tree_status = source_tree.status(print_progress=True)
printlog('')
if args.status:
# user requested status-only
- for comp in sorted(tree_status.keys()):
+ for comp in sorted(tree_status):
tree_status[comp].log_status_message(args.verbose)
else:
# checkout / update the external repositories.
safe_to_update = check_safe_to_update_repos(tree_status)
if not safe_to_update:
# print status
- for comp in sorted(tree_status.keys()):
+ for comp in sorted(tree_status):
tree_status[comp].log_status_message(args.verbose)
# exit gracefully
- msg = """The external repositories labeled with 'M' above are not in a clean state.
-
-The following are two options for how to proceed:
-
-(1) Go into each external that is not in a clean state and issue either
- an 'svn status' or a 'git status' command. Either revert or commit
- your changes so that all externals are in a clean state. (Note,
- though, that it is okay to have untracked files in your working
- directory.) Then rerun {program_name}.
-
-(2) Alternatively, you do not have to rely on {program_name}. Instead, you
- can manually update out-of-sync externals (labeled with 's' above)
- as described in the configuration file {config_file}.
-
-
-The external repositories labeled with '?' above are not under version
-control using the expected protocol. If you are sure you want to switch
-protocols, and you don't have any work you need to save from this
-directory, then run "rm -rf [directory]" before re-running the
-checkout_externals tool.
-""".format(program_name=program_name, config_file=args.externals)
-
printlog('-' * 70)
- printlog(msg)
+ printlog(_dirty_local_repo_msg(program_name, args.externals))
printlog('-' * 70)
else:
if not args.components:
@@ -418,6 +438,8 @@ def main(args):
for comp in args.components:
source_tree.checkout(args.verbose, load_all, load_comp=comp)
printlog('')
+ # New tree status is unknown, don't return anything.
+ tree_status = None
logging.info('%s completed without exceptions.', program_name)
# NOTE(bja, 2017-11) tree status is used by the systems tests
diff --git a/manage_externals/manic/externals_description.py b/manage_externals/manic/externals_description.py
index b0c4f736a7..546e7fdcb4 100644
--- a/manage_externals/manic/externals_description.py
+++ b/manage_externals/manic/externals_description.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Model description
@@ -71,7 +71,8 @@ def read_externals_description_file(root_dir, file_name):
root_dir = os.path.abspath(root_dir)
msg = 'In directory : {0}'.format(root_dir)
logging.info(msg)
- printlog('Processing externals description file : {0}'.format(file_name))
+ printlog('Processing externals description file : {0} ({1})'.format(file_name,
+ root_dir))
file_path = os.path.join(root_dir, file_name)
if not os.path.exists(file_name):
@@ -87,7 +88,7 @@ def read_externals_description_file(root_dir, file_name):
externals_description = None
if file_name == ExternalsDescription.GIT_SUBMODULES_FILENAME:
- externals_description = read_gitmodules_file(root_dir, file_name)
+ externals_description = _read_gitmodules_file(root_dir, file_name)
else:
try:
config = config_parser()
@@ -150,9 +151,8 @@ def git_submodule_status(repo_dir):
"""Run the git submodule status command to obtain submodule hashes.
"""
# This function is here instead of GitRepository to avoid a dependency loop
- cwd = os.getcwd()
- os.chdir(repo_dir)
- cmd = ['git', 'submodule', 'status']
+ cmd = 'git -C {repo_dir} submodule status'.format(
+ repo_dir=repo_dir).split()
git_output = execute_subprocess(cmd, output_to_caller=True)
submodules = {}
submods = git_output.split('\n')
@@ -167,7 +167,6 @@ def git_submodule_status(repo_dir):
submodules[items[1]] = {'hash':items[0], 'status':status, 'tag':tag}
- os.chdir(cwd)
return submodules
def parse_submodules_desc_section(section_items, file_path):
@@ -180,6 +179,9 @@ def parse_submodules_desc_section(section_items, file_path):
path = item[1].strip()
elif name == 'url':
url = item[1].strip()
+ elif name == 'branch':
+ # We do not care about branch since we have a hash - silently ignore
+ pass
else:
msg = 'WARNING: Ignoring unknown {} property, in {}'
msg = msg.format(item[0], file_path) # fool pylint
@@ -187,21 +189,23 @@ def parse_submodules_desc_section(section_items, file_path):
return path, url
-def read_gitmodules_file(root_dir, file_name):
+def _read_gitmodules_file(root_dir, file_name):
# pylint: disable=deprecated-method
# Disabling this check because the method is only used for python2
+ # pylint: disable=too-many-locals
+ # pylint: disable=too-many-branches
+ # pylint: disable=too-many-statements
"""Read a .gitmodules file and convert it to be compatible with an
externals description.
"""
root_dir = os.path.abspath(root_dir)
msg = 'In directory : {0}'.format(root_dir)
logging.info(msg)
- printlog('Processing submodules description file : {0}'.format(file_name))
file_path = os.path.join(root_dir, file_name)
if not os.path.exists(file_name):
msg = ('ERROR: submodules description file, "{0}", does not '
- 'exist at path:\n {1}'.format(file_name, file_path))
+ 'exist in dir:\n {1}'.format(file_name, root_dir))
fatal_error(msg)
submodules_description = None
@@ -250,9 +254,21 @@ def read_gitmodules_file(root_dir, file_name):
ExternalsDescription.REPO_URL, url)
externals_description.set(sec_name,
ExternalsDescription.REQUIRED, 'True')
- git_hash = submods[sec_name]['hash']
- externals_description.set(sec_name,
- ExternalsDescription.HASH, git_hash)
+ if sec_name in submods:
+ submod_name = sec_name
+ else:
+ # The section name does not have to match the path
+ submod_name = path
+
+ if submod_name in submods:
+ git_hash = submods[submod_name]['hash']
+ externals_description.set(sec_name,
+ ExternalsDescription.HASH,
+ git_hash)
+ else:
+ emsg = "submodule status has no section, '{}'"
+ emsg += "\nCheck section names in externals config file"
+ fatal_error(emsg.format(submod_name))
# Required items
externals_description.add_section(DESCRIPTION_SECTION)
@@ -261,18 +277,22 @@ def read_gitmodules_file(root_dir, file_name):
return externals_description
def create_externals_description(
- model_data, model_format='cfg', components=None, parent_repo=None):
+ model_data, model_format='cfg', components=None, exclude=None, parent_repo=None):
"""Create the a externals description object from the provided data
+
+ components: list of component names to include, None to include all. If a
+ name isn't found, it is silently omitted from the return value.
+ exclude: list of component names to skip.
"""
externals_description = None
if model_format == 'dict':
externals_description = ExternalsDescriptionDict(
- model_data, components=components)
+ model_data, components=components, exclude=exclude)
elif model_format == 'cfg':
major, _, _ = get_cfg_schema_version(model_data)
if major == 1:
externals_description = ExternalsDescriptionConfigV1(
- model_data, components=components, parent_repo=parent_repo)
+ model_data, components=components, exclude=exclude, parent_repo=parent_repo)
else:
msg = ('Externals description file has unsupported schema '
'version "{0}".'.format(major))
@@ -339,8 +359,9 @@ class ExternalsDescription(dict):
input value.
"""
- # keywords defining the interface into the externals description data
- EXTERNALS = 'externals'
+ # keywords defining the interface into the externals description data; these
+ # are brought together by the schema below.
+ EXTERNALS = 'externals' # path to externals file.
BRANCH = 'branch'
SUBMODULE = 'from_submodule'
HASH = 'hash'
@@ -366,6 +387,8 @@ class ExternalsDescription(dict):
_V1_BRANCH = 'BRANCH'
_V1_REQ_SOURCE = 'REQ_SOURCE'
+ # Dictionary keys are component names. The corresponding values are laid out
+ # according to this schema.
_source_schema = {REQUIRED: True,
PATH: 'string',
EXTERNALS: 'string',
@@ -614,8 +637,11 @@ def _repo_config_from_submodule(self, field, submod_desc):
' Parent repo, "{1}" does not have submodules')
fatal_error(msg.format(field, self._parent_repo.name()))
- submod_file = read_gitmodules_file(repo_path, submod_file)
- submod_desc = create_externals_description(submod_file)
+ printlog(
+ 'Processing submodules description file : {0} ({1})'.format(
+ submod_file, repo_path))
+ submod_model_data= _read_gitmodules_file(repo_path, submod_file)
+ submod_desc = create_externals_description(submod_model_data)
# Can we find our external?
repo_url = None
@@ -707,7 +733,7 @@ class ExternalsDescriptionDict(ExternalsDescription):
"""
- def __init__(self, model_data, components=None):
+ def __init__(self, model_data, components=None, exclude=None):
"""Parse a native dictionary into a externals description.
"""
ExternalsDescription.__init__(self)
@@ -719,10 +745,15 @@ def __init__(self, model_data, components=None):
self._input_patch = 0
self._verify_schema_version()
if components:
- for key in model_data.items():
+ for key in list(model_data.keys()):
if key not in components:
del model_data[key]
+ if exclude:
+ for key in list(model_data.keys()):
+ if key in exclude:
+ del model_data[key]
+
self.update(model_data)
self._check_user_input()
@@ -733,10 +764,12 @@ class ExternalsDescriptionConfigV1(ExternalsDescription):
"""
- def __init__(self, model_data, components=None, parent_repo=None):
+ def __init__(self, model_data, components=None, exclude=None, parent_repo=None):
"""Convert the config data into a standardized dict that can be used to
construct the source objects
+ components: list of component names to include, None to include all.
+ exclude: list of component names to skip.
"""
ExternalsDescription.__init__(self, parent_repo=parent_repo)
self._schema_major = 1
@@ -746,7 +779,7 @@ def __init__(self, model_data, components=None, parent_repo=None):
get_cfg_schema_version(model_data)
self._verify_schema_version()
self._remove_metadata(model_data)
- self._parse_cfg(model_data, components=components)
+ self._parse_cfg(model_data, components=components, exclude=exclude)
self._check_user_input()
@staticmethod
@@ -758,8 +791,11 @@ def _remove_metadata(model_data):
"""
model_data.remove_section(DESCRIPTION_SECTION)
- def _parse_cfg(self, cfg_data, components=None):
+ def _parse_cfg(self, cfg_data, components=None, exclude=None):
"""Parse a config_parser object into a externals description.
+
+ components: list of component names to include, None to include all.
+ exclude: list of component names to skip.
"""
def list_to_dict(input_list, convert_to_lower_case=True):
"""Convert a list of key-value pairs into a dictionary.
@@ -775,7 +811,7 @@ def list_to_dict(input_list, convert_to_lower_case=True):
for section in cfg_data.sections():
name = config_string_cleaner(section.lower().strip())
- if components and name not in components:
+ if (components and name not in components) or (exclude and name in exclude):
continue
self[name] = {}
self[name].update(list_to_dict(cfg_data.items(section)))
diff --git a/manage_externals/manic/externals_status.py b/manage_externals/manic/externals_status.py
index d3d238f289..6bc29e9732 100644
--- a/manage_externals/manic/externals_status.py
+++ b/manage_externals/manic/externals_status.py
@@ -29,16 +29,16 @@ class ExternalStatus(object):
transactions (e.g. add, remove, rename, untracked files).
"""
- DEFAULT = '-'
+ # sync_state and clean_state can be one of the following:
+ DEFAULT = '-' # not set yet (sync_state). clean_state can be this if sync_state is EMPTY.
UNKNOWN = '?'
EMPTY = 'e'
- MODEL_MODIFIED = 's' # a.k.a. out-of-sync
- DIRTY = 'M'
-
- STATUS_OK = ' '
+ MODEL_MODIFIED = 's' # repo version != externals (sync_state only)
+ DIRTY = 'M' # repo is dirty (clean_state only)
+ STATUS_OK = ' ' # repo is clean (clean_state) or matches externals version (sync_state)
STATUS_ERROR = '!'
- # source types
+ # source_type can be one of the following:
OPTIONAL = 'o'
STANDALONE = 's'
MANAGED = ' '
@@ -55,19 +55,21 @@ def __init__(self):
def log_status_message(self, verbosity):
"""Write status message to the screen and log file
"""
- self._default_status_message()
+ printlog(self._default_status_message())
if verbosity >= VERBOSITY_VERBOSE:
- self._verbose_status_message()
+ printlog(self._verbose_status_message())
if verbosity >= VERBOSITY_DUMP:
- self._dump_status_message()
+ printlog(self._dump_status_message())
+
+ def __repr__(self):
+ return self._default_status_message()
def _default_status_message(self):
"""Return the default terse status message string
"""
- msg = '{sync}{clean}{src_type} {path}'.format(
+ return '{sync}{clean}{src_type} {path}'.format(
sync=self.sync_state, clean=self.clean_state,
src_type=self.source_type, path=self.path)
- printlog(msg)
def _verbose_status_message(self):
"""Return the verbose status message string
@@ -82,14 +84,12 @@ def _verbose_status_message(self):
if self.sync_state != self.STATUS_OK:
sync_str = '{current} --> {expected}'.format(
current=self.current_version, expected=self.expected_version)
- msg = ' {clean}, {sync}'.format(clean=clean_str, sync=sync_str)
- printlog(msg)
+ return ' {clean}, {sync}'.format(clean=clean_str, sync=sync_str)
def _dump_status_message(self):
"""Return the dump status message string
"""
- msg = indent_string(self.status_output, 12)
- printlog(msg)
+ return indent_string(self.status_output, 12)
def safe_to_update(self):
"""Report if it is safe to update a repository. Safe is defined as:
diff --git a/manage_externals/manic/repository_factory.py b/manage_externals/manic/repository_factory.py
index 80a92a9d8a..18c73ffc4b 100644
--- a/manage_externals/manic/repository_factory.py
+++ b/manage_externals/manic/repository_factory.py
@@ -15,6 +15,7 @@ def create_repository(component_name, repo_info, svn_ignore_ancestry=False):
"""Determine what type of repository we have, i.e. git or svn, and
create the appropriate object.
+ Can return None (e.g. if protocol is 'externals_only').
"""
protocol = repo_info[ExternalsDescription.PROTOCOL].lower()
if protocol == 'git':
diff --git a/manage_externals/manic/repository_git.py b/manage_externals/manic/repository_git.py
index f986051001..adc666cc57 100644
--- a/manage_externals/manic/repository_git.py
+++ b/manage_externals/manic/repository_git.py
@@ -25,7 +25,7 @@ class GitRepository(Repository):
* be isolated in separate functions with no application logic
* of the form:
- - cmd = ['git', ...]
+ - cmd = 'git -C {dirname} ...'.format(dirname=dirname).split()
- value = execute_subprocess(cmd, output_to_caller={T|F},
status_to_caller={T|F})
- return value
@@ -39,7 +39,7 @@ class GitRepository(Repository):
def __init__(self, component_name, repo):
"""
- Parse repo (a XML element).
+ repo: ExternalsDescription.
"""
Repository.__init__(self, component_name, repo)
self._gitmodules = None
@@ -99,45 +99,42 @@ def submodules_file(self, repo_path=None):
#
# ----------------------------------------------------------------
def _clone_repo(self, base_dir_path, repo_dir_name, verbosity):
- """Prepare to execute the clone by managing directory location
+ """Clones repo_dir_name into base_dir_path.
"""
- cwd = os.getcwd()
- os.chdir(base_dir_path)
- self._git_clone(self._url, repo_dir_name, verbosity)
- os.chdir(cwd)
+ self._git_clone(self._url, os.path.join(base_dir_path, repo_dir_name),
+ verbosity=verbosity)
- def _current_ref(self):
- """Determine the *name* associated with HEAD.
+ def _current_ref(self, dirname):
+ """Determine the *name* associated with HEAD at dirname.
- If we're on a branch, then returns the branch name; otherwise,
- if we're on a tag, then returns the tag name; otherwise, returns
+ If we're on a tag, then returns the tag name; otherwise, returns
the current hash. Returns an empty string if no reference can be
determined (e.g., if we're not actually in a git repository).
+
+ If we're on a branch, then the branch name is also included in
+ the returned string (in addition to the tag / hash).
"""
ref_found = False
- # If we're on a branch, then use that as the current ref
- branch_found, branch_name = self._git_current_branch()
- if branch_found:
- current_ref = branch_name
+ # If we're exactly at a tag, use that as the current ref
+ tag_found, tag_name = self._git_current_tag(dirname)
+ if tag_found:
+ current_ref = tag_name
ref_found = True
- if not ref_found:
- # Otherwise, if we're exactly at a tag, use that as the
- # current ref
- tag_found, tag_name = self._git_current_tag()
- if tag_found:
- current_ref = tag_name
- ref_found = True
-
if not ref_found:
# Otherwise, use current hash as the current ref
- hash_found, hash_name = self._git_current_hash()
+ hash_found, hash_name = self._git_current_hash(dirname)
if hash_found:
current_ref = hash_name
ref_found = True
- if not ref_found:
+ if ref_found:
+ # If we're on a branch, include branch name in current ref
+ branch_found, branch_name = self._git_current_branch(dirname)
+ if branch_found:
+ current_ref = "{} (branch {})".format(current_ref, branch_name)
+ else:
# If we still can't find a ref, return empty string. This
# can happen if we're not actually in a git repo
current_ref = ''
@@ -185,17 +182,15 @@ def compare_refs(current_ref, expected_ref):
status = ExternalStatus.MODEL_MODIFIED
return status
- cwd = os.getcwd()
- os.chdir(repo_dir_path)
-
# get the full hash of the current commit
- _, current_ref = self._git_current_hash()
+ _, current_ref = self._git_current_hash(repo_dir_path)
if self._branch:
if self._url == LOCAL_PATH_INDICATOR:
expected_ref = self._branch
else:
- remote_name = self._determine_remote_name()
+ remote_name = self._remote_name_for_url(self._url,
+ repo_dir_path)
if not remote_name:
# git doesn't know about this remote. by definition
# this is a modified state.
@@ -212,7 +207,7 @@ def compare_refs(current_ref, expected_ref):
fatal_error(msg)
# record the *names* of the current and expected branches
- stat.current_version = self._current_ref()
+ stat.current_version = self._current_ref(repo_dir_path)
stat.expected_version = copy.deepcopy(expected_ref)
if current_ref == EMPTY_STR:
@@ -220,7 +215,7 @@ def compare_refs(current_ref, expected_ref):
else:
# get the underlying hash of the expected ref
revparse_status, expected_ref_hash = self._git_revparse_commit(
- expected_ref)
+ expected_ref, repo_dir_path)
if revparse_status:
# We failed to get the hash associated with
# expected_ref. Maybe we should assign this to some special
@@ -231,18 +226,13 @@ def compare_refs(current_ref, expected_ref):
# compare the underlying hashes
stat.sync_state = compare_refs(current_ref, expected_ref_hash)
- os.chdir(cwd)
-
- def _determine_remote_name(self):
- """Return the remote name.
-
- Note that this is for the *future* repo url and branch, not
- the current working copy!
+ @classmethod
+ def _remote_name_for_url(cls, remote_url, dirname):
+ """Return the remote name matching remote_url (or None)
"""
- git_output = self._git_remote_verbose()
+ git_output = cls._git_remote_verbose(dirname)
git_output = git_output.splitlines()
- remote_name = ''
for line in git_output:
data = line.strip()
if not data:
@@ -250,10 +240,9 @@ def _determine_remote_name(self):
data = data.split()
name = data[0].strip()
url = data[1].strip()
- if self._url == url:
- remote_name = name
- break
- return remote_name
+ if remote_url == url:
+ return name
+ return None
def _create_remote_name(self):
"""The url specified in the externals description file was not known
@@ -309,19 +298,16 @@ def _checkout_ref(self, repo_dir, verbosity, submodules):
the repo's submodules
"""
# import pdb; pdb.set_trace()
- cwd = os.getcwd()
- os.chdir(repo_dir)
if self._url.strip() == LOCAL_PATH_INDICATOR:
- self._checkout_local_ref(verbosity, submodules)
+ self._checkout_local_ref(verbosity, submodules, repo_dir)
else:
- self._checkout_external_ref(verbosity, submodules)
+ self._checkout_external_ref(verbosity, submodules, repo_dir)
if self._sparse:
self._sparse_checkout(repo_dir, verbosity)
- os.chdir(cwd)
- def _checkout_local_ref(self, verbosity, submodules):
+ def _checkout_local_ref(self, verbosity, submodules, dirname):
"""Checkout the reference considering the local repo only. Do not
fetch any additional remotes or specify the remote when
checkout out the ref.
@@ -335,13 +321,18 @@ def _checkout_local_ref(self, verbosity, submodules):
else:
ref = self._hash
- self._check_for_valid_ref(ref)
- self._git_checkout_ref(ref, verbosity, submodules)
+ self._check_for_valid_ref(ref, remote_name=None,
+ dirname=dirname)
+ self._git_checkout_ref(ref, verbosity, submodules, dirname)
- def _checkout_external_ref(self, verbosity, submodules):
- """Checkout the reference from a remote repository
+ def _checkout_external_ref(self, verbosity, submodules, dirname):
+ """Checkout the reference from a remote repository into dirname.
if is True, recursively initialize and update
- the repo's submodules
+ the repo's submodules.
+ Note that this results in a 'detached HEAD' state if checking out
+ a branch, because we check out the remote branch rather than the
+ local. See https://github.com/ESMCI/manage_externals/issues/34 for
+ more discussion.
"""
if self._tag:
ref = self._tag
@@ -350,44 +341,45 @@ def _checkout_external_ref(self, verbosity, submodules):
else:
ref = self._hash
- remote_name = self._determine_remote_name()
+ remote_name = self._remote_name_for_url(self._url, dirname)
if not remote_name:
remote_name = self._create_remote_name()
- self._git_remote_add(remote_name, self._url)
- self._git_fetch(remote_name)
+ self._git_remote_add(remote_name, self._url, dirname)
+ self._git_fetch(remote_name, dirname)
# NOTE(bja, 2018-03) we need to send separate ref and remote
# name to check_for_vaild_ref, but the combined name to
# checkout_ref!
- self._check_for_valid_ref(ref, remote_name)
+ self._check_for_valid_ref(ref, remote_name, dirname)
if self._branch:
+ # Prepend remote name to branch. This means we avoid various
+ # special cases if the local branch is not tracking the remote or
+ # cannot be trivially fast-forwarded to match; but, it also
+ # means we end up in a 'detached HEAD' state.
ref = '{0}/{1}'.format(remote_name, ref)
- self._git_checkout_ref(ref, verbosity, submodules)
+ self._git_checkout_ref(ref, verbosity, submodules, dirname)
def _sparse_checkout(self, repo_dir, verbosity):
"""Use git read-tree to thin the working tree."""
- cwd = os.getcwd()
-
- cmd = ['cp', self._sparse, os.path.join(repo_dir,
- '.git/info/sparse-checkout')]
+ cmd = ['cp', os.path.join(repo_dir, self._sparse),
+ os.path.join(repo_dir,
+ '.git/info/sparse-checkout')]
if verbosity >= VERBOSITY_VERBOSE:
printlog(' {0}'.format(' '.join(cmd)))
execute_subprocess(cmd)
- os.chdir(repo_dir)
- self._git_sparse_checkout(verbosity)
-
- os.chdir(cwd)
+ self._git_sparse_checkout(verbosity, repo_dir)
- def _check_for_valid_ref(self, ref, remote_name=None):
+ def _check_for_valid_ref(self, ref, remote_name, dirname):
"""Try some basic sanity checks on the user supplied reference so we
can provide a more useful error message than calledprocess
error...
+ remote_name can be NOne
"""
- is_tag = self._ref_is_tag(ref)
- is_branch = self._ref_is_branch(ref, remote_name)
- is_hash = self._ref_is_hash(ref)
+ is_tag = self._ref_is_tag(ref, dirname)
+ is_branch = self._ref_is_branch(ref, remote_name, dirname)
+ is_hash = self._ref_is_hash(ref, dirname)
is_valid = is_tag or is_branch or is_hash
if not is_valid:
@@ -398,7 +390,8 @@ def _check_for_valid_ref(self, ref, remote_name=None):
fatal_error(msg)
if is_tag:
- is_unique_tag, msg = self._is_unique_tag(ref, remote_name)
+ is_unique_tag, msg = self._is_unique_tag(ref, remote_name,
+ dirname)
if not is_unique_tag:
msg = ('In repo "{0}": tag "{1}" {2}'.format(
self._name, self._tag, msg))
@@ -406,7 +399,7 @@ def _check_for_valid_ref(self, ref, remote_name=None):
return is_valid
- def _is_unique_tag(self, ref, remote_name):
+ def _is_unique_tag(self, ref, remote_name, dirname):
"""Verify that a reference is a valid tag and is unique (not a branch)
Tags may be tag names, or SHA id's. It is also possible that a
@@ -417,9 +410,9 @@ def _is_unique_tag(self, ref, remote_name):
error!
"""
- is_tag = self._ref_is_tag(ref)
- is_branch = self._ref_is_branch(ref, remote_name)
- is_hash = self._ref_is_hash(ref)
+ is_tag = self._ref_is_tag(ref, dirname)
+ is_branch = self._ref_is_branch(ref, remote_name, dirname)
+ is_hash = self._ref_is_hash(ref, dirname)
msg = ''
is_unique_tag = False
@@ -450,7 +443,7 @@ def _is_unique_tag(self, ref, remote_name):
return is_unique_tag, msg
- def _ref_is_tag(self, ref):
+ def _ref_is_tag(self, ref, dirname):
"""Verify that a reference is a valid tag according to git.
Note: values returned by git_showref_* and git_revparse are
@@ -458,28 +451,30 @@ def _ref_is_tag(self, ref):
error!
"""
is_tag = False
- value = self._git_showref_tag(ref)
+ value = self._git_showref_tag(ref, dirname)
if value == 0:
is_tag = True
return is_tag
- def _ref_is_branch(self, ref, remote_name=None):
+ def _ref_is_branch(self, ref, remote_name, dirname):
"""Verify if a ref is any kind of branch (local, tracked remote,
untracked remote).
+ remote_name can be None.
"""
local_branch = False
remote_branch = False
if remote_name:
- remote_branch = self._ref_is_remote_branch(ref, remote_name)
- local_branch = self._ref_is_local_branch(ref)
+ remote_branch = self._ref_is_remote_branch(ref, remote_name,
+ dirname)
+ local_branch = self._ref_is_local_branch(ref, dirname)
is_branch = False
if local_branch or remote_branch:
is_branch = True
return is_branch
- def _ref_is_local_branch(self, ref):
+ def _ref_is_local_branch(self, ref, dirname):
"""Verify that a reference is a valid branch according to git.
show-ref branch returns local branches that have been
@@ -492,12 +487,12 @@ def _ref_is_local_branch(self, ref):
"""
is_branch = False
- value = self._git_showref_branch(ref)
+ value = self._git_showref_branch(ref, dirname)
if value == 0:
is_branch = True
return is_branch
- def _ref_is_remote_branch(self, ref, remote_name):
+ def _ref_is_remote_branch(self, ref, remote_name, dirname):
"""Verify that a reference is a valid branch according to git.
show-ref branch returns local branches that have been
@@ -510,12 +505,12 @@ def _ref_is_remote_branch(self, ref, remote_name):
"""
is_branch = False
- value = self._git_lsremote_branch(ref, remote_name)
+ value = self._git_lsremote_branch(ref, remote_name, dirname)
if value == 0:
is_branch = True
return is_branch
- def _ref_is_commit(self, ref):
+ def _ref_is_commit(self, ref, dirname):
"""Verify that a reference is a valid commit according to git.
This could be a tag, branch, sha1 id, HEAD and potentially others...
@@ -525,12 +520,12 @@ def _ref_is_commit(self, ref):
error!
"""
is_commit = False
- value, _ = self._git_revparse_commit(ref)
+ value, _ = self._git_revparse_commit(ref, dirname)
if value == 0:
is_commit = True
return is_commit
- def _ref_is_hash(self, ref):
+ def _ref_is_hash(self, ref, dirname):
"""Verify that a reference is a valid hash according to git.
Git doesn't seem to provide an exact way to determine if user
@@ -545,7 +540,7 @@ def _ref_is_hash(self, ref):
"""
is_hash = False
- status, git_output = self._git_revparse_commit(ref)
+ status, git_output = self._git_revparse_commit(ref, dirname)
if status == 0:
if git_output.strip().startswith(ref):
is_hash = True
@@ -555,9 +550,7 @@ def _status_summary(self, stat, repo_dir_path):
"""Determine the clean/dirty status of a git repository
"""
- cwd = os.getcwd()
- os.chdir(repo_dir_path)
- git_output = self._git_status_porcelain_v1z()
+ git_output = self._git_status_porcelain_v1z(repo_dir_path)
is_dirty = self._status_v1z_is_dirty(git_output)
if is_dirty:
stat.clean_state = ExternalStatus.DIRTY
@@ -566,8 +559,7 @@ def _status_summary(self, stat, repo_dir_path):
# Now save the verbose status output incase the user wants to
# see it.
- stat.status_output = self._git_status_verbose()
- os.chdir(cwd)
+ stat.status_output = self._git_status_verbose(repo_dir_path)
@staticmethod
def _status_v1z_is_dirty(git_output):
@@ -602,7 +594,7 @@ def _status_v1z_is_dirty(git_output):
#
# ----------------------------------------------------------------
@staticmethod
- def _git_current_hash():
+ def _git_current_hash(dirname):
"""Return the full hash of the currently checked-out version.
Returns a tuple, (hash_found, hash), where hash_found is a
@@ -610,21 +602,51 @@ def _git_current_hash():
could mean we're not in a git repository at all). (If hash_found
is False, then hash is ''.)
"""
- status, git_output = GitRepository._git_revparse_commit("HEAD")
+ status, git_output = GitRepository._git_revparse_commit("HEAD",
+ dirname)
hash_found = not status
if not hash_found:
git_output = ''
return hash_found, git_output
@staticmethod
- def _git_current_branch():
- """Determines the name of the current branch.
+ def _git_current_remote_branch(dirname):
+ """Determines the name of the current remote branch, if any.
+
+ if dir is None, uses the cwd.
+
+ Returns a tuple, (branch_found, branch_name), where branch_found
+ is a bool specifying whether a branch name was found for
+ HEAD. (If branch_found is False, then branch_name is '').
+ branch_name is in the format '$remote/$branch', e.g. 'origin/foo'.
+ """
+ branch_found = False
+ branch_name = ''
+
+ cmd = 'git -C {dirname} log -n 1 --pretty=%d HEAD'.format(
+ dirname=dirname).split()
+ status, git_output = execute_subprocess(cmd,
+ output_to_caller=True,
+ status_to_caller=True)
+ branch_found = 'HEAD,' in git_output
+ if branch_found:
+ # git_output is of the form " (HEAD, origin/blah)"
+ branch_name = git_output.split(',')[1].strip()[:-1]
+ return branch_found, branch_name
+
+ @staticmethod
+ def _git_current_branch(dirname):
+ """Determines the name of the current local branch.
Returns a tuple, (branch_found, branch_name), where branch_found
- is a logical specifying whether a branch name was found for
+ is a bool specifying whether a branch name was found for
HEAD. (If branch_found is False, then branch_name is ''.)
+ Note that currently we check out the remote branch rather than
+ the local, so this command does not return the just-checked-out
+ branch. See _git_current_remote_branch.
"""
- cmd = ['git', 'symbolic-ref', '--short', '-q', 'HEAD']
+ cmd = 'git -C {dirname} symbolic-ref --short -q HEAD'.format(
+ dirname=dirname).split()
status, git_output = execute_subprocess(cmd,
output_to_caller=True,
status_to_caller=True)
@@ -636,15 +658,17 @@ def _git_current_branch():
return branch_found, git_output
@staticmethod
- def _git_current_tag():
+ def _git_current_tag(dirname):
"""Determines the name tag corresponding to HEAD (if any).
+ if dirname is None, uses the cwd.
+
Returns a tuple, (tag_found, tag_name), where tag_found is a
- logical specifying whether we found a tag name corresponding to
+ bool specifying whether we found a tag name corresponding to
HEAD. (If tag_found is False, then tag_name is ''.)
"""
- # git describe --exact-match --tags HEAD
- cmd = ['git', 'describe', '--exact-match', '--tags', 'HEAD']
+ cmd = 'git -C {dirname} describe --exact-match --tags HEAD'.format(
+ dirname=dirname).split()
status, git_output = execute_subprocess(cmd,
output_to_caller=True,
status_to_caller=True)
@@ -656,53 +680,54 @@ def _git_current_tag():
return tag_found, git_output
@staticmethod
- def _git_showref_tag(ref):
+ def _git_showref_tag(ref, dirname):
"""Run git show-ref check if the user supplied ref is a tag.
could also use git rev-parse --quiet --verify tagname^{tag}
"""
- cmd = ['git', 'show-ref', '--quiet', '--verify',
- 'refs/tags/{0}'.format(ref), ]
+ cmd = ('git -C {dirname} show-ref --quiet --verify refs/tags/{ref}'
+ .format(dirname=dirname, ref=ref).split())
status = execute_subprocess(cmd, status_to_caller=True)
return status
@staticmethod
- def _git_showref_branch(ref):
+ def _git_showref_branch(ref, dirname):
"""Run git show-ref check if the user supplied ref is a local or
tracked remote branch.
"""
- cmd = ['git', 'show-ref', '--quiet', '--verify',
- 'refs/heads/{0}'.format(ref), ]
+ cmd = ('git -C {dirname} show-ref --quiet --verify refs/heads/{ref}'
+ .format(dirname=dirname, ref=ref).split())
status = execute_subprocess(cmd, status_to_caller=True)
return status
@staticmethod
- def _git_lsremote_branch(ref, remote_name):
+ def _git_lsremote_branch(ref, remote_name, dirname):
"""Run git ls-remote to check if the user supplied ref is a remote
branch that is not being tracked
"""
- cmd = ['git', 'ls-remote', '--exit-code', '--heads',
- remote_name, ref, ]
+ cmd = ('git -C {dirname} ls-remote --exit-code --heads '
+ '{remote_name} {ref}').format(
+ dirname=dirname, remote_name=remote_name, ref=ref).split()
status = execute_subprocess(cmd, status_to_caller=True)
return status
@staticmethod
- def _git_revparse_commit(ref):
+ def _git_revparse_commit(ref, dirname):
"""Run git rev-parse to detect if a reference is a SHA, HEAD or other
valid commit.
"""
- cmd = ['git', 'rev-parse', '--quiet', '--verify',
- '{0}^{1}'.format(ref, '{commit}'), ]
+ cmd = ('git -C {dirname} rev-parse --quiet --verify {ref}^{commit}'
+ .format(dirname=dirname, ref=ref, commit='{commit}').split())
status, git_output = execute_subprocess(cmd, status_to_caller=True,
output_to_caller=True)
git_output = git_output.strip()
return status, git_output
@staticmethod
- def _git_status_porcelain_v1z():
+ def _git_status_porcelain_v1z(dirname):
"""Run git status to obtain repository information.
This is run with '--untracked=no' to ignore untracked files.
@@ -711,36 +736,38 @@ def _git_status_porcelain_v1z():
between git versions or *user configuration*.
"""
- cmd = ['git', 'status', '--untracked-files=no', '--porcelain', '-z']
+ cmd = ('git -C {dirname} status --untracked-files=no --porcelain -z'
+ .format(dirname=dirname)).split()
git_output = execute_subprocess(cmd, output_to_caller=True)
return git_output
@staticmethod
- def _git_status_verbose():
+ def _git_status_verbose(dirname):
"""Run the git status command to obtain repository information.
"""
- cmd = ['git', 'status']
+ cmd = 'git -C {dirname} status'.format(dirname=dirname).split()
git_output = execute_subprocess(cmd, output_to_caller=True)
return git_output
@staticmethod
- def _git_remote_verbose():
+ def _git_remote_verbose(dirname):
"""Run the git remote command to obtain repository information.
+
+ Returned string is of the form:
+ myfork git@github.com:johnpaulalex/manage_externals_jp.git (fetch)
+ myfork git@github.com:johnpaulalex/manage_externals_jp.git (push)
"""
- cmd = ['git', 'remote', '--verbose']
- git_output = execute_subprocess(cmd, output_to_caller=True)
- return git_output
+ cmd = 'git -C {dirname} remote --verbose'.format(
+ dirname=dirname).split()
+ return execute_subprocess(cmd, output_to_caller=True)
@staticmethod
- def has_submodules(repo_dir_path=None):
- """Return True iff the repository at (or the current
- directory if is None) has a '.gitmodules' file
+ def has_submodules(repo_dir_path):
+ """Return True iff the repository at has a
+ '.gitmodules' file
"""
- if repo_dir_path is None:
- fname = ExternalsDescription.GIT_SUBMODULES_FILENAME
- else:
- fname = os.path.join(repo_dir_path,
- ExternalsDescription.GIT_SUBMODULES_FILENAME)
+ fname = os.path.join(repo_dir_path,
+ ExternalsDescription.GIT_SUBMODULES_FILENAME)
return os.path.exists(fname)
@@ -751,68 +778,71 @@ def has_submodules(repo_dir_path=None):
# ----------------------------------------------------------------
@staticmethod
def _git_clone(url, repo_dir_name, verbosity):
- """Run git clone for the side effect of creating a repository.
+ """Clones url into repo_dir_name.
"""
- cmd = ['git', 'clone', '--quiet']
- subcmd = None
-
- cmd.extend([url, repo_dir_name])
+ cmd = 'git clone --quiet {url} {repo_dir_name}'.format(
+ url=url, repo_dir_name=repo_dir_name).split()
if verbosity >= VERBOSITY_VERBOSE:
printlog(' {0}'.format(' '.join(cmd)))
execute_subprocess(cmd)
- if subcmd is not None:
- os.chdir(repo_dir_name)
- execute_subprocess(subcmd)
@staticmethod
- def _git_remote_add(name, url):
+ def _git_remote_add(name, url, dirname):
"""Run the git remote command for the side effect of adding a remote
"""
- cmd = ['git', 'remote', 'add', name, url]
+ cmd = 'git -C {dirname} remote add {name} {url}'.format(
+ dirname=dirname, name=name, url=url).split()
execute_subprocess(cmd)
@staticmethod
- def _git_fetch(remote_name):
+ def _git_fetch(remote_name, dirname):
"""Run the git fetch command for the side effect of updating the repo
"""
- cmd = ['git', 'fetch', '--quiet', '--tags', remote_name]
+ cmd = 'git -C {dirname} fetch --quiet --tags {remote_name}'.format(
+ dirname=dirname, remote_name=remote_name).split()
execute_subprocess(cmd)
@staticmethod
- def _git_checkout_ref(ref, verbosity, submodules):
+ def _git_checkout_ref(ref, verbosity, submodules, dirname):
"""Run the git checkout command for the side effect of updating the repo
Param: ref is a reference to a local or remote object in the
form 'origin/my_feature', or 'tag1'.
"""
- cmd = ['git', 'checkout', '--quiet', ref]
+ cmd = 'git -C {dirname} checkout --quiet {ref}'.format(
+ dirname=dirname, ref=ref).split()
if verbosity >= VERBOSITY_VERBOSE:
printlog(' {0}'.format(' '.join(cmd)))
execute_subprocess(cmd)
if submodules:
- GitRepository._git_update_submodules(verbosity)
+ GitRepository._git_update_submodules(verbosity, dirname)
@staticmethod
- def _git_sparse_checkout(verbosity):
+ def _git_sparse_checkout(verbosity, dirname):
"""Configure repo via read-tree."""
- cmd = ['git', 'config', 'core.sparsecheckout', 'true']
+ cmd = 'git -C {dirname} config core.sparsecheckout true'.format(
+ dirname=dirname).split()
if verbosity >= VERBOSITY_VERBOSE:
printlog(' {0}'.format(' '.join(cmd)))
execute_subprocess(cmd)
- cmd = ['git', 'read-tree', '-mu', 'HEAD']
+ cmd = 'git -C {dirname} read-tree -mu HEAD'.format(
+ dirname=dirname).split()
if verbosity >= VERBOSITY_VERBOSE:
printlog(' {0}'.format(' '.join(cmd)))
execute_subprocess(cmd)
@staticmethod
- def _git_update_submodules(verbosity):
+ def _git_update_submodules(verbosity, dirname):
"""Run git submodule update for the side effect of updating this
repo's submodules.
"""
# First, verify that we have a .gitmodules file
- if os.path.exists(ExternalsDescription.GIT_SUBMODULES_FILENAME):
- cmd = ['git', 'submodule', 'update', '--init', '--recursive']
+ if os.path.exists(
+ os.path.join(dirname,
+ ExternalsDescription.GIT_SUBMODULES_FILENAME)):
+ cmd = ('git -C {dirname} submodule update --init --recursive'
+ .format(dirname=dirname)).split()
if verbosity >= VERBOSITY_VERBOSE:
printlog(' {0}'.format(' '.join(cmd)))
diff --git a/manage_externals/manic/repository_svn.py b/manage_externals/manic/repository_svn.py
index 408ed84676..922855d34e 100644
--- a/manage_externals/manic/repository_svn.py
+++ b/manage_externals/manic/repository_svn.py
@@ -43,10 +43,15 @@ def __init__(self, component_name, repo, ignore_ancestry=False):
"""
Repository.__init__(self, component_name, repo)
self._ignore_ancestry = ignore_ancestry
+ if self._url.endswith('/'):
+ # there is already a '/' separator in the URL; no need to add another
+ url_sep = ''
+ else:
+ url_sep = '/'
if self._branch:
- self._url = os.path.join(self._url, self._branch)
+ self._url = self._url + url_sep + self._branch
elif self._tag:
- self._url = os.path.join(self._url, self._tag)
+ self._url = self._url + url_sep + self._tag
else:
msg = "DEV_ERROR in svn repository. Shouldn't be here!"
fatal_error(msg)
diff --git a/manage_externals/manic/sourcetree.py b/manage_externals/manic/sourcetree.py
index b9c9c21082..cf2a5b7569 100644
--- a/manage_externals/manic/sourcetree.py
+++ b/manage_externals/manic/sourcetree.py
@@ -1,6 +1,6 @@
"""
-
-FIXME(bja, 2017-11) External and SourceTree have a circular dependancy!
+Classes to represent an externals config file (SourceTree) and the components
+within it (_External).
"""
import errno
@@ -19,62 +19,54 @@
class _External(object):
"""
- _External represents an external object inside a SourceTree
- """
+ A single component hosted in an external repository (and any children).
+ The component may or may not be checked-out upon construction.
+ """
# pylint: disable=R0902
- def __init__(self, root_dir, name, ext_description, svn_ignore_ancestry):
- """Parse an external description file into a dictionary of externals.
+ def __init__(self, root_dir, name, local_path, required, subexternals_path,
+ repo, svn_ignore_ancestry, subexternal_sourcetree):
+ """Create a single external component (checked out or not).
Input:
+ root_dir : string - the (checked-out) parent repo's root dir.
+ local_path : string - this external's (checked-out) subdir relative
+ to root_dir, e.g. "components/mom"
+ repo: Repository - the repo object for this external. Can be None (e.g. if this external just refers to another external file).
- root_dir : string - the root directory path where
- 'local_path' is relative to.
-
- name : string - name of the ext_description object. may or may not
- correspond to something in the path.
+ name : string - name of this external (as named by the parent
+ reference). May or may not correspond to something in the path.
ext_description : dict - source ExternalsDescription object
svn_ignore_ancestry : bool - use --ignore-externals with svn switch
+ subexternals_path: string - path to sub-externals config file, if any. Relative to local_path, or special value 'none'.
+ subexternal_sourcetree: SourceTree - corresponding to subexternals_path, if subexternals_path exists (it might not, if it is not checked out yet).
"""
self._name = name
- self._repo = None
- self._externals = EMPTY_STR
- self._externals_sourcetree = None
- self._stat = ExternalStatus()
- self._sparse = None
- # Parse the sub-elements
-
- # _path : local path relative to the containing source tree
- self._local_path = ext_description[ExternalsDescription.PATH]
- # _repo_dir : full repository directory
- repo_dir = os.path.join(root_dir, self._local_path)
+ self._required = required
+
+ self._stat = None # Populated in status()
+
+ self._local_path = local_path
+ # _repo_dir_path : full repository directory, e.g.
+ # "/components/mom"
+ repo_dir = os.path.join(root_dir, local_path)
self._repo_dir_path = os.path.abspath(repo_dir)
- # _base_dir : base directory *containing* the repository
+ # _base_dir_path : base directory *containing* the repository, e.g.
+ # "/components"
self._base_dir_path = os.path.dirname(self._repo_dir_path)
- # repo_dir_name : base_dir_path + repo_dir_name = rep_dir_path
+ # _repo_dir_name : base_dir_path + repo_dir_name = repo_dir_path
+ # e.g., "mom"
self._repo_dir_name = os.path.basename(self._repo_dir_path)
- assert(os.path.join(self._base_dir_path, self._repo_dir_name)
- == self._repo_dir_path)
+ self._repo = repo
- self._required = ext_description[ExternalsDescription.REQUIRED]
- self._externals = ext_description[ExternalsDescription.EXTERNALS]
- # Treat a .gitmodules file as a backup externals config
- if not self._externals:
- if GitRepository.has_submodules(self._repo_dir_path):
- self._externals = ExternalsDescription.GIT_SUBMODULES_FILENAME
-
- repo = create_repository(
- name, ext_description[ExternalsDescription.REPO],
- svn_ignore_ancestry=svn_ignore_ancestry)
- if repo:
- self._repo = repo
-
- if self._externals and (self._externals.lower() != 'none'):
- self._create_externals_sourcetree()
+ # Does this component have subcomponents aka an externals config?
+ self._subexternals_path = subexternals_path
+ self._subexternal_sourcetree = subexternal_sourcetree
+
def get_name(self):
"""
@@ -88,81 +80,97 @@ def get_local_path(self):
"""
return self._local_path
- def status(self):
- """
- If the repo destination directory exists, ensure it is correct (from
- correct URL, correct branch or tag), and possibly update the external.
- If the repo destination directory does not exist, checkout the correce
- branch or tag.
- If load_all is True, also load all of the the externals sub-externals.
+ def get_repo_dir_path(self):
+ return self._repo_dir_path
+
+ def get_subexternals_path(self):
+ return self._subexternals_path
+
+ def get_repo(self):
+ return self._repo
+
+ def status(self, force=False, print_progress=False):
"""
+ Returns status of this component and all subcomponents.
- self._stat.path = self.get_local_path()
- if not self._required:
- self._stat.source_type = ExternalStatus.OPTIONAL
- elif self._local_path == LOCAL_PATH_INDICATOR:
- # LOCAL_PATH_INDICATOR, '.' paths, are standalone
- # component directories that are not managed by
- # checkout_externals.
- self._stat.source_type = ExternalStatus.STANDALONE
- else:
- # managed by checkout_externals
- self._stat.source_type = ExternalStatus.MANAGED
+ Returns a dict mapping our local path (not component name!) to an
+ ExternalStatus dict. Any subcomponents will have their own top-level
+ path keys. Note the return value includes entries for this and all
+ subcomponents regardless of whether they are locally installed or not.
- ext_stats = {}
+ Side-effect: If self._stat is empty or force is True, calculates _stat.
+ """
+ calc_stat = force or not self._stat
+
+ if calc_stat:
+ self._stat = ExternalStatus()
+ self._stat.path = self.get_local_path()
+ if not self._required:
+ self._stat.source_type = ExternalStatus.OPTIONAL
+ elif self._local_path == LOCAL_PATH_INDICATOR:
+ # LOCAL_PATH_INDICATOR, '.' paths, are standalone
+ # component directories that are not managed by
+ # checkout_subexternals.
+ self._stat.source_type = ExternalStatus.STANDALONE
+ else:
+ # managed by checkout_subexternals
+ self._stat.source_type = ExternalStatus.MANAGED
+ subcomponent_stats = {}
if not os.path.exists(self._repo_dir_path):
- self._stat.sync_state = ExternalStatus.EMPTY
- msg = ('status check: repository directory for "{0}" does not '
- 'exist.'.format(self._name))
- logging.info(msg)
- self._stat.current_version = 'not checked out'
- # NOTE(bja, 2018-01) directory doesn't exist, so we cannot
- # use repo to determine the expected version. We just take
- # a best-guess based on the assumption that only tag or
- # branch should be set, but not both.
- if not self._repo:
- self._stat.expected_version = 'unknown'
- else:
- self._stat.expected_version = self._repo.tag() + self._repo.branch()
+ if calc_stat:
+ # No local repository.
+ self._stat.sync_state = ExternalStatus.EMPTY
+ msg = ('status check: repository directory for "{0}" does not '
+ 'exist.'.format(self._name))
+ logging.info(msg)
+ self._stat.current_version = 'not checked out'
+ # NOTE(bja, 2018-01) directory doesn't exist, so we cannot
+ # use repo to determine the expected version. We just take
+ # a best-guess based on the assumption that only tag or
+ # branch should be set, but not both.
+ if not self._repo:
+ self._stat.expected_version = 'unknown'
+ else:
+ self._stat.expected_version = self._repo.tag() + self._repo.branch()
else:
- if self._repo:
+ # Merge local repository state (e.g. clean/dirty) into self._stat.
+ if calc_stat and self._repo:
self._repo.status(self._stat, self._repo_dir_path)
- if self._externals and self._externals_sourcetree:
- # we expect externals and they exist
+ # Status of subcomponents, if any.
+ if self._subexternals_path and self._subexternal_sourcetree:
cwd = os.getcwd()
- # SourceTree expects to be called from the correct
+ # SourceTree.status() expects to be called from the correct
# root directory.
os.chdir(self._repo_dir_path)
- ext_stats = self._externals_sourcetree.status(self._local_path)
+ subcomponent_stats = self._subexternal_sourcetree.status(self._local_path, force=force, print_progress=print_progress)
os.chdir(cwd)
+ # Merge our status + subcomponent statuses into one return dict keyed
+ # by component path.
all_stats = {}
# don't add the root component because we don't manage it
# and can't provide useful info about it.
if self._local_path != LOCAL_PATH_INDICATOR:
- # store the stats under tha local_path, not comp name so
+ # store the stats under the local_path, not comp name so
# it will be sorted correctly
all_stats[self._stat.path] = self._stat
- if ext_stats:
- all_stats.update(ext_stats)
+ if subcomponent_stats:
+ all_stats.update(subcomponent_stats)
return all_stats
- def checkout(self, verbosity, load_all):
+ def checkout(self, verbosity):
"""
If the repo destination directory exists, ensure it is correct (from
- correct URL, correct branch or tag), and possibly update the external.
+ correct URL, correct branch or tag), and possibly updateit.
If the repo destination directory does not exist, checkout the correct
branch or tag.
- If load_all is True, also load all of the the externals sub-externals.
+ Does not check out sub-externals, see SourceTree.checkout().
"""
- if load_all:
- pass
# Make sure we are in correct location
-
if not os.path.exists(self._repo_dir_path):
# repository directory doesn't exist. Need to check it
# out, and for that we need the base_dir_path to exist
@@ -174,6 +182,10 @@ def checkout(self, verbosity, load_all):
self._base_dir_path)
fatal_error(msg)
+ if not self._stat:
+ self.status()
+ assert self._stat
+
if self._stat.source_type != ExternalStatus.STANDALONE:
if verbosity >= VERBOSITY_VERBOSE:
# NOTE(bja, 2018-01) probably do not want to pass
@@ -194,120 +206,147 @@ def checkout(self, verbosity, load_all):
self._repo.checkout(self._base_dir_path, self._repo_dir_name,
checkout_verbosity, self.clone_recursive())
- def checkout_externals(self, verbosity, load_all):
- """Checkout the sub-externals for this object
- """
- if self.load_externals():
- if self._externals_sourcetree:
- # NOTE(bja, 2018-02): the subtree externals objects
- # were created during initial status check. Updating
- # the external may have changed which sub-externals
- # are needed. We need to delete those objects and
- # re-read the potentially modified externals
- # description file.
- self._externals_sourcetree = None
- self._create_externals_sourcetree()
- self._externals_sourcetree.checkout(verbosity, load_all)
-
- def load_externals(self):
- 'Return True iff an externals file should be loaded'
- load_ex = False
- if os.path.exists(self._repo_dir_path):
- if self._externals:
- if self._externals.lower() != 'none':
- load_ex = os.path.exists(os.path.join(self._repo_dir_path,
- self._externals))
-
- return load_ex
+ def replace_subexternal_sourcetree(self, sourcetree):
+ self._subexternal_sourcetree = sourcetree
def clone_recursive(self):
'Return True iff any .gitmodules files should be processed'
- # Try recursive unless there is an externals entry
- recursive = not self._externals
+ # Try recursive .gitmodules unless there is an externals entry
+ recursive = not self._subexternals_path
return recursive
- def _create_externals_sourcetree(self):
- """
+
+class SourceTree(object):
+ """
+ SourceTree represents a group of managed externals.
+
+ Those externals may not be checked out locally yet, they might only
+ have Repository objects pointing to their respective repositories.
+ """
+
+ @classmethod
+ def from_externals_file(cls, parent_repo_dir_path, parent_repo,
+ externals_path):
+ """Creates a SourceTree representing the given externals file.
+
+ Looks up a git submodules file as an optional backup if there is no
+ externals file specified.
+
+ Returns None if there is no externals file (i.e. it's None or 'none'),
+ or if the externals file hasn't been checked out yet.
+
+ parent_repo_dir_path: parent repo root dir
+ parent_repo: parent repo.
+ externals_path: path to externals file, relative to parent_repo_dir_path.
"""
- if not os.path.exists(self._repo_dir_path):
+ if not os.path.exists(parent_repo_dir_path):
# NOTE(bja, 2017-10) repository has not been checked out
# yet, can't process the externals file. Assume we are
# checking status before code is checkoud out and this
# will be handled correctly later.
- return
+ return None
- cwd = os.getcwd()
- os.chdir(self._repo_dir_path)
- if self._externals.lower() == 'none':
- msg = ('Internal: Attempt to create source tree for '
- 'externals = none in {}'.format(self._repo_dir_path))
- fatal_error(msg)
+ if externals_path.lower() == 'none':
+ # With explicit 'none', do not look for git submodules file.
+ return None
- if not os.path.exists(self._externals):
- if GitRepository.has_submodules():
- self._externals = ExternalsDescription.GIT_SUBMODULES_FILENAME
+ cwd = os.getcwd()
+ os.chdir(parent_repo_dir_path)
+
+ if not externals_path:
+ if GitRepository.has_submodules(parent_repo_dir_path):
+ externals_path = ExternalsDescription.GIT_SUBMODULES_FILENAME
+ else:
+ return None
- if not os.path.exists(self._externals):
- # NOTE(bja, 2017-10) this check is redundent with the one
+ if not os.path.exists(externals_path):
+ # NOTE(bja, 2017-10) this check is redundant with the one
# in read_externals_description_file!
- msg = ('External externals description file "{0}" '
+ msg = ('Externals description file "{0}" '
'does not exist! In directory: {1}'.format(
- self._externals, self._repo_dir_path))
+ externals_path, parent_repo_dir_path))
fatal_error(msg)
- externals_root = self._repo_dir_path
+ externals_root = parent_repo_dir_path
+ # model_data is a dict-like object which mirrors the file format.
model_data = read_externals_description_file(externals_root,
- self._externals)
- externals = create_externals_description(model_data,
- parent_repo=self._repo)
- self._externals_sourcetree = SourceTree(externals_root, externals)
+ externals_path)
+ # ext_description is another dict-like object (see ExternalsDescription)
+ ext_description = create_externals_description(model_data,
+ parent_repo=parent_repo)
+ externals_sourcetree = SourceTree(externals_root, ext_description)
os.chdir(cwd)
-
-class SourceTree(object):
- """
- SourceTree represents a group of managed externals
- """
-
- def __init__(self, root_dir, model, svn_ignore_ancestry=False):
+ return externals_sourcetree
+
+ def __init__(self, root_dir, ext_description, svn_ignore_ancestry=False):
"""
- Build a SourceTree object from a model description
+ Build a SourceTree object from an ExternalDescription.
+
+ root_dir: the (checked-out) parent repo root dir.
"""
self._root_dir = os.path.abspath(root_dir)
- self._all_components = {}
+ self._all_components = {} # component_name -> _External
self._required_compnames = []
- for comp in model:
- src = _External(self._root_dir, comp, model[comp], svn_ignore_ancestry)
+ for comp, desc in ext_description.items():
+ local_path = desc[ExternalsDescription.PATH]
+ required = desc[ExternalsDescription.REQUIRED]
+ repo_info = desc[ExternalsDescription.REPO]
+ subexternals_path = desc[ExternalsDescription.EXTERNALS]
+
+ repo = create_repository(comp,
+ repo_info,
+ svn_ignore_ancestry=svn_ignore_ancestry)
+
+ sourcetree = None
+ # Treat a .gitmodules file as a backup externals config
+ if not subexternals_path:
+ parent_repo_dir_path = os.path.abspath(os.path.join(root_dir,
+ local_path))
+ if GitRepository.has_submodules(parent_repo_dir_path):
+ subexternals_path = ExternalsDescription.GIT_SUBMODULES_FILENAME
+
+ # Might return None (if the subexternal isn't checked out yet, or subexternal is None or 'none')
+ subexternal_sourcetree = SourceTree.from_externals_file(
+ os.path.join(self._root_dir, local_path),
+ repo,
+ subexternals_path)
+ src = _External(self._root_dir, comp, local_path, required,
+ subexternals_path, repo, svn_ignore_ancestry,
+ subexternal_sourcetree)
+
self._all_components[comp] = src
- if model[comp][ExternalsDescription.REQUIRED]:
+ if required:
self._required_compnames.append(comp)
- def status(self, relative_path_base=LOCAL_PATH_INDICATOR):
- """Report the status components
-
- FIXME(bja, 2017-10) what do we do about situations where the
- user checked out the optional components, but didn't add
- optional for running status? What do we do where the user
- didn't add optional to the checkout but did add it to the
- status. -- For now, we run status on all components, and try
- to do the right thing based on the results....
-
- """
+ def status(self, relative_path_base=LOCAL_PATH_INDICATOR,
+ force=False, print_progress=False):
+ """Return a dictionary of local path->ExternalStatus.
+
+ Notes about the returned dictionary:
+ * It is keyed by local path (e.g. 'components/mom'), not by
+ component name (e.g. 'mom').
+ * It contains top-level keys for all traversed components, whether
+ discovered by recursion or top-level.
+ * It contains entries for all components regardless of whether they
+ are locally installed or not, or required or optional.
+x """
load_comps = self._all_components.keys()
- summary = {}
+ summary = {} # Holds merged statuses from all components.
for comp in load_comps:
- printlog('{0}, '.format(comp), end='')
- stat = self._all_components[comp].status()
+ if print_progress:
+ printlog('{0}, '.format(comp), end='')
+ stat = self._all_components[comp].status(force=force,
+ print_progress=print_progress)
+
+ # Returned status dictionary is keyed by local path; prepend
+ # relative_path_base if not already there.
stat_final = {}
for name in stat.keys():
- # check if we need to append the relative_path_base to
- # the path so it will be sorted in the correct order.
if stat[name].path.startswith(relative_path_base):
- # use as is, without any changes to path
stat_final[name] = stat[name]
else:
- # append relative_path_base to path and store under key = updated path
modified_path = os.path.join(relative_path_base,
stat[name].path)
stat_final[modified_path] = stat[name]
@@ -316,38 +355,71 @@ def status(self, relative_path_base=LOCAL_PATH_INDICATOR):
return summary
+ def _find_installed_optional_components(self):
+ """Returns a list of installed optional component names, if any."""
+ installed_comps = []
+ for comp_name, ext in self._all_components.items():
+ if comp_name in self._required_compnames:
+ continue
+ # Note that in practice we expect this status to be cached.
+ path_to_stat = ext.status()
+
+ # If any part of this component exists locally, consider it
+ # installed and therefore eligible for updating.
+ if any(s.sync_state != ExternalStatus.EMPTY
+ for s in path_to_stat.values()):
+ installed_comps.append(comp_name)
+ return installed_comps
+
def checkout(self, verbosity, load_all, load_comp=None):
"""
- Checkout or update indicated components into the the configured
- subdirs.
+ Checkout or update indicated components into the configured subdirs.
- If load_all is True, recursively checkout all externals.
- If load_all is False, load_comp is an optional set of components to load.
- If load_all is True and load_comp is None, only load the required externals.
+ If load_all is True, checkout all externals (required + optional), recursively.
+ If load_all is False and load_comp is set, checkout load_comp (and any required subexternals, plus any optional subexternals that are already checked out, recursively)
+ If load_all is False and load_comp is None, checkout all required externals, plus any optionals that are already checked out, recursively.
"""
+ if load_all:
+ tmp_comps = self._all_components.keys()
+ elif load_comp is not None:
+ tmp_comps = [load_comp]
+ else:
+ local_optional_compnames = self._find_installed_optional_components()
+ tmp_comps = self._required_compnames + local_optional_compnames
+ if local_optional_compnames:
+ printlog('Found locally installed optional components: ' +
+ ', '.join(local_optional_compnames))
+ bad_compnames = set(local_optional_compnames) - set(self._all_components.keys())
+ if bad_compnames:
+ printlog('Internal error: found locally installed components that are not in the global list of all components: ' + ','.join(bad_compnames))
+
if verbosity >= VERBOSITY_VERBOSE:
printlog('Checking out externals: ')
else:
printlog('Checking out externals: ', end='')
- if load_all:
- load_comps = self._all_components.keys()
- elif load_comp is not None:
- load_comps = [load_comp]
- else:
- load_comps = self._required_compnames
+ # Sort by path so that if paths are nested the
+ # parent repo is checked out first.
+ load_comps = sorted(tmp_comps, key=lambda comp: self._all_components[comp].get_local_path())
- # checkout the primary externals
- for comp in load_comps:
+ # checkout.
+ for comp_name in load_comps:
if verbosity < VERBOSITY_VERBOSE:
- printlog('{0}, '.format(comp), end='')
+ printlog('{0}, '.format(comp_name), end='')
else:
# verbose output handled by the _External object, just
# output a newline
printlog(EMPTY_STR)
- self._all_components[comp].checkout(verbosity, load_all)
+ c = self._all_components[comp_name]
+ # Does not recurse.
+ c.checkout(verbosity)
+ # Recursively check out subexternals, if any. Returns None
+ # if there's no subexternals path.
+ component_subexternal_sourcetree = SourceTree.from_externals_file(
+ c.get_repo_dir_path(),
+ c.get_repo(),
+ c.get_subexternals_path())
+ c.replace_subexternal_sourcetree(component_subexternal_sourcetree)
+ if component_subexternal_sourcetree:
+ component_subexternal_sourcetree.checkout(verbosity, load_all)
printlog('')
-
- # now give each external an opportunitity to checkout it's externals.
- for comp in load_comps:
- self._all_components[comp].checkout_externals(verbosity, load_all)
diff --git a/manage_externals/manic/utils.py b/manage_externals/manic/utils.py
index f57f43930c..9c63ffe65e 100644
--- a/manage_externals/manic/utils.py
+++ b/manage_externals/manic/utils.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""
Common public utilities for manic package
diff --git a/manage_externals/test/README.md b/manage_externals/test/README.md
index 938a900eec..1e8f2eaa77 100644
--- a/manage_externals/test/README.md
+++ b/manage_externals/test/README.md
@@ -1,45 +1,25 @@
# Testing for checkout_externals
-NOTE: Python2 is the supported runtime environment. Python3 compatibility is
-in progress, complicated by the different proposed input methods
-(yaml, xml, cfg/ini, json) and their different handling of strings
-(unicode vs byte) in python2. Full python3 compatibility will be
-possible once the number of possible input formats has been narrowed.
-
-## Setup development environment
-
-Development environments should be setup for python2 and python3:
+## Unit tests
```SH
cd checkout_externals/test
- make python=python2 env
- make python=python3 env
+ make utest
```
-## Unit tests
-
-Tests should be run for both python2 and python3. It is recommended
-that you have seperate terminal windows open python2 and python3
-testing to avoid errors activating and deactivating environments.
+## System tests
```SH
cd checkout_externals/test
- . env_python2/bin/activate
- make utest
- deactivate
+ make stest
```
+Example to run a single test:
```SH
- cd checkout_externals/test
- . env_python2/bin/activate
- make utest
- deactivate
+ cd checkout_externals
+ python -m unittest test.test_sys_checkout.TestSysCheckout.test_container_simple_required
```
-## System tests
-
-Not yet implemented.
-
## Static analysis
checkout_externals is difficult to test thoroughly because it relies
@@ -51,9 +31,7 @@ regularly for automatic code formatting and linting.
```SH
cd checkout_externals/test
- . env_python2/bin/activate
make lint
- deactivate
```
The canonical formatting for the code is whatever autopep8
@@ -68,10 +46,8 @@ coverage, run the code coverage tool:
```SH
cd checkout_externals/test
- . env_python2/bin/activate
make coverage
open -a Firefox.app htmlcov/index.html
- deactivate
```
diff --git a/manage_externals/test/repos/README.md b/manage_externals/test/repos/README.md
new file mode 100644
index 0000000000..8a3502c35f
--- /dev/null
+++ b/manage_externals/test/repos/README.md
@@ -0,0 +1,33 @@
+Git repositories for testing git-related behavior. For usage and terminology notes, see test/test_sys_checkout.py.
+
+To list files and view file contents at HEAD:
+```
+cd
+git ls-tree --full-tree -r --name-only HEAD
+git cat-file -p HEAD:
+```
+
+File contents at a glance:
+```
+container.git/
+ readme.txt
+
+simple-ext.git/
+ (has branches: feature2, feature3)
+ (has tags: tag1, tag2)
+ readme.txt
+ simple_subdir/subdir_file.txt
+
+simple-ext-fork.git/
+ (has tags: abandoned-feature, forked-feature-v1, tag1)
+ (has branch: feature2)
+ readme.txt
+
+mixed-cont-ext.git/
+ (has branch: new-feature)
+ readme.txt
+ sub-externals.cfg ('simp_branch' section refers to 'feature2' branch in simple-ext.git/ repo)
+
+error/
+ (no git repo here, just a readme.txt in the clear)
+```
diff --git a/manage_externals/test/test_sys_checkout.py b/manage_externals/test/test_sys_checkout.py
index df726f2b70..ab4f77e88f 100644
--- a/manage_externals/test/test_sys_checkout.py
+++ b/manage_externals/test/test_sys_checkout.py
@@ -1,7 +1,15 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Unit test driver for checkout_externals
+Terminology:
+ * 'container': a repo that has externals
+ * 'simple': a repo that has no externals, but is referenced as an external by another repo.
+ * 'mixed': a repo that both has externals and is referenced as an external by another repo.
+
+ * 'clean': the local repo matches the version in the externals and has no local modifications.
+ * 'empty': the external isn't checked out at all.
+
Note: this script assume the path to the manic and
checkout_externals module is already in the python path. This is
usually handled by the makefile. If you call it directly, you may need
@@ -21,7 +29,6 @@
* Erase any existing repos at the begining of the module in
setUpModule.
-
"""
# NOTE(bja, 2017-11) pylint complains that the module is too big, but
@@ -66,24 +73,51 @@
#
# ---------------------------------------------------------------------
-# environment variable names
-MANIC_TEST_BARE_REPO_ROOT = 'MANIC_TEST_BARE_REPO_ROOT'
-MANIC_TEST_TMP_REPO_ROOT = 'MANIC_TEST_TMP_REPO_ROOT'
-# directory names
-TMP_REPO_DIR_NAME = 'tmp'
+# Module-wide root directory for all the per-test subdirs we'll create on
+# the fly (which are placed under wherever $CWD is when the test runs).
+# Set by setupModule().
+module_tmp_root_dir = None
+TMP_REPO_DIR_NAME = 'tmp' # subdir under $CWD
+
+# subdir under test/ that holds all of our checked-in repositories (which we
+# will clone for these tests).
BARE_REPO_ROOT_NAME = 'repos'
-CONTAINER_REPO_NAME = 'container.git'
-MIXED_REPO_NAME = 'mixed-cont-ext.git'
-SIMPLE_REPO_NAME = 'simple-ext.git'
-SIMPLE_FORK_NAME = 'simple-ext-fork.git'
+
+# Environment var referenced by checked-in externals file in mixed-cont-ext.git,
+# which should be pointed to the fully-resolved BARE_REPO_ROOT_NAME directory.
+# We explicitly clear this after every test, via tearDown().
+MIXED_CONT_EXT_ROOT_ENV_VAR = 'MANIC_TEST_BARE_REPO_ROOT'
+
+# Subdirs under bare repo root, each holding a repository. For more info
+# on the contents of these repositories, see test/repos/README.md. In these
+# tests the 'parent' repos are cloned as a starting point, whereas the 'child'
+# repos are checked out when the tests run checkout_externals.
+CONTAINER_REPO = 'container.git' # Parent repo
+SIMPLE_REPO = 'simple-ext.git' # Child repo
+SIMPLE_FORK_REPO = 'simple-ext-fork.git' # Child repo
+MIXED_REPO = 'mixed-cont-ext.git' # Both parent and child
+
+# Standard (arbitrary) external names for test configs
+TAG_SECTION = 'simp_tag'
+BRANCH_SECTION = 'simp_branch'
+HASH_SECTION = 'simp_hash'
+
+# All the configs we construct check out their externals into these local paths.
+EXTERNALS_PATH = 'externals'
+SUB_EXTERNALS_PATH = 'src' # For mixed test repos,
+
+# For testing behavior with '.' instead of an explicit paths.
SIMPLE_LOCAL_ONLY_NAME = '.'
-ERROR_REPO_NAME = 'error'
-EXTERNALS_NAME = 'externals'
-SUB_EXTERNALS_PATH = 'src'
-CFG_NAME = 'externals.cfg'
-CFG_SUB_NAME = 'sub-externals.cfg'
-README_NAME = 'readme.txt'
+
+# Externals files.
+CFG_NAME = 'externals.cfg' # We construct this on a per-test basis.
+CFG_SUB_NAME = 'sub-externals.cfg' # Already exists in mixed-cont-ext repo.
+
+# Arbitrary text file in all the test repos.
+README_NAME = 'readme.txt'
+
+# Branch that exists in both the simple and simple-fork repos.
REMOTE_BRANCH_FEATURE2 = 'feature2'
SVN_TEST_REPO = 'https://github.com/escomp/cesm'
@@ -107,136 +141,113 @@ def setUpModule(): # pylint: disable=C0103
pass
# create clean dir for this run
os.mkdir(repo_root)
- # set into the environment so var will be expanded in externals
- # filess when executables are run
- os.environ[MANIC_TEST_TMP_REPO_ROOT] = repo_root
-
-
-class GenerateExternalsDescriptionCfgV1(object):
- """Class to provide building blocks to create
- ExternalsDescriptionCfgV1 files.
-
- Includes predefined files used in tests.
- """
+ # Make available to all tests in this file.
+ global module_tmp_root_dir
+ assert module_tmp_root_dir == None, module_tmp_root_dir
+ module_tmp_root_dir = repo_root
- def __init__(self):
- self._schema_version = '1.1.0'
- self._config = None
-
- def container_full(self, dest_dir):
- """Create the full container config file with simple and mixed use
- externals
-
- """
- self.create_config()
- self.create_section(SIMPLE_REPO_NAME, 'simp_tag',
- tag='tag1')
-
- self.create_section(SIMPLE_REPO_NAME, 'simp_branch',
- branch=REMOTE_BRANCH_FEATURE2)
-
- self.create_section(SIMPLE_REPO_NAME, 'simp_opt',
- tag='tag1', required=False)
-
- self.create_section(MIXED_REPO_NAME, 'mixed_req',
- branch='master', externals=CFG_SUB_NAME)
-
- self.write_config(dest_dir)
-
- def container_simple_required(self, dest_dir):
- """Create a container externals file with only simple externals.
-
- """
- self.create_config()
- self.create_section(SIMPLE_REPO_NAME, 'simp_tag',
- tag='tag1')
-
- self.create_section(SIMPLE_REPO_NAME, 'simp_branch',
- branch=REMOTE_BRANCH_FEATURE2)
-
- self.create_section(SIMPLE_REPO_NAME, 'simp_hash',
- ref_hash='60b1cc1a38d63')
-
- self.write_config(dest_dir)
-
- def container_simple_optional(self, dest_dir):
- """Create a container externals file with optional simple externals
+class RepoUtils(object):
+ """Convenience methods for interacting with git repos."""
+ @staticmethod
+ def create_branch(repo_base_dir, external_name, branch, with_commit=False):
+ """Create branch and optionally (with_commit) add a single commit.
"""
- self.create_config()
- self.create_section(SIMPLE_REPO_NAME, 'simp_req',
- tag='tag1')
-
- self.create_section(SIMPLE_REPO_NAME, 'simp_opt',
- tag='tag1', required=False)
-
- self.write_config(dest_dir)
-
- def container_simple_svn(self, dest_dir):
- """Create a container externals file with only simple externals.
+ # pylint: disable=R0913
+ cwd = os.getcwd()
+ repo_root = os.path.join(repo_base_dir, EXTERNALS_PATH, external_name)
+ os.chdir(repo_root)
+ cmd = ['git', 'checkout', '-b', branch, ]
+ execute_subprocess(cmd)
+ if with_commit:
+ msg = 'start work on {0}'.format(branch)
+ with open(README_NAME, 'a') as handle:
+ handle.write(msg)
+ cmd = ['git', 'add', README_NAME, ]
+ execute_subprocess(cmd)
+ cmd = ['git', 'commit', '-m', msg, ]
+ execute_subprocess(cmd)
+ os.chdir(cwd)
+ @staticmethod
+ def create_commit(repo_base_dir, external_name):
+ """Make a commit to the given external.
+
+ This is used to test sync state changes from local commits on
+ detached heads and tracking branches.
"""
- self.create_config()
- self.create_section(SIMPLE_REPO_NAME, 'simp_tag', tag='tag1')
-
- self.create_svn_external('svn_branch', branch='trunk')
- self.create_svn_external('svn_tag', tag='tags/cesm2.0.beta07')
+ cwd = os.getcwd()
+ repo_root = os.path.join(repo_base_dir, EXTERNALS_PATH, external_name)
+ os.chdir(repo_root)
- self.write_config(dest_dir)
+ msg = 'work on great new feature!'
+ with open(README_NAME, 'a') as handle:
+ handle.write(msg)
+ cmd = ['git', 'add', README_NAME, ]
+ execute_subprocess(cmd)
+ cmd = ['git', 'commit', '-m', msg, ]
+ execute_subprocess(cmd)
+ os.chdir(cwd)
- def container_sparse(self, dest_dir):
- """Create a container with a full external and a sparse external
+ @staticmethod
+ def clone_test_repo(bare_root, test_id, parent_repo_name, dest_dir_in):
+ """Clone repo at / into dest_dir_in or local per-test-subdir.
+ Returns output dir.
"""
- # Create a file for a sparse pattern match
- sparse_filename = 'sparse_checkout'
- with open(os.path.join(dest_dir, sparse_filename), 'w') as sfile:
- sfile.write('readme.txt')
-
- self.create_config()
- self.create_section(SIMPLE_REPO_NAME, 'simp_tag',
- tag='tag2')
-
- sparse_relpath = '../../{}'.format(sparse_filename)
- self.create_section(SIMPLE_REPO_NAME, 'simp_sparse',
- tag='tag2', sparse=sparse_relpath)
+ parent_repo_dir = os.path.join(bare_root, parent_repo_name)
+ if dest_dir_in is None:
+ # create unique subdir for this test
+ test_dir_name = test_id
+ print("Test repository name: {0}".format(test_dir_name))
+ dest_dir = os.path.join(module_tmp_root_dir, test_dir_name)
+ else:
+ dest_dir = dest_dir_in
- self.write_config(dest_dir)
+ # pylint: disable=W0212
+ GitRepository._git_clone(parent_repo_dir, dest_dir, VERBOSITY_DEFAULT)
+ return dest_dir
- def mixed_simple_base(self, dest_dir):
- """Create a mixed-use base externals file with only simple externals.
+ @staticmethod
+ def add_file_to_repo(under_test_dir, filename, tracked):
+ """Add a file to the repository so we can put it into a dirty state
"""
- self.create_config()
- self.create_section_ext_only('mixed_base')
- self.create_section(SIMPLE_REPO_NAME, 'simp_tag',
- tag='tag1')
-
- self.create_section(SIMPLE_REPO_NAME, 'simp_branch',
- branch=REMOTE_BRANCH_FEATURE2)
+ cwd = os.getcwd()
+ os.chdir(under_test_dir)
+ with open(filename, 'w') as tmp:
+ tmp.write('Hello, world!')
- self.create_section(SIMPLE_REPO_NAME, 'simp_hash',
- ref_hash='60b1cc1a38d63')
+ if tracked:
+ # NOTE(bja, 2018-01) brittle hack to obtain repo dir and
+ # file name
+ path_data = filename.split('/')
+ repo_dir = os.path.join(path_data[0], path_data[1])
+ os.chdir(repo_dir)
+ tracked_file = path_data[2]
+ cmd = ['git', 'add', tracked_file]
+ execute_subprocess(cmd)
- self.write_config(dest_dir)
+ os.chdir(cwd)
- def mixed_simple_sub(self, dest_dir):
- """Create a mixed-use sub externals file with only simple externals.
+class GenerateExternalsDescriptionCfgV1(object):
+ """Building blocks to create ExternalsDescriptionCfgV1 files.
- """
- self.create_config()
- self.create_section(SIMPLE_REPO_NAME, 'simp_tag',
- tag='tag1', path=SUB_EXTERNALS_PATH)
+ Basic usage: create_config() multiple create_*(), then write_config().
+ Optionally after that: write_with_*().
+ """
- self.create_section(SIMPLE_REPO_NAME, 'simp_branch',
- branch=REMOTE_BRANCH_FEATURE2,
- path=SUB_EXTERNALS_PATH)
+ def __init__(self, bare_root):
+ self._schema_version = '1.1.0'
+ self._config = None
- self.write_config(dest_dir, filename=CFG_SUB_NAME)
+ # directory where we have test repositories (which we will clone for
+ # tests)
+ self._bare_root = bare_root
def write_config(self, dest_dir, filename=CFG_NAME):
- """Write the configuration file to disk
+ """Write self._config to disk
"""
dest_path = os.path.join(dest_dir, filename)
@@ -258,27 +269,39 @@ def create_metadata(self):
self._config.set(DESCRIPTION_SECTION, VERSION_ITEM,
self._schema_version)
- def create_section(self, repo_type, name, tag='', branch='',
- ref_hash='', required=True, path=EXTERNALS_NAME,
- externals='', repo_path=None, from_submodule=False,
- sparse=''):
+ def url_for_repo_path(self, repo_path, repo_path_abs=None):
+ if repo_path_abs is not None:
+ return repo_path_abs
+ else:
+ return os.path.join(self._bare_root, repo_path)
+
+ def create_section(self, repo_path, name, tag='', branch='',
+ ref_hash='', required=True, path=EXTERNALS_PATH,
+ sub_externals='', repo_path_abs=None, from_submodule=False,
+ sparse='', nested=False):
# pylint: disable=too-many-branches
- """Create a config section with autofilling some items and handling
- optional items.
+ """Create a config ExternalsDescription section with the given name.
+ Autofills some items and handles some optional items.
+
+ repo_path_abs overrides repo_path (which is relative to the bare repo)
+ path is a subdir under repo_path to check out to.
"""
# pylint: disable=R0913
self._config.add_section(name)
if not from_submodule:
- self._config.set(name, ExternalsDescription.PATH,
- os.path.join(path, name))
+ if nested:
+ self._config.set(name, ExternalsDescription.PATH, path)
+ else:
+ self._config.set(name, ExternalsDescription.PATH,
+ os.path.join(path, name))
self._config.set(name, ExternalsDescription.PROTOCOL,
ExternalsDescription.PROTOCOL_GIT)
# from_submodules is incompatible with some other options, turn them off
if (from_submodule and
- ((repo_path is not None) or tag or ref_hash or branch)):
+ ((repo_path_abs is not None) or tag or ref_hash or branch)):
printlog('create_section: "from_submodule" is incompatible with '
'"repo_url", "tag", "hash", and "branch" options;\n'
'Ignoring those options for {}'.format(name))
@@ -287,10 +310,7 @@ def create_section(self, repo_type, name, tag='', branch='',
ref_hash = ''
branch = ''
- if repo_path is not None:
- repo_url = repo_path
- else:
- repo_url = os.path.join('${MANIC_TEST_BARE_REPO_ROOT}', repo_type)
+ repo_url = self.url_for_repo_path(repo_path, repo_path_abs)
if not from_submodule:
self._config.set(name, ExternalsDescription.REPO_URL, repo_url)
@@ -306,8 +326,9 @@ def create_section(self, repo_type, name, tag='', branch='',
if ref_hash:
self._config.set(name, ExternalsDescription.HASH, ref_hash)
- if externals:
- self._config.set(name, ExternalsDescription.EXTERNALS, externals)
+ if sub_externals:
+ self._config.set(name, ExternalsDescription.EXTERNALS,
+ sub_externals)
if sparse:
self._config.set(name, ExternalsDescription.SPARSE, sparse)
@@ -315,10 +336,8 @@ def create_section(self, repo_type, name, tag='', branch='',
if from_submodule:
self._config.set(name, ExternalsDescription.SUBMODULE, "True")
- def create_section_ext_only(self, name,
- required=True, externals=CFG_SUB_NAME):
- """Create a config section with autofilling some items and handling
- optional items.
+ def create_section_reference_to_subexternal(self, name):
+ """Just a reference to another externals file.
"""
# pylint: disable=R0913
@@ -331,10 +350,9 @@ def create_section_ext_only(self, name,
self._config.set(name, ExternalsDescription.REPO_URL,
LOCAL_PATH_INDICATOR)
- self._config.set(name, ExternalsDescription.REQUIRED, str(required))
+ self._config.set(name, ExternalsDescription.REQUIRED, str(True))
- if externals:
- self._config.set(name, ExternalsDescription.EXTERNALS, externals)
+ self._config.set(name, ExternalsDescription.EXTERNALS, CFG_SUB_NAME)
def create_svn_external(self, name, tag='', branch=''):
"""Create a config section for an svn repository.
@@ -342,7 +360,7 @@ def create_svn_external(self, name, tag='', branch=''):
"""
self._config.add_section(name)
self._config.set(name, ExternalsDescription.PATH,
- os.path.join(EXTERNALS_NAME, name))
+ os.path.join(EXTERNALS_PATH, name))
self._config.set(name, ExternalsDescription.PROTOCOL,
ExternalsDescription.PROTOCOL_SVN)
@@ -357,65 +375,19 @@ def create_svn_external(self, name, tag='', branch=''):
if branch:
self._config.set(name, ExternalsDescription.BRANCH, branch)
- @staticmethod
- def create_branch(dest_dir, repo_name, branch, with_commit=False):
- """Update a repository branch, and potentially the remote.
- """
- # pylint: disable=R0913
- cwd = os.getcwd()
- repo_root = os.path.join(dest_dir, EXTERNALS_NAME)
- repo_root = os.path.join(repo_root, repo_name)
- os.chdir(repo_root)
- cmd = ['git', 'checkout', '-b', branch, ]
- execute_subprocess(cmd)
- if with_commit:
- msg = 'start work on {0}'.format(branch)
- with open(README_NAME, 'a') as handle:
- handle.write(msg)
- cmd = ['git', 'add', README_NAME, ]
- execute_subprocess(cmd)
- cmd = ['git', 'commit', '-m', msg, ]
- execute_subprocess(cmd)
- os.chdir(cwd)
-
- @staticmethod
- def create_commit(dest_dir, repo_name, local_tracking_branch=None):
- """Make a commit on whatever is currently checked out.
-
- This is used to test sync state changes from local commits on
- detached heads and tracking branches.
+ def write_with_git_branch(self, dest_dir, name, branch, new_remote_repo_path=None):
+ """Update fields in our config and write it to disk.
- """
- cwd = os.getcwd()
- repo_root = os.path.join(dest_dir, EXTERNALS_NAME)
- repo_root = os.path.join(repo_root, repo_name)
- os.chdir(repo_root)
- if local_tracking_branch:
- cmd = ['git', 'checkout', '-b', local_tracking_branch, ]
- execute_subprocess(cmd)
-
- msg = 'work on great new feature!'
- with open(README_NAME, 'a') as handle:
- handle.write(msg)
- cmd = ['git', 'add', README_NAME, ]
- execute_subprocess(cmd)
- cmd = ['git', 'commit', '-m', msg, ]
- execute_subprocess(cmd)
- os.chdir(cwd)
-
- def update_branch(self, dest_dir, name, branch, repo_type=None,
- filename=CFG_NAME):
- """Update a repository branch, and potentially the remote.
+ name is the key of the ExternalsDescription in self._config to update.
"""
# pylint: disable=R0913
self._config.set(name, ExternalsDescription.BRANCH, branch)
- if repo_type:
- if repo_type == SIMPLE_LOCAL_ONLY_NAME:
+ if new_remote_repo_path:
+ if new_remote_repo_path == SIMPLE_LOCAL_ONLY_NAME:
repo_url = SIMPLE_LOCAL_ONLY_NAME
else:
- repo_url = os.path.join('${MANIC_TEST_BARE_REPO_ROOT}',
- repo_type)
+ repo_url = os.path.join(self._bare_root, new_remote_repo_path)
self._config.set(name, ExternalsDescription.REPO_URL, repo_url)
try:
@@ -424,9 +396,9 @@ def update_branch(self, dest_dir, name, branch, repo_type=None,
except BaseException:
pass
- self.write_config(dest_dir, filename)
+ self.write_config(dest_dir)
- def update_svn_branch(self, dest_dir, name, branch, filename=CFG_NAME):
+ def write_with_svn_branch(self, dest_dir, name, branch):
"""Update a repository branch, and potentially the remote.
"""
# pylint: disable=R0913
@@ -438,11 +410,11 @@ def update_svn_branch(self, dest_dir, name, branch, filename=CFG_NAME):
except BaseException:
pass
- self.write_config(dest_dir, filename)
+ self.write_config(dest_dir)
- def update_tag(self, dest_dir, name, tag, repo_type=None,
- filename=CFG_NAME, remove_branch=True):
- """Update a repository tag, and potentially the remote
+ def write_with_tag_and_remote_repo(self, dest_dir, name, tag, new_remote_repo_path,
+ remove_branch=True):
+ """Update a repository tag and the remote.
NOTE(bja, 2017-11) remove_branch=False should result in an
overspecified external with both a branch and tag. This is
@@ -452,8 +424,8 @@ def update_tag(self, dest_dir, name, tag, repo_type=None,
# pylint: disable=R0913
self._config.set(name, ExternalsDescription.TAG, tag)
- if repo_type:
- repo_url = os.path.join('${MANIC_TEST_BARE_REPO_ROOT}', repo_type)
+ if new_remote_repo_path:
+ repo_url = os.path.join(self._bare_root, new_remote_repo_path)
self._config.set(name, ExternalsDescription.REPO_URL, repo_url)
try:
@@ -463,10 +435,9 @@ def update_tag(self, dest_dir, name, tag, repo_type=None,
except BaseException:
pass
- self.write_config(dest_dir, filename)
+ self.write_config(dest_dir)
- def update_underspecify_branch_tag(self, dest_dir, name,
- filename=CFG_NAME):
+ def write_without_branch_tag(self, dest_dir, name):
"""Update a repository protocol, and potentially the remote
"""
# pylint: disable=R0913
@@ -482,10 +453,9 @@ def update_underspecify_branch_tag(self, dest_dir, name,
except BaseException:
pass
- self.write_config(dest_dir, filename)
+ self.write_config(dest_dir)
- def update_underspecify_remove_url(self, dest_dir, name,
- filename=CFG_NAME):
+ def write_without_repo_url(self, dest_dir, name):
"""Update a repository protocol, and potentially the remote
"""
# pylint: disable=R0913
@@ -495,22 +465,59 @@ def update_underspecify_remove_url(self, dest_dir, name,
except BaseException:
pass
- self.write_config(dest_dir, filename)
+ self.write_config(dest_dir)
- def update_protocol(self, dest_dir, name, protocol, repo_type=None,
- filename=CFG_NAME):
+ def write_with_protocol(self, dest_dir, name, protocol, repo_path=None):
"""Update a repository protocol, and potentially the remote
"""
# pylint: disable=R0913
self._config.set(name, ExternalsDescription.PROTOCOL, protocol)
- if repo_type:
- repo_url = os.path.join('${MANIC_TEST_BARE_REPO_ROOT}', repo_type)
+ if repo_path:
+ repo_url = os.path.join(self._bare_root, repo_path)
self._config.set(name, ExternalsDescription.REPO_URL, repo_url)
- self.write_config(dest_dir, filename)
+ self.write_config(dest_dir)
+
+
+def _execute_checkout_in_dir(dirname, args, debug_env=''):
+ """Execute the checkout command in the appropriate repo dir with the
+ specified additional args.
+
+ args should be a list of strings.
+ debug_env shuld be a string of the form 'FOO=bar' or the empty string.
+ Note that we are calling the command line processing and main
+ routines and not using a subprocess call so that we get code
+ coverage results! Note this means that environment variables are passed
+ to checkout_externals via os.environ; debug_env is just used to aid
+ manual reproducibility of a given call.
+ Returns (overall_status, tree_status)
+ where overall_status is 0 for success, nonzero otherwise.
+ and tree_status is set if --status was passed in, None otherwise.
+
+ Note this command executes the checkout command, it doesn't
+ necessarily do any checking out (e.g. if --status is passed in).
+ """
+ cwd = os.getcwd()
+
+ # Construct a command line for reproducibility; this command is not
+ # actually executed in the test.
+ os.chdir(dirname)
+ cmdline = ['--externals', CFG_NAME, ]
+ cmdline += args
+ manual_cmd = ('Running equivalent of:\n'
+ 'pushd {dirname}; '
+ '{debug_env} /path/to/checkout_externals {args}'.format(
+ dirname=dirname, debug_env=debug_env,
+ args=' '.join(cmdline)))
+ printlog(manual_cmd)
+ options = checkout.commandline_arguments(cmdline)
+ overall_status, tree_status = checkout.main(options)
+ os.chdir(cwd)
+ return overall_status, tree_status
+
class BaseTestSysCheckout(unittest.TestCase):
"""Base class of reusable systems level test setup for
checkout_externals
@@ -521,6 +528,7 @@ class BaseTestSysCheckout(unittest.TestCase):
# cryptic.
# pylint: disable=invalid-name
+ # Command-line args for checkout_externals, used in execute_checkout_in_dir()
status_args = ['--status']
checkout_args = []
optional_args = ['--optional']
@@ -535,384 +543,74 @@ def setUp(self):
self._test_id = self.id().split('.')[-1]
- # path to the executable
- self._checkout = os.path.join('../checkout_externals')
- self._checkout = os.path.abspath(self._checkout)
+ # find root
+ if os.path.exists(os.path.join(os.getcwd(), 'checkout_externals')):
+ root_dir = os.path.abspath(os.getcwd())
+ else:
+ # maybe we are in a subdir, search up
+ root_dir = os.path.abspath(os.path.join(os.getcwd(), os.pardir))
+ while os.path.basename(root_dir):
+ if os.path.exists(os.path.join(root_dir, 'checkout_externals')):
+ break
+ root_dir = os.path.dirname(root_dir)
+
+ if not os.path.exists(os.path.join(root_dir, 'checkout_externals')):
+ raise RuntimeError('Cannot find checkout_externals')
- # directory where we have test repositories
- self._bare_root = os.path.join(os.getcwd(), BARE_REPO_ROOT_NAME)
- self._bare_root = os.path.abspath(self._bare_root)
+ # path to the executable
+ self._checkout = os.path.join(root_dir, 'checkout_externals')
- # set into the environment so var will be expanded in externals files
- os.environ[MANIC_TEST_BARE_REPO_ROOT] = self._bare_root
+ # directory where we have test repositories (which we will clone for
+ # tests)
+ self._bare_root = os.path.abspath(
+ os.path.join(root_dir, 'test', BARE_REPO_ROOT_NAME))
# set the input file generator
- self._generator = GenerateExternalsDescriptionCfgV1()
+ self._generator = GenerateExternalsDescriptionCfgV1(self._bare_root)
# set the input file generator for secondary externals
- self._sub_generator = GenerateExternalsDescriptionCfgV1()
+ self._sub_generator = GenerateExternalsDescriptionCfgV1(self._bare_root)
def tearDown(self):
"""Tear down for individual tests
"""
- # remove the env var we added in setup
- del os.environ[MANIC_TEST_BARE_REPO_ROOT]
-
# return to our common starting point
os.chdir(self._return_dir)
-
- def setup_test_repo(self, parent_repo_name, dest_dir_in=None):
- """Setup the paths and clone the base test repo
-
- """
- # unique repo for this test
- test_dir_name = self._test_id
- print("Test repository name: {0}".format(test_dir_name))
-
- parent_repo_dir = os.path.join(self._bare_root, parent_repo_name)
- if dest_dir_in is None:
- dest_dir = os.path.join(os.environ[MANIC_TEST_TMP_REPO_ROOT],
- test_dir_name)
- else:
- dest_dir = dest_dir_in
-
- # pylint: disable=W0212
- GitRepository._git_clone(parent_repo_dir, dest_dir, VERBOSITY_DEFAULT)
- return dest_dir
-
- @staticmethod
- def _add_file_to_repo(under_test_dir, filename, tracked):
- """Add a file to the repository so we can put it into a dirty state
-
- """
- cwd = os.getcwd()
- os.chdir(under_test_dir)
- with open(filename, 'w') as tmp:
- tmp.write('Hello, world!')
-
- if tracked:
- # NOTE(bja, 2018-01) brittle hack to obtain repo dir and
- # file name
- path_data = filename.split('/')
- repo_dir = os.path.join(path_data[0], path_data[1])
- os.chdir(repo_dir)
- tracked_file = path_data[2]
- cmd = ['git', 'add', tracked_file]
- execute_subprocess(cmd)
-
- os.chdir(cwd)
+
+ # (in case this was set) Don't pollute environment of other tests.
+ os.environ.pop(MIXED_CONT_EXT_ROOT_ENV_VAR,
+ None) # Don't care if key wasn't set.
+
+ def clone_test_repo(self, parent_repo_name, dest_dir_in=None):
+ """Clones repo under self._bare_root"""
+ return RepoUtils.clone_test_repo(self._bare_root, self._test_id,
+ parent_repo_name, dest_dir_in)
+
+ def execute_checkout_in_dir(self, dirname, args, debug_env=''):
+ overall_status, tree_status = _execute_checkout_in_dir(dirname, args,
+ debug_env=debug_env)
+ self.assertEqual(overall_status, 0)
+ return tree_status
+
+ def execute_checkout_with_status(self, dirname, args, debug_env=''):
+ """Calls checkout a second time to get status if needed."""
+ tree_status = self.execute_checkout_in_dir(
+ dirname, args, debug_env=debug_env)
+ if tree_status is None:
+ tree_status = self.execute_checkout_in_dir(dirname,
+ self.status_args,
+ debug_env=debug_env)
+ self.assertNotEqual(tree_status, None)
+ return tree_status
+
+ def _check_sync_clean(self, ext_status, expected_sync_state,
+ expected_clean_state):
+ self.assertEqual(ext_status.sync_state, expected_sync_state)
+ self.assertEqual(ext_status.clean_state, expected_clean_state)
@staticmethod
- def execute_cmd_in_dir(under_test_dir, args):
- """Extecute the checkout command in the appropriate repo dir with the
- specified additional args
-
- Note that we are calling the command line processing and main
- routines and not using a subprocess call so that we get code
- coverage results!
-
- """
- cwd = os.getcwd()
- checkout_path = os.path.abspath('{0}/../../checkout_externals')
- os.chdir(under_test_dir)
- cmdline = ['--externals', CFG_NAME, ]
- cmdline += args
- repo_root = 'MANIC_TEST_BARE_REPO_ROOT={root}'.format(
- root=os.environ[MANIC_TEST_BARE_REPO_ROOT])
- manual_cmd = ('Test cmd:\npushd {cwd}; {env} {checkout} {args}'.format(
- cwd=under_test_dir, env=repo_root, checkout=checkout_path,
- args=' '.join(cmdline)))
- printlog(manual_cmd)
- options = checkout.commandline_arguments(cmdline)
- overall_status, tree_status = checkout.main(options)
- os.chdir(cwd)
- return overall_status, tree_status
-
- # ----------------------------------------------------------------
- #
- # Check results for generic perturbation of states
- #
- # ----------------------------------------------------------------
- def _check_generic_empty_default_required(self, tree, name):
- self.assertEqual(tree[name].sync_state, ExternalStatus.EMPTY)
- self.assertEqual(tree[name].clean_state, ExternalStatus.DEFAULT)
- self.assertEqual(tree[name].source_type, ExternalStatus.MANAGED)
-
- def _check_generic_ok_clean_required(self, tree, name):
- self.assertEqual(tree[name].sync_state, ExternalStatus.STATUS_OK)
- self.assertEqual(tree[name].clean_state, ExternalStatus.STATUS_OK)
- self.assertEqual(tree[name].source_type, ExternalStatus.MANAGED)
-
- def _check_generic_ok_dirty_required(self, tree, name):
- self.assertEqual(tree[name].sync_state, ExternalStatus.STATUS_OK)
- self.assertEqual(tree[name].clean_state, ExternalStatus.DIRTY)
- self.assertEqual(tree[name].source_type, ExternalStatus.MANAGED)
-
- def _check_generic_modified_ok_required(self, tree, name):
- self.assertEqual(tree[name].sync_state, ExternalStatus.MODEL_MODIFIED)
- self.assertEqual(tree[name].clean_state, ExternalStatus.STATUS_OK)
- self.assertEqual(tree[name].source_type, ExternalStatus.MANAGED)
-
- def _check_generic_empty_default_optional(self, tree, name):
- self.assertEqual(tree[name].sync_state, ExternalStatus.EMPTY)
- self.assertEqual(tree[name].clean_state, ExternalStatus.DEFAULT)
- self.assertEqual(tree[name].source_type, ExternalStatus.OPTIONAL)
-
- def _check_generic_ok_clean_optional(self, tree, name):
- self.assertEqual(tree[name].sync_state, ExternalStatus.STATUS_OK)
- self.assertEqual(tree[name].clean_state, ExternalStatus.STATUS_OK)
- self.assertEqual(tree[name].source_type, ExternalStatus.OPTIONAL)
-
- # ----------------------------------------------------------------
- #
- # Check results for individual named externals
- #
- # ----------------------------------------------------------------
- def _check_simple_tag_empty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_tag'.format(directory)
- self._check_generic_empty_default_required(tree, name)
-
- def _check_simple_tag_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_tag'.format(directory)
- self._check_generic_ok_clean_required(tree, name)
-
- def _check_simple_tag_dirty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_tag'.format(directory)
- self._check_generic_ok_dirty_required(tree, name)
-
- def _check_simple_tag_modified(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_tag'.format(directory)
- self._check_generic_modified_ok_required(tree, name)
-
- def _check_simple_branch_empty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_branch'.format(directory)
- self._check_generic_empty_default_required(tree, name)
-
- def _check_simple_branch_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_branch'.format(directory)
- self._check_generic_ok_clean_required(tree, name)
-
- def _check_simple_branch_modified(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_branch'.format(directory)
- self._check_generic_modified_ok_required(tree, name)
-
- def _check_simple_hash_empty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_hash'.format(directory)
- self._check_generic_empty_default_required(tree, name)
-
- def _check_simple_hash_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_hash'.format(directory)
- self._check_generic_ok_clean_required(tree, name)
-
- def _check_simple_hash_modified(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_hash'.format(directory)
- self._check_generic_modified_ok_required(tree, name)
-
- def _check_simple_req_empty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_req'.format(directory)
- self._check_generic_empty_default_required(tree, name)
-
- def _check_simple_req_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_req'.format(directory)
- self._check_generic_ok_clean_required(tree, name)
-
- def _check_simple_opt_empty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_opt'.format(directory)
- self._check_generic_empty_default_optional(tree, name)
-
- def _check_simple_opt_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_opt'.format(directory)
- self._check_generic_ok_clean_optional(tree, name)
-
- def _check_mixed_ext_branch_empty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/mixed_req'.format(directory)
- self._check_generic_empty_default_required(tree, name)
-
- def _check_mixed_ext_branch_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/mixed_req'.format(directory)
- self._check_generic_ok_clean_required(tree, name)
-
- def _check_mixed_ext_branch_modified(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/mixed_req'.format(directory)
- self._check_generic_modified_ok_required(tree, name)
-
- def _check_simple_sparse_empty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_sparse'.format(directory)
- self._check_generic_empty_default_required(tree, name)
-
- def _check_simple_sparse_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/simp_sparse'.format(directory)
- self._check_generic_ok_clean_required(tree, name)
-
- # ----------------------------------------------------------------
- #
- # Check results for groups of externals under specific conditions
- #
- # ----------------------------------------------------------------
- def _check_container_simple_required_pre_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_empty(tree)
- self._check_simple_branch_empty(tree)
- self._check_simple_hash_empty(tree)
-
- def _check_container_simple_required_checkout(self, overall, tree):
- # Note, this is the internal tree status just before checkout
- self.assertEqual(overall, 0)
- self._check_simple_tag_empty(tree)
- self._check_simple_branch_empty(tree)
- self._check_simple_hash_empty(tree)
-
- def _check_container_simple_required_post_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_simple_branch_ok(tree)
- self._check_simple_hash_ok(tree)
-
- def _check_container_simple_required_out_of_sync(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_modified(tree)
- self._check_simple_branch_modified(tree)
- self._check_simple_hash_modified(tree)
-
- def _check_container_simple_optional_pre_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_req_empty(tree)
- self._check_simple_opt_empty(tree)
-
- def _check_container_simple_optional_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_req_empty(tree)
- self._check_simple_opt_empty(tree)
-
- def _check_container_simple_optional_post_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_req_ok(tree)
- self._check_simple_opt_empty(tree)
-
- def _check_container_simple_optional_post_optional(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_req_ok(tree)
- self._check_simple_opt_ok(tree)
-
- def _check_container_simple_required_sb_modified(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_simple_branch_modified(tree)
- self._check_simple_hash_ok(tree)
-
- def _check_container_simple_optional_st_dirty(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_dirty(tree)
- self._check_simple_branch_ok(tree)
-
- def _check_container_full_pre_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_empty(tree)
- self._check_simple_branch_empty(tree)
- self._check_simple_opt_empty(tree)
- self._check_mixed_ext_branch_required_pre_checkout(overall, tree)
-
- def _check_container_component_post_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_opt_ok(tree)
- self._check_simple_tag_empty(tree)
- self._check_simple_branch_empty(tree)
-
- def _check_container_component_post_checkout2(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_opt_ok(tree)
- self._check_simple_tag_empty(tree)
- self._check_simple_branch_ok(tree)
-
- def _check_container_full_post_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_simple_branch_ok(tree)
- self._check_simple_opt_empty(tree)
- self._check_mixed_ext_branch_required_post_checkout(overall, tree)
-
- def _check_container_full_pre_checkout_ext_change(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_simple_branch_ok(tree)
- self._check_simple_opt_empty(tree)
- self._check_mixed_ext_branch_required_pre_checkout_ext_change(
- overall, tree)
-
- def _check_container_full_post_checkout_subext_modified(
- self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_simple_branch_ok(tree)
- self._check_simple_opt_empty(tree)
- self._check_mixed_ext_branch_required_post_checkout_subext_modified(
- overall, tree)
-
- def _check_mixed_ext_branch_required_pre_checkout(self, overall, tree):
- # Note, this is the internal tree status just before checkout
- self.assertEqual(overall, 0)
- self._check_mixed_ext_branch_empty(tree, directory=EXTERNALS_NAME)
- # NOTE: externals/mixed_req/src should not exist in the tree
- # since this is the status before checkout of mixed_req.
-
- def _check_mixed_ext_branch_required_post_checkout(self, overall, tree):
- # Note, this is the internal tree status just before checkout
- self.assertEqual(overall, 0)
- self._check_mixed_ext_branch_ok(tree, directory=EXTERNALS_NAME)
- check_dir = "{0}/{1}/{2}".format(EXTERNALS_NAME, "mixed_req",
- SUB_EXTERNALS_PATH)
- self._check_simple_branch_ok(tree, directory=check_dir)
-
- def _check_mixed_ext_branch_required_pre_checkout_ext_change(
- self, overall, tree):
- # Note, this is the internal tree status just after change the
- # externals description file, but before checkout
- self.assertEqual(overall, 0)
- self._check_mixed_ext_branch_modified(tree, directory=EXTERNALS_NAME)
- check_dir = "{0}/{1}/{2}".format(EXTERNALS_NAME, "mixed_req",
- SUB_EXTERNALS_PATH)
- self._check_simple_branch_ok(tree, directory=check_dir)
-
- def _check_mixed_ext_branch_required_post_checkout_subext_modified(
- self, overall, tree):
- # Note, this is the internal tree status just after change the
- # externals description file, but before checkout
- self.assertEqual(overall, 0)
- self._check_mixed_ext_branch_ok(tree, directory=EXTERNALS_NAME)
- check_dir = "{0}/{1}/{2}".format(EXTERNALS_NAME, "mixed_req",
- SUB_EXTERNALS_PATH)
- self._check_simple_branch_modified(tree, directory=check_dir)
-
- def _check_mixed_cont_simple_required_pre_checkout(self, overall, tree):
- # Note, this is the internal tree status just before checkout
- self.assertEqual(overall, 0)
- self._check_simple_tag_empty(tree, directory=EXTERNALS_NAME)
- self._check_simple_branch_empty(tree, directory=EXTERNALS_NAME)
- self._check_simple_branch_empty(tree, directory=SUB_EXTERNALS_PATH)
-
- def _check_mixed_cont_simple_required_checkout(self, overall, tree):
- # Note, this is the internal tree status just before checkout
- self.assertEqual(overall, 0)
- self._check_simple_tag_empty(tree, directory=EXTERNALS_NAME)
- self._check_simple_branch_empty(tree, directory=EXTERNALS_NAME)
- self._check_simple_branch_empty(tree, directory=SUB_EXTERNALS_PATH)
-
- def _check_mixed_cont_simple_required_post_checkout(self, overall, tree):
- # Note, this is the internal tree status just before checkout
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree, directory=EXTERNALS_NAME)
- self._check_simple_branch_ok(tree, directory=EXTERNALS_NAME)
- self._check_simple_branch_ok(tree, directory=SUB_EXTERNALS_PATH)
-
- def _check_container_sparse_pre_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_empty(tree)
- self._check_simple_sparse_empty(tree)
-
- def _check_container_sparse_post_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_simple_sparse_ok(tree)
-
+ def _external_path(section_name, base_path=EXTERNALS_PATH):
+ return './{0}/{1}'.format(base_path, section_name)
+
def _check_file_exists(self, repo_dir, pathname):
"Check that exists in "
self.assertTrue(os.path.exists(os.path.join(repo_dir, pathname)))
@@ -921,9 +619,9 @@ def _check_file_absent(self, repo_dir, pathname):
"Check that does not exist in "
self.assertFalse(os.path.exists(os.path.join(repo_dir, pathname)))
+
class TestSysCheckout(BaseTestSysCheckout):
"""Run systems level tests of checkout_externals
-
"""
# NOTE(bja, 2017-11) pylint complains about long method names, but
# it is hard to differentiate tests without making them more
@@ -935,214 +633,431 @@ class TestSysCheckout(BaseTestSysCheckout):
# Run systems tests
#
# ----------------------------------------------------------------
- def test_container_simple_required(self):
- """Verify that a container with simple subrepos
- generates the correct initial status.
-
+ def test_required_bytag(self):
+ """Check out a required external pointing to a git tag."""
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, TAG_SECTION,
+ tag='tag1')
+ self._generator.write_config(cloned_repo_dir)
+
+ # externals start out 'empty' aka not checked out.
+ tree = self.execute_checkout_in_dir(cloned_repo_dir,
+ self.status_args)
+ local_path_rel = self._external_path(TAG_SECTION)
+ self._check_sync_clean(tree[local_path_rel],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ local_path_abs = os.path.join(cloned_repo_dir, local_path_rel)
+ self.assertFalse(os.path.exists(local_path_abs))
+
+ # after checkout, the external is 'clean' aka at the correct version.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[local_path_rel],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # Actually checked out the desired repo.
+ self.assertEqual('origin', GitRepository._remote_name_for_url(
+ # Which url to look up
+ self._generator.url_for_repo_path(SIMPLE_REPO),
+ # Which directory has the local checked-out repo.
+ dirname=local_path_abs))
+
+ # Actually checked out the desired tag.
+ (tag_found, tag_name) = GitRepository._git_current_tag(local_path_abs)
+ self.assertEqual(tag_name, 'tag1')
+
+ # Check existence of some simp_tag files
+ tag_path = os.path.join('externals', TAG_SECTION)
+ self._check_file_exists(cloned_repo_dir,
+ os.path.join(tag_path, README_NAME))
+ # Subrepo should not exist (not referenced by configs).
+ self._check_file_absent(cloned_repo_dir, os.path.join(tag_path,
+ 'simple_subdir',
+ 'subdir_file.txt'))
+
+ def test_required_bybranch(self):
+ """Check out a required external pointing to a git branch."""
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
+
+ # externals start out 'empty' aka not checked out.
+ tree = self.execute_checkout_in_dir(cloned_repo_dir,
+ self.status_args)
+ local_path_rel = self._external_path(BRANCH_SECTION)
+ self._check_sync_clean(tree[local_path_rel],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ local_path_abs = os.path.join(cloned_repo_dir, local_path_rel)
+ self.assertFalse(os.path.exists(local_path_abs))
+
+ # after checkout, the external is 'clean' aka at the correct version.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[local_path_rel],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self.assertTrue(os.path.exists(local_path_abs))
+
+ # Actually checked out the desired repo.
+ self.assertEqual('origin', GitRepository._remote_name_for_url(
+ # Which url to look up
+ self._generator.url_for_repo_path(SIMPLE_REPO),
+ # Which directory has the local checked-out repo.
+ dirname=local_path_abs))
+
+ # Actually checked out the desired branch.
+ (branch_found, branch_name) = GitRepository._git_current_remote_branch(
+ local_path_abs)
+ self.assertEquals(branch_name, 'origin/' + REMOTE_BRANCH_FEATURE2)
+
+ def test_required_byhash(self):
+ """Check out a required external pointing to a git hash."""
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, HASH_SECTION,
+ ref_hash='60b1cc1a38d63')
+ self._generator.write_config(cloned_repo_dir)
+
+ # externals start out 'empty' aka not checked out.
+ tree = self.execute_checkout_in_dir(cloned_repo_dir,
+ self.status_args)
+ local_path_rel = self._external_path(HASH_SECTION)
+ self._check_sync_clean(tree[local_path_rel],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ local_path_abs = os.path.join(cloned_repo_dir, local_path_rel)
+ self.assertFalse(os.path.exists(local_path_abs))
+
+ # after checkout, the externals are 'clean' aka at their correct version.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[local_path_rel],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # Actually checked out the desired repo.
+ self.assertEqual('origin', GitRepository._remote_name_for_url(
+ # Which url to look up
+ self._generator.url_for_repo_path(SIMPLE_REPO),
+ # Which directory has the local checked-out repo.
+ dirname=local_path_abs))
+
+ # Actually checked out the desired hash.
+ (hash_found, hash_name) = GitRepository._git_current_hash(
+ local_path_abs)
+ self.assertTrue(hash_name.startswith('60b1cc1a38d63'),
+ msg=hash_name)
+
+ def test_container_nested_required(self):
+ """Verify that a container with nested subrepos generates the correct initial status.
+ Tests over all possible permutations
"""
- # create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
-
- # status of empty repo
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
+ # Output subdirs for each of the externals, to test that one external can be
+ # checked out in a subdir of another.
+ NESTED_SUBDIR = ['./fred', './fred/wilma', './fred/wilma/barney']
+
+ # Assert that each type of external (e.g. tag vs branch) can be at any parent level
+ # (e.g. child/parent/grandparent).
+ orders = [[0, 1, 2], [1, 2, 0], [2, 0, 1],
+ [0, 2, 1], [2, 1, 0], [1, 0, 2]]
+ for n, order in enumerate(orders):
+ dest_dir = os.path.join(module_tmp_root_dir, self._test_id,
+ "test"+str(n))
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO,
+ dest_dir_in=dest_dir)
+ self._generator.create_config()
+ # We happen to check out each section via a different reference (tag/branch/hash) but
+ # those don't really matter, we just need to check out three repos into a nested set of
+ # directories.
+ self._generator.create_section(
+ SIMPLE_REPO, TAG_SECTION, nested=True,
+ tag='tag1', path=NESTED_SUBDIR[order[0]])
+ self._generator.create_section(
+ SIMPLE_REPO, BRANCH_SECTION, nested=True,
+ branch=REMOTE_BRANCH_FEATURE2, path=NESTED_SUBDIR[order[1]])
+ self._generator.create_section(
+ SIMPLE_REPO, HASH_SECTION, nested=True,
+ ref_hash='60b1cc1a38d63', path=NESTED_SUBDIR[order[2]])
+ self._generator.write_config(cloned_repo_dir)
+
+ # all externals start out 'empty' aka not checked out.
+ tree = self.execute_checkout_in_dir(cloned_repo_dir,
self.status_args)
- self._check_container_simple_required_pre_checkout(overall, tree)
-
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
-
- # status clean checked out
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_post_checkout(overall, tree)
-
+ self._check_sync_clean(tree[NESTED_SUBDIR[order[0]]],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self._check_sync_clean(tree[NESTED_SUBDIR[order[1]]],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self._check_sync_clean(tree[NESTED_SUBDIR[order[2]]],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+
+ # after checkout, all the repos are 'clean'.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[NESTED_SUBDIR[order[0]]],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[NESTED_SUBDIR[order[1]]],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[NESTED_SUBDIR[order[2]]],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
def test_container_simple_optional(self):
- """Verify that container with an optional simple subrepos
- generates the correct initial status.
+ """Verify that container with an optional simple subrepos generates
+ the correct initial status.
"""
- # create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_optional(under_test_dir)
-
- # check status of empty repo
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_optional_pre_checkout(overall, tree)
-
- # checkout required
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_optional_checkout(overall, tree)
-
- # status
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_optional_post_checkout(overall, tree)
+ # create repo and externals config.
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, 'simp_req',
+ tag='tag1')
- # checkout optional
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.optional_args)
- self._check_container_simple_optional_post_checkout(overall, tree)
+ self._generator.create_section(SIMPLE_REPO, 'simp_opt',
+ tag='tag1', required=False)
- # status
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_optional_post_optional(overall, tree)
+ self._generator.write_config(cloned_repo_dir)
+
+ # all externals start out 'empty' aka not checked out.
+ tree = self.execute_checkout_in_dir(cloned_repo_dir,
+ self.status_args)
+ req_status = tree[self._external_path('simp_req')]
+ self._check_sync_clean(req_status,
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self.assertEqual(req_status.source_type, ExternalStatus.MANAGED)
+
+ opt_status = tree[self._external_path('simp_opt')]
+ self._check_sync_clean(opt_status,
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self.assertEqual(opt_status.source_type, ExternalStatus.OPTIONAL)
+
+ # after checkout, required external is clean, optional is still empty.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ req_status = tree[self._external_path('simp_req')]
+ self._check_sync_clean(req_status,
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self.assertEqual(req_status.source_type, ExternalStatus.MANAGED)
+
+ opt_status = tree[self._external_path('simp_opt')]
+ self._check_sync_clean(opt_status,
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self.assertEqual(opt_status.source_type, ExternalStatus.OPTIONAL)
+
+ # after checking out optionals, the optional external is also clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.optional_args)
+ req_status = tree[self._external_path('simp_req')]
+ self._check_sync_clean(req_status,
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self.assertEqual(req_status.source_type, ExternalStatus.MANAGED)
+
+ opt_status = tree[self._external_path('simp_opt')]
+ self._check_sync_clean(opt_status,
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self.assertEqual(opt_status.source_type, ExternalStatus.OPTIONAL)
def test_container_simple_verbose(self):
- """Verify that container with simple subrepos runs with verbose status
- output and generates the correct initial status.
-
+ """Verify that verbose status matches non-verbose.
"""
- # create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
-
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
-
- # check verbose status
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.verbose_args)
- self._check_container_simple_required_post_checkout(overall, tree)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, TAG_SECTION,
+ tag='tag1')
+ self._generator.write_config(cloned_repo_dir)
+
+ # after checkout, all externals should be 'clean'.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # 'Verbose' status should tell the same story.
+ tree = self.execute_checkout_in_dir(cloned_repo_dir,
+ self.verbose_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
def test_container_simple_dirty(self):
- """Verify that a container with simple subrepos
- and a dirty status exits gracefully.
-
+ """Verify that a container with a new tracked file is marked dirty.
"""
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
-
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
-
- # add a file to the repo
- tracked = True
- self._add_file_to_repo(under_test_dir, 'externals/simp_tag/tmp.txt',
- tracked)
-
- # checkout: pre-checkout status should be dirty, did not
- # modify working copy.
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_optional_st_dirty(overall, tree)
-
- # verify status is still dirty
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_optional_st_dirty(overall, tree)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, TAG_SECTION,
+ tag='tag1')
+ self._generator.write_config(cloned_repo_dir)
+
+ # checkout, should start out clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir, self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # add a tracked file to the simp_tag external, should be dirty.
+ RepoUtils.add_file_to_repo(cloned_repo_dir,
+ 'externals/{0}/tmp.txt'.format(TAG_SECTION),
+ tracked=True)
+ tree = self.execute_checkout_in_dir(cloned_repo_dir, self.status_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.DIRTY)
+
+ # Re-checkout; simp_tag should still be dirty.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.DIRTY)
def test_container_simple_untracked(self):
"""Verify that a container with simple subrepos and a untracked files
is not considered 'dirty' and will attempt an update.
"""
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
-
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
-
- # add a file to the repo
- tracked = False
- self._add_file_to_repo(under_test_dir, 'externals/simp_tag/tmp.txt',
- tracked)
-
- # checkout: pre-checkout status should be clean, ignoring the
- # untracked file.
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_post_checkout(overall, tree)
-
- # verify status is still clean
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_post_checkout(overall, tree)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, TAG_SECTION,
+ tag='tag1')
+ self._generator.write_config(cloned_repo_dir)
+
+ # checkout, should start out clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # add an untracked file to the simp_tag external, should stay clean.
+ RepoUtils.add_file_to_repo(cloned_repo_dir,
+ 'externals/{0}/tmp.txt'.format(TAG_SECTION),
+ tracked=False)
+ tree = self.execute_checkout_in_dir(cloned_repo_dir, self.status_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # After checkout, the external should still be 'clean'.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
def test_container_simple_detached_sync(self):
"""Verify that a container with simple subrepos generates the correct
out of sync status when making commits from a detached head
- state.
+ state.
+ For more info about 'detached head' state: https://www.cloudbees.com/blog/git-detached-head
"""
- # create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
-
- # status of empty repo
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_pre_checkout(overall, tree)
-
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
-
- # make a commit on the detached head of the tag and hash externals
- self._generator.create_commit(under_test_dir, 'simp_tag')
- self._generator.create_commit(under_test_dir, 'simp_hash')
- self._generator.create_commit(under_test_dir, 'simp_branch')
-
- # status of repo, branch, tag and hash should all be out of sync!
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_out_of_sync(overall, tree)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, TAG_SECTION,
+ tag='tag1')
+
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+
+ self._generator.create_section(SIMPLE_REPO, 'simp_hash',
+ ref_hash='60b1cc1a38d63')
+
+ self._generator.write_config(cloned_repo_dir)
+
+ # externals start out 'empty' aka not checked out.
+ tree = self.execute_checkout_in_dir(cloned_repo_dir, self.status_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self._check_sync_clean(tree[self._external_path(HASH_SECTION)],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
# checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- # same pre-checkout out of sync status
- self._check_container_simple_required_out_of_sync(overall, tree)
-
- # now status should be in-sync
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_post_checkout(overall, tree)
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
+
+ # Commit on top of the tag and hash (creating the detached head state in those two
+ # externals' repos)
+ # The branch commit does not create the detached head state, but here for completeness.
+ RepoUtils.create_commit(cloned_repo_dir, TAG_SECTION)
+ RepoUtils.create_commit(cloned_repo_dir, HASH_SECTION)
+ RepoUtils.create_commit(cloned_repo_dir, BRANCH_SECTION)
+
+ # sync status of all three should be 'modified' (uncommitted changes)
+ # clean status is 'ok' (matches externals version)
+ tree = self.execute_checkout_in_dir(cloned_repo_dir, self.status_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.MODEL_MODIFIED,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.MODEL_MODIFIED,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path(HASH_SECTION)],
+ ExternalStatus.MODEL_MODIFIED,
+ ExternalStatus.STATUS_OK)
+
+ # after checkout, all externals should be totally clean (no uncommitted changes,
+ # and matches externals version).
+ tree = self.execute_checkout_with_status(cloned_repo_dir, self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path(HASH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
def test_container_remote_branch(self):
"""Verify that a container with remote branch change works
"""
- # create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
-
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
-
- # update the config file to point to a different remote with
- # the same branch
- self._generator.update_branch(under_test_dir, 'simp_branch',
- REMOTE_BRANCH_FEATURE2, SIMPLE_FORK_NAME)
-
- # status of simp_branch should be out of sync
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_sb_modified(overall, tree)
-
- # checkout new externals
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_sb_modified(overall, tree)
-
- # status should be synced
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_post_checkout(overall, tree)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
+
+ # initial checkout
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
+
+ # update the branch external to point to a different remote with the same branch,
+ # then simp_branch should be out of sync
+ self._generator.write_with_git_branch(cloned_repo_dir,
+ name=BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2,
+ new_remote_repo_path=SIMPLE_FORK_REPO)
+ tree = self.execute_checkout_in_dir(cloned_repo_dir, self.status_args)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.MODEL_MODIFIED,
+ ExternalStatus.STATUS_OK)
+
+ # checkout new externals, now simp_branch should be clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir, self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
def test_container_remote_tag_same_branch(self):
"""Verify that a container with remote tag change works. The new tag
@@ -1151,258 +1066,324 @@ def test_container_remote_tag_same_branch(self):
the branch.
"""
- # create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
+ # initial checkout
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
# update the config file to point to a different remote with
- # the tag instead of branch. Tag MUST NOT be in the original
- # repo!
- self._generator.update_tag(under_test_dir, 'simp_branch',
- 'forked-feature-v1', SIMPLE_FORK_NAME)
-
- # status of simp_branch should be out of sync
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_sb_modified(overall, tree)
-
- # checkout new externals
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_sb_modified(overall, tree)
-
- # status should be synced
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_post_checkout(overall, tree)
+ # the new tag replacing the old branch. Tag MUST NOT be in the original
+ # repo! status of simp_branch should then be out of sync
+ self._generator.write_with_tag_and_remote_repo(cloned_repo_dir, BRANCH_SECTION,
+ tag='forked-feature-v1',
+ new_remote_repo_path=SIMPLE_FORK_REPO)
+ tree = self.execute_checkout_in_dir(cloned_repo_dir,
+ self.status_args)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.MODEL_MODIFIED,
+ ExternalStatus.STATUS_OK)
+
+ # checkout new externals, then should be synced.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
def test_container_remote_tag_fetch_all(self):
"""Verify that a container with remote tag change works. The new tag
should not be in the original repo, only the new remote
- fork. It should also not be on a branch that will be fetch,
+ fork. It should also not be on a branch that will be fetched,
and therefore not fetched by default with 'git fetch'. It will
- only be retreived by 'git fetch --tags'
-
+ only be retrieved by 'git fetch --tags'
"""
- # create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
+ # initial checkout
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
# update the config file to point to a different remote with
- # the tag instead of branch. Tag MUST NOT be in the original
- # repo!
- self._generator.update_tag(under_test_dir, 'simp_branch',
- 'abandoned-feature', SIMPLE_FORK_NAME)
-
- # status of simp_branch should be out of sync
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_sb_modified(overall, tree)
-
- # checkout new externals
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_sb_modified(overall, tree)
-
- # status should be synced
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_post_checkout(overall, tree)
+ # the new tag instead of the old branch. Tag MUST NOT be in the original
+ # repo! status of simp_branch should then be out of sync.
+ self._generator.write_with_tag_and_remote_repo(cloned_repo_dir, BRANCH_SECTION,
+ tag='abandoned-feature',
+ new_remote_repo_path=SIMPLE_FORK_REPO)
+ tree = self.execute_checkout_in_dir(cloned_repo_dir, self.status_args)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.MODEL_MODIFIED,
+ ExternalStatus.STATUS_OK)
+
+ # checkout new externals, should be clean again.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
def test_container_preserve_dot(self):
"""Verify that after inital checkout, modifying an external git repo
url to '.' and the current branch will leave it unchanged.
"""
- # create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_required_checkout(overall, tree)
+ # initial checkout
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
# update the config file to point to a different remote with
- # the same branch
- self._generator.update_branch(under_test_dir, 'simp_branch',
- REMOTE_BRANCH_FEATURE2, SIMPLE_FORK_NAME)
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
-
- # verify status is clean and unmodified
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_post_checkout(overall, tree)
+ # the same branch.
+ self._generator.write_with_git_branch(cloned_repo_dir, name=BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2,
+ new_remote_repo_path=SIMPLE_FORK_REPO)
+ # after checkout, should be clean again.
+ tree = self.execute_checkout_with_status(cloned_repo_dir, self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
# update branch to point to a new branch that only exists in
# the local fork
- self._generator.create_branch(under_test_dir, 'simp_branch',
- 'private-feature', with_commit=True)
- self._generator.update_branch(under_test_dir, 'simp_branch',
- 'private-feature',
- SIMPLE_LOCAL_ONLY_NAME)
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
-
- # verify status is clean and unmodified
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_required_post_checkout(overall, tree)
-
- def test_container_full(self):
- """Verify that 'full' container with simple and mixed subrepos
- generates the correct initial status.
+ RepoUtils.create_branch(cloned_repo_dir, external_name=BRANCH_SECTION,
+ branch='private-feature', with_commit=True)
+ self._generator.write_with_git_branch(cloned_repo_dir, name=BRANCH_SECTION,
+ branch='private-feature',
+ new_remote_repo_path=SIMPLE_LOCAL_ONLY_NAME)
+ # after checkout, should be clean again.
+ tree = self.execute_checkout_with_status(cloned_repo_dir, self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ def test_container_mixed_subrepo(self):
+ """Verify container with mixed subrepo.
The mixed subrepo has a sub-externals file with different
sub-externals on different branches.
"""
- # create the test repository
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
-
- # create the top level externals file
- self._generator.container_full(under_test_dir)
-
- # inital checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_full_pre_checkout(overall, tree)
-
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_full_post_checkout(overall, tree)
-
- # Check existance of some files
- subrepo_path = os.path.join('externals', 'simp_tag')
- self._check_file_exists(under_test_dir,
- os.path.join(subrepo_path, 'readme.txt'))
- self._check_file_absent(under_test_dir, os.path.join(subrepo_path,
- 'simple_subdir',
- 'subdir_file.txt'))
-
- # update the mixed-use repo to point to different branch
- self._generator.update_branch(under_test_dir, 'mixed_req',
- 'new-feature', MIXED_REPO_NAME)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
- # check status out of sync for mixed_req, but sub-externals
+ self._generator.create_config()
+ self._generator.create_section(MIXED_REPO, 'mixed_req',
+ branch='master', sub_externals=CFG_SUB_NAME)
+ self._generator.write_config(cloned_repo_dir)
+
+ # The subrepo has a repo_url that uses this environment variable.
+ # It'll be cleared in tearDown().
+ os.environ[MIXED_CONT_EXT_ROOT_ENV_VAR] = self._bare_root
+ debug_env = MIXED_CONT_EXT_ROOT_ENV_VAR + '=' + self._bare_root
+
+ # inital checkout: all requireds are clean, and optional is empty.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args,
+ debug_env=debug_env)
+ mixed_req_path = self._external_path('mixed_req')
+ self._check_sync_clean(tree[mixed_req_path],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ sub_ext_base_path = "{0}/{1}/{2}".format(EXTERNALS_PATH, 'mixed_req', SUB_EXTERNALS_PATH)
+ # The already-checked-in subexternals file has a 'simp_branch' section
+ self._check_sync_clean(tree[self._external_path('simp_branch', base_path=sub_ext_base_path)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # update the mixed-use external to point to different branch
+ # status should become out of sync for mixed_req, but sub-externals
# are still in sync
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_full_pre_checkout_ext_change(overall, tree)
-
- # run the checkout. Now the mixed use external and it's
- # sub-exterals should be changed. Returned status is
- # pre-checkout!
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_full_pre_checkout_ext_change(overall, tree)
-
- # check status out of sync for mixed_req, and sub-externals
- # are in sync.
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_full_post_checkout(overall, tree)
-
+ self._generator.write_with_git_branch(cloned_repo_dir, name='mixed_req',
+ branch='new-feature',
+ new_remote_repo_path=MIXED_REPO)
+ tree = self.execute_checkout_in_dir(cloned_repo_dir, self.status_args,
+ debug_env=debug_env)
+ self._check_sync_clean(tree[mixed_req_path],
+ ExternalStatus.MODEL_MODIFIED,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path('simp_branch', base_path=sub_ext_base_path)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # run the checkout. Now the mixed use external and its sub-externals should be clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir, self.checkout_args,
+ debug_env=debug_env)
+ self._check_sync_clean(tree[mixed_req_path],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path('simp_branch', base_path=sub_ext_base_path)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
def test_container_component(self):
"""Verify that optional component checkout works
"""
- # create the test repository
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
# create the top level externals file
- self._generator.container_full(under_test_dir)
-
- # inital checkout, first try a nonexistant component argument noref
+ self._generator.create_config()
+ # Optional external, by tag.
+ self._generator.create_section(SIMPLE_REPO, 'simp_opt',
+ tag='tag1', required=False)
+
+ # Required external, by branch.
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+
+ # Required external, by hash.
+ self._generator.create_section(SIMPLE_REPO, HASH_SECTION,
+ ref_hash='60b1cc1a38d63')
+ self._generator.write_config(cloned_repo_dir)
+
+ # inital checkout, first try a nonexistent component argument noref
checkout_args = ['simp_opt', 'noref']
checkout_args.extend(self.checkout_args)
with self.assertRaises(RuntimeError):
- self.execute_cmd_in_dir(under_test_dir, checkout_args)
+ self.execute_checkout_in_dir(cloned_repo_dir, checkout_args)
+ # Now explicitly check out one optional component..
+ # Explicitly listed component (opt) should be present, the other two not.
checkout_args = ['simp_opt']
checkout_args.extend(self.checkout_args)
-
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- checkout_args)
-
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_component_post_checkout(overall, tree)
- checkout_args.append('simp_branch')
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- checkout_args)
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_component_post_checkout2(overall, tree)
-
- def test_mixed_simple(self):
- """Verify that a mixed use repo can serve as a 'full' container,
- pulling in a set of externals and a seperate set of sub-externals.
-
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ checkout_args)
+ self._check_sync_clean(tree[self._external_path('simp_opt')],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self._check_sync_clean(tree[self._external_path(HASH_SECTION)],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+
+ # Check out a second component, this one required.
+ # Explicitly listed component (branch) should be present, the still-unlisted one (tag) not.
+ checkout_args.append(BRANCH_SECTION)
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ checkout_args)
+ self._check_sync_clean(tree[self._external_path('simp_opt')],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path(HASH_SECTION)],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+
+
+ def test_container_exclude_component(self):
+ """Verify that exclude component checkout works
"""
- #import pdb; pdb.set_trace()
- # create repository
- under_test_dir = self.setup_test_repo(MIXED_REPO_NAME)
- # create top level externals file
- self._generator.mixed_simple_base(under_test_dir)
- # NOTE: sub-externals file is already in the repo so we can
- # switch branches during testing. Since this is a mixed-repo
- # serving as the top level container repo, we can't switch
- # during this test.
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, TAG_SECTION,
+ tag='tag1')
+
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+
+ self._generator.create_section(SIMPLE_REPO, 'simp_hash',
+ ref_hash='60b1cc1a38d63')
+
+ self._generator.write_config(cloned_repo_dir)
+
+ # inital checkout should result in all externals being clean except excluded TAG_SECTION.
+ checkout_args = ['--exclude', TAG_SECTION]
+ checkout_args.extend(self.checkout_args)
+ tree = self.execute_checkout_with_status(cloned_repo_dir, checkout_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.EMPTY,
+ ExternalStatus.DEFAULT)
+ self._check_sync_clean(tree[self._external_path(BRANCH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path(HASH_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ def test_subexternal(self):
+ """Verify that an externals file can be brought in as a reference.
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_mixed_cont_simple_required_checkout(overall, tree)
+ """
+ cloned_repo_dir = self.clone_test_repo(MIXED_REPO)
- # verify status is clean and unmodified
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_mixed_cont_simple_required_post_checkout(overall, tree)
+ self._generator.create_config()
+ self._generator.create_section_reference_to_subexternal('mixed_base')
+ self._generator.write_config(cloned_repo_dir)
+
+ # The subrepo has a repo_url that uses this environment variable.
+ # It'll be cleared in tearDown().
+ os.environ[MIXED_CONT_EXT_ROOT_ENV_VAR] = self._bare_root
+ debug_env = MIXED_CONT_EXT_ROOT_ENV_VAR + '=' + self._bare_root
+
+ # After checkout, confirm required's are clean and the referenced
+ # subexternal's contents are also clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args,
+ debug_env=debug_env)
+
+ self._check_sync_clean(
+ tree[self._external_path(BRANCH_SECTION, base_path=SUB_EXTERNALS_PATH)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
def test_container_sparse(self):
"""Verify that 'full' container with simple subrepo
can run a sparse checkout and generate the correct initial status.
"""
- # create the test repository
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
- # create the top level externals file
- self._generator.container_sparse(under_test_dir)
-
- # inital checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_sparse_pre_checkout(overall, tree)
-
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_sparse_post_checkout(overall, tree)
+ # Create a file to list filenames to checkout.
+ sparse_filename = 'sparse_checkout'
+ with open(os.path.join(cloned_repo_dir, sparse_filename), 'w') as sfile:
+ sfile.write(README_NAME)
- # Check existance of some files
- subrepo_path = os.path.join('externals', 'simp_tag')
- self._check_file_exists(under_test_dir,
- os.path.join(subrepo_path, 'readme.txt'))
- self._check_file_exists(under_test_dir, os.path.join(subrepo_path,
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, TAG_SECTION,
+ tag='tag2')
+
+ # Same tag as above, but with a sparse file too.
+ sparse_relpath = '../../' + sparse_filename
+ self._generator.create_section(SIMPLE_REPO, 'simp_sparse',
+ tag='tag2', sparse=sparse_relpath)
+
+ self._generator.write_config(cloned_repo_dir)
+
+ # inital checkout, confirm required's are clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._external_path('simp_sparse')],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+
+ # Check existence of some files - full set in TAG_SECTION, and sparse set
+ # in 'simp_sparse'.
+ subrepo_path = os.path.join('externals', TAG_SECTION)
+ self._check_file_exists(cloned_repo_dir,
+ os.path.join(subrepo_path, README_NAME))
+ self._check_file_exists(cloned_repo_dir, os.path.join(subrepo_path,
'simple_subdir',
'subdir_file.txt'))
subrepo_path = os.path.join('externals', 'simp_sparse')
- self._check_file_exists(under_test_dir,
- os.path.join(subrepo_path, 'readme.txt'))
- self._check_file_absent(under_test_dir, os.path.join(subrepo_path,
+ self._check_file_exists(cloned_repo_dir,
+ os.path.join(subrepo_path, README_NAME))
+ self._check_file_absent(cloned_repo_dir, os.path.join(subrepo_path,
'simple_subdir',
'subdir_file.txt'))
@@ -1438,42 +1419,27 @@ class TestSysCheckoutSVN(BaseTestSysCheckout):
"""
- def _check_svn_branch_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/svn_branch'.format(directory)
- self._check_generic_ok_clean_required(tree, name)
-
- def _check_svn_branch_dirty(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/svn_branch'.format(directory)
- self._check_generic_ok_dirty_required(tree, name)
-
- def _check_svn_tag_ok(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/svn_tag'.format(directory)
- self._check_generic_ok_clean_required(tree, name)
-
- def _check_svn_tag_modified(self, tree, directory=EXTERNALS_NAME):
- name = './{0}/svn_tag'.format(directory)
- self._check_generic_modified_ok_required(tree, name)
-
- def _check_container_simple_svn_post_checkout(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_svn_branch_ok(tree)
- self._check_svn_tag_ok(tree)
-
- def _check_container_simple_svn_sb_dirty_st_mod(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_svn_tag_modified(tree)
- self._check_svn_branch_dirty(tree)
+ @staticmethod
+ def _svn_branch_name():
+ return './{0}/svn_branch'.format(EXTERNALS_PATH)
- def _check_container_simple_svn_sb_clean_st_mod(self, overall, tree):
- self.assertEqual(overall, 0)
- self._check_simple_tag_ok(tree)
- self._check_svn_tag_modified(tree)
- self._check_svn_branch_ok(tree)
+ @staticmethod
+ def _svn_tag_name():
+ return './{0}/svn_tag'.format(EXTERNALS_PATH)
+
+ def _check_tag_branch_svn_tag_clean(self, tree):
+ self._check_sync_clean(tree[self._external_path(TAG_SECTION)],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._svn_branch_name()],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
+ self._check_sync_clean(tree[self._svn_tag_name()],
+ ExternalStatus.STATUS_OK,
+ ExternalStatus.STATUS_OK)
@staticmethod
- def have_svn_access():
+ def _have_svn_access():
"""Check if we have svn access so we can enable tests that use svn.
"""
@@ -1486,10 +1452,10 @@ def have_svn_access():
pass
return have_svn
- def skip_if_no_svn_access(self):
+ def _skip_if_no_svn_access(self):
"""Function decorator to disable svn tests when svn isn't available
"""
- have_svn = self.have_svn_access()
+ have_svn = self._have_svn_access()
if not have_svn:
raise unittest.SkipTest("No svn access")
@@ -1497,60 +1463,55 @@ def test_container_simple_svn(self):
"""Verify that a container repo can pull in an svn branch and svn tag.
"""
- self.skip_if_no_svn_access()
+ self._skip_if_no_svn_access()
# create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_svn(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
+ self._generator.create_config()
+ # Git repo.
+ self._generator.create_section(SIMPLE_REPO, TAG_SECTION, tag='tag1')
- # verify status is clean and unmodified
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_svn_post_checkout(overall, tree)
+ # Svn repos.
+ self._generator.create_svn_external('svn_branch', branch='trunk')
+ self._generator.create_svn_external('svn_tag', tag='tags/cesm2.0.beta07')
+
+ self._generator.write_config(cloned_repo_dir)
+
+ # checkout, make sure all sections are clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_tag_branch_svn_tag_clean(tree)
# update description file to make the tag into a branch and
# trigger a switch
- self._generator.update_svn_branch(under_test_dir, 'svn_tag', 'trunk')
+ self._generator.write_with_svn_branch(cloned_repo_dir, 'svn_tag',
+ 'trunk')
- # checkout
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
-
- # verify status is clean and unmodified
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.status_args)
- self._check_container_simple_svn_post_checkout(overall, tree)
+ # checkout, again the results should be clean.
+ tree = self.execute_checkout_with_status(cloned_repo_dir,
+ self.checkout_args)
+ self._check_tag_branch_svn_tag_clean(tree)
# add an untracked file to the repo
tracked = False
- self._add_file_to_repo(under_test_dir,
- 'externals/svn_branch/tmp.txt', tracked)
+ RepoUtils.add_file_to_repo(cloned_repo_dir,
+ 'externals/svn_branch/tmp.txt', tracked)
- # run a no-op checkout: pre-checkout status should be clean,
- # ignoring the untracked file.
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_svn_post_checkout(overall, tree)
+ # run a no-op checkout.
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
# update description file to make the branch into a tag and
# trigger a modified sync status
- self._generator.update_svn_branch(under_test_dir, 'svn_tag',
- 'tags/cesm2.0.beta07')
+ self._generator.write_with_svn_branch(cloned_repo_dir, 'svn_tag',
+ 'tags/cesm2.0.beta07')
- # checkout: pre-checkout status should be clean and modified,
- # will modify working copy.
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.checkout_args)
- self._check_container_simple_svn_sb_clean_st_mod(overall, tree)
+ self.execute_checkout_in_dir(cloned_repo_dir,self.checkout_args)
# verify status is still clean and unmodified, last
# checkout modified the working dir state.
- overall, tree = self.execute_cmd_in_dir(under_test_dir,
- self.verbose_args)
- self._check_container_simple_svn_post_checkout(overall, tree)
+ tree = self.execute_checkout_in_dir(cloned_repo_dir,
+ self.verbose_args)
+ self._check_tag_branch_svn_tag_clean(tree)
class TestSubrepoCheckout(BaseTestSysCheckout):
# Need to store information at setUp time for checking
@@ -1569,7 +1530,7 @@ def setUp(self):
"""
# Run the basic setup
- super(TestSubrepoCheckout, self).setUp()
+ super().setUp()
# create test repo
# We need to do this here (rather than have a static repo) because
# git submodules do not allow for variables in .gitmodules files
@@ -1577,19 +1538,19 @@ def setUp(self):
self._bare_branch_name = 'subrepo_branch'
self._config_branch_name = 'subrepo_config_branch'
self._container_extern_name = 'externals_container.cfg'
- self._my_test_dir = os.path.join(os.environ[MANIC_TEST_TMP_REPO_ROOT],
- self._test_id)
+ self._my_test_dir = os.path.join(module_tmp_root_dir, self._test_id)
self._repo_dir = os.path.join(self._my_test_dir, self._test_repo_name)
self._checkout_dir = 'repo_with_submodules'
- check_dir = self.setup_test_repo(CONTAINER_REPO_NAME,
+ check_dir = self.clone_test_repo(CONTAINER_REPO,
dest_dir_in=self._repo_dir)
self.assertTrue(self._repo_dir == check_dir)
# Add the submodules
cwd = os.getcwd()
- fork_repo_dir = os.path.join(self._bare_root, SIMPLE_FORK_NAME)
- simple_repo_dir = os.path.join(self._bare_root, SIMPLE_REPO_NAME)
- self._simple_ext_fork_name = SIMPLE_FORK_NAME.split('.')[0]
- self._simple_ext_name = SIMPLE_REPO_NAME.split('.')[0]
+ fork_repo_dir = os.path.join(self._bare_root, SIMPLE_FORK_REPO)
+ simple_repo_dir = os.path.join(self._bare_root, SIMPLE_REPO)
+ self._simple_ext_fork_name = os.path.splitext(SIMPLE_FORK_REPO)[0]
+ self._simple_ext_name = os.path.join('sourc',
+ os.path.splitext(SIMPLE_REPO)[0])
os.chdir(self._repo_dir)
# Add a branch with a subrepo
cmd = ['git', 'branch', self._bare_branch_name, 'master']
@@ -1610,7 +1571,8 @@ def setUp(self):
execute_subprocess(cmd)
cmd = ['git', 'checkout', self._config_branch_name]
execute_subprocess(cmd)
- cmd = ['git', 'submodule', 'add', simple_repo_dir]
+ cmd = ['git', 'submodule', 'add', '--name', SIMPLE_REPO,
+ simple_repo_dir, self._simple_ext_name]
execute_subprocess(cmd)
# Checkout feature2
os.chdir(self._simple_ext_name)
@@ -1621,8 +1583,8 @@ def setUp(self):
# Save the fork repo hash for comparison
self._simple_hash_check = self.get_git_hash()
os.chdir(self._repo_dir)
- self.create_externals_file(filename=self._container_extern_name,
- dest_dir=self._repo_dir, from_submodule=True)
+ self.write_externals_config(filename=self._container_extern_name,
+ dest_dir=self._repo_dir, from_submodule=True)
cmd = ['git', 'add', self._container_extern_name]
execute_subprocess(cmd)
cmd = ['git', 'commit', '-am', "'Added simple-ext as a submodule'"]
@@ -1639,9 +1601,10 @@ def get_git_hash(revision="HEAD"):
git_out = execute_subprocess(cmd, output_to_caller=True)
return git_out.strip()
- def create_externals_file(self, name='', filename=CFG_NAME, dest_dir=None,
- branch_name=None, sub_externals=None,
- from_submodule=False):
+ def write_externals_config(self, name='', dest_dir=None,
+ filename=CFG_NAME,
+ branch_name=None, sub_externals=None,
+ from_submodule=False):
# pylint: disable=too-many-arguments
"""Create a container externals file with only simple externals.
@@ -1652,10 +1615,10 @@ def create_externals_file(self, name='', filename=CFG_NAME, dest_dir=None,
dest_dir = self._my_test_dir
if from_submodule:
- self._generator.create_section(SIMPLE_FORK_NAME,
+ self._generator.create_section(SIMPLE_FORK_REPO,
self._simple_ext_fork_name,
from_submodule=True)
- self._generator.create_section(SIMPLE_REPO_NAME,
+ self._generator.create_section(SIMPLE_REPO,
self._simple_ext_name,
branch='feature3', path='',
from_submodule=False)
@@ -1666,8 +1629,8 @@ def create_externals_file(self, name='', filename=CFG_NAME, dest_dir=None,
self._generator.create_section(self._test_repo_name,
self._checkout_dir,
branch=branch_name,
- path=name, externals=sub_externals,
- repo_path=self._repo_dir)
+ path=name, sub_externals=sub_externals,
+ repo_path_abs=self._repo_dir)
self._generator.write_config(dest_dir, filename=filename)
@@ -1676,12 +1639,10 @@ def idempotence_check(self, checkout_dir):
checkout_externals --status does not cause errors"""
cwd = os.getcwd()
os.chdir(checkout_dir)
- overall, _ = self.execute_cmd_in_dir(self._my_test_dir,
- self.checkout_args)
- self.assertTrue(overall == 0)
- overall, _ = self.execute_cmd_in_dir(self._my_test_dir,
- self.status_args)
- self.assertTrue(overall == 0)
+ self.execute_checkout_in_dir(self._my_test_dir,
+ self.checkout_args)
+ self.execute_checkout_in_dir(self._my_test_dir,
+ self.status_args)
os.chdir(cwd)
def test_submodule_checkout_bare(self):
@@ -1693,17 +1654,17 @@ def test_submodule_checkout_bare(self):
"""
simple_ext_fork_tag = "(tag1)"
simple_ext_fork_status = " "
- self.create_externals_file(branch_name=self._bare_branch_name)
- overall, _ = self.execute_cmd_in_dir(self._my_test_dir,
- self.checkout_args)
- self.assertTrue(overall == 0)
+ self.write_externals_config(branch_name=self._bare_branch_name)
+ self.execute_checkout_in_dir(self._my_test_dir,
+ self.checkout_args)
cwd = os.getcwd()
checkout_dir = os.path.join(self._my_test_dir, self._checkout_dir)
fork_file = os.path.join(checkout_dir,
self._simple_ext_fork_name, "readme.txt")
self.assertTrue(os.path.exists(fork_file))
- os.chdir(checkout_dir)
+
submods = git_submodule_status(checkout_dir)
+ print('checking status of', checkout_dir, ':', submods)
self.assertEqual(len(submods.keys()), 1)
self.assertTrue(self._simple_ext_fork_name in submods)
submod = submods[self._simple_ext_fork_name]
@@ -1713,7 +1674,6 @@ def test_submodule_checkout_bare(self):
self.assertEqual(submod['status'], simple_ext_fork_status)
self.assertTrue('tag' in submod)
self.assertEqual(submod['tag'], simple_ext_fork_tag)
- os.chdir(cwd)
self.idempotence_check(checkout_dir)
def test_submodule_checkout_none(self):
@@ -1722,11 +1682,10 @@ def test_submodule_checkout_none(self):
externals cfg file.
Correct behavior is the submodle is not checked out.
"""
- self.create_externals_file(branch_name=self._bare_branch_name,
- sub_externals="none")
- overall, _ = self.execute_cmd_in_dir(self._my_test_dir,
- self.checkout_args)
- self.assertTrue(overall == 0)
+ self.write_externals_config(branch_name=self._bare_branch_name,
+ sub_externals="none")
+ self.execute_checkout_in_dir(self._my_test_dir,
+ self.checkout_args)
cwd = os.getcwd()
checkout_dir = os.path.join(self._my_test_dir, self._checkout_dir)
fork_file = os.path.join(checkout_dir,
@@ -1744,11 +1703,10 @@ def test_submodule_checkout_config(self): # pylint: disable=too-many-locals
"""
tag_check = None # Not checked out as submodule
status_check = "-" # Not checked out as submodule
- self.create_externals_file(branch_name=self._config_branch_name,
- sub_externals=self._container_extern_name)
- overall, _ = self.execute_cmd_in_dir(self._my_test_dir,
- self.checkout_args)
- self.assertTrue(overall == 0)
+ self.write_externals_config(branch_name=self._config_branch_name,
+ sub_externals=self._container_extern_name)
+ self.execute_checkout_in_dir(self._my_test_dir,
+ self.checkout_args)
cwd = os.getcwd()
checkout_dir = os.path.join(self._my_test_dir, self._checkout_dir)
fork_file = os.path.join(checkout_dir,
@@ -1810,17 +1768,20 @@ def test_error_unknown_protocol(self):
"""
# create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
# update the config file to point to a different remote with
# the tag instead of branch. Tag MUST NOT be in the original
# repo!
- self._generator.update_protocol(under_test_dir, 'simp_branch',
- 'this-protocol-does-not-exist')
+ self._generator.write_with_protocol(cloned_repo_dir, BRANCH_SECTION,
+ 'this-protocol-does-not-exist')
with self.assertRaises(RuntimeError):
- self.execute_cmd_in_dir(under_test_dir, self.checkout_args)
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
def test_error_switch_protocol(self):
"""Verify that a runtime error is raised when the user switches
@@ -1831,15 +1792,18 @@ def test_error_switch_protocol(self):
"""
# create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
# update the config file to point to a different remote with
# the tag instead of branch. Tag MUST NOT be in the original
# repo!
- self._generator.update_protocol(under_test_dir, 'simp_branch', 'svn')
+ self._generator.write_with_protocol(cloned_repo_dir, BRANCH_SECTION, 'svn')
with self.assertRaises(RuntimeError):
- self.execute_cmd_in_dir(under_test_dir, self.checkout_args)
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
def test_error_unknown_tag(self):
"""Verify that a runtime error is raised when the user specified tag
@@ -1847,17 +1811,21 @@ def test_error_unknown_tag(self):
"""
# create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
# update the config file to point to a different remote with
# the tag instead of branch. Tag MUST NOT be in the original
# repo!
- self._generator.update_tag(under_test_dir, 'simp_branch',
- 'this-tag-does-not-exist', SIMPLE_REPO_NAME)
+ self._generator.write_with_tag_and_remote_repo(cloned_repo_dir, BRANCH_SECTION,
+ tag='this-tag-does-not-exist',
+ new_remote_repo_path=SIMPLE_REPO)
with self.assertRaises(RuntimeError):
- self.execute_cmd_in_dir(under_test_dir, self.checkout_args)
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
def test_error_overspecify_tag_branch(self):
"""Verify that a runtime error is raised when the user specified both
@@ -1865,18 +1833,22 @@ def test_error_overspecify_tag_branch(self):
"""
# create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
# update the config file to point to a different remote with
# the tag instead of branch. Tag MUST NOT be in the original
# repo!
- self._generator.update_tag(under_test_dir, 'simp_branch',
- 'this-tag-does-not-exist', SIMPLE_REPO_NAME,
- remove_branch=False)
+ self._generator.write_with_tag_and_remote_repo(cloned_repo_dir, BRANCH_SECTION,
+ tag='this-tag-does-not-exist',
+ new_remote_repo_path=SIMPLE_REPO,
+ remove_branch=False)
with self.assertRaises(RuntimeError):
- self.execute_cmd_in_dir(under_test_dir, self.checkout_args)
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
def test_error_underspecify_tag_branch(self):
"""Verify that a runtime error is raised when the user specified
@@ -1884,17 +1856,19 @@ def test_error_underspecify_tag_branch(self):
"""
# create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
# update the config file to point to a different remote with
# the tag instead of branch. Tag MUST NOT be in the original
# repo!
- self._generator.update_underspecify_branch_tag(under_test_dir,
- 'simp_branch')
+ self._generator.write_without_branch_tag(cloned_repo_dir, BRANCH_SECTION)
with self.assertRaises(RuntimeError):
- self.execute_cmd_in_dir(under_test_dir, self.checkout_args)
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
def test_error_missing_url(self):
"""Verify that a runtime error is raised when the user specified
@@ -1902,17 +1876,20 @@ def test_error_missing_url(self):
"""
# create repo
- under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME)
- self._generator.container_simple_required(under_test_dir)
+ cloned_repo_dir = self.clone_test_repo(CONTAINER_REPO)
+ self._generator.create_config()
+ self._generator.create_section(SIMPLE_REPO, BRANCH_SECTION,
+ branch=REMOTE_BRANCH_FEATURE2)
+ self._generator.write_config(cloned_repo_dir)
# update the config file to point to a different remote with
# the tag instead of branch. Tag MUST NOT be in the original
# repo!
- self._generator.update_underspecify_remove_url(under_test_dir,
- 'simp_branch')
+ self._generator.write_without_repo_url(cloned_repo_dir,
+ BRANCH_SECTION)
with self.assertRaises(RuntimeError):
- self.execute_cmd_in_dir(under_test_dir, self.checkout_args)
+ self.execute_checkout_in_dir(cloned_repo_dir, self.checkout_args)
if __name__ == '__main__':
diff --git a/manage_externals/test/test_sys_repository_git.py b/manage_externals/test/test_sys_repository_git.py
index f6dbf84284..7e5fb5020d 100644
--- a/manage_externals/test/test_sys_repository_git.py
+++ b/manage_externals/test/test_sys_repository_git.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Tests of some of the functionality in repository_git.py that actually
interacts with git repositories.
@@ -131,12 +131,12 @@ def tearDown(self):
shutil.rmtree(self._tmpdir, ignore_errors=True)
@staticmethod
- def make_git_repo():
+ def make_cwd_git_repo():
"""Turn the current directory into an empty git repository"""
execute_subprocess(['git', 'init'])
@staticmethod
- def add_git_commit():
+ def add_cwd_git_commit():
"""Add a git commit in the current directory"""
with open('README', 'a') as myfile:
myfile.write('more info')
@@ -144,17 +144,17 @@ def add_git_commit():
execute_subprocess(['git', 'commit', '-m', 'my commit message'])
@staticmethod
- def checkout_git_branch(branchname):
+ def checkout_cwd_git_branch(branchname):
"""Checkout a new branch in the current directory"""
execute_subprocess(['git', 'checkout', '-b', branchname])
@staticmethod
- def make_git_tag(tagname):
+ def make_cwd_git_tag(tagname):
"""Make a lightweight tag at the current commit"""
execute_subprocess(['git', 'tag', '-m', 'making a tag', tagname])
@staticmethod
- def checkout_ref(refname):
+ def checkout_cwd_ref(refname):
"""Checkout the given refname in the current directory"""
execute_subprocess(['git', 'checkout', refname])
@@ -164,72 +164,72 @@ def checkout_ref(refname):
def test_currentHash_returnsHash(self):
"""Ensure that the _git_current_hash function returns a hash"""
- self.make_git_repo()
- self.add_git_commit()
- hash_found, myhash = self._repo._git_current_hash()
+ self.make_cwd_git_repo()
+ self.add_cwd_git_commit()
+ hash_found, myhash = self._repo._git_current_hash(os.getcwd())
self.assertTrue(hash_found)
self.assertIsHash(myhash)
def test_currentHash_outsideGitRepo(self):
"""Ensure that the _git_current_hash function returns False when
outside a git repository"""
- hash_found, myhash = self._repo._git_current_hash()
+ hash_found, myhash = self._repo._git_current_hash(os.getcwd())
self.assertFalse(hash_found)
self.assertEqual('', myhash)
def test_currentBranch_onBranch(self):
"""Ensure that the _git_current_branch function returns the name
of the branch"""
- self.make_git_repo()
- self.add_git_commit()
- self.checkout_git_branch('foo')
- branch_found, mybranch = self._repo._git_current_branch()
+ self.make_cwd_git_repo()
+ self.add_cwd_git_commit()
+ self.checkout_cwd_git_branch('foo')
+ branch_found, mybranch = self._repo._git_current_branch(os.getcwd())
self.assertTrue(branch_found)
self.assertEqual('foo', mybranch)
def test_currentBranch_notOnBranch(self):
"""Ensure that the _git_current_branch function returns False
when not on a branch"""
- self.make_git_repo()
- self.add_git_commit()
- self.make_git_tag('mytag')
- self.checkout_ref('mytag')
- branch_found, mybranch = self._repo._git_current_branch()
+ self.make_cwd_git_repo()
+ self.add_cwd_git_commit()
+ self.make_cwd_git_tag('mytag')
+ self.checkout_cwd_ref('mytag')
+ branch_found, mybranch = self._repo._git_current_branch(os.getcwd())
self.assertFalse(branch_found)
self.assertEqual('', mybranch)
def test_currentBranch_outsideGitRepo(self):
"""Ensure that the _git_current_branch function returns False
when outside a git repository"""
- branch_found, mybranch = self._repo._git_current_branch()
+ branch_found, mybranch = self._repo._git_current_branch(os.getcwd())
self.assertFalse(branch_found)
self.assertEqual('', mybranch)
def test_currentTag_onTag(self):
"""Ensure that the _git_current_tag function returns the name of
the tag"""
- self.make_git_repo()
- self.add_git_commit()
- self.make_git_tag('some_tag')
- tag_found, mytag = self._repo._git_current_tag()
+ self.make_cwd_git_repo()
+ self.add_cwd_git_commit()
+ self.make_cwd_git_tag('some_tag')
+ tag_found, mytag = self._repo._git_current_tag(os.getcwd())
self.assertTrue(tag_found)
self.assertEqual('some_tag', mytag)
def test_currentTag_notOnTag(self):
"""Ensure tha the _git_current_tag function returns False when
not on a tag"""
- self.make_git_repo()
- self.add_git_commit()
- self.make_git_tag('some_tag')
- self.add_git_commit()
- tag_found, mytag = self._repo._git_current_tag()
+ self.make_cwd_git_repo()
+ self.add_cwd_git_commit()
+ self.make_cwd_git_tag('some_tag')
+ self.add_cwd_git_commit()
+ tag_found, mytag = self._repo._git_current_tag(os.getcwd())
self.assertFalse(tag_found)
self.assertEqual('', mytag)
def test_currentTag_outsideGitRepo(self):
"""Ensure that the _git_current_tag function returns False when
outside a git repository"""
- tag_found, mytag = self._repo._git_current_tag()
+ tag_found, mytag = self._repo._git_current_tag(os.getcwd())
self.assertFalse(tag_found)
self.assertEqual('', mytag)
diff --git a/manage_externals/test/test_unit_externals_description.py b/manage_externals/test/test_unit_externals_description.py
index 637f760ee5..30e5288499 100644
--- a/manage_externals/test/test_unit_externals_description.py
+++ b/manage_externals/test/test_unit_externals_description.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Unit test driver for checkout_externals
@@ -342,6 +342,40 @@ def setup_config(self):
# NOTE(goldy, 2019-03) Should test other possible keywords such as
# fetchRecurseSubmodules, ignore, and shallow
+ @staticmethod
+ def setup_dict_config():
+ """Create the full container dictionary with simple and mixed use
+ externals
+
+ """
+ rdatat = {ExternalsDescription.PROTOCOL: 'git',
+ ExternalsDescription.REPO_URL: 'simple-ext.git',
+ ExternalsDescription.TAG: 'tag1'}
+ rdatab = {ExternalsDescription.PROTOCOL: 'git',
+ ExternalsDescription.REPO_URL: 'simple-ext.git',
+ ExternalsDescription.BRANCH: 'feature2'}
+ rdatam = {ExternalsDescription.PROTOCOL: 'git',
+ ExternalsDescription.REPO_URL: 'mixed-cont-ext.git',
+ ExternalsDescription.BRANCH: 'master'}
+ desc = {'simp_tag': {ExternalsDescription.REQUIRED: True,
+ ExternalsDescription.PATH: 'simp_tag',
+ ExternalsDescription.EXTERNALS: EMPTY_STR,
+ ExternalsDescription.REPO: rdatat},
+ 'simp_branch' : {ExternalsDescription.REQUIRED: True,
+ ExternalsDescription.PATH: 'simp_branch',
+ ExternalsDescription.EXTERNALS: EMPTY_STR,
+ ExternalsDescription.REPO: rdatab},
+ 'simp_opt': {ExternalsDescription.REQUIRED: False,
+ ExternalsDescription.PATH: 'simp_opt',
+ ExternalsDescription.EXTERNALS: EMPTY_STR,
+ ExternalsDescription.REPO: rdatat},
+ 'mixed_req': {ExternalsDescription.REQUIRED: True,
+ ExternalsDescription.PATH: 'mixed_req',
+ ExternalsDescription.EXTERNALS: 'sub-ext.cfg',
+ ExternalsDescription.REPO: rdatam}}
+
+ return desc
+
def test_cfg_v1_ok(self):
"""Test that a correct cfg v1 object is created by create_externals_description
@@ -379,6 +413,49 @@ def test_dict(self):
ext = create_externals_description(desc, model_format='dict')
self.assertIsInstance(ext, ExternalsDescriptionDict)
+ def test_cfg_component_dict(self):
+ """Verify that create_externals_description works with a dictionary
+ """
+ # create the top level externals file
+ desc = self.setup_dict_config()
+ # Check external with all repos
+ external = create_externals_description(desc, model_format='dict')
+ self.assertIsInstance(external, ExternalsDescriptionDict)
+ self.assertTrue('simp_tag' in external)
+ self.assertTrue('simp_branch' in external)
+ self.assertTrue('simp_opt' in external)
+ self.assertTrue('mixed_req' in external)
+
+ def test_cfg_exclude_component_dict(self):
+ """Verify that exclude component checkout works with a dictionary
+ """
+ # create the top level externals file
+ desc = self.setup_dict_config()
+ # Test an excluded repo
+ external = create_externals_description(desc, model_format='dict',
+ exclude=['simp_tag',
+ 'simp_opt'])
+ self.assertIsInstance(external, ExternalsDescriptionDict)
+ self.assertFalse('simp_tag' in external)
+ self.assertTrue('simp_branch' in external)
+ self.assertFalse('simp_opt' in external)
+ self.assertTrue('mixed_req' in external)
+
+ def test_cfg_opt_component_dict(self):
+ """Verify that exclude component checkout works with a dictionary
+ """
+ # create the top level externals file
+ desc = self.setup_dict_config()
+ # Test an excluded repo
+ external = create_externals_description(desc, model_format='dict',
+ components=['simp_tag',
+ 'simp_opt'])
+ self.assertIsInstance(external, ExternalsDescriptionDict)
+ self.assertTrue('simp_tag' in external)
+ self.assertFalse('simp_branch' in external)
+ self.assertTrue('simp_opt' in external)
+ self.assertFalse('mixed_req' in external)
+
def test_cfg_unknown_version(self):
"""Test that a runtime error is raised when an unknown file version is
received
diff --git a/manage_externals/test/test_unit_externals_status.py b/manage_externals/test/test_unit_externals_status.py
index f8e953f756..f019514e9e 100644
--- a/manage_externals/test/test_unit_externals_status.py
+++ b/manage_externals/test/test_unit_externals_status.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Unit test driver for the manic external status reporting module.
diff --git a/manage_externals/test/test_unit_repository.py b/manage_externals/test/test_unit_repository.py
index 5b9c242fd3..1b93861834 100644
--- a/manage_externals/test/test_unit_repository.py
+++ b/manage_externals/test/test_unit_repository.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Unit test driver for checkout_externals
diff --git a/manage_externals/test/test_unit_repository_git.py b/manage_externals/test/test_unit_repository_git.py
index 4a0a334bb1..1c01098acf 100644
--- a/manage_externals/test/test_unit_repository_git.py
+++ b/manage_externals/test/test_unit_repository_git.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Unit test driver for checkout_externals
@@ -67,7 +67,7 @@ def setUp(self):
def _git_current_branch(branch_found, branch_name):
"""Return a function that takes the place of
repo._git_current_branch, which returns the given output."""
- def my_git_current_branch():
+ def my_git_current_branch(dirname):
"""mock function that can take the place of repo._git_current_branch"""
return branch_found, branch_name
return my_git_current_branch
@@ -76,7 +76,7 @@ def my_git_current_branch():
def _git_current_tag(tag_found, tag_name):
"""Return a function that takes the place of
repo._git_current_tag, which returns the given output."""
- def my_git_current_tag():
+ def my_git_current_tag(dirname):
"""mock function that can take the place of repo._git_current_tag"""
return tag_found, tag_name
return my_git_current_tag
@@ -85,7 +85,7 @@ def my_git_current_tag():
def _git_current_hash(hash_found, hash_name):
"""Return a function that takes the place of
repo._git_current_hash, which returns the given output."""
- def my_git_current_hash():
+ def my_git_current_hash(dirname):
"""mock function that can take the place of repo._git_current_hash"""
return hash_found, hash_name
return my_git_current_hash
@@ -101,8 +101,8 @@ def test_ref_branch(self):
True, 'feature3')
self._repo._git_current_tag = self._git_current_tag(True, 'foo_tag')
self._repo._git_current_hash = self._git_current_hash(True, 'abc123')
- expected = 'feature3'
- result = self._repo._current_ref()
+ expected = 'foo_tag (branch feature3)'
+ result = self._repo._current_ref(os.getcwd())
self.assertEqual(result, expected)
def test_ref_detached_tag(self):
@@ -112,7 +112,7 @@ def test_ref_detached_tag(self):
self._repo._git_current_tag = self._git_current_tag(True, 'foo_tag')
self._repo._git_current_hash = self._git_current_hash(True, 'abc123')
expected = 'foo_tag'
- result = self._repo._current_ref()
+ result = self._repo._current_ref(os.getcwd())
self.assertEqual(result, expected)
def test_ref_detached_hash(self):
@@ -123,7 +123,7 @@ def test_ref_detached_hash(self):
self._repo._git_current_tag = self._git_current_tag(False, '')
self._repo._git_current_hash = self._git_current_hash(True, 'abc123')
expected = 'abc123'
- result = self._repo._current_ref()
+ result = self._repo._current_ref(os.getcwd())
self.assertEqual(result, expected)
def test_ref_none(self):
@@ -132,7 +132,7 @@ def test_ref_none(self):
self._repo._git_current_branch = self._git_current_branch(False, '')
self._repo._git_current_tag = self._git_current_tag(False, '')
self._repo._git_current_hash = self._git_current_hash(False, '')
- result = self._repo._current_ref()
+ result = self._repo._current_ref(os.getcwd())
self.assertEqual(result, EMPTY_STR)
@@ -206,11 +206,19 @@ def setUp(self):
self._repo._current_ref = self._current_ref_empty
self._create_tmp_git_dir()
+ # We have to override this class method rather than the self._repo
+ # instance method because it is called via
+ # GitRepository._remote_name_for_url, which is itself a @classmethod
+ # calls cls._git_remote_verbose().
+ self._orignal_git_remote_verbose = GitRepository._git_remote_verbose
+ GitRepository._git_remote_verbose = self._git_remote_origin_upstream
def tearDown(self):
"""Cleanup tmp stuff on the file system
"""
self._remove_tmp_git_dir()
+ GitRepository._git_remote_verbose = self._orignal_git_remote_verbose
+
def _create_tmp_git_dir(self):
"""Create a temporary fake git directory for testing purposes.
"""
@@ -227,29 +235,27 @@ def _remove_tmp_git_dir(self):
# mock methods replacing git system calls
#
@staticmethod
- def _current_ref_empty():
+ def _current_ref_empty(dirname):
"""Return an empty string.
+
+ Drop-in for GitRepository._current_ref
"""
return EMPTY_STR
@staticmethod
- def _git_remote_origin_upstream():
- """Return an info string that is a checkout hash
- """
- return GIT_REMOTE_OUTPUT_ORIGIN_UPSTREAM
+ def _git_remote_origin_upstream(dirname):
+ """Return an info string that is a checkout hash.
- @staticmethod
- def _git_remote_none():
- """Return an info string that is a checkout hash
+ Drop-in for GitRepository._git_remote_verbose.
"""
- return EMPTY_STR
+ return GIT_REMOTE_OUTPUT_ORIGIN_UPSTREAM
@staticmethod
def _git_current_hash(myhash):
"""Return a function that takes the place of repo._git_current_hash,
which returns the given hash
"""
- def my_git_current_hash():
+ def my_git_current_hash(dirname):
"""mock function that can take the place of repo._git_current_hash"""
return 0, myhash
return my_git_current_hash
@@ -263,7 +269,7 @@ def _git_revparse_commit(self, expected_ref, mystatus, myhash):
status = 0 implies success, non-zero implies failure
"""
- def my_git_revparse_commit(ref):
+ def my_git_revparse_commit(ref, dirname):
"""mock function that can take the place of repo._git_revparse_commit"""
self.assertEqual(expected_ref, ref)
return mystatus, myhash
@@ -291,9 +297,6 @@ def test_sync_dir_exist_no_git_info(self):
"""Test that a non-existent git repo returns an unknown status
"""
stat = ExternalStatus()
- # Now we over-ride the _git_remote_verbose method on the repo to return
- # a known value without requiring access to git.
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._tag = 'tag1'
self._repo._git_current_hash = self._git_current_hash('')
self._repo._git_revparse_commit = self._git_revparse_commit(
@@ -313,7 +316,6 @@ def test_sync_invalid_reference(self):
"""Test that an invalid reference returns out-of-sync
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._tag = 'tag1'
self._repo._git_current_hash = self._git_current_hash('abc123')
self._repo._git_revparse_commit = self._git_revparse_commit(
@@ -333,7 +335,6 @@ def test_sync_tag_on_same_hash(self):
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._tag = 'tag1'
self._repo._git_current_hash = self._git_current_hash('abc123')
self._repo._git_revparse_commit = self._git_revparse_commit(
@@ -348,7 +349,6 @@ def test_sync_tag_on_different_hash(self):
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._tag = 'tag1'
self._repo._git_current_hash = self._git_current_hash('def456')
self._repo._git_revparse_commit = self._git_revparse_commit(
@@ -368,7 +368,6 @@ def test_sync_hash_on_same_hash(self):
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._tag = ''
self._repo._hash = 'abc'
self._repo._git_current_hash = self._git_current_hash('abc123')
@@ -384,7 +383,6 @@ def test_sync_hash_on_different_hash(self):
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._tag = ''
self._repo._hash = 'abc'
self._repo._git_current_hash = self._git_current_hash('def456')
@@ -405,7 +403,6 @@ def test_sync_branch_on_same_hash(self):
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._branch = 'feature-2'
self._repo._tag = ''
self._repo._git_current_hash = self._git_current_hash('abc123')
@@ -421,7 +418,6 @@ def test_sync_branch_on_diff_hash(self):
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._branch = 'feature-2'
self._repo._tag = ''
self._repo._git_current_hash = self._git_current_hash('abc123')
@@ -433,11 +429,10 @@ def test_sync_branch_on_diff_hash(self):
self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT)
def test_sync_branch_diff_remote(self):
- """Test _determine_remote_name with a different remote
+ """Test _remote_name_for_url with a different remote
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._branch = 'feature-2'
self._repo._tag = ''
self._repo._url = '/path/to/other/repo'
@@ -449,11 +444,10 @@ def test_sync_branch_diff_remote(self):
# expected argument
def test_sync_branch_diff_remote2(self):
- """Test _determine_remote_name with a different remote
+ """Test _remote_name_for_url with a different remote
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._branch = 'feature-2'
self._repo._tag = ''
self._repo._url = '/path/to/local/repo2'
@@ -469,7 +463,6 @@ def test_sync_branch_on_unknown_remote(self):
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._branch = 'feature-2'
self._repo._tag = ''
self._repo._url = '/path/to/unknown/repo'
@@ -491,7 +484,6 @@ def test_sync_branch_on_untracked_local(self):
"""
stat = ExternalStatus()
- self._repo._git_remote_verbose = self._git_remote_origin_upstream
self._repo._branch = 'feature3'
self._repo._tag = ''
self._repo._url = '.'
@@ -611,24 +603,20 @@ def setUp(self):
self._repo = GitRepository('test', repo)
@staticmethod
- def _shell_true(url, remote=None):
- _ = url
- _ = remote
+ def _shell_true(*args, **kwargs):
return 0
@staticmethod
- def _shell_false(url, remote=None):
- _ = url
- _ = remote
+ def _shell_false(*args, **kwargs):
return 1
@staticmethod
- def _mock_function_true(ref):
+ def _mock_revparse_commit(ref, dirname):
_ = ref
return (TestValidRef._shell_true, '97ebc0e0deadc0de')
@staticmethod
- def _mock_function_false(ref):
+ def _mock_revparse_commit_false(ref, dirname):
_ = ref
return (TestValidRef._shell_false, '97ebc0e0deadc0de')
@@ -638,10 +626,11 @@ def test_tag_not_tag_branch_commit(self):
self._repo._git_showref_tag = self._shell_false
self._repo._git_showref_branch = self._shell_false
self._repo._git_lsremote_branch = self._shell_false
- self._repo._git_revparse_commit = self._mock_function_false
+ self._repo._git_revparse_commit = self._mock_revparse_commit_false
self._repo._tag = 'something'
remote_name = 'origin'
- received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name)
+ received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name,
+ os.getcwd())
self.assertFalse(received)
def test_tag_not_tag(self):
@@ -650,10 +639,11 @@ def test_tag_not_tag(self):
self._repo._git_showref_tag = self._shell_false
self._repo._git_showref_branch = self._shell_true
self._repo._git_lsremote_branch = self._shell_true
- self._repo._git_revparse_commit = self._mock_function_false
+ self._repo._git_revparse_commit = self._mock_revparse_commit_false
self._repo._tag = 'tag1'
remote_name = 'origin'
- received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name)
+ received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name,
+ os.getcwd())
self.assertFalse(received)
def test_tag_indeterminant(self):
@@ -662,10 +652,11 @@ def test_tag_indeterminant(self):
self._repo._git_showref_tag = self._shell_true
self._repo._git_showref_branch = self._shell_true
self._repo._git_lsremote_branch = self._shell_true
- self._repo._git_revparse_commit = self._mock_function_true
+ self._repo._git_revparse_commit = self._mock_revparse_commit
self._repo._tag = 'something'
remote_name = 'origin'
- received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name)
+ received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name,
+ os.getcwd())
self.assertFalse(received)
def test_tag_is_unique(self):
@@ -674,10 +665,11 @@ def test_tag_is_unique(self):
self._repo._git_showref_tag = self._shell_true
self._repo._git_showref_branch = self._shell_false
self._repo._git_lsremote_branch = self._shell_false
- self._repo._git_revparse_commit = self._mock_function_true
+ self._repo._git_revparse_commit = self._mock_revparse_commit
self._repo._tag = 'tag1'
remote_name = 'origin'
- received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name)
+ received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name,
+ os.getcwd())
self.assertTrue(received)
def test_tag_is_not_hash(self):
@@ -686,10 +678,11 @@ def test_tag_is_not_hash(self):
self._repo._git_showref_tag = self._shell_false
self._repo._git_showref_branch = self._shell_false
self._repo._git_lsremote_branch = self._shell_false
- self._repo._git_revparse_commit = self._mock_function_true
+ self._repo._git_revparse_commit = self._mock_revparse_commit
self._repo._tag = '97ebc0e0'
remote_name = 'origin'
- received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name)
+ received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name,
+ os.getcwd())
self.assertFalse(received)
def test_hash_is_commit(self):
@@ -698,10 +691,11 @@ def test_hash_is_commit(self):
self._repo._git_showref_tag = self._shell_false
self._repo._git_showref_branch = self._shell_false
self._repo._git_lsremote_branch = self._shell_false
- self._repo._git_revparse_commit = self._mock_function_true
+ self._repo._git_revparse_commit = self._mock_revparse_commit
self._repo._tag = '97ebc0e0'
remote_name = 'origin'
- received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name)
+ received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name,
+ os.getcwd())
self.assertFalse(received)
@@ -746,13 +740,14 @@ def _shell_false(url, remote=None):
return 1
@staticmethod
- def _mock_function_false(ref):
+ def _mock_revparse_commit_false(ref, dirname):
_ = ref
return (TestValidRef._shell_false, '')
@staticmethod
- def _mock_function_true(ref):
+ def _mock_revparse_commit_true(ref, dirname):
_ = ref
+ _ = dirname
return (TestValidRef._shell_true, '')
def test_valid_ref_is_invalid(self):
@@ -761,10 +756,12 @@ def test_valid_ref_is_invalid(self):
self._repo._git_showref_tag = self._shell_false
self._repo._git_showref_branch = self._shell_false
self._repo._git_lsremote_branch = self._shell_false
- self._repo._git_revparse_commit = self._mock_function_false
+ self._repo._git_revparse_commit = self._mock_revparse_commit_false
self._repo._tag = 'invalid_ref'
with self.assertRaises(RuntimeError):
- self._repo._check_for_valid_ref(self._repo._tag)
+ self._repo._check_for_valid_ref(self._repo._tag,
+ remote_name=None,
+ dirname=os.getcwd())
def test_valid_tag(self):
"""Verify a valid tag return true
@@ -772,9 +769,11 @@ def test_valid_tag(self):
self._repo._git_showref_tag = self._shell_true
self._repo._git_showref_branch = self._shell_false
self._repo._git_lsremote_branch = self._shell_false
- self._repo._git_revparse_commit = self._mock_function_true
+ self._repo._git_revparse_commit = self._mock_revparse_commit_true
self._repo._tag = 'tag1'
- received = self._repo._check_for_valid_ref(self._repo._tag)
+ received = self._repo._check_for_valid_ref(self._repo._tag,
+ remote_name=None,
+ dirname=os.getcwd())
self.assertTrue(received)
def test_valid_branch(self):
@@ -783,24 +782,28 @@ def test_valid_branch(self):
self._repo._git_showref_tag = self._shell_false
self._repo._git_showref_branch = self._shell_true
self._repo._git_lsremote_branch = self._shell_false
- self._repo._git_revparse_commit = self._mock_function_true
+ self._repo._git_revparse_commit = self._mock_revparse_commit_true
self._repo._tag = 'tag1'
- received = self._repo._check_for_valid_ref(self._repo._tag)
+ received = self._repo._check_for_valid_ref(self._repo._tag,
+ remote_name=None,
+ dirname=os.getcwd())
self.assertTrue(received)
def test_valid_hash(self):
"""Verify a valid hash return true
"""
- def _mock_revparse_commit(ref):
+ def _mock_revparse_commit_true(ref, dirname):
_ = ref
return (0, '56cc0b539426eb26810af9e')
self._repo._git_showref_tag = self._shell_false
self._repo._git_showref_branch = self._shell_false
self._repo._git_lsremote_branch = self._shell_false
- self._repo._git_revparse_commit = _mock_revparse_commit
+ self._repo._git_revparse_commit = _mock_revparse_commit_true
self._repo._hash = '56cc0b5394'
- received = self._repo._check_for_valid_ref(self._repo._hash)
+ received = self._repo._check_for_valid_ref(self._repo._hash,
+ remote_name=None,
+ dirname=os.getcwd())
self.assertTrue(received)
diff --git a/manage_externals/test/test_unit_repository_svn.py b/manage_externals/test/test_unit_repository_svn.py
old mode 100644
new mode 100755
index 7ff31c4218..d9309df7f6
--- a/manage_externals/test/test_unit_repository_svn.py
+++ b/manage_externals/test/test_unit_repository_svn.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Unit test driver for checkout_externals
@@ -60,7 +60,7 @@ def setUp(self):
self._name = 'component'
rdata = {ExternalsDescription.PROTOCOL: 'svn',
ExternalsDescription.REPO_URL:
- 'https://svn-ccsm-models.cgd.ucar.edu/',
+ 'https://svn-ccsm-models.cgd.ucar.edu',
ExternalsDescription.TAG:
'mosart/trunk_tags/mosart1_0_26',
}
diff --git a/manage_externals/test/test_unit_utils.py b/manage_externals/test/test_unit_utils.py
index c994e58ebe..80e1636649 100644
--- a/manage_externals/test/test_unit_utils.py
+++ b/manage_externals/test/test_unit_utils.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Unit test driver for checkout_externals
diff --git a/src/chemistry/mozart/chemistry.F90 b/src/chemistry/mozart/chemistry.F90
index ddbfd27ce7..ff42e870d9 100644
--- a/src/chemistry/mozart/chemistry.F90
+++ b/src/chemistry/mozart/chemistry.F90
@@ -23,6 +23,7 @@ module chemistry
use mo_apex, only : mo_apex_readnl
use ref_pres, only : ptop_ref
use phys_control, only : waccmx_is ! WACCM-X switch query function
+ use phys_control, only : use_hemco ! HEMCO switch logical
implicit none
private
@@ -79,10 +80,10 @@ module chemistry
character(len=shr_kind_cl) :: depvel_lnd_file = 'depvel_lnd_file'
! emis
-
+ integer, parameter :: max_num_emis_files = max(100,2*pcnst)
character(len=shr_kind_cl) :: airpl_emis_file = '' ! airplane emissions
- character(len=shr_kind_cl) :: srf_emis_specifier(pcnst) = ''
- character(len=shr_kind_cl) :: ext_frc_specifier(pcnst) = ''
+ character(len=shr_kind_cl) :: srf_emis_specifier(max_num_emis_files) = ''
+ character(len=shr_kind_cl) :: ext_frc_specifier(max_num_emis_files) = ''
character(len=24) :: srf_emis_type = 'CYCLICAL' ! 'CYCLICAL' | 'SERIAL' | 'INTERP_MISSING_MONTHS'
integer :: srf_emis_cycle_yr = 0
@@ -131,6 +132,7 @@ module chemistry
logical :: chem_use_chemtrop = .false.
integer :: srf_ozone_pbf_ndx = -1
+ logical :: srf_emis_diag(pcnst) = .false.
!================================================================================================
contains
@@ -639,7 +641,8 @@ subroutine chem_init(phys_state, pbuf2d)
use constituents, only : sflxnam
use fire_emissions, only : fire_emissions_init
use short_lived_species, only : short_lived_species_initic
- use ocean_emis, only : ocean_emis_init
+ use ocean_emis, only : ocean_emis_init, ocean_emis_species
+ use mo_srf_emissions, only : has_emis
type(physics_buffer_desc), pointer :: pbuf2d(:,:)
type(physics_state), intent(in):: phys_state(begchunk:endchunk)
@@ -650,7 +653,7 @@ subroutine chem_init(phys_state, pbuf2d)
!-----------------------------------------------------------------------
integer :: m ! tracer indicies
character(len=fieldname_len) :: spc_name
- integer :: n, ii
+ integer :: n, ii, ierr
logical :: history_aerosol
logical :: history_chemistry
logical :: history_cesm_forcing
@@ -661,6 +664,8 @@ subroutine chem_init(phys_state, pbuf2d)
! liquid budgets.
integer :: history_budget_histfile_num ! output history file number for budget fields
+ character(len=*), parameter :: prefix = 'chem_init: '
+
call phys_getopts( cam_chempkg_out=chem_name, &
history_aerosol_out=history_aerosol , &
history_chemistry_out=history_chemistry , &
@@ -694,42 +699,6 @@ subroutine chem_init(phys_state, pbuf2d)
call addfld( 'HEIGHT', (/ 'ilev' /),'A','m', 'geopotential height above surface at interfaces (m)' )
call addfld( 'CT_H2O_GHG', (/ 'lev' /), 'A','kg/kg/s', 'ghg-chem h2o source/sink' )
-!-----------------------------------------------------------------------
-! Set names of chemistry variable tendencies and declare them as history variables
-!-----------------------------------------------------------------------
- do m = 1,gas_pcnst
- spc_name = solsym(m)
- srcnam(m) = 'CT_' // spc_name ! chem tendancy (source/sink)
-
- call addfld( srcnam(m), (/ 'lev' /), 'A', 'kg/kg/s', trim(spc_name)//' source/sink' )
- call cnst_get_ind(solsym(m), n, abort=.false. )
- if ( n > 0 ) then
-
- if (sflxnam(n)(3:5) == 'num') then ! name is in the form of "SF****"
- unit_basename = ' 1'
- else
- unit_basename = 'kg'
- endif
-
- call addfld (sflxnam(n),horiz_only, 'A', unit_basename//'/m2/s',trim(solsym(m))//' surface flux')
- if ( history_aerosol .or. history_chemistry ) then
- call add_default( sflxnam(n), 1, ' ' )
- endif
-
- if ( history_cesm_forcing ) then
- if ( spc_name == 'NO' .or. spc_name == 'NH3' ) then
- call add_default( sflxnam(n), 1, ' ' )
- endif
- endif
-
- endif
- end do
-
- ! Add chemical tendency of water vapor to water budget output
- if ( history_budget ) then
- call add_default ('CT_H2O' , history_budget_histfile_num, ' ')
- endif
-
!-----------------------------------------------------------------------
! Initialize chemistry modules
!-----------------------------------------------------------------------
@@ -757,67 +726,129 @@ subroutine chem_init(phys_state, pbuf2d)
, ext_frc_fixed_ymd &
, ext_frc_fixed_tod &
, exo_coldens_file &
+ , use_hemco &
, pbuf2d &
)
- if ( ghg_chem ) then
- call ghg_chem_init(phys_state, bndtvg, h2orates)
- endif
+ if ( ghg_chem ) then
+ call ghg_chem_init(phys_state, bndtvg, h2orates)
+ endif
+
+ call init_cfc11star(pbuf2d)
+
+ ! MEGAN emissions initialize
+ if (shr_megan_mechcomps_n>0) then
+
+ allocate( megan_indices_map(shr_megan_mechcomps_n), stat=ierr)
+ if( ierr /= 0 ) then
+ call endrun(prefix//'failed to allocate megan_indices_map')
+ end if
+ allocate( megan_wght_factors(shr_megan_mechcomps_n), stat=ierr)
+ if( ierr /= 0 ) then
+ call endrun(prefix//'failed to allocate megan_indices_map')
+ end if
+ megan_wght_factors(:) = nan
+
+ do n=1,shr_megan_mechcomps_n
+ call cnst_get_ind (shr_megan_mechcomps(n)%name, megan_indices_map(n), abort=.false.)
+ ii = get_spc_ndx(shr_megan_mechcomps(n)%name)
+ if (ii>0) then
+ megan_wght_factors(n) = adv_mass(ii)*1.e-3_r8 ! kg/moles (to convert moles/m2/sec to kg/m2/sec)
+ else
+ call endrun( 'gas_phase_chemdr_inti: MEGAN compound not in chemistry mechanism : '&
+ //trim(shr_megan_mechcomps(n)%name))
+ endif
+
+ ! MEGAN history fields
+ call addfld( 'MEG_'//trim(shr_megan_mechcomps(n)%name),horiz_only,'A','kg/m2/sec',&
+ trim(shr_megan_mechcomps(n)%name)//' MEGAN emissions flux')
+ if (history_chemistry) then
+ call add_default('MEG_'//trim(shr_megan_mechcomps(n)%name), 1, ' ')
+ endif
- call init_cfc11star(pbuf2d)
+ srf_emis_diag(megan_indices_map(n)) = .true.
+ enddo
+ endif
- ! MEGAN emissions initialize
- if (shr_megan_mechcomps_n>0) then
+ ! Galatic Cosmic Rays ...
+ call gcr_ionization_init()
- allocate( megan_indices_map(shr_megan_mechcomps_n) )
- allocate( megan_wght_factors(shr_megan_mechcomps_n) )
- megan_wght_factors(:) = nan
+ ! Fire emissions ...
+ call fire_emissions_init()
- do n=1,shr_megan_mechcomps_n
- call cnst_get_ind (shr_megan_mechcomps(n)%name, megan_indices_map(n), abort=.false.)
- ii = get_spc_ndx(shr_megan_mechcomps(n)%name)
- if (ii>0) then
- megan_wght_factors(n) = adv_mass(ii)*1.e-3_r8 ! kg/moles (to convert moles/m2/sec to kg/m2/sec)
- else
- call endrun( 'gas_phase_chemdr_inti: MEGAN compound not in chemistry mechanism : '&
- //trim(shr_megan_mechcomps(n)%name))
- endif
+ call short_lived_species_initic()
- ! MEGAN history fields
- call addfld( 'MEG_'//trim(shr_megan_mechcomps(n)%name),horiz_only,'A','kg/m2/sec',&
- trim(shr_megan_mechcomps(n)%name)//' MEGAN emissions flux')
- if (history_chemistry) then
- call add_default('MEG_'//trim(shr_megan_mechcomps(n)%name), 1, ' ')
- endif
+ call ocean_emis_init()
- enddo
- endif
+ !-----------------------------------------------------------------------
+ ! Set names of chemistry variable tendencies and declare them as history variables
+ !-----------------------------------------------------------------------
+ do m = 1,gas_pcnst
+ spc_name = solsym(m)
+ srcnam(m) = 'CT_' // spc_name ! chem tendancy (source/sink)
- ! Galatic Cosmic Rays ...
- call gcr_ionization_init()
+ call addfld( srcnam(m), (/ 'lev' /), 'A', 'kg/kg/s', trim(spc_name)//' source/sink' )
+ call cnst_get_ind(solsym(m), n, abort=.false.)
- ! Fire emissions ...
- call fire_emissions_init()
+ if ( n>0 ) then
+ if (has_emis(m) .or. aero_has_emis(solsym(m)) .or. ocean_emis_species(solsym(m)) .or. srf_emis_diag(n)) then
+ srf_emis_diag(n) = .true.
- call short_lived_species_initic()
+ if (sflxnam(n)(3:5) == 'num') then ! name is in the form of "SF****"
+ unit_basename = ' 1'
+ else
+ unit_basename = 'kg'
+ endif
- call ocean_emis_init()
+ call addfld (sflxnam(n),horiz_only, 'A', unit_basename//'/m2/s',trim(solsym(m))//' surface flux')
+ if ( history_aerosol .or. history_chemistry ) then
+ call add_default( sflxnam(n), 1, ' ' )
+ endif
- ! initialize srf ozone to zero
- if (is_first_step() .and. srf_ozone_pbf_ndx>0) then
- call pbuf_set_field(pbuf2d, srf_ozone_pbf_ndx, 0._r8)
- end if
+ if ( history_cesm_forcing ) then
+ if ( spc_name == 'NO' .or. spc_name == 'NH3' ) then
+ call add_default( sflxnam(n), 1, ' ' )
+ endif
+ endif
+
+ endif
+ endif
+ end do
+
+ ! Add chemical tendency of water vapor to water budget output
+ if ( history_budget ) then
+ call add_default ('CT_H2O' , history_budget_histfile_num, ' ')
+ endif
+
+ ! initialize srf ozone to zero
+ if (is_first_step() .and. srf_ozone_pbf_ndx>0) then
+ call pbuf_set_field(pbuf2d, srf_ozone_pbf_ndx, 0._r8)
+ end if
+
+ contains
+
+ pure logical function aero_has_emis(spcname)
+ use seasalt_model, only: seasalt_names
+ use dust_model, only: dust_names
+
+ character(len=*),intent(in) :: spcname
+
+ aero_has_emis = any(seasalt_names(:) == spcname).or.any(dust_names(:) == spcname)
+
+ end function aero_has_emis
end subroutine chem_init
!================================================================================
!================================================================================
- subroutine chem_emissions( state, cam_in )
+ subroutine chem_emissions( state, cam_in, pbuf )
+ use physics_buffer, only: physics_buffer_desc
use aero_model, only: aero_model_emissions
use camsrfexch, only: cam_in_t
use constituents, only: sflxnam
use cam_history, only: outfld
use mo_srf_emissions, only: set_srf_emissions
+ use hco_cc_emissions, only: hco_set_srf_emissions
use fire_emissions, only: fire_emissions_srf
use ocean_emis, only: ocean_emis_getflux
@@ -825,6 +856,7 @@ subroutine chem_emissions( state, cam_in )
type(physics_state), intent(in) :: state ! Physics state variables
type(cam_in_t), intent(inout) :: cam_in ! import state
+ type(physics_buffer_desc), pointer :: pbuf(:) ! Physics buffer in chunk, for HEMCO
! local vars
@@ -863,18 +895,29 @@ subroutine chem_emissions( state, cam_in )
endif
- ! prescribed emissions from file ...
+ if ( use_hemco ) then
+ ! prescribed emissions from HEMCO ...
- !-----------------------------------------------------------------------
- ! ... Set surface emissions
- !-----------------------------------------------------------------------
- call set_srf_emissions( lchnk, ncol, sflx(:,:) )
+ !-----------------------------------------------------------------------
+ ! ... Set surface emissions using HEMCO compatibility API
+ !-----------------------------------------------------------------------
+ call hco_set_srf_emissions( lchnk, ncol, sflx(:,:), pbuf )
+ else
+ ! prescribed emissions from file ...
+
+ !-----------------------------------------------------------------------
+ ! ... Set surface emissions
+ !-----------------------------------------------------------------------
+ call set_srf_emissions( lchnk, ncol, sflx(:,:) )
+ endif
do m = 1,pcnst
n = map2chm(m)
if ( n /= h2o_ndx .and. n > 0 ) then
cam_in%cflx(:ncol,m) = cam_in%cflx(:ncol,m) + sflx(:ncol,n)
- call outfld( sflxnam(m), cam_in%cflx(:ncol,m), ncol,lchnk )
+ if (srf_emis_diag(m)) then
+ call outfld( sflxnam(m), cam_in%cflx(:ncol,m), ncol,lchnk )
+ endif
endif
enddo
@@ -1215,7 +1258,7 @@ subroutine chem_timestep_tend( state, ptend, cam_in, cam_out, dt, pbuf, fh2o)
fsds, cam_in%ts, cam_in%asdir, cam_in%ocnfrac, cam_in%icefrac, &
cam_out%precc, cam_out%precl, cam_in%snowhland, ghg_chem, state%latmapback, &
drydepflx, wetdepflx, cam_in%cflx, cam_in%fireflx, cam_in%fireztop, &
- nhx_nitrogen_flx, noy_nitrogen_flx, ptend%q, pbuf )
+ nhx_nitrogen_flx, noy_nitrogen_flx, use_hemco, ptend%q, pbuf )
if (associated(cam_out%nhx_nitrogen_flx)) then
cam_out%nhx_nitrogen_flx(:ncol) = nhx_nitrogen_flx(:ncol)
endif
diff --git a/src/chemistry/mozart/hco_cc_emissions.F90 b/src/chemistry/mozart/hco_cc_emissions.F90
new file mode 100644
index 0000000000..5cd98c6ba6
--- /dev/null
+++ b/src/chemistry/mozart/hco_cc_emissions.F90
@@ -0,0 +1,384 @@
+!------------------------------------------------------------------------------
+! Harmonized Emissions Component (HEMCO) !
+!------------------------------------------------------------------------------
+!BOP
+!
+! !MODULE: hco_cc_emissions
+!
+! !DESCRIPTION: Module hco\_cc\_emissions provides emissions to CAM-chem in CESM.
+! This module replaces mo\_extfrc and mo\_srf\_emissions in CAM-chem
+! when HEMCO is enabled, otherwise they are not called if HEMCO-CESM is not
+! enabled at runtime.
+!
+! These subroutines emulate the behavior of extfrc\_set (3-D emissions)
+! and set\_srf\_emissions in CAM-chem for API compatibility.
+!\\
+!\\
+! !INTERFACE:
+!
+module hco_cc_emissions
+!
+! !USES:
+!
+ ! CESM types
+ use shr_kind_mod, only: r8 => shr_kind_r8
+
+ ! Run control
+ use spmd_utils, only: masterproc
+ use cam_abortutils, only: endrun
+ use cam_logfile, only: iulog
+
+ ! Grid information
+ use ppgrid, only: pver, pverp
+
+ ! Chemistry mechanism properties
+ use chem_mods, only: gas_pcnst
+ use mo_tracname, only: solsym
+
+ ! Physics buffer operations
+ use physics_buffer, only: physics_buffer_desc
+ use physics_buffer, only: pbuf_get_field, pbuf_get_index
+
+ ! Compat with XFRC diagn
+ use cam_history, only: outfld
+ use cam_history_support, only: max_fieldname_len
+
+ implicit none
+ private
+!
+! !PUBLIC MEMBER FUNCTIONS:
+!
+ public :: hco_extfrc_inti
+ public :: hco_set_srf_emissions, hco_set_extfrc
+!
+! !REMARKS:
+! None
+!
+! !REVISION HISTORY:
+! 08 Aug 2022 - H.P. Lin - Initial version
+! 04 Nov 2022 - H.P. Lin - Now initialize extfrc fields in here
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+ logical :: pcnst_is_extfrc(gas_pcnst) ! Is external forcing? (3-D data)
+ integer :: pcnst_extfrc_ndx(gas_pcnst) ! External forcing index from get_extfrc_ndx
+ integer :: hco_pbuf_idx(gas_pcnst) ! Physics buffer indices for HCO_* fields from HEMCO
+contains
+!EOC
+!------------------------------------------------------------------------------
+! Harmonized Emissions Component (HEMCO) !
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: hco_set_srf_emissions
+!
+! !DESCRIPTION: Sets surface level emissions (note, TOA is level 1, so this is level pver)
+! for this latitude slice (chunk).
+!\\
+!\\
+! !INTERFACE:
+!
+ subroutine hco_set_srf_emissions( lchnk, ncol, sflx, pbuf )
+!
+! !USES:
+!
+ implicit none
+!
+! !INPUT PARAMETERS:
+!
+ integer, intent(in) :: ncol ! columns in chunk
+ integer, intent(in) :: lchnk ! chunk index
+ real(r8), intent(out) :: sflx(:,:) ! surface emissions ( kg/m^2/s )
+ type(physics_buffer_desc), pointer :: pbuf(:) ! pbuf in chunk
+!
+! !REVISION HISTORY:
+! 08 Aug 2022 - H.P. Lin - Initial version
+! 12 Jan 2023 - H.P. Lin - Check if pbuf is 2-D or 3-D first
+! 09 Feb 2023 - H.P. Lin - For 3-D pbuf, no longer set cflx and use 3-D forcing only.
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+! !LOCAL VARIABLES:
+!
+ integer :: n
+
+ real(r8), pointer :: pbuf_ptr_3d(:,:) ! ptr to pbuf data (/pcols,pver/)
+ real(r8), pointer :: pbuf_ptr_2d(:) ! ptr to pbuf data (/pcols/)
+ integer :: tmpIdx ! pbuf field id
+
+ ! reset sflx here. (same as mo_srf_emissions.F90)
+ ! sflx is defined in chem_emissions (chemistry.F90) but without default values, and is
+ ! later added to cam_in%cflx. it must be initialized in this subroutine.
+ sflx(:,:) = 0._r8
+
+ !--------------------------------------------------------
+ ! ... set HEMCO emissions
+ ! hplin 7/19/20
+ !--------------------------------------------------------
+
+ ! for every species index retrieve the species name, compute the pbuf name,
+ ! and write it into sflx(col, n)
+ ! where n is spc_ndx
+
+ ! if the pbuf exists, set has_emis(1:gas_pcnst) to .true.
+ ! this process is supposed to be set by srf_emissions_inti but it is just
+ ! used below, so we shunt it here and decide later
+
+ ! ncol: # of columns in chunk
+ ! lchnk: chunk number
+
+ ! sflx is given in (pcols, gas_pcnst) so it is a in-chunk slice of the
+ ! srf flux specifier. maybe this loop needs to be done higher up so
+ ! we loop over the pbuf to prevent inquiries. tbd hplin 7/19/20
+
+ do n = 1, gas_pcnst
+ tmpIdx = hco_pbuf_idx(n)
+ if(tmpIdx > 0) then
+ if(pcnst_is_extfrc(n)) then ! 3-D data
+ ! if species is 3-D data, then all forcings set through 3-D. no longer process
+ ! their emissions here.
+ else ! 2-D data
+ call pbuf_get_field(pbuf, tmpIdx, pbuf_ptr_2d)
+
+ ! for each col retrieve data from pbuf_ptr(I, K)
+ sflx(1:ncol,n) = pbuf_ptr_2d(1:ncol)
+
+ pbuf_ptr_2d => null()
+ endif
+ endif
+ enddo
+
+ end subroutine hco_set_srf_emissions
+!EOC
+!------------------------------------------------------------------------------
+! Harmonized Emissions Component (HEMCO) !
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: hco_set_extfrc
+!
+! !DESCRIPTION: Set 3-D emissions apart from surface level.
+!\\
+!\\
+! !INTERFACE:
+!
+ subroutine hco_set_extfrc( lchnk, zint, frcing, ncol, pbuf )
+!
+! !USES:
+!
+ use mo_chem_utls, only: get_spc_ndx
+
+ ! Check list whether this species has external forcing from dataset - this is a CAM-chem flag
+ ! and this is CAM-chem specific.
+ use chem_mods, only: frc_from_dataset, extfrc_lst
+ use chem_mods, only: extcnt, adv_mass
+
+ use mo_constants, only: avogadro
+ implicit none
+!
+! !INPUT PARAMETERS:
+!
+ integer, intent(in) :: ncol ! columns in chunk
+ integer, intent(in) :: lchnk ! chunk index
+ real(r8), intent(in) :: zint(ncol, pverp) ! interface geopot above surface (km)
+ real(r8), intent(inout) :: frcing(ncol,pver,extcnt) ! insitu forcings (molec/cm^3/s)
+ type(physics_buffer_desc), pointer :: pbuf(:) ! pbuf in chunk
+!
+! !REVISION HISTORY:
+! 08 Aug 2022 - H.P. Lin - Initial version based on original from 14 Nov 2020
+! 09 Feb 2023 - H.P. Lin - Use full 3-D emissions, including surface, if available
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+! !LOCAL VARIABLES:
+!
+ real(r8), parameter :: cm2_to_m2 = 1.e4_r8
+ real(r8), parameter :: kg_to_g = 1.e-3_r8
+ real(r8), parameter :: km_to_cm = 1.e5_r8
+
+ ! Loop idxs
+ integer :: m, n, k
+
+ ! For compatibility with XFRC_ diagnostic in CAM-chem
+ real(r8) :: frcing_col(1:ncol), frcing_col_kg(1:ncol)
+ character(len=max_fieldname_len) :: xfcname
+ real(r8) :: molec_to_kg
+ integer :: spc_ndx
+
+
+ real(r8), pointer :: pbuf_ik(:,:) ! ptr to pbuf data (/pcols,pver/)
+ integer :: tmpIdx ! pbuf field id
+ real(r8) :: kg_to_molec
+
+ ! for every species index retrieve the species name, compute the pbuf name,
+ ! and write it into frcing(col, lev, n)
+ ! where n is FRC_IDX --
+ !
+
+ !******************************************************************************************************
+ ! WARNING: ONLY SPECIES THAT ARE EXTERNALLY FORCED AND SPECIFIED IN mo_sim_dat.F90
+ ! CAN HAVE 3-D EMISSIONS, OTHERWISE THEY WILL BE IGNORED!!!
+ !
+ ! the n = frc_idx comes from get_extfrc_ndx( spc_name ).
+ ! it is too computationally expensive to check all fields to see if they are 3-d emitted
+ !
+ ! so PLEASE verify that all your species are in mo_sim_dat.F90:: extfrc_lst before attempting
+ ! to have 3-D emissions for them.
+ !
+ ! I will still loop through all species, get its symbol and attempt to inject extfrc emissions
+ ! for it, but it may not be guaranteed to be done.
+ !******************************************************************************************************
+
+ ! if the pbuf exists, set has_emis(1:gas_pcnst) to .true.
+ ! this process is supposed to be set by srf_emissions_inti but it is just
+ ! used below, so we shunt it here and decide later
+
+ ! ncol: # of columns in chunk
+ ! lchnk: chunk number
+
+ ! Zero out frcing to be consistent with mo_extfrc
+ frcing(:,:,:) = 0._r8
+
+ do n = 1, gas_pcnst
+ ! check if extfrc available?
+ if(pcnst_is_extfrc(n)) then
+ ! add extfrc
+ ! "external insitu forcing" (1/cm^3/s)
+ m = pcnst_extfrc_ndx(n)
+ tmpIdx = hco_pbuf_idx(n)
+ if(tmpIdx > 0) then
+ ! Note: units coming out of HEMCO are in kg/m2/s, so unit conversion must be done
+ !
+ ! using species factor...
+ ! (kg_to_g is actually kg/g...)
+ !
+ ! 1 / (kg/molec cm2/m2) = molec/kg m2/cm2
+ !
+ ! kg/m2/s * molec/kg m2/cm2 = molec/cm2/s
+ ! now divide by z-interface height (in CM!) for each height to get the right answer!
+ ! (hplin, 11/14/20)
+ kg_to_molec = 1/(adv_mass(n) / avogadro * cm2_to_m2 * kg_to_g)
+
+ ! this is already in chunk, retrieve it.
+ ! if the field does not exist, pbuf_get_field will return an error, so sanity check for pbuf_ik is not needed.
+ call pbuf_get_field(pbuf, tmpIdx, pbuf_ik)
+
+ ! for each col retrieve data from pbuf_ik(I, K)
+ ! this includes surface layer.
+ do k = 1, pver
+ frcing(:ncol,k,m) = frcing(:ncol,k,m) + pbuf_ik(1:ncol,k) * kg_to_molec / ((zint(:ncol,k)-zint(:ncol,k+1)) * km_to_cm)
+ enddo
+
+ if ( frc_from_dataset(m) ) then
+ xfcname = trim(extfrc_lst(m))//'_XFRC'
+ call outfld( xfcname, frcing(:ncol,:,n), ncol, lchnk )
+ spc_ndx = get_spc_ndx( extfrc_lst(m) )
+ molec_to_kg = adv_mass( spc_ndx ) / avogadro * cm2_to_m2 * kg_to_g
+
+ frcing_col(:ncol) = 0._r8
+ frcing_col_kg(:ncol) = 0._r8
+ do k = 1, pver
+ frcing_col(:ncol) = frcing_col(:ncol) + frcing(:ncol,k,m)*(zint(:ncol,k)-zint(:ncol,k+1))*km_to_cm
+ frcing_col_kg(:ncol) = frcing_col_kg(:ncol) + frcing(:ncol,k,m)*(zint(:ncol,k)-zint(:ncol,k+1))*km_to_cm*molec_to_kg
+ enddo
+
+ xfcname = trim(extfrc_lst(m))//'_CLXF'
+ call outfld( xfcname, frcing_col(:ncol), ncol, lchnk )
+ xfcname = trim(extfrc_lst(m))//'_CMXF'
+ call outfld( xfcname, frcing_col_kg(:ncol), ncol, lchnk )
+ endif
+ endif
+ endif
+ enddo
+
+ end subroutine hco_set_extfrc
+!EOC
+!------------------------------------------------------------------------------
+! Harmonized Emissions Component (HEMCO) !
+!------------------------------------------------------------------------------
+!BOP
+!
+! !IROUTINE: hco_extfrc_inti
+!
+! !DESCRIPTION: Initialize external forcing related diagnostic fields
+!\\
+!\\
+! !INTERFACE:
+!
+ subroutine hco_extfrc_inti( )
+!
+! !USES:
+!
+ use chem_mods, only: frc_from_dataset, extcnt, extfrc_lst
+ use cam_history, only: addfld, add_default, horiz_only
+ use phys_control, only: phys_getopts
+ use mo_chem_utls, only: get_extfrc_ndx
+ implicit none
+!
+! !REVISION HISTORY:
+! 04 Nov 2022 - H.P. Lin - Initial version based on extfrc_inti
+! 10 Apr 2023 - H.P. Lin - Now move pcnst_is_extfrc initialization here
+!EOP
+!------------------------------------------------------------------------------
+!BOC
+!
+! !LOCAL VARIABLES:
+!
+ logical :: history_aerosol
+ logical :: history_chemistry
+ logical :: history_cesm_forcing
+ character(len=16) :: spc_name
+ integer :: n
+
+ character(len=255) :: fldname_ns ! field name HCO_NH3
+ integer :: RC ! return code (dummy)
+
+ ! for first run, cache results of 3-D or 2-D scan within pcnst_is_extfrc
+ ! to avoid lengthy lookups in future timesteps. hplin 1/12/23
+ do n = 1, gas_pcnst
+ pcnst_extfrc_ndx(n) = get_extfrc_ndx(trim(solsym(n)))
+ pcnst_is_extfrc(n) = (pcnst_extfrc_ndx(n) > 0)
+
+ ! construct information about HCO_* corresponding pbuf location
+ fldname_ns = 'HCO_' // trim(solsym(n))
+ hco_pbuf_idx(n) = pbuf_get_index(fldname_ns, RC)
+ enddo
+
+ if(masterproc) then
+ write(iulog,*) "hco_set_srf_emissions: first run pcnst_is_extfrc cache, extfrc_ndx:"
+ do n = 1, gas_pcnst
+ write(iulog,*) trim(solsym(n)), ' : ', pcnst_is_extfrc(n), pcnst_extfrc_ndx(n)
+ end do
+ endif
+
+ ! Replicate functionality in extfrc_inti to create _XFRC... diagnostics
+ call phys_getopts( &
+ history_aerosol_out = history_aerosol, &
+ history_chemistry_out = history_chemistry, &
+ history_cesm_forcing_out = history_cesm_forcing )
+
+ do n= 1,extcnt
+ if (frc_from_dataset(n)) then
+ spc_name = extfrc_lst(n)
+ call addfld( trim(spc_name)//'_XFRC', (/ 'lev' /), 'A', 'molec/cm3/s', &
+ 'external forcing for '//trim(spc_name) )
+ call addfld( trim(spc_name)//'_CLXF', horiz_only, 'A', 'molec/cm2/s', &
+ 'vertically intergrated external forcing for '//trim(spc_name) )
+ call addfld( trim(spc_name)//'_CMXF', horiz_only, 'A', 'kg/m2/s', &
+ 'vertically intergrated external forcing for '//trim(spc_name) )
+ if ( history_aerosol .or. history_chemistry ) then
+ call add_default( trim(spc_name)//'_CLXF', 1, ' ' )
+ call add_default( trim(spc_name)//'_CMXF', 1, ' ' )
+ endif
+ if ( history_cesm_forcing .and. spc_name == 'NO2' ) then
+ call add_default( trim(spc_name)//'_CLXF', 1, ' ' )
+ call add_default( trim(spc_name)//'_CMXF', 1, ' ' )
+ endif
+ endif
+ enddo
+
+ end subroutine hco_extfrc_inti
+!EOC
+end module hco_cc_emissions
diff --git a/src/chemistry/mozart/mo_chemini.F90 b/src/chemistry/mozart/mo_chemini.F90
index 9c31b2ba61..0f4005be96 100644
--- a/src/chemistry/mozart/mo_chemini.F90
+++ b/src/chemistry/mozart/mo_chemini.F90
@@ -36,6 +36,7 @@ subroutine chemini &
, ext_frc_fixed_ymd &
, ext_frc_fixed_tod &
, exo_coldens_file &
+ , use_hemco &
, pbuf2d &
)
@@ -54,6 +55,7 @@ subroutine chemini &
use mo_fstrat, only : fstrat_inti
use mo_sethet, only : sethet_inti
use mo_usrrxt, only : usrrxt_inti
+ use hco_cc_emissions, only : hco_extfrc_inti
use mo_extfrc, only : extfrc_inti
use mo_setext, only : setext_inti
use mo_setinv, only : setinv_inti
@@ -100,6 +102,7 @@ subroutine chemini &
integer, intent(in) :: srf_emis_cycle_yr
integer, intent(in) :: srf_emis_fixed_ymd
integer, intent(in) :: srf_emis_fixed_tod
+ logical, intent(in) :: use_hemco
type(physics_buffer_desc), pointer :: pbuf2d(:,:)
@@ -146,8 +149,15 @@ subroutine chemini &
! ... initialize external forcings module
!-----------------------------------------------------------------------
call setext_inti()
- call extfrc_inti(ext_frc_specifier, ext_frc_type, ext_frc_cycle_yr, ext_frc_fixed_ymd, ext_frc_fixed_tod)
- if (masterproc) write(iulog,*) 'chemini: after extfrc_inti on node ',iam
+
+ if ( use_hemco ) then
+ ! Initialize HEMCO version of extfrc_inti
+ call hco_extfrc_inti()
+ if (masterproc) write(iulog,*) 'chemini: after hco_extfrc_inti on node ',iam
+ else
+ call extfrc_inti(ext_frc_specifier, ext_frc_type, ext_frc_cycle_yr, ext_frc_fixed_ymd, ext_frc_fixed_tod)
+ if (masterproc) write(iulog,*) 'chemini: after extfrc_inti on node ',iam
+ endif
call sulf_inti()
if (masterproc) write(iulog,*) 'chemini: after sulf_inti on node ',iam
diff --git a/src/chemistry/mozart/mo_chm_diags.F90 b/src/chemistry/mozart/mo_chm_diags.F90
index 8b004048bb..5650403fee 100644
--- a/src/chemistry/mozart/mo_chm_diags.F90
+++ b/src/chemistry/mozart/mo_chm_diags.F90
@@ -10,6 +10,7 @@ module mo_chm_diags
use cam_history, only : fieldname_len
use mo_jeuv, only : neuv
use gas_wetdep_opts,only : gas_wetdep_method
+ use mo_drydep, only : has_drydep
implicit none
private
@@ -64,13 +65,12 @@ subroutine chm_diags_inti
use cam_history, only : addfld, add_default, horiz_only
use constituents, only : cnst_get_ind, cnst_longname
use phys_control, only : phys_getopts
- use mo_drydep, only : has_drydep
use species_sums_diags, only : species_sums_init
integer :: j, k, m, n
character(len=16) :: jname, spc_name, attr
character(len=2) :: jchar
- character(len=2) :: unit_basename ! Units 'kg' or '1'
+ character(len=2) :: unit_basename ! Units 'kg' or '1'
integer :: id_pan, id_onit, id_mpan, id_isopno3, id_onitr, id_nh4no3
integer :: id_so2, id_so4, id_h2so4
@@ -89,7 +89,7 @@ subroutine chm_diags_inti
integer :: id_dst01, id_dst02, id_dst03, id_dst04, 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 :: id_bry, id_cly
integer :: id_isopn2b, id_isopn3b, id_isopn1d, id_isopn4d, id_isopnbno3
integer :: id_isopfnp, id_isopnoohb, id_isopnoohd, id_inheb, id_inhed
integer :: id_no3ch2cho, id_macrn, id_mvkn, id_isopfnc, id_terpns
@@ -195,17 +195,17 @@ subroutine chm_diags_inti
id_onitr = get_spc_ndx( 'ONITR' )
id_nh4no3 = get_spc_ndx( 'NH4NO3' )
- id_honitr = get_spc_ndx( 'HONITR' )
- id_alknit = get_spc_ndx( 'ALKNIT' )
- id_isopnita = get_spc_ndx( 'ISOPNITA' )
- id_isopnitb = get_spc_ndx( 'ISOPNITB' )
- id_isopnooh = get_spc_ndx( 'ISOPNOOH' )
- id_nc4ch2oh = get_spc_ndx( 'NC4CH2OH' )
- id_nc4cho = get_spc_ndx( 'NC4CHO' )
- id_noa = get_spc_ndx( 'NOA' )
- id_nterpooh = get_spc_ndx( 'NTERPOOH' )
+ id_honitr = get_spc_ndx( 'HONITR' )
+ id_alknit = get_spc_ndx( 'ALKNIT' )
+ id_isopnita = get_spc_ndx( 'ISOPNITA' )
+ id_isopnitb = get_spc_ndx( 'ISOPNITB' )
+ id_isopnooh = get_spc_ndx( 'ISOPNOOH' )
+ id_nc4ch2oh = get_spc_ndx( 'NC4CH2OH' )
+ id_nc4cho = get_spc_ndx( 'NC4CHO' )
+ id_noa = get_spc_ndx( 'NOA' )
+ id_nterpooh = get_spc_ndx( 'NTERPOOH' )
id_pbznit = get_spc_ndx( 'PBZNIT' )
- id_terpnit = get_spc_ndx( 'TERPNIT' )
+ id_terpnit = get_spc_ndx( 'TERPNIT' )
id_ndep = get_spc_ndx( 'NDEP' )
id_nhdep = get_spc_ndx( 'NHDEP' )
@@ -278,9 +278,9 @@ subroutine chm_diags_inti
noy_species = (/ id_n, id_no, id_no2, id_no3, id_n2o5, id_hno3, id_ho2no2, id_clono2, &
id_brono2, id_pan, id_onit, id_mpan, id_isopno3, id_onitr, id_nh4no3, &
id_honitr, id_alknit, id_isopnita, id_isopnitb, id_isopnooh, id_nc4ch2oh, &
- id_nc4cho, id_noa, id_nterpooh, id_pbznit, id_terpnit, &
+ id_nc4cho, id_noa, id_nterpooh, id_pbznit, id_terpnit, &
id_isopn2b, id_isopn3b, id_isopn1d, id_isopn4d, id_isopnbno3, &
- id_isopfdn, id_isopfdnc, id_terpfdn, &
+ id_isopfdn, id_isopfdnc, id_terpfdn, &
id_isopfnp, id_isopnoohb, id_isopnoohd, id_inheb, id_inhed, &
id_no3ch2cho, id_macrn, id_mvkn, id_isopfnc, id_terpns, &
id_terpnt, id_terpnt1, id_terpns1, id_terpnpt, id_terpnps, &
@@ -402,16 +402,17 @@ subroutine chm_diags_inti
attr = spc_name
endif
- depvel_name(m) = 'DV_'//trim(spc_name)
- depflx_name(m) = 'DF_'//trim(spc_name)
dtchem_name(m) = 'D'//trim(spc_name)//'CHM'
-
- call addfld( depvel_name(m), horiz_only, 'A', 'cm/s', 'deposition velocity ' )
- call addfld( depflx_name(m), horiz_only, 'A', 'kg/m2/s', 'dry deposition flux ' )
call addfld( dtchem_name(m), (/ 'lev' /), 'A', 'kg/s', 'net tendency from chem' )
- if (has_drydep(spc_name).and.history_chemistry) then
- call add_default( depflx_name(m), 1, ' ' )
+ depvel_name(m) = 'DV_'//trim(spc_name)
+ depflx_name(m) = 'DF_'//trim(spc_name)
+ if (has_drydep(spc_name)) then
+ call addfld( depvel_name(m), horiz_only, 'A', 'cm/s', 'deposition velocity ' )
+ call addfld( depflx_name(m), horiz_only, 'A', 'kg/m2/s', 'dry deposition flux ' )
+ if (history_chemistry) then
+ call add_default( depflx_name(m), 1, ' ' )
+ endif
endif
if (gas_wetdep_method=='MOZ') then
@@ -439,7 +440,7 @@ subroutine chm_diags_inti
if ((m /= id_cly) .and. (m /= id_bry)) then
if (history_aerosol.or.history_chemistry) then
call add_default( spc_name, 1, ' ' )
- endif
+ endif
if (history_chemspecies_srf) then
call add_default( trim(spc_name)//'_SRF', 1, ' ' )
endif
@@ -510,7 +511,7 @@ subroutine chm_diags( lchnk, ncol, vmr, mmr, rxt_rates, invariants, depvel, depf
!--------------------------------------------------------------------
! ... utility routine to output chemistry diagnostic variables
!--------------------------------------------------------------------
-
+
use cam_history, only : outfld
use phys_grid, only : get_area_all_p
use species_sums_diags, only : species_sums_output
@@ -546,7 +547,7 @@ subroutine chm_diags( lchnk, ncol, vmr, mmr, rxt_rates, invariants, depvel, depf
! real(r8) :: tmp(ncol,pver)
! real(r8) :: m(ncol,pver)
real(r8) :: un2(ncol)
-
+
real(r8), dimension(ncol,pver) :: vmr_nox, vmr_noy, vmr_clox, vmr_cloy, vmr_tcly, vmr_brox, vmr_broy, vmr_toth
real(r8), dimension(ncol,pver) :: vmr_tbry, vmr_foy, vmr_tfy
real(r8), dimension(ncol,pver) :: mmr_noy, mmr_sox, mmr_nhx, net_chem
@@ -673,7 +674,7 @@ subroutine chm_diags( lchnk, ncol, vmr, mmr, rxt_rates, invariants, depvel, depf
if ( any( hox_species == m ) ) then
vmr_hox(:ncol,:) = vmr_hox(:ncol,:) + wgt * vmr(:ncol,:,m)
endif
-
+
if ( any( aer_species == m ) ) then
call outfld( solsym(m), mmr(:ncol,:,m), ncol ,lchnk )
call outfld( trim(solsym(m))//'_SRF', mmr(:ncol,pver,m), ncol ,lchnk )
@@ -682,8 +683,10 @@ subroutine chm_diags( lchnk, ncol, vmr, mmr, rxt_rates, invariants, depvel, depf
call outfld( trim(solsym(m))//'_SRF', vmr(:ncol,pver,m), ncol ,lchnk )
endif
- call outfld( depvel_name(m), depvel(:ncol,m), ncol ,lchnk )
- call outfld( depflx_name(m), depflx(:ncol,m), ncol ,lchnk )
+ if (has_drydep(solsym(m))) then
+ call outfld( depvel_name(m), depvel(:ncol,m), ncol ,lchnk )
+ call outfld( depflx_name(m), depflx(:ncol,m), ncol ,lchnk )
+ endif
if ( any( noy_species == m ) ) then
df_noy(:ncol) = df_noy(:ncol) + wgt * depflx(:ncol,m)*N_molwgt/adv_mass(m)
@@ -705,15 +708,15 @@ subroutine chm_diags( lchnk, ncol, vmr, mmr, rxt_rates, invariants, depvel, depf
! add contribution from non-conservation tracers
!
if ( id_ndep == m ) then
- wd_noy(:ncol) = wd_noy(:ncol) + wgt * wetdepflx(:ncol,m)*N_molwgt/adv_mass(m)
+ wd_noy(:ncol) = wd_noy(:ncol) + wgt * wetdepflx(:ncol,m)*N_molwgt/adv_mass(m)
end if
if ( id_nhdep == m ) then
- wd_nhx(:ncol) = wd_nhx(:ncol) + wgt * wetdepflx(:ncol,m)*N_molwgt/adv_mass(m)
+ wd_nhx(:ncol) = wd_nhx(:ncol) + wgt * wetdepflx(:ncol,m)*N_molwgt/adv_mass(m)
end if
do k=1,pver
do i=1,ncol
- net_chem(i,k) = mmr_tend(i,k,m) * mass(i,k)
+ net_chem(i,k) = mmr_tend(i,k,m) * mass(i,k)
end do
end do
call outfld( dtchem_name(m), net_chem(:ncol,:), ncol, lchnk )
@@ -769,7 +772,7 @@ subroutine chm_diags( lchnk, ncol, vmr, mmr, rxt_rates, invariants, depvel, depf
call outfld( 'DF_SOX', df_sox(:ncol), ncol ,lchnk )
call outfld( 'dry_deposition_NHx_as_N', df_nhx(:ncol), ncol ,lchnk )
if (gas_wetdep_method=='NEU') then
- wd_noy(:ncol) = -wd_noy(:ncol) ! downward is possitive
+ wd_noy(:ncol) = -wd_noy(:ncol) ! downward is possitive
wd_nhx(:ncol) = -wd_nhx(:ncol)
call outfld( 'wet_deposition_NOy_as_N', wd_noy(:ncol), ncol, lchnk )
call outfld( 'wet_deposition_NHx_as_N', wd_nhx(:ncol), ncol, lchnk )
@@ -903,7 +906,7 @@ subroutine het_diags( het_rates, mmr, pdel, lchnk, ncol )
!
wrk_wd(:ncol) = 0._r8
do k = 1,pver
- wrk_wd(:ncol) = wrk_wd(:ncol) + het_rates(:ncol,k,m) * mmr(:ncol,k,m) * pdel(:ncol,k)
+ wrk_wd(:ncol) = wrk_wd(:ncol) + het_rates(:ncol,k,m) * mmr(:ncol,k,m) * pdel(:ncol,k)
end do
!
wrk_wd(:ncol) = wrk_wd(:ncol) * rgrav * wght(:ncol) * rearth**2
diff --git a/src/chemistry/mozart/mo_extfrc.F90 b/src/chemistry/mozart/mo_extfrc.F90
index 2438f47414..c1ca05aed3 100644
--- a/src/chemistry/mozart/mo_extfrc.F90
+++ b/src/chemistry/mozart/mo_extfrc.F90
@@ -5,7 +5,7 @@ module mo_extfrc
use shr_kind_mod, only : r8 => shr_kind_r8
use ppgrid, only : pver, pverp
- use chem_mods, only : gas_pcnst, extcnt, extfrc_lst, frc_from_dataset, adv_mass
+ use chem_mods, only : extcnt, extfrc_lst, frc_from_dataset, adv_mass
use spmd_utils, only : masterproc
use cam_abortutils,only : endrun
use cam_history, only : addfld, outfld, add_default, horiz_only
@@ -78,11 +78,11 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
integer :: astat
integer :: j, l, m, n, i,mm ! Indices
character(len=16) :: spc_name
- character(len=256) :: frc_fnames(gas_pcnst)
- real(r8) :: frc_scalefactor(gas_pcnst)
- character(len=16) :: frc_species(gas_pcnst)
- integer :: frc_indexes(gas_pcnst)
- integer :: indx(gas_pcnst)
+ character(len=256) :: frc_fnames(size(extfrc_specifier))
+ real(r8) :: frc_scalefactor(size(extfrc_specifier))
+ character(len=16) :: frc_species(size(extfrc_specifier))
+ integer :: frc_indexes(size(extfrc_specifier))
+ integer :: indx(size(extfrc_specifier))
integer :: vid, ndims, nvars, isec, ierr, num_dims_xfrc, dimid
logical, allocatable :: is_sector(:)
@@ -105,7 +105,7 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
character(len=256) :: locfn
!-----------------------------------------------------------------------
-
+
call phys_getopts( &
history_aerosol_out = history_aerosol, &
history_chemistry_out = history_chemistry, &
@@ -119,7 +119,7 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
mm = 0
indx(:) = 0
- count_emis: do n=1,gas_pcnst
+ count_emis: do n=1,size(extfrc_specifier)
if ( len_trim(extfrc_specifier(n) ) == 0 ) then
exit count_emis
@@ -127,7 +127,7 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
i = scan(extfrc_specifier(n),'->')
spc_name = trim(adjustl(extfrc_specifier(n)(:i-1)))
-
+
! need to parse out scalefactor ...
tmp_string = adjustl(extfrc_specifier(n)(i+2:))
j = scan( tmp_string, '*' )
@@ -179,7 +179,7 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
end if
!-----------------------------------------------------------------------
- ! Sort the input files so that the emissions sources are summed in the
+ ! Sort the input files so that the emissions sources are summed in the
! same order regardless of the order of the input files in the namelist
!-----------------------------------------------------------------------
if (n_frc_files > 0) then
@@ -189,14 +189,14 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
!-----------------------------------------------------------------------
! ... setup the forcing type array
!-----------------------------------------------------------------------
- do m=1,n_frc_files
+ do m=1,n_frc_files
forcings(m)%frc_ndx = frc_indexes(indx(m))
forcings(m)%species = frc_species(indx(m))
forcings(m)%filename = frc_fnames(indx(m))
forcings(m)%scalefactor = frc_scalefactor(indx(m))
enddo
-
- do n= 1,extcnt
+
+ do n= 1,extcnt
if (frc_from_dataset(n)) then
spc_name = extfrc_lst(n)
call addfld( trim(spc_name)//'_XFRC', (/ 'lev' /), 'A', 'molec/cm3/s', &
@@ -205,7 +205,7 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
'vertically intergrated external forcing for '//trim(spc_name) )
call addfld( trim(spc_name)//'_CMXF', horiz_only, 'A', 'kg/m2/s', &
'vertically intergrated external forcing for '//trim(spc_name) )
- if ( history_aerosol .or. history_chemistry ) then
+ if ( history_aerosol .or. history_chemistry ) then
call add_default( trim(spc_name)//'_CLXF', 1, ' ' )
call add_default( trim(spc_name)//'_CMXF', 1, ' ' )
endif
@@ -250,6 +250,10 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
forcings(m)%nsectors = 0
+ if (masterproc) then
+ write(iulog,'(a,i3,a)') 'extfrc_inti m: ',m,' init file : '//trim(forcings(m)%filename)
+ endif
+
call getfil (forcings(m)%filename, locfn, 0)
call cam_pio_openfile ( ncid, trim(locfn), PIO_NOWRITE)
ierr = pio_inquire (ncid, nVariables=nvars)
@@ -261,7 +265,7 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
allocate(is_sector(nvars))
is_sector(:) = .false.
-
+
do vid = 1,nvars
ierr = pio_inq_varndims (ncid, vid, ndims)
@@ -282,7 +286,7 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
forcings(m)%nsectors = forcings(m)%nsectors+1
is_sector(vid)=.true.
-
+
enddo
allocate( forcings(m)%sectors(forcings(m)%nsectors), stat=astat )
@@ -301,7 +305,7 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type_in, extfrc_cycle_yr, extfr
deallocate(is_sector)
! Global attribute 'input_method' overrides the ext_frc_type namelist setting on
- ! a file-by-file basis. If the ext_frc file does not contain the 'input_method'
+ ! a file-by-file basis. If the ext_frc file does not contain the 'input_method'
! attribute then the ext_frc_type namelist setting is used.
call pio_seterrorhandling(ncid, PIO_BCAST_ERROR)
ierr = pio_get_att(ncid, PIO_GLOBAL, 'input_method', file_interp_type)
@@ -341,7 +345,7 @@ subroutine extfrc_timestep_init( pbuf2d, state )
implicit none
- type(physics_state), intent(in):: state(begchunk:endchunk)
+ type(physics_state), intent(in):: state(begchunk:endchunk)
type(physics_buffer_desc), pointer :: pbuf2d(:,:)
!-----------------------------------------------------------------------
diff --git a/src/chemistry/mozart/mo_gas_phase_chemdr.F90 b/src/chemistry/mozart/mo_gas_phase_chemdr.F90
index 9e4e51df1f..68657d0739 100644
--- a/src/chemistry/mozart/mo_gas_phase_chemdr.F90
+++ b/src/chemistry/mozart/mo_gas_phase_chemdr.F90
@@ -48,6 +48,10 @@ module mo_gas_phase_chemdr
logical :: convproc_do_aer
integer :: ele_temp_ndx, ion_temp_ndx
+ ! for HEMCO-CESM ... passing J-values to ParaNOx ship plume extension
+ integer :: hco_jno2_idx, hco_joh_idx
+ integer :: rxt_jno2_idx, rxt_joh_idx
+
contains
subroutine gas_phase_chemdr_inti()
@@ -225,6 +229,23 @@ subroutine gas_phase_chemdr_inti()
call chem_prod_loss_diags_init
+ ! diagnostics for HEMCO ParaNOx extension
+ hco_jno2_idx = pbuf_get_index('HCO_IN_JNO2',errcode=err)
+ hco_joh_idx = pbuf_get_index('HCO_IN_JOH',errcode=err)
+
+ !-------------------------- HEMCO_CESM ---------------------------------
+ ! ... save photo rxn rates for HEMCO ParaNOx, chem_mech rxns:
+ ! jo3_b ( 8) O3 + hv -> O + O2
+ ! jno2 ( 16) NO2 + hv -> NO + O
+ !
+ ! The reactions jo2 and jo3_b exist in the mechanisms that would use
+ ! the ParaNOx ship plume extension. If they do not exist, then the indices
+ ! would not be found and the HCO_IN_JNO2 and HCO_IN_JOH fields would not
+ ! be zero and the extension would have no effect.
+ !-----------------------------------------------------------------------
+ rxt_jno2_idx = get_rxt_ndx( 'jno2' )
+ rxt_joh_idx = get_rxt_ndx( 'jo3_b' )
+
end subroutine gas_phase_chemdr_inti
@@ -238,7 +259,8 @@ subroutine gas_phase_chemdr(lchnk, ncol, imozart, q, &
delt, ps, &
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)
+ drydepflx, wetdepflx, cflx, fire_sflx, fire_ztop, nhx_nitrogen_flx, noy_nitrogen_flx, &
+ use_hemco, qtend, pbuf)
!-----------------------------------------------------------------------
! ... Chem_solver advances the volumetric mixing ratio
@@ -287,6 +309,7 @@ subroutine gas_phase_chemdr(lchnk, ncol, imozart, q, &
use rate_diags, only : rate_diags_calc, rate_diags_o3s_loss
use mo_mass_xforms, only : mmr2vmr, vmr2mmr, h2o_to_vmr, mmr2vmri
use orbit, only : zenith
+
!
! for aqueous chemistry and aerosol growth
!
@@ -337,6 +360,7 @@ subroutine gas_phase_chemdr(lchnk, ncol, imozart, q, &
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)
+ logical, intent(in) :: use_hemco ! use Harmonized Emissions Component (HEMCO)
type(physics_buffer_desc), pointer :: pbuf(:)
@@ -421,6 +445,9 @@ subroutine gas_phase_chemdr(lchnk, ncol, imozart, q, &
real(r8) :: del_h2so4_gasprod(ncol,pver)
real(r8) :: vmr0(ncol,pver,gas_pcnst)
+ ! for HEMCO-CESM ... passing J-values to ParaNOx ship plume extension
+ real(r8), pointer :: hco_j_tmp_fld(:) ! J-value pointer (sfc only) [1/s]
+
!
! CCMI
!
@@ -800,6 +827,26 @@ subroutine gas_phase_chemdr(lchnk, ncol, imozart, q, &
!-----------------------------------------------------------------------
call phtadj( reaction_rates, invariants, invariants(:,:,indexm), ncol,pver )
+ if ( use_hemco ) then
+ !-------------------------- HEMCO_CESM ---------------------------------
+ ! ... save photo rxn rates for HEMCO ParaNOx, chem_mech rxns:
+ ! jo3_b ( 8) O3 + hv -> O + O2
+ ! jno2 ( 16) NO2 + hv -> NO + O
+ !-----------------------------------------------------------------------
+ ! get the rxn rate [1/s] and write to pbuf
+ if(rxt_jno2_idx > 0 .and. hco_jno2_idx > 0) then
+ call pbuf_get_field(pbuf, hco_jno2_idx, hco_j_tmp_fld)
+ ! this is already in chunk, write /pcols/ at surface
+ hco_j_tmp_fld(:ncol) = reaction_rates(:ncol,pver,rxt_jno2_idx)
+ endif
+
+ if(rxt_joh_idx > 0 .and. hco_joh_idx > 0) then
+ call pbuf_get_field(pbuf, hco_joh_idx, hco_j_tmp_fld)
+ ! this is already in chunk, write /pcols/ at surface
+ hco_j_tmp_fld(:ncol) = reaction_rates(:ncol,pver,rxt_joh_idx)
+ endif
+ endif
+
!-----------------------------------------------------------------------
! ... Compute the extraneous frcing at time = t(n+1)
!-----------------------------------------------------------------------
diff --git a/src/chemistry/mozart/mo_neu_wetdep.F90 b/src/chemistry/mozart/mo_neu_wetdep.F90
index 0b2d3ff35e..c3974b7e37 100644
--- a/src/chemistry/mozart/mo_neu_wetdep.F90
+++ b/src/chemistry/mozart/mo_neu_wetdep.F90
@@ -188,7 +188,6 @@ subroutine neu_wetdep_init
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.')
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
diff --git a/src/chemistry/mozart/mo_setext.F90 b/src/chemistry/mozart/mo_setext.F90
index 241db099f7..a2c6ed7095 100644
--- a/src/chemistry/mozart/mo_setext.F90
+++ b/src/chemistry/mozart/mo_setext.F90
@@ -106,6 +106,7 @@ subroutine setext( extfrc, zint_abs, zint_rel, cldtop, &
use mo_lightning, only : prod_no
use mo_extfrc, only : extfrc_set
+ use hco_cc_emissions, only : hco_set_extfrc
use chem_mods, only : extcnt
use tracer_srcs, only : num_tracer_srcs, tracer_src_flds, get_srcs_data
use mo_chem_utls, only : get_extfrc_ndx
@@ -118,6 +119,8 @@ subroutine setext( extfrc, zint_abs, zint_rel, cldtop, &
use physics_buffer, only : physics_buffer_desc
+ use phys_control, only : use_hemco ! Use Harmonized Emissions Component (HEMCO)
+
implicit none
!--------------------------------------------------------
@@ -167,10 +170,17 @@ subroutine setext( extfrc, zint_abs, zint_rel, cldtop, &
no_lgt(:,:) = 0._r8
- !--------------------------------------------------------
- ! ... set frcing from datasets
- !--------------------------------------------------------
- call extfrc_set( lchnk, zint_rel, extfrc, ncol )
+ if(use_hemco) then
+ !--------------------------------------------------------
+ ! ... set frcing from datasets (HEMCO)
+ !--------------------------------------------------------
+ call hco_set_extfrc( lchnk, zint_rel, extfrc, ncol, pbuf )
+ else
+ !--------------------------------------------------------
+ ! ... set frcing from datasets
+ !--------------------------------------------------------
+ call extfrc_set( lchnk, zint_rel, extfrc, ncol )
+ endif
!--------------------------------------------------------
! ... set nox production from lighting
diff --git a/src/chemistry/mozart/mo_srf_emissions.F90 b/src/chemistry/mozart/mo_srf_emissions.F90
index e0d80ef1b1..80afe7f474 100644
--- a/src/chemistry/mozart/mo_srf_emissions.F90
+++ b/src/chemistry/mozart/mo_srf_emissions.F90
@@ -28,14 +28,13 @@ module mo_srf_emissions
private
- public :: srf_emissions_inti, set_srf_emissions, set_srf_emissions_time
+ public :: srf_emissions_inti, set_srf_emissions, set_srf_emissions_time
- save
+ logical, public, protected :: has_emis(gas_pcnst) = .false.
real(r8), parameter :: amufac = 1.65979e-23_r8 ! 1.e4* kg / amu
- logical :: has_emis(gas_pcnst)
type(emission), allocatable :: emissions(:)
- integer :: n_emis_files
+ integer :: n_emis_files
integer :: c10h16_ndx, isop_ndx
contains
@@ -47,7 +46,7 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
!-----------------------------------------------------------------------
use chem_mods, only : adv_mass
- use mo_chem_utls, only : get_spc_ndx
+ use mo_chem_utls, only : get_spc_ndx
use tracer_data, only : trcdata_init
use cam_pio_utils, only : cam_pio_openfile
use pio, only : pio_inquire, pio_nowrite, pio_closefile, pio_inq_varndims
@@ -77,11 +76,11 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
character(len=16) :: spc_name
character(len=256) :: filename
- character(len=16) :: emis_species(gas_pcnst)
- character(len=256) :: emis_filenam(gas_pcnst)
- integer :: emis_indexes(gas_pcnst)
- integer :: indx(gas_pcnst)
- real(r8) :: emis_scalefactor(gas_pcnst)
+ character(len=16) :: emis_species(size(srf_emis_specifier))
+ character(len=256) :: emis_filenam(size(srf_emis_specifier))
+ integer :: emis_indexes(size(srf_emis_specifier))
+ integer :: indx(size(srf_emis_specifier))
+ real(r8) :: emis_scalefactor(size(srf_emis_specifier))
integer :: vid, nvars, isec, num_dims_emis
integer :: vndims
@@ -101,19 +100,19 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
real(r8) :: xdbl
integer :: time_dimid, ncol_dimid
integer, allocatable :: dimids(:)
-
+
has_emis(:) = .false.
nn = 0
indx(:) = 0
- count_emis: do n=1,gas_pcnst
+ count_emis: do n=1,size(srf_emis_specifier)
if ( len_trim(srf_emis_specifier(n) ) == 0 ) then
exit count_emis
endif
i = scan(srf_emis_specifier(n),'->')
spc_name = trim(adjustl(srf_emis_specifier(n)(:i-1)))
-
+
! need to parse out scalefactor ...
tmp_string = adjustl(srf_emis_specifier(n)(i+2:))
j = scan( tmp_string, '*' )
@@ -130,7 +129,7 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
if (m > 0) then
has_emis(m) = .true.
- else
+ else
write(iulog,*) 'srf_emis_inti: spc_name ',spc_name,' is not included in the simulation'
call endrun('srf_emis_inti: invalid surface emission specification')
endif
@@ -161,7 +160,7 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
end if
!-----------------------------------------------------------------------
- ! Sort the input files so that the emissions sources are summed in the
+ ! Sort the input files so that the emissions sources are summed in the
! same order regardless of the order of the input files in the namelist
!-----------------------------------------------------------------------
if (n_emis_files > 0) then
@@ -171,7 +170,7 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
!-----------------------------------------------------------------------
! ... setup the emission type array
!-----------------------------------------------------------------------
- do m=1,n_emis_files
+ do m=1,n_emis_files
emissions(m)%spc_ndx = emis_indexes(indx(m))
emissions(m)%units = 'Tg/y'
emissions(m)%species = emis_species(indx(m))
@@ -186,7 +185,11 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
spc_loop: do m = 1, n_emis_files
emissions(m)%nsectors = 0
-
+
+ if (masterproc) then
+ write(iulog,'(a,i3,a)') 'srf_emissions_inti m: ',m,' init file : '//trim(emissions(m)%filename)
+ endif
+
call getfil (emissions(m)%filename, locfn, 0)
call cam_pio_openfile ( ncid, trim(locfn), PIO_NOWRITE)
ierr = pio_inquire (ncid, nVariables=nvars)
@@ -198,7 +201,7 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
allocate(is_sector(nvars))
is_sector(:) = .false.
-
+
if (unstructured) then
ierr = pio_inq_dimid( ncid, 'time', time_dimid )
end if
@@ -254,7 +257,7 @@ subroutine srf_emissions_inti( srf_emis_specifier, emis_type_in, emis_cycle_yr,
deallocate(is_sector)
! Global attribute 'input_method' overrides the srf_emis_type namelist setting on
- ! a file-by-file basis. If the emis file does not contain the 'input_method'
+ ! a file-by-file basis. If the emis file does not contain the 'input_method'
! attribute then the srf_emis_type namelist setting is used.
call pio_seterrorhandling(ncid, PIO_BCAST_ERROR)
ierr = pio_get_att(ncid, PIO_GLOBAL, 'input_method', file_interp_type)
@@ -297,7 +300,7 @@ subroutine set_srf_emissions_time( pbuf2d, state )
implicit none
- type(physics_state), intent(in):: state(begchunk:endchunk)
+ type(physics_state), intent(in):: state(begchunk:endchunk)
type(physics_buffer_desc), pointer :: pbuf2d(:,:)
!-----------------------------------------------------------------------
@@ -364,7 +367,7 @@ subroutine set_srf_emissions( lchnk, ncol, sflx )
"kg/m^2/sec " /)
character(len=12) :: units
- real(r8), dimension(ncol) :: rlats, rlons
+ real(r8), dimension(ncol) :: rlats, rlons
sflx(:,:) = 0._r8
diff --git a/src/chemistry/mozart/ocean_emis.F90 b/src/chemistry/mozart/ocean_emis.F90
index 289cafeb77..d8179d42b8 100644
--- a/src/chemistry/mozart/ocean_emis.F90
+++ b/src/chemistry/mozart/ocean_emis.F90
@@ -28,7 +28,7 @@ module ocean_emis
use ppgrid, only : pcols, begchunk,endchunk
use spmd_utils, only : masterproc
use cam_abortutils, only : endrun
- use cam_history, only : addfld, horiz_only, outfld
+ use cam_history, only : addfld, add_default, horiz_only, outfld
use constituents, only : cnst_get_ind
use tracer_data, only : trfld,trfile
use chem_mods, only : gas_pcnst
@@ -42,6 +42,7 @@ module ocean_emis
public :: ocean_emis_init
public :: ocean_emis_getflux
public :: ocean_emis_advance
+ public :: ocean_emis_species
type :: Csw
integer :: spc_ndx
@@ -57,7 +58,7 @@ module ocean_emis
logical :: switch_bubble
type(Csw), allocatable :: Csw_nM(:)
- integer :: n_Csw_files
+ integer :: n_Csw_files = 0
real(r8), allocatable :: salinity(:,:)
@@ -768,6 +769,7 @@ subroutine cseawater_ini()
use pio, only : pio_inq_varname, file_desc_t, pio_get_att, PIO_NOERR, PIO_GLOBAL
use pio, only : pio_seterrorhandling, PIO_BCAST_ERROR
use string_utils, only : GLC
+ use phys_control, only : phys_getopts
integer :: i, j, l, m, n, nn, astat, vid, ierr, nvars, isec
integer :: indx(gas_pcnst)
@@ -794,6 +796,9 @@ subroutine cseawater_ini()
character(len=*), parameter :: subname = 'cseawater_ini'
+ logical :: history_chemistry
+ call phys_getopts(history_chemistry_out=history_chemistry)
+
! ========================================================
! Read sea water concentration specifier from the namelist
! ========================================================
@@ -956,8 +961,30 @@ subroutine cseawater_ini()
'ocean flux ' // trim(Csw_nM(m)%species) )
call addfld('Csw_' // trim(Csw_nM(m)%species), horiz_only, 'A', 'nanomole per liter (nM)', &
'seeawater concentration ' // trim(Csw_nM(m)%species) )
+ if (history_chemistry) then
+ call add_default('OCN_FLUX_' // trim(Csw_nM(m)%species), 1, ' ')
+ end if
end do
end subroutine cseawater_ini
+ !--------------------------------------------------------------------------------
+ ! returns TRUE if species has ocean emissions
+ !--------------------------------------------------------------------------------
+ pure logical function ocean_emis_species(name)
+ character(len=*), intent(in) :: name
+
+ integer :: m
+
+ ocean_emis_species = .false.
+
+ spc_loop: do m = 1, n_Csw_files
+ if (trim(name) == trim(Csw_nM(m)%species)) then
+ ocean_emis_species = .true.
+ exit spc_loop
+ end if
+ end do spc_loop
+
+ end function ocean_emis_species
+
end module ocean_emis
diff --git a/src/chemistry/pp_none/chemistry.F90 b/src/chemistry/pp_none/chemistry.F90
index bdb8c9ae0b..7e67fadb6e 100644
--- a/src/chemistry/pp_none/chemistry.F90
+++ b/src/chemistry/pp_none/chemistry.F90
@@ -222,13 +222,15 @@ subroutine chem_reset_fluxes( fptr, cam_in )
end subroutine chem_reset_fluxes
!================================================================================
- subroutine chem_emissions( state, cam_in )
+ subroutine chem_emissions( state, cam_in, pbuf )
use camsrfexch, only: cam_in_t
+ use physics_buffer, only: physics_buffer_desc
! Arguments:
type(physics_state), intent(in) :: state ! Physics state variables
type(cam_in_t), intent(inout) :: cam_in ! import state
+ type(physics_buffer_desc), pointer :: pbuf(:) ! Physics buffer in chunk, for HEMCO
end subroutine chem_emissions
end module chemistry
diff --git a/src/chemistry/pp_terminator/chemistry.F90 b/src/chemistry/pp_terminator/chemistry.F90
index 20d24047a5..11fbf5e0c9 100644
--- a/src/chemistry/pp_terminator/chemistry.F90
+++ b/src/chemistry/pp_terminator/chemistry.F90
@@ -419,13 +419,15 @@ subroutine chem_reset_fluxes( fptr, cam_in )
end subroutine chem_reset_fluxes
!================================================================================
- subroutine chem_emissions( state, cam_in )
+ subroutine chem_emissions( state, cam_in, pbuf )
use camsrfexch, only: cam_in_t
+ use physics_buffer, only: physics_buffer_desc
! Arguments:
type(physics_state), intent(in) :: state ! Physics state variables
type(cam_in_t), intent(inout) :: cam_in ! import state
+ type(physics_buffer_desc), pointer :: pbuf(:) ! Physics buffer in chunk, for HEMCO
end subroutine chem_emissions
diff --git a/src/chemistry/pp_waccm_ma_mam5/chem_mech.doc b/src/chemistry/pp_waccm_ma_mam5/chem_mech.doc
index 9a7379e5b2..5712d4ca8a 100644
--- a/src/chemistry/pp_waccm_ma_mam5/chem_mech.doc
+++ b/src/chemistry/pp_waccm_ma_mam5/chem_mech.doc
@@ -72,37 +72,38 @@
( 69) O
( 70) O2
( 71) O3
- ( 72) OCLO (OClO)
- ( 73) OCS (OCS)
- ( 74) pom_a1 (C)
- ( 75) pom_a4 (C)
- ( 76) S (S)
- ( 77) SF6
- ( 78) SO (SO)
- ( 79) SO2
- ( 80) SO3 (SO3)
- ( 81) so4_a1 (NH4HSO4)
- ( 82) so4_a2 (NH4HSO4)
- ( 83) so4_a3 (NH4HSO4)
- ( 84) so4_a5 (NH4HSO4)
- ( 85) soa_a1 (C)
- ( 86) soa_a2 (C)
- ( 87) SOAG (C)
- ( 88) e (E)
- ( 89) HO2
- ( 90) N2D (N)
- ( 91) N2p (N2)
- ( 92) NOp (NO)
- ( 93) Np (N)
- ( 94) O1D (O)
- ( 95) O2_1D (O2)
- ( 96) O2_1S (O2)
- ( 97) O2p (O2)
- ( 98) OH
- ( 99) Op (O)
- (100) Op2D (O)
- (101) Op2P (O)
- (102) H2O
+ ( 72) O3S (O3)
+ ( 73) OCLO (OClO)
+ ( 74) OCS (OCS)
+ ( 75) pom_a1 (C)
+ ( 76) pom_a4 (C)
+ ( 77) S (S)
+ ( 78) SF6
+ ( 79) SO (SO)
+ ( 80) SO2
+ ( 81) SO3 (SO3)
+ ( 82) so4_a1 (NH4HSO4)
+ ( 83) so4_a2 (NH4HSO4)
+ ( 84) so4_a3 (NH4HSO4)
+ ( 85) so4_a5 (NH4HSO4)
+ ( 86) soa_a1 (C)
+ ( 87) soa_a2 (C)
+ ( 88) SOAG (C)
+ ( 89) e (E)
+ ( 90) HO2
+ ( 91) N2D (N)
+ ( 92) N2p (N2)
+ ( 93) NOp (NO)
+ ( 94) Np (N)
+ ( 95) O1D (O)
+ ( 96) O2_1D (O2)
+ ( 97) O2_1S (O2)
+ ( 98) O2p (O2)
+ ( 99) OH
+ (100) Op (O)
+ (101) Op2D (O)
+ (102) Op2P (O)
+ (103) H2O
Invariant species
@@ -116,6 +117,9 @@
Class List
==========
+ Explicit
+ --------
+ ( 1) O3S
Implicit
--------
@@ -762,6 +766,7 @@ Extraneous prod/loss species
d(O3)/dt = r19*M*O*O2
- j7*O3 - j8*O3 - r8*O1D*O3 - r17*O*O3 - r27*HO2*O3 - r28*H*O3 - r33*OH*O3 - r46*NO2*O3
- r54*NO*O3 - r70*CL*O3 - r102*BR*O3 - r161*S*O3 - r167*SO*O3
+ d(O3S)/dt = 0
d(OCLO)/dt = r74*CLO*CLO + r104*BRO*CLO
- j59*OCLO - r168*SO*OCLO
d(OCS)/dt = - j88*OCS - r157*O*OCS - r158*OH*OCS
diff --git a/src/chemistry/pp_waccm_ma_mam5/chem_mech.in b/src/chemistry/pp_waccm_ma_mam5/chem_mech.in
index 9d69d3a4f2..8443364166 100644
--- a/src/chemistry/pp_waccm_ma_mam5/chem_mech.in
+++ b/src/chemistry/pp_waccm_ma_mam5/chem_mech.in
@@ -81,6 +81,7 @@
O,
O2,
O3,
+ O3S -> O3,
OCLO -> OClO,
OCS -> OCS,
pom_a1 -> C,
@@ -147,7 +148,7 @@
Solution classes
Explicit
-
+ O3S
End Explicit
Implicit
@@ -263,398 +264,398 @@
*********************************
*** odd-oxygen
*********************************
-[jh2o_b] H2O + hv -> H2 + O1D
-[jh2o_c] H2O + hv -> 2*H + O
-[jh2o_a] H2O + hv -> OH + H
-[jh2o2] H2O2 + hv -> 2*OH
-[jo2_b=userdefined,] O2 + hv -> 2*O
-[jo2_a=userdefined,] O2 + hv -> O + O1D
-[jo3_a] O3 + hv -> O1D + O2_1D
-[jo3_b] O3 + hv -> O + O2
+[jh2o_b] H2O + hv -> H2 + O1D
+[jh2o_c] H2O + hv -> 2*H + O
+[jh2o_a] H2O + hv -> OH + H
+[jh2o2] H2O2 + hv -> 2*OH
+[jo2_b=userdefined,] O2 + hv -> 2*O
+[jo2_a=userdefined,] O2 + hv -> O + O1D
+[jo3_a] O3 + hv -> O1D + O2_1D
+[jo3_b] O3 + hv -> O + O2
*********************************
*** odd-nitrogen
*********************************
-[jhno3] HNO3 + hv -> NO2 + OH
-[jho2no2_a] HO2NO2 + hv -> OH + NO3
-[jho2no2_b] HO2NO2 + hv -> NO2 + HO2
-[jn2o] N2O + hv -> O1D + N2
-[jn2o5_a] N2O5 + hv -> NO2 + NO3
-[jn2o5_b] N2O5 + hv -> NO + O + NO3
-[jno=userdefined,] NO + hv -> N + O
-[jno_i] NO + hv -> NOp + e
-[jno2] NO2 + hv -> NO + O
-[jno3_a] NO3 + hv -> NO2 + O
-[jno3_b] NO3 + hv -> NO + O2
+[jhno3] HNO3 + hv -> NO2 + OH
+[jho2no2_a] HO2NO2 + hv -> OH + NO3
+[jho2no2_b] HO2NO2 + hv -> NO2 + HO2
+[jn2o] N2O + hv -> O1D + N2
+[jn2o5_a] N2O5 + hv -> NO2 + NO3
+[jn2o5_b] N2O5 + hv -> NO + O + NO3
+[jno=userdefined,] NO + hv -> N + O
+[jno_i] NO + hv -> NOp + e
+[jno2] NO2 + hv -> NO + O
+[jno3_a] NO3 + hv -> NO2 + O
+[jno3_b] NO3 + hv -> NO + O2
*********************************
*** organics
*********************************
-[jch2o_a] CH2O + hv -> CO + 2*H
-[jch2o_b] CH2O + hv -> CO + H2
-[jch3ooh] CH3OOH + hv -> CH2O + H + OH
-[jch4_a] CH4 + hv -> H + CH3O2
-[jch4_b] CH4 + hv -> 1.44*H2 + 0.18*CH2O + 0.18*O + 0.33*OH + 0.33*H + 0.44*CO2 + 0.38*CO + 0.05*H2O
-[jco2] CO2 + hv -> CO + O
+[jch2o_a] CH2O + hv -> CO + 2*H
+[jch2o_b] CH2O + hv -> CO + H2
+[jch3ooh] CH3OOH + hv -> CH2O + H + OH
+[jch4_a] CH4 + hv -> H + CH3O2
+[jch4_b] CH4 + hv -> 1.44*H2 + 0.18*CH2O + 0.18*O + 0.33*OH + 0.33*H + 0.44*CO2 + 0.38*CO + 0.05*H2O
+[jco2] CO2 + hv -> CO + O
*********************************
*** halogens
*********************************
-[jbrcl] BRCL + hv -> BR + CL
-[jbro] BRO + hv -> BR + O
-[jbrono2_b] BRONO2 + hv -> BRO + NO2
-[jbrono2_a] BRONO2 + hv -> BR + NO3
-[jccl4] CCL4 + hv -> 4*CL
-[jcf2clbr] CF2CLBR + hv -> BR + CL + COF2
-[jcf3br] CF3BR + hv -> BR + F + COF2
-[jcfcl3] CFC11 + hv -> 2*CL + COFCL
-[jcfc113] CFC113 + hv -> 2*CL + COFCL + COF2
-[jcfc114] CFC114 + hv -> 2*CL + 2*COF2
-[jcfc115] CFC115 + hv -> CL + F + 2*COF2
-[jcf2cl2] CFC12 + hv -> 2*CL + COF2
-[jch2br2] CH2BR2 + hv -> 2*BR
-[jch3br] CH3BR + hv -> BR + CH3O2
-[jch3ccl3] CH3CCL3 + hv -> 3*CL
-[jch3cl] CH3CL + hv -> CL + CH3O2
-[jchbr3] CHBR3 + hv -> 3*BR
-[jcl2] CL2 + hv -> 2*CL
-[jcl2o2] CL2O2 + hv -> 2*CL
-[jclo] CLO + hv -> CL + O
-[jclono2_a] CLONO2 + hv -> CL + NO3
-[jclono2_b] CLONO2 + hv -> CLO + NO2
-[jcof2] COF2 + hv -> 2*F
-[jcofcl] COFCL + hv -> F + CL
-[jh2402] H2402 + hv -> 2*BR + 2*COF2
-[jhbr] HBR + hv -> BR + H
-[jhcfc141b] HCFC141B + hv -> CL + COFCL
-[jhcfc142b] HCFC142B + hv -> CL + COF2
-[jhcfc22] HCFC22 + hv -> CL + COF2
-[jhcl] HCL + hv -> H + CL
-[jhf] HF + hv -> H + F
-[jhobr] HOBR + hv -> BR + OH
-[jhocl] HOCL + hv -> OH + CL
-[joclo] OCLO + hv -> O + CLO
-[jsf6] SF6 + hv -> sink
+[jbrcl] BRCL + hv -> BR + CL
+[jbro] BRO + hv -> BR + O
+[jbrono2_b] BRONO2 + hv -> BRO + NO2
+[jbrono2_a] BRONO2 + hv -> BR + NO3
+[jccl4] CCL4 + hv -> 4*CL
+[jcf2clbr] CF2CLBR + hv -> BR + CL + COF2
+[jcf3br] CF3BR + hv -> BR + F + COF2
+[jcfcl3] CFC11 + hv -> 2*CL + COFCL
+[jcfc113] CFC113 + hv -> 2*CL + COFCL + COF2
+[jcfc114] CFC114 + hv -> 2*CL + 2*COF2
+[jcfc115] CFC115 + hv -> CL + F + 2*COF2
+[jcf2cl2] CFC12 + hv -> 2*CL + COF2
+[jch2br2] CH2BR2 + hv -> 2*BR
+[jch3br] CH3BR + hv -> BR + CH3O2
+[jch3ccl3] CH3CCL3 + hv -> 3*CL
+[jch3cl] CH3CL + hv -> CL + CH3O2
+[jchbr3] CHBR3 + hv -> 3*BR
+[jcl2] CL2 + hv -> 2*CL
+[jcl2o2] CL2O2 + hv -> 2*CL
+[jclo] CLO + hv -> CL + O
+[jclono2_a] CLONO2 + hv -> CL + NO3
+[jclono2_b] CLONO2 + hv -> CLO + NO2
+[jcof2] COF2 + hv -> 2*F
+[jcofcl] COFCL + hv -> F + CL
+[jh2402] H2402 + hv -> 2*BR + 2*COF2
+[jhbr] HBR + hv -> BR + H
+[jhcfc141b] HCFC141B + hv -> CL + COFCL
+[jhcfc142b] HCFC142B + hv -> CL + COF2
+[jhcfc22] HCFC22 + hv -> CL + COF2
+[jhcl] HCL + hv -> H + CL
+[jhf] HF + hv -> H + F
+[jhobr] HOBR + hv -> BR + OH
+[jhocl] HOCL + hv -> OH + CL
+[joclo] OCLO + hv -> O + CLO
+[jsf6] SF6 + hv -> sink
*********************************
*** ions
*********************************
-[jeuv_26=userdefined,userdefined] CO2 + hv -> CO + O
-[jeuv_4=userdefined,userdefined] N + hv -> Np + e
-[jeuv_6=userdefined,userdefined] N2 + hv -> N2p + e
-[jeuv_22=userdefined,userdefined] N2 + hv -> N + Np + e
-[jeuv_23=userdefined,userdefined] N2 + hv -> N2D + Np + e
-[jeuv_25=userdefined,userdefined] N2 + hv -> 1.2*N2D + 0.8*N
-[jeuv_18=userdefined,userdefined] N2 + hv -> N2p + e
-[jeuv_13=userdefined,userdefined] N2 + hv -> 1.2*N2D + 0.8*N
-[jeuv_11=userdefined,userdefined] N2 + hv -> N2D + Np + e
-[jeuv_10=userdefined,userdefined] N2 + hv -> N + Np + e
-[jeuv_3=userdefined,userdefined] O + hv -> Op2P + e
-[jeuv_16=userdefined,userdefined] O + hv -> Op2P + e
-[jeuv_1=userdefined,userdefined] O + hv -> Op + e
-[jeuv_14=userdefined,userdefined] O + hv -> Op + e
-[jeuv_2=userdefined,userdefined] O + hv -> Op2D + e
-[jeuv_15=userdefined,userdefined] O + hv -> Op2D + e
-[jeuv_21=userdefined,userdefined] O2 + hv -> O + Op2P + e
-[jeuv_17=userdefined,userdefined] O2 + hv -> O2p + e
-[jeuv_7=userdefined,userdefined] O2 + hv -> O + Op + e
-[jeuv_5=userdefined,userdefined] O2 + hv -> O2p + e
-[jeuv_19=userdefined,userdefined] O2 + hv -> O + Op + e
-[jeuv_24=userdefined,userdefined] O2 + hv -> 2*O
-[jeuv_12=userdefined,userdefined] O2 + hv -> 2*O
-[jeuv_9=userdefined,userdefined] O2 + hv -> O + Op2P + e
-[jeuv_8=userdefined,userdefined] O2 + hv -> O + Op2D + e
-[jeuv_20=userdefined,userdefined] O2 + hv -> O + Op2D + e
+[jeuv_26=userdefined,userdefined] CO2 + hv -> CO + O
+[jeuv_4=userdefined,userdefined] N + hv -> Np + e
+[jeuv_6=userdefined,userdefined] N2 + hv -> N2p + e
+[jeuv_22=userdefined,userdefined] N2 + hv -> N + Np + e
+[jeuv_23=userdefined,userdefined] N2 + hv -> N2D + Np + e
+[jeuv_25=userdefined,userdefined] N2 + hv -> 1.2*N2D + 0.8*N
+[jeuv_18=userdefined,userdefined] N2 + hv -> N2p + e
+[jeuv_13=userdefined,userdefined] N2 + hv -> 1.2*N2D + 0.8*N
+[jeuv_11=userdefined,userdefined] N2 + hv -> N2D + Np + e
+[jeuv_10=userdefined,userdefined] N2 + hv -> N + Np + e
+[jeuv_3=userdefined,userdefined] O + hv -> Op2P + e
+[jeuv_16=userdefined,userdefined] O + hv -> Op2P + e
+[jeuv_1=userdefined,userdefined] O + hv -> Op + e
+[jeuv_14=userdefined,userdefined] O + hv -> Op + e
+[jeuv_2=userdefined,userdefined] O + hv -> Op2D + e
+[jeuv_15=userdefined,userdefined] O + hv -> Op2D + e
+[jeuv_21=userdefined,userdefined] O2 + hv -> O + Op2P + e
+[jeuv_17=userdefined,userdefined] O2 + hv -> O2p + e
+[jeuv_7=userdefined,userdefined] O2 + hv -> O + Op + e
+[jeuv_5=userdefined,userdefined] O2 + hv -> O2p + e
+[jeuv_19=userdefined,userdefined] O2 + hv -> O + Op + e
+[jeuv_24=userdefined,userdefined] O2 + hv -> 2*O
+[jeuv_12=userdefined,userdefined] O2 + hv -> 2*O
+[jeuv_9=userdefined,userdefined] O2 + hv -> O + Op2P + e
+[jeuv_8=userdefined,userdefined] O2 + hv -> O + Op2D + e
+[jeuv_20=userdefined,userdefined] O2 + hv -> O + Op2D + e
*********************************
*** sulfur
*********************************
-[jh2so4] H2SO4 + hv -> SO3 + H2O
-[jocs] OCS + hv -> S + CO
-[jso] SO + hv -> S + O
-[jso2] SO2 + hv -> SO + O
-[jso3] SO3 + hv -> SO2 + O
+[jh2so4] H2SO4 + hv -> SO3 + H2O
+[jocs] OCS + hv -> S + CO
+[jso] SO + hv -> S + O
+[jso2] SO2 + hv -> SO + O
+[jso3] SO3 + hv -> SO2 + O
End Photolysis
Reactions
*********************************
*** odd-oxygen
*********************************
-[ag1] O2_1D -> O2 ; 0.000258
-[ag2] O2_1S -> O2 ; 0.085
-[O1D_H2] O1D + H2 -> H + OH ; 1.2e-10
-[O1D_H2O] O1D + H2O -> 2*OH ; 1.63e-10, 60
-[O1D_N2,cph=189.81] O1D + N2 -> O + N2 ; 2.15e-11, 110
-[O1D_O2,cph=32.91] O1D + O2 -> O + O2_1S ; 2.64e-11, 55
-[O1D_O2b,cph=189.81] O1D + O2 -> O + O2 ; 6.6e-12, 55
-[O1D_O3] O1D + O3 -> O2 + O2 ; 1.2e-10
-[O2_1D_N2,cph=94.3] O2_1D + N2 -> O2 + N2 ; 1e-20
-[O2_1D_O,cph=94.3] O2_1D + O -> O2 + O ; 1.3e-16
-[O2_1D_O2,cph=94.3] O2_1D + O2 -> 2*O2 ; 3.6e-18, -220
-[O2_1S_CO2] O2_1S + CO2 -> O2_1D + CO2 ; 4.2e-13
-[O2_1S_N2,cph=62.6] O2_1S + N2 -> O2_1D + N2 ; 1.8e-15, 45
-[O2_1S_O,cph=62.6] O2_1S + O -> O2_1D + O ; 8e-14
-[O2_1S_O2,cph=62.6] O2_1S + O2 -> O2_1D + O2 ; 3.9e-17
-[O2_1S_O3,cph=62.6] O2_1S + O3 -> O2_1D + O3 ; 3.5e-11, -135
-[O_O3,cph=392.19] O + O3 -> 2*O2 ; 8e-12, -2060
-[usr_O_O,cph=493.58] O + O + M -> O2 + M
-[usr_O_O2,cph=101.39] O + O2 + M -> O3 + M
+[ag1] O2_1D -> O2 ; 0.000258
+[ag2] O2_1S -> O2 ; 0.085
+[O1D_H2] O1D + H2 -> H + OH ; 1.2e-10
+[O1D_H2O] O1D + H2O -> 2*OH ; 1.63e-10, 60
+[O1D_N2,cph=189.81] O1D + N2 -> O + N2 ; 2.15e-11, 110
+[O1D_O2,cph=32.91] O1D + O2 -> O + O2_1S ; 2.64e-11, 55
+[O1D_O2b,cph=189.81] O1D + O2 -> O + O2 ; 6.6e-12, 55
+[O1D_O3] O1D + O3 -> O2 + O2 ; 1.2e-10
+[O2_1D_N2,cph=94.3] O2_1D + N2 -> O2 + N2 ; 1e-20
+[O2_1D_O,cph=94.3] O2_1D + O -> O2 + O ; 1.3e-16
+[O2_1D_O2,cph=94.3] O2_1D + O2 -> 2*O2 ; 3.6e-18, -220
+[O2_1S_CO2] O2_1S + CO2 -> O2_1D + CO2 ; 4.2e-13
+[O2_1S_N2,cph=62.6] O2_1S + N2 -> O2_1D + N2 ; 1.8e-15, 45
+[O2_1S_O,cph=62.6] O2_1S + O -> O2_1D + O ; 8e-14
+[O2_1S_O2,cph=62.6] O2_1S + O2 -> O2_1D + O2 ; 3.9e-17
+[O2_1S_O3,cph=62.6] O2_1S + O3 -> O2_1D + O3 ; 3.5e-11, -135
+[O_O3,cph=392.19] O + O3 -> 2*O2 ; 8e-12, -2060
+[usr_O_O,cph=493.58] O + O + M -> O2 + M
+[usr_O_O2,cph=101.39] O + O2 + M -> O3 + M
*********************************
*** odd-hydrogen
*********************************
-[H2_O] H2 + O -> OH + H ; 1.6e-11, -4570
-[H2O2_O] H2O2 + O -> OH + HO2 ; 1.4e-12, -2000
-[H_HO2,cph=232.59] H + HO2 -> H2 + O2 ; 6.9e-12
-[H_HO2a] H + HO2 -> 2*OH ; 7.2e-11
-[H_HO2b] H + HO2 -> H2O + O ; 1.6e-12
-[H_O2,cph=203.4] H + O2 + M -> HO2 + M ; 5.3e-32, 1.8, 9.5e-11, -0.4, 0.6
-[HO2_O,cph=226.58] HO2 + O -> OH + O2 ; 3e-11, 200
-[HO2_O3,cph=120.1] HO2 + O3 -> OH + 2*O2 ; 1e-14, -490
-[H_O3,cph=194.71] H + O3 -> OH + O2 ; 1.4e-10, -470
-[OH_H2] OH + H2 -> H2O + H ; 2.8e-12, -1800
-[OH_H2O2] OH + H2O2 -> H2O + HO2 ; 1.8e-12
-[OH_HO2,cph=293.62] OH + HO2 -> H2O + O2 ; 4.8e-11, 250
-[OH_O,cph=67.67] OH + O -> H + O2 ; 1.8e-11, 180
-[OH_O3,cph=165.3] OH + O3 -> HO2 + O2 ; 1.7e-12, -940
-[OH_OH] OH + OH -> H2O + O ; 1.8e-12
-[OH_OH_M] OH + OH + M -> H2O2 + M ; 6.9e-31, 1, 2.6e-11, 0, 0.6
-[usr_HO2_HO2,cph=165.51] HO2 + HO2 -> H2O2 + O2
+[H2_O] H2 + O -> OH + H ; 1.6e-11, -4570
+[H2O2_O] H2O2 + O -> OH + HO2 ; 1.4e-12, -2000
+[H_HO2,cph=232.59] H + HO2 -> H2 + O2 ; 6.9e-12
+[H_HO2a] H + HO2 -> 2*OH ; 7.2e-11
+[H_HO2b] H + HO2 -> H2O + O ; 1.6e-12
+[H_O2,cph=203.4] H + O2 + M -> HO2 + M ; 5.3e-32, 1.8, 9.5e-11, -0.4, 0.6
+[HO2_O,cph=226.58] HO2 + O -> OH + O2 ; 3e-11, 200
+[HO2_O3,cph=120.1] HO2 + O3 -> OH + 2*O2 ; 1e-14, -490
+[H_O3,cph=194.71] H + O3 -> OH + O2 ; 1.4e-10, -470
+[OH_H2] OH + H2 -> H2O + H ; 2.8e-12, -1800
+[OH_H2O2] OH + H2O2 -> H2O + HO2 ; 1.8e-12
+[OH_HO2,cph=293.62] OH + HO2 -> H2O + O2 ; 4.8e-11, 250
+[OH_O,cph=67.67] OH + O -> H + O2 ; 1.8e-11, 180
+[OH_O3,cph=165.3] OH + O3 -> HO2 + O2 ; 1.7e-12, -940
+[OH_OH] OH + OH -> H2O + O ; 1.8e-12
+[OH_OH_M] OH + OH + M -> H2O2 + M ; 6.9e-31, 1, 2.6e-11, 0, 0.6
+[usr_HO2_HO2,cph=165.51] HO2 + HO2 -> H2O2 + O2
*********************************
*** odd-nitrogen
*********************************
-[HO2NO2_OH] HO2NO2 + OH -> H2O + NO2 + O2 ; 4.5e-13, 610
-[N2D_O,cph=229.61] N2D + O -> N + O ; 7e-13
-[N2D_O2,cph=177.51] N2D + O2 -> NO + O1D ; 5e-12
-[N_NO,cph=313.75] N + NO -> N2 + O ; 2.1e-11, 100
-[N_NO2a] N + NO2 -> N2O + O ; 2.9e-12, 220
-[N_NO2b] N + NO2 -> 2*NO ; 1.45e-12, 220
-[N_NO2c] N + NO2 -> N2 + O2 ; 1.45e-12, 220
-[N_O2,cph=133.75] N + O2 -> NO + O ; 3.3e-12, -3150
-[NO2_O,cph=193.02] NO2 + O -> NO + O2 ; 5.1e-12, 210
-[NO2_O3] NO2 + O3 -> NO3 + O2 ; 1.2e-13, -2450
-[NO2_O_M] NO2 + O + M -> NO3 + M ; 2.5e-31, 1.8, 2.2e-11, 0.7, 0.6
-[NO3_HO2] NO3 + HO2 -> OH + NO2 + O2 ; 3.5e-12
-[NO3_NO] NO3 + NO -> 2*NO2 ; 1.7e-11, 125
-[NO3_O] NO3 + O -> NO2 + O2 ; 1.3e-11
-[NO3_OH] NO3 + OH -> HO2 + NO2 ; 2.2e-11
-[N_OH] N + OH -> NO + H ; 5e-11
-[NO_HO2,cph=34.47] NO + HO2 -> NO2 + OH ; 3.44e-12, 260
-[NO_O3,cph=199.17] NO + O3 -> NO2 + O2 ; 3e-12, -1500
-[NO_O_M] NO + O + M -> NO2 + M ; 9e-32, 1.5, 3e-11, 0, 0.6
-[O1D_N2Oa] O1D + N2O -> 2*NO ; 7.26e-11, 20
-[O1D_N2Ob] O1D + N2O -> N2 + O2 ; 4.64e-11, 20
-[tag_NO2_HO2] NO2 + HO2 + M -> HO2NO2 + M ; 1.9e-31, 3.4, 4e-12, 0.3, 0.6
-[tag_NO2_NO3] NO2 + NO3 + M -> N2O5 + M ; 2.4e-30, 3, 1.6e-12, -0.1, 0.6
-[tag_NO2_OH] NO2 + OH + M -> HNO3 + M ; 1.8e-30, 3, 2.8e-11, 0, 0.6
-[usr_HNO3_OH] HNO3 + OH -> NO3 + H2O
-[usr_HO2NO2_M] HO2NO2 + M -> HO2 + NO2 + M
-[usr_N2O5_M] N2O5 + M -> NO2 + NO3 + M
+[HO2NO2_OH] HO2NO2 + OH -> H2O + NO2 + O2 ; 4.5e-13, 610
+[N2D_O,cph=229.61] N2D + O -> N + O ; 7e-13
+[N2D_O2,cph=177.51] N2D + O2 -> NO + O1D ; 5e-12
+[N_NO,cph=313.75] N + NO -> N2 + O ; 2.1e-11, 100
+[N_NO2a] N + NO2 -> N2O + O ; 2.9e-12, 220
+[N_NO2b] N + NO2 -> 2*NO ; 1.45e-12, 220
+[N_NO2c] N + NO2 -> N2 + O2 ; 1.45e-12, 220
+[N_O2,cph=133.75] N + O2 -> NO + O ; 3.3e-12, -3150
+[NO2_O,cph=193.02] NO2 + O -> NO + O2 ; 5.1e-12, 210
+[NO2_O3] NO2 + O3 -> NO3 + O2 ; 1.2e-13, -2450
+[NO2_O_M] NO2 + O + M -> NO3 + M ; 2.5e-31, 1.8, 2.2e-11, 0.7, 0.6
+[NO3_HO2] NO3 + HO2 -> OH + NO2 + O2 ; 3.5e-12
+[NO3_NO] NO3 + NO -> 2*NO2 ; 1.7e-11, 125
+[NO3_O] NO3 + O -> NO2 + O2 ; 1.3e-11
+[NO3_OH] NO3 + OH -> HO2 + NO2 ; 2.2e-11
+[N_OH] N + OH -> NO + H ; 5e-11
+[NO_HO2,cph=34.47] NO + HO2 -> NO2 + OH ; 3.44e-12, 260
+[NO_O3,cph=199.17] NO + O3 -> NO2 + O2 ; 3e-12, -1500
+[NO_O_M] NO + O + M -> NO2 + M ; 9e-32, 1.5, 3e-11, 0, 0.6
+[O1D_N2Oa] O1D + N2O -> 2*NO ; 7.26e-11, 20
+[O1D_N2Ob] O1D + N2O -> N2 + O2 ; 4.64e-11, 20
+[tag_NO2_HO2] NO2 + HO2 + M -> HO2NO2 + M ; 1.9e-31, 3.4, 4e-12, 0.3, 0.6
+[tag_NO2_NO3] NO2 + NO3 + M -> N2O5 + M ; 2.4e-30, 3, 1.6e-12, -0.1, 0.6
+[tag_NO2_OH] NO2 + OH + M -> HNO3 + M ; 1.8e-30, 3, 2.8e-11, 0, 0.6
+[usr_HNO3_OH] HNO3 + OH -> NO3 + H2O
+[usr_HO2NO2_M] HO2NO2 + M -> HO2 + NO2 + M
+[usr_N2O5_M] N2O5 + M -> NO2 + NO3 + M
*********************************
*** odd-chlorine
*********************************
-[CL_CH2O] CL + CH2O -> HCL + HO2 + CO ; 8.1e-11, -30
-[CL_CH4] CL + CH4 -> CH3O2 + HCL ; 7.1e-12, -1270
-[CL_H2] CL + H2 -> HCL + H ; 3.05e-11, -2270
-[CL_H2O2] CL + H2O2 -> HCL + HO2 ; 1.1e-11, -980
-[CL_HO2a] CL + HO2 -> HCL + O2 ; 1.4e-11, 270
-[CL_HO2b] CL + HO2 -> OH + CLO ; 3.6e-11, -375
-[CL_O3] CL + O3 -> CLO + O2 ; 2.3e-11, -200
-[CLO_CH3O2] CLO + CH3O2 -> CL + HO2 + CH2O ; 3.3e-12, -115
-[CLO_CLOa] CLO + CLO -> 2*CL + O2 ; 3e-11, -2450
-[CLO_CLOb] CLO + CLO -> CL2 + O2 ; 1e-12, -1590
-[CLO_CLOc] CLO + CLO -> CL + OCLO ; 3.5e-13, -1370
-[CLO_HO2] CLO + HO2 -> O2 + HOCL ; 2.6e-12, 290
-[CLO_NO] CLO + NO -> NO2 + CL ; 6.4e-12, 290
-[CLONO2_CL] CLONO2 + CL -> CL2 + NO3 ; 6.5e-12, 135
-[CLO_NO2_M] CLO + NO2 + M -> CLONO2 + M ; 1.8e-31, 3.4, 1.5e-11, 1.9, 0.6
-[CLONO2_O] CLONO2 + O -> CLO + NO3 ; 3.6e-12, -840
-[CLONO2_OH] CLONO2 + OH -> HOCL + NO3 ; 1.2e-12, -330
-[CLO_O] CLO + O -> CL + O2 ; 2.8e-11, 85
-[CLO_OHa] CLO + OH -> CL + HO2 ; 7.4e-12, 270
-[CLO_OHb] CLO + OH -> HCL + O2 ; 6e-13, 230
-[HCL_O] HCL + O -> CL + OH ; 1e-11, -3300
-[HCL_OH] HCL + OH -> H2O + CL ; 1.8e-12, -250
-[HOCL_CL] HOCL + CL -> HCL + CLO ; 3.4e-12, -130
-[HOCL_O] HOCL + O -> CLO + OH ; 1.7e-13
-[HOCL_OH] HOCL + OH -> H2O + CLO ; 3e-12, -500
-[O1D_CCL4] O1D + CCL4 -> 4*CL ; 2.607e-10
-[O1D_CF2CLBR] O1D + CF2CLBR -> CL + BR + COF2 ; 9.75e-11
-[O1D_CFC11] O1D + CFC11 -> 2*CL + COFCL ; 2.07e-10
-[O1D_CFC113] O1D + CFC113 -> 2*CL + COFCL + COF2 ; 2.088e-10
-[O1D_CFC114] O1D + CFC114 -> 2*CL + 2*COF2 ; 1.17e-10
-[O1D_CFC115] O1D + CFC115 -> CL + F + 2*COF2 ; 4.644e-11
-[O1D_CFC12] O1D + CFC12 -> 2*CL + COF2 ; 1.204e-10
-[O1D_HCLa] O1D + HCL -> CL + OH ; 9.9e-11
-[O1D_HCLb] O1D + HCL -> CLO + H ; 3.3e-12
-[tag_CLO_CLO_M] CLO + CLO + M -> CL2O2 + M ; 1.9e-32, 3.6, 3.7e-12, 1.6, 0.6
-[usr_CL2O2_M] CL2O2 + M -> CLO + CLO + M
+[CL_CH2O] CL + CH2O -> HCL + HO2 + CO ; 8.1e-11, -30
+[CL_CH4] CL + CH4 -> CH3O2 + HCL ; 7.1e-12, -1270
+[CL_H2] CL + H2 -> HCL + H ; 3.05e-11, -2270
+[CL_H2O2] CL + H2O2 -> HCL + HO2 ; 1.1e-11, -980
+[CL_HO2a] CL + HO2 -> HCL + O2 ; 1.4e-11, 270
+[CL_HO2b] CL + HO2 -> OH + CLO ; 3.6e-11, -375
+[CL_O3] CL + O3 -> CLO + O2 ; 2.3e-11, -200
+[CLO_CH3O2] CLO + CH3O2 -> CL + HO2 + CH2O ; 3.3e-12, -115
+[CLO_CLOa] CLO + CLO -> 2*CL + O2 ; 3e-11, -2450
+[CLO_CLOb] CLO + CLO -> CL2 + O2 ; 1e-12, -1590
+[CLO_CLOc] CLO + CLO -> CL + OCLO ; 3.5e-13, -1370
+[CLO_HO2] CLO + HO2 -> O2 + HOCL ; 2.6e-12, 290
+[CLO_NO] CLO + NO -> NO2 + CL ; 6.4e-12, 290
+[CLONO2_CL] CLONO2 + CL -> CL2 + NO3 ; 6.5e-12, 135
+[CLO_NO2_M] CLO + NO2 + M -> CLONO2 + M ; 1.8e-31, 3.4, 1.5e-11, 1.9, 0.6
+[CLONO2_O] CLONO2 + O -> CLO + NO3 ; 3.6e-12, -840
+[CLONO2_OH] CLONO2 + OH -> HOCL + NO3 ; 1.2e-12, -330
+[CLO_O] CLO + O -> CL + O2 ; 2.8e-11, 85
+[CLO_OHa] CLO + OH -> CL + HO2 ; 7.4e-12, 270
+[CLO_OHb] CLO + OH -> HCL + O2 ; 6e-13, 230
+[HCL_O] HCL + O -> CL + OH ; 1e-11, -3300
+[HCL_OH] HCL + OH -> H2O + CL ; 1.8e-12, -250
+[HOCL_CL] HOCL + CL -> HCL + CLO ; 3.4e-12, -130
+[HOCL_O] HOCL + O -> CLO + OH ; 1.7e-13
+[HOCL_OH] HOCL + OH -> H2O + CLO ; 3e-12, -500
+[O1D_CCL4] O1D + CCL4 -> 4*CL ; 2.607e-10
+[O1D_CF2CLBR] O1D + CF2CLBR -> CL + BR + COF2 ; 9.75e-11
+[O1D_CFC11] O1D + CFC11 -> 2*CL + COFCL ; 2.07e-10
+[O1D_CFC113] O1D + CFC113 -> 2*CL + COFCL + COF2 ; 2.088e-10
+[O1D_CFC114] O1D + CFC114 -> 2*CL + 2*COF2 ; 1.17e-10
+[O1D_CFC115] O1D + CFC115 -> CL + F + 2*COF2 ; 4.644e-11
+[O1D_CFC12] O1D + CFC12 -> 2*CL + COF2 ; 1.204e-10
+[O1D_HCLa] O1D + HCL -> CL + OH ; 9.9e-11
+[O1D_HCLb] O1D + HCL -> CLO + H ; 3.3e-12
+[tag_CLO_CLO_M] CLO + CLO + M -> CL2O2 + M ; 1.9e-32, 3.6, 3.7e-12, 1.6, 0.6
+[usr_CL2O2_M] CL2O2 + M -> CLO + CLO + M
*********************************
*** odd-bromine
*********************************
-[BR_CH2O] BR + CH2O -> HBR + HO2 + CO ; 1.7e-11, -800
-[BR_HO2] BR + HO2 -> HBR + O2 ; 4.8e-12, -310
-[BR_O3] BR + O3 -> BRO + O2 ; 1.6e-11, -780
-[BRO_BRO] BRO + BRO -> 2*BR + O2 ; 1.5e-12, 230
-[BRO_CLOa] BRO + CLO -> BR + OCLO ; 9.5e-13, 550
-[BRO_CLOb] BRO + CLO -> BR + CL + O2 ; 2.3e-12, 260
-[BRO_CLOc] BRO + CLO -> BRCL + O2 ; 4.1e-13, 290
-[BRO_HO2] BRO + HO2 -> HOBR + O2 ; 4.5e-12, 460
-[BRO_NO] BRO + NO -> BR + NO2 ; 8.8e-12, 260
-[BRO_NO2_M] BRO + NO2 + M -> BRONO2 + M ; 5.2e-31, 3.2, 6.9e-12, 2.9, 0.6
-[BRONO2_O] BRONO2 + O -> BRO + NO3 ; 1.9e-11, 215
-[BRO_O] BRO + O -> BR + O2 ; 1.9e-11, 230
-[BRO_OH] BRO + OH -> BR + HO2 ; 1.7e-11, 250
-[HBR_O] HBR + O -> BR + OH ; 5.8e-12, -1500
-[HBR_OH] HBR + OH -> BR + H2O ; 5.5e-12, 200
-[HOBR_O] HOBR + O -> BRO + OH ; 1.2e-10, -430
-[O1D_CF3BR] O1D + CF3BR -> BR + F + COF2 ; 4.5e-11
-[O1D_CHBR3] O1D + CHBR3 -> 3*BR ; 4.62e-10
-[O1D_H2402] O1D + H2402 -> 2*BR + 2*COF2 ; 1.2e-10
-[O1D_HBRa] O1D + HBR -> BR + OH ; 9e-11
-[O1D_HBRb] O1D + HBR -> BRO + H ; 3e-11
+[BR_CH2O] BR + CH2O -> HBR + HO2 + CO ; 1.7e-11, -800
+[BR_HO2] BR + HO2 -> HBR + O2 ; 4.8e-12, -310
+[BR_O3] BR + O3 -> BRO + O2 ; 1.6e-11, -780
+[BRO_BRO] BRO + BRO -> 2*BR + O2 ; 1.5e-12, 230
+[BRO_CLOa] BRO + CLO -> BR + OCLO ; 9.5e-13, 550
+[BRO_CLOb] BRO + CLO -> BR + CL + O2 ; 2.3e-12, 260
+[BRO_CLOc] BRO + CLO -> BRCL + O2 ; 4.1e-13, 290
+[BRO_HO2] BRO + HO2 -> HOBR + O2 ; 4.5e-12, 460
+[BRO_NO] BRO + NO -> BR + NO2 ; 8.8e-12, 260
+[BRO_NO2_M] BRO + NO2 + M -> BRONO2 + M ; 5.2e-31, 3.2, 6.9e-12, 2.9, 0.6
+[BRONO2_O] BRONO2 + O -> BRO + NO3 ; 1.9e-11, 215
+[BRO_O] BRO + O -> BR + O2 ; 1.9e-11, 230
+[BRO_OH] BRO + OH -> BR + HO2 ; 1.7e-11, 250
+[HBR_O] HBR + O -> BR + OH ; 5.8e-12, -1500
+[HBR_OH] HBR + OH -> BR + H2O ; 5.5e-12, 200
+[HOBR_O] HOBR + O -> BRO + OH ; 1.2e-10, -430
+[O1D_CF3BR] O1D + CF3BR -> BR + F + COF2 ; 4.5e-11
+[O1D_CHBR3] O1D + CHBR3 -> 3*BR ; 4.62e-10
+[O1D_H2402] O1D + H2402 -> 2*BR + 2*COF2 ; 1.2e-10
+[O1D_HBRa] O1D + HBR -> BR + OH ; 9e-11
+[O1D_HBRb] O1D + HBR -> BRO + H ; 3e-11
*********************************
*** odd-fluorine
*********************************
-[F_CH4] F + CH4 -> HF + CH3O2 ; 1.6e-10, -260
-[F_H2] F + H2 -> HF + H ; 1.4e-10, -500
-[F_H2O] F + H2O -> HF + OH ; 1.4e-11, 0
-[F_HNO3] F + HNO3 -> HF + NO3 ; 6e-12, 400
-[O1D_COF2] O1D + COF2 -> 2*F ; 2.14e-11
-[O1D_COFCL] O1D + COFCL -> F + CL ; 1.9e-10
+[F_CH4] F + CH4 -> HF + CH3O2 ; 1.6e-10, -260
+[F_H2] F + H2 -> HF + H ; 1.4e-10, -500
+[F_H2O] F + H2O -> HF + OH ; 1.4e-11, 0
+[F_HNO3] F + HNO3 -> HF + NO3 ; 6e-12, 400
+[O1D_COF2] O1D + COF2 -> 2*F ; 2.14e-11
+[O1D_COFCL] O1D + COFCL -> F + CL ; 1.9e-10
*********************************
*** organic-halogens
*********************************
-[CH2BR2_CL] CH2BR2 + CL -> 2*BR + HCL ; 6.3e-12, -800
-[CH2BR2_OH] CH2BR2 + OH -> 2*BR + H2O ; 2e-12, -840
-[CH3BR_CL] CH3BR + CL -> HCL + HO2 + BR ; 1.46e-11, -1040
-[CH3BR_OH] CH3BR + OH -> BR + H2O + HO2 ; 1.42e-12, -1150
-[CH3CCL3_OH] CH3CCL3 + OH -> H2O + 3*CL ; 1.64e-12, -1520
-[CH3CL_CL] CH3CL + CL -> HO2 + CO + 2*HCL ; 2.03e-11, -1110
-[CH3CL_OH] CH3CL + OH -> CL + H2O + HO2 ; 1.96e-12, -1200
-[CHBR3_CL] CHBR3 + CL -> 3*BR + HCL ; 4.85e-12, -850
-[CHBR3_OH] CHBR3 + OH -> 3*BR ; 9e-13, -360
-[HCFC141B_OH] HCFC141B + OH -> CL + COFCL ; 1.25e-12, -1600
-[HCFC142B_OH] HCFC142B + OH -> CL + COF2 ; 1.3e-12, -1770
-[HCFC22_OH] HCFC22 + OH -> H2O + CL + COF2 ; 9.2e-13, -1560
-[O1D_CH2BR2] O1D + CH2BR2 -> 2*BR ; 2.57e-10
-[O1D_CH3BR] O1D + CH3BR -> BR ; 1.8e-10
-[O1D_HCFC141B] O1D + HCFC141B -> CL + COFCL ; 1.794e-10
-[O1D_HCFC142B] O1D + HCFC142B -> CL + COF2 ; 1.3e-10
-[O1D_HCFC22] O1D + HCFC22 -> CL + COF2 ; 7.65e-11
+[CH2BR2_CL] CH2BR2 + CL -> 2*BR + HCL ; 6.3e-12, -800
+[CH2BR2_OH] CH2BR2 + OH -> 2*BR + H2O ; 2e-12, -840
+[CH3BR_CL] CH3BR + CL -> HCL + HO2 + BR ; 1.46e-11, -1040
+[CH3BR_OH] CH3BR + OH -> BR + H2O + HO2 ; 1.42e-12, -1150
+[CH3CCL3_OH] CH3CCL3 + OH -> H2O + 3*CL ; 1.64e-12, -1520
+[CH3CL_CL] CH3CL + CL -> HO2 + CO + 2*HCL ; 2.03e-11, -1110
+[CH3CL_OH] CH3CL + OH -> CL + H2O + HO2 ; 1.96e-12, -1200
+[CHBR3_CL] CHBR3 + CL -> 3*BR + HCL ; 4.85e-12, -850
+[CHBR3_OH] CHBR3 + OH -> 3*BR ; 9e-13, -360
+[HCFC141B_OH] HCFC141B + OH -> CL + COFCL ; 1.25e-12, -1600
+[HCFC142B_OH] HCFC142B + OH -> CL + COF2 ; 1.3e-12, -1770
+[HCFC22_OH] HCFC22 + OH -> H2O + CL + COF2 ; 9.2e-13, -1560
+[O1D_CH2BR2] O1D + CH2BR2 -> 2*BR ; 2.57e-10
+[O1D_CH3BR] O1D + CH3BR -> BR ; 1.8e-10
+[O1D_HCFC141B] O1D + HCFC141B -> CL + COFCL ; 1.794e-10
+[O1D_HCFC142B] O1D + HCFC142B -> CL + COF2 ; 1.3e-10
+[O1D_HCFC22] O1D + HCFC22 -> CL + COF2 ; 7.65e-11
*********************************
*** C1
*********************************
-[CH2O_NO3] CH2O + NO3 -> CO + HO2 + HNO3 ; 6e-13, -2058
-[CH2O_O] CH2O + O -> HO2 + OH + CO ; 3.4e-11, -1600
-[CH2O_OH] CH2O + OH -> CO + H2O + H ; 5.5e-12, 125
-[CH3O2_HO2] CH3O2 + HO2 -> CH3OOH + O2 ; 4.1e-13, 750
-[CH3O2_NO] CH3O2 + NO -> CH2O + NO2 + HO2 ; 2.8e-12, 300
-[CH3OOH_OH] CH3OOH + OH -> 0.7*CH3O2 + 0.3*OH + 0.3*CH2O + H2O ; 3.8e-12, 200
-[CH4_OH] CH4 + OH -> CH3O2 + H2O ; 2.45e-12, -1775
-[O1D_CH4a] O1D + CH4 -> CH3O2 + OH ; 1.31e-10
-[O1D_CH4b] O1D + CH4 -> CH2O + H + HO2 ; 3.5e-11
-[O1D_CH4c] O1D + CH4 -> CH2O + H2 ; 9e-12
-[usr_CO_OH] CO + OH -> CO2 + HO2
+[CH2O_NO3] CH2O + NO3 -> CO + HO2 + HNO3 ; 6e-13, -2058
+[CH2O_O] CH2O + O -> HO2 + OH + CO ; 3.4e-11, -1600
+[CH2O_OH] CH2O + OH -> CO + H2O + H ; 5.5e-12, 125
+[CH3O2_HO2] CH3O2 + HO2 -> CH3OOH + O2 ; 4.1e-13, 750
+[CH3O2_NO] CH3O2 + NO -> CH2O + NO2 + HO2 ; 2.8e-12, 300
+[CH3OOH_OH] CH3OOH + OH -> 0.7*CH3O2 + 0.3*OH + 0.3*CH2O + H2O ; 3.8e-12, 200
+[CH4_OH] CH4 + OH -> CH3O2 + H2O ; 2.45e-12, -1775
+[O1D_CH4a] O1D + CH4 -> CH3O2 + OH ; 1.31e-10
+[O1D_CH4b] O1D + CH4 -> CH2O + H + HO2 ; 3.5e-11
+[O1D_CH4c] O1D + CH4 -> CH2O + H2 ; 9e-12
+[usr_CO_OH] CO + OH -> CO2 + HO2
*********************************
*** Sulfur
*********************************
-[DMS_NO3] DMS + NO3 -> SO2 + HNO3 ; 1.9e-13, 520
-[DMS_OHa] DMS + OH -> SO2 ; 1.1e-11, -280
-[OCS_O] OCS + O -> SO + CO ; 2.1e-11, -2200
-[OCS_OH] OCS + OH -> SO2 + CO + H ; 7.2e-14, -1070
-[S_O2] S + O2 -> SO + O ; 2.3e-12
-[SO2_OH_M] SO2 + OH + M -> SO3 + HO2 ; 2.9e-31, 4.1, 1.7e-12, -0.2, 0.6
-[S_O3] S + O3 -> SO + O2 ; 1.2e-11
-[SO_BRO] SO + BRO -> SO2 + BR ; 5.7e-11
-[SO_CLO] SO + CLO -> SO2 + CL ; 2.8e-11
-[S_OH] S + OH -> SO + H ; 6.6e-11
-[SO_NO2] SO + NO2 -> SO2 + NO ; 1.4e-11
-[SO_O2] SO + O2 -> SO2 + O ; 1.6e-13, -2280
-[SO_O3] SO + O3 -> SO2 + O2 ; 3.4e-12, -1100
-[SO_OCLO] SO + OCLO -> SO2 + CLO ; 1.9e-12
-[SO_OH] SO + OH -> SO2 + H ; 2.6e-11, 330
-[usr_DMS_OH] DMS + OH -> 0.5*SO2 + 0.5*HO2
-[usr_SO3_H2O] SO3 + H2O -> H2SO4
+[DMS_NO3] DMS + NO3 -> SO2 + HNO3 ; 1.9e-13, 520
+[DMS_OHa] DMS + OH -> SO2 ; 1.1e-11, -280
+[OCS_O] OCS + O -> SO + CO ; 2.1e-11, -2200
+[OCS_OH] OCS + OH -> SO2 + CO + H ; 7.2e-14, -1070
+[S_O2] S + O2 -> SO + O ; 2.3e-12
+[SO2_OH_M] SO2 + OH + M -> SO3 + HO2 ; 2.9e-31, 4.1, 1.7e-12, -0.2, 0.6
+[S_O3] S + O3 -> SO + O2 ; 1.2e-11
+[SO_BRO] SO + BRO -> SO2 + BR ; 5.7e-11
+[SO_CLO] SO + CLO -> SO2 + CL ; 2.8e-11
+[S_OH] S + OH -> SO + H ; 6.6e-11
+[SO_NO2] SO + NO2 -> SO2 + NO ; 1.4e-11
+[SO_O2] SO + O2 -> SO2 + O ; 1.6e-13, -2280
+[SO_O3] SO + O3 -> SO2 + O2 ; 3.4e-12, -1100
+[SO_OCLO] SO + OCLO -> SO2 + CLO ; 1.9e-12
+[SO_OH] SO + OH -> SO2 + H ; 2.6e-11, 330
+[usr_DMS_OH] DMS + OH -> 0.5*SO2 + 0.5*HO2
+[usr_SO3_H2O] SO3 + H2O -> H2SO4
*********************************
*** Tropospheric Aerosol
*********************************
-[usr_HO2_aer] HO2 -> 0.5*H2O2
-[usr_N2O5_aer] N2O5 -> 2*HNO3
-[usr_NO2_aer] NO2 -> 0.5*OH + 0.5*NO + 0.5*HNO3
-[usr_NO3_aer] NO3 -> HNO3
+[usr_HO2_aer] HO2 -> 0.5*H2O2
+[usr_N2O5_aer] N2O5 -> 2*HNO3
+[usr_NO2_aer] NO2 -> 0.5*OH + 0.5*NO + 0.5*HNO3
+[usr_NO3_aer] NO3 -> HNO3
*********************************
*** Stratospheric Aerosol
*********************************
-[het1] N2O5 -> 2*HNO3
-[het10] HOCL + HCL -> CL2 + H2O
-[het11] BRONO2 -> HOBR + HNO3
-[het12] N2O5 -> 2*HNO3
-[het13] CLONO2 -> HOCL + HNO3
-[het14] BRONO2 -> HOBR + HNO3
-[het15] CLONO2 + HCL -> CL2 + HNO3
-[het16] HOCL + HCL -> CL2 + H2O
-[het17] HOBR + HCL -> BRCL + H2O
-[het2] CLONO2 -> HOCL + HNO3
-[het3] BRONO2 -> HOBR + HNO3
-[het4] CLONO2 + HCL -> CL2 + HNO3
-[het5] HOCL + HCL -> CL2 + H2O
-[het6] HOBR + HCL -> BRCL + H2O
-[het7] N2O5 -> 2*HNO3
-[het8] CLONO2 -> HOCL + HNO3
-[het9] CLONO2 + HCL -> CL2 + HNO3
+[het1] N2O5 -> 2*HNO3
+[het10] HOCL + HCL -> CL2 + H2O
+[het11] BRONO2 -> HOBR + HNO3
+[het12] N2O5 -> 2*HNO3
+[het13] CLONO2 -> HOCL + HNO3
+[het14] BRONO2 -> HOBR + HNO3
+[het15] CLONO2 + HCL -> CL2 + HNO3
+[het16] HOCL + HCL -> CL2 + H2O
+[het17] HOBR + HCL -> BRCL + H2O
+[het2] CLONO2 -> HOCL + HNO3
+[het3] BRONO2 -> HOBR + HNO3
+[het4] CLONO2 + HCL -> CL2 + HNO3
+[het5] HOCL + HCL -> CL2 + H2O
+[het6] HOBR + HCL -> BRCL + H2O
+[het7] N2O5 -> 2*HNO3
+[het8] CLONO2 -> HOCL + HNO3
+[het9] CLONO2 + HCL -> CL2 + HNO3
*********************************
*** Ions
*********************************
-[ag247nm,cph=483.39] Op2P -> Op ; 0.047
-[ag373nm,cph=321.3] Op2D -> Op ; 7.7e-05
-[ag732nm,cph=163.06] Op2P -> Op2D ; 0.171
-[elec1,cph=82.389] NOp + e -> 0.2*N + 0.8*N2D + O
-[elec2,cph=508.95] O2p + e -> 1.15*O + 0.85*O1D
-[elec3,cph=354.83] N2p + e -> 1.1*N + 0.9*N2D
-[ion_N2p_O2,cph=339.59] N2p + O2 -> O2p + N2 ; 6e-11
-[ion_N2p_Oa,cph=67.53] N2p + O -> NOp + N2D
-[ion_N2p_Ob] N2p + O -> Op + N2
-[ion_Np_O,cph=95.55] Np + O -> Op + N ; 1e-12
-[ion_Np_O2a,cph=239.84] Np + O2 -> O2p + N ; 4e-10
-[ion_Np_O2b,cph=646.28] Np + O2 -> NOp + O ; 2e-10
-[ion_O2p_N,cph=406.16] O2p + N -> NOp + O ; 1e-10
-[ion_O2p_N2] O2p + N2 -> NOp + NO ; 5e-16
-[ion_O2p_NO,cph=271.38] O2p + NO -> NOp + O2 ; 4.4e-10
-[ion_Op_CO2] Op + CO2 -> O2p + CO ; 9e-10
-[ion_Op_N2,cph=105.04] Op + N2 -> NOp + N
-[ion_Op_N2D,cph=139.9] Op + N2D -> Np + O ; 1.3e-10
-[ion_Op_O2,cph=150.11] Op + O2 -> O2p + O
-[Op2D_e,cph=319.37] Op2D + e -> Op + e
-[Op2D_N2,cph=128.32] Op2D + N2 -> N2p + O ; 8e-10
-[Op2D_O,cph=319.36] Op2D + O -> Op + O ; 5e-12
-[Op2D_O2,cph=469.4] Op2D + O2 -> O2p + O ; 7e-10
-[Op2P_ea,cph=163.06] Op2P + e -> Op2D + e
-[Op2P_eb,cph=482.43] Op2P + e -> Op + e
-[Op2P_N2a,cph=291.38] Op2P + N2 -> N2p + O ; 4.8e-10
-[Op2P_N2b,cph=67.54] Op2P + N2 -> Np + NO ; 1e-10
-[Op2P_O,cph=501.72] Op2P + O -> Op + O ; 4e-10
+[ag247nm,cph=483.39] Op2P -> Op ; 0.047
+[ag373nm,cph=321.3] Op2D -> Op ; 7.7e-05
+[ag732nm,cph=163.06] Op2P -> Op2D ; 0.171
+[elec1,cph=82.389] NOp + e -> 0.2*N + 0.8*N2D + O
+[elec2,cph=508.95] O2p + e -> 1.15*O + 0.85*O1D
+[elec3,cph=354.83] N2p + e -> 1.1*N + 0.9*N2D
+[ion_N2p_O2,cph=339.59] N2p + O2 -> O2p + N2 ; 6e-11
+[ion_N2p_Oa,cph=67.53] N2p + O -> NOp + N2D
+[ion_N2p_Ob] N2p + O -> Op + N2
+[ion_Np_O,cph=95.55] Np + O -> Op + N ; 1e-12
+[ion_Np_O2a,cph=239.84] Np + O2 -> O2p + N ; 4e-10
+[ion_Np_O2b,cph=646.28] Np + O2 -> NOp + O ; 2e-10
+[ion_O2p_N,cph=406.16] O2p + N -> NOp + O ; 1e-10
+[ion_O2p_N2] O2p + N2 -> NOp + NO ; 5e-16
+[ion_O2p_NO,cph=271.38] O2p + NO -> NOp + O2 ; 4.4e-10
+[ion_Op_CO2] Op + CO2 -> O2p + CO ; 9e-10
+[ion_Op_N2,cph=105.04] Op + N2 -> NOp + N
+[ion_Op_N2D,cph=139.9] Op + N2D -> Np + O ; 1.3e-10
+[ion_Op_O2,cph=150.11] Op + O2 -> O2p + O
+[Op2D_e,cph=319.37] Op2D + e -> Op + e
+[Op2D_N2,cph=128.32] Op2D + N2 -> N2p + O ; 8e-10
+[Op2D_O,cph=319.36] Op2D + O -> Op + O ; 5e-12
+[Op2D_O2,cph=469.4] Op2D + O2 -> O2p + O ; 7e-10
+[Op2P_ea,cph=163.06] Op2P + e -> Op2D + e
+[Op2P_eb,cph=482.43] Op2P + e -> Op + e
+[Op2P_N2a,cph=291.38] Op2P + N2 -> N2p + O ; 4.8e-10
+[Op2P_N2b,cph=67.54] Op2P + N2 -> Np + NO ; 1e-10
+[Op2P_O,cph=501.72] Op2P + O -> Op + O ; 4e-10
End Reactions
Ext Forcing
- so4_a2 <- dataset
- DMS <- dataset
- bc_a4 <- dataset
- num_a1 <- dataset
- num_a2 <- dataset
- num_a4 <- dataset
+ so4_a2 <- dataset
+ DMS <- dataset
+ bc_a4 <- dataset
+ num_a1 <- dataset
+ num_a2 <- dataset
+ num_a4 <- dataset
num_a5 <- dataset
- pom_a1 <- dataset
- pom_a4 <- dataset
- so4_a1 <- dataset
+ pom_a1 <- dataset
+ pom_a4 <- dataset
+ so4_a1 <- dataset
so4_a5 <- dataset
- CO <- dataset
- NO <- dataset
- NO2 <- dataset
- SO2 <- dataset
- bc_a1 <- dataset
- N
- N2D
- N2p
- Op
- e
- Np
- O2p
- OH
+ CO <- dataset
+ NO <- dataset
+ NO2 <- dataset
+ SO2 <- dataset
+ bc_a1 <- dataset
+ N
+ N2D
+ N2p
+ Op
+ e
+ Np
+ O2p
+ OH
End Ext Forcing
End Chemistry
diff --git a/src/chemistry/pp_waccm_ma_mam5/chem_mods.F90 b/src/chemistry/pp_waccm_ma_mam5/chem_mods.F90
index f579d54563..3c74c4fd26 100644
--- a/src/chemistry/pp_waccm_ma_mam5/chem_mods.F90
+++ b/src/chemistry/pp_waccm_ma_mam5/chem_mods.F90
@@ -9,13 +9,13 @@ module chem_mods
rxntot = 311, & ! number of total reactions
gascnt = 220, & ! number of gas phase reactions
nabscol = 2, & ! number of absorbing column densities
- gas_pcnst = 102, & ! number of "gas phase" species
+ gas_pcnst = 103, & ! number of "gas phase" species
nfs = 2, & ! number of "fixed" species
relcnt = 0, & ! number of relationship species
grpcnt = 0, & ! number of group members
nzcnt = 959, & ! number of non-zero matrix entries
extcnt = 24, & ! number of species with external forcing
- clscnt1 = 0, & ! number of species in explicit class
+ clscnt1 = 1, & ! number of species in explicit class
clscnt2 = 0, & ! number of species in hov class
clscnt3 = 0, & ! number of species in ebi class
clscnt4 = 102, & ! number of species in implicit class
diff --git a/src/chemistry/pp_waccm_ma_mam5/m_spc_id.F90 b/src/chemistry/pp_waccm_ma_mam5/m_spc_id.F90
index d596a4e593..6c5ec22920 100644
--- a/src/chemistry/pp_waccm_ma_mam5/m_spc_id.F90
+++ b/src/chemistry/pp_waccm_ma_mam5/m_spc_id.F90
@@ -71,35 +71,36 @@ module m_spc_id
integer, parameter :: id_O = 69
integer, parameter :: id_O2 = 70
integer, parameter :: id_O3 = 71
- integer, parameter :: id_OCLO = 72
- integer, parameter :: id_OCS = 73
- integer, parameter :: id_pom_a1 = 74
- integer, parameter :: id_pom_a4 = 75
- integer, parameter :: id_S = 76
- integer, parameter :: id_SF6 = 77
- integer, parameter :: id_SO = 78
- integer, parameter :: id_SO2 = 79
- integer, parameter :: id_SO3 = 80
- integer, parameter :: id_so4_a1 = 81
- integer, parameter :: id_so4_a2 = 82
- integer, parameter :: id_so4_a3 = 83
- integer, parameter :: id_so4_a5 = 84
- integer, parameter :: id_soa_a1 = 85
- integer, parameter :: id_soa_a2 = 86
- integer, parameter :: id_SOAG = 87
- integer, parameter :: id_e = 88
- integer, parameter :: id_HO2 = 89
- integer, parameter :: id_N2D = 90
- integer, parameter :: id_N2p = 91
- integer, parameter :: id_NOp = 92
- integer, parameter :: id_Np = 93
- integer, parameter :: id_O1D = 94
- integer, parameter :: id_O2_1D = 95
- integer, parameter :: id_O2_1S = 96
- integer, parameter :: id_O2p = 97
- integer, parameter :: id_OH = 98
- integer, parameter :: id_Op = 99
- integer, parameter :: id_Op2D = 100
- integer, parameter :: id_Op2P = 101
- integer, parameter :: id_H2O = 102
+ integer, parameter :: id_O3S = 72
+ integer, parameter :: id_OCLO = 73
+ integer, parameter :: id_OCS = 74
+ integer, parameter :: id_pom_a1 = 75
+ integer, parameter :: id_pom_a4 = 76
+ integer, parameter :: id_S = 77
+ integer, parameter :: id_SF6 = 78
+ integer, parameter :: id_SO = 79
+ integer, parameter :: id_SO2 = 80
+ integer, parameter :: id_SO3 = 81
+ integer, parameter :: id_so4_a1 = 82
+ integer, parameter :: id_so4_a2 = 83
+ integer, parameter :: id_so4_a3 = 84
+ integer, parameter :: id_so4_a5 = 85
+ integer, parameter :: id_soa_a1 = 86
+ integer, parameter :: id_soa_a2 = 87
+ integer, parameter :: id_SOAG = 88
+ integer, parameter :: id_e = 89
+ integer, parameter :: id_HO2 = 90
+ integer, parameter :: id_N2D = 91
+ integer, parameter :: id_N2p = 92
+ integer, parameter :: id_NOp = 93
+ integer, parameter :: id_Np = 94
+ integer, parameter :: id_O1D = 95
+ integer, parameter :: id_O2_1D = 96
+ integer, parameter :: id_O2_1S = 97
+ integer, parameter :: id_O2p = 98
+ integer, parameter :: id_OH = 99
+ integer, parameter :: id_Op = 100
+ integer, parameter :: id_Op2D = 101
+ integer, parameter :: id_Op2P = 102
+ integer, parameter :: id_H2O = 103
end module m_spc_id
diff --git a/src/chemistry/pp_waccm_ma_mam5/mo_indprd.F90 b/src/chemistry/pp_waccm_ma_mam5/mo_indprd.F90
index 125c4a75b8..59b51ae306 100644
--- a/src/chemistry/pp_waccm_ma_mam5/mo_indprd.F90
+++ b/src/chemistry/pp_waccm_ma_mam5/mo_indprd.F90
@@ -17,9 +17,14 @@ subroutine indprd( class, prod, nprod, y, extfrc, rxt, chnkpnts )
real(r8), intent(in) :: extfrc(chnkpnts,extcnt)
real(r8), intent(inout) :: prod(chnkpnts,nprod)
!--------------------------------------------------------------------
+! ... "independent" production for Explicit species
+!--------------------------------------------------------------------
+ if( class == 1 ) then
+ prod(:,1) = 0._r8
+!--------------------------------------------------------------------
! ... "independent" production for Implicit species
!--------------------------------------------------------------------
- if( class == 4 ) then
+ else if( class == 4 ) then
prod(:,1) = + extfrc(:,16)
prod(:,2) = + extfrc(:,3)
prod(:,97) = 0._r8
diff --git a/src/chemistry/pp_waccm_ma_mam5/mo_lin_matrix.F90 b/src/chemistry/pp_waccm_ma_mam5/mo_lin_matrix.F90
index 8e8cfedba7..14f1d2a1ef 100644
--- a/src/chemistry/pp_waccm_ma_mam5/mo_lin_matrix.F90
+++ b/src/chemistry/pp_waccm_ma_mam5/mo_lin_matrix.F90
@@ -222,8 +222,8 @@ subroutine linmat01( avec_len, mat, y, rxt, het_rates )
mat(k,78) = rxt(k,92) + rxt(k,100)
mat(k,81) = rxt(k,93)
mat(k,529) = -( rxt(k,7) + rxt(k,8) + het_rates(k,71) )
- mat(k,134) = -( rxt(k,59) + het_rates(k,72) )
- mat(k,139) = -( rxt(k,88) + het_rates(k,73) )
+ mat(k,134) = -( rxt(k,59) + het_rates(k,73) )
+ mat(k,139) = -( rxt(k,88) + het_rates(k,74) )
end do
end subroutine linmat01
subroutine linmat02( avec_len, mat, y, rxt, het_rates )
@@ -246,57 +246,57 @@ subroutine linmat02( avec_len, mat, y, rxt, het_rates )
!----------------------------------------------
integer :: k
do k = 1,avec_len
- mat(k,16) = -( het_rates(k,74) )
- mat(k,17) = -( het_rates(k,75) )
- mat(k,235) = -( het_rates(k,76) )
+ mat(k,16) = -( het_rates(k,75) )
+ mat(k,17) = -( het_rates(k,76) )
+ mat(k,235) = -( het_rates(k,77) )
mat(k,140) = rxt(k,88)
mat(k,423) = rxt(k,89)
- mat(k,18) = -( rxt(k,60) + het_rates(k,77) )
- mat(k,425) = -( rxt(k,89) + het_rates(k,78) )
+ mat(k,18) = -( rxt(k,60) + het_rates(k,78) )
+ mat(k,425) = -( rxt(k,89) + het_rates(k,79) )
mat(k,301) = rxt(k,90)
- mat(k,300) = -( rxt(k,90) + het_rates(k,79) )
+ mat(k,300) = -( rxt(k,90) + het_rates(k,80) )
mat(k,109) = rxt(k,91)
- mat(k,108) = -( rxt(k,91) + het_rates(k,80) )
+ mat(k,108) = -( rxt(k,91) + het_rates(k,81) )
mat(k,53) = rxt(k,87)
- mat(k,19) = -( het_rates(k,81) )
- mat(k,20) = -( het_rates(k,82) )
- mat(k,21) = -( het_rates(k,83) )
- mat(k,22) = -( het_rates(k,84) )
- mat(k,23) = -( het_rates(k,85) )
- mat(k,24) = -( het_rates(k,86) )
- mat(k,25) = -( het_rates(k,87) )
- mat(k,323) = -( het_rates(k,88) )
+ mat(k,19) = -( het_rates(k,82) )
+ mat(k,20) = -( het_rates(k,83) )
+ mat(k,21) = -( het_rates(k,84) )
+ mat(k,22) = -( het_rates(k,85) )
+ mat(k,23) = -( het_rates(k,86) )
+ mat(k,24) = -( het_rates(k,87) )
+ mat(k,25) = -( het_rates(k,88) )
+ mat(k,323) = -( het_rates(k,89) )
mat(k,736) = rxt(k,16)
mat(k,345) = rxt(k,62)
mat(k,668) = rxt(k,71) + rxt(k,72) + rxt(k,73) + rxt(k,74) + rxt(k,75) &
+ rxt(k,76)
mat(k,501) = rxt(k,77) + rxt(k,78) + rxt(k,79) + rxt(k,80) + rxt(k,81) &
+ rxt(k,84) + rxt(k,85) + rxt(k,86)
- mat(k,555) = -( rxt(k,263) + het_rates(k,89) )
+ mat(k,555) = -( rxt(k,263) + het_rates(k,90) )
mat(k,169) = rxt(k,11) + rxt(k,153)
- mat(k,334) = -( het_rates(k,90) )
- mat(k,219) = -( het_rates(k,91) )
+ mat(k,334) = -( het_rates(k,91) )
+ mat(k,219) = -( het_rates(k,92) )
mat(k,189) = rxt(k,304)
mat(k,183) = rxt(k,309)
- mat(k,242) = -( het_rates(k,92) )
+ mat(k,242) = -( het_rates(k,93) )
mat(k,735) = rxt(k,16)
mat(k,357) = rxt(k,297)
mat(k,371) = rxt(k,300)
- mat(k,273) = -( het_rates(k,93) )
+ mat(k,273) = -( het_rates(k,94) )
mat(k,344) = rxt(k,62)
mat(k,184) = rxt(k,310)
- mat(k,726) = -( rxt(k,96) + het_rates(k,94) )
+ mat(k,726) = -( rxt(k,96) + het_rates(k,95) )
mat(k,951) = rxt(k,1)
mat(k,514) = rxt(k,6)
mat(k,535) = rxt(k,7)
mat(k,105) = rxt(k,12)
- mat(k,77) = -( rxt(k,92) + rxt(k,100) + het_rates(k,95) )
+ mat(k,77) = -( rxt(k,92) + rxt(k,100) + het_rates(k,96) )
mat(k,522) = rxt(k,7)
mat(k,79) = rxt(k,104)
- mat(k,80) = -( rxt(k,93) + rxt(k,104) + het_rates(k,96) )
- mat(k,361) = -( rxt(k,297) + het_rates(k,97) )
+ mat(k,80) = -( rxt(k,93) + rxt(k,104) + het_rates(k,97) )
+ mat(k,361) = -( rxt(k,297) + het_rates(k,98) )
mat(k,504) = rxt(k,78) + rxt(k,80)
- mat(k,858) = -( het_rates(k,98) )
+ mat(k,858) = -( het_rates(k,99) )
mat(k,955) = rxt(k,3)
mat(k,233) = 2.000_r8*rxt(k,4)
mat(k,904) = rxt(k,9)
@@ -306,20 +306,20 @@ subroutine linmat02( avec_len, mat, y, rxt, het_rates )
mat(k,253) = rxt(k,57)
mat(k,270) = rxt(k,58)
mat(k,646) = .500_r8*rxt(k,265)
- mat(k,378) = -( rxt(k,300) + het_rates(k,99) )
+ mat(k,378) = -( rxt(k,300) + het_rates(k,100) )
mat(k,672) = rxt(k,73) + rxt(k,74)
mat(k,505) = rxt(k,79) + rxt(k,81)
mat(k,185) = rxt(k,284)
mat(k,191) = rxt(k,285)
- mat(k,188) = -( rxt(k,285) + rxt(k,304) + het_rates(k,100) )
+ mat(k,188) = -( rxt(k,285) + rxt(k,304) + het_rates(k,101) )
mat(k,655) = rxt(k,75) + rxt(k,76)
mat(k,495) = rxt(k,85) + rxt(k,86)
mat(k,182) = rxt(k,286)
mat(k,181) = -( rxt(k,284) + rxt(k,286) + rxt(k,309) + rxt(k,310) &
- + het_rates(k,101) )
+ + het_rates(k,102) )
mat(k,654) = rxt(k,71) + rxt(k,72)
mat(k,494) = rxt(k,77) + rxt(k,84)
- mat(k,959) = -( rxt(k,1) + rxt(k,2) + rxt(k,3) + het_rates(k,102) )
+ mat(k,959) = -( rxt(k,1) + rxt(k,2) + rxt(k,3) + het_rates(k,103) )
mat(k,409) = .050_r8*rxt(k,24)
mat(k,54) = rxt(k,87)
end do
diff --git a/src/chemistry/pp_waccm_ma_mam5/mo_nln_matrix.F90 b/src/chemistry/pp_waccm_ma_mam5/mo_nln_matrix.F90
index 60c42e2b51..fcd1810f01 100644
--- a/src/chemistry/pp_waccm_ma_mam5/mo_nln_matrix.F90
+++ b/src/chemistry/pp_waccm_ma_mam5/mo_nln_matrix.F90
@@ -22,25 +22,25 @@ subroutine nlnmat01( avec_len, mat, y, rxt )
! ... complete matrix entries implicit species
!----------------------------------------------
do k = 1,avec_len
- mat(k,808) = -(rxt(k,191)*y(k,17) + rxt(k,192)*y(k,89) + rxt(k,193)*y(k,71))
+ mat(k,808) = -(rxt(k,191)*y(k,17) + rxt(k,192)*y(k,90) + rxt(k,193)*y(k,71))
mat(k,486) = -rxt(k,191)*y(k,3)
mat(k,563) = -rxt(k,192)*y(k,3)
mat(k,538) = -rxt(k,193)*y(k,3)
mat(k,927) = 4.000_r8*rxt(k,194)*y(k,5) + (rxt(k,195)+rxt(k,196))*y(k,28) &
- + rxt(k,199)*y(k,61) + rxt(k,202)*y(k,69) + rxt(k,253)*y(k,78) &
- + rxt(k,203)*y(k,98)
- mat(k,59) = rxt(k,181)*y(k,94)
- mat(k,64) = rxt(k,207)*y(k,94)
- mat(k,178) = 2.000_r8*rxt(k,218)*y(k,25) + 2.000_r8*rxt(k,230)*y(k,94) &
- + 2.000_r8*rxt(k,219)*y(k,98)
- mat(k,216) = rxt(k,220)*y(k,25) + rxt(k,231)*y(k,94) + rxt(k,221)*y(k,98)
- mat(k,165) = 3.000_r8*rxt(k,225)*y(k,25) + 3.000_r8*rxt(k,208)*y(k,94) &
- + 3.000_r8*rxt(k,226)*y(k,98)
+ + rxt(k,199)*y(k,61) + rxt(k,202)*y(k,69) + rxt(k,253)*y(k,79) &
+ + rxt(k,203)*y(k,99)
+ mat(k,59) = rxt(k,181)*y(k,95)
+ mat(k,64) = rxt(k,207)*y(k,95)
+ mat(k,178) = 2.000_r8*rxt(k,218)*y(k,25) + 2.000_r8*rxt(k,230)*y(k,95) &
+ + 2.000_r8*rxt(k,219)*y(k,99)
+ mat(k,216) = rxt(k,220)*y(k,25) + rxt(k,231)*y(k,95) + rxt(k,221)*y(k,99)
+ mat(k,165) = 3.000_r8*rxt(k,225)*y(k,25) + 3.000_r8*rxt(k,208)*y(k,95) &
+ + 3.000_r8*rxt(k,226)*y(k,99)
mat(k,786) = 2.000_r8*rxt(k,218)*y(k,16) + rxt(k,220)*y(k,18) &
+ 3.000_r8*rxt(k,225)*y(k,24)
mat(k,616) = (rxt(k,195)+rxt(k,196))*y(k,5)
- mat(k,35) = 2.000_r8*rxt(k,209)*y(k,94)
- mat(k,260) = rxt(k,204)*y(k,69) + rxt(k,210)*y(k,94) + rxt(k,205)*y(k,98)
+ mat(k,35) = 2.000_r8*rxt(k,209)*y(k,95)
+ mat(k,260) = rxt(k,204)*y(k,69) + rxt(k,210)*y(k,95) + rxt(k,205)*y(k,99)
mat(k,754) = rxt(k,199)*y(k,5)
mat(k,687) = rxt(k,202)*y(k,5) + rxt(k,204)*y(k,45)
mat(k,435) = rxt(k,253)*y(k,5)
@@ -54,9 +54,9 @@ subroutine nlnmat01( avec_len, mat, y, rxt )
mat(k,448) = (rxt(k,275)+rxt(k,280))*y(k,53)
mat(k,247) = (rxt(k,275)+rxt(k,280))*y(k,49)
mat(k,931) = -(4._r8*rxt(k,194)*y(k,5) + (rxt(k,195) + rxt(k,196) + rxt(k,197) &
- ) * y(k,28) + rxt(k,198)*y(k,89) + rxt(k,199)*y(k,61) + rxt(k,200) &
- *y(k,62) + rxt(k,202)*y(k,69) + rxt(k,203)*y(k,98) + rxt(k,253) &
- *y(k,78))
+ ) * y(k,28) + rxt(k,198)*y(k,90) + rxt(k,199)*y(k,61) + rxt(k,200) &
+ *y(k,62) + rxt(k,202)*y(k,69) + rxt(k,203)*y(k,99) + rxt(k,253) &
+ *y(k,79))
mat(k,620) = -(rxt(k,195) + rxt(k,196) + rxt(k,197)) * y(k,5)
mat(k,567) = -rxt(k,198)*y(k,5)
mat(k,758) = -rxt(k,199)*y(k,5)
@@ -66,7 +66,7 @@ subroutine nlnmat01( avec_len, mat, y, rxt )
mat(k,437) = -rxt(k,253)*y(k,5)
mat(k,812) = rxt(k,193)*y(k,71)
mat(k,209) = rxt(k,201)*y(k,69)
- mat(k,262) = rxt(k,211)*y(k,94)
+ mat(k,262) = rxt(k,211)*y(k,95)
mat(k,254) = rxt(k,206)*y(k,69)
mat(k,691) = mat(k,691) + rxt(k,201)*y(k,6) + rxt(k,206)*y(k,53)
mat(k,541) = rxt(k,193)*y(k,3)
@@ -75,76 +75,76 @@ subroutine nlnmat01( avec_len, mat, y, rxt )
mat(k,656) = -rxt(k,201)*y(k,6)
mat(k,911) = rxt(k,200)*y(k,62)
mat(k,625) = rxt(k,200)*y(k,5)
- mat(k,29) = -(rxt(k,180)*y(k,94))
+ mat(k,29) = -(rxt(k,180)*y(k,95))
mat(k,693) = -rxt(k,180)*y(k,8)
- mat(k,55) = -(rxt(k,181)*y(k,94))
+ mat(k,55) = -(rxt(k,181)*y(k,95))
mat(k,698) = -rxt(k,181)*y(k,9)
- mat(k,60) = -(rxt(k,207)*y(k,94))
+ mat(k,60) = -(rxt(k,207)*y(k,95))
mat(k,699) = -rxt(k,207)*y(k,10)
- mat(k,36) = -(rxt(k,182)*y(k,94))
+ mat(k,36) = -(rxt(k,182)*y(k,95))
mat(k,695) = -rxt(k,182)*y(k,11)
- mat(k,65) = -(rxt(k,183)*y(k,94))
+ mat(k,65) = -(rxt(k,183)*y(k,95))
mat(k,700) = -rxt(k,183)*y(k,12)
- mat(k,40) = -(rxt(k,184)*y(k,94))
+ mat(k,40) = -(rxt(k,184)*y(k,95))
mat(k,696) = -rxt(k,184)*y(k,13)
- mat(k,70) = -(rxt(k,185)*y(k,94))
+ mat(k,70) = -(rxt(k,185)*y(k,95))
mat(k,701) = -rxt(k,185)*y(k,14)
- mat(k,44) = -(rxt(k,186)*y(k,94))
+ mat(k,44) = -(rxt(k,186)*y(k,95))
mat(k,697) = -rxt(k,186)*y(k,15)
- mat(k,174) = -(rxt(k,218)*y(k,25) + rxt(k,219)*y(k,98) + rxt(k,230)*y(k,94))
+ mat(k,174) = -(rxt(k,218)*y(k,25) + rxt(k,219)*y(k,99) + rxt(k,230)*y(k,95))
mat(k,763) = -rxt(k,218)*y(k,16)
mat(k,827) = -rxt(k,219)*y(k,16)
mat(k,710) = -rxt(k,230)*y(k,16)
mat(k,475) = -(rxt(k,155)*y(k,25) + rxt(k,191)*y(k,3) + rxt(k,235)*y(k,63) &
- + rxt(k,236)*y(k,69) + rxt(k,237)*y(k,98))
+ + rxt(k,236)*y(k,69) + rxt(k,237)*y(k,99))
mat(k,775) = -rxt(k,155)*y(k,17)
mat(k,797) = -rxt(k,191)*y(k,17)
mat(k,577) = -rxt(k,235)*y(k,17)
mat(k,676) = -rxt(k,236)*y(k,17)
mat(k,846) = -rxt(k,237)*y(k,17)
mat(k,413) = rxt(k,162)*y(k,28) + rxt(k,239)*y(k,61)
- mat(k,158) = .300_r8*rxt(k,240)*y(k,98)
- mat(k,397) = (rxt(k,243)+rxt(k,244))*y(k,94)
+ mat(k,158) = .300_r8*rxt(k,240)*y(k,99)
+ mat(k,397) = (rxt(k,243)+rxt(k,244))*y(k,95)
mat(k,605) = rxt(k,162)*y(k,21)
mat(k,743) = rxt(k,239)*y(k,21)
mat(k,718) = (rxt(k,243)+rxt(k,244))*y(k,23)
mat(k,846) = mat(k,846) + .300_r8*rxt(k,240)*y(k,22)
- mat(k,210) = -(rxt(k,220)*y(k,25) + rxt(k,221)*y(k,98) + rxt(k,231)*y(k,94))
+ mat(k,210) = -(rxt(k,220)*y(k,25) + rxt(k,221)*y(k,99) + rxt(k,231)*y(k,95))
mat(k,764) = -rxt(k,220)*y(k,18)
mat(k,829) = -rxt(k,221)*y(k,18)
mat(k,711) = -rxt(k,231)*y(k,18)
- mat(k,48) = -(rxt(k,222)*y(k,98))
+ mat(k,48) = -(rxt(k,222)*y(k,99))
mat(k,814) = -rxt(k,222)*y(k,19)
- mat(k,147) = -(rxt(k,223)*y(k,25) + rxt(k,224)*y(k,98))
+ mat(k,147) = -(rxt(k,223)*y(k,25) + rxt(k,224)*y(k,99))
mat(k,761) = -rxt(k,223)*y(k,20)
mat(k,823) = -rxt(k,224)*y(k,20)
- mat(k,411) = -(rxt(k,162)*y(k,28) + rxt(k,238)*y(k,89) + rxt(k,239)*y(k,61))
+ mat(k,411) = -(rxt(k,162)*y(k,28) + rxt(k,238)*y(k,90) + rxt(k,239)*y(k,61))
mat(k,601) = -rxt(k,162)*y(k,21)
mat(k,549) = -rxt(k,238)*y(k,21)
mat(k,741) = -rxt(k,239)*y(k,21)
- mat(k,156) = .700_r8*rxt(k,240)*y(k,98)
- mat(k,394) = rxt(k,156)*y(k,25) + rxt(k,212)*y(k,39) + rxt(k,242)*y(k,94) &
- + rxt(k,241)*y(k,98)
+ mat(k,156) = .700_r8*rxt(k,240)*y(k,99)
+ mat(k,394) = rxt(k,156)*y(k,25) + rxt(k,212)*y(k,39) + rxt(k,242)*y(k,95) &
+ + rxt(k,241)*y(k,99)
mat(k,772) = rxt(k,156)*y(k,23)
mat(k,292) = rxt(k,212)*y(k,23)
mat(k,715) = rxt(k,242)*y(k,23)
mat(k,842) = .700_r8*rxt(k,240)*y(k,22) + rxt(k,241)*y(k,23)
- mat(k,155) = -(rxt(k,240)*y(k,98))
+ mat(k,155) = -(rxt(k,240)*y(k,99))
mat(k,824) = -rxt(k,240)*y(k,22)
- mat(k,410) = rxt(k,238)*y(k,89)
+ mat(k,410) = rxt(k,238)*y(k,90)
mat(k,543) = rxt(k,238)*y(k,21)
- mat(k,393) = -(rxt(k,156)*y(k,25) + rxt(k,212)*y(k,39) + rxt(k,241)*y(k,98) &
- + (rxt(k,242) + rxt(k,243) + rxt(k,244)) * y(k,94))
+ mat(k,393) = -(rxt(k,156)*y(k,25) + rxt(k,212)*y(k,39) + rxt(k,241)*y(k,99) &
+ + (rxt(k,242) + rxt(k,243) + rxt(k,244)) * y(k,95))
mat(k,771) = -rxt(k,156)*y(k,23)
mat(k,291) = -rxt(k,212)*y(k,23)
mat(k,841) = -rxt(k,241)*y(k,23)
mat(k,714) = -(rxt(k,242) + rxt(k,243) + rxt(k,244)) * y(k,23)
- mat(k,161) = -(rxt(k,208)*y(k,94) + rxt(k,225)*y(k,25) + rxt(k,226)*y(k,98))
+ mat(k,161) = -(rxt(k,208)*y(k,95) + rxt(k,225)*y(k,25) + rxt(k,226)*y(k,99))
mat(k,709) = -rxt(k,208)*y(k,24)
mat(k,762) = -rxt(k,225)*y(k,24)
mat(k,825) = -rxt(k,226)*y(k,24)
mat(k,785) = -(rxt(k,155)*y(k,17) + rxt(k,156)*y(k,23) + rxt(k,157)*y(k,41) &
- + rxt(k,158)*y(k,43) + (rxt(k,159) + rxt(k,160)) * y(k,89) &
+ + rxt(k,158)*y(k,43) + (rxt(k,159) + rxt(k,160)) * y(k,90) &
+ rxt(k,161)*y(k,71) + rxt(k,168)*y(k,29) + rxt(k,177)*y(k,54) &
+ rxt(k,218)*y(k,16) + rxt(k,220)*y(k,18) + rxt(k,223)*y(k,20) &
+ rxt(k,225)*y(k,24))
@@ -161,24 +161,24 @@ subroutine nlnmat01( avec_len, mat, y, rxt )
mat(k,152) = -rxt(k,223)*y(k,25)
mat(k,164) = -rxt(k,225)*y(k,25)
mat(k,926) = rxt(k,196)*y(k,28)
- mat(k,31) = 4.000_r8*rxt(k,180)*y(k,94)
- mat(k,58) = rxt(k,181)*y(k,94)
- mat(k,39) = 2.000_r8*rxt(k,182)*y(k,94)
- mat(k,69) = 2.000_r8*rxt(k,183)*y(k,94)
- mat(k,43) = 2.000_r8*rxt(k,184)*y(k,94)
- mat(k,74) = rxt(k,185)*y(k,94)
- mat(k,47) = 2.000_r8*rxt(k,186)*y(k,94)
- mat(k,49) = 3.000_r8*rxt(k,222)*y(k,98)
- mat(k,152) = mat(k,152) + rxt(k,224)*y(k,98)
+ mat(k,31) = 4.000_r8*rxt(k,180)*y(k,95)
+ mat(k,58) = rxt(k,181)*y(k,95)
+ mat(k,39) = 2.000_r8*rxt(k,182)*y(k,95)
+ mat(k,69) = 2.000_r8*rxt(k,183)*y(k,95)
+ mat(k,43) = 2.000_r8*rxt(k,184)*y(k,95)
+ mat(k,74) = rxt(k,185)*y(k,95)
+ mat(k,47) = 2.000_r8*rxt(k,186)*y(k,95)
+ mat(k,49) = 3.000_r8*rxt(k,222)*y(k,99)
+ mat(k,152) = mat(k,152) + rxt(k,224)*y(k,99)
mat(k,419) = rxt(k,162)*y(k,28)
mat(k,615) = rxt(k,196)*y(k,5) + rxt(k,162)*y(k,21) + (4.000_r8*rxt(k,163) &
+2.000_r8*rxt(k,165))*y(k,28) + rxt(k,167)*y(k,61) + rxt(k,172) &
- *y(k,69) + rxt(k,254)*y(k,78) + rxt(k,173)*y(k,98)
- mat(k,93) = rxt(k,217)*y(k,94)
- mat(k,88) = rxt(k,232)*y(k,94) + rxt(k,227)*y(k,98)
- mat(k,98) = rxt(k,233)*y(k,94) + rxt(k,228)*y(k,98)
- mat(k,116) = rxt(k,234)*y(k,94) + rxt(k,229)*y(k,98)
- mat(k,462) = rxt(k,175)*y(k,69) + rxt(k,187)*y(k,94) + rxt(k,176)*y(k,98)
+ *y(k,69) + rxt(k,254)*y(k,79) + rxt(k,173)*y(k,99)
+ mat(k,93) = rxt(k,217)*y(k,95)
+ mat(k,88) = rxt(k,232)*y(k,95) + rxt(k,227)*y(k,99)
+ mat(k,98) = rxt(k,233)*y(k,95) + rxt(k,228)*y(k,99)
+ mat(k,116) = rxt(k,234)*y(k,95) + rxt(k,229)*y(k,99)
+ mat(k,462) = rxt(k,175)*y(k,69) + rxt(k,187)*y(k,95) + rxt(k,176)*y(k,99)
mat(k,753) = rxt(k,167)*y(k,28)
mat(k,686) = rxt(k,172)*y(k,28) + rxt(k,175)*y(k,49)
mat(k,434) = rxt(k,254)*y(k,28)
@@ -200,9 +200,9 @@ subroutine nlnmat01( avec_len, mat, y, rxt )
mat(k,594) = 2.000_r8*rxt(k,189)*y(k,28)
mat(k,610) = -(rxt(k,162)*y(k,21) + (4._r8*rxt(k,163) + 4._r8*rxt(k,164) &
+ 4._r8*rxt(k,165) + 4._r8*rxt(k,189)) * y(k,28) + rxt(k,166) &
- *y(k,89) + rxt(k,167)*y(k,61) + rxt(k,169)*y(k,62) + rxt(k,172) &
- *y(k,69) + (rxt(k,173) + rxt(k,174)) * y(k,98) + (rxt(k,195) &
- + rxt(k,196) + rxt(k,197)) * y(k,5) + rxt(k,254)*y(k,78))
+ *y(k,90) + rxt(k,167)*y(k,61) + rxt(k,169)*y(k,62) + rxt(k,172) &
+ *y(k,69) + (rxt(k,173) + rxt(k,174)) * y(k,99) + (rxt(k,195) &
+ + rxt(k,196) + rxt(k,197)) * y(k,5) + rxt(k,254)*y(k,79))
mat(k,416) = -rxt(k,162)*y(k,28)
mat(k,557) = -rxt(k,166)*y(k,28)
mat(k,748) = -rxt(k,167)*y(k,28)
@@ -211,18 +211,18 @@ subroutine nlnmat01( avec_len, mat, y, rxt )
mat(k,851) = -(rxt(k,173) + rxt(k,174)) * y(k,28)
mat(k,921) = -(rxt(k,195) + rxt(k,196) + rxt(k,197)) * y(k,28)
mat(k,430) = -rxt(k,254)*y(k,28)
- mat(k,780) = rxt(k,177)*y(k,54) + rxt(k,161)*y(k,71) + rxt(k,160)*y(k,89)
+ mat(k,780) = rxt(k,177)*y(k,54) + rxt(k,161)*y(k,71) + rxt(k,160)*y(k,90)
mat(k,311) = rxt(k,170)*y(k,69)
- mat(k,458) = rxt(k,188)*y(k,94)
- mat(k,267) = rxt(k,177)*y(k,25) + rxt(k,178)*y(k,69) + rxt(k,179)*y(k,98)
+ mat(k,458) = rxt(k,188)*y(k,95)
+ mat(k,267) = rxt(k,177)*y(k,25) + rxt(k,178)*y(k,69) + rxt(k,179)*y(k,99)
mat(k,681) = mat(k,681) + rxt(k,170)*y(k,29) + rxt(k,178)*y(k,54)
mat(k,532) = rxt(k,161)*y(k,25)
- mat(k,137) = rxt(k,259)*y(k,78)
- mat(k,430) = mat(k,430) + rxt(k,259)*y(k,72)
+ mat(k,137) = rxt(k,259)*y(k,79)
+ mat(k,430) = mat(k,430) + rxt(k,259)*y(k,73)
mat(k,557) = mat(k,557) + rxt(k,160)*y(k,25)
mat(k,723) = rxt(k,188)*y(k,49)
mat(k,851) = mat(k,851) + rxt(k,179)*y(k,54)
- mat(k,308) = -(rxt(k,168)*y(k,25) + rxt(k,170)*y(k,69) + rxt(k,171)*y(k,98) &
+ mat(k,308) = -(rxt(k,168)*y(k,25) + rxt(k,170)*y(k,69) + rxt(k,171)*y(k,99) &
+ (rxt(k,273) + rxt(k,278) + rxt(k,283)) * y(k,49))
mat(k,768) = -rxt(k,168)*y(k,29)
mat(k,667) = -rxt(k,170)*y(k,29)
@@ -250,125 +250,125 @@ subroutine nlnmat02( avec_len, mat, y, rxt )
! ... complete matrix entries implicit species
!----------------------------------------------
do k = 1,avec_len
- mat(k,282) = -(rxt(k,245)*y(k,98))
+ mat(k,282) = -(rxt(k,245)*y(k,99))
mat(k,834) = -rxt(k,245)*y(k,31)
mat(k,793) = rxt(k,191)*y(k,17)
mat(k,470) = rxt(k,191)*y(k,3) + rxt(k,155)*y(k,25) + rxt(k,235)*y(k,63) &
- + rxt(k,236)*y(k,69) + rxt(k,237)*y(k,98)
+ + rxt(k,236)*y(k,69) + rxt(k,237)*y(k,99)
mat(k,148) = rxt(k,223)*y(k,25)
mat(k,767) = rxt(k,155)*y(k,17) + rxt(k,223)*y(k,20)
- mat(k,197) = rxt(k,299)*y(k,99)
+ mat(k,197) = rxt(k,299)*y(k,100)
mat(k,571) = rxt(k,235)*y(k,17)
- mat(k,665) = rxt(k,236)*y(k,17) + rxt(k,248)*y(k,73)
- mat(k,141) = rxt(k,248)*y(k,69) + rxt(k,249)*y(k,98)
- mat(k,834) = mat(k,834) + rxt(k,237)*y(k,17) + rxt(k,249)*y(k,73)
+ mat(k,665) = rxt(k,236)*y(k,17) + rxt(k,248)*y(k,74)
+ mat(k,141) = rxt(k,248)*y(k,69) + rxt(k,249)*y(k,99)
+ mat(k,834) = mat(k,834) + rxt(k,237)*y(k,17) + rxt(k,249)*y(k,74)
mat(k,373) = rxt(k,299)*y(k,32)
- mat(k,196) = -(rxt(k,299)*y(k,99))
+ mat(k,196) = -(rxt(k,299)*y(k,100))
mat(k,370) = -rxt(k,299)*y(k,32)
- mat(k,281) = rxt(k,245)*y(k,98)
+ mat(k,281) = rxt(k,245)*y(k,99)
mat(k,828) = rxt(k,245)*y(k,31)
- mat(k,82) = -(rxt(k,216)*y(k,94))
+ mat(k,82) = -(rxt(k,216)*y(k,95))
mat(k,703) = -rxt(k,216)*y(k,33)
- mat(k,56) = rxt(k,181)*y(k,94)
- mat(k,61) = rxt(k,207)*y(k,94)
- mat(k,66) = rxt(k,183)*y(k,94)
- mat(k,41) = 2.000_r8*rxt(k,184)*y(k,94)
- mat(k,71) = 2.000_r8*rxt(k,185)*y(k,94)
- mat(k,45) = rxt(k,186)*y(k,94)
- mat(k,33) = 2.000_r8*rxt(k,209)*y(k,94)
- mat(k,94) = rxt(k,233)*y(k,94) + rxt(k,228)*y(k,98)
- mat(k,112) = rxt(k,234)*y(k,94) + rxt(k,229)*y(k,98)
+ mat(k,56) = rxt(k,181)*y(k,95)
+ mat(k,61) = rxt(k,207)*y(k,95)
+ mat(k,66) = rxt(k,183)*y(k,95)
+ mat(k,41) = 2.000_r8*rxt(k,184)*y(k,95)
+ mat(k,71) = 2.000_r8*rxt(k,185)*y(k,95)
+ mat(k,45) = rxt(k,186)*y(k,95)
+ mat(k,33) = 2.000_r8*rxt(k,209)*y(k,95)
+ mat(k,94) = rxt(k,233)*y(k,95) + rxt(k,228)*y(k,99)
+ mat(k,112) = rxt(k,234)*y(k,95) + rxt(k,229)*y(k,99)
mat(k,703) = mat(k,703) + rxt(k,181)*y(k,9) + rxt(k,207)*y(k,10) + rxt(k,183) &
*y(k,12) + 2.000_r8*rxt(k,184)*y(k,13) + 2.000_r8*rxt(k,185) &
*y(k,14) + rxt(k,186)*y(k,15) + 2.000_r8*rxt(k,209)*y(k,42) &
+ rxt(k,233)*y(k,47) + rxt(k,234)*y(k,48)
mat(k,815) = rxt(k,228)*y(k,47) + rxt(k,229)*y(k,48)
- mat(k,90) = -(rxt(k,217)*y(k,94))
+ mat(k,90) = -(rxt(k,217)*y(k,95))
mat(k,705) = -rxt(k,217)*y(k,34)
- mat(k,37) = rxt(k,182)*y(k,94)
- mat(k,67) = rxt(k,183)*y(k,94)
- mat(k,86) = rxt(k,232)*y(k,94) + rxt(k,227)*y(k,98)
+ mat(k,37) = rxt(k,182)*y(k,95)
+ mat(k,67) = rxt(k,183)*y(k,95)
+ mat(k,86) = rxt(k,232)*y(k,95) + rxt(k,227)*y(k,99)
mat(k,705) = mat(k,705) + rxt(k,182)*y(k,11) + rxt(k,183)*y(k,12) &
+ rxt(k,232)*y(k,46)
mat(k,817) = rxt(k,227)*y(k,46)
- mat(k,128) = -(rxt(k,246)*y(k,63) + (rxt(k,247) + rxt(k,261)) * y(k,98))
+ mat(k,128) = -(rxt(k,246)*y(k,63) + (rxt(k,247) + rxt(k,261)) * y(k,99))
mat(k,570) = -rxt(k,246)*y(k,35)
mat(k,821) = -(rxt(k,247) + rxt(k,261)) * y(k,35)
- mat(k,290) = -(rxt(k,212)*y(k,23) + rxt(k,213)*y(k,41) + rxt(k,214)*y(k,102) &
+ mat(k,290) = -(rxt(k,212)*y(k,23) + rxt(k,213)*y(k,41) + rxt(k,214)*y(k,103) &
+ rxt(k,215)*y(k,51))
mat(k,390) = -rxt(k,212)*y(k,39)
mat(k,864) = -rxt(k,213)*y(k,39)
mat(k,936) = -rxt(k,214)*y(k,39)
mat(k,887) = -rxt(k,215)*y(k,39)
- mat(k,62) = rxt(k,207)*y(k,94)
- mat(k,72) = rxt(k,185)*y(k,94)
- mat(k,83) = 2.000_r8*rxt(k,216)*y(k,94)
- mat(k,91) = rxt(k,217)*y(k,94)
+ mat(k,62) = rxt(k,207)*y(k,95)
+ mat(k,72) = rxt(k,185)*y(k,95)
+ mat(k,83) = 2.000_r8*rxt(k,216)*y(k,95)
+ mat(k,91) = rxt(k,217)*y(k,95)
mat(k,713) = rxt(k,207)*y(k,10) + rxt(k,185)*y(k,14) + 2.000_r8*rxt(k,216) &
*y(k,33) + rxt(k,217)*y(k,34)
- mat(k,439) = -((rxt(k,113) + rxt(k,114) + rxt(k,115)) * y(k,89) + rxt(k,116) &
+ mat(k,439) = -((rxt(k,113) + rxt(k,114) + rxt(k,115)) * y(k,90) + rxt(k,116) &
*y(k,70) + rxt(k,119)*y(k,71))
mat(k,550) = -(rxt(k,113) + rxt(k,114) + rxt(k,115)) * y(k,40)
mat(k,507) = -rxt(k,116)*y(k,40)
mat(k,527) = -rxt(k,119)*y(k,40)
- mat(k,473) = rxt(k,237)*y(k,98)
- mat(k,395) = rxt(k,243)*y(k,94)
+ mat(k,473) = rxt(k,237)*y(k,99)
+ mat(k,395) = rxt(k,243)*y(k,95)
mat(k,773) = rxt(k,157)*y(k,41)
mat(k,293) = rxt(k,213)*y(k,41)
mat(k,867) = rxt(k,157)*y(k,25) + rxt(k,213)*y(k,39) + rxt(k,111)*y(k,69) &
- + rxt(k,94)*y(k,94) + rxt(k,120)*y(k,98)
- mat(k,257) = rxt(k,211)*y(k,94)
- mat(k,452) = rxt(k,188)*y(k,94)
- mat(k,350) = rxt(k,143)*y(k,98)
- mat(k,674) = rxt(k,111)*y(k,41) + rxt(k,123)*y(k,98)
- mat(k,144) = rxt(k,249)*y(k,98)
- mat(k,237) = rxt(k,255)*y(k,98)
- mat(k,426) = rxt(k,260)*y(k,98)
+ + rxt(k,94)*y(k,95) + rxt(k,120)*y(k,99)
+ mat(k,257) = rxt(k,211)*y(k,95)
+ mat(k,452) = rxt(k,188)*y(k,95)
+ mat(k,350) = rxt(k,143)*y(k,99)
+ mat(k,674) = rxt(k,111)*y(k,41) + rxt(k,123)*y(k,99)
+ mat(k,144) = rxt(k,249)*y(k,99)
+ mat(k,237) = rxt(k,255)*y(k,99)
+ mat(k,426) = rxt(k,260)*y(k,99)
mat(k,716) = rxt(k,243)*y(k,23) + rxt(k,94)*y(k,41) + rxt(k,211)*y(k,45) &
+ rxt(k,188)*y(k,49)
mat(k,844) = rxt(k,237)*y(k,17) + rxt(k,120)*y(k,41) + rxt(k,143)*y(k,55) &
- + rxt(k,123)*y(k,69) + rxt(k,249)*y(k,73) + rxt(k,255)*y(k,76) &
- + rxt(k,260)*y(k,78)
- mat(k,882) = -(rxt(k,94)*y(k,94) + rxt(k,111)*y(k,69) + rxt(k,120)*y(k,98) &
+ + rxt(k,123)*y(k,69) + rxt(k,249)*y(k,74) + rxt(k,255)*y(k,77) &
+ + rxt(k,260)*y(k,79)
+ mat(k,882) = -(rxt(k,94)*y(k,95) + rxt(k,111)*y(k,69) + rxt(k,120)*y(k,99) &
+ rxt(k,157)*y(k,25) + rxt(k,213)*y(k,39))
mat(k,731) = -rxt(k,94)*y(k,41)
mat(k,689) = -rxt(k,111)*y(k,41)
mat(k,859) = -rxt(k,120)*y(k,41)
mat(k,788) = -rxt(k,157)*y(k,41)
mat(k,296) = -rxt(k,213)*y(k,41)
- mat(k,407) = rxt(k,244)*y(k,94)
- mat(k,445) = rxt(k,113)*y(k,89)
+ mat(k,407) = rxt(k,244)*y(k,95)
+ mat(k,445) = rxt(k,113)*y(k,90)
mat(k,565) = rxt(k,113)*y(k,40)
mat(k,731) = mat(k,731) + rxt(k,244)*y(k,23)
- mat(k,32) = -(rxt(k,209)*y(k,94))
+ mat(k,32) = -(rxt(k,209)*y(k,95))
mat(k,694) = -rxt(k,209)*y(k,42)
- mat(k,228) = -(rxt(k,112)*y(k,69) + rxt(k,121)*y(k,98) + rxt(k,158)*y(k,25))
+ mat(k,228) = -(rxt(k,112)*y(k,69) + rxt(k,121)*y(k,99) + rxt(k,158)*y(k,25))
mat(k,658) = -rxt(k,112)*y(k,43)
mat(k,830) = -rxt(k,121)*y(k,43)
mat(k,765) = -rxt(k,158)*y(k,43)
- mat(k,545) = 2.000_r8*rxt(k,127)*y(k,89)
- mat(k,830) = mat(k,830) + 2.000_r8*rxt(k,126)*y(k,98)
- mat(k,107) = rxt(k,262)*y(k,102)
- mat(k,933) = rxt(k,262)*y(k,80)
- mat(k,256) = -(rxt(k,204)*y(k,69) + rxt(k,205)*y(k,98) + (rxt(k,210) &
- + rxt(k,211)) * y(k,94))
+ mat(k,545) = 2.000_r8*rxt(k,127)*y(k,90)
+ mat(k,830) = mat(k,830) + 2.000_r8*rxt(k,126)*y(k,99)
+ mat(k,107) = rxt(k,262)*y(k,103)
+ mat(k,933) = rxt(k,262)*y(k,81)
+ mat(k,256) = -(rxt(k,204)*y(k,69) + rxt(k,205)*y(k,99) + (rxt(k,210) &
+ + rxt(k,211)) * y(k,95))
mat(k,662) = -rxt(k,204)*y(k,45)
mat(k,832) = -rxt(k,205)*y(k,45)
mat(k,712) = -(rxt(k,210) + rxt(k,211)) * y(k,45)
- mat(k,792) = rxt(k,191)*y(k,17) + rxt(k,192)*y(k,89)
+ mat(k,792) = rxt(k,191)*y(k,17) + rxt(k,192)*y(k,90)
mat(k,469) = rxt(k,191)*y(k,3)
mat(k,547) = rxt(k,192)*y(k,3)
- mat(k,85) = -(rxt(k,227)*y(k,98) + rxt(k,232)*y(k,94))
+ mat(k,85) = -(rxt(k,227)*y(k,99) + rxt(k,232)*y(k,95))
mat(k,816) = -rxt(k,227)*y(k,46)
mat(k,704) = -rxt(k,232)*y(k,46)
- mat(k,95) = -(rxt(k,228)*y(k,98) + rxt(k,233)*y(k,94))
+ mat(k,95) = -(rxt(k,228)*y(k,99) + rxt(k,233)*y(k,95))
mat(k,818) = -rxt(k,228)*y(k,47)
mat(k,706) = -rxt(k,233)*y(k,47)
- mat(k,113) = -(rxt(k,229)*y(k,98) + rxt(k,234)*y(k,94))
+ mat(k,113) = -(rxt(k,229)*y(k,99) + rxt(k,234)*y(k,95))
mat(k,820) = -rxt(k,229)*y(k,48)
mat(k,708) = -rxt(k,234)*y(k,48)
- mat(k,453) = -(rxt(k,175)*y(k,69) + rxt(k,176)*y(k,98) + (rxt(k,187) &
- + rxt(k,188)) * y(k,94) + (rxt(k,268) + rxt(k,274) + rxt(k,279) &
+ mat(k,453) = -(rxt(k,175)*y(k,69) + rxt(k,176)*y(k,99) + (rxt(k,187) &
+ + rxt(k,188)) * y(k,95) + (rxt(k,268) + rxt(k,274) + rxt(k,279) &
) * y(k,54) + (rxt(k,273) + rxt(k,278) + rxt(k,283)) * y(k,29) &
+ (rxt(k,275) + rxt(k,280)) * y(k,53))
mat(k,675) = -rxt(k,175)*y(k,49)
@@ -386,8 +386,8 @@ subroutine nlnmat02( avec_len, mat, y, rxt )
mat(k,774) = rxt(k,218)*y(k,16) + rxt(k,155)*y(k,17) + rxt(k,220)*y(k,18) &
+ 2.000_r8*rxt(k,223)*y(k,20) + rxt(k,156)*y(k,23) + rxt(k,225) &
*y(k,24) + rxt(k,157)*y(k,41) + rxt(k,158)*y(k,43) + rxt(k,177) &
- *y(k,54) + rxt(k,159)*y(k,89)
- mat(k,604) = rxt(k,174)*y(k,98)
+ *y(k,54) + rxt(k,159)*y(k,90)
+ mat(k,604) = rxt(k,174)*y(k,99)
mat(k,868) = rxt(k,157)*y(k,25)
mat(k,229) = rxt(k,158)*y(k,25)
mat(k,266) = mat(k,266) + rxt(k,177)*y(k,25)
@@ -395,63 +395,63 @@ subroutine nlnmat02( avec_len, mat, y, rxt )
mat(k,845) = mat(k,845) + rxt(k,174)*y(k,28)
mat(k,387) = rxt(k,212)*y(k,39)
mat(k,289) = rxt(k,212)*y(k,23) + rxt(k,213)*y(k,41) + rxt(k,215)*y(k,51) &
- + rxt(k,214)*y(k,102)
+ + rxt(k,214)*y(k,103)
mat(k,863) = rxt(k,213)*y(k,39)
mat(k,886) = rxt(k,215)*y(k,39)
mat(k,935) = rxt(k,214)*y(k,39)
- mat(k,906) = -(rxt(k,152)*y(k,98) + rxt(k,215)*y(k,39))
+ mat(k,906) = -(rxt(k,152)*y(k,99) + rxt(k,215)*y(k,39))
mat(k,860) = -rxt(k,152)*y(k,51)
mat(k,297) = -rxt(k,215)*y(k,51)
mat(k,489) = rxt(k,235)*y(k,63)
mat(k,316) = (rxt(k,273)+rxt(k,278)+rxt(k,283))*y(k,49)
mat(k,133) = rxt(k,246)*y(k,63)
mat(k,466) = (rxt(k,273)+rxt(k,278)+rxt(k,283))*y(k,29)
- mat(k,648) = rxt(k,151)*y(k,98)
+ mat(k,648) = rxt(k,151)*y(k,99)
mat(k,591) = rxt(k,235)*y(k,17) + rxt(k,246)*y(k,35)
mat(k,860) = mat(k,860) + rxt(k,151)*y(k,62)
- mat(k,167) = -(rxt(k,128)*y(k,98))
+ mat(k,167) = -(rxt(k,128)*y(k,99))
mat(k,826) = -rxt(k,128)*y(k,52)
- mat(k,624) = rxt(k,149)*y(k,89)
+ mat(k,624) = rxt(k,149)*y(k,90)
mat(k,544) = rxt(k,149)*y(k,62)
mat(k,248) = -(rxt(k,206)*y(k,69) + (rxt(k,275) + rxt(k,280)) * y(k,49))
mat(k,661) = -rxt(k,206)*y(k,53)
mat(k,449) = -(rxt(k,275) + rxt(k,280)) * y(k,53)
- mat(k,912) = rxt(k,198)*y(k,89)
+ mat(k,912) = rxt(k,198)*y(k,90)
mat(k,546) = rxt(k,198)*y(k,5)
- mat(k,265) = -(rxt(k,177)*y(k,25) + rxt(k,178)*y(k,69) + rxt(k,179)*y(k,98) &
+ mat(k,265) = -(rxt(k,177)*y(k,25) + rxt(k,178)*y(k,69) + rxt(k,179)*y(k,99) &
+ (rxt(k,268) + rxt(k,274) + rxt(k,279)) * y(k,49))
mat(k,766) = -rxt(k,177)*y(k,54)
mat(k,663) = -rxt(k,178)*y(k,54)
mat(k,833) = -rxt(k,179)*y(k,54)
mat(k,450) = -(rxt(k,268) + rxt(k,274) + rxt(k,279)) * y(k,54)
- mat(k,598) = rxt(k,166)*y(k,89)
- mat(k,307) = rxt(k,171)*y(k,98)
+ mat(k,598) = rxt(k,166)*y(k,90)
+ mat(k,307) = rxt(k,171)*y(k,99)
mat(k,548) = rxt(k,166)*y(k,28)
mat(k,833) = mat(k,833) + rxt(k,171)*y(k,29)
mat(k,347) = -(rxt(k,131)*y(k,61) + (rxt(k,132) + rxt(k,133) + rxt(k,134) &
- ) * y(k,62) + rxt(k,135)*y(k,70) + rxt(k,143)*y(k,98) + rxt(k,296) &
- *y(k,97))
+ ) * y(k,62) + rxt(k,135)*y(k,70) + rxt(k,143)*y(k,99) + rxt(k,296) &
+ *y(k,98))
mat(k,738) = -rxt(k,131)*y(k,55)
mat(k,629) = -(rxt(k,132) + rxt(k,133) + rxt(k,134)) * y(k,55)
mat(k,503) = -rxt(k,135)*y(k,55)
mat(k,838) = -rxt(k,143)*y(k,55)
mat(k,360) = -rxt(k,296)*y(k,55)
- mat(k,670) = rxt(k,129)*y(k,90) + rxt(k,293)*y(k,93)
- mat(k,503) = mat(k,503) + rxt(k,294)*y(k,93)
- mat(k,325) = 1.100_r8*rxt(k,289)*y(k,91) + .200_r8*rxt(k,287)*y(k,92)
+ mat(k,670) = rxt(k,129)*y(k,91) + rxt(k,293)*y(k,94)
+ mat(k,503) = mat(k,503) + rxt(k,294)*y(k,94)
+ mat(k,325) = 1.100_r8*rxt(k,289)*y(k,92) + .200_r8*rxt(k,287)*y(k,93)
mat(k,335) = rxt(k,129)*y(k,69)
- mat(k,223) = 1.100_r8*rxt(k,289)*y(k,88)
- mat(k,245) = .200_r8*rxt(k,287)*y(k,88)
+ mat(k,223) = 1.100_r8*rxt(k,289)*y(k,89)
+ mat(k,245) = .200_r8*rxt(k,287)*y(k,89)
mat(k,276) = rxt(k,293)*y(k,69) + rxt(k,294)*y(k,70)
- mat(k,103) = -((rxt(k,147) + rxt(k,148)) * y(k,94))
+ mat(k,103) = -((rxt(k,147) + rxt(k,148)) * y(k,95))
mat(k,707) = -(rxt(k,147) + rxt(k,148)) * y(k,56)
mat(k,342) = rxt(k,132)*y(k,62)
mat(k,622) = rxt(k,132)*y(k,55)
mat(k,623) = rxt(k,150)*y(k,63)
mat(k,569) = rxt(k,150)*y(k,62)
- mat(k,752) = -(rxt(k,131)*y(k,55) + rxt(k,140)*y(k,63) + rxt(k,144)*y(k,89) &
+ mat(k,752) = -(rxt(k,131)*y(k,55) + rxt(k,140)*y(k,63) + rxt(k,144)*y(k,90) &
+ rxt(k,145)*y(k,71) + rxt(k,146)*y(k,69) + rxt(k,167)*y(k,28) &
- + rxt(k,199)*y(k,5) + rxt(k,239)*y(k,21) + rxt(k,298)*y(k,97))
+ + rxt(k,199)*y(k,5) + rxt(k,239)*y(k,21) + rxt(k,298)*y(k,98))
mat(k,355) = -rxt(k,131)*y(k,61)
mat(k,586) = -rxt(k,140)*y(k,61)
mat(k,561) = -rxt(k,144)*y(k,61)
@@ -462,12 +462,12 @@ subroutine nlnmat02( avec_len, mat, y, rxt )
mat(k,418) = -rxt(k,239)*y(k,61)
mat(k,368) = -rxt(k,298)*y(k,61)
mat(k,355) = mat(k,355) + 2.000_r8*rxt(k,133)*y(k,62) + rxt(k,135)*y(k,70) &
- + rxt(k,143)*y(k,98)
- mat(k,106) = 2.000_r8*rxt(k,147)*y(k,94)
+ + rxt(k,143)*y(k,99)
+ mat(k,106) = 2.000_r8*rxt(k,147)*y(k,95)
mat(k,643) = 2.000_r8*rxt(k,133)*y(k,55) + rxt(k,136)*y(k,69) + rxt(k,256) &
- *y(k,78)
+ *y(k,79)
mat(k,685) = mat(k,685) + rxt(k,136)*y(k,62)
- mat(k,515) = rxt(k,135)*y(k,55) + rxt(k,130)*y(k,90)
+ mat(k,515) = rxt(k,135)*y(k,55) + rxt(k,130)*y(k,91)
mat(k,433) = rxt(k,256)*y(k,62)
mat(k,341) = rxt(k,130)*y(k,70)
mat(k,727) = 2.000_r8*rxt(k,147)*y(k,56)
@@ -494,8 +494,8 @@ subroutine nlnmat03( avec_len, mat, y, rxt )
do k = 1,avec_len
mat(k,640) = -((rxt(k,132) + rxt(k,133) + rxt(k,134)) * y(k,55) + (rxt(k,136) &
+ rxt(k,138)) * y(k,69) + rxt(k,137)*y(k,71) + rxt(k,149) &
- *y(k,89) + rxt(k,150)*y(k,63) + rxt(k,151)*y(k,98) + rxt(k,169) &
- *y(k,28) + rxt(k,200)*y(k,5) + rxt(k,256)*y(k,78))
+ *y(k,90) + rxt(k,150)*y(k,63) + rxt(k,151)*y(k,99) + rxt(k,169) &
+ *y(k,28) + rxt(k,200)*y(k,5) + rxt(k,256)*y(k,79))
mat(k,352) = -(rxt(k,132) + rxt(k,133) + rxt(k,134)) * y(k,62)
mat(k,682) = -(rxt(k,136) + rxt(k,138)) * y(k,62)
mat(k,533) = -rxt(k,137)*y(k,62)
@@ -508,18 +508,18 @@ subroutine nlnmat03( avec_len, mat, y, rxt )
mat(k,922) = mat(k,922) + rxt(k,199)*y(k,61)
mat(k,417) = rxt(k,239)*y(k,61)
mat(k,611) = mat(k,611) + rxt(k,167)*y(k,61)
- mat(k,171) = rxt(k,128)*y(k,98)
+ mat(k,171) = rxt(k,128)*y(k,99)
mat(k,749) = rxt(k,199)*y(k,5) + rxt(k,239)*y(k,21) + rxt(k,167)*y(k,28) &
+ 2.000_r8*rxt(k,140)*y(k,63) + rxt(k,146)*y(k,69) + rxt(k,145) &
- *y(k,71) + rxt(k,144)*y(k,89)
+ *y(k,71) + rxt(k,144)*y(k,90)
mat(k,583) = mat(k,583) + 2.000_r8*rxt(k,140)*y(k,61) + rxt(k,141)*y(k,69) &
- + rxt(k,139)*y(k,89) + rxt(k,142)*y(k,98)
+ + rxt(k,139)*y(k,90) + rxt(k,142)*y(k,99)
mat(k,682) = mat(k,682) + rxt(k,146)*y(k,61) + rxt(k,141)*y(k,63)
mat(k,533) = mat(k,533) + rxt(k,145)*y(k,61)
mat(k,558) = mat(k,558) + rxt(k,144)*y(k,61) + rxt(k,139)*y(k,63)
mat(k,852) = mat(k,852) + rxt(k,128)*y(k,52) + rxt(k,142)*y(k,63)
- mat(k,581) = -(rxt(k,139)*y(k,89) + rxt(k,140)*y(k,61) + rxt(k,141)*y(k,69) &
- + rxt(k,142)*y(k,98) + rxt(k,150)*y(k,62) + rxt(k,235)*y(k,17) &
+ mat(k,581) = -(rxt(k,139)*y(k,90) + rxt(k,140)*y(k,61) + rxt(k,141)*y(k,69) &
+ + rxt(k,142)*y(k,99) + rxt(k,150)*y(k,62) + rxt(k,235)*y(k,17) &
+ rxt(k,246)*y(k,35))
mat(k,556) = -rxt(k,139)*y(k,63)
mat(k,747) = -rxt(k,140)*y(k,63)
@@ -530,9 +530,9 @@ subroutine nlnmat03( avec_len, mat, y, rxt )
mat(k,131) = -rxt(k,246)*y(k,63)
mat(k,204) = rxt(k,201)*y(k,69)
mat(k,779) = rxt(k,168)*y(k,29)
- mat(k,310) = rxt(k,168)*y(k,25) + rxt(k,170)*y(k,69) + rxt(k,171)*y(k,98)
+ mat(k,310) = rxt(k,168)*y(k,25) + rxt(k,170)*y(k,69) + rxt(k,171)*y(k,99)
mat(k,294) = rxt(k,215)*y(k,51)
- mat(k,896) = rxt(k,215)*y(k,39) + rxt(k,152)*y(k,98)
+ mat(k,896) = rxt(k,215)*y(k,39) + rxt(k,152)*y(k,99)
mat(k,638) = mat(k,638) + rxt(k,138)*y(k,69) + rxt(k,137)*y(k,71)
mat(k,680) = mat(k,680) + rxt(k,201)*y(k,6) + rxt(k,170)*y(k,29) + rxt(k,138) &
*y(k,62)
@@ -540,13 +540,13 @@ subroutine nlnmat03( avec_len, mat, y, rxt )
mat(k,850) = mat(k,850) + rxt(k,171)*y(k,29) + rxt(k,152)*y(k,51)
mat(k,683) = -(rxt(k,108)*y(k,71) + 4._r8*rxt(k,109)*y(k,69) + rxt(k,110) &
*y(k,70) + rxt(k,111)*y(k,41) + rxt(k,112)*y(k,43) + rxt(k,117) &
- *y(k,89) + rxt(k,123)*y(k,98) + (rxt(k,136) + rxt(k,138) &
+ *y(k,90) + rxt(k,123)*y(k,99) + (rxt(k,136) + rxt(k,138) &
) * y(k,62) + rxt(k,141)*y(k,63) + rxt(k,146)*y(k,61) + rxt(k,170) &
*y(k,29) + rxt(k,172)*y(k,28) + rxt(k,175)*y(k,49) + rxt(k,178) &
*y(k,54) + rxt(k,201)*y(k,6) + rxt(k,202)*y(k,5) + rxt(k,204) &
*y(k,45) + rxt(k,206)*y(k,53) + rxt(k,236)*y(k,17) + rxt(k,248) &
- *y(k,73) + (rxt(k,291) + rxt(k,292)) * y(k,91) + rxt(k,293) &
- *y(k,93))
+ *y(k,74) + (rxt(k,291) + rxt(k,292)) * y(k,92) + rxt(k,293) &
+ *y(k,94))
mat(k,534) = -rxt(k,108)*y(k,69)
mat(k,513) = -rxt(k,110)*y(k,69)
mat(k,876) = -rxt(k,111)*y(k,69)
@@ -568,31 +568,31 @@ subroutine nlnmat03( avec_len, mat, y, rxt )
mat(k,145) = -rxt(k,248)*y(k,69)
mat(k,227) = -(rxt(k,291) + rxt(k,292)) * y(k,69)
mat(k,280) = -rxt(k,293)*y(k,69)
- mat(k,443) = rxt(k,115)*y(k,89)
+ mat(k,443) = rxt(k,115)*y(k,90)
mat(k,353) = rxt(k,131)*y(k,61) + rxt(k,132)*y(k,62) + rxt(k,135)*y(k,70) &
- + rxt(k,296)*y(k,97)
+ + rxt(k,296)*y(k,98)
mat(k,750) = mat(k,750) + rxt(k,131)*y(k,55)
mat(k,641) = mat(k,641) + rxt(k,132)*y(k,55)
- mat(k,513) = mat(k,513) + rxt(k,135)*y(k,55) + rxt(k,250)*y(k,76) &
- + rxt(k,257)*y(k,78) + rxt(k,295)*y(k,93) + (rxt(k,97)+rxt(k,98)) &
- *y(k,94) + rxt(k,302)*y(k,99) + rxt(k,306)*y(k,100)
+ mat(k,513) = mat(k,513) + rxt(k,135)*y(k,55) + rxt(k,250)*y(k,77) &
+ + rxt(k,257)*y(k,79) + rxt(k,295)*y(k,94) + (rxt(k,97)+rxt(k,98)) &
+ *y(k,95) + rxt(k,302)*y(k,100) + rxt(k,306)*y(k,101)
mat(k,240) = rxt(k,250)*y(k,70)
mat(k,432) = rxt(k,257)*y(k,70)
- mat(k,329) = rxt(k,287)*y(k,92) + 1.150_r8*rxt(k,288)*y(k,97)
+ mat(k,329) = rxt(k,287)*y(k,93) + 1.150_r8*rxt(k,288)*y(k,98)
mat(k,559) = mat(k,559) + rxt(k,115)*y(k,40)
- mat(k,339) = rxt(k,301)*y(k,99)
- mat(k,246) = rxt(k,287)*y(k,88)
+ mat(k,339) = rxt(k,301)*y(k,100)
+ mat(k,246) = rxt(k,287)*y(k,89)
mat(k,280) = mat(k,280) + rxt(k,295)*y(k,70)
mat(k,725) = (rxt(k,97)+rxt(k,98))*y(k,70)
- mat(k,366) = rxt(k,296)*y(k,55) + 1.150_r8*rxt(k,288)*y(k,88)
- mat(k,853) = mat(k,853) + 2.000_r8*rxt(k,125)*y(k,98)
- mat(k,383) = rxt(k,302)*y(k,70) + rxt(k,301)*y(k,90)
+ mat(k,366) = rxt(k,296)*y(k,55) + 1.150_r8*rxt(k,288)*y(k,89)
+ mat(k,853) = mat(k,853) + 2.000_r8*rxt(k,125)*y(k,99)
+ mat(k,383) = rxt(k,302)*y(k,70) + rxt(k,301)*y(k,91)
mat(k,193) = rxt(k,306)*y(k,70)
- mat(k,508) = -(rxt(k,97)*y(k,94) + rxt(k,102)*y(k,95) + rxt(k,110)*y(k,69) &
- + rxt(k,116)*y(k,40) + rxt(k,130)*y(k,90) + rxt(k,135)*y(k,55) &
- + rxt(k,250)*y(k,76) + rxt(k,257)*y(k,78) + rxt(k,290)*y(k,91) &
- + (rxt(k,294) + rxt(k,295)) * y(k,93) + rxt(k,302)*y(k,99) &
- + rxt(k,306)*y(k,100))
+ mat(k,508) = -(rxt(k,97)*y(k,95) + rxt(k,102)*y(k,96) + rxt(k,110)*y(k,69) &
+ + rxt(k,116)*y(k,40) + rxt(k,130)*y(k,91) + rxt(k,135)*y(k,55) &
+ + rxt(k,250)*y(k,77) + rxt(k,257)*y(k,79) + rxt(k,290)*y(k,92) &
+ + (rxt(k,294) + rxt(k,295)) * y(k,94) + rxt(k,302)*y(k,100) &
+ + rxt(k,306)*y(k,101))
mat(k,719) = -rxt(k,97)*y(k,70)
mat(k,78) = -rxt(k,102)*y(k,70)
mat(k,677) = -rxt(k,110)*y(k,70)
@@ -605,46 +605,46 @@ subroutine nlnmat03( avec_len, mat, y, rxt )
mat(k,279) = -(rxt(k,294) + rxt(k,295)) * y(k,70)
mat(k,380) = -rxt(k,302)*y(k,70)
mat(k,192) = -rxt(k,306)*y(k,70)
- mat(k,798) = rxt(k,193)*y(k,71) + rxt(k,192)*y(k,89)
+ mat(k,798) = rxt(k,193)*y(k,71) + rxt(k,192)*y(k,90)
mat(k,917) = 2.000_r8*rxt(k,194)*y(k,5) + (rxt(k,196)+rxt(k,197))*y(k,28) &
- + rxt(k,202)*y(k,69) + rxt(k,198)*y(k,89)
- mat(k,414) = rxt(k,238)*y(k,89)
- mat(k,776) = rxt(k,161)*y(k,71) + rxt(k,159)*y(k,89)
+ + rxt(k,202)*y(k,69) + rxt(k,198)*y(k,90)
+ mat(k,414) = rxt(k,238)*y(k,90)
+ mat(k,776) = rxt(k,161)*y(k,71) + rxt(k,159)*y(k,90)
mat(k,606) = (rxt(k,196)+rxt(k,197))*y(k,5) + (2.000_r8*rxt(k,163) &
+2.000_r8*rxt(k,164))*y(k,28) + rxt(k,172)*y(k,69) + rxt(k,166) &
- *y(k,89) + rxt(k,174)*y(k,98)
- mat(k,440) = mat(k,440) + rxt(k,119)*y(k,71) + rxt(k,113)*y(k,89)
- mat(k,168) = rxt(k,128)*y(k,98)
+ *y(k,90) + rxt(k,174)*y(k,99)
+ mat(k,440) = mat(k,440) + rxt(k,119)*y(k,71) + rxt(k,113)*y(k,90)
+ mat(k,168) = rxt(k,128)*y(k,99)
mat(k,351) = mat(k,351) + rxt(k,134)*y(k,62)
- mat(k,104) = rxt(k,148)*y(k,94)
- mat(k,744) = rxt(k,145)*y(k,71) + rxt(k,298)*y(k,97)
+ mat(k,104) = rxt(k,148)*y(k,95)
+ mat(k,744) = rxt(k,145)*y(k,71) + rxt(k,298)*y(k,98)
mat(k,635) = rxt(k,134)*y(k,55) + rxt(k,136)*y(k,69) + rxt(k,137)*y(k,71)
- mat(k,578) = rxt(k,141)*y(k,69) + rxt(k,139)*y(k,89)
+ mat(k,578) = rxt(k,141)*y(k,69) + rxt(k,139)*y(k,90)
mat(k,677) = mat(k,677) + rxt(k,202)*y(k,5) + rxt(k,172)*y(k,28) + rxt(k,136) &
*y(k,62) + rxt(k,141)*y(k,63) + 2.000_r8*rxt(k,109)*y(k,69) &
- + 2.000_r8*rxt(k,108)*y(k,71) + rxt(k,117)*y(k,89) + rxt(k,101) &
- *y(k,95) + rxt(k,123)*y(k,98)
- mat(k,508) = mat(k,508) + 2.000_r8*rxt(k,102)*y(k,95)
+ + 2.000_r8*rxt(k,108)*y(k,71) + rxt(k,117)*y(k,90) + rxt(k,101) &
+ *y(k,96) + rxt(k,123)*y(k,99)
+ mat(k,508) = mat(k,508) + 2.000_r8*rxt(k,102)*y(k,96)
mat(k,528) = rxt(k,193)*y(k,3) + rxt(k,161)*y(k,25) + rxt(k,119)*y(k,40) &
+ rxt(k,145)*y(k,61) + rxt(k,137)*y(k,62) + 2.000_r8*rxt(k,108) &
- *y(k,69) + rxt(k,252)*y(k,76) + rxt(k,258)*y(k,78) &
- + 2.000_r8*rxt(k,118)*y(k,89) + 2.000_r8*rxt(k,99)*y(k,94) &
- + rxt(k,124)*y(k,98)
+ *y(k,69) + rxt(k,252)*y(k,77) + rxt(k,258)*y(k,79) &
+ + 2.000_r8*rxt(k,118)*y(k,90) + 2.000_r8*rxt(k,99)*y(k,95) &
+ + rxt(k,124)*y(k,99)
mat(k,238) = mat(k,238) + rxt(k,252)*y(k,71)
mat(k,427) = mat(k,427) + rxt(k,258)*y(k,71)
mat(k,553) = rxt(k,192)*y(k,3) + rxt(k,198)*y(k,5) + rxt(k,238)*y(k,21) &
+ rxt(k,159)*y(k,25) + rxt(k,166)*y(k,28) + rxt(k,113)*y(k,40) &
+ rxt(k,139)*y(k,63) + rxt(k,117)*y(k,69) + 2.000_r8*rxt(k,118) &
- *y(k,71) + 2.000_r8*rxt(k,127)*y(k,89) + rxt(k,122)*y(k,98)
+ *y(k,71) + 2.000_r8*rxt(k,127)*y(k,90) + rxt(k,122)*y(k,99)
mat(k,719) = mat(k,719) + rxt(k,148)*y(k,56) + 2.000_r8*rxt(k,99)*y(k,71)
mat(k,78) = mat(k,78) + rxt(k,101)*y(k,69) + 2.000_r8*rxt(k,102)*y(k,70)
mat(k,364) = rxt(k,298)*y(k,61)
mat(k,847) = rxt(k,174)*y(k,28) + rxt(k,128)*y(k,52) + rxt(k,123)*y(k,69) &
- + rxt(k,124)*y(k,71) + rxt(k,122)*y(k,89)
- mat(k,529) = -(rxt(k,99)*y(k,94) + rxt(k,108)*y(k,69) + rxt(k,118)*y(k,89) &
- + rxt(k,119)*y(k,40) + rxt(k,124)*y(k,98) + rxt(k,137)*y(k,62) &
+ + rxt(k,124)*y(k,71) + rxt(k,122)*y(k,90)
+ mat(k,529) = -(rxt(k,99)*y(k,95) + rxt(k,108)*y(k,69) + rxt(k,118)*y(k,90) &
+ + rxt(k,119)*y(k,40) + rxt(k,124)*y(k,99) + rxt(k,137)*y(k,62) &
+ rxt(k,145)*y(k,61) + rxt(k,161)*y(k,25) + rxt(k,193)*y(k,3) &
- + rxt(k,252)*y(k,76) + rxt(k,258)*y(k,78))
+ + rxt(k,252)*y(k,77) + rxt(k,258)*y(k,79))
mat(k,720) = -rxt(k,99)*y(k,71)
mat(k,678) = -rxt(k,108)*y(k,71)
mat(k,554) = -rxt(k,118)*y(k,71)
@@ -658,49 +658,49 @@ subroutine nlnmat03( avec_len, mat, y, rxt )
mat(k,428) = -rxt(k,258)*y(k,71)
mat(k,678) = mat(k,678) + rxt(k,110)*y(k,70)
mat(k,509) = rxt(k,110)*y(k,69)
- mat(k,134) = -(rxt(k,259)*y(k,78))
- mat(k,422) = -rxt(k,259)*y(k,72)
+ mat(k,134) = -(rxt(k,259)*y(k,79))
+ mat(k,422) = -rxt(k,259)*y(k,73)
mat(k,910) = rxt(k,195)*y(k,28)
mat(k,597) = rxt(k,195)*y(k,5) + 2.000_r8*rxt(k,165)*y(k,28)
- mat(k,139) = -(rxt(k,248)*y(k,69) + rxt(k,249)*y(k,98))
- mat(k,653) = -rxt(k,248)*y(k,73)
- mat(k,822) = -rxt(k,249)*y(k,73)
- mat(k,235) = -(rxt(k,250)*y(k,70) + rxt(k,252)*y(k,71) + rxt(k,255)*y(k,98))
- mat(k,497) = -rxt(k,250)*y(k,76)
- mat(k,524) = -rxt(k,252)*y(k,76)
- mat(k,831) = -rxt(k,255)*y(k,76)
+ mat(k,139) = -(rxt(k,248)*y(k,69) + rxt(k,249)*y(k,99))
+ mat(k,653) = -rxt(k,248)*y(k,74)
+ mat(k,822) = -rxt(k,249)*y(k,74)
+ mat(k,235) = -(rxt(k,250)*y(k,70) + rxt(k,252)*y(k,71) + rxt(k,255)*y(k,99))
+ mat(k,497) = -rxt(k,250)*y(k,77)
+ mat(k,524) = -rxt(k,252)*y(k,77)
+ mat(k,831) = -rxt(k,255)*y(k,77)
mat(k,425) = -(rxt(k,253)*y(k,5) + rxt(k,254)*y(k,28) + rxt(k,256)*y(k,62) &
- + rxt(k,257)*y(k,70) + rxt(k,258)*y(k,71) + rxt(k,259)*y(k,72) &
- + rxt(k,260)*y(k,98))
- mat(k,914) = -rxt(k,253)*y(k,78)
- mat(k,602) = -rxt(k,254)*y(k,78)
- mat(k,632) = -rxt(k,256)*y(k,78)
- mat(k,506) = -rxt(k,257)*y(k,78)
- mat(k,526) = -rxt(k,258)*y(k,78)
- mat(k,136) = -rxt(k,259)*y(k,78)
- mat(k,843) = -rxt(k,260)*y(k,78)
- mat(k,673) = rxt(k,248)*y(k,73)
- mat(k,506) = mat(k,506) + rxt(k,250)*y(k,76)
- mat(k,526) = mat(k,526) + rxt(k,252)*y(k,76)
+ + rxt(k,257)*y(k,70) + rxt(k,258)*y(k,71) + rxt(k,259)*y(k,73) &
+ + rxt(k,260)*y(k,99))
+ mat(k,914) = -rxt(k,253)*y(k,79)
+ mat(k,602) = -rxt(k,254)*y(k,79)
+ mat(k,632) = -rxt(k,256)*y(k,79)
+ mat(k,506) = -rxt(k,257)*y(k,79)
+ mat(k,526) = -rxt(k,258)*y(k,79)
+ mat(k,136) = -rxt(k,259)*y(k,79)
+ mat(k,843) = -rxt(k,260)*y(k,79)
+ mat(k,673) = rxt(k,248)*y(k,74)
+ mat(k,506) = mat(k,506) + rxt(k,250)*y(k,77)
+ mat(k,526) = mat(k,526) + rxt(k,252)*y(k,77)
mat(k,143) = rxt(k,248)*y(k,69)
- mat(k,236) = rxt(k,250)*y(k,70) + rxt(k,252)*y(k,71) + rxt(k,255)*y(k,98)
- mat(k,843) = mat(k,843) + rxt(k,255)*y(k,76)
- mat(k,300) = -(rxt(k,251)*y(k,98))
- mat(k,836) = -rxt(k,251)*y(k,79)
- mat(k,913) = rxt(k,253)*y(k,78)
- mat(k,599) = rxt(k,254)*y(k,78)
- mat(k,129) = rxt(k,246)*y(k,63) + (rxt(k,247)+.500_r8*rxt(k,261))*y(k,98)
- mat(k,627) = rxt(k,256)*y(k,78)
+ mat(k,236) = rxt(k,250)*y(k,70) + rxt(k,252)*y(k,71) + rxt(k,255)*y(k,99)
+ mat(k,843) = mat(k,843) + rxt(k,255)*y(k,77)
+ mat(k,300) = -(rxt(k,251)*y(k,99))
+ mat(k,836) = -rxt(k,251)*y(k,80)
+ mat(k,913) = rxt(k,253)*y(k,79)
+ mat(k,599) = rxt(k,254)*y(k,79)
+ mat(k,129) = rxt(k,246)*y(k,63) + (rxt(k,247)+.500_r8*rxt(k,261))*y(k,99)
+ mat(k,627) = rxt(k,256)*y(k,79)
mat(k,572) = rxt(k,246)*y(k,35)
- mat(k,500) = rxt(k,257)*y(k,78)
- mat(k,525) = rxt(k,258)*y(k,78)
- mat(k,135) = rxt(k,259)*y(k,78)
- mat(k,142) = rxt(k,249)*y(k,98)
+ mat(k,500) = rxt(k,257)*y(k,79)
+ mat(k,525) = rxt(k,258)*y(k,79)
+ mat(k,135) = rxt(k,259)*y(k,79)
+ mat(k,142) = rxt(k,249)*y(k,99)
mat(k,424) = rxt(k,253)*y(k,5) + rxt(k,254)*y(k,28) + rxt(k,256)*y(k,62) &
- + rxt(k,257)*y(k,70) + rxt(k,258)*y(k,71) + rxt(k,259)*y(k,72) &
- + rxt(k,260)*y(k,98)
+ + rxt(k,257)*y(k,70) + rxt(k,258)*y(k,71) + rxt(k,259)*y(k,73) &
+ + rxt(k,260)*y(k,99)
mat(k,836) = mat(k,836) + (rxt(k,247)+.500_r8*rxt(k,261))*y(k,35) &
- + rxt(k,249)*y(k,73) + rxt(k,260)*y(k,78)
+ + rxt(k,249)*y(k,74) + rxt(k,260)*y(k,79)
end do
end subroutine nlnmat03
subroutine nlnmat04( avec_len, mat, y, rxt )
@@ -721,86 +721,86 @@ subroutine nlnmat04( avec_len, mat, y, rxt )
! ... complete matrix entries implicit species
!----------------------------------------------
do k = 1,avec_len
- mat(k,108) = -(rxt(k,262)*y(k,102))
- mat(k,934) = -rxt(k,262)*y(k,80)
- mat(k,299) = rxt(k,251)*y(k,98)
- mat(k,819) = rxt(k,251)*y(k,79)
- mat(k,323) = -(rxt(k,287)*y(k,92) + rxt(k,288)*y(k,97) + rxt(k,289)*y(k,91))
- mat(k,243) = -rxt(k,287)*y(k,88)
- mat(k,358) = -rxt(k,288)*y(k,88)
- mat(k,221) = -rxt(k,289)*y(k,88)
+ mat(k,108) = -(rxt(k,262)*y(k,103))
+ mat(k,934) = -rxt(k,262)*y(k,81)
+ mat(k,299) = rxt(k,251)*y(k,99)
+ mat(k,819) = rxt(k,251)*y(k,80)
+ mat(k,323) = -(rxt(k,287)*y(k,93) + rxt(k,288)*y(k,98) + rxt(k,289)*y(k,92))
+ mat(k,243) = -rxt(k,287)*y(k,89)
+ mat(k,358) = -rxt(k,288)*y(k,89)
+ mat(k,221) = -rxt(k,289)*y(k,89)
mat(k,555) = -((rxt(k,113) + rxt(k,114) + rxt(k,115)) * y(k,40) + rxt(k,117) &
- *y(k,69) + rxt(k,118)*y(k,71) + rxt(k,122)*y(k,98) &
- + 4._r8*rxt(k,127)*y(k,89) + rxt(k,139)*y(k,63) + rxt(k,144) &
+ *y(k,69) + rxt(k,118)*y(k,71) + rxt(k,122)*y(k,99) &
+ + 4._r8*rxt(k,127)*y(k,90) + rxt(k,139)*y(k,63) + rxt(k,144) &
*y(k,61) + rxt(k,149)*y(k,62) + (rxt(k,159) + rxt(k,160) &
) * y(k,25) + rxt(k,166)*y(k,28) + rxt(k,192)*y(k,3) + rxt(k,198) &
*y(k,5) + rxt(k,238)*y(k,21))
- mat(k,442) = -(rxt(k,113) + rxt(k,114) + rxt(k,115)) * y(k,89)
- mat(k,679) = -rxt(k,117)*y(k,89)
- mat(k,530) = -rxt(k,118)*y(k,89)
- mat(k,849) = -rxt(k,122)*y(k,89)
- mat(k,580) = -rxt(k,139)*y(k,89)
- mat(k,746) = -rxt(k,144)*y(k,89)
- mat(k,637) = -rxt(k,149)*y(k,89)
- mat(k,778) = -(rxt(k,159) + rxt(k,160)) * y(k,89)
- mat(k,608) = -rxt(k,166)*y(k,89)
- mat(k,800) = -rxt(k,192)*y(k,89)
- mat(k,919) = -rxt(k,198)*y(k,89)
- mat(k,415) = -rxt(k,238)*y(k,89)
+ mat(k,442) = -(rxt(k,113) + rxt(k,114) + rxt(k,115)) * y(k,90)
+ mat(k,679) = -rxt(k,117)*y(k,90)
+ mat(k,530) = -rxt(k,118)*y(k,90)
+ mat(k,849) = -rxt(k,122)*y(k,90)
+ mat(k,580) = -rxt(k,139)*y(k,90)
+ mat(k,746) = -rxt(k,144)*y(k,90)
+ mat(k,637) = -rxt(k,149)*y(k,90)
+ mat(k,778) = -(rxt(k,159) + rxt(k,160)) * y(k,90)
+ mat(k,608) = -rxt(k,166)*y(k,90)
+ mat(k,800) = -rxt(k,192)*y(k,90)
+ mat(k,919) = -rxt(k,198)*y(k,90)
+ mat(k,415) = -rxt(k,238)*y(k,90)
mat(k,800) = mat(k,800) + rxt(k,191)*y(k,17)
- mat(k,919) = mat(k,919) + rxt(k,203)*y(k,98)
+ mat(k,919) = mat(k,919) + rxt(k,203)*y(k,99)
mat(k,478) = rxt(k,191)*y(k,3) + rxt(k,155)*y(k,25) + rxt(k,235)*y(k,63) &
+ rxt(k,236)*y(k,69)
- mat(k,213) = rxt(k,220)*y(k,25) + rxt(k,221)*y(k,98)
- mat(k,151) = rxt(k,223)*y(k,25) + rxt(k,224)*y(k,98)
+ mat(k,213) = rxt(k,220)*y(k,25) + rxt(k,221)*y(k,99)
+ mat(k,151) = rxt(k,223)*y(k,25) + rxt(k,224)*y(k,99)
mat(k,415) = mat(k,415) + rxt(k,162)*y(k,28) + rxt(k,239)*y(k,61)
- mat(k,399) = rxt(k,243)*y(k,94)
+ mat(k,399) = rxt(k,243)*y(k,95)
mat(k,778) = mat(k,778) + rxt(k,155)*y(k,17) + rxt(k,220)*y(k,18) &
+ rxt(k,223)*y(k,20) + rxt(k,158)*y(k,43)
- mat(k,608) = mat(k,608) + rxt(k,162)*y(k,21) + rxt(k,173)*y(k,98)
- mat(k,286) = rxt(k,245)*y(k,98)
- mat(k,130) = .500_r8*rxt(k,261)*y(k,98)
+ mat(k,608) = mat(k,608) + rxt(k,162)*y(k,21) + rxt(k,173)*y(k,99)
+ mat(k,286) = rxt(k,245)*y(k,99)
+ mat(k,130) = .500_r8*rxt(k,261)*y(k,99)
mat(k,442) = mat(k,442) + rxt(k,116)*y(k,70)
- mat(k,230) = rxt(k,158)*y(k,25) + rxt(k,112)*y(k,69) + rxt(k,121)*y(k,98)
+ mat(k,230) = rxt(k,158)*y(k,25) + rxt(k,112)*y(k,69) + rxt(k,121)*y(k,99)
mat(k,746) = mat(k,746) + rxt(k,239)*y(k,21)
- mat(k,580) = mat(k,580) + rxt(k,235)*y(k,17) + rxt(k,142)*y(k,98)
+ mat(k,580) = mat(k,580) + rxt(k,235)*y(k,17) + rxt(k,142)*y(k,99)
mat(k,679) = mat(k,679) + rxt(k,236)*y(k,17) + rxt(k,112)*y(k,43)
mat(k,510) = rxt(k,116)*y(k,40)
- mat(k,530) = mat(k,530) + rxt(k,124)*y(k,98)
- mat(k,302) = rxt(k,251)*y(k,98)
+ mat(k,530) = mat(k,530) + rxt(k,124)*y(k,99)
+ mat(k,302) = rxt(k,251)*y(k,99)
mat(k,721) = rxt(k,243)*y(k,23)
mat(k,849) = mat(k,849) + rxt(k,203)*y(k,5) + rxt(k,221)*y(k,18) + rxt(k,224) &
*y(k,20) + rxt(k,173)*y(k,28) + rxt(k,245)*y(k,31) &
+ .500_r8*rxt(k,261)*y(k,35) + rxt(k,121)*y(k,43) + rxt(k,142) &
- *y(k,63) + rxt(k,124)*y(k,71) + rxt(k,251)*y(k,79)
- mat(k,334) = -(rxt(k,129)*y(k,69) + rxt(k,130)*y(k,70) + rxt(k,301)*y(k,99))
- mat(k,669) = -rxt(k,129)*y(k,90)
- mat(k,502) = -rxt(k,130)*y(k,90)
- mat(k,375) = -rxt(k,301)*y(k,90)
- mat(k,669) = mat(k,669) + rxt(k,291)*y(k,91)
- mat(k,324) = .900_r8*rxt(k,289)*y(k,91) + .800_r8*rxt(k,287)*y(k,92)
- mat(k,222) = rxt(k,291)*y(k,69) + .900_r8*rxt(k,289)*y(k,88)
- mat(k,244) = .800_r8*rxt(k,287)*y(k,88)
- mat(k,219) = -(rxt(k,289)*y(k,88) + rxt(k,290)*y(k,70) + (rxt(k,291) &
+ *y(k,63) + rxt(k,124)*y(k,71) + rxt(k,251)*y(k,80)
+ mat(k,334) = -(rxt(k,129)*y(k,69) + rxt(k,130)*y(k,70) + rxt(k,301)*y(k,100))
+ mat(k,669) = -rxt(k,129)*y(k,91)
+ mat(k,502) = -rxt(k,130)*y(k,91)
+ mat(k,375) = -rxt(k,301)*y(k,91)
+ mat(k,669) = mat(k,669) + rxt(k,291)*y(k,92)
+ mat(k,324) = .900_r8*rxt(k,289)*y(k,92) + .800_r8*rxt(k,287)*y(k,93)
+ mat(k,222) = rxt(k,291)*y(k,69) + .900_r8*rxt(k,289)*y(k,89)
+ mat(k,244) = .800_r8*rxt(k,287)*y(k,89)
+ mat(k,219) = -(rxt(k,289)*y(k,89) + rxt(k,290)*y(k,70) + (rxt(k,291) &
+ rxt(k,292)) * y(k,69))
- mat(k,320) = -rxt(k,289)*y(k,91)
- mat(k,496) = -rxt(k,290)*y(k,91)
- mat(k,657) = -(rxt(k,291) + rxt(k,292)) * y(k,91)
- mat(k,242) = -(rxt(k,287)*y(k,88))
- mat(k,321) = -rxt(k,287)*y(k,92)
- mat(k,343) = rxt(k,296)*y(k,97)
- mat(k,735) = rxt(k,298)*y(k,97)
- mat(k,660) = rxt(k,291)*y(k,91)
- mat(k,498) = rxt(k,295)*y(k,93)
+ mat(k,320) = -rxt(k,289)*y(k,92)
+ mat(k,496) = -rxt(k,290)*y(k,92)
+ mat(k,657) = -(rxt(k,291) + rxt(k,292)) * y(k,92)
+ mat(k,242) = -(rxt(k,287)*y(k,89))
+ mat(k,321) = -rxt(k,287)*y(k,93)
+ mat(k,343) = rxt(k,296)*y(k,98)
+ mat(k,735) = rxt(k,298)*y(k,98)
+ mat(k,660) = rxt(k,291)*y(k,92)
+ mat(k,498) = rxt(k,295)*y(k,94)
mat(k,220) = rxt(k,291)*y(k,69)
mat(k,272) = rxt(k,295)*y(k,70)
mat(k,357) = rxt(k,296)*y(k,55) + rxt(k,298)*y(k,61)
mat(k,273) = -(rxt(k,293)*y(k,69) + (rxt(k,294) + rxt(k,295)) * y(k,70))
- mat(k,664) = -rxt(k,293)*y(k,93)
- mat(k,499) = -(rxt(k,294) + rxt(k,295)) * y(k,93)
- mat(k,332) = rxt(k,301)*y(k,99)
- mat(k,372) = rxt(k,301)*y(k,90)
- mat(k,726) = -(rxt(k,94)*y(k,41) + rxt(k,95)*y(k,102) + (rxt(k,97) + rxt(k,98) &
+ mat(k,664) = -rxt(k,293)*y(k,94)
+ mat(k,499) = -(rxt(k,294) + rxt(k,295)) * y(k,94)
+ mat(k,332) = rxt(k,301)*y(k,100)
+ mat(k,372) = rxt(k,301)*y(k,91)
+ mat(k,726) = -(rxt(k,94)*y(k,41) + rxt(k,95)*y(k,103) + (rxt(k,97) + rxt(k,98) &
) * y(k,70) + rxt(k,99)*y(k,71) + (rxt(k,147) + rxt(k,148) &
) * y(k,56) + rxt(k,180)*y(k,8) + rxt(k,181)*y(k,9) + rxt(k,182) &
*y(k,11) + rxt(k,183)*y(k,12) + rxt(k,184)*y(k,13) + rxt(k,185) &
@@ -810,66 +810,66 @@ subroutine nlnmat04( avec_len, mat, y, rxt )
*y(k,33) + rxt(k,217)*y(k,34) + rxt(k,230)*y(k,16) + rxt(k,231) &
*y(k,18) + rxt(k,232)*y(k,46) + rxt(k,233)*y(k,47) + rxt(k,234) &
*y(k,48) + (rxt(k,242) + rxt(k,243) + rxt(k,244)) * y(k,23))
- mat(k,877) = -rxt(k,94)*y(k,94)
- mat(k,951) = -rxt(k,95)*y(k,94)
- mat(k,514) = -(rxt(k,97) + rxt(k,98)) * y(k,94)
- mat(k,535) = -rxt(k,99)*y(k,94)
- mat(k,105) = -(rxt(k,147) + rxt(k,148)) * y(k,94)
- mat(k,30) = -rxt(k,180)*y(k,94)
- mat(k,57) = -rxt(k,181)*y(k,94)
- mat(k,38) = -rxt(k,182)*y(k,94)
- mat(k,68) = -rxt(k,183)*y(k,94)
- mat(k,42) = -rxt(k,184)*y(k,94)
- mat(k,73) = -rxt(k,185)*y(k,94)
- mat(k,46) = -rxt(k,186)*y(k,94)
- mat(k,461) = -(rxt(k,187) + rxt(k,188)) * y(k,94)
- mat(k,63) = -rxt(k,207)*y(k,94)
- mat(k,163) = -rxt(k,208)*y(k,94)
- mat(k,34) = -rxt(k,209)*y(k,94)
- mat(k,259) = -(rxt(k,210) + rxt(k,211)) * y(k,94)
- mat(k,84) = -rxt(k,216)*y(k,94)
- mat(k,92) = -rxt(k,217)*y(k,94)
- mat(k,176) = -rxt(k,230)*y(k,94)
- mat(k,214) = -rxt(k,231)*y(k,94)
- mat(k,87) = -rxt(k,232)*y(k,94)
- mat(k,97) = -rxt(k,233)*y(k,94)
- mat(k,115) = -rxt(k,234)*y(k,94)
- mat(k,403) = -(rxt(k,242) + rxt(k,243) + rxt(k,244)) * y(k,94)
- mat(k,514) = mat(k,514) + rxt(k,130)*y(k,90)
- mat(k,330) = .850_r8*rxt(k,288)*y(k,97)
+ mat(k,877) = -rxt(k,94)*y(k,95)
+ mat(k,951) = -rxt(k,95)*y(k,95)
+ mat(k,514) = -(rxt(k,97) + rxt(k,98)) * y(k,95)
+ mat(k,535) = -rxt(k,99)*y(k,95)
+ mat(k,105) = -(rxt(k,147) + rxt(k,148)) * y(k,95)
+ mat(k,30) = -rxt(k,180)*y(k,95)
+ mat(k,57) = -rxt(k,181)*y(k,95)
+ mat(k,38) = -rxt(k,182)*y(k,95)
+ mat(k,68) = -rxt(k,183)*y(k,95)
+ mat(k,42) = -rxt(k,184)*y(k,95)
+ mat(k,73) = -rxt(k,185)*y(k,95)
+ mat(k,46) = -rxt(k,186)*y(k,95)
+ mat(k,461) = -(rxt(k,187) + rxt(k,188)) * y(k,95)
+ mat(k,63) = -rxt(k,207)*y(k,95)
+ mat(k,163) = -rxt(k,208)*y(k,95)
+ mat(k,34) = -rxt(k,209)*y(k,95)
+ mat(k,259) = -(rxt(k,210) + rxt(k,211)) * y(k,95)
+ mat(k,84) = -rxt(k,216)*y(k,95)
+ mat(k,92) = -rxt(k,217)*y(k,95)
+ mat(k,176) = -rxt(k,230)*y(k,95)
+ mat(k,214) = -rxt(k,231)*y(k,95)
+ mat(k,87) = -rxt(k,232)*y(k,95)
+ mat(k,97) = -rxt(k,233)*y(k,95)
+ mat(k,115) = -rxt(k,234)*y(k,95)
+ mat(k,403) = -(rxt(k,242) + rxt(k,243) + rxt(k,244)) * y(k,95)
+ mat(k,514) = mat(k,514) + rxt(k,130)*y(k,91)
+ mat(k,330) = .850_r8*rxt(k,288)*y(k,98)
mat(k,340) = rxt(k,130)*y(k,70)
- mat(k,367) = .850_r8*rxt(k,288)*y(k,88)
+ mat(k,367) = .850_r8*rxt(k,288)*y(k,89)
mat(k,77) = -(rxt(k,101)*y(k,69) + rxt(k,102)*y(k,70))
- mat(k,651) = -rxt(k,101)*y(k,95)
- mat(k,492) = -rxt(k,102)*y(k,95)
- mat(k,194) = rxt(k,103)*y(k,96)
- mat(k,651) = mat(k,651) + rxt(k,105)*y(k,96)
- mat(k,492) = mat(k,492) + rxt(k,106)*y(k,96)
- mat(k,522) = rxt(k,107)*y(k,96)
+ mat(k,651) = -rxt(k,101)*y(k,96)
+ mat(k,492) = -rxt(k,102)*y(k,96)
+ mat(k,194) = rxt(k,103)*y(k,97)
+ mat(k,651) = mat(k,651) + rxt(k,105)*y(k,97)
+ mat(k,492) = mat(k,492) + rxt(k,106)*y(k,97)
+ mat(k,522) = rxt(k,107)*y(k,97)
mat(k,79) = rxt(k,103)*y(k,32) + rxt(k,105)*y(k,69) + rxt(k,106)*y(k,70) &
+ rxt(k,107)*y(k,71)
mat(k,80) = -(rxt(k,103)*y(k,32) + rxt(k,105)*y(k,69) + rxt(k,106)*y(k,70) &
+ rxt(k,107)*y(k,71))
- mat(k,195) = -rxt(k,103)*y(k,96)
- mat(k,652) = -rxt(k,105)*y(k,96)
- mat(k,493) = -rxt(k,106)*y(k,96)
- mat(k,523) = -rxt(k,107)*y(k,96)
- mat(k,493) = mat(k,493) + rxt(k,97)*y(k,94)
+ mat(k,195) = -rxt(k,103)*y(k,97)
+ mat(k,652) = -rxt(k,105)*y(k,97)
+ mat(k,493) = -rxt(k,106)*y(k,97)
+ mat(k,523) = -rxt(k,107)*y(k,97)
+ mat(k,493) = mat(k,493) + rxt(k,97)*y(k,95)
mat(k,702) = rxt(k,97)*y(k,70)
- mat(k,361) = -(rxt(k,288)*y(k,88) + rxt(k,296)*y(k,55) + rxt(k,298)*y(k,61))
- mat(k,326) = -rxt(k,288)*y(k,97)
- mat(k,348) = -rxt(k,296)*y(k,97)
- mat(k,739) = -rxt(k,298)*y(k,97)
- mat(k,198) = rxt(k,299)*y(k,99)
- mat(k,504) = rxt(k,290)*y(k,91) + rxt(k,294)*y(k,93) + rxt(k,302)*y(k,99) &
- + rxt(k,306)*y(k,100)
+ mat(k,361) = -(rxt(k,288)*y(k,89) + rxt(k,296)*y(k,55) + rxt(k,298)*y(k,61))
+ mat(k,326) = -rxt(k,288)*y(k,98)
+ mat(k,348) = -rxt(k,296)*y(k,98)
+ mat(k,739) = -rxt(k,298)*y(k,98)
+ mat(k,198) = rxt(k,299)*y(k,100)
+ mat(k,504) = rxt(k,290)*y(k,92) + rxt(k,294)*y(k,94) + rxt(k,302)*y(k,100) &
+ + rxt(k,306)*y(k,101)
mat(k,224) = rxt(k,290)*y(k,70)
mat(k,277) = rxt(k,294)*y(k,70)
mat(k,377) = rxt(k,299)*y(k,32) + rxt(k,302)*y(k,70)
mat(k,190) = rxt(k,306)*y(k,70)
- mat(k,858) = -(rxt(k,120)*y(k,41) + rxt(k,121)*y(k,43) + rxt(k,122)*y(k,89) &
+ mat(k,858) = -(rxt(k,120)*y(k,41) + rxt(k,121)*y(k,43) + rxt(k,122)*y(k,90) &
+ rxt(k,123)*y(k,69) + rxt(k,124)*y(k,71) + (4._r8*rxt(k,125) &
- + 4._r8*rxt(k,126)) * y(k,98) + rxt(k,128)*y(k,52) + rxt(k,142) &
+ + 4._r8*rxt(k,126)) * y(k,99) + rxt(k,128)*y(k,52) + rxt(k,142) &
*y(k,63) + rxt(k,143)*y(k,55) + rxt(k,151)*y(k,62) + rxt(k,152) &
*y(k,51) + rxt(k,171)*y(k,29) + (rxt(k,173) + rxt(k,174) &
) * y(k,28) + rxt(k,176)*y(k,49) + rxt(k,179)*y(k,54) + rxt(k,203) &
@@ -878,66 +878,66 @@ subroutine nlnmat04( avec_len, mat, y, rxt )
*y(k,24) + rxt(k,227)*y(k,46) + rxt(k,228)*y(k,47) + rxt(k,229) &
*y(k,48) + rxt(k,237)*y(k,17) + rxt(k,240)*y(k,22) + rxt(k,241) &
*y(k,23) + rxt(k,245)*y(k,31) + (rxt(k,247) + rxt(k,261) &
- ) * y(k,35) + rxt(k,249)*y(k,73) + rxt(k,251)*y(k,79) + rxt(k,255) &
- *y(k,76) + rxt(k,260)*y(k,78))
- mat(k,881) = -rxt(k,120)*y(k,98)
- mat(k,233) = -rxt(k,121)*y(k,98)
- mat(k,564) = -rxt(k,122)*y(k,98)
- mat(k,688) = -rxt(k,123)*y(k,98)
- mat(k,539) = -rxt(k,124)*y(k,98)
- mat(k,172) = -rxt(k,128)*y(k,98)
- mat(k,589) = -rxt(k,142)*y(k,98)
- mat(k,356) = -rxt(k,143)*y(k,98)
- mat(k,646) = -rxt(k,151)*y(k,98)
- mat(k,904) = -rxt(k,152)*y(k,98)
- mat(k,315) = -rxt(k,171)*y(k,98)
- mat(k,617) = -(rxt(k,173) + rxt(k,174)) * y(k,98)
- mat(k,464) = -rxt(k,176)*y(k,98)
- mat(k,270) = -rxt(k,179)*y(k,98)
- mat(k,928) = -rxt(k,203)*y(k,98)
- mat(k,261) = -rxt(k,205)*y(k,98)
- mat(k,179) = -rxt(k,219)*y(k,98)
- mat(k,217) = -rxt(k,221)*y(k,98)
- mat(k,50) = -rxt(k,222)*y(k,98)
- mat(k,153) = -rxt(k,224)*y(k,98)
- mat(k,166) = -rxt(k,226)*y(k,98)
- mat(k,89) = -rxt(k,227)*y(k,98)
- mat(k,99) = -rxt(k,228)*y(k,98)
- mat(k,117) = -rxt(k,229)*y(k,98)
- mat(k,487) = -rxt(k,237)*y(k,98)
- mat(k,159) = -rxt(k,240)*y(k,98)
- mat(k,406) = -rxt(k,241)*y(k,98)
- mat(k,288) = -rxt(k,245)*y(k,98)
- mat(k,132) = -(rxt(k,247) + rxt(k,261)) * y(k,98)
- mat(k,146) = -rxt(k,249)*y(k,98)
- mat(k,304) = -rxt(k,251)*y(k,98)
- mat(k,241) = -rxt(k,255)*y(k,98)
- mat(k,436) = -rxt(k,260)*y(k,98)
+ ) * y(k,35) + rxt(k,249)*y(k,74) + rxt(k,251)*y(k,80) + rxt(k,255) &
+ *y(k,77) + rxt(k,260)*y(k,79))
+ mat(k,881) = -rxt(k,120)*y(k,99)
+ mat(k,233) = -rxt(k,121)*y(k,99)
+ mat(k,564) = -rxt(k,122)*y(k,99)
+ mat(k,688) = -rxt(k,123)*y(k,99)
+ mat(k,539) = -rxt(k,124)*y(k,99)
+ mat(k,172) = -rxt(k,128)*y(k,99)
+ mat(k,589) = -rxt(k,142)*y(k,99)
+ mat(k,356) = -rxt(k,143)*y(k,99)
+ mat(k,646) = -rxt(k,151)*y(k,99)
+ mat(k,904) = -rxt(k,152)*y(k,99)
+ mat(k,315) = -rxt(k,171)*y(k,99)
+ mat(k,617) = -(rxt(k,173) + rxt(k,174)) * y(k,99)
+ mat(k,464) = -rxt(k,176)*y(k,99)
+ mat(k,270) = -rxt(k,179)*y(k,99)
+ mat(k,928) = -rxt(k,203)*y(k,99)
+ mat(k,261) = -rxt(k,205)*y(k,99)
+ mat(k,179) = -rxt(k,219)*y(k,99)
+ mat(k,217) = -rxt(k,221)*y(k,99)
+ mat(k,50) = -rxt(k,222)*y(k,99)
+ mat(k,153) = -rxt(k,224)*y(k,99)
+ mat(k,166) = -rxt(k,226)*y(k,99)
+ mat(k,89) = -rxt(k,227)*y(k,99)
+ mat(k,99) = -rxt(k,228)*y(k,99)
+ mat(k,117) = -rxt(k,229)*y(k,99)
+ mat(k,487) = -rxt(k,237)*y(k,99)
+ mat(k,159) = -rxt(k,240)*y(k,99)
+ mat(k,406) = -rxt(k,241)*y(k,99)
+ mat(k,288) = -rxt(k,245)*y(k,99)
+ mat(k,132) = -(rxt(k,247) + rxt(k,261)) * y(k,99)
+ mat(k,146) = -rxt(k,249)*y(k,99)
+ mat(k,304) = -rxt(k,251)*y(k,99)
+ mat(k,241) = -rxt(k,255)*y(k,99)
+ mat(k,436) = -rxt(k,260)*y(k,99)
mat(k,487) = mat(k,487) + rxt(k,236)*y(k,69)
- mat(k,159) = mat(k,159) + .300_r8*rxt(k,240)*y(k,98)
- mat(k,406) = mat(k,406) + rxt(k,242)*y(k,94)
- mat(k,787) = rxt(k,160)*y(k,89)
- mat(k,295) = rxt(k,214)*y(k,102)
- mat(k,444) = rxt(k,119)*y(k,71) + 2.000_r8*rxt(k,114)*y(k,89)
- mat(k,881) = mat(k,881) + rxt(k,111)*y(k,69) + rxt(k,94)*y(k,94)
+ mat(k,159) = mat(k,159) + .300_r8*rxt(k,240)*y(k,99)
+ mat(k,406) = mat(k,406) + rxt(k,242)*y(k,95)
+ mat(k,787) = rxt(k,160)*y(k,90)
+ mat(k,295) = rxt(k,214)*y(k,103)
+ mat(k,444) = rxt(k,119)*y(k,71) + 2.000_r8*rxt(k,114)*y(k,90)
+ mat(k,881) = mat(k,881) + rxt(k,111)*y(k,69) + rxt(k,94)*y(k,95)
mat(k,233) = mat(k,233) + rxt(k,112)*y(k,69)
- mat(k,261) = mat(k,261) + rxt(k,204)*y(k,69) + rxt(k,210)*y(k,94)
- mat(k,464) = mat(k,464) + rxt(k,175)*y(k,69) + rxt(k,187)*y(k,94)
+ mat(k,261) = mat(k,261) + rxt(k,204)*y(k,69) + rxt(k,210)*y(k,95)
+ mat(k,464) = mat(k,464) + rxt(k,175)*y(k,69) + rxt(k,187)*y(k,95)
mat(k,253) = rxt(k,206)*y(k,69)
mat(k,270) = mat(k,270) + rxt(k,178)*y(k,69)
- mat(k,755) = rxt(k,144)*y(k,89)
- mat(k,589) = mat(k,589) + rxt(k,139)*y(k,89)
+ mat(k,755) = rxt(k,144)*y(k,90)
+ mat(k,589) = mat(k,589) + rxt(k,139)*y(k,90)
mat(k,688) = mat(k,688) + rxt(k,236)*y(k,17) + rxt(k,111)*y(k,41) &
+ rxt(k,112)*y(k,43) + rxt(k,204)*y(k,45) + rxt(k,175)*y(k,49) &
- + rxt(k,206)*y(k,53) + rxt(k,178)*y(k,54) + rxt(k,117)*y(k,89)
- mat(k,539) = mat(k,539) + rxt(k,119)*y(k,40) + rxt(k,118)*y(k,89)
+ + rxt(k,206)*y(k,53) + rxt(k,178)*y(k,54) + rxt(k,117)*y(k,90)
+ mat(k,539) = mat(k,539) + rxt(k,119)*y(k,40) + rxt(k,118)*y(k,90)
mat(k,564) = mat(k,564) + rxt(k,160)*y(k,25) + 2.000_r8*rxt(k,114)*y(k,40) &
+ rxt(k,144)*y(k,61) + rxt(k,139)*y(k,63) + rxt(k,117)*y(k,69) &
+ rxt(k,118)*y(k,71)
mat(k,730) = rxt(k,242)*y(k,23) + rxt(k,94)*y(k,41) + rxt(k,210)*y(k,45) &
- + rxt(k,187)*y(k,49) + 2.000_r8*rxt(k,95)*y(k,102)
+ + rxt(k,187)*y(k,49) + 2.000_r8*rxt(k,95)*y(k,103)
mat(k,858) = mat(k,858) + .300_r8*rxt(k,240)*y(k,22)
- mat(k,955) = rxt(k,214)*y(k,39) + 2.000_r8*rxt(k,95)*y(k,94)
+ mat(k,955) = rxt(k,214)*y(k,39) + 2.000_r8*rxt(k,95)*y(k,95)
end do
end subroutine nlnmat04
subroutine nlnmat05( avec_len, mat, y, rxt )
@@ -958,55 +958,55 @@ subroutine nlnmat05( avec_len, mat, y, rxt )
! ... complete matrix entries implicit species
!----------------------------------------------
do k = 1,avec_len
- mat(k,378) = -(rxt(k,299)*y(k,32) + rxt(k,301)*y(k,90) + rxt(k,302)*y(k,70))
- mat(k,199) = -rxt(k,299)*y(k,99)
- mat(k,337) = -rxt(k,301)*y(k,99)
- mat(k,505) = -rxt(k,302)*y(k,99)
- mat(k,672) = rxt(k,292)*y(k,91) + rxt(k,293)*y(k,93) + rxt(k,305)*y(k,100) &
- + rxt(k,311)*y(k,101)
- mat(k,327) = rxt(k,303)*y(k,100) + rxt(k,308)*y(k,101)
+ mat(k,378) = -(rxt(k,299)*y(k,32) + rxt(k,301)*y(k,91) + rxt(k,302)*y(k,70))
+ mat(k,199) = -rxt(k,299)*y(k,100)
+ mat(k,337) = -rxt(k,301)*y(k,100)
+ mat(k,505) = -rxt(k,302)*y(k,100)
+ mat(k,672) = rxt(k,292)*y(k,92) + rxt(k,293)*y(k,94) + rxt(k,305)*y(k,101) &
+ + rxt(k,311)*y(k,102)
+ mat(k,327) = rxt(k,303)*y(k,101) + rxt(k,308)*y(k,102)
mat(k,225) = rxt(k,292)*y(k,69)
mat(k,278) = rxt(k,293)*y(k,69)
- mat(k,191) = rxt(k,305)*y(k,69) + rxt(k,303)*y(k,88)
- mat(k,185) = rxt(k,311)*y(k,69) + rxt(k,308)*y(k,88)
- mat(k,188) = -(rxt(k,303)*y(k,88) + rxt(k,305)*y(k,69) + rxt(k,306)*y(k,70))
- mat(k,319) = -rxt(k,303)*y(k,100)
- mat(k,655) = -rxt(k,305)*y(k,100)
- mat(k,495) = -rxt(k,306)*y(k,100)
- mat(k,319) = mat(k,319) + rxt(k,307)*y(k,101)
- mat(k,182) = rxt(k,307)*y(k,88)
- mat(k,181) = -((rxt(k,307) + rxt(k,308)) * y(k,88) + rxt(k,311)*y(k,69))
- mat(k,318) = -(rxt(k,307) + rxt(k,308)) * y(k,101)
- mat(k,654) = -rxt(k,311)*y(k,101)
- mat(k,959) = -(rxt(k,95)*y(k,94) + rxt(k,214)*y(k,39) + rxt(k,262)*y(k,80))
- mat(k,734) = -rxt(k,95)*y(k,102)
- mat(k,298) = -rxt(k,214)*y(k,102)
- mat(k,111) = -rxt(k,262)*y(k,102)
- mat(k,180) = rxt(k,219)*y(k,98)
- mat(k,491) = rxt(k,237)*y(k,98)
- mat(k,218) = rxt(k,221)*y(k,98)
- mat(k,51) = rxt(k,222)*y(k,98)
- mat(k,154) = rxt(k,224)*y(k,98)
- mat(k,160) = rxt(k,240)*y(k,98)
- mat(k,409) = rxt(k,241)*y(k,98)
- mat(k,446) = rxt(k,115)*y(k,89)
- mat(k,885) = rxt(k,120)*y(k,98)
- mat(k,234) = rxt(k,121)*y(k,98)
- mat(k,263) = rxt(k,205)*y(k,98)
- mat(k,118) = rxt(k,229)*y(k,98)
+ mat(k,191) = rxt(k,305)*y(k,69) + rxt(k,303)*y(k,89)
+ mat(k,185) = rxt(k,311)*y(k,69) + rxt(k,308)*y(k,89)
+ mat(k,188) = -(rxt(k,303)*y(k,89) + rxt(k,305)*y(k,69) + rxt(k,306)*y(k,70))
+ mat(k,319) = -rxt(k,303)*y(k,101)
+ mat(k,655) = -rxt(k,305)*y(k,101)
+ mat(k,495) = -rxt(k,306)*y(k,101)
+ mat(k,319) = mat(k,319) + rxt(k,307)*y(k,102)
+ mat(k,182) = rxt(k,307)*y(k,89)
+ mat(k,181) = -((rxt(k,307) + rxt(k,308)) * y(k,89) + rxt(k,311)*y(k,69))
+ mat(k,318) = -(rxt(k,307) + rxt(k,308)) * y(k,102)
+ mat(k,654) = -rxt(k,311)*y(k,102)
+ mat(k,959) = -(rxt(k,95)*y(k,95) + rxt(k,214)*y(k,39) + rxt(k,262)*y(k,81))
+ mat(k,734) = -rxt(k,95)*y(k,103)
+ mat(k,298) = -rxt(k,214)*y(k,103)
+ mat(k,111) = -rxt(k,262)*y(k,103)
+ mat(k,180) = rxt(k,219)*y(k,99)
+ mat(k,491) = rxt(k,237)*y(k,99)
+ mat(k,218) = rxt(k,221)*y(k,99)
+ mat(k,51) = rxt(k,222)*y(k,99)
+ mat(k,154) = rxt(k,224)*y(k,99)
+ mat(k,160) = rxt(k,240)*y(k,99)
+ mat(k,409) = rxt(k,241)*y(k,99)
+ mat(k,446) = rxt(k,115)*y(k,90)
+ mat(k,885) = rxt(k,120)*y(k,99)
+ mat(k,234) = rxt(k,121)*y(k,99)
+ mat(k,263) = rxt(k,205)*y(k,99)
+ mat(k,118) = rxt(k,229)*y(k,99)
mat(k,468) = (rxt(k,275)+rxt(k,280))*y(k,53) + (rxt(k,268)+rxt(k,274) &
- +rxt(k,279))*y(k,54) + rxt(k,176)*y(k,98)
- mat(k,908) = rxt(k,152)*y(k,98)
- mat(k,173) = rxt(k,128)*y(k,98)
+ +rxt(k,279))*y(k,54) + rxt(k,176)*y(k,99)
+ mat(k,908) = rxt(k,152)*y(k,99)
+ mat(k,173) = rxt(k,128)*y(k,99)
mat(k,255) = (rxt(k,275)+rxt(k,280))*y(k,49)
- mat(k,271) = (rxt(k,268)+rxt(k,274)+rxt(k,279))*y(k,49) + rxt(k,179)*y(k,98)
- mat(k,568) = rxt(k,115)*y(k,40) + rxt(k,122)*y(k,98)
+ mat(k,271) = (rxt(k,268)+rxt(k,274)+rxt(k,279))*y(k,49) + rxt(k,179)*y(k,99)
+ mat(k,568) = rxt(k,115)*y(k,40) + rxt(k,122)*y(k,99)
mat(k,862) = rxt(k,219)*y(k,16) + rxt(k,237)*y(k,17) + rxt(k,221)*y(k,18) &
+ rxt(k,222)*y(k,19) + rxt(k,224)*y(k,20) + rxt(k,240)*y(k,22) &
+ rxt(k,241)*y(k,23) + rxt(k,120)*y(k,41) + rxt(k,121)*y(k,43) &
+ rxt(k,205)*y(k,45) + rxt(k,229)*y(k,48) + rxt(k,176)*y(k,49) &
+ rxt(k,152)*y(k,51) + rxt(k,128)*y(k,52) + rxt(k,179)*y(k,54) &
- + rxt(k,122)*y(k,89) + 2.000_r8*rxt(k,125)*y(k,98)
+ + rxt(k,122)*y(k,90) + 2.000_r8*rxt(k,125)*y(k,99)
end do
end subroutine nlnmat05
subroutine nlnmat_finit( avec_len, mat, lmat, dti )
diff --git a/src/chemistry/pp_waccm_ma_mam5/mo_prod_loss.F90 b/src/chemistry/pp_waccm_ma_mam5/mo_prod_loss.F90
index 10c37c4a5d..4b90d14e1f 100644
--- a/src/chemistry/pp_waccm_ma_mam5/mo_prod_loss.F90
+++ b/src/chemistry/pp_waccm_ma_mam5/mo_prod_loss.F90
@@ -19,6 +19,17 @@ subroutine exp_prod_loss( ofl, ofu, prod, loss, y, &
real(r8), intent(in) :: y(chnkpnts,gas_pcnst)
real(r8), intent(in) :: rxt(chnkpnts,rxntot)
real(r8), intent(in) :: het_rates(chnkpnts,gas_pcnst)
+!--------------------------------------------------------------------
+! ... local variables
+!--------------------------------------------------------------------
+ integer :: k
+!--------------------------------------------------------------------
+! ... loss and production for Explicit method
+!--------------------------------------------------------------------
+ do k = ofl,ofu
+ loss(k,1) = ( + het_rates(k,72))* y(k,72)
+ prod(k,1) = 0._r8
+ end do
end subroutine exp_prod_loss
subroutine imp_prod_loss( avec_len, prod, loss, y, &
rxt, het_rates )
@@ -46,16 +57,16 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
prod(k,1) = 0._r8
loss(k,2) = ( + het_rates(k,2))* y(k,2)
prod(k,2) = 0._r8
- loss(k,97) = (rxt(k,191)* y(k,17) +rxt(k,193)* y(k,71) +rxt(k,192)* y(k,89) &
+ loss(k,97) = (rxt(k,191)* y(k,17) +rxt(k,193)* y(k,71) +rxt(k,192)* y(k,90) &
+ het_rates(k,3))* y(k,3)
prod(k,97) = (rxt(k,27) +2.000_r8*rxt(k,194)*y(k,5) +rxt(k,195)*y(k,28) + &
rxt(k,196)*y(k,28) +rxt(k,199)*y(k,61) +rxt(k,202)*y(k,69) + &
- rxt(k,203)*y(k,98) +rxt(k,253)*y(k,78))*y(k,5) + (rxt(k,181)*y(k,9) + &
+ rxt(k,203)*y(k,99) +rxt(k,253)*y(k,79))*y(k,5) + (rxt(k,181)*y(k,9) + &
rxt(k,207)*y(k,10) +3.000_r8*rxt(k,208)*y(k,24) + &
2.000_r8*rxt(k,209)*y(k,42) +rxt(k,210)*y(k,45) + &
- 2.000_r8*rxt(k,230)*y(k,16) +rxt(k,231)*y(k,18))*y(k,94) &
+ 2.000_r8*rxt(k,230)*y(k,16) +rxt(k,231)*y(k,18))*y(k,95) &
+ (rxt(k,205)*y(k,45) +2.000_r8*rxt(k,219)*y(k,16) + &
- rxt(k,221)*y(k,18) +3.000_r8*rxt(k,226)*y(k,24))*y(k,98) &
+ rxt(k,221)*y(k,18) +3.000_r8*rxt(k,226)*y(k,24))*y(k,99) &
+ (2.000_r8*rxt(k,218)*y(k,16) +rxt(k,220)*y(k,18) + &
3.000_r8*rxt(k,225)*y(k,24))*y(k,25) + (rxt(k,51) + &
rxt(k,204)*y(k,69))*y(k,45) +rxt(k,26)*y(k,4) +rxt(k,29)*y(k,6) &
@@ -67,78 +78,78 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
+rxt(k,197)*y(k,28)*y(k,5)
loss(k,101) = (2._r8*rxt(k,194)* y(k,5) + (rxt(k,195) +rxt(k,196) + &
rxt(k,197))* y(k,28) +rxt(k,199)* y(k,61) +rxt(k,200)* y(k,62) &
- +rxt(k,202)* y(k,69) +rxt(k,253)* y(k,78) +rxt(k,198)* y(k,89) &
- +rxt(k,203)* y(k,98) + rxt(k,27) + het_rates(k,5))* y(k,5)
+ +rxt(k,202)* y(k,69) +rxt(k,253)* y(k,79) +rxt(k,198)* y(k,90) &
+ +rxt(k,203)* y(k,99) + rxt(k,27) + het_rates(k,5))* y(k,5)
prod(k,101) = (rxt(k,28) +rxt(k,201)*y(k,69))*y(k,6) +rxt(k,193)*y(k,71) &
- *y(k,3) +rxt(k,211)*y(k,94)*y(k,45) +rxt(k,206)*y(k,69)*y(k,53)
+ *y(k,3) +rxt(k,211)*y(k,95)*y(k,45) +rxt(k,206)*y(k,69)*y(k,53)
loss(k,62) = (rxt(k,201)* y(k,69) + rxt(k,28) + rxt(k,29) + rxt(k,269) &
+ rxt(k,272) + rxt(k,277) + het_rates(k,6))* y(k,6)
prod(k,62) =rxt(k,200)*y(k,62)*y(k,5)
loss(k,3) = ( + het_rates(k,7))* y(k,7)
prod(k,3) = 0._r8
- loss(k,27) = (rxt(k,180)* y(k,94) + rxt(k,30) + het_rates(k,8))* y(k,8)
+ loss(k,27) = (rxt(k,180)* y(k,95) + rxt(k,30) + het_rates(k,8))* y(k,8)
prod(k,27) = 0._r8
- loss(k,34) = (rxt(k,181)* y(k,94) + rxt(k,31) + het_rates(k,9))* y(k,9)
+ loss(k,34) = (rxt(k,181)* y(k,95) + rxt(k,31) + het_rates(k,9))* y(k,9)
prod(k,34) = 0._r8
- loss(k,35) = (rxt(k,207)* y(k,94) + rxt(k,32) + het_rates(k,10))* y(k,10)
+ loss(k,35) = (rxt(k,207)* y(k,95) + rxt(k,32) + het_rates(k,10))* y(k,10)
prod(k,35) = 0._r8
- loss(k,29) = (rxt(k,182)* y(k,94) + rxt(k,33) + het_rates(k,11))* y(k,11)
+ loss(k,29) = (rxt(k,182)* y(k,95) + rxt(k,33) + het_rates(k,11))* y(k,11)
prod(k,29) = 0._r8
- loss(k,36) = (rxt(k,183)* y(k,94) + rxt(k,34) + het_rates(k,12))* y(k,12)
+ loss(k,36) = (rxt(k,183)* y(k,95) + rxt(k,34) + het_rates(k,12))* y(k,12)
prod(k,36) = 0._r8
- loss(k,30) = (rxt(k,184)* y(k,94) + rxt(k,35) + het_rates(k,13))* y(k,13)
+ loss(k,30) = (rxt(k,184)* y(k,95) + rxt(k,35) + het_rates(k,13))* y(k,13)
prod(k,30) = 0._r8
- loss(k,37) = (rxt(k,185)* y(k,94) + rxt(k,36) + het_rates(k,14))* y(k,14)
+ loss(k,37) = (rxt(k,185)* y(k,95) + rxt(k,36) + het_rates(k,14))* y(k,14)
prod(k,37) = 0._r8
- loss(k,31) = (rxt(k,186)* y(k,94) + rxt(k,37) + het_rates(k,15))* y(k,15)
+ loss(k,31) = (rxt(k,186)* y(k,95) + rxt(k,37) + het_rates(k,15))* y(k,15)
prod(k,31) = 0._r8
- loss(k,58) = (rxt(k,218)* y(k,25) +rxt(k,230)* y(k,94) +rxt(k,219)* y(k,98) &
+ loss(k,58) = (rxt(k,218)* y(k,25) +rxt(k,230)* y(k,95) +rxt(k,219)* y(k,99) &
+ rxt(k,38) + het_rates(k,16))* y(k,16)
prod(k,58) = 0._r8
loss(k,86) = (rxt(k,191)* y(k,3) +rxt(k,155)* y(k,25) +rxt(k,235)* y(k,63) &
- +rxt(k,236)* y(k,69) +rxt(k,237)* y(k,98) + rxt(k,20) + rxt(k,21) &
+ +rxt(k,236)* y(k,69) +rxt(k,237)* y(k,99) + rxt(k,20) + rxt(k,21) &
+ het_rates(k,17))* y(k,17)
- prod(k,86) = (.180_r8*rxt(k,24) +rxt(k,243)*y(k,94) +rxt(k,244)*y(k,94)) &
+ prod(k,86) = (.180_r8*rxt(k,24) +rxt(k,243)*y(k,95) +rxt(k,244)*y(k,95)) &
*y(k,23) + (rxt(k,162)*y(k,28) +rxt(k,239)*y(k,61))*y(k,21) &
- + (rxt(k,22) +.300_r8*rxt(k,240)*y(k,98))*y(k,22)
- loss(k,63) = (rxt(k,220)* y(k,25) +rxt(k,231)* y(k,94) +rxt(k,221)* y(k,98) &
+ + (rxt(k,22) +.300_r8*rxt(k,240)*y(k,99))*y(k,22)
+ loss(k,63) = (rxt(k,220)* y(k,25) +rxt(k,231)* y(k,95) +rxt(k,221)* y(k,99) &
+ rxt(k,39) + het_rates(k,18))* y(k,18)
prod(k,63) = 0._r8
- loss(k,32) = (rxt(k,222)* y(k,98) + rxt(k,40) + het_rates(k,19))* y(k,19)
+ loss(k,32) = (rxt(k,222)* y(k,99) + rxt(k,40) + het_rates(k,19))* y(k,19)
prod(k,32) = 0._r8
- loss(k,54) = (rxt(k,223)* y(k,25) +rxt(k,224)* y(k,98) + rxt(k,41) &
+ loss(k,54) = (rxt(k,223)* y(k,25) +rxt(k,224)* y(k,99) + rxt(k,41) &
+ het_rates(k,20))* y(k,20)
prod(k,54) = 0._r8
- loss(k,82) = (rxt(k,162)* y(k,28) +rxt(k,239)* y(k,61) +rxt(k,238)* y(k,89) &
+ loss(k,82) = (rxt(k,162)* y(k,28) +rxt(k,239)* y(k,61) +rxt(k,238)* y(k,90) &
+ het_rates(k,21))* y(k,21)
prod(k,82) = (rxt(k,23) +rxt(k,156)*y(k,25) +rxt(k,212)*y(k,39) + &
- rxt(k,241)*y(k,98) +rxt(k,242)*y(k,94))*y(k,23) +rxt(k,39)*y(k,18) &
- +rxt(k,41)*y(k,20) +.700_r8*rxt(k,240)*y(k,98)*y(k,22)
- loss(k,55) = (rxt(k,240)* y(k,98) + rxt(k,22) + het_rates(k,22))* y(k,22)
- prod(k,55) =rxt(k,238)*y(k,89)*y(k,21)
+ rxt(k,241)*y(k,99) +rxt(k,242)*y(k,95))*y(k,23) +rxt(k,39)*y(k,18) &
+ +rxt(k,41)*y(k,20) +.700_r8*rxt(k,240)*y(k,99)*y(k,22)
+ loss(k,55) = (rxt(k,240)* y(k,99) + rxt(k,22) + het_rates(k,22))* y(k,22)
+ prod(k,55) =rxt(k,238)*y(k,90)*y(k,21)
loss(k,81) = (rxt(k,156)* y(k,25) +rxt(k,212)* y(k,39) + (rxt(k,242) + &
- rxt(k,243) +rxt(k,244))* y(k,94) +rxt(k,241)* y(k,98) + rxt(k,23) &
+ rxt(k,243) +rxt(k,244))* y(k,95) +rxt(k,241)* y(k,99) + rxt(k,23) &
+ rxt(k,24) + het_rates(k,23))* y(k,23)
prod(k,81) = 0._r8
- loss(k,56) = (rxt(k,225)* y(k,25) +rxt(k,208)* y(k,94) +rxt(k,226)* y(k,98) &
+ loss(k,56) = (rxt(k,225)* y(k,25) +rxt(k,208)* y(k,95) +rxt(k,226)* y(k,99) &
+ rxt(k,42) + het_rates(k,24))* y(k,24)
prod(k,56) = 0._r8
loss(k,96) = (rxt(k,218)* y(k,16) +rxt(k,155)* y(k,17) +rxt(k,220)* y(k,18) &
+rxt(k,223)* y(k,20) +rxt(k,156)* y(k,23) +rxt(k,225)* y(k,24) &
+rxt(k,168)* y(k,29) +rxt(k,157)* y(k,41) +rxt(k,158)* y(k,43) &
+rxt(k,177)* y(k,54) +rxt(k,161)* y(k,71) + (rxt(k,159) +rxt(k,160)) &
- * y(k,89) + het_rates(k,25))* y(k,25)
+ * y(k,90) + het_rates(k,25))* y(k,25)
prod(k,96) = (4.000_r8*rxt(k,180)*y(k,8) +rxt(k,181)*y(k,9) + &
2.000_r8*rxt(k,182)*y(k,11) +2.000_r8*rxt(k,183)*y(k,12) + &
2.000_r8*rxt(k,184)*y(k,13) +rxt(k,185)*y(k,14) + &
2.000_r8*rxt(k,186)*y(k,15) +rxt(k,187)*y(k,49) +rxt(k,217)*y(k,34) + &
- rxt(k,232)*y(k,46) +rxt(k,233)*y(k,47) +rxt(k,234)*y(k,48))*y(k,94) &
+ rxt(k,232)*y(k,46) +rxt(k,233)*y(k,47) +rxt(k,234)*y(k,48))*y(k,95) &
+ (rxt(k,45) +rxt(k,162)*y(k,21) +2.000_r8*rxt(k,163)*y(k,28) + &
rxt(k,165)*y(k,28) +rxt(k,167)*y(k,61) +rxt(k,172)*y(k,69) + &
- rxt(k,173)*y(k,98) +rxt(k,196)*y(k,5) +rxt(k,254)*y(k,78))*y(k,28) &
+ rxt(k,173)*y(k,99) +rxt(k,196)*y(k,5) +rxt(k,254)*y(k,79))*y(k,28) &
+ (rxt(k,176)*y(k,49) +3.000_r8*rxt(k,222)*y(k,19) + &
rxt(k,224)*y(k,20) +rxt(k,227)*y(k,46) +rxt(k,228)*y(k,47) + &
- rxt(k,229)*y(k,48))*y(k,98) + (rxt(k,55) +rxt(k,175)*y(k,69))*y(k,49) &
+ rxt(k,229)*y(k,48))*y(k,99) + (rxt(k,55) +rxt(k,175)*y(k,69))*y(k,49) &
+rxt(k,26)*y(k,4) +4.000_r8*rxt(k,30)*y(k,8) +rxt(k,31)*y(k,9) &
+2.000_r8*rxt(k,33)*y(k,11) +2.000_r8*rxt(k,34)*y(k,12) &
+2.000_r8*rxt(k,35)*y(k,13) +rxt(k,36)*y(k,14) +2.000_r8*rxt(k,37) &
@@ -155,43 +166,43 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
loss(k,91) = ((rxt(k,195) +rxt(k,196) +rxt(k,197))* y(k,5) +rxt(k,162) &
* y(k,21) + 2._r8*(rxt(k,163) +rxt(k,164) +rxt(k,165) +rxt(k,189)) &
* y(k,28) +rxt(k,167)* y(k,61) +rxt(k,169)* y(k,62) +rxt(k,172) &
- * y(k,69) +rxt(k,254)* y(k,78) +rxt(k,166)* y(k,89) + (rxt(k,173) + &
- rxt(k,174))* y(k,98) + rxt(k,45) + het_rates(k,28))* y(k,28)
- prod(k,91) = (rxt(k,160)*y(k,89) +rxt(k,161)*y(k,71) +rxt(k,177)*y(k,54)) &
+ * y(k,69) +rxt(k,254)* y(k,79) +rxt(k,166)* y(k,90) + (rxt(k,173) + &
+ rxt(k,174))* y(k,99) + rxt(k,45) + het_rates(k,28))* y(k,28)
+ prod(k,91) = (rxt(k,160)*y(k,90) +rxt(k,161)*y(k,71) +rxt(k,177)*y(k,54)) &
*y(k,25) + (rxt(k,47) +rxt(k,170)*y(k,69))*y(k,29) &
- + (rxt(k,178)*y(k,69) +rxt(k,179)*y(k,98))*y(k,54) + (rxt(k,59) + &
- rxt(k,259)*y(k,78))*y(k,72) +2.000_r8*rxt(k,190)*y(k,27) &
- +rxt(k,188)*y(k,94)*y(k,49)
+ + (rxt(k,178)*y(k,69) +rxt(k,179)*y(k,99))*y(k,54) + (rxt(k,59) + &
+ rxt(k,259)*y(k,79))*y(k,73) +2.000_r8*rxt(k,190)*y(k,27) &
+ +rxt(k,188)*y(k,95)*y(k,49)
loss(k,75) = (rxt(k,168)* y(k,25) + (rxt(k,273) +rxt(k,278) +rxt(k,283)) &
- * y(k,49) +rxt(k,170)* y(k,69) +rxt(k,171)* y(k,98) + rxt(k,46) &
+ * y(k,49) +rxt(k,170)* y(k,69) +rxt(k,171)* y(k,99) + rxt(k,46) &
+ rxt(k,47) + rxt(k,271) + rxt(k,276) + rxt(k,282) &
+ het_rates(k,29))* y(k,29)
prod(k,75) =rxt(k,169)*y(k,62)*y(k,28)
loss(k,4) = ( + het_rates(k,30))* y(k,30)
prod(k,4) = 0._r8
- loss(k,72) = (rxt(k,245)* y(k,98) + het_rates(k,31))* y(k,31)
+ loss(k,72) = (rxt(k,245)* y(k,99) + het_rates(k,31))* y(k,31)
prod(k,72) = (rxt(k,20) +rxt(k,21) +rxt(k,155)*y(k,25) +rxt(k,191)*y(k,3) + &
- rxt(k,235)*y(k,63) +rxt(k,236)*y(k,69) +rxt(k,237)*y(k,98))*y(k,17) &
- + (rxt(k,25) +rxt(k,61) +rxt(k,299)*y(k,99))*y(k,32) + (rxt(k,88) + &
- rxt(k,248)*y(k,69) +rxt(k,249)*y(k,98))*y(k,73) +rxt(k,223)*y(k,25) &
+ rxt(k,235)*y(k,63) +rxt(k,236)*y(k,69) +rxt(k,237)*y(k,99))*y(k,17) &
+ + (rxt(k,25) +rxt(k,61) +rxt(k,299)*y(k,100))*y(k,32) + (rxt(k,88) + &
+ rxt(k,248)*y(k,69) +rxt(k,249)*y(k,99))*y(k,74) +rxt(k,223)*y(k,25) &
*y(k,20) +.380_r8*rxt(k,24)*y(k,23)
- loss(k,61) = (rxt(k,299)* y(k,99) + rxt(k,25) + rxt(k,61) + het_rates(k,32)) &
+ loss(k,61) = (rxt(k,299)* y(k,100) + rxt(k,25) + rxt(k,61) + het_rates(k,32)) &
* y(k,32)
- prod(k,61) =.440_r8*rxt(k,24)*y(k,23) +rxt(k,245)*y(k,98)*y(k,31)
- loss(k,41) = (rxt(k,216)* y(k,94) + rxt(k,48) + het_rates(k,33))* y(k,33)
+ prod(k,61) =.440_r8*rxt(k,24)*y(k,23) +rxt(k,245)*y(k,99)*y(k,31)
+ loss(k,41) = (rxt(k,216)* y(k,95) + rxt(k,48) + het_rates(k,33))* y(k,33)
prod(k,41) = (rxt(k,181)*y(k,9) +rxt(k,183)*y(k,12) + &
2.000_r8*rxt(k,184)*y(k,13) +2.000_r8*rxt(k,185)*y(k,14) + &
rxt(k,186)*y(k,15) +rxt(k,207)*y(k,10) +2.000_r8*rxt(k,209)*y(k,42) + &
- rxt(k,233)*y(k,47) +rxt(k,234)*y(k,48))*y(k,94) + (rxt(k,53) + &
- rxt(k,228)*y(k,98))*y(k,47) + (rxt(k,54) +rxt(k,229)*y(k,98))*y(k,48) &
+ rxt(k,233)*y(k,47) +rxt(k,234)*y(k,48))*y(k,95) + (rxt(k,53) + &
+ rxt(k,228)*y(k,99))*y(k,47) + (rxt(k,54) +rxt(k,229)*y(k,99))*y(k,48) &
+rxt(k,31)*y(k,9) +rxt(k,32)*y(k,10) +rxt(k,34)*y(k,12) &
+2.000_r8*rxt(k,35)*y(k,13) +2.000_r8*rxt(k,36)*y(k,14) +rxt(k,37) &
*y(k,15) +2.000_r8*rxt(k,50)*y(k,42)
- loss(k,43) = (rxt(k,217)* y(k,94) + rxt(k,49) + het_rates(k,34))* y(k,34)
- prod(k,43) = (rxt(k,52) +rxt(k,227)*y(k,98) +rxt(k,232)*y(k,94))*y(k,46) &
- + (rxt(k,33) +rxt(k,182)*y(k,94))*y(k,11) + (rxt(k,34) + &
- rxt(k,183)*y(k,94))*y(k,12)
- loss(k,51) = (rxt(k,246)* y(k,63) + (rxt(k,247) +rxt(k,261))* y(k,98) &
+ loss(k,43) = (rxt(k,217)* y(k,95) + rxt(k,49) + het_rates(k,34))* y(k,34)
+ prod(k,43) = (rxt(k,52) +rxt(k,227)*y(k,99) +rxt(k,232)*y(k,95))*y(k,46) &
+ + (rxt(k,33) +rxt(k,182)*y(k,95))*y(k,11) + (rxt(k,34) + &
+ rxt(k,183)*y(k,95))*y(k,12)
+ loss(k,51) = (rxt(k,246)* y(k,63) + (rxt(k,247) +rxt(k,261))* y(k,99) &
+ het_rates(k,35))* y(k,35)
prod(k,51) = 0._r8
loss(k,5) = ( + het_rates(k,36))* y(k,36)
@@ -201,83 +212,83 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
loss(k,7) = ( + het_rates(k,38))* y(k,38)
prod(k,7) = 0._r8
loss(k,73) = (rxt(k,212)* y(k,23) +rxt(k,213)* y(k,41) +rxt(k,215)* y(k,51) &
- +rxt(k,214)* y(k,102) + het_rates(k,39))* y(k,39)
+ +rxt(k,214)* y(k,103) + het_rates(k,39))* y(k,39)
prod(k,73) = (rxt(k,185)*y(k,14) +rxt(k,207)*y(k,10) + &
- 2.000_r8*rxt(k,216)*y(k,33) +rxt(k,217)*y(k,34))*y(k,94) +rxt(k,32) &
+ 2.000_r8*rxt(k,216)*y(k,33) +rxt(k,217)*y(k,34))*y(k,95) +rxt(k,32) &
*y(k,10) +rxt(k,36)*y(k,14) +2.000_r8*rxt(k,48)*y(k,33) +rxt(k,49) &
*y(k,34) +rxt(k,56)*y(k,50)
loss(k,84) = (rxt(k,116)* y(k,70) +rxt(k,119)* y(k,71) + (rxt(k,113) + &
- rxt(k,114) +rxt(k,115))* y(k,89) + het_rates(k,40))* y(k,40)
+ rxt(k,114) +rxt(k,115))* y(k,90) + het_rates(k,40))* y(k,40)
prod(k,84) = (rxt(k,120)*y(k,41) +rxt(k,123)*y(k,69) +rxt(k,143)*y(k,55) + &
- rxt(k,237)*y(k,17) +rxt(k,249)*y(k,73) +rxt(k,255)*y(k,76) + &
- rxt(k,260)*y(k,78))*y(k,98) + (rxt(k,94)*y(k,94) + &
+ rxt(k,237)*y(k,17) +rxt(k,249)*y(k,74) +rxt(k,255)*y(k,77) + &
+ rxt(k,260)*y(k,79))*y(k,99) + (rxt(k,94)*y(k,95) + &
rxt(k,111)*y(k,69) +rxt(k,157)*y(k,25) +rxt(k,213)*y(k,39))*y(k,41) &
- + (rxt(k,23) +.330_r8*rxt(k,24) +rxt(k,243)*y(k,94))*y(k,23) &
- + (rxt(k,51) +rxt(k,211)*y(k,94))*y(k,45) + (rxt(k,55) + &
- rxt(k,188)*y(k,94))*y(k,49) + (2.000_r8*rxt(k,2) +rxt(k,3))*y(k,102) &
+ + (rxt(k,23) +.330_r8*rxt(k,24) +rxt(k,243)*y(k,95))*y(k,23) &
+ + (rxt(k,51) +rxt(k,211)*y(k,95))*y(k,45) + (rxt(k,55) + &
+ rxt(k,188)*y(k,95))*y(k,49) + (2.000_r8*rxt(k,2) +rxt(k,3))*y(k,103) &
+2.000_r8*rxt(k,20)*y(k,17) +rxt(k,22)*y(k,22) +rxt(k,56)*y(k,50)
loss(k,99) = (rxt(k,157)* y(k,25) +rxt(k,213)* y(k,39) +rxt(k,111)* y(k,69) &
- +rxt(k,94)* y(k,94) +rxt(k,120)* y(k,98) + het_rates(k,41))* y(k,41)
- prod(k,99) = (1.440_r8*rxt(k,24) +rxt(k,244)*y(k,94))*y(k,23) +rxt(k,21) &
- *y(k,17) +rxt(k,113)*y(k,89)*y(k,40) +rxt(k,1)*y(k,102)
- loss(k,28) = (rxt(k,209)* y(k,94) + rxt(k,50) + het_rates(k,42))* y(k,42)
+ +rxt(k,94)* y(k,95) +rxt(k,120)* y(k,99) + het_rates(k,41))* y(k,41)
+ prod(k,99) = (1.440_r8*rxt(k,24) +rxt(k,244)*y(k,95))*y(k,23) +rxt(k,21) &
+ *y(k,17) +rxt(k,113)*y(k,90)*y(k,40) +rxt(k,1)*y(k,103)
+ loss(k,28) = (rxt(k,209)* y(k,95) + rxt(k,50) + het_rates(k,42))* y(k,42)
prod(k,28) = 0._r8
- loss(k,65) = (rxt(k,158)* y(k,25) +rxt(k,112)* y(k,69) +rxt(k,121)* y(k,98) &
+ loss(k,65) = (rxt(k,158)* y(k,25) +rxt(k,112)* y(k,69) +rxt(k,121)* y(k,99) &
+ rxt(k,4) + het_rates(k,43))* y(k,43)
- prod(k,65) = (.500_r8*rxt(k,263) +rxt(k,127)*y(k,89))*y(k,89) &
- +rxt(k,126)*y(k,98)*y(k,98)
+ prod(k,65) = (.500_r8*rxt(k,263) +rxt(k,127)*y(k,90))*y(k,90) &
+ +rxt(k,126)*y(k,99)*y(k,99)
loss(k,33) = ( + rxt(k,87) + het_rates(k,44))* y(k,44)
- prod(k,33) =rxt(k,262)*y(k,102)*y(k,80)
- loss(k,69) = (rxt(k,204)* y(k,69) + (rxt(k,210) +rxt(k,211))* y(k,94) &
- +rxt(k,205)* y(k,98) + rxt(k,51) + het_rates(k,45))* y(k,45)
- prod(k,69) = (rxt(k,191)*y(k,17) +rxt(k,192)*y(k,89))*y(k,3)
- loss(k,42) = (rxt(k,232)* y(k,94) +rxt(k,227)* y(k,98) + rxt(k,52) &
+ prod(k,33) =rxt(k,262)*y(k,103)*y(k,81)
+ loss(k,69) = (rxt(k,204)* y(k,69) + (rxt(k,210) +rxt(k,211))* y(k,95) &
+ +rxt(k,205)* y(k,99) + rxt(k,51) + het_rates(k,45))* y(k,45)
+ prod(k,69) = (rxt(k,191)*y(k,17) +rxt(k,192)*y(k,90))*y(k,3)
+ loss(k,42) = (rxt(k,232)* y(k,95) +rxt(k,227)* y(k,99) + rxt(k,52) &
+ het_rates(k,46))* y(k,46)
prod(k,42) = 0._r8
- loss(k,44) = (rxt(k,233)* y(k,94) +rxt(k,228)* y(k,98) + rxt(k,53) &
+ loss(k,44) = (rxt(k,233)* y(k,95) +rxt(k,228)* y(k,99) + rxt(k,53) &
+ het_rates(k,47))* y(k,47)
prod(k,44) = 0._r8
- loss(k,48) = (rxt(k,234)* y(k,94) +rxt(k,229)* y(k,98) + rxt(k,54) &
+ loss(k,48) = (rxt(k,234)* y(k,95) +rxt(k,229)* y(k,99) + rxt(k,54) &
+ het_rates(k,48))* y(k,48)
prod(k,48) = 0._r8
loss(k,85) = ((rxt(k,273) +rxt(k,278) +rxt(k,283))* y(k,29) + (rxt(k,275) + &
rxt(k,280))* y(k,53) + (rxt(k,268) +rxt(k,274) +rxt(k,279))* y(k,54) &
- +rxt(k,175)* y(k,69) + (rxt(k,187) +rxt(k,188))* y(k,94) +rxt(k,176) &
- * y(k,98) + rxt(k,55) + het_rates(k,49))* y(k,49)
+ +rxt(k,175)* y(k,69) + (rxt(k,187) +rxt(k,188))* y(k,95) +rxt(k,176) &
+ * y(k,99) + rxt(k,55) + het_rates(k,49))* y(k,49)
prod(k,85) = (rxt(k,155)*y(k,17) +rxt(k,156)*y(k,23) +rxt(k,157)*y(k,41) + &
- rxt(k,158)*y(k,43) +rxt(k,159)*y(k,89) +rxt(k,177)*y(k,54) + &
+ rxt(k,158)*y(k,43) +rxt(k,159)*y(k,90) +rxt(k,177)*y(k,54) + &
rxt(k,218)*y(k,16) +rxt(k,220)*y(k,18) +2.000_r8*rxt(k,223)*y(k,20) + &
- rxt(k,225)*y(k,24))*y(k,25) +rxt(k,174)*y(k,98)*y(k,28)
+ rxt(k,225)*y(k,24))*y(k,25) +rxt(k,174)*y(k,99)*y(k,28)
loss(k,49) = ( + rxt(k,56) + het_rates(k,50))* y(k,50)
- prod(k,49) = (rxt(k,212)*y(k,23) +rxt(k,213)*y(k,41) +rxt(k,214)*y(k,102) + &
+ prod(k,49) = (rxt(k,212)*y(k,23) +rxt(k,213)*y(k,41) +rxt(k,214)*y(k,103) + &
rxt(k,215)*y(k,51))*y(k,39)
- loss(k,100) = (rxt(k,215)* y(k,39) +rxt(k,152)* y(k,98) + rxt(k,9) &
+ loss(k,100) = (rxt(k,215)* y(k,39) +rxt(k,152)* y(k,99) + rxt(k,9) &
+ het_rates(k,51))* y(k,51)
prod(k,100) = (rxt(k,271) +rxt(k,276) +rxt(k,282) +rxt(k,273)*y(k,49) + &
rxt(k,278)*y(k,49) +rxt(k,283)*y(k,49))*y(k,29) &
+ (2.000_r8*rxt(k,264) +2.000_r8*rxt(k,267) +2.000_r8*rxt(k,270) + &
2.000_r8*rxt(k,281))*y(k,57) + (rxt(k,269) +rxt(k,272) +rxt(k,277)) &
*y(k,6) + (rxt(k,266) +rxt(k,235)*y(k,17) +rxt(k,246)*y(k,35)) &
- *y(k,63) + (.500_r8*rxt(k,265) +rxt(k,151)*y(k,98))*y(k,62)
- loss(k,57) = (rxt(k,128)* y(k,98) + rxt(k,10) + rxt(k,11) + rxt(k,153) &
+ *y(k,63) + (.500_r8*rxt(k,265) +rxt(k,151)*y(k,99))*y(k,62)
+ loss(k,57) = (rxt(k,128)* y(k,99) + rxt(k,10) + rxt(k,11) + rxt(k,153) &
+ het_rates(k,52))* y(k,52)
- prod(k,57) =rxt(k,149)*y(k,89)*y(k,62)
+ prod(k,57) =rxt(k,149)*y(k,90)*y(k,62)
loss(k,68) = ((rxt(k,275) +rxt(k,280))* y(k,49) +rxt(k,206)* y(k,69) &
+ rxt(k,57) + het_rates(k,53))* y(k,53)
- prod(k,68) = (rxt(k,269) +rxt(k,272) +rxt(k,277))*y(k,6) +rxt(k,198)*y(k,89) &
+ prod(k,68) = (rxt(k,269) +rxt(k,272) +rxt(k,277))*y(k,6) +rxt(k,198)*y(k,90) &
*y(k,5)
loss(k,70) = (rxt(k,177)* y(k,25) + (rxt(k,268) +rxt(k,274) +rxt(k,279)) &
- * y(k,49) +rxt(k,178)* y(k,69) +rxt(k,179)* y(k,98) + rxt(k,58) &
+ * y(k,49) +rxt(k,178)* y(k,69) +rxt(k,179)* y(k,99) + rxt(k,58) &
+ het_rates(k,54))* y(k,54)
- prod(k,70) = (rxt(k,271) +rxt(k,276) +rxt(k,282) +rxt(k,171)*y(k,98))*y(k,29) &
- +rxt(k,166)*y(k,89)*y(k,28)
+ prod(k,70) = (rxt(k,271) +rxt(k,276) +rxt(k,282) +rxt(k,171)*y(k,99))*y(k,29) &
+ +rxt(k,166)*y(k,90)*y(k,28)
loss(k,78) = (rxt(k,131)* y(k,61) + (rxt(k,132) +rxt(k,133) +rxt(k,134)) &
- * y(k,62) +rxt(k,135)* y(k,70) +rxt(k,296)* y(k,97) +rxt(k,143) &
- * y(k,98) + rxt(k,62) + het_rates(k,55))* y(k,55)
- prod(k,78) = (rxt(k,129)*y(k,90) +rxt(k,293)*y(k,93))*y(k,69) &
- + (.200_r8*rxt(k,287)*y(k,92) +1.100_r8*rxt(k,289)*y(k,91))*y(k,88) &
- +rxt(k,15)*y(k,61) +rxt(k,294)*y(k,93)*y(k,70) +rxt(k,300)*y(k,99)
- loss(k,46) = ((rxt(k,147) +rxt(k,148))* y(k,94) + rxt(k,12) &
+ * y(k,62) +rxt(k,135)* y(k,70) +rxt(k,296)* y(k,98) +rxt(k,143) &
+ * y(k,99) + rxt(k,62) + het_rates(k,55))* y(k,55)
+ prod(k,78) = (rxt(k,129)*y(k,91) +rxt(k,293)*y(k,94))*y(k,69) &
+ + (.200_r8*rxt(k,287)*y(k,93) +1.100_r8*rxt(k,289)*y(k,92))*y(k,89) &
+ +rxt(k,15)*y(k,61) +rxt(k,294)*y(k,94)*y(k,70) +rxt(k,300)*y(k,100)
+ loss(k,46) = ((rxt(k,147) +rxt(k,148))* y(k,95) + rxt(k,12) &
+ het_rates(k,56))* y(k,56)
prod(k,46) =rxt(k,132)*y(k,62)*y(k,55)
loss(k,50) = ( + rxt(k,13) + rxt(k,14) + rxt(k,154) + rxt(k,264) + rxt(k,267) &
@@ -291,34 +302,34 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
prod(k,10) = 0._r8
loss(k,95) = (rxt(k,199)* y(k,5) +rxt(k,239)* y(k,21) +rxt(k,167)* y(k,28) &
+rxt(k,131)* y(k,55) +rxt(k,140)* y(k,63) +rxt(k,146)* y(k,69) &
- +rxt(k,145)* y(k,71) +rxt(k,144)* y(k,89) +rxt(k,298)* y(k,97) &
+ +rxt(k,145)* y(k,71) +rxt(k,144)* y(k,90) +rxt(k,298)* y(k,98) &
+ rxt(k,15) + rxt(k,16) + het_rates(k,61))* y(k,61)
prod(k,95) = (rxt(k,17) +.500_r8*rxt(k,265) +2.000_r8*rxt(k,133)*y(k,55) + &
- rxt(k,136)*y(k,69) +rxt(k,256)*y(k,78))*y(k,62) &
- + (rxt(k,135)*y(k,70) +rxt(k,143)*y(k,98))*y(k,55) &
- +2.000_r8*rxt(k,147)*y(k,94)*y(k,56) +rxt(k,14)*y(k,57) +rxt(k,19) &
- *y(k,63) +rxt(k,130)*y(k,90)*y(k,70) +rxt(k,297)*y(k,97) +rxt(k,310) &
- *y(k,101)
+ rxt(k,136)*y(k,69) +rxt(k,256)*y(k,79))*y(k,62) &
+ + (rxt(k,135)*y(k,70) +rxt(k,143)*y(k,99))*y(k,55) &
+ +2.000_r8*rxt(k,147)*y(k,95)*y(k,56) +rxt(k,14)*y(k,57) +rxt(k,19) &
+ *y(k,63) +rxt(k,130)*y(k,91)*y(k,70) +rxt(k,297)*y(k,98) +rxt(k,310) &
+ *y(k,102)
loss(k,92) = (rxt(k,200)* y(k,5) +rxt(k,169)* y(k,28) + (rxt(k,132) + &
rxt(k,133) +rxt(k,134))* y(k,55) +rxt(k,150)* y(k,63) + (rxt(k,136) + &
- rxt(k,138))* y(k,69) +rxt(k,137)* y(k,71) +rxt(k,256)* y(k,78) &
- +rxt(k,149)* y(k,89) +rxt(k,151)* y(k,98) + rxt(k,17) + rxt(k,265) &
+ rxt(k,138))* y(k,69) +rxt(k,137)* y(k,71) +rxt(k,256)* y(k,79) &
+ +rxt(k,149)* y(k,90) +rxt(k,151)* y(k,99) + rxt(k,17) + rxt(k,265) &
+ het_rates(k,62))* y(k,62)
- prod(k,92) = (2.000_r8*rxt(k,140)*y(k,63) +rxt(k,144)*y(k,89) + &
+ prod(k,92) = (2.000_r8*rxt(k,140)*y(k,63) +rxt(k,144)*y(k,90) + &
rxt(k,145)*y(k,71) +rxt(k,146)*y(k,69) +rxt(k,167)*y(k,28) + &
rxt(k,199)*y(k,5) +rxt(k,239)*y(k,21))*y(k,61) + (rxt(k,18) + &
- rxt(k,139)*y(k,89) +rxt(k,141)*y(k,69) +rxt(k,142)*y(k,98))*y(k,63) &
- + (rxt(k,11) +rxt(k,153) +rxt(k,128)*y(k,98))*y(k,52) + (rxt(k,13) + &
+ rxt(k,139)*y(k,90) +rxt(k,141)*y(k,69) +rxt(k,142)*y(k,99))*y(k,63) &
+ + (rxt(k,11) +rxt(k,153) +rxt(k,128)*y(k,99))*y(k,52) + (rxt(k,13) + &
rxt(k,154))*y(k,57) +rxt(k,28)*y(k,6) +rxt(k,47)*y(k,29) +rxt(k,9) &
*y(k,51)
loss(k,90) = (rxt(k,235)* y(k,17) +rxt(k,246)* y(k,35) +rxt(k,140)* y(k,61) &
- +rxt(k,150)* y(k,62) +rxt(k,141)* y(k,69) +rxt(k,139)* y(k,89) &
- +rxt(k,142)* y(k,98) + rxt(k,18) + rxt(k,19) + rxt(k,266) &
+ +rxt(k,150)* y(k,62) +rxt(k,141)* y(k,69) +rxt(k,139)* y(k,90) &
+ +rxt(k,142)* y(k,99) + rxt(k,18) + rxt(k,19) + rxt(k,266) &
+ het_rates(k,63))* y(k,63)
prod(k,90) = (rxt(k,46) +rxt(k,168)*y(k,25) +rxt(k,170)*y(k,69) + &
- rxt(k,171)*y(k,98))*y(k,29) + (rxt(k,13) +rxt(k,14) +rxt(k,154)) &
+ rxt(k,171)*y(k,99))*y(k,29) + (rxt(k,13) +rxt(k,14) +rxt(k,154)) &
*y(k,57) + (rxt(k,29) +rxt(k,201)*y(k,69))*y(k,6) &
- + (rxt(k,152)*y(k,98) +rxt(k,215)*y(k,39))*y(k,51) &
+ + (rxt(k,152)*y(k,99) +rxt(k,215)*y(k,39))*y(k,51) &
+ (rxt(k,137)*y(k,71) +rxt(k,138)*y(k,69))*y(k,62) +rxt(k,10) &
*y(k,52)
loss(k,11) = ( + het_rates(k,64))* y(k,64)
@@ -337,97 +348,97 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
+rxt(k,206)* y(k,53) +rxt(k,178)* y(k,54) +rxt(k,146)* y(k,61) &
+ (rxt(k,136) +rxt(k,138))* y(k,62) +rxt(k,141)* y(k,63) &
+ 2._r8*rxt(k,109)* y(k,69) +rxt(k,110)* y(k,70) +rxt(k,108) &
- * y(k,71) +rxt(k,248)* y(k,73) +rxt(k,117)* y(k,89) + (rxt(k,291) + &
- rxt(k,292))* y(k,91) +rxt(k,293)* y(k,93) +rxt(k,123)* y(k,98) &
+ * y(k,71) +rxt(k,248)* y(k,74) +rxt(k,117)* y(k,90) + (rxt(k,291) + &
+ rxt(k,292))* y(k,92) +rxt(k,293)* y(k,94) +rxt(k,123)* y(k,99) &
+ rxt(k,71) + rxt(k,72) + rxt(k,73) + rxt(k,74) + rxt(k,75) &
+ rxt(k,76) + het_rates(k,69))* y(k,69)
prod(k,93) = (2.000_r8*rxt(k,5) +rxt(k,6) +rxt(k,77) +rxt(k,79) +rxt(k,81) + &
2.000_r8*rxt(k,82) +2.000_r8*rxt(k,83) +rxt(k,84) +rxt(k,85) + &
- rxt(k,86) +rxt(k,97)*y(k,94) +rxt(k,98)*y(k,94) +rxt(k,135)*y(k,55) + &
- rxt(k,250)*y(k,76) +rxt(k,257)*y(k,78) +rxt(k,295)*y(k,93) + &
- rxt(k,302)*y(k,99) +rxt(k,306)*y(k,100))*y(k,70) &
- + (rxt(k,131)*y(k,61) +rxt(k,132)*y(k,62) +rxt(k,296)*y(k,97)) &
- *y(k,55) + (rxt(k,25) +rxt(k,61))*y(k,32) + (rxt(k,287)*y(k,92) + &
- 1.150_r8*rxt(k,288)*y(k,97))*y(k,88) +rxt(k,27)*y(k,5) &
- +.180_r8*rxt(k,24)*y(k,23) +rxt(k,45)*y(k,28) +rxt(k,115)*y(k,89) &
+ rxt(k,86) +rxt(k,97)*y(k,95) +rxt(k,98)*y(k,95) +rxt(k,135)*y(k,55) + &
+ rxt(k,250)*y(k,77) +rxt(k,257)*y(k,79) +rxt(k,295)*y(k,94) + &
+ rxt(k,302)*y(k,100) +rxt(k,306)*y(k,101))*y(k,70) &
+ + (rxt(k,131)*y(k,61) +rxt(k,132)*y(k,62) +rxt(k,296)*y(k,98)) &
+ *y(k,55) + (rxt(k,25) +rxt(k,61))*y(k,32) + (rxt(k,287)*y(k,93) + &
+ 1.150_r8*rxt(k,288)*y(k,98))*y(k,89) +rxt(k,27)*y(k,5) &
+ +.180_r8*rxt(k,24)*y(k,23) +rxt(k,45)*y(k,28) +rxt(k,115)*y(k,90) &
*y(k,40) +rxt(k,14)*y(k,57) +rxt(k,15)*y(k,61) +rxt(k,17)*y(k,62) &
- +rxt(k,18)*y(k,63) +rxt(k,8)*y(k,71) +rxt(k,59)*y(k,72) +rxt(k,89) &
- *y(k,78) +rxt(k,90)*y(k,79) +rxt(k,91)*y(k,80) +rxt(k,301)*y(k,99) &
- *y(k,90) +rxt(k,96)*y(k,94) +rxt(k,125)*y(k,98)*y(k,98) +rxt(k,304) &
- *y(k,100) +rxt(k,309)*y(k,101) +rxt(k,2)*y(k,102)
+ +rxt(k,18)*y(k,63) +rxt(k,8)*y(k,71) +rxt(k,59)*y(k,73) +rxt(k,89) &
+ *y(k,79) +rxt(k,90)*y(k,80) +rxt(k,91)*y(k,81) +rxt(k,301)*y(k,100) &
+ *y(k,91) +rxt(k,96)*y(k,95) +rxt(k,125)*y(k,99)*y(k,99) +rxt(k,304) &
+ *y(k,101) +rxt(k,309)*y(k,102) +rxt(k,2)*y(k,103)
loss(k,87) = (rxt(k,116)* y(k,40) +rxt(k,135)* y(k,55) +rxt(k,110)* y(k,69) &
- +rxt(k,250)* y(k,76) +rxt(k,257)* y(k,78) +rxt(k,130)* y(k,90) &
- +rxt(k,290)* y(k,91) + (rxt(k,294) +rxt(k,295))* y(k,93) +rxt(k,97) &
- * y(k,94) +rxt(k,102)* y(k,95) +rxt(k,302)* y(k,99) +rxt(k,306) &
- * y(k,100) + rxt(k,5) + rxt(k,6) + rxt(k,77) + rxt(k,78) + rxt(k,79) &
+ +rxt(k,250)* y(k,77) +rxt(k,257)* y(k,79) +rxt(k,130)* y(k,91) &
+ +rxt(k,290)* y(k,92) + (rxt(k,294) +rxt(k,295))* y(k,94) +rxt(k,97) &
+ * y(k,95) +rxt(k,102)* y(k,96) +rxt(k,302)* y(k,100) +rxt(k,306) &
+ * y(k,101) + rxt(k,5) + rxt(k,6) + rxt(k,77) + rxt(k,78) + rxt(k,79) &
+ rxt(k,80) + rxt(k,81) + rxt(k,82) + rxt(k,83) + rxt(k,84) &
+ rxt(k,85) + rxt(k,86) + het_rates(k,70))* y(k,70)
- prod(k,87) = (rxt(k,8) +2.000_r8*rxt(k,99)*y(k,94) + &
- 2.000_r8*rxt(k,108)*y(k,69) +2.000_r8*rxt(k,118)*y(k,89) + &
- rxt(k,119)*y(k,40) +rxt(k,124)*y(k,98) +rxt(k,137)*y(k,62) + &
+ prod(k,87) = (rxt(k,8) +2.000_r8*rxt(k,99)*y(k,95) + &
+ 2.000_r8*rxt(k,108)*y(k,69) +2.000_r8*rxt(k,118)*y(k,90) + &
+ rxt(k,119)*y(k,40) +rxt(k,124)*y(k,99) +rxt(k,137)*y(k,62) + &
rxt(k,145)*y(k,61) +rxt(k,161)*y(k,25) +rxt(k,193)*y(k,3) + &
- rxt(k,252)*y(k,76) +rxt(k,258)*y(k,78))*y(k,71) &
- + (rxt(k,113)*y(k,40) +rxt(k,117)*y(k,69) +rxt(k,122)*y(k,98) + &
- rxt(k,127)*y(k,89) +rxt(k,139)*y(k,63) +rxt(k,159)*y(k,25) + &
+ rxt(k,252)*y(k,77) +rxt(k,258)*y(k,79))*y(k,71) &
+ + (rxt(k,113)*y(k,40) +rxt(k,117)*y(k,69) +rxt(k,122)*y(k,99) + &
+ rxt(k,127)*y(k,90) +rxt(k,139)*y(k,63) +rxt(k,159)*y(k,25) + &
rxt(k,166)*y(k,28) +rxt(k,192)*y(k,3) +rxt(k,198)*y(k,5) + &
- rxt(k,238)*y(k,21))*y(k,89) + (rxt(k,101)*y(k,95) + &
- rxt(k,109)*y(k,69) +rxt(k,123)*y(k,98) +rxt(k,136)*y(k,62) + &
+ rxt(k,238)*y(k,21))*y(k,90) + (rxt(k,101)*y(k,96) + &
+ rxt(k,109)*y(k,69) +rxt(k,123)*y(k,99) +rxt(k,136)*y(k,62) + &
rxt(k,141)*y(k,63) +rxt(k,172)*y(k,28) +rxt(k,202)*y(k,5))*y(k,69) &
- + (rxt(k,163)*y(k,28) +rxt(k,164)*y(k,28) +rxt(k,174)*y(k,98) + &
+ + (rxt(k,163)*y(k,28) +rxt(k,164)*y(k,28) +rxt(k,174)*y(k,99) + &
rxt(k,196)*y(k,5) +rxt(k,197)*y(k,5))*y(k,28) + (rxt(k,92) + &
- rxt(k,100) +2.000_r8*rxt(k,102)*y(k,70))*y(k,95) +rxt(k,194)*y(k,5) &
- *y(k,5) +rxt(k,128)*y(k,98)*y(k,52) +rxt(k,134)*y(k,62)*y(k,55) &
- +rxt(k,148)*y(k,94)*y(k,56) +rxt(k,298)*y(k,97)*y(k,61) +rxt(k,19) &
- *y(k,63) +rxt(k,93)*y(k,96)
+ rxt(k,100) +2.000_r8*rxt(k,102)*y(k,70))*y(k,96) +rxt(k,194)*y(k,5) &
+ *y(k,5) +rxt(k,128)*y(k,99)*y(k,52) +rxt(k,134)*y(k,62)*y(k,55) &
+ +rxt(k,148)*y(k,95)*y(k,56) +rxt(k,298)*y(k,98)*y(k,61) +rxt(k,19) &
+ *y(k,63) +rxt(k,93)*y(k,97)
loss(k,88) = (rxt(k,193)* y(k,3) +rxt(k,161)* y(k,25) +rxt(k,119)* y(k,40) &
+rxt(k,145)* y(k,61) +rxt(k,137)* y(k,62) +rxt(k,108)* y(k,69) &
- +rxt(k,252)* y(k,76) +rxt(k,258)* y(k,78) +rxt(k,118)* y(k,89) &
- +rxt(k,99)* y(k,94) +rxt(k,124)* y(k,98) + rxt(k,7) + rxt(k,8) &
+ +rxt(k,252)* y(k,77) +rxt(k,258)* y(k,79) +rxt(k,118)* y(k,90) &
+ +rxt(k,99)* y(k,95) +rxt(k,124)* y(k,99) + rxt(k,7) + rxt(k,8) &
+ het_rates(k,71))* y(k,71)
prod(k,88) =rxt(k,110)*y(k,70)*y(k,69)
- loss(k,52) = (rxt(k,259)* y(k,78) + rxt(k,59) + het_rates(k,72))* y(k,72)
+ loss(k,52) = (rxt(k,259)* y(k,79) + rxt(k,59) + het_rates(k,73))* y(k,73)
prod(k,52) = (rxt(k,165)*y(k,28) +rxt(k,195)*y(k,5))*y(k,28)
- loss(k,53) = (rxt(k,248)* y(k,69) +rxt(k,249)* y(k,98) + rxt(k,88) &
- + het_rates(k,73))* y(k,73)
+ loss(k,53) = (rxt(k,248)* y(k,69) +rxt(k,249)* y(k,99) + rxt(k,88) &
+ + het_rates(k,74))* y(k,74)
prod(k,53) = 0._r8
- loss(k,16) = ( + het_rates(k,74))* y(k,74)
+ loss(k,16) = ( + het_rates(k,75))* y(k,75)
prod(k,16) = 0._r8
- loss(k,17) = ( + het_rates(k,75))* y(k,75)
+ loss(k,17) = ( + het_rates(k,76))* y(k,76)
prod(k,17) = 0._r8
- loss(k,66) = (rxt(k,250)* y(k,70) +rxt(k,252)* y(k,71) +rxt(k,255)* y(k,98) &
- + het_rates(k,76))* y(k,76)
- prod(k,66) =rxt(k,88)*y(k,73) +rxt(k,89)*y(k,78)
- loss(k,18) = ( + rxt(k,60) + het_rates(k,77))* y(k,77)
+ loss(k,66) = (rxt(k,250)* y(k,70) +rxt(k,252)* y(k,71) +rxt(k,255)* y(k,99) &
+ + het_rates(k,77))* y(k,77)
+ prod(k,66) =rxt(k,88)*y(k,74) +rxt(k,89)*y(k,79)
+ loss(k,18) = ( + rxt(k,60) + het_rates(k,78))* y(k,78)
prod(k,18) = 0._r8
loss(k,83) = (rxt(k,253)* y(k,5) +rxt(k,254)* y(k,28) +rxt(k,256)* y(k,62) &
- +rxt(k,257)* y(k,70) +rxt(k,258)* y(k,71) +rxt(k,259)* y(k,72) &
- +rxt(k,260)* y(k,98) + rxt(k,89) + het_rates(k,78))* y(k,78)
- prod(k,83) = (rxt(k,250)*y(k,70) +rxt(k,252)*y(k,71) +rxt(k,255)*y(k,98)) &
- *y(k,76) +rxt(k,248)*y(k,73)*y(k,69) +rxt(k,90)*y(k,79)
- loss(k,74) = (rxt(k,251)* y(k,98) + rxt(k,90) + het_rates(k,79))* y(k,79)
+ +rxt(k,257)* y(k,70) +rxt(k,258)* y(k,71) +rxt(k,259)* y(k,73) &
+ +rxt(k,260)* y(k,99) + rxt(k,89) + het_rates(k,79))* y(k,79)
+ prod(k,83) = (rxt(k,250)*y(k,70) +rxt(k,252)*y(k,71) +rxt(k,255)*y(k,99)) &
+ *y(k,77) +rxt(k,248)*y(k,74)*y(k,69) +rxt(k,90)*y(k,80)
+ loss(k,74) = (rxt(k,251)* y(k,99) + rxt(k,90) + het_rates(k,80))* y(k,80)
prod(k,74) = (rxt(k,253)*y(k,5) +rxt(k,254)*y(k,28) +rxt(k,256)*y(k,62) + &
- rxt(k,257)*y(k,70) +rxt(k,258)*y(k,71) +rxt(k,259)*y(k,72) + &
- rxt(k,260)*y(k,98))*y(k,78) + (rxt(k,246)*y(k,63) + &
- rxt(k,247)*y(k,98) +.500_r8*rxt(k,261)*y(k,98))*y(k,35) &
- +rxt(k,249)*y(k,98)*y(k,73) +rxt(k,91)*y(k,80)
- loss(k,47) = (rxt(k,262)* y(k,102) + rxt(k,91) + het_rates(k,80))* y(k,80)
- prod(k,47) =rxt(k,87)*y(k,44) +rxt(k,251)*y(k,98)*y(k,79)
- loss(k,19) = ( + het_rates(k,81))* y(k,81)
+ rxt(k,257)*y(k,70) +rxt(k,258)*y(k,71) +rxt(k,259)*y(k,73) + &
+ rxt(k,260)*y(k,99))*y(k,79) + (rxt(k,246)*y(k,63) + &
+ rxt(k,247)*y(k,99) +.500_r8*rxt(k,261)*y(k,99))*y(k,35) &
+ +rxt(k,249)*y(k,99)*y(k,74) +rxt(k,91)*y(k,81)
+ loss(k,47) = (rxt(k,262)* y(k,103) + rxt(k,91) + het_rates(k,81))* y(k,81)
+ prod(k,47) =rxt(k,87)*y(k,44) +rxt(k,251)*y(k,99)*y(k,80)
+ loss(k,19) = ( + het_rates(k,82))* y(k,82)
prod(k,19) = 0._r8
- loss(k,20) = ( + het_rates(k,82))* y(k,82)
+ loss(k,20) = ( + het_rates(k,83))* y(k,83)
prod(k,20) = 0._r8
- loss(k,21) = ( + het_rates(k,83))* y(k,83)
+ loss(k,21) = ( + het_rates(k,84))* y(k,84)
prod(k,21) = 0._r8
- loss(k,22) = ( + het_rates(k,84))* y(k,84)
+ loss(k,22) = ( + het_rates(k,85))* y(k,85)
prod(k,22) = 0._r8
- loss(k,23) = ( + het_rates(k,85))* y(k,85)
+ loss(k,23) = ( + het_rates(k,86))* y(k,86)
prod(k,23) = 0._r8
- loss(k,24) = ( + het_rates(k,86))* y(k,86)
+ loss(k,24) = ( + het_rates(k,87))* y(k,87)
prod(k,24) = 0._r8
- loss(k,25) = ( + het_rates(k,87))* y(k,87)
+ loss(k,25) = ( + het_rates(k,88))* y(k,88)
prod(k,25) = 0._r8
- loss(k,76) = (rxt(k,289)* y(k,91) +rxt(k,287)* y(k,92) +rxt(k,288)* y(k,97) &
- + het_rates(k,88))* y(k,88)
+ loss(k,76) = (rxt(k,289)* y(k,92) +rxt(k,287)* y(k,93) +rxt(k,288)* y(k,98) &
+ + het_rates(k,89))* y(k,89)
prod(k,76) = (rxt(k,77) +rxt(k,78) +rxt(k,79) +rxt(k,80) +rxt(k,81) + &
rxt(k,84) +rxt(k,85) +rxt(k,86))*y(k,70) + (rxt(k,71) +rxt(k,72) + &
rxt(k,73) +rxt(k,74) +rxt(k,75) +rxt(k,76))*y(k,69) +rxt(k,62) &
@@ -436,32 +447,32 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
+ (rxt(k,159) +rxt(k,160))* y(k,25) +rxt(k,166)* y(k,28) &
+ (rxt(k,113) +rxt(k,114) +rxt(k,115))* y(k,40) +rxt(k,144)* y(k,61) &
+rxt(k,149)* y(k,62) +rxt(k,139)* y(k,63) +rxt(k,117)* y(k,69) &
- +rxt(k,118)* y(k,71) + 2._r8*rxt(k,127)* y(k,89) +rxt(k,122) &
- * y(k,98) + rxt(k,263) + het_rates(k,89))* y(k,89)
+ +rxt(k,118)* y(k,71) + 2._r8*rxt(k,127)* y(k,90) +rxt(k,122) &
+ * y(k,99) + rxt(k,263) + het_rates(k,90))* y(k,90)
prod(k,89) = (rxt(k,121)*y(k,43) +rxt(k,124)*y(k,71) +rxt(k,142)*y(k,63) + &
rxt(k,173)*y(k,28) +rxt(k,203)*y(k,5) +rxt(k,221)*y(k,18) + &
- rxt(k,224)*y(k,20) +rxt(k,245)*y(k,31) +rxt(k,251)*y(k,79) + &
- .500_r8*rxt(k,261)*y(k,35))*y(k,98) + (rxt(k,155)*y(k,25) + &
+ rxt(k,224)*y(k,20) +rxt(k,245)*y(k,31) +rxt(k,251)*y(k,80) + &
+ .500_r8*rxt(k,261)*y(k,35))*y(k,99) + (rxt(k,155)*y(k,25) + &
rxt(k,191)*y(k,3) +rxt(k,235)*y(k,63) +rxt(k,236)*y(k,69))*y(k,17) &
+ (rxt(k,158)*y(k,43) +rxt(k,220)*y(k,18) +rxt(k,223)*y(k,20)) &
*y(k,25) + (rxt(k,162)*y(k,28) +rxt(k,239)*y(k,61))*y(k,21) &
- + (rxt(k,11) +rxt(k,153))*y(k,52) +rxt(k,243)*y(k,94)*y(k,23) &
+ + (rxt(k,11) +rxt(k,153))*y(k,52) +rxt(k,243)*y(k,95)*y(k,23) &
+rxt(k,116)*y(k,70)*y(k,40) +rxt(k,112)*y(k,69)*y(k,43)
- loss(k,77) = (rxt(k,129)* y(k,69) +rxt(k,130)* y(k,70) +rxt(k,301)* y(k,99) &
- + het_rates(k,90))* y(k,90)
- prod(k,77) = (.800_r8*rxt(k,287)*y(k,92) +.900_r8*rxt(k,289)*y(k,91))*y(k,88) &
- +rxt(k,291)*y(k,91)*y(k,69)
+ loss(k,77) = (rxt(k,129)* y(k,69) +rxt(k,130)* y(k,70) +rxt(k,301)* y(k,100) &
+ + het_rates(k,91))* y(k,91)
+ prod(k,77) = (.800_r8*rxt(k,287)*y(k,93) +.900_r8*rxt(k,289)*y(k,92))*y(k,89) &
+ +rxt(k,291)*y(k,92)*y(k,69)
loss(k,64) = ((rxt(k,291) +rxt(k,292))* y(k,69) +rxt(k,290)* y(k,70) &
- +rxt(k,289)* y(k,88) + het_rates(k,91))* y(k,91)
- prod(k,64) =rxt(k,304)*y(k,100) +rxt(k,309)*y(k,101)
- loss(k,67) = (rxt(k,287)* y(k,88) + het_rates(k,92))* y(k,92)
- prod(k,67) = (rxt(k,297) +rxt(k,296)*y(k,55) +rxt(k,298)*y(k,61))*y(k,97) &
- +rxt(k,16)*y(k,61) +rxt(k,291)*y(k,91)*y(k,69) +rxt(k,295)*y(k,93) &
- *y(k,70) +rxt(k,300)*y(k,99)
+ +rxt(k,289)* y(k,89) + het_rates(k,92))* y(k,92)
+ prod(k,64) =rxt(k,304)*y(k,101) +rxt(k,309)*y(k,102)
+ loss(k,67) = (rxt(k,287)* y(k,89) + het_rates(k,93))* y(k,93)
+ prod(k,67) = (rxt(k,297) +rxt(k,296)*y(k,55) +rxt(k,298)*y(k,61))*y(k,98) &
+ +rxt(k,16)*y(k,61) +rxt(k,291)*y(k,92)*y(k,69) +rxt(k,295)*y(k,94) &
+ *y(k,70) +rxt(k,300)*y(k,100)
loss(k,71) = (rxt(k,293)* y(k,69) + (rxt(k,294) +rxt(k,295))* y(k,70) &
- + het_rates(k,93))* y(k,93)
- prod(k,71) =rxt(k,62)*y(k,55) +rxt(k,301)*y(k,99)*y(k,90) +rxt(k,310) &
- *y(k,101)
+ + het_rates(k,94))* y(k,94)
+ prod(k,71) =rxt(k,62)*y(k,55) +rxt(k,301)*y(k,100)*y(k,91) +rxt(k,310) &
+ *y(k,102)
loss(k,94) = (rxt(k,180)* y(k,8) +rxt(k,181)* y(k,9) +rxt(k,207)* y(k,10) &
+rxt(k,182)* y(k,11) +rxt(k,183)* y(k,12) +rxt(k,184)* y(k,13) &
+rxt(k,185)* y(k,14) +rxt(k,186)* y(k,15) +rxt(k,230)* y(k,16) &
@@ -471,24 +482,24 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
* y(k,45) +rxt(k,232)* y(k,46) +rxt(k,233)* y(k,47) +rxt(k,234) &
* y(k,48) + (rxt(k,187) +rxt(k,188))* y(k,49) + (rxt(k,147) + &
rxt(k,148))* y(k,56) + (rxt(k,97) +rxt(k,98))* y(k,70) +rxt(k,99) &
- * y(k,71) +rxt(k,95)* y(k,102) + rxt(k,96) + het_rates(k,94)) &
- * y(k,94)
- prod(k,94) = (rxt(k,6) +rxt(k,130)*y(k,90))*y(k,70) +rxt(k,12)*y(k,56) &
- +rxt(k,7)*y(k,71) +.850_r8*rxt(k,288)*y(k,97)*y(k,88) +rxt(k,1) &
- *y(k,102)
+ * y(k,71) +rxt(k,95)* y(k,103) + rxt(k,96) + het_rates(k,95)) &
+ * y(k,95)
+ prod(k,94) = (rxt(k,6) +rxt(k,130)*y(k,91))*y(k,70) +rxt(k,12)*y(k,56) &
+ +rxt(k,7)*y(k,71) +.850_r8*rxt(k,288)*y(k,98)*y(k,89) +rxt(k,1) &
+ *y(k,103)
loss(k,39) = (rxt(k,101)* y(k,69) +rxt(k,102)* y(k,70) + rxt(k,92) &
- + rxt(k,100) + het_rates(k,95))* y(k,95)
+ + rxt(k,100) + het_rates(k,96))* y(k,96)
prod(k,39) = (rxt(k,104) +rxt(k,103)*y(k,32) +rxt(k,105)*y(k,69) + &
- rxt(k,106)*y(k,70) +rxt(k,107)*y(k,71))*y(k,96) +rxt(k,7)*y(k,71)
+ rxt(k,106)*y(k,70) +rxt(k,107)*y(k,71))*y(k,97) +rxt(k,7)*y(k,71)
loss(k,40) = (rxt(k,103)* y(k,32) +rxt(k,105)* y(k,69) +rxt(k,106)* y(k,70) &
- +rxt(k,107)* y(k,71) + rxt(k,93) + rxt(k,104) + het_rates(k,96)) &
- * y(k,96)
- prod(k,40) =rxt(k,97)*y(k,94)*y(k,70)
- loss(k,79) = (rxt(k,296)* y(k,55) +rxt(k,298)* y(k,61) +rxt(k,288)* y(k,88) &
- + rxt(k,297) + het_rates(k,97))* y(k,97)
- prod(k,79) = (rxt(k,78) +rxt(k,80) +rxt(k,290)*y(k,91) +rxt(k,294)*y(k,93) + &
- rxt(k,302)*y(k,99) +rxt(k,306)*y(k,100))*y(k,70) +rxt(k,299)*y(k,99) &
- *y(k,32)
+ +rxt(k,107)* y(k,71) + rxt(k,93) + rxt(k,104) + het_rates(k,97)) &
+ * y(k,97)
+ prod(k,40) =rxt(k,97)*y(k,95)*y(k,70)
+ loss(k,79) = (rxt(k,296)* y(k,55) +rxt(k,298)* y(k,61) +rxt(k,288)* y(k,89) &
+ + rxt(k,297) + het_rates(k,98))* y(k,98)
+ prod(k,79) = (rxt(k,78) +rxt(k,80) +rxt(k,290)*y(k,92) +rxt(k,294)*y(k,94) + &
+ rxt(k,302)*y(k,100) +rxt(k,306)*y(k,101))*y(k,70) &
+ +rxt(k,299)*y(k,100)*y(k,32)
loss(k,98) = (rxt(k,203)* y(k,5) +rxt(k,219)* y(k,16) +rxt(k,237)* y(k,17) &
+rxt(k,221)* y(k,18) +rxt(k,222)* y(k,19) +rxt(k,224)* y(k,20) &
+rxt(k,240)* y(k,22) +rxt(k,241)* y(k,23) +rxt(k,226)* y(k,24) &
@@ -498,47 +509,47 @@ subroutine imp_prod_loss( avec_len, prod, loss, y, &
+rxt(k,228)* y(k,47) +rxt(k,229)* y(k,48) +rxt(k,176)* y(k,49) &
+rxt(k,152)* y(k,51) +rxt(k,128)* y(k,52) +rxt(k,179)* y(k,54) &
+rxt(k,143)* y(k,55) +rxt(k,151)* y(k,62) +rxt(k,142)* y(k,63) &
- +rxt(k,123)* y(k,69) +rxt(k,124)* y(k,71) +rxt(k,249)* y(k,73) &
- +rxt(k,255)* y(k,76) +rxt(k,260)* y(k,78) +rxt(k,251)* y(k,79) &
- +rxt(k,122)* y(k,89) + 2._r8*(rxt(k,125) +rxt(k,126))* y(k,98) &
- + het_rates(k,98))* y(k,98)
- prod(k,98) = (rxt(k,111)*y(k,41) +rxt(k,112)*y(k,43) +rxt(k,117)*y(k,89) + &
+ +rxt(k,123)* y(k,69) +rxt(k,124)* y(k,71) +rxt(k,249)* y(k,74) &
+ +rxt(k,255)* y(k,77) +rxt(k,260)* y(k,79) +rxt(k,251)* y(k,80) &
+ +rxt(k,122)* y(k,90) + 2._r8*(rxt(k,125) +rxt(k,126))* y(k,99) &
+ + het_rates(k,99))* y(k,99)
+ prod(k,98) = (rxt(k,111)*y(k,41) +rxt(k,112)*y(k,43) +rxt(k,117)*y(k,90) + &
rxt(k,175)*y(k,49) +rxt(k,178)*y(k,54) +rxt(k,204)*y(k,45) + &
rxt(k,206)*y(k,53) +rxt(k,236)*y(k,17))*y(k,69) &
+ (2.000_r8*rxt(k,114)*y(k,40) +rxt(k,118)*y(k,71) + &
- rxt(k,139)*y(k,63) +rxt(k,144)*y(k,61) +rxt(k,160)*y(k,25))*y(k,89) &
- + (rxt(k,94)*y(k,41) +2.000_r8*rxt(k,95)*y(k,102) + &
- rxt(k,187)*y(k,49) +rxt(k,210)*y(k,45) +rxt(k,242)*y(k,23))*y(k,94) &
- + (rxt(k,22) +.300_r8*rxt(k,240)*y(k,98))*y(k,22) + (rxt(k,3) + &
- rxt(k,214)*y(k,39))*y(k,102) +.330_r8*rxt(k,24)*y(k,23) &
+ rxt(k,139)*y(k,63) +rxt(k,144)*y(k,61) +rxt(k,160)*y(k,25))*y(k,90) &
+ + (rxt(k,94)*y(k,41) +2.000_r8*rxt(k,95)*y(k,103) + &
+ rxt(k,187)*y(k,49) +rxt(k,210)*y(k,45) +rxt(k,242)*y(k,23))*y(k,95) &
+ + (rxt(k,22) +.300_r8*rxt(k,240)*y(k,99))*y(k,22) + (rxt(k,3) + &
+ rxt(k,214)*y(k,39))*y(k,103) +.330_r8*rxt(k,24)*y(k,23) &
+rxt(k,119)*y(k,71)*y(k,40) +2.000_r8*rxt(k,4)*y(k,43) +rxt(k,9) &
*y(k,51) +rxt(k,10)*y(k,52) +rxt(k,57)*y(k,53) +rxt(k,58)*y(k,54) &
+.500_r8*rxt(k,265)*y(k,62)
- loss(k,80) = (rxt(k,299)* y(k,32) +rxt(k,302)* y(k,70) +rxt(k,301)* y(k,90) &
- + rxt(k,300) + het_rates(k,99))* y(k,99)
- prod(k,80) = (rxt(k,73) +rxt(k,74) +rxt(k,292)*y(k,91) +rxt(k,293)*y(k,93) + &
- rxt(k,305)*y(k,100) +rxt(k,311)*y(k,101))*y(k,69) + (rxt(k,79) + &
- rxt(k,81))*y(k,70) + (rxt(k,303)*y(k,100) +rxt(k,308)*y(k,101)) &
- *y(k,88) +rxt(k,285)*y(k,100) +rxt(k,284)*y(k,101)
- loss(k,60) = (rxt(k,305)* y(k,69) +rxt(k,306)* y(k,70) +rxt(k,303)* y(k,88) &
- + rxt(k,285) + rxt(k,304) + het_rates(k,100))* y(k,100)
+ loss(k,80) = (rxt(k,299)* y(k,32) +rxt(k,302)* y(k,70) +rxt(k,301)* y(k,91) &
+ + rxt(k,300) + het_rates(k,100))* y(k,100)
+ prod(k,80) = (rxt(k,73) +rxt(k,74) +rxt(k,292)*y(k,92) +rxt(k,293)*y(k,94) + &
+ rxt(k,305)*y(k,101) +rxt(k,311)*y(k,102))*y(k,69) + (rxt(k,79) + &
+ rxt(k,81))*y(k,70) + (rxt(k,303)*y(k,101) +rxt(k,308)*y(k,102)) &
+ *y(k,89) +rxt(k,285)*y(k,101) +rxt(k,284)*y(k,102)
+ loss(k,60) = (rxt(k,305)* y(k,69) +rxt(k,306)* y(k,70) +rxt(k,303)* y(k,89) &
+ + rxt(k,285) + rxt(k,304) + het_rates(k,101))* y(k,101)
prod(k,60) = (rxt(k,75) +rxt(k,76))*y(k,69) + (rxt(k,85) +rxt(k,86))*y(k,70) &
- + (rxt(k,286) +rxt(k,307)*y(k,88))*y(k,101)
- loss(k,59) = (rxt(k,311)* y(k,69) + (rxt(k,307) +rxt(k,308))* y(k,88) &
+ + (rxt(k,286) +rxt(k,307)*y(k,89))*y(k,102)
+ loss(k,59) = (rxt(k,311)* y(k,69) + (rxt(k,307) +rxt(k,308))* y(k,89) &
+ rxt(k,284) + rxt(k,286) + rxt(k,309) + rxt(k,310) &
- + het_rates(k,101))* y(k,101)
+ + het_rates(k,102))* y(k,102)
prod(k,59) = (rxt(k,71) +rxt(k,72))*y(k,69) + (rxt(k,77) +rxt(k,84))*y(k,70)
- loss(k,102) = (rxt(k,214)* y(k,39) +rxt(k,262)* y(k,80) +rxt(k,95)* y(k,94) &
- + rxt(k,1) + rxt(k,2) + rxt(k,3) + het_rates(k,102))* y(k,102)
- prod(k,102) = (rxt(k,120)*y(k,41) +rxt(k,121)*y(k,43) +rxt(k,122)*y(k,89) + &
- rxt(k,125)*y(k,98) +rxt(k,128)*y(k,52) +rxt(k,152)*y(k,51) + &
+ loss(k,102) = (rxt(k,214)* y(k,39) +rxt(k,262)* y(k,81) +rxt(k,95)* y(k,95) &
+ + rxt(k,1) + rxt(k,2) + rxt(k,3) + het_rates(k,103))* y(k,103)
+ prod(k,102) = (rxt(k,120)*y(k,41) +rxt(k,121)*y(k,43) +rxt(k,122)*y(k,90) + &
+ rxt(k,125)*y(k,99) +rxt(k,128)*y(k,52) +rxt(k,152)*y(k,51) + &
rxt(k,176)*y(k,49) +rxt(k,179)*y(k,54) +rxt(k,205)*y(k,45) + &
rxt(k,219)*y(k,16) +rxt(k,221)*y(k,18) +rxt(k,222)*y(k,19) + &
rxt(k,224)*y(k,20) +rxt(k,229)*y(k,48) +rxt(k,237)*y(k,17) + &
- rxt(k,240)*y(k,22) +rxt(k,241)*y(k,23))*y(k,98) &
+ rxt(k,240)*y(k,22) +rxt(k,241)*y(k,23))*y(k,99) &
+ (rxt(k,268)*y(k,54) +rxt(k,274)*y(k,54) +rxt(k,275)*y(k,53) + &
rxt(k,279)*y(k,54) +rxt(k,280)*y(k,53))*y(k,49) +.050_r8*rxt(k,24) &
- *y(k,23) +rxt(k,115)*y(k,89)*y(k,40) +rxt(k,87)*y(k,44)
+ *y(k,23) +rxt(k,115)*y(k,90)*y(k,40) +rxt(k,87)*y(k,44)
end do
end subroutine imp_prod_loss
end module mo_prod_loss
diff --git a/src/chemistry/pp_waccm_ma_mam5/mo_rxt_rates_conv.F90 b/src/chemistry/pp_waccm_ma_mam5/mo_rxt_rates_conv.F90
index d8f52c4676..bbe9d4d986 100644
--- a/src/chemistry/pp_waccm_ma_mam5/mo_rxt_rates_conv.F90
+++ b/src/chemistry/pp_waccm_ma_mam5/mo_rxt_rates_conv.F90
@@ -8,9 +8,9 @@ subroutine set_rates( rxt_rates, sol, ncol )
real(r8), intent(inout) :: rxt_rates(:,:,:)
real(r8), intent(in) :: sol(:,:,:)
integer, intent(in) :: ncol
- rxt_rates(:ncol,:, 1) = rxt_rates(:ncol,:, 1)*sol(:ncol,:, 102) ! rate_const*H2O
- rxt_rates(:ncol,:, 2) = rxt_rates(:ncol,:, 2)*sol(:ncol,:, 102) ! rate_const*H2O
- rxt_rates(:ncol,:, 3) = rxt_rates(:ncol,:, 3)*sol(:ncol,:, 102) ! rate_const*H2O
+ rxt_rates(:ncol,:, 1) = rxt_rates(:ncol,:, 1)*sol(:ncol,:, 103) ! rate_const*H2O
+ rxt_rates(:ncol,:, 2) = rxt_rates(:ncol,:, 2)*sol(:ncol,:, 103) ! rate_const*H2O
+ rxt_rates(:ncol,:, 3) = rxt_rates(:ncol,:, 3)*sol(:ncol,:, 103) ! rate_const*H2O
rxt_rates(:ncol,:, 4) = rxt_rates(:ncol,:, 4)*sol(:ncol,:, 43) ! rate_const*H2O2
rxt_rates(:ncol,:, 5) = rxt_rates(:ncol,:, 5)*sol(:ncol,:, 70) ! rate_const*O2
rxt_rates(:ncol,:, 6) = rxt_rates(:ncol,:, 6)*sol(:ncol,:, 70) ! rate_const*O2
@@ -66,8 +66,8 @@ subroutine set_rates( rxt_rates, sol, ncol )
rxt_rates(:ncol,:, 56) = rxt_rates(:ncol,:, 56)*sol(:ncol,:, 50) ! rate_const*HF
rxt_rates(:ncol,:, 57) = rxt_rates(:ncol,:, 57)*sol(:ncol,:, 53) ! rate_const*HOBR
rxt_rates(:ncol,:, 58) = rxt_rates(:ncol,:, 58)*sol(:ncol,:, 54) ! rate_const*HOCL
- rxt_rates(:ncol,:, 59) = rxt_rates(:ncol,:, 59)*sol(:ncol,:, 72) ! rate_const*OCLO
- rxt_rates(:ncol,:, 60) = rxt_rates(:ncol,:, 60)*sol(:ncol,:, 77) ! rate_const*SF6
+ rxt_rates(:ncol,:, 59) = rxt_rates(:ncol,:, 59)*sol(:ncol,:, 73) ! rate_const*OCLO
+ rxt_rates(:ncol,:, 60) = rxt_rates(:ncol,:, 60)*sol(:ncol,:, 78) ! rate_const*SF6
rxt_rates(:ncol,:, 61) = rxt_rates(:ncol,:, 61)*sol(:ncol,:, 32) ! rate_const*CO2
rxt_rates(:ncol,:, 62) = rxt_rates(:ncol,:, 62)*sol(:ncol,:, 55) ! rate_const*N
! rate_const*N2
@@ -95,49 +95,49 @@ subroutine set_rates( rxt_rates, sol, ncol )
rxt_rates(:ncol,:, 85) = rxt_rates(:ncol,:, 85)*sol(:ncol,:, 70) ! rate_const*O2
rxt_rates(:ncol,:, 86) = rxt_rates(:ncol,:, 86)*sol(:ncol,:, 70) ! rate_const*O2
rxt_rates(:ncol,:, 87) = rxt_rates(:ncol,:, 87)*sol(:ncol,:, 44) ! rate_const*H2SO4
- rxt_rates(:ncol,:, 88) = rxt_rates(:ncol,:, 88)*sol(:ncol,:, 73) ! rate_const*OCS
- rxt_rates(:ncol,:, 89) = rxt_rates(:ncol,:, 89)*sol(:ncol,:, 78) ! rate_const*SO
- rxt_rates(:ncol,:, 90) = rxt_rates(:ncol,:, 90)*sol(:ncol,:, 79) ! rate_const*SO2
- rxt_rates(:ncol,:, 91) = rxt_rates(:ncol,:, 91)*sol(:ncol,:, 80) ! rate_const*SO3
- rxt_rates(:ncol,:, 92) = rxt_rates(:ncol,:, 92)*sol(:ncol,:, 95) ! rate_const*O2_1D
- rxt_rates(:ncol,:, 93) = rxt_rates(:ncol,:, 93)*sol(:ncol,:, 96) ! rate_const*O2_1S
- rxt_rates(:ncol,:, 94) = rxt_rates(:ncol,:, 94)*sol(:ncol,:, 94)*sol(:ncol,:, 41) ! rate_const*O1D*H2
- rxt_rates(:ncol,:, 95) = rxt_rates(:ncol,:, 95)*sol(:ncol,:, 94)*sol(:ncol,:, 102) ! rate_const*O1D*H2O
- rxt_rates(:ncol,:, 96) = rxt_rates(:ncol,:, 96)*sol(:ncol,:, 94) ! rate_const*N2*O1D
- rxt_rates(:ncol,:, 97) = rxt_rates(:ncol,:, 97)*sol(:ncol,:, 94)*sol(:ncol,:, 70) ! rate_const*O1D*O2
- rxt_rates(:ncol,:, 98) = rxt_rates(:ncol,:, 98)*sol(:ncol,:, 94)*sol(:ncol,:, 70) ! rate_const*O1D*O2
- rxt_rates(:ncol,:, 99) = rxt_rates(:ncol,:, 99)*sol(:ncol,:, 94)*sol(:ncol,:, 71) ! rate_const*O1D*O3
- rxt_rates(:ncol,:, 100) = rxt_rates(:ncol,:, 100)*sol(:ncol,:, 95) ! rate_const*N2*O2_1D
- rxt_rates(:ncol,:, 101) = rxt_rates(:ncol,:, 101)*sol(:ncol,:, 95)*sol(:ncol,:, 69) ! rate_const*O2_1D*O
- rxt_rates(:ncol,:, 102) = rxt_rates(:ncol,:, 102)*sol(:ncol,:, 95)*sol(:ncol,:, 70) ! rate_const*O2_1D*O2
- rxt_rates(:ncol,:, 103) = rxt_rates(:ncol,:, 103)*sol(:ncol,:, 96)*sol(:ncol,:, 32) ! rate_const*O2_1S*CO2
- rxt_rates(:ncol,:, 104) = rxt_rates(:ncol,:, 104)*sol(:ncol,:, 96) ! rate_const*N2*O2_1S
- rxt_rates(:ncol,:, 105) = rxt_rates(:ncol,:, 105)*sol(:ncol,:, 96)*sol(:ncol,:, 69) ! rate_const*O2_1S*O
- rxt_rates(:ncol,:, 106) = rxt_rates(:ncol,:, 106)*sol(:ncol,:, 96)*sol(:ncol,:, 70) ! rate_const*O2_1S*O2
- rxt_rates(:ncol,:, 107) = rxt_rates(:ncol,:, 107)*sol(:ncol,:, 96)*sol(:ncol,:, 71) ! rate_const*O2_1S*O3
+ rxt_rates(:ncol,:, 88) = rxt_rates(:ncol,:, 88)*sol(:ncol,:, 74) ! rate_const*OCS
+ rxt_rates(:ncol,:, 89) = rxt_rates(:ncol,:, 89)*sol(:ncol,:, 79) ! rate_const*SO
+ rxt_rates(:ncol,:, 90) = rxt_rates(:ncol,:, 90)*sol(:ncol,:, 80) ! rate_const*SO2
+ rxt_rates(:ncol,:, 91) = rxt_rates(:ncol,:, 91)*sol(:ncol,:, 81) ! rate_const*SO3
+ rxt_rates(:ncol,:, 92) = rxt_rates(:ncol,:, 92)*sol(:ncol,:, 96) ! rate_const*O2_1D
+ rxt_rates(:ncol,:, 93) = rxt_rates(:ncol,:, 93)*sol(:ncol,:, 97) ! rate_const*O2_1S
+ rxt_rates(:ncol,:, 94) = rxt_rates(:ncol,:, 94)*sol(:ncol,:, 95)*sol(:ncol,:, 41) ! rate_const*O1D*H2
+ rxt_rates(:ncol,:, 95) = rxt_rates(:ncol,:, 95)*sol(:ncol,:, 95)*sol(:ncol,:, 103) ! rate_const*O1D*H2O
+ rxt_rates(:ncol,:, 96) = rxt_rates(:ncol,:, 96)*sol(:ncol,:, 95) ! rate_const*N2*O1D
+ rxt_rates(:ncol,:, 97) = rxt_rates(:ncol,:, 97)*sol(:ncol,:, 95)*sol(:ncol,:, 70) ! rate_const*O1D*O2
+ rxt_rates(:ncol,:, 98) = rxt_rates(:ncol,:, 98)*sol(:ncol,:, 95)*sol(:ncol,:, 70) ! rate_const*O1D*O2
+ rxt_rates(:ncol,:, 99) = rxt_rates(:ncol,:, 99)*sol(:ncol,:, 95)*sol(:ncol,:, 71) ! rate_const*O1D*O3
+ rxt_rates(:ncol,:, 100) = rxt_rates(:ncol,:, 100)*sol(:ncol,:, 96) ! rate_const*N2*O2_1D
+ rxt_rates(:ncol,:, 101) = rxt_rates(:ncol,:, 101)*sol(:ncol,:, 96)*sol(:ncol,:, 69) ! rate_const*O2_1D*O
+ rxt_rates(:ncol,:, 102) = rxt_rates(:ncol,:, 102)*sol(:ncol,:, 96)*sol(:ncol,:, 70) ! rate_const*O2_1D*O2
+ rxt_rates(:ncol,:, 103) = rxt_rates(:ncol,:, 103)*sol(:ncol,:, 97)*sol(:ncol,:, 32) ! rate_const*O2_1S*CO2
+ rxt_rates(:ncol,:, 104) = rxt_rates(:ncol,:, 104)*sol(:ncol,:, 97) ! rate_const*N2*O2_1S
+ rxt_rates(:ncol,:, 105) = rxt_rates(:ncol,:, 105)*sol(:ncol,:, 97)*sol(:ncol,:, 69) ! rate_const*O2_1S*O
+ rxt_rates(:ncol,:, 106) = rxt_rates(:ncol,:, 106)*sol(:ncol,:, 97)*sol(:ncol,:, 70) ! rate_const*O2_1S*O2
+ rxt_rates(:ncol,:, 107) = rxt_rates(:ncol,:, 107)*sol(:ncol,:, 97)*sol(:ncol,:, 71) ! rate_const*O2_1S*O3
rxt_rates(:ncol,:, 108) = rxt_rates(:ncol,:, 108)*sol(:ncol,:, 69)*sol(:ncol,:, 71) ! rate_const*O*O3
rxt_rates(:ncol,:, 109) = rxt_rates(:ncol,:, 109)*sol(:ncol,:, 69)*sol(:ncol,:, 69) ! rate_const*M*O*O
rxt_rates(:ncol,:, 110) = rxt_rates(:ncol,:, 110)*sol(:ncol,:, 69)*sol(:ncol,:, 70) ! rate_const*M*O*O2
rxt_rates(:ncol,:, 111) = rxt_rates(:ncol,:, 111)*sol(:ncol,:, 41)*sol(:ncol,:, 69) ! rate_const*H2*O
rxt_rates(:ncol,:, 112) = rxt_rates(:ncol,:, 112)*sol(:ncol,:, 43)*sol(:ncol,:, 69) ! rate_const*H2O2*O
- rxt_rates(:ncol,:, 113) = rxt_rates(:ncol,:, 113)*sol(:ncol,:, 40)*sol(:ncol,:, 89) ! rate_const*H*HO2
- rxt_rates(:ncol,:, 114) = rxt_rates(:ncol,:, 114)*sol(:ncol,:, 40)*sol(:ncol,:, 89) ! rate_const*H*HO2
- rxt_rates(:ncol,:, 115) = rxt_rates(:ncol,:, 115)*sol(:ncol,:, 40)*sol(:ncol,:, 89) ! rate_const*H*HO2
+ rxt_rates(:ncol,:, 113) = rxt_rates(:ncol,:, 113)*sol(:ncol,:, 40)*sol(:ncol,:, 90) ! rate_const*H*HO2
+ rxt_rates(:ncol,:, 114) = rxt_rates(:ncol,:, 114)*sol(:ncol,:, 40)*sol(:ncol,:, 90) ! rate_const*H*HO2
+ rxt_rates(:ncol,:, 115) = rxt_rates(:ncol,:, 115)*sol(:ncol,:, 40)*sol(:ncol,:, 90) ! rate_const*H*HO2
rxt_rates(:ncol,:, 116) = rxt_rates(:ncol,:, 116)*sol(:ncol,:, 40)*sol(:ncol,:, 70) ! rate_const*M*H*O2
- rxt_rates(:ncol,:, 117) = rxt_rates(:ncol,:, 117)*sol(:ncol,:, 89)*sol(:ncol,:, 69) ! rate_const*HO2*O
- rxt_rates(:ncol,:, 118) = rxt_rates(:ncol,:, 118)*sol(:ncol,:, 89)*sol(:ncol,:, 71) ! rate_const*HO2*O3
+ rxt_rates(:ncol,:, 117) = rxt_rates(:ncol,:, 117)*sol(:ncol,:, 90)*sol(:ncol,:, 69) ! rate_const*HO2*O
+ rxt_rates(:ncol,:, 118) = rxt_rates(:ncol,:, 118)*sol(:ncol,:, 90)*sol(:ncol,:, 71) ! rate_const*HO2*O3
rxt_rates(:ncol,:, 119) = rxt_rates(:ncol,:, 119)*sol(:ncol,:, 40)*sol(:ncol,:, 71) ! rate_const*H*O3
- rxt_rates(:ncol,:, 120) = rxt_rates(:ncol,:, 120)*sol(:ncol,:, 98)*sol(:ncol,:, 41) ! rate_const*OH*H2
- rxt_rates(:ncol,:, 121) = rxt_rates(:ncol,:, 121)*sol(:ncol,:, 98)*sol(:ncol,:, 43) ! rate_const*OH*H2O2
- rxt_rates(:ncol,:, 122) = rxt_rates(:ncol,:, 122)*sol(:ncol,:, 98)*sol(:ncol,:, 89) ! rate_const*OH*HO2
- rxt_rates(:ncol,:, 123) = rxt_rates(:ncol,:, 123)*sol(:ncol,:, 98)*sol(:ncol,:, 69) ! rate_const*OH*O
- rxt_rates(:ncol,:, 124) = rxt_rates(:ncol,:, 124)*sol(:ncol,:, 98)*sol(:ncol,:, 71) ! rate_const*OH*O3
- rxt_rates(:ncol,:, 125) = rxt_rates(:ncol,:, 125)*sol(:ncol,:, 98)*sol(:ncol,:, 98) ! rate_const*OH*OH
- rxt_rates(:ncol,:, 126) = rxt_rates(:ncol,:, 126)*sol(:ncol,:, 98)*sol(:ncol,:, 98) ! rate_const*M*OH*OH
- rxt_rates(:ncol,:, 127) = rxt_rates(:ncol,:, 127)*sol(:ncol,:, 89)*sol(:ncol,:, 89) ! rate_const*HO2*HO2
- rxt_rates(:ncol,:, 128) = rxt_rates(:ncol,:, 128)*sol(:ncol,:, 52)*sol(:ncol,:, 98) ! rate_const*HO2NO2*OH
- rxt_rates(:ncol,:, 129) = rxt_rates(:ncol,:, 129)*sol(:ncol,:, 90)*sol(:ncol,:, 69) ! rate_const*N2D*O
- rxt_rates(:ncol,:, 130) = rxt_rates(:ncol,:, 130)*sol(:ncol,:, 90)*sol(:ncol,:, 70) ! rate_const*N2D*O2
+ rxt_rates(:ncol,:, 120) = rxt_rates(:ncol,:, 120)*sol(:ncol,:, 99)*sol(:ncol,:, 41) ! rate_const*OH*H2
+ rxt_rates(:ncol,:, 121) = rxt_rates(:ncol,:, 121)*sol(:ncol,:, 99)*sol(:ncol,:, 43) ! rate_const*OH*H2O2
+ rxt_rates(:ncol,:, 122) = rxt_rates(:ncol,:, 122)*sol(:ncol,:, 99)*sol(:ncol,:, 90) ! rate_const*OH*HO2
+ rxt_rates(:ncol,:, 123) = rxt_rates(:ncol,:, 123)*sol(:ncol,:, 99)*sol(:ncol,:, 69) ! rate_const*OH*O
+ rxt_rates(:ncol,:, 124) = rxt_rates(:ncol,:, 124)*sol(:ncol,:, 99)*sol(:ncol,:, 71) ! rate_const*OH*O3
+ rxt_rates(:ncol,:, 125) = rxt_rates(:ncol,:, 125)*sol(:ncol,:, 99)*sol(:ncol,:, 99) ! rate_const*OH*OH
+ rxt_rates(:ncol,:, 126) = rxt_rates(:ncol,:, 126)*sol(:ncol,:, 99)*sol(:ncol,:, 99) ! rate_const*M*OH*OH
+ rxt_rates(:ncol,:, 127) = rxt_rates(:ncol,:, 127)*sol(:ncol,:, 90)*sol(:ncol,:, 90) ! rate_const*HO2*HO2
+ rxt_rates(:ncol,:, 128) = rxt_rates(:ncol,:, 128)*sol(:ncol,:, 52)*sol(:ncol,:, 99) ! rate_const*HO2NO2*OH
+ rxt_rates(:ncol,:, 129) = rxt_rates(:ncol,:, 129)*sol(:ncol,:, 91)*sol(:ncol,:, 69) ! rate_const*N2D*O
+ rxt_rates(:ncol,:, 130) = rxt_rates(:ncol,:, 130)*sol(:ncol,:, 91)*sol(:ncol,:, 70) ! rate_const*N2D*O2
rxt_rates(:ncol,:, 131) = rxt_rates(:ncol,:, 131)*sol(:ncol,:, 55)*sol(:ncol,:, 61) ! rate_const*N*NO
rxt_rates(:ncol,:, 132) = rxt_rates(:ncol,:, 132)*sol(:ncol,:, 55)*sol(:ncol,:, 62) ! rate_const*N*NO2
rxt_rates(:ncol,:, 133) = rxt_rates(:ncol,:, 133)*sol(:ncol,:, 55)*sol(:ncol,:, 62) ! rate_const*N*NO2
@@ -146,131 +146,131 @@ subroutine set_rates( rxt_rates, sol, ncol )
rxt_rates(:ncol,:, 136) = rxt_rates(:ncol,:, 136)*sol(:ncol,:, 62)*sol(:ncol,:, 69) ! rate_const*NO2*O
rxt_rates(:ncol,:, 137) = rxt_rates(:ncol,:, 137)*sol(:ncol,:, 62)*sol(:ncol,:, 71) ! rate_const*NO2*O3
rxt_rates(:ncol,:, 138) = rxt_rates(:ncol,:, 138)*sol(:ncol,:, 62)*sol(:ncol,:, 69) ! rate_const*M*NO2*O
- rxt_rates(:ncol,:, 139) = rxt_rates(:ncol,:, 139)*sol(:ncol,:, 63)*sol(:ncol,:, 89) ! rate_const*NO3*HO2
+ rxt_rates(:ncol,:, 139) = rxt_rates(:ncol,:, 139)*sol(:ncol,:, 63)*sol(:ncol,:, 90) ! rate_const*NO3*HO2
rxt_rates(:ncol,:, 140) = rxt_rates(:ncol,:, 140)*sol(:ncol,:, 63)*sol(:ncol,:, 61) ! rate_const*NO3*NO
rxt_rates(:ncol,:, 141) = rxt_rates(:ncol,:, 141)*sol(:ncol,:, 63)*sol(:ncol,:, 69) ! rate_const*NO3*O
- rxt_rates(:ncol,:, 142) = rxt_rates(:ncol,:, 142)*sol(:ncol,:, 63)*sol(:ncol,:, 98) ! rate_const*NO3*OH
- rxt_rates(:ncol,:, 143) = rxt_rates(:ncol,:, 143)*sol(:ncol,:, 55)*sol(:ncol,:, 98) ! rate_const*N*OH
- rxt_rates(:ncol,:, 144) = rxt_rates(:ncol,:, 144)*sol(:ncol,:, 61)*sol(:ncol,:, 89) ! rate_const*NO*HO2
+ rxt_rates(:ncol,:, 142) = rxt_rates(:ncol,:, 142)*sol(:ncol,:, 63)*sol(:ncol,:, 99) ! rate_const*NO3*OH
+ rxt_rates(:ncol,:, 143) = rxt_rates(:ncol,:, 143)*sol(:ncol,:, 55)*sol(:ncol,:, 99) ! rate_const*N*OH
+ rxt_rates(:ncol,:, 144) = rxt_rates(:ncol,:, 144)*sol(:ncol,:, 61)*sol(:ncol,:, 90) ! rate_const*NO*HO2
rxt_rates(:ncol,:, 145) = rxt_rates(:ncol,:, 145)*sol(:ncol,:, 61)*sol(:ncol,:, 71) ! rate_const*NO*O3
rxt_rates(:ncol,:, 146) = rxt_rates(:ncol,:, 146)*sol(:ncol,:, 61)*sol(:ncol,:, 69) ! rate_const*M*NO*O
- rxt_rates(:ncol,:, 147) = rxt_rates(:ncol,:, 147)*sol(:ncol,:, 94)*sol(:ncol,:, 56) ! rate_const*O1D*N2O
- rxt_rates(:ncol,:, 148) = rxt_rates(:ncol,:, 148)*sol(:ncol,:, 94)*sol(:ncol,:, 56) ! rate_const*O1D*N2O
- rxt_rates(:ncol,:, 149) = rxt_rates(:ncol,:, 149)*sol(:ncol,:, 62)*sol(:ncol,:, 89) ! rate_const*M*NO2*HO2
+ rxt_rates(:ncol,:, 147) = rxt_rates(:ncol,:, 147)*sol(:ncol,:, 95)*sol(:ncol,:, 56) ! rate_const*O1D*N2O
+ rxt_rates(:ncol,:, 148) = rxt_rates(:ncol,:, 148)*sol(:ncol,:, 95)*sol(:ncol,:, 56) ! rate_const*O1D*N2O
+ rxt_rates(:ncol,:, 149) = rxt_rates(:ncol,:, 149)*sol(:ncol,:, 62)*sol(:ncol,:, 90) ! rate_const*M*NO2*HO2
rxt_rates(:ncol,:, 150) = rxt_rates(:ncol,:, 150)*sol(:ncol,:, 62)*sol(:ncol,:, 63) ! rate_const*M*NO2*NO3
- rxt_rates(:ncol,:, 151) = rxt_rates(:ncol,:, 151)*sol(:ncol,:, 62)*sol(:ncol,:, 98) ! rate_const*M*NO2*OH
- rxt_rates(:ncol,:, 152) = rxt_rates(:ncol,:, 152)*sol(:ncol,:, 51)*sol(:ncol,:, 98) ! rate_const*HNO3*OH
+ rxt_rates(:ncol,:, 151) = rxt_rates(:ncol,:, 151)*sol(:ncol,:, 62)*sol(:ncol,:, 99) ! rate_const*M*NO2*OH
+ rxt_rates(:ncol,:, 152) = rxt_rates(:ncol,:, 152)*sol(:ncol,:, 51)*sol(:ncol,:, 99) ! rate_const*HNO3*OH
rxt_rates(:ncol,:, 153) = rxt_rates(:ncol,:, 153)*sol(:ncol,:, 52) ! rate_const*M*HO2NO2
rxt_rates(:ncol,:, 154) = rxt_rates(:ncol,:, 154)*sol(:ncol,:, 57) ! rate_const*M*N2O5
rxt_rates(:ncol,:, 155) = rxt_rates(:ncol,:, 155)*sol(:ncol,:, 25)*sol(:ncol,:, 17) ! rate_const*CL*CH2O
rxt_rates(:ncol,:, 156) = rxt_rates(:ncol,:, 156)*sol(:ncol,:, 25)*sol(:ncol,:, 23) ! rate_const*CL*CH4
rxt_rates(:ncol,:, 157) = rxt_rates(:ncol,:, 157)*sol(:ncol,:, 25)*sol(:ncol,:, 41) ! rate_const*CL*H2
rxt_rates(:ncol,:, 158) = rxt_rates(:ncol,:, 158)*sol(:ncol,:, 25)*sol(:ncol,:, 43) ! rate_const*CL*H2O2
- rxt_rates(:ncol,:, 159) = rxt_rates(:ncol,:, 159)*sol(:ncol,:, 25)*sol(:ncol,:, 89) ! rate_const*CL*HO2
- rxt_rates(:ncol,:, 160) = rxt_rates(:ncol,:, 160)*sol(:ncol,:, 25)*sol(:ncol,:, 89) ! rate_const*CL*HO2
+ rxt_rates(:ncol,:, 159) = rxt_rates(:ncol,:, 159)*sol(:ncol,:, 25)*sol(:ncol,:, 90) ! rate_const*CL*HO2
+ rxt_rates(:ncol,:, 160) = rxt_rates(:ncol,:, 160)*sol(:ncol,:, 25)*sol(:ncol,:, 90) ! rate_const*CL*HO2
rxt_rates(:ncol,:, 161) = rxt_rates(:ncol,:, 161)*sol(:ncol,:, 25)*sol(:ncol,:, 71) ! rate_const*CL*O3
rxt_rates(:ncol,:, 162) = rxt_rates(:ncol,:, 162)*sol(:ncol,:, 28)*sol(:ncol,:, 21) ! rate_const*CLO*CH3O2
rxt_rates(:ncol,:, 163) = rxt_rates(:ncol,:, 163)*sol(:ncol,:, 28)*sol(:ncol,:, 28) ! rate_const*CLO*CLO
rxt_rates(:ncol,:, 164) = rxt_rates(:ncol,:, 164)*sol(:ncol,:, 28)*sol(:ncol,:, 28) ! rate_const*CLO*CLO
rxt_rates(:ncol,:, 165) = rxt_rates(:ncol,:, 165)*sol(:ncol,:, 28)*sol(:ncol,:, 28) ! rate_const*CLO*CLO
- rxt_rates(:ncol,:, 166) = rxt_rates(:ncol,:, 166)*sol(:ncol,:, 28)*sol(:ncol,:, 89) ! rate_const*CLO*HO2
+ rxt_rates(:ncol,:, 166) = rxt_rates(:ncol,:, 166)*sol(:ncol,:, 28)*sol(:ncol,:, 90) ! rate_const*CLO*HO2
rxt_rates(:ncol,:, 167) = rxt_rates(:ncol,:, 167)*sol(:ncol,:, 28)*sol(:ncol,:, 61) ! rate_const*CLO*NO
rxt_rates(:ncol,:, 168) = rxt_rates(:ncol,:, 168)*sol(:ncol,:, 29)*sol(:ncol,:, 25) ! rate_const*CLONO2*CL
rxt_rates(:ncol,:, 169) = rxt_rates(:ncol,:, 169)*sol(:ncol,:, 28)*sol(:ncol,:, 62) ! rate_const*M*CLO*NO2
rxt_rates(:ncol,:, 170) = rxt_rates(:ncol,:, 170)*sol(:ncol,:, 29)*sol(:ncol,:, 69) ! rate_const*CLONO2*O
- rxt_rates(:ncol,:, 171) = rxt_rates(:ncol,:, 171)*sol(:ncol,:, 29)*sol(:ncol,:, 98) ! rate_const*CLONO2*OH
+ rxt_rates(:ncol,:, 171) = rxt_rates(:ncol,:, 171)*sol(:ncol,:, 29)*sol(:ncol,:, 99) ! rate_const*CLONO2*OH
rxt_rates(:ncol,:, 172) = rxt_rates(:ncol,:, 172)*sol(:ncol,:, 28)*sol(:ncol,:, 69) ! rate_const*CLO*O
- rxt_rates(:ncol,:, 173) = rxt_rates(:ncol,:, 173)*sol(:ncol,:, 28)*sol(:ncol,:, 98) ! rate_const*CLO*OH
- rxt_rates(:ncol,:, 174) = rxt_rates(:ncol,:, 174)*sol(:ncol,:, 28)*sol(:ncol,:, 98) ! rate_const*CLO*OH
+ rxt_rates(:ncol,:, 173) = rxt_rates(:ncol,:, 173)*sol(:ncol,:, 28)*sol(:ncol,:, 99) ! rate_const*CLO*OH
+ rxt_rates(:ncol,:, 174) = rxt_rates(:ncol,:, 174)*sol(:ncol,:, 28)*sol(:ncol,:, 99) ! rate_const*CLO*OH
rxt_rates(:ncol,:, 175) = rxt_rates(:ncol,:, 175)*sol(:ncol,:, 49)*sol(:ncol,:, 69) ! rate_const*HCL*O
- rxt_rates(:ncol,:, 176) = rxt_rates(:ncol,:, 176)*sol(:ncol,:, 49)*sol(:ncol,:, 98) ! rate_const*HCL*OH
+ rxt_rates(:ncol,:, 176) = rxt_rates(:ncol,:, 176)*sol(:ncol,:, 49)*sol(:ncol,:, 99) ! rate_const*HCL*OH
rxt_rates(:ncol,:, 177) = rxt_rates(:ncol,:, 177)*sol(:ncol,:, 54)*sol(:ncol,:, 25) ! rate_const*HOCL*CL
rxt_rates(:ncol,:, 178) = rxt_rates(:ncol,:, 178)*sol(:ncol,:, 54)*sol(:ncol,:, 69) ! rate_const*HOCL*O
- rxt_rates(:ncol,:, 179) = rxt_rates(:ncol,:, 179)*sol(:ncol,:, 54)*sol(:ncol,:, 98) ! rate_const*HOCL*OH
- rxt_rates(:ncol,:, 180) = rxt_rates(:ncol,:, 180)*sol(:ncol,:, 94)*sol(:ncol,:, 8) ! rate_const*O1D*CCL4
- rxt_rates(:ncol,:, 181) = rxt_rates(:ncol,:, 181)*sol(:ncol,:, 94)*sol(:ncol,:, 9) ! rate_const*O1D*CF2CLBR
- rxt_rates(:ncol,:, 182) = rxt_rates(:ncol,:, 182)*sol(:ncol,:, 94)*sol(:ncol,:, 11) ! rate_const*O1D*CFC11
- rxt_rates(:ncol,:, 183) = rxt_rates(:ncol,:, 183)*sol(:ncol,:, 94)*sol(:ncol,:, 12) ! rate_const*O1D*CFC113
- rxt_rates(:ncol,:, 184) = rxt_rates(:ncol,:, 184)*sol(:ncol,:, 94)*sol(:ncol,:, 13) ! rate_const*O1D*CFC114
- rxt_rates(:ncol,:, 185) = rxt_rates(:ncol,:, 185)*sol(:ncol,:, 94)*sol(:ncol,:, 14) ! rate_const*O1D*CFC115
- rxt_rates(:ncol,:, 186) = rxt_rates(:ncol,:, 186)*sol(:ncol,:, 94)*sol(:ncol,:, 15) ! rate_const*O1D*CFC12
- rxt_rates(:ncol,:, 187) = rxt_rates(:ncol,:, 187)*sol(:ncol,:, 94)*sol(:ncol,:, 49) ! rate_const*O1D*HCL
- rxt_rates(:ncol,:, 188) = rxt_rates(:ncol,:, 188)*sol(:ncol,:, 94)*sol(:ncol,:, 49) ! rate_const*O1D*HCL
+ rxt_rates(:ncol,:, 179) = rxt_rates(:ncol,:, 179)*sol(:ncol,:, 54)*sol(:ncol,:, 99) ! rate_const*HOCL*OH
+ rxt_rates(:ncol,:, 180) = rxt_rates(:ncol,:, 180)*sol(:ncol,:, 95)*sol(:ncol,:, 8) ! rate_const*O1D*CCL4
+ rxt_rates(:ncol,:, 181) = rxt_rates(:ncol,:, 181)*sol(:ncol,:, 95)*sol(:ncol,:, 9) ! rate_const*O1D*CF2CLBR
+ rxt_rates(:ncol,:, 182) = rxt_rates(:ncol,:, 182)*sol(:ncol,:, 95)*sol(:ncol,:, 11) ! rate_const*O1D*CFC11
+ rxt_rates(:ncol,:, 183) = rxt_rates(:ncol,:, 183)*sol(:ncol,:, 95)*sol(:ncol,:, 12) ! rate_const*O1D*CFC113
+ rxt_rates(:ncol,:, 184) = rxt_rates(:ncol,:, 184)*sol(:ncol,:, 95)*sol(:ncol,:, 13) ! rate_const*O1D*CFC114
+ rxt_rates(:ncol,:, 185) = rxt_rates(:ncol,:, 185)*sol(:ncol,:, 95)*sol(:ncol,:, 14) ! rate_const*O1D*CFC115
+ rxt_rates(:ncol,:, 186) = rxt_rates(:ncol,:, 186)*sol(:ncol,:, 95)*sol(:ncol,:, 15) ! rate_const*O1D*CFC12
+ rxt_rates(:ncol,:, 187) = rxt_rates(:ncol,:, 187)*sol(:ncol,:, 95)*sol(:ncol,:, 49) ! rate_const*O1D*HCL
+ rxt_rates(:ncol,:, 188) = rxt_rates(:ncol,:, 188)*sol(:ncol,:, 95)*sol(:ncol,:, 49) ! rate_const*O1D*HCL
rxt_rates(:ncol,:, 189) = rxt_rates(:ncol,:, 189)*sol(:ncol,:, 28)*sol(:ncol,:, 28) ! rate_const*M*CLO*CLO
rxt_rates(:ncol,:, 190) = rxt_rates(:ncol,:, 190)*sol(:ncol,:, 27) ! rate_const*M*CL2O2
rxt_rates(:ncol,:, 191) = rxt_rates(:ncol,:, 191)*sol(:ncol,:, 3)*sol(:ncol,:, 17) ! rate_const*BR*CH2O
- rxt_rates(:ncol,:, 192) = rxt_rates(:ncol,:, 192)*sol(:ncol,:, 3)*sol(:ncol,:, 89) ! rate_const*BR*HO2
+ rxt_rates(:ncol,:, 192) = rxt_rates(:ncol,:, 192)*sol(:ncol,:, 3)*sol(:ncol,:, 90) ! rate_const*BR*HO2
rxt_rates(:ncol,:, 193) = rxt_rates(:ncol,:, 193)*sol(:ncol,:, 3)*sol(:ncol,:, 71) ! rate_const*BR*O3
rxt_rates(:ncol,:, 194) = rxt_rates(:ncol,:, 194)*sol(:ncol,:, 5)*sol(:ncol,:, 5) ! rate_const*BRO*BRO
rxt_rates(:ncol,:, 195) = rxt_rates(:ncol,:, 195)*sol(:ncol,:, 5)*sol(:ncol,:, 28) ! rate_const*BRO*CLO
rxt_rates(:ncol,:, 196) = rxt_rates(:ncol,:, 196)*sol(:ncol,:, 5)*sol(:ncol,:, 28) ! rate_const*BRO*CLO
rxt_rates(:ncol,:, 197) = rxt_rates(:ncol,:, 197)*sol(:ncol,:, 5)*sol(:ncol,:, 28) ! rate_const*BRO*CLO
- rxt_rates(:ncol,:, 198) = rxt_rates(:ncol,:, 198)*sol(:ncol,:, 5)*sol(:ncol,:, 89) ! rate_const*BRO*HO2
+ rxt_rates(:ncol,:, 198) = rxt_rates(:ncol,:, 198)*sol(:ncol,:, 5)*sol(:ncol,:, 90) ! rate_const*BRO*HO2
rxt_rates(:ncol,:, 199) = rxt_rates(:ncol,:, 199)*sol(:ncol,:, 5)*sol(:ncol,:, 61) ! rate_const*BRO*NO
rxt_rates(:ncol,:, 200) = rxt_rates(:ncol,:, 200)*sol(:ncol,:, 5)*sol(:ncol,:, 62) ! rate_const*M*BRO*NO2
rxt_rates(:ncol,:, 201) = rxt_rates(:ncol,:, 201)*sol(:ncol,:, 6)*sol(:ncol,:, 69) ! rate_const*BRONO2*O
rxt_rates(:ncol,:, 202) = rxt_rates(:ncol,:, 202)*sol(:ncol,:, 5)*sol(:ncol,:, 69) ! rate_const*BRO*O
- rxt_rates(:ncol,:, 203) = rxt_rates(:ncol,:, 203)*sol(:ncol,:, 5)*sol(:ncol,:, 98) ! rate_const*BRO*OH
+ rxt_rates(:ncol,:, 203) = rxt_rates(:ncol,:, 203)*sol(:ncol,:, 5)*sol(:ncol,:, 99) ! rate_const*BRO*OH
rxt_rates(:ncol,:, 204) = rxt_rates(:ncol,:, 204)*sol(:ncol,:, 45)*sol(:ncol,:, 69) ! rate_const*HBR*O
- rxt_rates(:ncol,:, 205) = rxt_rates(:ncol,:, 205)*sol(:ncol,:, 45)*sol(:ncol,:, 98) ! rate_const*HBR*OH
+ rxt_rates(:ncol,:, 205) = rxt_rates(:ncol,:, 205)*sol(:ncol,:, 45)*sol(:ncol,:, 99) ! rate_const*HBR*OH
rxt_rates(:ncol,:, 206) = rxt_rates(:ncol,:, 206)*sol(:ncol,:, 53)*sol(:ncol,:, 69) ! rate_const*HOBR*O
- rxt_rates(:ncol,:, 207) = rxt_rates(:ncol,:, 207)*sol(:ncol,:, 94)*sol(:ncol,:, 10) ! rate_const*O1D*CF3BR
- rxt_rates(:ncol,:, 208) = rxt_rates(:ncol,:, 208)*sol(:ncol,:, 94)*sol(:ncol,:, 24) ! rate_const*O1D*CHBR3
- rxt_rates(:ncol,:, 209) = rxt_rates(:ncol,:, 209)*sol(:ncol,:, 94)*sol(:ncol,:, 42) ! rate_const*O1D*H2402
- rxt_rates(:ncol,:, 210) = rxt_rates(:ncol,:, 210)*sol(:ncol,:, 94)*sol(:ncol,:, 45) ! rate_const*O1D*HBR
- rxt_rates(:ncol,:, 211) = rxt_rates(:ncol,:, 211)*sol(:ncol,:, 94)*sol(:ncol,:, 45) ! rate_const*O1D*HBR
+ rxt_rates(:ncol,:, 207) = rxt_rates(:ncol,:, 207)*sol(:ncol,:, 95)*sol(:ncol,:, 10) ! rate_const*O1D*CF3BR
+ rxt_rates(:ncol,:, 208) = rxt_rates(:ncol,:, 208)*sol(:ncol,:, 95)*sol(:ncol,:, 24) ! rate_const*O1D*CHBR3
+ rxt_rates(:ncol,:, 209) = rxt_rates(:ncol,:, 209)*sol(:ncol,:, 95)*sol(:ncol,:, 42) ! rate_const*O1D*H2402
+ rxt_rates(:ncol,:, 210) = rxt_rates(:ncol,:, 210)*sol(:ncol,:, 95)*sol(:ncol,:, 45) ! rate_const*O1D*HBR
+ rxt_rates(:ncol,:, 211) = rxt_rates(:ncol,:, 211)*sol(:ncol,:, 95)*sol(:ncol,:, 45) ! rate_const*O1D*HBR
rxt_rates(:ncol,:, 212) = rxt_rates(:ncol,:, 212)*sol(:ncol,:, 39)*sol(:ncol,:, 23) ! rate_const*F*CH4
rxt_rates(:ncol,:, 213) = rxt_rates(:ncol,:, 213)*sol(:ncol,:, 39)*sol(:ncol,:, 41) ! rate_const*F*H2
- rxt_rates(:ncol,:, 214) = rxt_rates(:ncol,:, 214)*sol(:ncol,:, 39)*sol(:ncol,:, 102) ! rate_const*F*H2O
+ rxt_rates(:ncol,:, 214) = rxt_rates(:ncol,:, 214)*sol(:ncol,:, 39)*sol(:ncol,:, 103) ! rate_const*F*H2O
rxt_rates(:ncol,:, 215) = rxt_rates(:ncol,:, 215)*sol(:ncol,:, 39)*sol(:ncol,:, 51) ! rate_const*F*HNO3
- rxt_rates(:ncol,:, 216) = rxt_rates(:ncol,:, 216)*sol(:ncol,:, 94)*sol(:ncol,:, 33) ! rate_const*O1D*COF2
- rxt_rates(:ncol,:, 217) = rxt_rates(:ncol,:, 217)*sol(:ncol,:, 94)*sol(:ncol,:, 34) ! rate_const*O1D*COFCL
+ rxt_rates(:ncol,:, 216) = rxt_rates(:ncol,:, 216)*sol(:ncol,:, 95)*sol(:ncol,:, 33) ! rate_const*O1D*COF2
+ rxt_rates(:ncol,:, 217) = rxt_rates(:ncol,:, 217)*sol(:ncol,:, 95)*sol(:ncol,:, 34) ! rate_const*O1D*COFCL
rxt_rates(:ncol,:, 218) = rxt_rates(:ncol,:, 218)*sol(:ncol,:, 16)*sol(:ncol,:, 25) ! rate_const*CH2BR2*CL
- rxt_rates(:ncol,:, 219) = rxt_rates(:ncol,:, 219)*sol(:ncol,:, 16)*sol(:ncol,:, 98) ! rate_const*CH2BR2*OH
+ rxt_rates(:ncol,:, 219) = rxt_rates(:ncol,:, 219)*sol(:ncol,:, 16)*sol(:ncol,:, 99) ! rate_const*CH2BR2*OH
rxt_rates(:ncol,:, 220) = rxt_rates(:ncol,:, 220)*sol(:ncol,:, 18)*sol(:ncol,:, 25) ! rate_const*CH3BR*CL
- rxt_rates(:ncol,:, 221) = rxt_rates(:ncol,:, 221)*sol(:ncol,:, 18)*sol(:ncol,:, 98) ! rate_const*CH3BR*OH
- rxt_rates(:ncol,:, 222) = rxt_rates(:ncol,:, 222)*sol(:ncol,:, 19)*sol(:ncol,:, 98) ! rate_const*CH3CCL3*OH
+ rxt_rates(:ncol,:, 221) = rxt_rates(:ncol,:, 221)*sol(:ncol,:, 18)*sol(:ncol,:, 99) ! rate_const*CH3BR*OH
+ rxt_rates(:ncol,:, 222) = rxt_rates(:ncol,:, 222)*sol(:ncol,:, 19)*sol(:ncol,:, 99) ! rate_const*CH3CCL3*OH
rxt_rates(:ncol,:, 223) = rxt_rates(:ncol,:, 223)*sol(:ncol,:, 20)*sol(:ncol,:, 25) ! rate_const*CH3CL*CL
- rxt_rates(:ncol,:, 224) = rxt_rates(:ncol,:, 224)*sol(:ncol,:, 20)*sol(:ncol,:, 98) ! rate_const*CH3CL*OH
+ rxt_rates(:ncol,:, 224) = rxt_rates(:ncol,:, 224)*sol(:ncol,:, 20)*sol(:ncol,:, 99) ! rate_const*CH3CL*OH
rxt_rates(:ncol,:, 225) = rxt_rates(:ncol,:, 225)*sol(:ncol,:, 24)*sol(:ncol,:, 25) ! rate_const*CHBR3*CL
- rxt_rates(:ncol,:, 226) = rxt_rates(:ncol,:, 226)*sol(:ncol,:, 24)*sol(:ncol,:, 98) ! rate_const*CHBR3*OH
- rxt_rates(:ncol,:, 227) = rxt_rates(:ncol,:, 227)*sol(:ncol,:, 46)*sol(:ncol,:, 98) ! rate_const*HCFC141B*OH
- rxt_rates(:ncol,:, 228) = rxt_rates(:ncol,:, 228)*sol(:ncol,:, 47)*sol(:ncol,:, 98) ! rate_const*HCFC142B*OH
- rxt_rates(:ncol,:, 229) = rxt_rates(:ncol,:, 229)*sol(:ncol,:, 48)*sol(:ncol,:, 98) ! rate_const*HCFC22*OH
- rxt_rates(:ncol,:, 230) = rxt_rates(:ncol,:, 230)*sol(:ncol,:, 94)*sol(:ncol,:, 16) ! rate_const*O1D*CH2BR2
- rxt_rates(:ncol,:, 231) = rxt_rates(:ncol,:, 231)*sol(:ncol,:, 94)*sol(:ncol,:, 18) ! rate_const*O1D*CH3BR
- rxt_rates(:ncol,:, 232) = rxt_rates(:ncol,:, 232)*sol(:ncol,:, 94)*sol(:ncol,:, 46) ! rate_const*O1D*HCFC141B
- rxt_rates(:ncol,:, 233) = rxt_rates(:ncol,:, 233)*sol(:ncol,:, 94)*sol(:ncol,:, 47) ! rate_const*O1D*HCFC142B
- rxt_rates(:ncol,:, 234) = rxt_rates(:ncol,:, 234)*sol(:ncol,:, 94)*sol(:ncol,:, 48) ! rate_const*O1D*HCFC22
+ rxt_rates(:ncol,:, 226) = rxt_rates(:ncol,:, 226)*sol(:ncol,:, 24)*sol(:ncol,:, 99) ! rate_const*CHBR3*OH
+ rxt_rates(:ncol,:, 227) = rxt_rates(:ncol,:, 227)*sol(:ncol,:, 46)*sol(:ncol,:, 99) ! rate_const*HCFC141B*OH
+ rxt_rates(:ncol,:, 228) = rxt_rates(:ncol,:, 228)*sol(:ncol,:, 47)*sol(:ncol,:, 99) ! rate_const*HCFC142B*OH
+ rxt_rates(:ncol,:, 229) = rxt_rates(:ncol,:, 229)*sol(:ncol,:, 48)*sol(:ncol,:, 99) ! rate_const*HCFC22*OH
+ rxt_rates(:ncol,:, 230) = rxt_rates(:ncol,:, 230)*sol(:ncol,:, 95)*sol(:ncol,:, 16) ! rate_const*O1D*CH2BR2
+ rxt_rates(:ncol,:, 231) = rxt_rates(:ncol,:, 231)*sol(:ncol,:, 95)*sol(:ncol,:, 18) ! rate_const*O1D*CH3BR
+ rxt_rates(:ncol,:, 232) = rxt_rates(:ncol,:, 232)*sol(:ncol,:, 95)*sol(:ncol,:, 46) ! rate_const*O1D*HCFC141B
+ rxt_rates(:ncol,:, 233) = rxt_rates(:ncol,:, 233)*sol(:ncol,:, 95)*sol(:ncol,:, 47) ! rate_const*O1D*HCFC142B
+ rxt_rates(:ncol,:, 234) = rxt_rates(:ncol,:, 234)*sol(:ncol,:, 95)*sol(:ncol,:, 48) ! rate_const*O1D*HCFC22
rxt_rates(:ncol,:, 235) = rxt_rates(:ncol,:, 235)*sol(:ncol,:, 17)*sol(:ncol,:, 63) ! rate_const*CH2O*NO3
rxt_rates(:ncol,:, 236) = rxt_rates(:ncol,:, 236)*sol(:ncol,:, 17)*sol(:ncol,:, 69) ! rate_const*CH2O*O
- rxt_rates(:ncol,:, 237) = rxt_rates(:ncol,:, 237)*sol(:ncol,:, 17)*sol(:ncol,:, 98) ! rate_const*CH2O*OH
- rxt_rates(:ncol,:, 238) = rxt_rates(:ncol,:, 238)*sol(:ncol,:, 21)*sol(:ncol,:, 89) ! rate_const*CH3O2*HO2
+ rxt_rates(:ncol,:, 237) = rxt_rates(:ncol,:, 237)*sol(:ncol,:, 17)*sol(:ncol,:, 99) ! rate_const*CH2O*OH
+ rxt_rates(:ncol,:, 238) = rxt_rates(:ncol,:, 238)*sol(:ncol,:, 21)*sol(:ncol,:, 90) ! rate_const*CH3O2*HO2
rxt_rates(:ncol,:, 239) = rxt_rates(:ncol,:, 239)*sol(:ncol,:, 21)*sol(:ncol,:, 61) ! rate_const*CH3O2*NO
- rxt_rates(:ncol,:, 240) = rxt_rates(:ncol,:, 240)*sol(:ncol,:, 22)*sol(:ncol,:, 98) ! rate_const*CH3OOH*OH
- rxt_rates(:ncol,:, 241) = rxt_rates(:ncol,:, 241)*sol(:ncol,:, 23)*sol(:ncol,:, 98) ! rate_const*CH4*OH
- rxt_rates(:ncol,:, 242) = rxt_rates(:ncol,:, 242)*sol(:ncol,:, 94)*sol(:ncol,:, 23) ! rate_const*O1D*CH4
- rxt_rates(:ncol,:, 243) = rxt_rates(:ncol,:, 243)*sol(:ncol,:, 94)*sol(:ncol,:, 23) ! rate_const*O1D*CH4
- rxt_rates(:ncol,:, 244) = rxt_rates(:ncol,:, 244)*sol(:ncol,:, 94)*sol(:ncol,:, 23) ! rate_const*O1D*CH4
- rxt_rates(:ncol,:, 245) = rxt_rates(:ncol,:, 245)*sol(:ncol,:, 31)*sol(:ncol,:, 98) ! rate_const*CO*OH
+ rxt_rates(:ncol,:, 240) = rxt_rates(:ncol,:, 240)*sol(:ncol,:, 22)*sol(:ncol,:, 99) ! rate_const*CH3OOH*OH
+ rxt_rates(:ncol,:, 241) = rxt_rates(:ncol,:, 241)*sol(:ncol,:, 23)*sol(:ncol,:, 99) ! rate_const*CH4*OH
+ rxt_rates(:ncol,:, 242) = rxt_rates(:ncol,:, 242)*sol(:ncol,:, 95)*sol(:ncol,:, 23) ! rate_const*O1D*CH4
+ rxt_rates(:ncol,:, 243) = rxt_rates(:ncol,:, 243)*sol(:ncol,:, 95)*sol(:ncol,:, 23) ! rate_const*O1D*CH4
+ rxt_rates(:ncol,:, 244) = rxt_rates(:ncol,:, 244)*sol(:ncol,:, 95)*sol(:ncol,:, 23) ! rate_const*O1D*CH4
+ rxt_rates(:ncol,:, 245) = rxt_rates(:ncol,:, 245)*sol(:ncol,:, 31)*sol(:ncol,:, 99) ! rate_const*CO*OH
rxt_rates(:ncol,:, 246) = rxt_rates(:ncol,:, 246)*sol(:ncol,:, 35)*sol(:ncol,:, 63) ! rate_const*DMS*NO3
- rxt_rates(:ncol,:, 247) = rxt_rates(:ncol,:, 247)*sol(:ncol,:, 35)*sol(:ncol,:, 98) ! rate_const*DMS*OH
- rxt_rates(:ncol,:, 248) = rxt_rates(:ncol,:, 248)*sol(:ncol,:, 73)*sol(:ncol,:, 69) ! rate_const*OCS*O
- rxt_rates(:ncol,:, 249) = rxt_rates(:ncol,:, 249)*sol(:ncol,:, 73)*sol(:ncol,:, 98) ! rate_const*OCS*OH
- rxt_rates(:ncol,:, 250) = rxt_rates(:ncol,:, 250)*sol(:ncol,:, 76)*sol(:ncol,:, 70) ! rate_const*S*O2
- rxt_rates(:ncol,:, 251) = rxt_rates(:ncol,:, 251)*sol(:ncol,:, 79)*sol(:ncol,:, 98) ! rate_const*M*SO2*OH
- rxt_rates(:ncol,:, 252) = rxt_rates(:ncol,:, 252)*sol(:ncol,:, 76)*sol(:ncol,:, 71) ! rate_const*S*O3
- rxt_rates(:ncol,:, 253) = rxt_rates(:ncol,:, 253)*sol(:ncol,:, 78)*sol(:ncol,:, 5) ! rate_const*SO*BRO
- rxt_rates(:ncol,:, 254) = rxt_rates(:ncol,:, 254)*sol(:ncol,:, 78)*sol(:ncol,:, 28) ! rate_const*SO*CLO
- rxt_rates(:ncol,:, 255) = rxt_rates(:ncol,:, 255)*sol(:ncol,:, 76)*sol(:ncol,:, 98) ! rate_const*S*OH
- rxt_rates(:ncol,:, 256) = rxt_rates(:ncol,:, 256)*sol(:ncol,:, 78)*sol(:ncol,:, 62) ! rate_const*SO*NO2
- rxt_rates(:ncol,:, 257) = rxt_rates(:ncol,:, 257)*sol(:ncol,:, 78)*sol(:ncol,:, 70) ! rate_const*SO*O2
- rxt_rates(:ncol,:, 258) = rxt_rates(:ncol,:, 258)*sol(:ncol,:, 78)*sol(:ncol,:, 71) ! rate_const*SO*O3
- rxt_rates(:ncol,:, 259) = rxt_rates(:ncol,:, 259)*sol(:ncol,:, 78)*sol(:ncol,:, 72) ! rate_const*SO*OCLO
- rxt_rates(:ncol,:, 260) = rxt_rates(:ncol,:, 260)*sol(:ncol,:, 78)*sol(:ncol,:, 98) ! rate_const*SO*OH
- rxt_rates(:ncol,:, 261) = rxt_rates(:ncol,:, 261)*sol(:ncol,:, 35)*sol(:ncol,:, 98) ! rate_const*DMS*OH
- rxt_rates(:ncol,:, 262) = rxt_rates(:ncol,:, 262)*sol(:ncol,:, 80)*sol(:ncol,:, 102) ! rate_const*SO3*H2O
- rxt_rates(:ncol,:, 263) = rxt_rates(:ncol,:, 263)*sol(:ncol,:, 89) ! rate_const*HO2
+ rxt_rates(:ncol,:, 247) = rxt_rates(:ncol,:, 247)*sol(:ncol,:, 35)*sol(:ncol,:, 99) ! rate_const*DMS*OH
+ rxt_rates(:ncol,:, 248) = rxt_rates(:ncol,:, 248)*sol(:ncol,:, 74)*sol(:ncol,:, 69) ! rate_const*OCS*O
+ rxt_rates(:ncol,:, 249) = rxt_rates(:ncol,:, 249)*sol(:ncol,:, 74)*sol(:ncol,:, 99) ! rate_const*OCS*OH
+ rxt_rates(:ncol,:, 250) = rxt_rates(:ncol,:, 250)*sol(:ncol,:, 77)*sol(:ncol,:, 70) ! rate_const*S*O2
+ rxt_rates(:ncol,:, 251) = rxt_rates(:ncol,:, 251)*sol(:ncol,:, 80)*sol(:ncol,:, 99) ! rate_const*M*SO2*OH
+ rxt_rates(:ncol,:, 252) = rxt_rates(:ncol,:, 252)*sol(:ncol,:, 77)*sol(:ncol,:, 71) ! rate_const*S*O3
+ rxt_rates(:ncol,:, 253) = rxt_rates(:ncol,:, 253)*sol(:ncol,:, 79)*sol(:ncol,:, 5) ! rate_const*SO*BRO
+ rxt_rates(:ncol,:, 254) = rxt_rates(:ncol,:, 254)*sol(:ncol,:, 79)*sol(:ncol,:, 28) ! rate_const*SO*CLO
+ rxt_rates(:ncol,:, 255) = rxt_rates(:ncol,:, 255)*sol(:ncol,:, 77)*sol(:ncol,:, 99) ! rate_const*S*OH
+ rxt_rates(:ncol,:, 256) = rxt_rates(:ncol,:, 256)*sol(:ncol,:, 79)*sol(:ncol,:, 62) ! rate_const*SO*NO2
+ rxt_rates(:ncol,:, 257) = rxt_rates(:ncol,:, 257)*sol(:ncol,:, 79)*sol(:ncol,:, 70) ! rate_const*SO*O2
+ rxt_rates(:ncol,:, 258) = rxt_rates(:ncol,:, 258)*sol(:ncol,:, 79)*sol(:ncol,:, 71) ! rate_const*SO*O3
+ rxt_rates(:ncol,:, 259) = rxt_rates(:ncol,:, 259)*sol(:ncol,:, 79)*sol(:ncol,:, 73) ! rate_const*SO*OCLO
+ rxt_rates(:ncol,:, 260) = rxt_rates(:ncol,:, 260)*sol(:ncol,:, 79)*sol(:ncol,:, 99) ! rate_const*SO*OH
+ rxt_rates(:ncol,:, 261) = rxt_rates(:ncol,:, 261)*sol(:ncol,:, 35)*sol(:ncol,:, 99) ! rate_const*DMS*OH
+ rxt_rates(:ncol,:, 262) = rxt_rates(:ncol,:, 262)*sol(:ncol,:, 81)*sol(:ncol,:, 103) ! rate_const*SO3*H2O
+ rxt_rates(:ncol,:, 263) = rxt_rates(:ncol,:, 263)*sol(:ncol,:, 90) ! rate_const*HO2
rxt_rates(:ncol,:, 264) = rxt_rates(:ncol,:, 264)*sol(:ncol,:, 57) ! rate_const*N2O5
rxt_rates(:ncol,:, 265) = rxt_rates(:ncol,:, 265)*sol(:ncol,:, 62) ! rate_const*NO2
rxt_rates(:ncol,:, 266) = rxt_rates(:ncol,:, 266)*sol(:ncol,:, 63) ! rate_const*NO3
@@ -291,33 +291,33 @@ subroutine set_rates( rxt_rates, sol, ncol )
rxt_rates(:ncol,:, 281) = rxt_rates(:ncol,:, 281)*sol(:ncol,:, 57) ! rate_const*N2O5
rxt_rates(:ncol,:, 282) = rxt_rates(:ncol,:, 282)*sol(:ncol,:, 29) ! rate_const*CLONO2
rxt_rates(:ncol,:, 283) = rxt_rates(:ncol,:, 283)*sol(:ncol,:, 29)*sol(:ncol,:, 49) ! rate_const*CLONO2*HCL
- rxt_rates(:ncol,:, 284) = rxt_rates(:ncol,:, 284)*sol(:ncol,:, 101) ! rate_const*Op2P
- rxt_rates(:ncol,:, 285) = rxt_rates(:ncol,:, 285)*sol(:ncol,:, 100) ! rate_const*Op2D
- rxt_rates(:ncol,:, 286) = rxt_rates(:ncol,:, 286)*sol(:ncol,:, 101) ! rate_const*Op2P
- rxt_rates(:ncol,:, 287) = rxt_rates(:ncol,:, 287)*sol(:ncol,:, 92)*sol(:ncol,:, 88) ! rate_const*NOp*e
- rxt_rates(:ncol,:, 288) = rxt_rates(:ncol,:, 288)*sol(:ncol,:, 97)*sol(:ncol,:, 88) ! rate_const*O2p*e
- rxt_rates(:ncol,:, 289) = rxt_rates(:ncol,:, 289)*sol(:ncol,:, 91)*sol(:ncol,:, 88) ! rate_const*N2p*e
- rxt_rates(:ncol,:, 290) = rxt_rates(:ncol,:, 290)*sol(:ncol,:, 91)*sol(:ncol,:, 70) ! rate_const*N2p*O2
- rxt_rates(:ncol,:, 291) = rxt_rates(:ncol,:, 291)*sol(:ncol,:, 91)*sol(:ncol,:, 69) ! rate_const*N2p*O
- rxt_rates(:ncol,:, 292) = rxt_rates(:ncol,:, 292)*sol(:ncol,:, 91)*sol(:ncol,:, 69) ! rate_const*N2p*O
- rxt_rates(:ncol,:, 293) = rxt_rates(:ncol,:, 293)*sol(:ncol,:, 93)*sol(:ncol,:, 69) ! rate_const*Np*O
- rxt_rates(:ncol,:, 294) = rxt_rates(:ncol,:, 294)*sol(:ncol,:, 93)*sol(:ncol,:, 70) ! rate_const*Np*O2
- rxt_rates(:ncol,:, 295) = rxt_rates(:ncol,:, 295)*sol(:ncol,:, 93)*sol(:ncol,:, 70) ! rate_const*Np*O2
- rxt_rates(:ncol,:, 296) = rxt_rates(:ncol,:, 296)*sol(:ncol,:, 97)*sol(:ncol,:, 55) ! rate_const*O2p*N
- rxt_rates(:ncol,:, 297) = rxt_rates(:ncol,:, 297)*sol(:ncol,:, 97) ! rate_const*N2*O2p
- rxt_rates(:ncol,:, 298) = rxt_rates(:ncol,:, 298)*sol(:ncol,:, 97)*sol(:ncol,:, 61) ! rate_const*O2p*NO
- rxt_rates(:ncol,:, 299) = rxt_rates(:ncol,:, 299)*sol(:ncol,:, 99)*sol(:ncol,:, 32) ! rate_const*Op*CO2
- rxt_rates(:ncol,:, 300) = rxt_rates(:ncol,:, 300)*sol(:ncol,:, 99) ! rate_const*N2*Op
- rxt_rates(:ncol,:, 301) = rxt_rates(:ncol,:, 301)*sol(:ncol,:, 99)*sol(:ncol,:, 90) ! rate_const*Op*N2D
- rxt_rates(:ncol,:, 302) = rxt_rates(:ncol,:, 302)*sol(:ncol,:, 99)*sol(:ncol,:, 70) ! rate_const*Op*O2
- rxt_rates(:ncol,:, 303) = rxt_rates(:ncol,:, 303)*sol(:ncol,:, 100)*sol(:ncol,:, 88) ! rate_const*Op2D*e
- rxt_rates(:ncol,:, 304) = rxt_rates(:ncol,:, 304)*sol(:ncol,:, 100) ! rate_const*N2*Op2D
- rxt_rates(:ncol,:, 305) = rxt_rates(:ncol,:, 305)*sol(:ncol,:, 100)*sol(:ncol,:, 69) ! rate_const*Op2D*O
- rxt_rates(:ncol,:, 306) = rxt_rates(:ncol,:, 306)*sol(:ncol,:, 100)*sol(:ncol,:, 70) ! rate_const*Op2D*O2
- rxt_rates(:ncol,:, 307) = rxt_rates(:ncol,:, 307)*sol(:ncol,:, 101)*sol(:ncol,:, 88) ! rate_const*Op2P*e
- rxt_rates(:ncol,:, 308) = rxt_rates(:ncol,:, 308)*sol(:ncol,:, 101)*sol(:ncol,:, 88) ! rate_const*Op2P*e
- rxt_rates(:ncol,:, 309) = rxt_rates(:ncol,:, 309)*sol(:ncol,:, 101) ! rate_const*N2*Op2P
- rxt_rates(:ncol,:, 310) = rxt_rates(:ncol,:, 310)*sol(:ncol,:, 101) ! rate_const*N2*Op2P
- rxt_rates(:ncol,:, 311) = rxt_rates(:ncol,:, 311)*sol(:ncol,:, 101)*sol(:ncol,:, 69) ! rate_const*Op2P*O
+ rxt_rates(:ncol,:, 284) = rxt_rates(:ncol,:, 284)*sol(:ncol,:, 102) ! rate_const*Op2P
+ rxt_rates(:ncol,:, 285) = rxt_rates(:ncol,:, 285)*sol(:ncol,:, 101) ! rate_const*Op2D
+ rxt_rates(:ncol,:, 286) = rxt_rates(:ncol,:, 286)*sol(:ncol,:, 102) ! rate_const*Op2P
+ rxt_rates(:ncol,:, 287) = rxt_rates(:ncol,:, 287)*sol(:ncol,:, 93)*sol(:ncol,:, 89) ! rate_const*NOp*e
+ rxt_rates(:ncol,:, 288) = rxt_rates(:ncol,:, 288)*sol(:ncol,:, 98)*sol(:ncol,:, 89) ! rate_const*O2p*e
+ rxt_rates(:ncol,:, 289) = rxt_rates(:ncol,:, 289)*sol(:ncol,:, 92)*sol(:ncol,:, 89) ! rate_const*N2p*e
+ rxt_rates(:ncol,:, 290) = rxt_rates(:ncol,:, 290)*sol(:ncol,:, 92)*sol(:ncol,:, 70) ! rate_const*N2p*O2
+ rxt_rates(:ncol,:, 291) = rxt_rates(:ncol,:, 291)*sol(:ncol,:, 92)*sol(:ncol,:, 69) ! rate_const*N2p*O
+ rxt_rates(:ncol,:, 292) = rxt_rates(:ncol,:, 292)*sol(:ncol,:, 92)*sol(:ncol,:, 69) ! rate_const*N2p*O
+ rxt_rates(:ncol,:, 293) = rxt_rates(:ncol,:, 293)*sol(:ncol,:, 94)*sol(:ncol,:, 69) ! rate_const*Np*O
+ rxt_rates(:ncol,:, 294) = rxt_rates(:ncol,:, 294)*sol(:ncol,:, 94)*sol(:ncol,:, 70) ! rate_const*Np*O2
+ rxt_rates(:ncol,:, 295) = rxt_rates(:ncol,:, 295)*sol(:ncol,:, 94)*sol(:ncol,:, 70) ! rate_const*Np*O2
+ rxt_rates(:ncol,:, 296) = rxt_rates(:ncol,:, 296)*sol(:ncol,:, 98)*sol(:ncol,:, 55) ! rate_const*O2p*N
+ rxt_rates(:ncol,:, 297) = rxt_rates(:ncol,:, 297)*sol(:ncol,:, 98) ! rate_const*N2*O2p
+ rxt_rates(:ncol,:, 298) = rxt_rates(:ncol,:, 298)*sol(:ncol,:, 98)*sol(:ncol,:, 61) ! rate_const*O2p*NO
+ rxt_rates(:ncol,:, 299) = rxt_rates(:ncol,:, 299)*sol(:ncol,:, 100)*sol(:ncol,:, 32) ! rate_const*Op*CO2
+ rxt_rates(:ncol,:, 300) = rxt_rates(:ncol,:, 300)*sol(:ncol,:, 100) ! rate_const*N2*Op
+ rxt_rates(:ncol,:, 301) = rxt_rates(:ncol,:, 301)*sol(:ncol,:, 100)*sol(:ncol,:, 91) ! rate_const*Op*N2D
+ rxt_rates(:ncol,:, 302) = rxt_rates(:ncol,:, 302)*sol(:ncol,:, 100)*sol(:ncol,:, 70) ! rate_const*Op*O2
+ rxt_rates(:ncol,:, 303) = rxt_rates(:ncol,:, 303)*sol(:ncol,:, 101)*sol(:ncol,:, 89) ! rate_const*Op2D*e
+ rxt_rates(:ncol,:, 304) = rxt_rates(:ncol,:, 304)*sol(:ncol,:, 101) ! rate_const*N2*Op2D
+ rxt_rates(:ncol,:, 305) = rxt_rates(:ncol,:, 305)*sol(:ncol,:, 101)*sol(:ncol,:, 69) ! rate_const*Op2D*O
+ rxt_rates(:ncol,:, 306) = rxt_rates(:ncol,:, 306)*sol(:ncol,:, 101)*sol(:ncol,:, 70) ! rate_const*Op2D*O2
+ rxt_rates(:ncol,:, 307) = rxt_rates(:ncol,:, 307)*sol(:ncol,:, 102)*sol(:ncol,:, 89) ! rate_const*Op2P*e
+ rxt_rates(:ncol,:, 308) = rxt_rates(:ncol,:, 308)*sol(:ncol,:, 102)*sol(:ncol,:, 89) ! rate_const*Op2P*e
+ rxt_rates(:ncol,:, 309) = rxt_rates(:ncol,:, 309)*sol(:ncol,:, 102) ! rate_const*N2*Op2P
+ rxt_rates(:ncol,:, 310) = rxt_rates(:ncol,:, 310)*sol(:ncol,:, 102) ! rate_const*N2*Op2P
+ rxt_rates(:ncol,:, 311) = rxt_rates(:ncol,:, 311)*sol(:ncol,:, 102)*sol(:ncol,:, 69) ! rate_const*Op2P*O
end subroutine set_rates
end module mo_rxt_rates_conv
diff --git a/src/chemistry/pp_waccm_ma_mam5/mo_sim_dat.F90 b/src/chemistry/pp_waccm_ma_mam5/mo_sim_dat.F90
index 4b884922d5..adb157e52e 100644
--- a/src/chemistry/pp_waccm_ma_mam5/mo_sim_dat.F90
+++ b/src/chemistry/pp_waccm_ma_mam5/mo_sim_dat.F90
@@ -31,11 +31,12 @@ subroutine set_sim_dat
is_scalar = .false.
is_vector = .true.
- clscnt(:) = (/ 0, 0, 0, 102, 0 /)
+ clscnt(:) = (/ 1, 0, 0, 102, 0 /)
+ cls_rxt_cnt(:,1) = (/ 0, 0, 0, 1 /)
cls_rxt_cnt(:,4) = (/ 8, 112, 191, 102 /)
- solsym(:102) = (/ 'bc_a1 ','bc_a4 ','BR ','BRCL ','BRO ', &
+ solsym(:103) = (/ 'bc_a1 ','bc_a4 ','BR ','BRCL ','BRO ', &
'BRONO2 ','BRY ','CCL4 ','CF2CLBR ','CF3BR ', &
'CFC11 ','CFC113 ','CFC114 ','CFC115 ','CFC12 ', &
'CH2BR2 ','CH2O ','CH3BR ','CH3CCL3 ','CH3CL ', &
@@ -49,15 +50,15 @@ subroutine set_sim_dat
'N2O ','N2O5 ','ncl_a1 ','ncl_a2 ','ncl_a3 ', &
'NO ','NO2 ','NO3 ','num_a1 ','num_a2 ', &
'num_a3 ','num_a4 ','num_a5 ','O ','O2 ', &
- 'O3 ','OCLO ','OCS ','pom_a1 ','pom_a4 ', &
- 'S ','SF6 ','SO ','SO2 ','SO3 ', &
- 'so4_a1 ','so4_a2 ','so4_a3 ','so4_a5 ','soa_a1 ', &
- 'soa_a2 ','SOAG ','e ','HO2 ','N2D ', &
- 'N2p ','NOp ','Np ','O1D ','O2_1D ', &
- 'O2_1S ','O2p ','OH ','Op ','Op2D ', &
- 'Op2P ','H2O ' /)
+ 'O3 ','O3S ','OCLO ','OCS ','pom_a1 ', &
+ 'pom_a4 ','S ','SF6 ','SO ','SO2 ', &
+ 'SO3 ','so4_a1 ','so4_a2 ','so4_a3 ','so4_a5 ', &
+ 'soa_a1 ','soa_a2 ','SOAG ','e ','HO2 ', &
+ 'N2D ','N2p ','NOp ','Np ','O1D ', &
+ 'O2_1D ','O2_1S ','O2p ','OH ','Op ', &
+ 'Op2D ','Op2P ','H2O ' /)
- adv_mass(:102) = (/ 12.011000_r8, 12.011000_r8, 79.904000_r8, 115.356700_r8, 95.903400_r8, &
+ adv_mass(:103) = (/ 12.011000_r8, 12.011000_r8, 79.904000_r8, 115.356700_r8, 95.903400_r8, &
141.908940_r8, 99.716850_r8, 153.821800_r8, 165.364506_r8, 148.910210_r8, &
137.367503_r8, 187.375310_r8, 170.921013_r8, 154.466716_r8, 120.913206_r8, &
173.833800_r8, 30.025200_r8, 94.937200_r8, 133.402300_r8, 50.485900_r8, &
@@ -71,15 +72,15 @@ subroutine set_sim_dat
44.012880_r8, 108.010480_r8, 58.442468_r8, 58.442468_r8, 58.442468_r8, &
30.006140_r8, 46.005540_r8, 62.004940_r8, 1.007400_r8, 1.007400_r8, &
1.007400_r8, 1.007400_r8, 1.007400_r8, 15.999400_r8, 31.998800_r8, &
- 47.998200_r8, 67.451500_r8, 60.076400_r8, 12.011000_r8, 12.011000_r8, &
- 32.066000_r8, 146.056419_r8, 48.065400_r8, 64.064800_r8, 80.064200_r8, &
- 115.107340_r8, 115.107340_r8, 115.107340_r8, 115.107340_r8, 12.011000_r8, &
- 12.011000_r8, 12.011000_r8, 0.548567E-03_r8, 33.006200_r8, 14.006740_r8, &
- 28.013480_r8, 30.006140_r8, 14.006740_r8, 15.999400_r8, 31.998800_r8, &
- 31.998800_r8, 31.998800_r8, 17.006800_r8, 15.999400_r8, 15.999400_r8, &
- 15.999400_r8, 18.014200_r8 /)
+ 47.998200_r8, 47.998200_r8, 67.451500_r8, 60.076400_r8, 12.011000_r8, &
+ 12.011000_r8, 32.066000_r8, 146.056419_r8, 48.065400_r8, 64.064800_r8, &
+ 80.064200_r8, 115.107340_r8, 115.107340_r8, 115.107340_r8, 115.107340_r8, &
+ 12.011000_r8, 12.011000_r8, 12.011000_r8, 0.548567E-03_r8, 33.006200_r8, &
+ 14.006740_r8, 28.013480_r8, 30.006140_r8, 14.006740_r8, 15.999400_r8, &
+ 31.998800_r8, 31.998800_r8, 31.998800_r8, 17.006800_r8, 15.999400_r8, &
+ 15.999400_r8, 15.999400_r8, 18.014200_r8 /)
- crb_mass(:102) = (/ 12.011000_r8, 12.011000_r8, 0.000000_r8, 0.000000_r8, 0.000000_r8, &
+ crb_mass(:103) = (/ 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, 24.022000_r8, 24.022000_r8, 24.022000_r8, 12.011000_r8, &
12.011000_r8, 12.011000_r8, 12.011000_r8, 24.022000_r8, 12.011000_r8, &
@@ -93,16 +94,17 @@ subroutine set_sim_dat
0.000000_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, 0.000000_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, 12.011000_r8, 12.011000_r8, &
+ 0.000000_r8, 0.000000_r8, 0.000000_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, 0.000000_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, &
- 12.011000_r8, 12.011000_r8, 0.000000_r8, 0.000000_r8, 0.000000_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, 0.000000_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 /)
+ 0.000000_r8, 0.000000_r8, 0.000000_r8 /)
fix_mass(: 2) = (/ 0.00000000_r8, 28.0134800_r8 /)
+ clsmap(: 1,1) = (/ 72 /)
clsmap(:102,4) = (/ 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, &
@@ -110,10 +112,10 @@ subroutine set_sim_dat
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, &
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, &
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, &
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, &
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, &
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, &
- 101, 102 /)
+ 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, &
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, &
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, &
+ 102, 103 /)
permute(:102,4) = (/ 1, 2, 97, 45, 101, 62, 3, 27, 34, 35, &
29, 36, 30, 37, 31, 58, 86, 63, 32, 54, &
diff --git a/src/control/cam_control_mod.F90 b/src/control/cam_control_mod.F90
index ce6b3deaad..3d954f68ce 100644
--- a/src/control/cam_control_mod.F90
+++ b/src/control/cam_control_mod.F90
@@ -33,8 +33,9 @@ module cam_control_mod
logical, protected :: ideal_phys ! true => run Held-Suarez (1994) physics
logical, protected :: kessler_phys ! true => run Kessler physics
logical, protected :: tj2016_phys ! true => run tj2016 physics
+logical, protected :: frierson_phys ! true => run frierson physics
logical, protected :: simple_phys ! true => adiabatic or ideal_phys or kessler_phys
- ! or tj2016
+ ! or tj2016 or frierson
logical, protected :: aqua_planet ! Flag to run model in "aqua planet" mode
logical, protected :: moist_physics ! true => moist physics enabled, i.e.,
! (.not. ideal_phys) .and. (.not. adiabatic)
@@ -135,8 +136,9 @@ subroutine cam_ctrl_set_physics_type(phys_package)
ideal_phys = trim(phys_package) == 'held_suarez'
kessler_phys = trim(phys_package) == 'kessler'
tj2016_phys = trim(phys_package) == 'tj2016'
+ frierson_phys = trim(phys_package) == 'grayrad'
- simple_phys = adiabatic .or. ideal_phys .or. kessler_phys .or. tj2016_phys
+ simple_phys = adiabatic .or. ideal_phys .or. kessler_phys .or. tj2016_phys .or. frierson_phys
moist_physics = .not. (adiabatic .or. ideal_phys)
@@ -154,6 +156,8 @@ subroutine cam_ctrl_set_physics_type(phys_package)
write(iulog,*) 'Run model with Kessler warm-rain physics forcing'
else if (tj2016_phys) then
write(iulog,*) 'Run model with Thatcher-Jablonowski (2016) physics forcing (moist Held-Suarez)'
+ else if (frierson_phys) then
+ write(iulog,*) 'Run model with Frierson (2006) physics'
end if
end if
diff --git a/src/control/cam_history.F90 b/src/control/cam_history.F90
index 677544bdc3..4cafd3d6c1 100644
--- a/src/control/cam_history.F90
+++ b/src/control/cam_history.F90
@@ -2818,7 +2818,18 @@ subroutine fldlst ()
do f=nflds(t)-1,1,-1
do ff=1,f
- if (tape(t)%hlist(ff)%field%name > tape(t)%hlist(ff+1)%field%name) then
+ if (tape(t)%hlist(ff)%field%numlev > tape(t)%hlist(ff+1)%field%numlev) then
+ tmp = tape(t)%hlist(ff)
+ tape(t)%hlist(ff ) = tape(t)%hlist(ff+1)
+ tape(t)%hlist(ff+1) = tmp
+ end if
+
+ end do
+
+ do ff=1,f
+
+ if ((tape(t)%hlist(ff)%field%numlev == tape(t)%hlist(ff+1)%field%numlev) .and. &
+ (tape(t)%hlist(ff)%field%name > tape(t)%hlist(ff+1)%field%name)) then
tmp = tape(t)%hlist(ff)
tape(t)%hlist(ff ) = tape(t)%hlist(ff+1)
@@ -4992,7 +5003,6 @@ subroutine h_global (f, t)
use cam_history_support, only: dim_index_2d
use shr_reprosum_mod, only: shr_reprosum_calc
use spmd_utils, only: mpicom
- use shr_const_mod, only: PI => SHR_CONST_PI
!
!-----------------------------------------------------------------------
!
diff --git a/src/control/runtime_opts.F90 b/src/control/runtime_opts.F90
index f09554244d..3d4cb35c95 100644
--- a/src/control/runtime_opts.F90
+++ b/src/control/runtime_opts.F90
@@ -91,11 +91,15 @@ subroutine read_namelist(nlfilename, single_column, scmlat, scmlon)
use rate_diags, only: rate_diags_readnl
use tracers, only: tracers_readnl
use nudging, only: nudging_readnl
+#if ( defined SIMPLE )
+ use frierson_cam, only: frierson_readnl
+#endif
use dyn_comp, only: dyn_readnl
use ionosphere_interface,only: ionosphere_readnl
use qneg_module, only: qneg_readnl
use lunar_tides, only: lunar_tides_readnl
+ use hemco_interface, only: hemco_readnl
use upper_bc, only: ubc_readnl
use cam_budget, only: cam_budget_readnl
use phys_grid_ctem, only: phys_grid_ctem_readnl
@@ -195,10 +199,14 @@ subroutine read_namelist(nlfilename, single_column, scmlat, scmlon)
call rate_diags_readnl(nlfilename)
call scam_readnl(nlfilename, single_column, scmlat, scmlon)
call nudging_readnl(nlfilename)
+#if ( defined SIMPLE )
+ call frierson_readnl(nlfilename)
+#endif
call dyn_readnl(nlfilename)
call ionosphere_readnl(nlfilename)
call qneg_readnl(nlfilename)
+ call hemco_readnl(nlfilename)
call cam_budget_readnl(nlfilename)
call phys_grid_ctem_readnl(nlfilename)
diff --git a/src/dynamics/se/dycore/fvm_consistent_se_cslam.F90 b/src/dynamics/se/dycore/fvm_consistent_se_cslam.F90
index ede1f44059..b5bcebd845 100644
--- a/src/dynamics/se/dycore/fvm_consistent_se_cslam.F90
+++ b/src/dynamics/se/dycore/fvm_consistent_se_cslam.F90
@@ -44,7 +44,7 @@ subroutine run_consistent_se_cslam(elem,fvm,hybrid,dt_fvm,tl,nets,nete,hvcoord,&
use thread_mod , only: vert_num_threads, omp_set_nested
implicit none
type (element_t) , intent(inout) :: elem(:)
- type (fvm_struct) , intent(inout) :: fvm(:)
+ type (fvm_struct), target , intent(inout) :: fvm(:)
type (hybrid_t) , intent(in) :: hybrid ! distributed parallel structure (shared)
type (TimeLevel_t) , intent(in) :: tl ! time level struct
type (hvcoord_t) , intent(in) :: hvcoord
@@ -71,7 +71,9 @@ subroutine run_consistent_se_cslam(elem,fvm,hybrid,dt_fvm,tl,nets,nete,hvcoord,&
integer :: region_num_threads
logical :: inJetCall
logical :: ActiveJetThread
-
+
+ real(r8), pointer :: fcube(:,:,:,:)
+ real(r8), pointer :: spherecentroid(:,:,:)
llimiter = .true.
@@ -152,22 +154,26 @@ subroutine run_consistent_se_cslam(elem,fvm,hybrid,dt_fvm,tl,nets,nete,hvcoord,&
!call t_stopf('fvm:orthogonal_swept_areas')
do ie=nets,nete
+ ! Intel compiler version 2023.0.0 on derecho had significant slowdown on subroutine interface without
+ ! these pointers.
+ fcube => fvm(ie)%c(:,:,:,:)
+ spherecentroid => fvm(ie)%spherecentroid(:,1-nhe:nc+nhe,1-nhe:nc+nhe)
do k=kmin,kmax
- !call t_startf('fvm:tracers_reconstruct')
- call reconstruction(fvm(ie)%c(:,:,:,:),nlev,k,&
+ !call t_startf('FVM:tracers_reconstruct')
+ call reconstruction(fcube,nlev,k,&
ctracer(:,:,:,:),irecons_tracer,llimiter,ntrac,&
nc,nhe,nhr,nhc,nht,ns,nhr+(nhe-1),&
fvm(ie)%jx_min,fvm(ie)%jx_max,fvm(ie)%jy_min,fvm(ie)%jy_max,&
fvm(ie)%cubeboundary,fvm(ie)%halo_interp_weight,fvm(ie)%ibase,&
- fvm(ie)%spherecentroid(:,1-nhe:nc+nhe,1-nhe:nc+nhe),&
+ spherecentroid,&
fvm(ie)%recons_metrics,fvm(ie)%recons_metrics_integral,&
fvm(ie)%rot_matrix,fvm(ie)%centroid_stretch,&
fvm(ie)%vertex_recons_weights,fvm(ie)%vtx_cart,&
irecons_tracer_lev(k))
- !call t_stopf('fvm:tracers_reconstruct')
- !call t_startf('fvm:swept_flux')
- call swept_flux(elem(ie),fvm(ie),k,ctracer,irecons_tracer_lev(k),gsweights,gspts)
- !call t_stopf('fvm:swept_flux')
+ !call t_stopf('FVM:tracers_reconstruct')
+ !call t_startf('fvm:swept_flux')
+ call swept_flux(elem(ie),fvm(ie),k,ctracer,irecons_tracer_lev(k),gsweights,gspts)
+ !call t_stopf('fvm:swept_flux')
end do
end do
!
diff --git a/src/physics/cam/gw_drag.F90 b/src/physics/cam/gw_drag.F90
index 9788ef79ab..0f48e661af 100644
--- a/src/physics/cam/gw_drag.F90
+++ b/src/physics/cam/gw_drag.F90
@@ -72,7 +72,7 @@ module gw_drag
! Factor for SH orographic waves.
real(r8) :: gw_oro_south_fac = 1._r8
-
+
! Frontogenesis function critical threshold.
real(r8) :: frontgfc = unset_r8
@@ -136,9 +136,6 @@ module gw_drag
type(BeresSourceDesc) :: beres_dp_desc
type(BeresSourceDesc) :: beres_sh_desc
- ! Width of gaussian used to create frontogenesis tau profile [m/s].
- real(r8), parameter :: front_gaussian_width = 30._r8
-
! Frontogenesis wave settings.
type(CMSourceDesc) :: cm_desc
type(CMSourceDesc) :: cm_igw_desc
@@ -183,12 +180,15 @@ module gw_drag
character(len=1), parameter :: beres_dp_pf = "B"
character(len=1), parameter :: beres_sh_pf = "S"
- ! namelist
+ ! namelist
logical :: history_amwg ! output the variables used by the AMWG diag package
logical :: gw_lndscl_sgh = .true. ! scale SGH by land frac
real(r8) :: gw_prndl = 0.25_r8
real(r8) :: gw_qbo_hdepth_scaling = 1._r8 ! heating depth scaling factor
+ ! Width of gaussian used to create frontogenesis tau profile [m/s].
+ real(r8) :: front_gaussian_width = -huge(1._r8)
+
logical :: gw_top_taper=.false.
real(r8), pointer :: vramp(:)=>null()
@@ -232,7 +232,7 @@ subroutine gw_drag_readnl(nlfile)
rdg_gamma_cd_llb, trpd_leewv_rdg_gamma, bnd_rdggm, &
gw_oro_south_fac, gw_limit_tau_without_eff, &
gw_lndscl_sgh, gw_prndl, gw_apply_tndmax, gw_qbo_hdepth_scaling, &
- gw_top_taper
+ gw_top_taper, front_gaussian_width
!----------------------------------------------------------------------
if (use_simple_phys) return
@@ -333,6 +333,8 @@ subroutine gw_drag_readnl(nlfile)
call mpi_bcast(gw_drag_file_sh, len(gw_drag_file_sh), mpi_character, mstrid, mpicom, ierr)
if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: gw_drag_file_sh")
+ call mpi_bcast(front_gaussian_width, 1, mpi_real8, mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: front_gaussian_width")
! Check if fcrit2 was set.
call shr_assert(fcrit2 /= unset_r8, &
@@ -379,7 +381,7 @@ subroutine gw_init()
! temporary for restart with ridge scheme
use cam_initfiles, only: bnd_topo
-
+
use cam_pio_utils, only: cam_pio_openfile
use cam_grid_support, only: cam_grid_check, cam_grid_id
use cam_grid_support, only: cam_grid_get_dim_names
@@ -539,7 +541,7 @@ subroutine gw_init()
! Initialize subordinate modules.
call gw_common_init(pver,&
- tau_0_ubc, ktop, gravit, rair, alpha, gw_prndl, &
+ tau_0_ubc, ktop, gravit, rair, alpha, gw_prndl, &
gw_qbo_hdepth_scaling, errstring )
call shr_assert(trim(errstring) == "", "gw_common_init: "//errstring// &
errMsg(__FILE__, __LINE__))
@@ -551,7 +553,7 @@ subroutine gw_init()
&but effgw_oro was not set.")
end if
end if
-
+
if (use_gw_oro .or. use_gw_rdg_beta .or. use_gw_rdg_gamma) then
sgh_idx = pbuf_get_index('SGH')
@@ -611,7 +613,7 @@ subroutine gw_init()
! Try to open topo file here. This workaround will not be needed
! once the refactored initialization sequence is on trunk.
-
+
allocate(fh_topo)
! Error exit is from getfil if file not found.
call getfil(bnd_topo, bnd_topo_loc)
@@ -627,12 +629,12 @@ subroutine gw_init()
rdg_mxdis(pcols,prdg,begchunk:endchunk), &
rdg_anixy(pcols,prdg,begchunk:endchunk), &
rdg_angll(pcols,prdg,begchunk:endchunk) )
-
+
call infld('GBXAR', fh_topo, dim1name, dim2name, 1, pcols, &
begchunk, endchunk, rdg_gbxar, found, gridname='physgrid')
if (.not. found) call endrun(sub//': ERROR: GBXAR not found on topo file')
rdg_gbxar = rdg_gbxar * (rearth/1000._r8)*(rearth/1000._r8) ! transform to km^2
-
+
call infld('HWDTH', fh_topo, dim1name, 'nrdg', dim2name, 1, pcols, &
1, prdg, begchunk, endchunk, rdg_hwdth, found, gridname='physgrid')
if (.not. found) call endrun(sub//': ERROR: HWDTH not found on topo file')
@@ -707,7 +709,7 @@ subroutine gw_init()
'interface geopotential heights in GW code ' )
call addfld('ZMGW', (/ 'lev' /) , 'A' ,'m' , &
'midlayer geopotential heights in GW code ' )
-
+
call addfld('TAUM1_DIAG' , (/ 'ilev' /) , 'I' ,'N/m2' , &
'Ridge based momentum flux profile')
call addfld('TAU1RDGBETAM' , (/ 'ilev' /) , 'I' ,'N/m2' , &
@@ -749,7 +751,7 @@ subroutine gw_init()
if (effgw_rdg_gamma == unset_r8) then
call endrun(sub//": ERROR: Anisotropic OGW enabled, but effgw_rdg_gamma was not set.")
end if
-
+
call getfil(bnd_rdggm, bnd_rdggm_loc, iflag=1, lexist=found)
if (found) then
call cam_pio_openfile(fh_rdggm, bnd_rdggm_loc, PIO_NOWRITE)
@@ -793,7 +795,7 @@ subroutine gw_init()
call infld('ANGLL', fh_rdggm, dim1name, 'nrdg', dim2name, 1, pcols, &
1, prdg, begchunk, endchunk, rdg_angllg, found, gridname='physgrid')
if (.not. found) call endrun(sub//': ERROR: ANGLL not found on bnd_rdggm')
-
+
call pio_closefile(fh_rdggm)
call addfld ('TAU1RDGGAMMAM' , (/ 'ilev' /) , 'I' ,'N/m2' , &
@@ -1365,7 +1367,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
real(r8), parameter :: degree2radian = pi/180._r8
real(r8), parameter :: al0 = 82.5_r8 * degree2radian
real(r8), parameter :: dlat0 = 5.0_r8 * degree2radian
-
+
! effective gw diffusivity at interfaces needed for output
real(r8) :: egwdffi(state%ncol,pver+1)
! sum from the two types of spectral GW
@@ -1451,7 +1453,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
! Totals that accumulate over different sources.
egwdffi_tot = 0._r8
flx_heat = 0._r8
-
+
if (use_gw_convect_dp) then
!------------------------------------------------------------------
! Convective gravity waves (Beres scheme, deep).
@@ -1802,7 +1804,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
! Efficiency of gravity wave momentum transfer.
! Take into account that wave sources are only over land.
call pbuf_get_field(pbuf, sgh_idx, sgh)
-
+
if (gw_lndscl_sgh) then
where (cam_in%landfrac(:ncol) >= epsilon(1._r8))
effgw = effgw_oro * cam_in%landfrac(:ncol)
@@ -1969,7 +1971,7 @@ subroutine gw_tend(state, pbuf, dt, ptend, cam_in, flx_heat)
! Write totals to history file.
call outfld('EKGW', egwdffi_tot , ncol, lchnk)
call outfld('TTGW', ptend%s/cpairv(:,:,lchnk), pcols, lchnk)
-
+
call outfld('UTGW_TOTAL', ptend%u, pcols, lchnk)
call outfld('VTGW_TOTAL', ptend%v, pcols, lchnk)
@@ -2143,7 +2145,7 @@ subroutine gw_rdg_calc( &
! initialize accumulated momentum fluxes and tendencies
taurx = 0._r8
- taury = 0._r8
+ taury = 0._r8
ttrdg = 0._r8
utrdg = 0._r8
vtrdg = 0._r8
@@ -2151,36 +2153,36 @@ subroutine gw_rdg_calc( &
do nn = 1, n_rdg
kwvrdg = 0.001_r8 / ( hwdth(:,nn) + 0.001_r8 ) ! this cant be done every time step !!!
- isoflag = 0
+ isoflag = 0
effgw = effgw_rdg * ( hwdth(1:ncol,nn)* clngt(1:ncol,nn) ) / gbxar(1:ncol)
effgw = min( effgw_rdg_max , effgw )
call gw_rdg_src(ncol, band_oro, p, &
u, v, t, mxdis(:,nn), angll(:,nn), anixy(:,nn), kwvrdg, isoflag, zi, nm, &
- src_level, tend_level, bwv_level, tlb_level, tau, ubm, ubi, xv, yv, &
+ src_level, tend_level, bwv_level, tlb_level, tau, ubm, ubi, xv, yv, &
ubmsrc, usrc, vsrc, nsrc, rsrc, m2src, tlb, bwv, Fr1, Fr2, Frx, c)
call gw_rdg_belowpeak(ncol, band_oro, rdg_cd_llb, &
- t, mxdis(:,nn), anixy(:,nn), kwvrdg, &
+ t, mxdis(:,nn), anixy(:,nn), kwvrdg, &
zi, nm, ni, rhoi, &
- src_level, tau, &
- ubmsrc, nsrc, rsrc, m2src, tlb, bwv, Fr1, Fr2, Frx, &
+ src_level, tau, &
+ ubmsrc, nsrc, rsrc, m2src, tlb, bwv, Fr1, Fr2, Frx, &
tauoro, taudsw, hdspwv, hdspdw)
call gw_rdg_break_trap(ncol, band_oro, &
- zi, nm, ni, ubm, ubi, rhoi, kwvrdg , bwv, tlb, wbr, &
- src_level, tlb_level, hdspwv, hdspdw, mxdis(:,nn), &
- tauoro, taudsw, tau, &
+ zi, nm, ni, ubm, ubi, rhoi, kwvrdg , bwv, tlb, wbr, &
+ src_level, tlb_level, hdspwv, hdspdw, mxdis(:,nn), &
+ tauoro, taudsw, tau, &
ldo_trapped_waves=trpd_leewv)
-
+
call gw_drag_prof(ncol, band_oro, p, src_level, tend_level, dt, &
t, vramp, &
piln, rhoi, nm, ni, ubm, ubi, xv, yv, &
effgw, c, kvtt, q, dse, tau, utgw, vtgw, &
ttgw, qtgw, egwdffi, gwut, dttdf, dttke, &
- kwvrdg=kwvrdg, &
+ kwvrdg=kwvrdg, &
satfac_in = 1._r8, lapply_vdiff=gw_rdg_do_vdiff , tau_diag=tau_diag )
! Add the tendencies from each ridge to the totals.
diff --git a/src/physics/cam/modal_aer_opt.F90 b/src/physics/cam/modal_aer_opt.F90
index 5c95c17840..136c188a1e 100644
--- a/src/physics/cam/modal_aer_opt.F90
+++ b/src/physics/cam/modal_aer_opt.F90
@@ -15,7 +15,7 @@ module modal_aer_opt
use spmd_utils, only: masterproc
use ref_pres, only: top_lev => clim_modal_aero_top_lev
use physconst, only: rhoh2o, rga, rair
-use radconstants, only: nswbands, nlwbands, idx_sw_diag, idx_uv_diag, idx_nir_diag
+use radconstants, only: nswbands, nlwbands, idx_sw_diag, idx_uv_diag, idx_nir_diag, get_lw_spectral_boundaries
use rad_constituents, only: n_diag, rad_cnst_get_call_list, rad_cnst_get_info, rad_cnst_get_aer_mmr, &
rad_cnst_get_aer_props, rad_cnst_get_mode_props
use physics_types, only: physics_state
@@ -33,13 +33,15 @@ module modal_aer_opt
use modal_aero_wateruptake, only: modal_aero_wateruptake_dr
use modal_aero_calcsize, only: modal_aero_calcsize_diag
+use table_interp_mod, only: table_interp, table_interp_wghts, table_interp_calcwghts
+
implicit none
private
save
public :: modal_aer_opt_readnl, modal_aer_opt_init, modal_aero_sw, modal_aero_lw
-
+real(r8), parameter :: rh2odens = 1._r8/rhoh2o
character(len=*), parameter :: unset_str = 'UNSET'
! Namelist variables:
@@ -59,6 +61,7 @@ module modal_aer_opt
! physics buffer indices
integer :: dgnumwet_idx = -1
integer :: qaerwat_idx = -1
+integer :: lw10um_indx = -1
character(len=4) :: diag(0:n_diag) = (/' ','_d1 ','_d2 ','_d3 ','_d4 ','_d5 ', &
'_d6 ','_d7 ','_d8 ','_d9 ','_d10'/)
@@ -115,7 +118,7 @@ subroutine modal_aer_opt_init()
integer :: i, m
real(r8) :: rmmin, rmmax ! min, max aerosol surface mode radius treated (m)
character(len=256) :: locfile
-
+
logical :: history_amwg ! output the variables used by the AMWG diag package
logical :: history_aero_optics ! output aerosol optics diagnostics
logical :: history_dust ! output dust diagnostics
@@ -125,8 +128,11 @@ subroutine modal_aer_opt_init()
integer :: errcode
character(len=*), parameter :: routine='modal_aer_opt_init'
- character(len=10) :: fldname
+ character(len=32) :: fldname
character(len=128) :: lngname
+ character(len=32) :: modename
+
+ real(r8) :: lwavlen_lo(nlwbands), lwavlen_hi(nlwbands)
!----------------------------------------------------------------------------
@@ -231,47 +237,54 @@ subroutine modal_aer_opt_init()
call addfld ('EXTxASYMdn', (/ 'lev' /), 'A',' ','extinction 550 * asymmetry factor, day night', &
flag_xyfill=.true.)
+ call addfld ('AODTOT', horiz_only, 'A','1','Aerosol optical depth summed over all sw wavelengths ', &
+ flag_xyfill=.true.)
+ call addfld ('AODTOTdn', horiz_only, 'A','1','Aerosol optical depth summed over all sw wavelengths, day night', &
+ flag_xyfill=.true.)
+
call rad_cnst_get_info(0, nmodes=nmodes)
do m = 1, nmodes
- write(fldname,'(a,i1)') 'BURDEN', m
- write(lngname,'(a,i1)') 'Aerosol burden, day only, mode ', m
+ call rad_cnst_get_info(0,m, mode_type=modename)
+
+ write(fldname,'(a,i2.2)') 'BURDEN', m
+ write(lngname,'(a,i2.2)') 'Aerosol burden, day only, mode ', m
call addfld (fldname, horiz_only, 'A', 'kg/m2', lngname, flag_xyfill=.true.)
if (m>3 .and. history_aero_optics) then
call add_default (fldname, 1, ' ')
endif
- write(fldname,'(a,i1)') 'AODMODE', m
- write(lngname,'(a,i1)') 'Aerosol optical depth, day only, 550 nm mode ', m
+ fldname = 'AOD_'//trim(modename)
+ write(lngname,'(a,i2.2)') 'Aerosol optical depth, day only, 550 nm mode ', m
call addfld (fldname, horiz_only, 'A', ' ', lngname, flag_xyfill=.true.)
- if (m>3 .and. history_aero_optics) then
+ if (history_aero_optics) then
call add_default (fldname, 1, ' ')
endif
- write(fldname,'(a,i1)') 'AODDUST', m
- write(lngname,'(a,i1,a)') 'Aerosol optical depth, day only, 550 nm mode ',m,' from dust'
+ write(fldname,'(a,i2.2)') 'AODDUST', m
+ write(lngname,'(a,i2.2,a)') 'Aerosol optical depth, day only, 550 nm mode ',m,' from dust'
call addfld (fldname, horiz_only, 'A', ' ', lngname, flag_xyfill=.true.)
if (m>3 .and. history_aero_optics) then
call add_default (fldname, 1, ' ')
endif
- write(fldname,'(a,i1)') 'BURDENdn', m
- write(lngname,'(a,i1)') 'Aerosol burden, day night, mode ', m
+ write(fldname,'(a,i2.2)') 'BURDENdn', m
+ write(lngname,'(a,i2.2)') 'Aerosol burden, day night, mode ', m
call addfld (fldname, horiz_only, 'A', 'kg/m2', lngname, flag_xyfill=.true.)
if (m>3 .and. history_aero_optics) then
call add_default (fldname, 1, ' ')
endif
- write(fldname,'(a,i1)') 'AODdnMODE', m
- write(lngname,'(a,i1)') 'Aerosol optical depth 550 nm, day night, mode ', m
+ fldname = 'AODdn_'//trim(modename)
+ write(lngname,'(a,i2.2)') 'Aerosol optical depth 550 nm, day night, mode ', m
call addfld (fldname, horiz_only, 'A', ' ', lngname, flag_xyfill=.true.)
- if (m>3 .and. history_aero_optics) then
+ if (history_aero_optics) then
call add_default (fldname, 1, ' ')
endif
- write(fldname,'(a,i1)') 'AODdnDUST', m
- write(lngname,'(a,i1,a)') 'Aerosol optical depth 550 nm, day night, mode ',m,' from dust'
+ write(fldname,'(a,i2.2)') 'AODdnDUST', m
+ write(lngname,'(a,i2.2,a)') 'Aerosol optical depth 550 nm, day night, mode ',m,' from dust'
call addfld (fldname, horiz_only, 'A', ' ', lngname, flag_xyfill=.true.)
if (m>3 .and. history_aero_optics) then
call add_default (fldname, 1, ' ')
@@ -337,27 +350,23 @@ subroutine modal_aer_opt_init()
call addfld ('SSAVISdn', horiz_only, 'A',' ', 'Aerosol single-scatter albedo, day night', &
flag_xyfill=.true.)
-
- if (history_amwg) then
- call add_default ('AODDUST1' , 1, ' ')
- call add_default ('AODDUST3' , 1, ' ')
+ if (history_amwg) then
+ call add_default ('AODDUST01' , 1, ' ')
+ call add_default ('AODDUST03' , 1, ' ')
call add_default ('AODDUST' , 1, ' ')
call add_default ('AODVIS' , 1, ' ')
end if
- if (history_dust) then
- call add_default ('AODDUST1' , 1, ' ')
- call add_default ('AODDUST2' , 1, ' ')
- call add_default ('AODDUST3' , 1, ' ')
+ if (history_dust) then
+ call add_default ('AODDUST01' , 1, ' ')
+ call add_default ('AODDUST02' , 1, ' ')
+ call add_default ('AODDUST03' , 1, ' ')
end if
- if (history_aero_optics) then
- call add_default ('AODDUST1' , 1, ' ')
- call add_default ('AODDUST3' , 1, ' ')
+ if (history_aero_optics) then
+ call add_default ('AODDUST01' , 1, ' ')
+ call add_default ('AODDUST03' , 1, ' ')
call add_default ('ABSORB' , 1, ' ')
- call add_default ('AODMODE1' , 1, ' ')
- call add_default ('AODMODE2' , 1, ' ')
- call add_default ('AODMODE3' , 1, ' ')
call add_default ('AODVIS' , 1, ' ')
call add_default ('AODUV' , 1, ' ')
call add_default ('AODNIR' , 1, ' ')
@@ -369,9 +378,9 @@ subroutine modal_aer_opt_init()
call add_default ('AODSOA' , 1, ' ')
call add_default ('AODBC' , 1, ' ')
call add_default ('AODSS' , 1, ' ')
- call add_default ('BURDEN1' , 1, ' ')
- call add_default ('BURDEN2' , 1, ' ')
- call add_default ('BURDEN3' , 1, ' ')
+ call add_default ('BURDEN01' , 1, ' ')
+ call add_default ('BURDEN02' , 1, ' ')
+ call add_default ('BURDEN03' , 1, ' ')
call add_default ('BURDENDUST' , 1, ' ')
call add_default ('BURDENSO4' , 1, ' ')
call add_default ('BURDENPOM' , 1, ' ')
@@ -382,13 +391,10 @@ subroutine modal_aer_opt_init()
call add_default ('EXTINCT' , 1, ' ')
call add_default ('AODxASYM' , 1, ' ')
call add_default ('EXTxASYM' , 1, ' ')
-
- call add_default ('AODdnDUST1' , 1, ' ')
- call add_default ('AODdnDUST3' , 1, ' ')
+
+ call add_default ('AODdnDUST01' , 1, ' ')
+ call add_default ('AODdnDUST03' , 1, ' ')
call add_default ('ABSORBdn' , 1, ' ')
- call add_default ('AODdnMODE1' , 1, ' ')
- call add_default ('AODdnMODE2' , 1, ' ')
- call add_default ('AODdnMODE3' , 1, ' ')
call add_default ('AODVISdn' , 1, ' ')
call add_default ('AODUVdn' , 1, ' ')
call add_default ('AODNIRdn' , 1, ' ')
@@ -400,9 +406,9 @@ subroutine modal_aer_opt_init()
call add_default ('AODSOAdn' , 1, ' ')
call add_default ('AODBCdn' , 1, ' ')
call add_default ('AODSSdn' , 1, ' ')
- call add_default ('BURDENdn1' , 1, ' ')
- call add_default ('BURDENdn2' , 1, ' ')
- call add_default ('BURDENdn3' , 1, ' ')
+ call add_default ('BURDENdn01' , 1, ' ')
+ call add_default ('BURDENdn02' , 1, ' ')
+ call add_default ('BURDENdn03' , 1, ' ')
call add_default ('BURDENDUSTdn' , 1, ' ')
call add_default ('BURDENSO4dn' , 1, ' ')
call add_default ('BURDENPOMdn' , 1, ' ')
@@ -413,11 +419,11 @@ subroutine modal_aer_opt_init()
call add_default ('EXTINCTdn' , 1, ' ')
call add_default ('AODxASYMdn' , 1, ' ')
call add_default ('EXTxASYMdn' , 1, ' ')
- end if
+ end if
do ilist = 1, n_diag
if (call_list(ilist)) then
-
+
call addfld ('EXTINCT'//diag(ilist), (/ 'lev' /), 'A','/m', &
'Aerosol extinction', flag_xyfill=.true.)
call addfld ('ABSORB'//diag(ilist), (/ 'lev' /), 'A','/m', &
@@ -429,6 +435,11 @@ subroutine modal_aer_opt_init()
call addfld ('AODABS'//diag(ilist), horiz_only, 'A',' ', &
'Aerosol absorption optical depth 550 nm', flag_xyfill=.true.)
+ call addfld ('AODTOT'//diag(ilist), horiz_only, 'A','1', &
+ 'Aerosol optical depth summed over all sw wavelengths', flag_xyfill=.true.)
+ call addfld ('AODTOTdn'//diag(ilist), horiz_only, 'A','1', &
+ 'Aerosol optical depth summed over all sw wavelengths, day night', flag_xyfill=.true.)
+
call addfld ('EXTINCTdn'//diag(ilist), (/ 'lev' /), 'A','/m',&
'Aerosol extinction 550 nm, day night', flag_xyfill=.true.)
call addfld ('ABSORBdn'//diag(ilist), (/ 'lev' /), 'A','/m',&
@@ -455,6 +466,17 @@ subroutine modal_aer_opt_init()
end if
end do
+ call get_lw_spectral_boundaries(lwavlen_lo, lwavlen_hi, units='um')
+ do i = 1,nlwbands
+ if ((lwavlen_lo(i)<=10._r8) .and. (lwavlen_hi(i)>=10._r8)) then
+ lw10um_indx = i
+ end if
+ end do
+ if (lw10um_indx>0) then
+ call addfld('AODABSLW', (/ 'lev' /), 'A','/m','Aerosol long-wave absorption optical depth at 10 microns')
+ end if
+ call addfld ('TOTABSLW', (/ 'lev' /), 'A',' ', 'LW Aero total abs')
+
end subroutine modal_aer_opt_init
!===============================================================================
@@ -463,12 +485,12 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
tauxar, wa, ga, fa)
! calculates aerosol sw radiative properties
-
+
use tropopause, only : tropopause_findChemTrop
integer, intent(in) :: list_idx ! index of the climate or a diagnostic list
type(physics_state), intent(in), target :: state ! state variables
-
+
type(physics_buffer_desc), pointer :: pbuf(:)
integer, intent(in) :: nnite ! number of night columns
integer, intent(in) :: idxnite(nnite) ! local column indices of night columns
@@ -494,7 +516,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
real(r8) :: specdens ! species density (kg/m3)
complex(r8), pointer :: specrefindex(:) ! species refractive index
character*32 :: spectype ! species type
- real(r8) :: hygro_aer !
+ real(r8) :: hygro_aer !
real(r8), pointer :: dgnumwet(:,:) ! number mode wet diameter
real(r8), pointer :: qaerwat(:,:) ! aerosol water (g/g)
@@ -502,13 +524,13 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
real(r8), pointer :: dgnumdry_m(:,:,:) ! number mode dry diameter for all modes
real(r8), pointer :: dgnumwet_m(:,:,:) ! number mode wet diameter for all modes
real(r8), pointer :: qaerwat_m(:,:,:) ! aerosol water (g/g) for all modes
- real(r8), pointer :: wetdens_m(:,:,:) !
- real(r8), pointer :: hygro_m(:,:,:) !
- real(r8), pointer :: dryvol_m(:,:,:) !
- real(r8), pointer :: dryrad_m(:,:,:) !
- real(r8), pointer :: drymass_m(:,:,:) !
- real(r8), pointer :: so4dryvol_m(:,:,:) !
- real(r8), pointer :: naer_m(:,:,:) !
+ real(r8), pointer :: wetdens_m(:,:,:) !
+ real(r8), pointer :: hygro_m(:,:,:) !
+ real(r8), pointer :: dryvol_m(:,:,:) !
+ real(r8), pointer :: dryrad_m(:,:,:) !
+ real(r8), pointer :: drymass_m(:,:,:) !
+ real(r8), pointer :: so4dryvol_m(:,:,:) !
+ real(r8), pointer :: naer_m(:,:,:) !
real(r8) :: sigma_logr_aer ! geometric standard deviation of number distribution
real(r8) :: radsurf(pcols,pver) ! aerosol surface mode radius
@@ -529,9 +551,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
real(r8) :: watervol(pcols) ! volume concentration of water in each mode (m3/kg)
real(r8) :: wetvol(pcols) ! volume concentration of wet mode (m3/kg)
- integer :: itab(pcols), jtab(pcols)
- real(r8) :: ttab(pcols), utab(pcols)
- real(r8) :: cext(pcols,ncoef), cabs(pcols,ncoef), casm(pcols,ncoef)
+ real(r8) :: cext(ncoef,pcols), cabs(ncoef,pcols), casm(ncoef,pcols)
real(r8) :: pext(pcols) ! parameterized specific extinction (m2/kg)
real(r8) :: specpext(pcols) ! specific extinction (m2/kg)
real(r8) :: dopaer(pcols) ! aerosol optical depth in layer
@@ -545,6 +565,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
real(r8) :: extinctuv(pcols,pver)
real(r8) :: absorb(pcols,pver)
real(r8) :: aodvis(pcols) ! extinction optical depth
+ real(r8) :: aodtot(pcols) ! extinction optical depth
real(r8) :: aodvisst(pcols) ! stratospheric extinction optical depth
real(r8) :: aodabs(pcols) ! absorption optical depth
real(r8) :: asymvis(pcols) ! asymmetry factor * optical depth
@@ -591,12 +612,17 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
character(len=32) :: outname
+ character(len=32) :: modename
! debug output
integer, parameter :: nerrmax_dopaer=1000
integer :: nerr_dopaer = 0
real(r8) :: volf ! volume fraction of insoluble aerosol
character(len=*), parameter :: subname = 'modal_aero_sw'
+
+ type(table_interp_wghts) :: wghtsr(state%ncol)
+ type(table_interp_wghts) :: wghtsi(state%ncol)
+
!----------------------------------------------------------------------------
lchnk = state%lchnk
@@ -621,6 +647,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
extinct(1:ncol,:) = 0.0_r8
absorb(1:ncol,:) = 0.0_r8
aodvis(1:ncol) = 0.0_r8
+ aodtot(1:ncol) = 0.0_r8
aodvisst(1:ncol) = 0.0_r8
aodabs(1:ncol) = 0.0_r8
burdendust(:ncol) = 0.0_r8
@@ -633,7 +660,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
asymvis(1:ncol) = 0.0_r8
asymext(1:ncol,:) = 0.0_r8
- aodabsbc(:ncol) = 0.0_r8
+ aodabsbc(:ncol) = 0.0_r8
dustaod(:ncol) = 0.0_r8
so4aod(:ncol) = 0.0_r8
pomaod(:ncol) = 0.0_r8
@@ -669,7 +696,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
call endrun('modal_aero_sw: allocation FAILURE: arrays for diagnostic calcs')
end if
call modal_aero_calcsize_diag(state, pbuf, list_idx, dgnumdry_m, hygro_m, &
- dryvol_m, dryrad_m, drymass_m, so4dryvol_m, naer_m)
+ dryvol_m, dryrad_m, drymass_m, so4dryvol_m, naer_m)
call modal_aero_wateruptake_dr(state, pbuf, list_idx, dgnumdry_m, dgnumwet_m, &
qaerwat_m, wetdens_m, hygro_m, dryvol_m, dryrad_m, &
drymass_m, so4dryvol_m, naer_m)
@@ -804,7 +831,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
end do ! species loop
do i = 1, ncol
- watervol(i) = qaerwat(i,k)/rhoh2o
+ watervol(i) = qaerwat(i,k)*rh2odens
wetvol(i) = watervol(i) + dryvol(i)
if (watervol(i) < 0._r8) then
if (abs(watervol(i)) .gt. 1.e-1_r8*wetvol(i)) then
@@ -825,17 +852,13 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
! call t_startf('binterp')
! interpolate coefficients linear in refractive index
- ! first call calcs itab,jtab,ttab,utab
- itab(:ncol) = 0
- call binterp(extpsw(:,:,:,isw), ncol, ncoef, prefr, prefi, &
- refr, refi, refrtabsw(:,isw), refitabsw(:,isw), &
- itab, jtab, ttab, utab, cext)
- call binterp(abspsw(:,:,:,isw), ncol, ncoef, prefr, prefi, &
- refr, refi, refrtabsw(:,isw), refitabsw(:,isw), &
- itab, jtab, ttab, utab, cabs)
- call binterp(asmpsw(:,:,:,isw), ncol, ncoef, prefr, prefi, &
- refr, refi, refrtabsw(:,isw), refitabsw(:,isw), &
- itab, jtab, ttab, utab, casm)
+
+ wghtsr = table_interp_calcwghts( prefr, refrtabsw(:,isw), ncol, refr(:ncol) )
+ wghtsi = table_interp_calcwghts( prefi, refitabsw(:,isw), ncol, refi(:ncol) )
+
+ cext(:,:ncol)= table_interp( ncoef,ncol, prefr,prefi, wghtsr,wghtsi, extpsw(:,:,:,isw))
+ cabs(:,:ncol)= table_interp( ncoef,ncol, prefr,prefi, wghtsr,wghtsi, abspsw(:,:,:,isw))
+ casm(:,:ncol)= table_interp( ncoef,ncol, prefr,prefi, wghtsr,wghtsi, asmpsw(:,:,:,isw))
! call t_stopf('binterp')
@@ -843,9 +866,9 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
do i=1,ncol
if (logradsurf(i,k) .le. xrmax) then
- pext(i) = 0.5_r8*cext(i,1)
+ pext(i) = 0.5_r8*cext(1,i)
do nc = 2, ncoef
- pext(i) = pext(i) + cheb(nc,i,k)*cext(i,nc)
+ pext(i) = pext(i) + cheb(nc,i,k)*cext(nc,i)
enddo
pext(i) = exp(pext(i))
else
@@ -855,20 +878,21 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
! convert from m2/kg water to m2/kg aerosol
specpext(i) = pext(i)
pext(i) = pext(i)*wetvol(i)*rhoh2o
- pabs(i) = 0.5_r8*cabs(i,1)
- pasm(i) = 0.5_r8*casm(i,1)
+ pabs(i) = 0.5_r8*cabs(1,i)
+ pasm(i) = 0.5_r8*casm(1,i)
do nc = 2, ncoef
- pabs(i) = pabs(i) + cheb(nc,i,k)*cabs(i,nc)
- pasm(i) = pasm(i) + cheb(nc,i,k)*casm(i,nc)
+ pabs(i) = pabs(i) + cheb(nc,i,k)*cabs(nc,i)
+ pasm(i) = pasm(i) + cheb(nc,i,k)*casm(nc,i)
enddo
pabs(i) = pabs(i)*wetvol(i)*rhoh2o
pabs(i) = max(0._r8,pabs(i))
pabs(i) = min(pext(i),pabs(i))
- palb(i) = 1._r8-pabs(i)/max(pext(i),1.e-40_r8)
palb(i) = 1._r8-pabs(i)/max(pext(i),1.e-40_r8)
dopaer(i) = pext(i)*mass(i,k)
+
+ aodtot(i) = aodtot(i) + dopaer(i)
end do
if (savaeruv) then
@@ -941,7 +965,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
scatseasalt(i) = (scatseasalt(i) + scath2o*hygroseasalt(i)/sumhygro)/sumscat
absseasalt(i) = (absseasalt(i) + absh2o*hygroseasalt(i)/sumhygro)/sumabs
-
+
aodabsbc(i) = aodabsbc(i) + absbc(i)*dopaer(i)*(1.0_r8-palb(i))
aodc = (absdust(i)*(1.0_r8 - palb(i)) + palb(i)*scatdust(i))*dopaer(i)
@@ -972,21 +996,16 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
if ((dopaer(i) <= -1.e-10_r8) .or. (dopaer(i) >= 30._r8)) then
if (dopaer(i) <= -1.e-10_r8) then
- write(iulog,*) "ERROR: Negative aerosol optical depth &
- &in this layer."
+ write(iulog,*) "ERROR: Negative aerosol optical depth in this layer."
else
- write(iulog,*) "WARNING: Aerosol optical depth is &
- &unreasonably high in this layer."
+ write(iulog,*) "WARNING: Aerosol optical depth is unreasonably high in this layer."
end if
write(iulog,*) 'dopaer(', i, ',', k, ',', m, ',', lchnk, ')=', dopaer(i)
- ! write(iulog,*) 'itab,jtab,ttab,utab=',itab(i),jtab(i),ttab(i),utab(i)
write(iulog,*) 'k=', k, ' pext=', pext(i), ' specext=', specpext(i)
write(iulog,*) 'wetvol=', wetvol(i), ' dryvol=', dryvol(i), ' watervol=', watervol(i)
- ! write(iulog,*) 'cext=',(cext(i,l),l=1,ncoef)
- ! write(iulog,*) 'crefin=',crefin(i)
write(iulog,*) 'nspec=', nspec
- ! write(iulog,*) 'cheb=', (cheb(nc,m,i,k),nc=2,ncoef)
+
do l = 1, nspec
call rad_cnst_get_aer_mmr(list_idx, m, l, 'a', state, pbuf, specmmr)
call rad_cnst_get_aer_props(list_idx, m, l, density_aer=specdens, &
@@ -998,7 +1017,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
end do
nerr_dopaer = nerr_dopaer + 1
-! if (nerr_dopaer >= nerrmax_dopaer) then
+
if (dopaer(i) < -1.e-10_r8) then
write(iulog,*) '*** halting in '//subname//' after nerr_dopaer =', nerr_dopaer
call endrun('exit from '//subname)
@@ -1023,28 +1042,30 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
! be necessary to provide output for the rad_diag lists.
if (list_idx == 0) then
- write(outname,'(a,i1)') 'BURDENdn', m
+ call rad_cnst_get_info(0,m, mode_type=modename)
+
+ write(outname,'(a,i2.2)') 'BURDENdn', m
call outfld(trim(outname), burden, pcols, lchnk)
- write(outname,'(a,i1)') 'AODdnMODE', m
+ outname = 'AODdn_'//trim(modename)
call outfld(trim(outname), aodmode, pcols, lchnk)
- write(outname,'(a,i1)') 'AODdnDUST', m
+ write(outname,'(a,i2.2)') 'AODdnDUST', m
call outfld(trim(outname), dustaodmode, pcols, lchnk)
-
+
do i = 1, nnite
burden(idxnite(i)) = fillvalue
aodmode(idxnite(i)) = fillvalue
dustaodmode(idxnite(i)) = fillvalue
end do
- write(outname,'(a,i1)') 'BURDEN', m
+ write(outname,'(a,i2.2)') 'BURDEN', m
call outfld(trim(outname), burden, pcols, lchnk)
- write(outname,'(a,i1)') 'AODMODE', m
+ outname = 'AOD_'//trim(modename)
call outfld(trim(outname), aodmode, pcols, lchnk)
- write(outname,'(a,i1)') 'AODDUST', m
+ write(outname,'(a,i2.2)') 'AODDUST', m
call outfld(trim(outname), dustaodmode, pcols, lchnk)
end if
@@ -1071,12 +1092,14 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
call outfld('ABSORBdn'//diag(list_idx), absorb, pcols, lchnk)
call outfld('AODVISdn'//diag(list_idx), aodvis, pcols, lchnk)
call outfld('AODABSdn'//diag(list_idx), aodabs, pcols, lchnk)
+ call outfld('AODTOTdn'//diag(list_idx), aodtot, pcols, lchnk)
call outfld('AODVISstdn'//diag(list_idx), aodvisst,pcols, lchnk)
call outfld('EXTxASYMdn'//diag(list_idx), asymext, pcols, lchnk)
-
+
do i = 1, nnite
extinct(idxnite(i),:) = fillvalue
absorb(idxnite(i),:) = fillvalue
+ aodtot(idxnite(i)) = fillvalue
aodvis(idxnite(i)) = fillvalue
aodabs(idxnite(i)) = fillvalue
aodvisst(idxnite(i)) = fillvalue
@@ -1086,6 +1109,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
call outfld('EXTINCT'//diag(list_idx), extinct, pcols, lchnk)
call outfld('ABSORB'//diag(list_idx), absorb, pcols, lchnk)
call outfld('AODVIS'//diag(list_idx), aodvis, pcols, lchnk)
+ call outfld('AODTOT'//diag(list_idx), aodtot, pcols, lchnk)
call outfld('AODABS'//diag(list_idx), aodabs, pcols, lchnk)
call outfld('AODVISst'//diag(list_idx), aodvisst,pcols, lchnk)
call outfld('EXTxASYM'//diag(list_idx), asymext, pcols, lchnk)
@@ -1099,7 +1123,7 @@ subroutine modal_aero_sw(list_idx, state, pbuf, nnite, idxnite, &
ssavis(i) = 0.925_r8
endif
end do
-
+
call outfld('SSAVISdn', ssavis, pcols, lchnk)
call outfld('AODxASYMdn', asymvis, pcols, lchnk)
@@ -1192,7 +1216,7 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
integer, intent(in) :: list_idx ! index of the climate or a diagnostic list
type(physics_state), intent(in), target :: state ! state variables
-
+
type(physics_buffer_desc), pointer :: pbuf(:)
real(r8), intent(out) :: tauxar(pcols,pver,nlwbands) ! layer absorption optical depth
@@ -1211,7 +1235,7 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
real(r8), pointer :: dgnumdry_m(:,:,:) ! number mode dry diameter for all modes
real(r8), pointer :: dgnumwet_m(:,:,:) ! number mode wet diameter for all modes
real(r8), pointer :: qaerwat_m(:,:,:) ! aerosol water (g/g) for all modes
- real(r8), pointer :: wetdens_m(:,:,:) !
+ real(r8), pointer :: wetdens_m(:,:,:) !
real(r8), pointer :: hygro_m(:,:,:) !
real(r8), pointer :: dryvol_m(:,:,:) !
real(r8), pointer :: dryrad_m(:,:,:) !
@@ -1241,9 +1265,7 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
real(r8), pointer :: refitablw(:,:) ! table of imag refractive indices for aerosols
real(r8), pointer :: absplw(:,:,:,:) ! specific absorption
- integer :: itab(pcols), jtab(pcols)
- real(r8) :: ttab(pcols), utab(pcols)
- real(r8) :: cabs(pcols,ncoef)
+ real(r8) :: cabs(ncoef,pcols)
real(r8) :: pabs(pcols) ! parameterized specific absorption (m2/kg)
real(r8) :: dopaer(pcols) ! aerosol optical depth in layer
@@ -1252,8 +1274,19 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
real(r8) :: volf ! volume fraction of insoluble aerosol
character(len=*), parameter :: subname = 'modal_aero_lw'
+
+ real(r8) :: radsurf(pcols,pver) ! aerosol surface mode radius
+ real(r8) :: logradsurf(pcols,pver) ! log(aerosol surface mode radius)
+
+ real(r8) :: lwabs(pcols,pver)
+
+ type(table_interp_wghts) :: wghtsr(state%ncol)
+ type(table_interp_wghts) :: wghtsi(state%ncol)
+
!----------------------------------------------------------------------------
+ lwabs = 0.0_r8
+
lchnk = state%lchnk
ncol = state%ncol
@@ -1283,7 +1316,7 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
call endrun('modal_aero_lw: allocation FAILURE: arrays for diagnostic calcs')
end if
call modal_aero_calcsize_diag(state, pbuf, list_idx, dgnumdry_m, hygro_m, &
- dryvol_m, dryrad_m, drymass_m, so4dryvol_m, naer_m)
+ dryvol_m, dryrad_m, drymass_m, so4dryvol_m, naer_m)
call modal_aero_wateruptake_dr(state, pbuf, list_idx, dgnumdry_m, dgnumwet_m, &
qaerwat_m, wetdens_m, hygro_m, dryvol_m, dryrad_m, &
drymass_m, so4dryvol_m, naer_m)
@@ -1302,26 +1335,7 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
call rad_cnst_get_info(list_idx, m, nspec=nspec)
! calc size parameter for all columns
- ! this is the same calculation that's done in modal_size_parameters, but there
- ! some intermediate results are saved and the chebyshev polynomials are stored
- ! in a array with different index order. Could be unified.
- do k = top_lev, pver
- do i = 1, ncol
- alnsg_amode = log( sigma_logr_aer )
- ! convert from number diameter to surface area
- xrad(i) = log(0.5_r8*dgnumwet(i,k)) + 2.0_r8*alnsg_amode*alnsg_amode
- ! normalize size parameter
- xrad(i) = max(xrad(i), xrmin)
- xrad(i) = min(xrad(i), xrmax)
- xrad(i) = (2*xrad(i)-xrmax-xrmin)/(xrmax-xrmin)
- ! chebyshev polynomials
- cheby(1,i,k) = 1.0_r8
- cheby(2,i,k) = xrad(i)
- do nc = 3, ncoef
- cheby(nc,i,k) = 2.0_r8*xrad(i)*cheby(nc-1,i,k)-cheby(nc-2,i,k)
- end do
- end do
- end do
+ call modal_size_parameters(ncol, sigma_logr_aer, dgnumwet, radsurf, logradsurf, cheby)
do ilw = 1, nlwbands
@@ -1345,7 +1359,7 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
end do
do i = 1, ncol
- watervol(i) = qaerwat(i,k)/rhoh2o
+ watervol(i) = qaerwat(i,k)*rh2odens
wetvol(i) = watervol(i) + dryvol(i)
if (watervol(i) < 0.0_r8) then
if (abs(watervol(i)) .gt. 1.e-1_r8*wetvol(i)) then
@@ -1362,21 +1376,22 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
end do
! interpolate coefficients linear in refractive index
- ! first call calcs itab,jtab,ttab,utab
- itab(:ncol) = 0
- call binterp(absplw(:,:,:,ilw), ncol, ncoef, prefr, prefi, &
- refr, refi, refrtablw(:,ilw), refitablw(:,ilw), &
- itab, jtab, ttab, utab, cabs)
+
+ wghtsr = table_interp_calcwghts( prefr, refrtablw(:,ilw), ncol, refr(:ncol) )
+ wghtsi = table_interp_calcwghts( prefi, refitablw(:,ilw), ncol, refi(:ncol) )
+
+ cabs(:,:ncol)= table_interp( ncoef,ncol, prefr,prefi, wghtsr,wghtsi, absplw(:,:,:,ilw))
! parameterized optical properties
do i = 1, ncol
- pabs(i) = 0.5_r8*cabs(i,1)
+ pabs(i) = 0.5_r8*cabs(1,i)
do nc = 2, ncoef
- pabs(i) = pabs(i) + cheby(nc,i,k)*cabs(i,nc)
+ pabs(i) = pabs(i) + cheby(nc,i,k)*cabs(nc,i)
end do
pabs(i) = pabs(i)*wetvol(i)*rhoh2o
pabs(i) = max(0._r8,pabs(i))
dopaer(i) = pabs(i)*mass(i,k)
+ lwabs(i,k) = lwabs(i,k) + pabs(i)
end do
do i = 1, ncol
@@ -1395,7 +1410,7 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
write(iulog,*) 'k=',k,' pabs=', pabs(i)
write(iulog,*) 'wetvol=',wetvol(i),' dryvol=',dryvol(i), &
' watervol=',watervol(i)
- write(iulog,*) 'cabs=', (cabs(i,l),l=1,ncoef)
+ write(iulog,*) 'cabs=', (cabs(l,i),l=1,ncoef)
write(iulog,*) 'crefin=', crefin(i)
write(iulog,*) 'nspec=', nspec
do l = 1,nspec
@@ -1440,6 +1455,12 @@ subroutine modal_aero_lw(list_idx, state, pbuf, tauxar)
deallocate(naer_m)
end if
+ call outfld('TOTABSLW', lwabs(:,:), pcols, lchnk)
+
+ if (lw10um_indx>0) then
+ call outfld('AODABSLW', tauxar(:,:,lw10um_indx), pcols, lchnk)
+ end if
+
end subroutine modal_aero_lw
!===============================================================================
@@ -1547,75 +1568,4 @@ subroutine modal_size_parameters(ncol, sigma_logr_aer, dgnumwet, radsurf, lograd
end subroutine modal_size_parameters
-!===============================================================================
-
- subroutine binterp(table,ncol,km,im,jm,x,y,xtab,ytab,ix,jy,t,u,out)
-
- ! bilinear interpolation of table
- !
- implicit none
- integer im,jm,km,ncol
- real(r8) table(km,im,jm),xtab(im),ytab(jm),out(pcols,km)
- integer i,ix(pcols),ip1,j,jy(pcols),jp1,k,ic,ip1m(pcols),jp1m(pcols),ixc,jyc
- real(r8) x(pcols),dx,t(pcols),y(pcols),dy,u(pcols),tu(pcols),tuc(pcols),tcu(pcols),tcuc(pcols)
-
- if(ix(1).gt.0) go to 30
- if(im.gt.1)then
- do ic=1,ncol
- do i=1,im
- if(x(ic).lt.xtab(i))go to 10
- enddo
- 10 ix(ic)=max0(i-1,1)
- ip1=min(ix(ic)+1,im)
- dx=(xtab(ip1)-xtab(ix(ic)))
- if(abs(dx).gt.1.e-20_r8)then
- t(ic)=(x(ic)-xtab(ix(ic)))/dx
- else
- t(ic)=0._r8
- endif
- end do
- else
- ix(:ncol)=1
- t(:ncol)=0._r8
- endif
- if(jm.gt.1)then
- do ic=1,ncol
- do j=1,jm
- if(y(ic).lt.ytab(j))go to 20
- enddo
- 20 jy(ic)=max0(j-1,1)
- jp1=min(jy(ic)+1,jm)
- dy=(ytab(jp1)-ytab(jy(ic)))
- if(abs(dy).gt.1.e-20_r8)then
- u(ic)=(y(ic)-ytab(jy(ic)))/dy
- else
- u(ic)=0._r8
- endif
- end do
- else
- jy(:ncol)=1
- u(:ncol)=0._r8
- endif
- 30 continue
- do ic=1,ncol
- tu(ic)=t(ic)*u(ic)
- tuc(ic)=t(ic)-tu(ic)
- tcuc(ic)=1._r8-tuc(ic)-u(ic)
- tcu(ic)=u(ic)-tu(ic)
- jp1m(ic)=min(jy(ic)+1,jm)
- ip1m(ic)=min(ix(ic)+1,im)
- enddo
- do ic=1,ncol
- jyc=jy(ic)
- ixc=ix(ic)
- jp1=jp1m(ic)
- ip1=ip1m(ic)
- do k=1,km
- out(ic,k) = tcuc(ic) * table(k,ixc,jyc) + tuc(ic) * table(k,ip1,jyc) + &
- tu(ic) * table(k,ip1,jp1) + tcu(ic) * table(k,ixc,jp1)
- end do
- end do
- return
- end subroutine binterp
-
end module modal_aer_opt
diff --git a/src/physics/cam/phys_control.F90 b/src/physics/cam/phys_control.F90
index 8d0cad7ee3..d301c39948 100644
--- a/src/physics/cam/phys_control.F90
+++ b/src/physics/cam/phys_control.F90
@@ -100,6 +100,9 @@ module phys_control
! FV dycore angular momentum correction
logical, public, protected :: fv_am_correction = .false.
+! Option for Harmonized Emissions Component (HEMCO)
+logical, public, protected :: use_hemco = .false.
+
! CAM snapshot before/after file numbers and control
character(len=32) :: cam_take_snapshot_before = '' ! Physics routine to take a snopshot "before"
character(len=32) :: cam_take_snapshot_after = '' ! Physics routine to take a snopshot "after"
@@ -133,7 +136,7 @@ subroutine phys_ctl_readnl(nlfile)
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, cam_snapshot_before_num, cam_snapshot_after_num, &
- cam_take_snapshot_before, cam_take_snapshot_after, cam_physics_mesh
+ cam_take_snapshot_before, cam_take_snapshot_after, cam_physics_mesh, use_hemco
!-----------------------------------------------------------------------------
if (masterproc) then
@@ -196,6 +199,7 @@ subroutine phys_ctl_readnl(nlfile)
call mpi_bcast(cam_take_snapshot_before, len(cam_take_snapshot_before), mpi_character, masterprocid, mpicom, ierr)
call mpi_bcast(cam_take_snapshot_after, len(cam_take_snapshot_after), mpi_character, masterprocid, mpicom, ierr)
call mpi_bcast(cam_physics_mesh, len(cam_physics_mesh), mpi_character, masterprocid, mpicom, ierr)
+ call mpi_bcast(use_hemco, 1, mpi_logical, masterprocid, mpicom, ierr)
use_spcam = ( cam_physpkg_is('spcam_sam1mom') &
.or. cam_physpkg_is('spcam_m2005'))
diff --git a/src/physics/cam/physpkg.F90 b/src/physics/cam/physpkg.F90
index 371cab1c13..706b9dcdee 100644
--- a/src/physics/cam/physpkg.F90
+++ b/src/physics/cam/physpkg.F90
@@ -32,6 +32,8 @@ module physpkg
use cam_logfile, only: iulog
use camsrfexch, only: cam_export
+ use phys_control, only: use_hemco ! Use Harmonized Emissions Component (HEMCO)
+
use modal_aero_calcsize, only: modal_aero_calcsize_init, modal_aero_calcsize_diag, modal_aero_calcsize_reg
use modal_aero_wateruptake, only: modal_aero_wateruptake_init, modal_aero_wateruptake_dr, modal_aero_wateruptake_reg
@@ -156,6 +158,7 @@ subroutine phys_register
use dyn_comp, only: dyn_register
use spcam_drivers, only: spcam_register
use offline_driver, only: offline_driver_reg
+ use hemco_interface, only: HCOI_Chunk_Init
use upper_bc, only: ubc_fixed_conc
!---------------------------Local variables-----------------------------
@@ -351,6 +354,11 @@ subroutine phys_register
call offline_driver_reg()
+ if (use_hemco) then
+ ! initialize harmonized emissions component (HEMCO)
+ call HCOI_Chunk_Init()
+ endif
+
! This needs to be last as it requires all pbuf fields to be added
if (cam_snapshot_before_num > 0 .or. cam_snapshot_after_num > 0) then
call pbuf_cam_snapshot_register()
@@ -1210,6 +1218,7 @@ subroutine phys_run2(phys_state, ztodt, phys_tend, pbuf2d, cam_out, &
#if ( defined OFFLINE_DYN )
use metdata, only: get_met_srf2
#endif
+ use hemco_interface, only: HCOI_Chunk_Run
!
! Input arguments
!
@@ -1243,6 +1252,15 @@ subroutine phys_run2(phys_state, ztodt, phys_tend, pbuf2d, cam_out, &
!-----------------------------------------------------------------------
if (single_column) call scam_use_iop_srf(cam_in)
+
+ if(use_hemco) then
+ !----------------------------------------------------------
+ ! run hemco (phase 2 before chemistry)
+ ! only phase 2 is used currently for HEMCO-CESM
+ !----------------------------------------------------------
+ call HCOI_Chunk_Run(cam_in, phys_state, pbuf2d, phase=2)
+ endif
+
!-----------------------------------------------------------------------
! Tendency physics after coupler
! Not necessary at terminal timestep.
@@ -1309,6 +1327,7 @@ subroutine phys_final( phys_state, phys_tend, pbuf2d )
use chemistry, only : chem_final
use carma_intr, only : carma_final
use wv_saturation, only : wv_sat_final
+ use hemco_interface, only: HCOI_Chunk_Final
use microp_aero, only : microp_aero_final
use phys_grid_ctem, only : phys_grid_ctem_final
use nudging, only: Nudge_Model, nudging_final
@@ -1337,6 +1356,11 @@ subroutine phys_final( phys_state, phys_tend, pbuf2d )
call phys_grid_ctem_final()
if(Nudge_Model) call nudging_final()
+ if(use_hemco) then
+ ! cleanup hemco
+ call HCOI_Chunk_Final
+ endif
+
end subroutine phys_final
@@ -1510,7 +1534,7 @@ subroutine tphysac (ztodt, cam_in, &
call cam_snapshot_all_outfld_tphysac(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf,&
fh2o, surfric, obklen, flx_heat)
end if
- call chem_emissions( state, cam_in )
+ call chem_emissions( state, cam_in, pbuf )
if (trim(cam_take_snapshot_after) == "chem_emissions") then
call cam_snapshot_all_outfld_tphysac(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf,&
fh2o, surfric, obklen, flx_heat)
diff --git a/src/physics/cam_dev/physpkg.F90 b/src/physics/cam_dev/physpkg.F90
index 7452f9e115..b288a17177 100644
--- a/src/physics/cam_dev/physpkg.F90
+++ b/src/physics/cam_dev/physpkg.F90
@@ -21,6 +21,8 @@ module physpkg
use constituents, only: pcnst, cnst_name, cnst_get_ind
use camsrfexch, only: cam_out_t, cam_in_t
+ use phys_control, only: use_hemco ! Use Harmonized Emissions Component (HEMCO)
+
use cam_control_mod, only: ideal_phys, adiabatic
use phys_control, only: phys_do_flux_avg, phys_getopts, waccmx_is
use scamMod, only: single_column, scm_crm_mode
@@ -148,6 +150,7 @@ subroutine phys_register
use subcol_utils, only: is_subcol_on, subcol_get_scheme
use dyn_comp, only: dyn_register
use offline_driver, only: offline_driver_reg
+ use hemco_interface, only: HCOI_Chunk_Init
!---------------------------Local variables-----------------------------
!
@@ -327,6 +330,11 @@ subroutine phys_register
call offline_driver_reg()
+ if (use_hemco) then
+ ! initialize harmonized emissions component (HEMCO)
+ call HCOI_Chunk_Init()
+ endif
+
! This needs to be last as it requires all pbuf fields to be added
if (cam_snapshot_before_num > 0 .or. cam_snapshot_after_num > 0) then
call pbuf_cam_snapshot_register()
@@ -950,7 +958,7 @@ subroutine phys_init( phys_state, phys_tend, pbuf2d, cam_in, cam_out )
! Initialize the budget capability
call cam_budget_init()
-
+
! addfld calls for U, V tendency budget variables that are output in
! tphysac, tphysbc
call addfld ( 'UTEND_DCONV', (/ 'lev' /), 'A', 'm/s2', 'Zonal wind tendency by deep convection')
@@ -1168,6 +1176,7 @@ subroutine phys_run2(phys_state, ztodt, phys_tend, pbuf2d, cam_out, &
#if ( defined OFFLINE_DYN )
use metdata, only: get_met_srf2
#endif
+ use hemco_interface, only: HCOI_Chunk_Run
!
! Input arguments
!
@@ -1201,6 +1210,14 @@ subroutine phys_run2(phys_state, ztodt, phys_tend, pbuf2d, cam_out, &
!-----------------------------------------------------------------------
if (single_column) call scam_use_iop_srf(cam_in)
+ if(use_hemco) then
+ !----------------------------------------------------------
+ ! run hemco (phase 2 before chemistry)
+ ! only phase 2 is used currently for HEMCO-CESM
+ !----------------------------------------------------------
+ call HCOI_Chunk_Run(cam_in, phys_state, pbuf2d, phase=2)
+ endif
+
!-----------------------------------------------------------------------
! Tendency physics after coupler
! Not necessary at terminal timestep.
@@ -1270,6 +1287,7 @@ subroutine phys_final( phys_state, phys_tend, pbuf2d )
use microp_aero, only: microp_aero_final
use phys_grid_ctem, only: phys_grid_ctem_final
use nudging, only: Nudge_Model, nudging_final
+ use hemco_interface, only: HCOI_Chunk_Final
!-----------------------------------------------------------------------
!
@@ -1295,6 +1313,11 @@ subroutine phys_final( phys_state, phys_tend, pbuf2d )
call phys_grid_ctem_final()
if(Nudge_Model) call nudging_final()
+ if(use_hemco) then
+ ! cleanup hemco
+ call HCOI_Chunk_Final
+ endif
+
end subroutine phys_final
@@ -1573,7 +1596,7 @@ subroutine tphysac (ztodt, cam_in, &
call cam_snapshot_all_outfld_tphysac(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf,&
fh2o, surfric, obklen, flx_heat, cmfmc, dlf, det_s, det_ice, net_flx)
end if
- call chem_emissions( state, cam_in )
+ call chem_emissions( state, cam_in, pbuf )
if (trim(cam_take_snapshot_after) == "chem_emissions") then
call cam_snapshot_all_outfld_tphysac(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf,&
fh2o, surfric, obklen, flx_heat, cmfmc, dlf, det_s, det_ice, net_flx)
@@ -2362,7 +2385,7 @@ subroutine tphysac (ztodt, cam_in, &
else
!
! for moist-mixing ratio based dycores
- !
+ !
! Note: this operation will NOT be reverted with set_wet_to_dry after set_dry_to_wet call
!
call set_dry_to_wet(state)
@@ -2384,7 +2407,7 @@ subroutine tphysac (ztodt, cam_in, &
if (vc_dycore == vc_height.or.vc_dycore == vc_dry_pressure) then
!
! MPAS and SE specific scaling of temperature for enforcing energy consistency
- ! (and to make sure that temperature dependent diagnostic tendencies
+ ! (and to make sure that temperature dependent diagnostic tendencies
! are computed correctly; e.g. dtcore)
!
scaling(1:ncol,:) = cpairv(:ncol,:,lchnk)/cp_or_cv_dycore(:ncol,:,lchnk)
diff --git a/src/physics/simple/frierson.F90 b/src/physics/simple/frierson.F90
new file mode 100644
index 0000000000..08e524bbdc
--- /dev/null
+++ b/src/physics/simple/frierson.F90
@@ -0,0 +1,1174 @@
+module frierson
+!------------------------------------------------------------------------------------
+!
+! Purpose: Implement idealized forcings described in
+! Frierson, et al. (2006), "A Gray-Radiation
+! Aquaplanet Moist GCM. Part I. Static Stability and Eddy Scale"
+! J. Atmos. Sci., Vol. 63, 2548-2566.
+!
+! DOI: https://doi.org/10.1175/JAS3753.1
+!
+!====================================================================================
+ !
+ ! The only modules that are permitted
+ !--------------------------------------
+ use shr_kind_mod, only: r8 => shr_kind_r8
+ use shr_const_mod, only: pi => shr_const_pi
+
+ ! Set all Global values and routine to private by default
+ ! and then explicitly set their exposure
+ !---------------------------------------------------------
+ implicit none
+ private
+ save
+
+ public:: frierson_set_const
+ public:: frierson_condensate_NONE
+ public:: frierson_condensate
+ public:: frierson_condensate_TJ16
+ public:: frierson_condensate_USER
+ public:: frierson_pbl
+ public:: frierson_pbl_USER
+ public:: frierson_radiation
+ public:: frierson_radiation_USER
+
+ ! Global Tuning Parameters:
+ ! T0 and E0 are the temperature and saturation vapor pressure used
+ ! to calculate qsat values, the saturation value for Q (kg/kg)
+ !--------------------------------------------------------------------
+ real(r8):: T0
+ real(r8):: E0
+ real(r8):: Erad
+ real(r8):: Wind_min
+ real(r8):: Z0
+ real(r8):: Ri_c
+ real(r8):: Karman
+ real(r8):: Fb
+ real(r8):: Rs0
+ real(r8):: DeltaS
+ real(r8):: Tau_eqtr
+ real(r8):: Tau_pole
+ real(r8):: LinFrac
+ real(r8):: Boltz
+ real(r8):: C_ocn
+
+ ! Private data
+ !----------------------
+ real(r8),private :: gravit ! g: gravitational acceleration (m/s2)
+ real(r8),private :: cappa ! Rd/cp
+ real(r8),private :: rair ! Rd: dry air gas constant (J/K/kg)
+ real(r8),private :: cpair ! cp: specific heat of dry air (J/K/kg)
+ real(r8),private :: latvap ! L: latent heat of vaporization (J/kg)
+ real(r8),private :: rh2o ! Rv: water vapor gas constant (J/K/kg)
+ real(r8),private :: epsilo ! Rd/Rv: ratio of h2o to dry air molecular weights
+ real(r8),private :: rhoh2o ! density of liquid water (kg/m3)
+ real(r8),private :: zvir ! (rh2o/rair) - 1, needed for virtual temperature
+ real(r8),private :: ps0 ! Base state surface pressure (Pa)
+
+ real(r8),private :: latvap_div_cpair ! latvap/cpair
+ real(r8),private :: latvap_div_rh2o ! latvap/rh2o
+
+ real(r8),private,allocatable:: etamid(:) ! hybrid coordinate - midpoints
+
+
+contains
+ !=======================================================================
+ subroutine frierson_set_const(I_gravit,I_cappa ,I_rair ,I_cpair ,I_latvap , &
+ I_rh2o ,I_epsilo ,I_rhoh2o ,I_zvir ,I_ps0 , &
+ I_etamid,I_T0 ,I_E0 ,I_Erad ,I_Wind_min, &
+ I_Z0 ,I_Ri_c ,I_Karman ,I_Fb ,I_Rs0 , &
+ I_DeltaS,I_Tau_eqtr,I_Tau_pole,I_LinFrac,I_Boltz , &
+ I_Cocn )
+ !
+ ! frierson_set_const: Set parameters and constants for the Frierson
+ ! Model fomulation. Optional inputs can be provided
+ ! to over-ride the model defaults.
+ !=====================================================================
+
+ use cam_abortutils, only: handle_allocate_error
+
+ !
+ ! Passed Variables
+ !-------------------
+ real(r8),intent(in):: I_gravit
+ real(r8),intent(in):: I_cappa
+ real(r8),intent(in):: I_rair
+ real(r8),intent(in):: I_cpair
+ real(r8),intent(in):: I_latvap
+ real(r8),intent(in):: I_rh2o
+ real(r8),intent(in):: I_epsilo
+ real(r8),intent(in):: I_rhoh2o
+ real(r8),intent(in):: I_zvir
+ real(r8),intent(in):: I_ps0
+ real(r8),intent(in):: I_etamid(:)
+
+ real(r8),intent(in) :: I_T0
+ real(r8),intent(in) :: I_E0
+ real(r8),intent(in) :: I_Erad
+ real(r8),intent(in) :: I_Wind_min
+ real(r8),intent(in) :: I_Z0
+ real(r8),intent(in) :: I_Ri_c
+ real(r8),intent(in) :: I_Karman
+ real(r8),intent(in) :: I_Fb
+ real(r8),intent(in) :: I_Rs0
+ real(r8),intent(in) :: I_DeltaS
+ real(r8),intent(in) :: I_Tau_eqtr
+ real(r8),intent(in) :: I_Tau_pole
+ real(r8),intent(in) :: I_LinFrac
+ real(r8),intent(in) :: I_Boltz
+ real(r8),intent(in) :: I_Cocn
+
+ integer :: ierr
+
+ ! Set global constants for later use
+ !------------------------------------
+ gravit = I_gravit
+ cappa = I_cappa
+ rair = I_rair
+ cpair = I_cpair
+ latvap = I_latvap
+ rh2o = I_rh2o
+ epsilo = I_epsilo
+ rhoh2o = I_rhoh2o
+ zvir = I_zvir
+ ps0 = I_ps0
+ T0 = I_T0
+ E0 = I_E0
+ Erad = I_Erad
+ Wind_min = I_Wind_min
+ Z0 = I_Z0
+ Ri_c = I_Ri_c
+ Karman = I_Karman
+ Fb = I_Fb
+ Rs0 = I_Rs0
+ DeltaS = I_DeltaS
+ Tau_eqtr = I_Tau_eqtr
+ Tau_pole = I_Tau_pole
+ LinFrac = I_LinFrac
+ Boltz = I_Boltz
+ C_ocn = I_Cocn
+
+ latvap_div_cpair = latvap/cpair
+ latvap_div_rh2o = latvap/rh2o
+
+ ! allocate space and set the level information
+ !----------------------------------------------
+ allocate(etamid(size(I_etamid)),stat=ierr)
+ if (ierr /= 0) then
+ call handle_allocate_error(ierr, 'frierson_set_const', 'etamid')
+ end if
+
+ etamid = I_etamid
+
+ end subroutine frierson_set_const
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_condensate_NONE(ncol,pver,pmid,T,qv,relhum,precl)
+ !
+ ! Precip_process: Implement NO large-scale condensation/precipitation
+ !=======================================================================
+ !
+ ! Passed Variables
+ !---------------------
+ integer ,intent(in) :: ncol ! number of columns
+ integer ,intent(in) :: pver ! number of vertical levels
+ real(r8),intent(in) :: pmid (ncol,pver) ! mid-point pressure (Pa)
+ real(r8),intent(inout):: T (ncol,pver) ! temperature (K)
+ real(r8),intent(inout):: qv (ncol,pver) ! specific humidity Q (kg/kg)
+ real(r8),intent(out) :: relhum(ncol,pver) ! relative humidity
+ real(r8),intent(out) :: precl (ncol) ! large-scale precipitation rate (m/s)
+ !
+ ! Local Values
+ !-------------
+ real(r8):: qsat
+ integer :: i, k
+
+ ! Set large scale precipitation rates to zero
+ !--------------------------------------------------------------------------
+ precl(:) = 0.0_r8
+
+ ! Large-Scale Condensation and Precipitation without cloud stage
+ !---------------------------------------------------------------
+ do k = 1, pver
+ do i = 1, ncol
+ ! calculate saturation value for Q
+ !----------------------------------
+ qsat = epsilo*E0/pmid(i,k)*exp(-latvap_div_rh2o*((1._r8/T(i,k))-1._r8/T0))
+
+ ! Set percent relative humidity
+ !-------------------------------
+ relhum(i,k) = (qv(i,k)/qsat)*100._r8
+ end do
+ end do
+
+ end subroutine frierson_condensate_NONE
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_condensate(ncol,pver,dtime,pmid,pdel,T,qv,relhum,precl,evapdt,evapdq)
+ !
+ ! Precip_process: Implement large-scale condensation/precipitation
+ ! from Frierson 2006.
+ !
+ !=======================================================================
+ !
+ ! Passed Variables
+ !---------------------
+ integer ,intent(in) :: ncol ! number of columns
+ integer ,intent(in) :: pver ! number of vertical levels
+ real(r8),intent(in) :: dtime ! time step (s)
+ real(r8),intent(in) :: pmid (ncol,pver) ! mid-point pressure (Pa)
+ real(r8),intent(in) :: pdel (ncol,pver) ! layer thickness (Pa)
+ real(r8),intent(inout):: T (ncol,pver) ! temperature (K)
+ real(r8),intent(inout):: qv (ncol,pver) ! specific humidity Q (kg/kg)
+ real(r8),intent(out) :: relhum(ncol,pver) ! relative humidity
+ real(r8),intent(out) :: precl (ncol) ! large-scale precipitation rate (m/s)
+ real(r8),intent(out) :: evapdt(ncol,pver) ! T tendency due to re-evaporation
+ real(r8),intent(out) :: evapdq(ncol,pver) ! Q tendency due to re-evaporation
+ !
+ ! Local Values
+ !-------------
+ logical,parameter :: do_evap = .true.
+
+ real(r8):: esat (ncol,pver)
+ real(r8):: qsat (ncol,pver)
+ real(r8):: dqsat(ncol,pver)
+ real(r8):: qdel (ncol,pver)
+ real(r8):: tdel (ncol,pver)
+ real(r8):: qnew (ncol,pver)
+ real(r8):: tnew (ncol,pver)
+ real(r8):: qext (ncol)
+ real(r8):: qdef (ncol)
+
+ integer :: i, k
+
+ ! Large-Scale Condensation and Precipitation
+ !--------------------------------------------
+ do k = 1,pver
+
+ ! calculate saturation vapor pressure
+ !-------------------------------------
+ esat(:,k) = E0*exp(-(latvap_div_rh2o)*((1._r8/T(:,k))-1._r8/T0))
+
+ ! calculate saturation value for Q
+ !----------------------------------
+ do i = 1,ncol
+ if(pmid(i,k) > (1._r8-epsilo)*esat(i,k)) then
+ qsat (i,k) = epsilo*esat(i,k)/pmid(i,k)
+ dqsat(i,k) = (latvap_div_rh2o)*qsat(i,k)/(T(i,k)**2)
+ else
+ qsat (i,k) = 0._r8
+ dqsat(i,k) = 0._r8
+ endif
+ end do
+
+ ! if > 100% relative humidity, rain falls out
+ !---------------------------------------------
+ where(((qv(:,k)-qsat(:,k))*qsat(:,k)) > 0._r8)
+ qdel (:,k) = (qsat(:,k)-qv(:,k))/(1._r8+(latvap_div_cpair)*dqsat(:,k))
+ tdel (:,k) = -(latvap_div_cpair)*qdel(:,k)
+ else where
+ qdel (:,k) = 0._r8
+ tdel (:,k) = 0._r8
+ end where
+
+ ! Update temperature and water vapor
+ !-----------------------------------
+ qnew(:,k) = qv(:,k) + qdel(:,k)
+ tnew(:,k) = T(:,k) + tdel(:,k)
+ end do
+
+ ! optionally allow for re-evaporation of falling precip
+ !-------------------------------------------------------
+ if(do_evap) then
+ ! Initialize work array for excess Q
+ !--------------------------------------
+ qext(:) = 0._r8
+
+ ! Loop down thru the model levels
+ !---------------------------------
+ do k = 1, pver
+
+ ! Add qdel for the current level to the excess
+ !----------------------------------------------
+ where(qdel(:,k) < 0._r8) qext(:) = qext(:) - qdel(:,k)*pdel(:,k)/gravit
+
+ ! Evaporate excess Q where needed
+ !----------------------------------
+ qdef(:) = 0._r8
+ where((qdel(:,k) >= 0._r8).and.(qext(:) > 0._r8))
+ qext(:) = qext(:)*gravit/pdel(:,k)
+ qdef(:) = (qsat(:,k)-qv(:,k))/(1._r8+(latvap_div_cpair)*dqsat(:,k))
+ qdef(:) = min(qext(:),max(qdef(:),0._r8))
+ qdel(:,k) = qdel(:,k) + qdef(:)
+ tdel(:,k) = tdel(:,k) -(latvap_div_cpair)*qdef(:)
+ qext(:) = (qext(:)-qdef(:))*pdel(:,k)/gravit
+
+ ! Update temperature and water vapor
+ !-----------------------------------
+ qnew(:,k) = qv(:,k) + qdel(:,k)
+ tnew(:,k) = T(:,k) + tdel(:,k)
+ end where
+
+ ! Save T/Q tendencies due to re-evaporation
+ !--------------------------------------------
+ evapdq(:,k) = qdef(:)/dtime
+ evapdt(:,k) = -qdef(:)*latvap_div_cpair/dtime
+ end do ! k = 1, pver
+ else
+ ! Set T/Q re-evaporation tendencies to 0
+ !--------------------------------------------
+ evapdt(:,:) = 0._r8
+ evapdq(:,:) = 0._r8
+ endif
+
+ ! Set large scale precipitation rates to zero
+ !--------------------------------------------------------------------------
+ precl(:) = 0.0_r8
+
+ ! Calculate resulting precip value and relative humidity
+ !--------------------------------------------------------
+ do k = 1, pver
+ precl (:) = precl(:) - (qdel(:,k)*pdel(:,k))/(gravit*rhoh2o)
+ qsat (:,k) = (epsilo/pmid(:,k))*E0*exp(-latvap_div_rh2o*((1._r8/tnew(:,k))-1._r8/T0))
+ relhum(:,k) = (qnew(:,k)/qsat (:,k))*100._r8
+ end do
+ precl(:) = max(precl(:),0._r8)/dtime
+
+ ! Update T and qv values due to precipitation
+ !--------------------------------------------
+ qv(:,:) = qnew(:,:)
+ T (:,:) = tnew(:,:)
+
+ end subroutine frierson_condensate
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_condensate_TJ16(ncol,pver,dtime,pmid,pdel,T,qv,relhum,precl)
+ !
+ ! Precip_process: Implement large-scale condensation/precipitation
+ ! from TJ16.
+ !
+ !=======================================================================
+ !
+ ! Passed Variables
+ !---------------------
+ integer ,intent(in) :: ncol ! number of columns
+ integer ,intent(in) :: pver ! number of vertical levels
+ real(r8),intent(in) :: dtime ! time step (s)
+ real(r8),intent(in) :: pmid (ncol,pver) ! mid-point pressure (Pa)
+ real(r8),intent(in) :: pdel (ncol,pver) ! layer thickness (Pa)
+ real(r8),intent(inout):: T (ncol,pver) ! temperature (K)
+ real(r8),intent(inout):: qv (ncol,pver) ! specific humidity Q (kg/kg)
+ real(r8),intent(out) :: relhum(ncol,pver) ! relative humidity
+ real(r8),intent(out) :: precl (ncol) ! large-scale precipitation rate (m/s)
+ !
+ ! Local Values
+ !-------------
+ real(r8):: qsat
+ real(r8):: Crate
+ integer :: i, k
+
+ ! Set large scale precipitation rates to zero
+ !--------------------------------------------------------------------------
+ precl(:) = 0.0_r8
+
+ ! Large-Scale Condensation and Precipitation without cloud stage
+ !---------------------------------------------------------------
+ do k = 1, pver
+ do i = 1, ncol
+ ! calculate saturation value for Q
+ !----------------------------------
+ qsat = epsilo*E0/pmid(i,k)*exp(-latvap_div_rh2o*((1._r8/T(i,k))-1._r8/T0))
+
+ ! if > 100% relative humidity rain falls out
+ !-------------------------------------------
+ if(qv(i,k) > qsat) then
+ ! calc the condensation and large-scale precipitation(m/s) rates
+ !-------------------------------------------------------------------
+ Crate = ((qv(i,k)-qsat)/dtime) &
+ /(1._r8+(latvap_div_cpair)*(epsilo*latvap*qsat/(rair*T(i,k)**2)))
+ precl(i) = precl(i) + (Crate*pdel(i,k))/(gravit*rhoh2o)
+
+ ! Update T and qv values due to precipitation
+ !--------------------------------------------
+ T (i,k) = T (i,k) + Crate*(latvap_div_cpair)*dtime
+ qv(i,k) = qv(i,k) - Crate*dtime
+
+ ! recompute qsat with updated T
+ !-------------------------------
+ qsat = epsilo*E0/pmid(i,k)*exp(-latvap_div_rh2o*((1._r8/T(i,k))-1._r8/T0))
+ endif
+
+ ! Set percent relative humidity
+ !-------------------------------
+ relhum(i,k) = (qv(i,k)/qsat)*100._r8
+ end do
+ end do
+
+ end subroutine frierson_condensate_TJ16
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_condensate_USER(ncol,pver,dtime,pmid,pdel,T,qv,relhum,precl)
+ !
+ ! frierson_condensate_USER: This routine is a stub which users can use
+ ! to develop and test their own large scale
+ ! condensation scheme
+ !=======================================================================
+ !
+ ! Passed Variables
+ !---------------------
+ integer ,intent(in) :: ncol ! number of columns
+ integer ,intent(in) :: pver ! number of vertical levels
+ real(r8),intent(in) :: dtime ! time step (s)
+ real(r8),intent(in) :: pmid (ncol,pver) ! mid-point pressure (Pa)
+ real(r8),intent(in) :: pdel (ncol,pver) ! layer thickness (Pa)
+ real(r8),intent(inout):: T (ncol,pver) ! temperature (K)
+ real(r8),intent(inout):: qv (ncol,pver) ! specific humidity Q (kg/kg)
+ real(r8),intent(out) :: relhum(ncol,pver) ! relative humidity
+ real(r8),intent(out) :: precl (ncol) ! large-scale precipitation rate (m/s)
+ !
+ ! Local Values
+ !-------------
+ real(r8):: qsat
+ integer :: i, k
+
+ ! Set large scale precipitation rates to zero
+ !--------------------------------------------------------------------------
+ precl(:) = 0.0_r8
+
+ ! Large-Scale Condensation and Precipitation without cloud stage
+ !---------------------------------------------------------------
+ do k = 1, pver
+ do i = 1, ncol
+ ! calculate saturation value for Q
+ !----------------------------------
+ qsat = epsilo*E0/pmid(i,k)*exp(-latvap_div_rh2o*((1._r8/T(i,k))-1._r8/T0))
+
+ ! Set percent relative humidity
+ !-------------------------------
+ relhum(i,k) = (qv(i,k)/qsat)*100._r8
+ end do
+ end do
+
+ end subroutine frierson_condensate_USER
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_pbl(ncol, pver, dtime, pmid, pint, Zm, Zi, &
+ Psfc, Tsfc, Qsfc, T, U, V, Q, Fsw, Fdn, &
+ Cdrag, Km, Ke, VSE, Z_pbl, Rf, dQa, dTa, dUa, dVa, &
+ LHflux, SHflux, TUflux, TVflux )
+ !
+ ! The implicit PBL parameterization based on Frierson, et al. 2006.
+ !
+ ! frierson_pbl: This is an implementation of the implicit computation
+ ! derived from the code of the Frierson model. The
+ ! calculations are roughly divided up into sections of
+ ! the model where they should be carried out.
+ !
+ !==========================================================================
+ !
+ ! Passed Variables
+ !------------------
+ integer ,intent(in) :: ncol ! Number of columns
+ integer ,intent(in) :: pver ! Number of levels
+ real(r8),intent(in) :: dtime ! Time Step
+ real(r8),intent(in) :: pmid (ncol,pver) ! Pressure at model levels
+ real(r8),intent(in) :: pint (ncol,pver+1) ! Pressure at interface levels.
+ real(r8),intent(in) :: Zm (ncol,pver) ! Height at model levels.
+ real(r8),intent(in) :: Zi (ncol,pver) ! Height at interface levels.
+ real(r8),intent(in) :: Psfc (ncol) ! Surface Pressure.
+ real(r8),intent(inout):: Tsfc (ncol) ! SST temperature K
+ real(r8),intent(inout):: Qsfc (ncol) ! sea surface water vapor (kg/kg)
+ real(r8),intent(inout):: T (ncol,pver) ! ATM Temperature values.
+ real(r8),intent(inout):: U (ncol,pver) ! ATM Zonal Wind values.
+ real(r8),intent(inout):: V (ncol,pver) ! ATM Meridional Wind values.
+ real(r8),intent(inout):: Q (ncol,pver) ! ATM Water vapor values.
+ real(r8),intent(in) :: Fdn (ncol) ! Downward LW flux at surface
+ real(r8),intent(in) :: Fsw (ncol) ! Net SW flux at surface from gray radiation
+ real(r8),intent(out) :: Cdrag (ncol) ! Surface drage coef.
+ real(r8),intent(out) :: Km (ncol,pver+1) ! Eddy diffusivity for PBL (momentum)
+ real(r8),intent(out) :: Ke (ncol,pver+1) ! Eddy diffusivity for PBL
+ real(r8),intent(out) :: VSE (ncol,pver) ! Virtual-Dry Static energy
+ real(r8),intent(out) :: Z_pbl (ncol) ! Height of PBL layer.
+ real(r8),intent(out) :: Rf (ncol,pver)
+ real(r8),intent(out) :: dTa (ncol,pver)
+ real(r8),intent(out) :: dQa (ncol,pver)
+ real(r8),intent(out) :: dUa (ncol,pver)
+ real(r8),intent(out) :: dVa (ncol,pver)
+ real(r8),intent(out) :: LHflux(ncol) ! Latent Heat Flux
+ real(r8),intent(out) :: SHflux(ncol) ! Sensible Heat Flux
+ real(r8),intent(out) :: TUflux(ncol) ! U Surface stress
+ real(r8),intent(out) :: TVflux(ncol) ! V Surface stress
+ !
+ ! Local Values
+ !---------------
+ real(r8):: Tv (ncol,pver)
+ real(r8):: Thv (ncol,pver)
+ real(r8):: Ws (ncol,pver)
+ real(r8):: rho (ncol) ! Air density near the ground (kg/m3)
+ real(r8):: Z_sfc (ncol)
+ real(r8):: Rf_sfc(ncol)
+ real(r8):: Ri_a (ncol)
+ real(r8):: Ri (ncol,pver)
+ integer :: K_sfc (ncol)
+ integer :: K_pbl (ncol)
+ real(r8):: Ke_pbl(ncol)
+ real(r8):: Km_pbl(ncol)
+ real(r8):: Z_a (ncol) ! Height at midpoint of the lowest model level (m)
+ real(r8):: Ws_a (ncol) ! wind speed at the lowest model level (m/s)
+ real(r8):: Thv_a (ncol)
+ real(r8):: Thv_s (ncol)
+ real(r8):: Ustar (ncol)
+ real(r8):: Bstar (ncol)
+ real(r8):: ZETA,PHI
+
+ real(r8):: MU (ncol,pver)
+ real(r8):: NUe(ncol,pver)
+ real(r8):: NUm(ncol,pver)
+ real(r8):: Am (ncol,pver)
+ real(r8):: Bm (ncol,pver)
+ real(r8):: Cm (ncol,pver)
+ real(r8):: Ae (ncol,pver)
+ real(r8):: Be (ncol,pver)
+ real(r8):: Ce (ncol,pver)
+ real(r8):: FLu(ncol,pver)
+ real(r8):: FLv(ncol,pver)
+ real(r8):: FLq(ncol,pver)
+ real(r8):: FLt(ncol,pver)
+ real(r8):: Et (ncol,pver)
+ real(r8):: Eq (ncol,pver)
+ real(r8):: Eu (ncol,pver)
+ real(r8):: Ev (ncol,pver)
+
+ real(r8):: Fval_t(ncol,pver)
+ real(r8):: Fval_q(ncol,pver)
+ real(r8):: Fval_u(ncol,pver)
+ real(r8):: Fval_v(ncol,pver)
+ real(r8):: Eval_m(ncol,pver)
+ real(r8):: Eval_e(ncol,pver)
+ integer :: i, k
+
+ real(r8):: Su(ncol,pver)
+ real(r8):: Sv(ncol,pver)
+ real(r8):: St(ncol,pver)
+ real(r8):: Sq(ncol,pver)
+
+ real(r8):: Estar_u(ncol)
+ real(r8):: Estar_v(ncol)
+ real(r8):: Estar_q(ncol)
+ real(r8):: Estar_t(ncol)
+ real(r8):: dFa_dTa(ncol)
+ real(r8):: dFa_dQa(ncol)
+ real(r8):: dFa_dUa(ncol)
+ real(r8):: dFa_dVa(ncol)
+
+ real(r8):: Th_a (ncol)
+ real(r8):: Th_s (ncol)
+ real(r8):: Ft (ncol)
+ real(r8):: dFt_dTa (ncol)
+ real(r8):: dFt_dTs (ncol)
+ real(r8):: Fq (ncol)
+ real(r8):: dFq_dQa (ncol)
+ real(r8):: dFq_dTs (ncol)
+ real(r8):: Fu (ncol)
+ real(r8):: dFu_dUa (ncol)
+ real(r8):: Fv (ncol)
+ real(r8):: dFv_dVa (ncol)
+ real(r8):: Fup (ncol)
+ real(r8):: dFup_dTs(ncol)
+
+ real(r8):: FN_u (ncol)
+ real(r8):: FN_v (ncol)
+ real(r8):: EN_t (ncol)
+ real(r8):: FN_t (ncol)
+ real(r8):: EN_q (ncol)
+ real(r8):: FN_q (ncol)
+ real(r8):: Flux (ncol)
+ real(r8):: dFlux(ncol)
+ real(r8):: dTs (ncol)
+
+ real(r8):: Tsfc_bc(ncol)
+
+ !============================================================================
+ ! tphysbc():
+ !
+ ! Required Values:
+ ! T(:,:),Q(:,:),U(:,:),V(:,:)
+ ! Pmid(:,:),Pint(:,:),Zm(:,:),Zi(:,:)
+ ! Tsfc(:),Qsfc(:),Psfc(:)
+ !============================================================================
+
+ ! Sx() values allow for explicit source tendencies to be passed to
+ ! implicit PBL calculation. Set all values to 0. for now.
+ !-------------------------------------------------------------------------
+ Su(:,:) = 0._r8
+ Sv(:,:) = 0._r8
+ St(:,:) = 0._r8
+ Sq(:,:) = 0._r8
+
+ ! Calc some values we will need later on
+ !------------------------------------------
+ do k = 1, pver
+ Ws (:,k) = sqrt(U(:,k)**2 + V(:,k)**2 + Wind_min)
+ Tv (:,k) = T (:,k)*(1._r8+zvir*Q(:,k))
+ Thv(:,k) = Tv(:,k)*((ps0/pmid(:,k))**cappa)
+ VSE(:,k) = Tv(:,k)+gravit*Zm(:,k)/cpair
+ end do
+
+ ! Calculate Drag Coef and related values
+ !-----------------------------------------
+ do i = 1,ncol
+ Z_a (i) = Zm (i,pver)
+ Ws_a (i) = Ws (i,pver)
+ Thv_a(i) = Thv(i,pver)
+ Thv_s(i) = Tsfc(i)*(1._r8+zvir*Qsfc(i) )*((ps0/Psfc(i))**cappa)
+ Ri_a (i) = (gravit*Z_a(i)/(Ws_a(i)**2))*(Thv_a(i)-Thv_s(i))/Thv_s(i)
+ if(Ri_a(i) <= 0._r8) then
+ Cdrag(i) = (Karman/log((Z_a(i)/Z0)))**2
+ elseif(Ri_a(i) >= Ri_c) then
+ Cdrag(i) = 0._r8
+ else
+ Cdrag(i) = ((1._r8-(Ri_a(i)/Ri_c))*Karman/log((Z_a(i)/Z0)))**2
+ endif
+ Ustar(i) = sqrt(Cdrag(i))*Ws_a(i)
+ Bstar(i) = sqrt(Cdrag(i))*(gravit*(Thv_a(i)-Thv_s(i))/Thv_s(i))
+ end do
+
+ ! Calculate a bulk Richardson number and determine
+ ! depths of boundary/surface layers.
+ !----------------------------------------------------
+ do k = 1,pver
+ Ri(:,k) = (gravit*Zm(:,k)/(Ws(:,k)**2))*(VSE(:,k)-VSE(:,pver))/VSE(:,pver)
+ Rf(:,k) = Ri(:,k)/Ri_c
+ end do
+
+ do i =1,ncol
+ Z_pbl(i) = Zm(i,pver)
+ K_pbl(i) = pver
+ do k = (pver-1),1,-1
+ if(Rf(i,k) > 1._r8) then
+ K_pbl(i) = k + 1
+ Z_pbl(i) = (Zm(i,k+1)*(Rf(i,k)- 1._r8 ) &
+ +Zm(i,k )*( 1._r8 - Rf(i,k+1)))/(Rf(i,k)-Rf(i,k+1))
+ exit
+ endif
+ end do
+
+ ! surface layer height is a fixed fraction of the PBL
+ ! determine the corresponding level index and Rf value
+ !-----------------------------------------------------
+ Z_sfc(i) = Fb*Z_pbl(i)
+ K_sfc(i) = pver
+ do k = (pver-1),1,-1
+ if(Zm(i,k) > Z_sfc(i)) then
+ K_sfc (i) = k + 1
+ Rf_sfc(i) = (Rf(i,k+1)*(Zm(i,k) - Z_sfc(i) ) &
+ + Rf(i,k )*(Z_sfc(i) - Zm(i,k+1)))/(Zm(i,k)-Zm(i,k+1))
+ exit
+ endif
+ end do
+ end do ! i =1,ncol
+
+ ! Compute diffusion coefs
+ !-------------------------
+ Ke(:,:) = 0._r8
+ Ke_pbl(:) = 0._r8
+ do i = 1,ncol
+ if (Cdrag(i) /= 0._r8) then
+ do k = pver,K_pbl(i),-1
+ ZETA = Zi(i,k)*Karman*Bstar(i)/(Ustar(i)*Ustar(i))
+ if(ZETA < 0._r8) then
+ if(k >= K_sfc(i)) then
+ Ke(i,k) = Karman*Ustar(i)*Zi(i,k)
+ else
+ Ke(i,k) = Karman*Ustar(i)*Zi(i,k) &
+ *(((Z_pbl(i)-Zi(i,k))/(Z_pbl(i)-Z_sfc(i)))**2)
+ endif
+ elseif (ZETA < Ri_c) then
+ PHI = 1._r8 + ZETA
+ if(k >= K_sfc(i)) then
+ Ke(i,k) = Karman*Ustar(i)*Zi(i,k)/PHI
+ else
+ Ke(i,k) = Karman*Ustar(i)*Zi(i,k) &
+ *(((Z_pbl(i)-Zi(i,k))/(Z_pbl(i)-Z_sfc(i)))**2)/PHI
+ endif
+ endif
+ end do
+ Ke_pbl(i) = Ke(i,K_sfc(i))*Z_sfc(i)/Zi(i,K_sfc(i))
+ endif
+ end do
+
+ ! The Same coefs used for momentum
+ !-----------------------------------
+ Km(:,:) = Ke(:,:)
+ Km_pbl(:) = Ke_pbl(:)
+
+ ! Compute downward values for the implicit PBL scheme
+ !-----------------------------------------------------
+ do k = 1,pver
+ MU (:,k) = gravit*dtime/(Pint(:,k+1) - Pint(:,k))
+ end do
+
+ NUe(:,:) = 0._r8
+ NUm(:,:) = 0._r8
+ do k = 2,pver
+ rho(:) = 2._r8*Pint(:,k)/(rair*(Tv(:,k)+Tv(:,k-1)))
+ NUe(:,k) = rho(:)*Ke(:,k)/(Zm(:,k)-Zm(:,k-1))
+ NUm(:,k) = rho(:)*Km(:,k)/(Zm(:,k)-Zm(:,k-1))
+ end do
+
+ Am(:,1 ) = MU(:,1)*NUm(:,2)
+ Cm(:,1 ) = 0._r8
+ Am(:,pver) = 0._r8
+ Cm(:,pver) = MU(:,pver)*NUm(:,pver)
+ Ae(:,1 ) = MU(:,1 )*NUe(:,2)
+ Ce(:,1 ) = 0._r8
+ Ae(:,pver) = 0._r8
+ Ce(:,pver) = MU(:,pver)*NUe(:,pver)
+ do k = 2,(pver-1)
+ Am(:,k) = MU(:,k)*NUm(:,k+1)
+ Cm(:,k) = MU(:,k)*NUm(:,k )
+ Ae(:,k) = MU(:,k)*NUe(:,k+1)
+ Ce(:,k) = MU(:,k)*NUe(:,k )
+ end do
+ Bm(:,:) = 1._r8 - Am(:,:) - Cm(:,:)
+ Be(:,:) = 1._r8 - Ae(:,:) - Ce(:,:)
+
+ FLu(:,1) = 0._r8
+ FLv(:,1) = 0._r8
+ FLq(:,1) = 0._r8
+ FLt(:,1) = 0._r8
+ do k = 2,pver
+ FLu(:,k) = NUm(:,k)*(U (:,k)-U (:,k-1))
+ FLv(:,k) = NUm(:,k)*(V (:,k)-V (:,k-1))
+ FLq(:,k) = NUe(:,k)*(Q (:,k)-Q (:,k-1))
+ FLt(:,k) = NUe(:,k)*(VSE(:,k)-VSE(:,k-1))
+ end do
+ do k = 1,(pver-1)
+ Eu(:,k) = Su(:,k) + MU(:,k)*(FLu(:,k)-FLu(:,k+1))
+ Ev(:,k) = Sv(:,k) + MU(:,k)*(FLv(:,k)-FLv(:,k+1))
+ Eq(:,k) = Sq(:,k) + MU(:,k)*(FLq(:,k)-FLq(:,k+1))
+ Et(:,k) = St(:,k) + MU(:,k)*(FLt(:,k)-FLt(:,k+1))
+ end do
+ Eu(:,pver) = Su(:,pver) + MU(:,pver)*FLu(:,pver)
+ Ev(:,pver) = Sv(:,pver) + MU(:,pver)*FLv(:,pver)
+ Eq(:,pver) = Sq(:,pver) + MU(:,pver)*FLq(:,pver)
+ Et(:,pver) = St(:,pver) + MU(:,pver)*FLt(:,pver)
+
+ Eval_m(:,1) = -Am(:,1)/Bm(:,1)
+ Eval_e(:,1) = -Ae(:,1)/Be(:,1)
+ Fval_u(:,1) = Eu(:,1)/Bm(:,1)
+ Fval_v(:,1) = Ev(:,1)/Bm(:,1)
+ Fval_q(:,1) = Eq(:,1)/Be(:,1)
+ Fval_t(:,1) = Et(:,1)/Be(:,1)
+ do k = 2,(pver-1)
+ Eval_m(:,k) = -Am(:,k)/(Bm(:,k)+Cm(:,k)*Eval_m(:,k-1))
+ Eval_e(:,k) = -Ae(:,k)/(Be(:,k)+Ce(:,k)*Eval_e(:,k-1))
+ Fval_u(:,k) = (Eu(:,k)-Cm(:,k)*Fval_u(:,k-1)) &
+ /(Bm(:,k)+Cm(:,k)*Eval_m(:,k-1))
+ Fval_v(:,k) = (Ev(:,k)-Cm(:,k)*Fval_v(:,k-1)) &
+ /(Bm(:,k)+Cm(:,k)*Eval_m(:,k-1))
+ Fval_q(:,k) = (Eq(:,k)-Ce(:,k)*Fval_q(:,k-1)) &
+ /(Be(:,k)+Ce(:,k)*Eval_e(:,k-1))
+ Fval_t(:,k) = (Et(:,k)-Ce(:,k)*Fval_t(:,k-1)) &
+ /(Be(:,k)+Ce(:,k)*Eval_e(:,k-1))
+ end do
+ Eval_m(:,pver) = 0._r8
+ Eval_e(:,pver) = 0._r8
+ Fval_u(:,pver) = 0._r8
+ Fval_v(:,pver) = 0._r8
+ Fval_q(:,pver) = 0._r8
+ Fval_t(:,pver) = 0._r8
+
+ Estar_u(:) = (Eu(:,pver)-Cm(:,pver)*Fval_u(:,pver-1))
+ Estar_v(:) = (Ev(:,pver)-Cm(:,pver)*Fval_v(:,pver-1))
+ Estar_q(:) = (Eq(:,pver)-Ce(:,pver)*Fval_q(:,pver-1))
+ Estar_t(:) = (Et(:,pver)-Ce(:,pver)*Fval_t(:,pver-1))
+
+ dFa_dTa(:) = NUe(:,pver)*(1._r8-Eval_e(:,pver-1))
+ dFa_dQa(:) = NUe(:,pver)*(1._r8-Eval_e(:,pver-1))
+ dFa_dUa(:) = NUm(:,pver)*(1._r8-Eval_m(:,pver-1))
+ dFa_dVa(:) = NUm(:,pver)*(1._r8-Eval_m(:,pver-1))
+
+ !============================================================================
+ ! flux calculation():
+ !
+ ! Required Values:
+ ! Passed from :
+ ! T(:,pver),Q(:,pver),U(:,pver),V(:,pver),Cdrag(:),Pmid(:,pver)
+ ! MU(:,pver),dFa_dTa(:),dFa_dQa(:),dFa_dUa(:),dFa_dVa(:)
+ ! Estar_t(:),Estar_q(:),Estar_u(:),Estar_v(:)
+ ! Passed from :
+ ! Tsfc(:),Qsfc(:),Psfc(:)
+ !
+ !============================================================================
+
+ ! Calculate Surface flux values and their derivatives
+ !--------------------------------------------------------
+ do i = 1, ncol
+ Th_a(i) = T (i,pver)*((ps0/pmid(i,pver))**cappa)
+ Th_s(i) = Tsfc(i) *((ps0/Psfc (i) )**cappa)
+ rho (i) = pmid (i,pver)/(rair*Tv(i,pver))
+
+ Ft (i) = rho(i)*Cdrag(i)*Ws_a(i)*(Th_s (i) - Th_a(i))
+ Fq (i) = rho(i)*Cdrag(i)*Ws_a(i)*(Qsfc(i) - Q(i,pver))
+ Fu (i) = -rho(i)*Cdrag(i)*Ws_a(i)*U(i,pver)
+ Fv (i) = -rho(i)*Cdrag(i)*Ws_a(i)*V(i,pver)
+ Fup (i) = Boltz*Tsfc(i)**4
+
+ dFt_dTa(i) = -rho(i)*Cdrag(i)*Ws_a(i)*((ps0/pmid(i,pver))**cappa)
+ dFq_dQa(i) = -rho(i)*Cdrag(i)*Ws_a(i)
+ dFu_dUa(i) = -rho(i)*Cdrag(i)*Ws_a(i)
+ dFv_dVa(i) = -rho(i)*Cdrag(i)*Ws_a(i)
+
+ dFt_dTs(i) = rho(i)*Cdrag(i)*Ws_a(i)*((ps0/Psfc (i) )**cappa)
+ dFq_dTs(i) = rho(i)*Cdrag(i)*Ws_a(i)*Qsfc(i)*latvap/(rh2o*(Tsfc(i)**2))
+ dFup_dTs(i) = 4._r8*Boltz*Tsfc(i)**3
+ end do
+
+ ! Incorporate surface fluxes into implicit scheme, then
+ ! update flux values and derivatives
+ !------------------------------------------
+ FN_u (:) = (Estar_u(:) + MU(:,pver)*Fu(:)) &
+ /(1._r8-MU(:,pver)*(dFa_dUa(:)+dFu_dUa(:)))
+ FN_v (:) = (Estar_v(:) + MU(:,pver)*Fv(:)) &
+ /(1._r8-MU(:,pver)*(dFa_dVa(:)+dFv_dVa(:)))
+ FN_t (:) = (Estar_t(:) + MU(:,pver)*Ft(:)) &
+ /(1._r8-MU(:,pver)*(dFa_dTa(:)+dFt_dTa(:)))
+ FN_q (:) = (Estar_q(:) + MU(:,pver)*Fq(:)) &
+ /(1._r8-MU(:,pver)*(dFa_dQa(:)+dFq_dQa(:)))
+
+ EN_t (:) = ( MU(:,pver)*dFt_dTs(:) ) &
+ /(1._r8-MU(:,pver)*(dFa_dTa(:)+dFt_dTa(:)))
+ EN_q (:) = ( MU(:,pver)*dFq_dTs(:) ) &
+ /(1._r8-MU(:,pver)*(dFa_dQa(:)+dFq_dQa(:)))
+
+ Ft (:) = Ft(:) + dFt_dTa(:)*FN_t(:)
+ Fq (:) = Fq(:) + dFq_dQa(:)*FN_q(:)
+
+ dFt_dTs(:) = dFt_dTs(:) + dFt_dTa(:)*EN_t(:)
+ dFq_dTs(:) = dFq_dTs(:) + dFq_dQa(:)*EN_q(:)
+
+ !============================================================================
+ ! surface calculation():
+ !
+ ! Required Values:
+ ! Passed from :
+ ! Fup(:),Ft(:),Fq(:)
+ ! dFup_dTs(:),dFt_dTs(:),dFq_dTs(:)
+ ! Fsw(:)
+ ! Passed from :
+ ! Fdn(:)
+ !
+ !============================================================================
+
+ ! Update surface values
+ !-----------------------
+ Tsfc_bc(:) = Tsfc(:)
+
+ Flux (:) = (dtime/C_ocn)*(Fdn(:) - Fup(:) + Fsw(:) &
+ -cpair*Ft(:) -latvap*Fq(:) )
+ dFlux(:) = (dtime/C_ocn)*(-dFup_dTs(:) -cpair*dFt_dTs(:) -latvap*dFq_dTs(:))
+ Tsfc (:) = Tsfc(:) + (Flux(:)/(1._r8-dFlux(:)))
+ Qsfc (:) = epsilo*E0/Psfc(:)*exp(-latvap_div_rh2o*((1._r8/Tsfc(:))-1._r8/T0))
+ dTs (:) = Tsfc(:) - Tsfc_bc(:)
+
+ LHflux(:) = latvap*Fq(:)
+ SHflux(:) = cpair *Ft(:)
+ TUflux(:) = Fu(:)
+ TVflux(:) = Fv(:)
+
+ !============================================================================
+ ! tphysac():
+ !
+ ! Required Values:
+ ! Passed from :
+ ! FN_t(:),FN_q(:),FN_u(:),FN_v(:)
+ ! EN_t(:),EN_q(:),dTs(:)
+ ! Passed from :
+ ! Fval_t(:),Fval_q(:),Fval_u(:),Fval_v(:)
+ ! Eval_e(:),Eval_m(:)
+ !
+ !============================================================================
+
+ ! Compute upward values for the implicit PBL scheme
+ !-----------------------------------------------------
+ dTa(:,pver) = FN_t(:) + EN_t(:)*dTs(:)
+ dQa(:,pver) = FN_q(:) + EN_q(:)*dTs(:)
+ dUa(:,pver) = FN_u(:)
+ dVa(:,pver) = FN_v(:)
+ do k=(pver-1),1,-1
+ dTa(:,k) = Fval_t(:,k) + Eval_e(:,k)*dTa(:,k+1)
+ dQa(:,k) = Fval_q(:,k) + Eval_e(:,k)*dQa(:,k+1)
+ dUa(:,k) = Fval_u(:,k) + Eval_m(:,k)*dUa(:,k+1)
+ dVa(:,k) = Fval_v(:,k) + Eval_m(:,k)*dVa(:,k+1)
+ end do
+
+ ! Update atmosphere values
+ !--------------------------
+ U(:,:) = U(:,:) + dUa(:,:)
+ V(:,:) = V(:,:) + dVa(:,:)
+ Q(:,:) = Q(:,:) + dQa(:,:)
+ T(:,:) = T(:,:) + dTa(:,:)
+
+ ! Return resulting Tendency values
+ !----------------------------------
+ dUa(:,:) = dUa(:,:)/dtime
+ dVa(:,:) = dVa(:,:)/dtime
+ dQa(:,:) = dQa(:,:)/dtime
+ dTa(:,:) = dTa(:,:)/dtime
+
+ end subroutine frierson_pbl
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_pbl_USER(ncol, pver, dtime, pmid, pint, Zm, Zi, &
+ Psfc, Tsfc, Qsfc, T, U, V, Q, Fsw, Fdn, &
+ Cdrag, Km, Ke, VSE, Z_pbl, Rf, dQa, dTa, dUa, dVa, &
+ LHflux, SHflux, TUflux, TVflux )
+ !
+ ! frierson_pbl_USER: This routine is a stub which users can use
+ ! to develop and test their own PBL scheme
+ !==========================================================================
+ !
+ ! Passed Variables
+ !------------------
+ integer ,intent(in) :: ncol ! Number of columns
+ integer ,intent(in) :: pver ! Number of levels
+ real(r8),intent(in) :: dtime ! Time Step
+ real(r8),intent(in) :: pmid (ncol,pver) ! Pressure at model levels
+ real(r8),intent(in) :: pint (ncol,pver+1) ! Pressure at interface levels.
+ real(r8),intent(in) :: Zm (ncol,pver) ! Height at model levels.
+ real(r8),intent(in) :: Zi (ncol,pver) ! Height at interface levels.
+ real(r8),intent(in) :: Psfc (ncol) ! Surface Pressure.
+ real(r8),intent(inout):: Tsfc (ncol) ! SST temperature K
+ real(r8),intent(inout):: Qsfc (ncol) ! sea surface water vapor (kg/kg)
+ real(r8),intent(inout):: T (ncol,pver) ! ATM Temperature values.
+ real(r8),intent(inout):: U (ncol,pver) ! ATM Zonal Wind values.
+ real(r8),intent(inout):: V (ncol,pver) ! ATM Meridional Wind values.
+ real(r8),intent(inout):: Q (ncol,pver) ! ATM Water vapor values.
+ real(r8),intent(in) :: Fdn (ncol) ! Downward LW flux at surface
+ real(r8),intent(in) :: Fsw (ncol) ! Net SW flux at surface from gray radiation
+ real(r8),intent(out) :: Cdrag (ncol) ! Surface drage coef.
+ real(r8),intent(out) :: Km (ncol,pver+1) ! Eddy diffusivity for PBL
+ real(r8),intent(out) :: Ke (ncol,pver+1) ! Eddy diffusivity for PBL
+ real(r8),intent(out) :: VSE (ncol,pver) ! Virtual-Dry Static energy.(huh?)
+ real(r8),intent(out) :: Z_pbl (ncol) ! Height of PBL layer.
+ real(r8),intent(out) :: Rf (ncol,pver)
+ real(r8),intent(out) :: dTa (ncol,pver)
+ real(r8),intent(out) :: dQa (ncol,pver)
+ real(r8),intent(out) :: dUa (ncol,pver)
+ real(r8),intent(out) :: dVa (ncol,pver)
+ real(r8),intent(out) :: LHflux(ncol) ! Latent Heat Flux
+ real(r8),intent(out) :: SHflux(ncol) ! Sensible Heat Flux
+ real(r8),intent(out) :: TUflux(ncol) ! U Surface stress
+ real(r8),intent(out) :: TVflux(ncol) ! V Surface stress
+ !
+ ! Local Values
+ !---------------
+
+
+ Cdrag = 0._r8
+ Km = 0._r8
+ Ke = 0._r8
+ VSE = 0._r8
+ Z_pbl = 0._r8
+ Rf = 0._r8
+ dTa = 0._r8
+ dQa = 0._r8
+ dUa = 0._r8
+ dVa = 0._r8
+ LHflux = 0._r8
+ SHflux = 0._r8
+ TUflux = 0._r8
+ TVflux = 0._r8
+
+ end subroutine frierson_pbl_USER
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_radiation(ncol,pver,dtime,clat,pint,pmid, &
+ Psfc,Tsfc,Qsfc,T,qv,dtdt_rad, &
+ Fsolar,Fup_s,Fdown_s,Fup_toa,Fdown_toa)
+ !
+ ! The gray radiation parameterization based on Frierson, et al. 2006.
+ !
+ ! frierson_radiation: This is an implementation of the gray radiation
+ ! scheme used in the Frierson model.
+ !==========================================================================
+ !
+ ! Passed Variables
+ !-------------------
+ integer ,intent(in) :: ncol ! number of columns
+ integer ,intent(in) :: pver ! number of vertical levels
+ real(r8),intent(in) :: dtime ! time step (s)
+ real(r8),intent(in) :: clat (ncol) ! latitude
+ real(r8),intent(in) :: pint (ncol,pver+1) ! mid-point pressure (Pa)
+ real(r8),intent(in) :: pmid (ncol,pver) ! mid-point pressure (Pa)
+ real(r8),intent(in) :: Psfc (ncol) ! surface pressure
+ real(r8),intent(in) :: Tsfc (ncol) ! surface temperature (K)
+ real(r8),intent(in) :: Qsfc (ncol)
+ real(r8),intent(inout):: T (ncol,pver) ! temperature (K)
+ real(r8),intent(in) :: qv (ncol,pver) ! Q (kg/kg)
+ real(r8),intent(out) :: dtdt_rad(ncol,pver) ! temperature tendency in K/s from relaxation
+ real(r8),intent(out) :: Fsolar (ncol) !
+ real(r8),intent(out) :: Fup_s (ncol) !
+ real(r8),intent(out) :: Fdown_toa(ncol) !
+ real(r8),intent(out) :: Fup_toa (ncol) !
+ real(r8),intent(out) :: Fdown_s (ncol) !
+ !
+ ! Local Values
+ !-------------
+ real(r8):: sinsq (ncol) ! sinlat**2
+ real(r8):: Tv_srf (ncol)
+ real(r8):: Tv (ncol,pver )
+ real(r8):: Zm (ncol,pver )
+ real(r8):: Zscl (ncol)
+ real(r8):: Tbar (ncol)
+ real(r8):: Tdif (ncol)
+ real(r8):: Zfrac (ncol)
+ real(r8):: Pfrac (ncol)
+ real(r8):: Tau_lat(ncol)
+ real(r8):: Tau (ncol,pver+1)
+ real(r8):: Zi (ncol,pver+1)
+ real(r8):: Fup (ncol,pver+1)
+ real(r8):: Fdown (ncol,pver+1)
+ real(r8):: Bval (ncol,pver)
+ real(r8):: Etau (ncol,pver)
+ integer :: k
+
+ ! Calc current Tv values
+ !---------------------------------
+ Tv_srf(:) = Tsfc(:)*(1._r8+zvir*Qsfc(:))
+ do k = 1, pver
+ Tv(:,k) = T(:,k)*(1._r8+zvir*qv(:,k))
+ end do
+
+ ! Calc Geopotential Heights at model interface
+ ! levels and at model layer levels
+ !----------------------------------------------
+ Zi(:,pver+1) = 0._r8
+ Zm(:,pver ) = rair*((Tv(:,pver)+Tv_srf(:))/2._r8)*log(Psfc(:)/pmid(:,pver))/gravit
+ do k = pver-1,1,-1
+ Zscl (:) = rair*log(pmid(:,k+1)/pmid(:,k))/gravit
+ Tbar (:) = (Tv(:,k)+Tv(:,k+1))/2._r8
+ Tdif (:) = (Tv(:,k)-Tv(:,k+1))/2._r8
+ Zfrac (:) = log(pint(:,k+1)/pmid(:,k+1))/log(pmid(:,k)/pmid(:,k+1))
+ Zm(:,k ) = Zm(:,k+1) + Zscl(:)*Tbar(:)
+ Zi(:,k+1) = Zm(:,k+1) + Zscl(:)*((Tv(:,k+1)-2._r8*Tdif(:))*Zfrac(:) &
+ + Tdif(:) *Zfrac(:)**2)
+ end do
+ Zfrac(:) = log(pint(:,1)/pmid(:,2))/log(pmid(:,1)/pmid(:,2))
+ Zi(:,1) = Zm(:,2) + Zscl(:)*((Tv(:,2)-2._r8*Tdif(:))*Zfrac(:) &
+ + Tdif(:) *Zfrac(:)**2)
+
+ ! Set Solar flux
+ !------------------------
+ sinsq (:) = sin(clat(:))*sin(clat(:))
+ Fsolar(:) = (Rs0/4._r8)*(1._r8 + DeltaS*(1._r8 - 3._r8*sinsq(:))/4._r8)
+
+ ! Calc optical depths
+ !------------------------
+ Tau_lat(:) = Tau_eqtr + (Tau_pole-Tau_eqtr)*sinsq(:)
+ do k = 1,pver+1
+ Pfrac(:) = pint(:,k)/Psfc(:)
+ Tau(:,k) = Tau_lat(:)*(LinFrac*Pfrac(:) + (1._r8-LinFrac)*Pfrac(:)**4)
+ end do
+
+ ! Lowest order solution for up/down flux assumes B is constant for the layer
+ !----------------------------------------------------------------------------
+ do k=1,pver
+ Bval(:,k) = Boltz*T(:,k)**4
+ Etau(:,k) = exp(Tau(:,k)-Tau(:,k+1))
+ end do
+
+ Fup(:,pver+1) = Boltz*Tsfc(:)**4
+ do k=pver,1,-1
+ Fup(:,k) = Fup(:,k+1)*Etau(:,k) + Bval(:,k)*(1._r8-Etau(:,k))
+ end do
+
+ Fdown(:,1) = 0._r8
+ do k=1,pver
+ Fdown(:,k+1) = Fdown(:,k)*Etau(:,k) + Bval(:,k)*(1._r8-Etau(:,k))
+ end do
+
+ ! Calc Radiative heating
+ !-------------------------
+ do k=1,pver
+ dtdt_rad(:,k) = -(cappa*Tv(:,k)/pmid(:,k)) &
+ *((Fup(:,k+1)-Fdown(:,k+1)) - (Fup(:,k)-Fdown(:,k))) &
+ /( Zi(:,k+1) - Zi(:,k) )
+ end do
+
+ ! Return Upward/Downward long wave radiation at Surface and TOA
+ !----------------------------------------------------------
+ Fup_s (:) = Fup (:,pver+1)
+ Fdown_s(:) = Fdown(:,pver+1)
+ Fup_toa (:) = Fup (:,1)
+ Fdown_toa(:) = Fdown(:,1)
+
+ ! Update T values
+ !-------------------
+ do k=1,pver
+ T(:,k) = T(:,k) + dtdt_rad(:,k)*dtime
+ end do
+
+ end subroutine frierson_radiation
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_radiation_USER(ncol,pver,dtime,clat,pint,pmid, &
+ Psfc,Tsfc,Qsfc,T,qv,dtdt_rad, &
+ Fsolar,Fup_s,Fdown_s,Fup_toa,Fdown_toa)
+ !
+ ! frierson_radiation_USER: This routine is a stub which users can use
+ ! to develop and test their own radiation scheme
+ !==========================================================================
+ !
+ ! Passed Variables
+ !-------------------
+ integer ,intent(in) :: ncol ! number of columns
+ integer ,intent(in) :: pver ! number of vertical levels
+ real(r8),intent(in) :: dtime ! time step (s)
+ real(r8),intent(in) :: clat (ncol) ! latitude
+ real(r8),intent(in) :: pint (ncol,pver+1) ! mid-point pressure (Pa)
+ real(r8),intent(in) :: pmid (ncol,pver) ! mid-point pressure (Pa)
+ real(r8),intent(in) :: Psfc (ncol) ! surface pressure
+ real(r8),intent(in) :: Tsfc (ncol) ! surface temperature (K)
+ real(r8),intent(in) :: Qsfc (ncol)
+ real(r8),intent(inout):: T (ncol,pver) ! temperature (K)
+ real(r8),intent(in) :: qv (ncol,pver) ! Q (kg/kg)
+ real(r8),intent(out) :: dtdt_rad(ncol,pver) ! temperature tendency in K/s from relaxation
+ real(r8),intent(out) :: Fsolar (ncol) !
+ real(r8),intent(out) :: Fup_s (ncol) !
+ real(r8),intent(out) :: Fdown_s (ncol) !
+ real(r8),intent(out) :: Fup_toa (ncol) !
+ real(r8),intent(out) :: Fdown_toa(ncol) !
+ !
+ ! Local Values
+ !-------------
+
+ dtdt_rad = 0._r8
+ Fsolar = 0._r8
+ Fup_s = 0._r8
+ Fdown_s = 0._r8
+ Fup_toa = 0._r8
+ Fdown_toa = 0._r8
+
+
+ end subroutine frierson_radiation_USER
+ !=======================================================================
+
+end module frierson
diff --git a/src/physics/simple/frierson_cam.F90 b/src/physics/simple/frierson_cam.F90
new file mode 100644
index 0000000000..0fe9d824bb
--- /dev/null
+++ b/src/physics/simple/frierson_cam.F90
@@ -0,0 +1,1046 @@
+module frierson_cam
+!-----------------------------------------------------------------------
+!
+! Purpose: Implement idealized forcings described in
+! Frierson, et al. (2006), " A Gray-Radiation Aquaplanet
+! Moist GCM, Part I. Static Stability and Eddy Scale"
+! J. Atmos. Sci, Vol 63, 2548-2566.
+! doi: 10.1175/JAS3753.1
+!
+!============================================================================
+ ! Useful modules
+ !-------------------
+ use shr_kind_mod, only: r8 => shr_kind_r8
+ use shr_const_mod, only: pi => shr_const_pi
+ use physconst, only: gravit, cappa, rair, cpair, latvap, rh2o, epsilo, rhoh2o, zvir
+ use ppgrid, only: pcols, pver, pverp, begchunk, endchunk
+ use constituents, only: pcnst
+ use physics_buffer, only: dtype_r8, pbuf_add_field, physics_buffer_desc, &
+ pbuf_set_field, pbuf_get_field
+ use camsrfexch, only: cam_in_t,cam_out_t
+ use cam_history, only: outfld
+ use time_manager, only: is_first_step
+ use cam_abortutils, only: endrun
+ use spmd_utils, only: masterproc
+ use cam_logfile, only: iulog
+ use hycoef, only: ps0, etamid
+ use spmd_utils, only: mpicom, mstrid=>masterprocid, mpi_real8
+
+ use pio ,only: file_desc_t, var_desc_t, io_desc_t, pio_double, pio_def_var
+ use pio ,only: pio_write_darray, pio_read_darray, pio_inq_varid
+ use cam_grid_support,only: cam_grid_id, cam_grid_dimensions, cam_grid_get_decomp
+ use shr_const_mod, only: SHR_CONST_STEBOL, SHR_CONST_REARTH, SHR_CONST_KARMAN, SHR_CONST_TKTRIP
+
+ ! Set all Global values and routines to private by default
+ ! and then explicitly set their exposure.
+ !---------------------------------------------------------
+ implicit none
+ private
+ save
+
+ public :: frierson_register
+ public :: frierson_readnl
+ public :: frierson_init
+ public :: frierson_condensate_tend
+ public :: frierson_pbl_tend
+ public :: frierson_radiative_tend
+ public :: frierson_restart_init
+ public :: frierson_restart_write
+ public :: frierson_restart_read
+
+ private :: frierson_surface_init
+
+ ! PBL Configuatons
+ !------------------
+ integer,parameter :: PBL_FRIERSON = 0 ! Implementation of Frierson PBL
+ integer,parameter :: PBL_USER = 1 ! Optional call for user defined PBL
+
+ ! Tags to identify optional model formulations
+ !------------------------------------------------
+ integer,parameter :: CONDENSATE_NONE = 0 ! No Condensation, PRECL=0
+ integer,parameter :: CONDENSATE_FRIERSON = 1 ! Frierson condensation w/ re-evaporation
+ integer,parameter :: CONDENSATE_TJ16 = 2 ! Condensation from TJ2016 model.
+ integer,parameter :: CONDENSATE_USER = 3 ! Optional user defined Condensation scheme
+
+ integer,parameter :: RADIATION_FRIERSON = 0 ! Frierson Gray radiation.
+ integer,parameter :: RADIATION_USER = 1 ! Optional user defined Radiation scheme
+
+ ! Options selecting which PRECIP, PBL, RADIATION, etc.. formulations to use.
+ !---------------------------------------------------------------------------------
+ integer,parameter :: PBL_OPT = PBL_FRIERSON
+ integer,parameter :: CONDENSATE_OPT = CONDENSATE_FRIERSON
+ integer,parameter :: RADIATION_OPT = RADIATION_FRIERSON
+
+ ! Global Constants
+ !---------------------
+ real(r8),parameter :: frierson_T0 = SHR_CONST_TKTRIP ! Reference Temperature for E0
+ real(r8),parameter :: frierson_E0 = 610.78_r8 ! Saturation Vapor pressure @ T0
+ real(r8),parameter :: frierson_Rs0 = 1360.0_r8 ! Solar Constant
+ real(r8),parameter :: frierson_Erad = SHR_CONST_REARTH ! Earth Radius
+ real(r8),parameter :: frierson_Karman = SHR_CONST_KARMAN ! Von Karman constant
+ real(r8),parameter :: frierson_Boltz = SHR_CONST_STEBOL ! Stefan-Boltzmann constant
+
+ ! Some Physics buffer indices
+ !-------------------------------
+ integer :: prec_pcw_idx = 0
+ integer :: prec_dp_idx = 0
+ integer :: relhum_idx = 0
+
+ ! Global values for Surface Temp, surface fluxes, and radiative heating
+ !----------------------------------------------------------------------
+ type(var_desc_t) :: Tsurf_desc ! Vardesc for restarts
+ type(var_desc_t) :: Qsurf_desc ! Vardesc for restarts
+ real(r8),allocatable :: Tsurf (:,:) ! Surface Temp
+ real(r8),allocatable :: Qsurf (:,:) ! Surface Q
+ real(r8),allocatable :: Fsolar(:,:) ! Net Solar Heating
+ real(r8),allocatable :: Fup (:,:) ! Upward Longwave flux
+ real(r8),allocatable :: Fdown (:,:) ! Downward Longwave flux
+ real(r8),allocatable :: Fup_toa (:,:) ! Upward Longwave flux at TOA
+ real(r8),allocatable :: Fdown_toa(:,:) ! Downward Longwave flux at TOA
+ real(r8),allocatable :: SHflux(:,:) ! Sensible Heat flux
+ real(r8),allocatable :: LHflux(:,:) ! Latent Heat Flux
+ real(r8),allocatable :: TUflux(:,:) ! U stress momentum flux
+ real(r8),allocatable :: TVflux(:,:) ! V stress momentum flux
+ real(r8),allocatable :: Cd (:,:) ! Surface Drag
+ real(r8),allocatable :: clat (:,:) ! latitudes(radians) for columns
+ real(r8),allocatable :: Fnet (:,:) ! Net Radiative Surface Heating
+ real(r8),allocatable :: Fnet_toa(:,:) ! Net Radiative Surface Heating at TOA
+
+ real(r8), parameter :: unset_r8 = huge(1.0_r8)
+
+ ! Global Tuning values
+ !------------------------
+ real(r8) :: frierson_Wind_min = unset_r8 ! Minimum wind threshold
+ real(r8) :: frierson_Z0 = unset_r8 ! Roughness Length
+ real(r8) :: frierson_Ri_c = unset_r8 ! Crit. Richardson # for stable mixing
+ real(r8) :: frierson_Fb = unset_r8 ! Surface layer Fraction
+ real(r8) :: frierson_Albedo = unset_r8 ! Frierson Albedo
+ real(r8) :: frierson_DeltaS = unset_r8 ! Lat variation of shortwave radiation
+ real(r8) :: frierson_Tau_eqtr = unset_r8 ! Longwave optical depth at Equator
+ real(r8) :: frierson_Tau_pole = unset_r8 ! Longwave optical depth at poles.
+ real(r8) :: frierson_LinFrac = unset_r8 ! Stratosphere Linear optical depth param
+ real(r8) :: frierson_C0 = unset_r8 ! Ocean mixed layer heat capacity
+ real(r8) :: frierson_WetDryCoef = unset_r8 ! E0 Scale factor to control moisture
+ real(r8) :: frierson_Tmin = unset_r8 ! IC: Minimum sst (K)
+ real(r8) :: frierson_Tdlt = unset_r8 ! IC: eq-polar difference sst (K)
+ real(r8) :: frierson_Twidth = unset_r8 ! IC: Latitudinal width parameter for sst (degrees latitude)
+
+contains
+ !==============================================================================
+ subroutine frierson_register()
+ !
+ ! frierson_register: Register physics buffer values
+ !=====================================================================
+
+ call pbuf_add_field('PREC_PCW','physpkg',dtype_r8, (/pcols/), prec_pcw_idx)
+ call pbuf_add_field('PREC_DP' ,'physpkg',dtype_r8, (/pcols/), prec_dp_idx )
+ call pbuf_add_field('RELHUM' ,'physpkg',dtype_r8, (/pcols,pver/),relhum_idx )
+
+ end subroutine frierson_register
+ !==============================================================================
+
+
+ !==============================================================================
+ subroutine frierson_readnl(nlfile)
+ !
+ ! frierson_readnl: Read in parameters controlling Frierson parameterizations.
+ !=====================================================================
+ use namelist_utils,only: find_group_name
+ use units ,only: getunit, freeunit
+ !
+ ! Passed Variables
+ !------------------
+ character(len=*),intent(in):: nlfile
+ !
+ ! Local Values
+ !--------------
+ integer:: ierr,unitn
+
+ character(len=*), parameter :: sub = 'frierson_readnl'
+
+ namelist /frierson_nl/ frierson_Wind_min, frierson_Z0 , frierson_Ri_c , &
+ frierson_Fb , frierson_Albedo , frierson_DeltaS , &
+ frierson_Tau_eqtr, frierson_Tau_pole , frierson_LinFrac, &
+ frierson_C0 , frierson_WetDryCoef, frierson_Tmin , &
+ frierson_Tdlt , frierson_Twidth
+
+ ! Read in namelist values
+ !-------------------------
+ if(masterproc) then
+ unitn = getunit()
+ open(unitn,file=trim(nlfile),status='old')
+ call find_group_name(unitn,'frierson_nl',status=ierr)
+ if(ierr == 0) then
+ read(unitn,frierson_nl,iostat=ierr)
+ if(ierr /= 0) then
+ call endrun(sub//': ERROR reading namelist')
+ endif
+ endif
+ close(unitn)
+ call freeunit(unitn)
+ endif
+
+ ! Broadcast namelist values
+ !---------------------------
+ call mpi_bcast(frierson_Wind_min , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Wind_min")
+ call mpi_bcast(frierson_Z0 , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Z0")
+ call mpi_bcast(frierson_Ri_c , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Ri_c")
+ call mpi_bcast(frierson_Fb , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Fb")
+ call mpi_bcast(frierson_Albedo , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Albedo")
+ call mpi_bcast(frierson_DeltaS , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_DeltaS")
+ call mpi_bcast(frierson_Tau_eqtr , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Tau_eqtr")
+ call mpi_bcast(frierson_Tau_pole , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Tau_pole")
+ call mpi_bcast(frierson_LinFrac , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_LinFrac")
+ call mpi_bcast(frierson_C0 , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_C0")
+ call mpi_bcast(frierson_Tmin , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Tmin")
+ call mpi_bcast(frierson_Tdlt , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Tdlt")
+ call mpi_bcast(frierson_Twidth , 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_Twidth")
+ call mpi_bcast(frierson_WetDryCoef, 1, mpi_real8 , mstrid, mpicom, ierr)
+ if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: frierson_WetDryCoef")
+
+ end subroutine frierson_readnl
+ !==============================================================================
+
+
+ !==============================================================================
+ subroutine frierson_init(phys_state,pbuf2d)
+ !
+ ! frierson_init: allocate space for global arrays and initialize values.
+ ! Add variables to history outputs
+ !=====================================================================
+ use physics_types, only: physics_state
+ use error_messages,only: alloc_err
+ use cam_history, only: addfld, add_default,horiz_only
+ use phys_grid, only: get_ncols_p, get_rlat_p
+ use frierson, only: frierson_set_const
+ !
+ ! Passed Variables
+ !------------------
+ type(physics_state) ,pointer:: phys_state(:)
+ type(physics_buffer_desc),pointer:: pbuf2d (:,:)
+ !
+ ! Local Values
+ !---------------
+ integer :: istat,lchnk,icol,ncol
+ real(r8):: adjusted_E0
+ real(r8):: frierson_Rs
+
+ ! Initialize constants in Frierson module
+ !------------------------------------------
+ adjusted_E0 = frierson_WetDryCoef*frierson_E0
+ frierson_Rs = frierson_Rs0*(1._r8-frierson_Albedo)
+ call frierson_set_const(gravit,cappa,rair,cpair,latvap,rh2o,epsilo,rhoh2o,zvir,ps0,etamid, &
+ frierson_T0 ,adjusted_E0 ,frierson_Erad ,frierson_Wind_min, &
+ frierson_Z0 ,frierson_Ri_c ,frierson_Karman ,frierson_Fb , &
+ frierson_Rs ,frierson_DeltaS,frierson_Tau_eqtr,frierson_Tau_pole, &
+ frierson_LinFrac,frierson_Boltz ,frierson_C0 )
+
+ ! Add values for history output
+ !---------------------------------
+ call addfld('gray_QRL' ,(/'lev' /),'A','K/s' ,'Longwave heating rate for gray atmosphere' )
+ call addfld('gray_QRS' ,(/'lev' /),'A','K/s' ,'Solar heating rate for gray atmosphere' )
+ call addfld('gray_DTCOND',(/'lev' /),'A','K/s' ,'T tendency - gray atmosphere moist process' )
+ call addfld('gray_DQCOND',(/'lev' /),'A','kg/kg/s','Q tendency - gray atmosphere moist process' )
+ call addfld('gray_EVAPDT',(/'lev' /),'A','K/s' ,'T tendency due to re-evaporation' )
+ call addfld('gray_EVAPDQ',(/'lev' /),'A','kg/kg/s','Q tendency due to re-evaporation' )
+ call addfld('gray_KVH' ,(/'ilev'/),'A','m2/s' ,'Vertical diffusion diffusivities (heat/moisture)')
+ call addfld('gray_KVM' ,(/'ilev'/),'A','m2/s' ,'Vertical diffusion diffusivities (momentum)' )
+ call addfld('gray_VSE' ,(/'lev' /),'A','K' ,'VSE: (Tv + gZ/Cp)' )
+ call addfld('gray_Zm' ,(/'lev' /),'A','m' ,'Geopotential height' )
+ call addfld('gray_Rf' ,(/'lev' /),'A','1' ,'Bulk Richardson number (Frierson et al 2006, eq 16) / Ri_c' )
+ call addfld('gray_DTV' ,(/'lev' /),'A','K/s' ,'T tendency due to vertical diffusion' )
+ call addfld('gray_DUV' ,(/'lev' /),'A','m/s2' ,'U tendency due to vertical diffusion' )
+ call addfld('gray_DVV' ,(/'lev' /),'A','m/s2' ,'V tendency due to vertical diffusion' )
+ call addfld('gray_VD01' ,(/'lev' /),'A','kg/kg/s','Q tendency (vertical diffusion)' )
+ call addfld('gray_PRECL' ,horiz_only,'A','m/s' ,'Large-scale precipitation rate' )
+ call addfld('gray_PRECC' ,horiz_only,'A','m/s' ,'Convective precipitation rate' )
+ call addfld('gray_Tsurf ',horiz_only,'I','K' ,'Surface Temperature' )
+ call addfld('gray_Qsurf ',horiz_only,'I','kg/kg' ,'Surface Water Vapor' )
+ call addfld('gray_Cdrag' ,horiz_only,'A','1' ,'Surface Drag Coefficient' )
+ call addfld('gray_Zpbl' ,horiz_only,'I','m' ,'PBL Height' )
+ call addfld('gray_SWflux',horiz_only,'I','W/m2' ,'SW Solar Flux' )
+ call addfld('gray_LUflux',horiz_only,'I','W/m2' ,'LW Upward Radiative Flux at Surface' )
+ call addfld('gray_LDflux',horiz_only,'I','W/m2' ,'LW Downward Radiative Flux at Surface' )
+ call addfld('gray_LWflux',horiz_only,'I','W/m2' ,'LW Net Radiative Flux at Surface' )
+ call addfld('gray_LUflux_TOA',horiz_only,'I','W/m2' ,'LW Upward Radiative Flux at TOA' )
+ call addfld('gray_LDflux_TOA',horiz_only,'I','W/m2' ,'LW Downward Radiative Flux at TOA' )
+ call addfld('gray_LWflux_TOA',horiz_only,'I','W/m2' ,'LW Net Radiative Flux at TOA' )
+ call addfld('gray_SHflux',horiz_only,'I','W/m2' , 'Sensible Heat Flux' )
+ call addfld('gray_LHflux',horiz_only,'I','W/m2' , 'Latent Heat Flux' )
+ call addfld('gray_TauU' ,horiz_only,'I','N/m2' , 'U Surface Stress' )
+ call addfld('gray_TauV' ,horiz_only,'I','N/m2' , 'V Surface Stress' )
+
+ call add_default('gray_QRL' ,1,' ')
+ call add_default('gray_QRS' ,1,' ')
+ call add_default('gray_DTCOND',1,' ')
+ call add_default('gray_DQCOND',1,' ')
+ call add_default('gray_EVAPDT',1,' ')
+ call add_default('gray_EVAPDQ',1,' ')
+ call add_default('gray_KVH' ,1,' ')
+ call add_default('gray_KVM' ,1,' ')
+ call add_default('gray_VSE' ,1,' ')
+ call add_default('gray_Zm' ,1,' ')
+ call add_default('gray_Rf' ,1,' ')
+ call add_default('gray_DTV' ,1,' ')
+ call add_default('gray_DUV' ,1,' ')
+ call add_default('gray_DVV' ,1,' ')
+ call add_default('gray_VD01' ,1,' ')
+ call add_default('gray_PRECC' ,1,' ')
+ call add_default('gray_PRECL' ,1,' ')
+ call add_default('gray_Tsurf' ,1,' ')
+ call add_default('gray_Qsurf' ,1,' ')
+ call add_default('gray_Cdrag' ,1,' ')
+ call add_default('gray_Zpbl' ,1,' ')
+ call add_default('gray_SWflux',1,' ')
+ call add_default('gray_LUflux',1,' ')
+ call add_default('gray_LDflux',1,' ')
+ call add_default('gray_LWflux',1,' ')
+ call add_default('gray_LUflux_TOA',1,' ')
+ call add_default('gray_LDflux_TOA',1,' ')
+ call add_default('gray_LWflux_TOA',1,' ')
+ call add_default('gray_SHflux',1,' ')
+ call add_default('gray_LHflux',1,' ')
+ call add_default('gray_TauU' ,1,' ')
+ call add_default('gray_TauV' ,1,' ')
+
+ ! Allocate Global arrays
+ !-------------------------
+ allocate(Fsolar(pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Fsolar',pcols*(endchunk-begchunk+1))
+ allocate(Fup (pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Fup' ,pcols*(endchunk-begchunk+1))
+ allocate(Fdown (pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Fdown' ,pcols*(endchunk-begchunk+1))
+ allocate(Fup_toa (pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Fup_toa' ,pcols*(endchunk-begchunk+1))
+ allocate(Fdown_toa (pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Fdown_toa' ,pcols*(endchunk-begchunk+1))
+ allocate(Fnet(pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Fnet',pcols*(endchunk-begchunk+1))
+ allocate(Fnet_toa(pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Fnet_toa' ,pcols*(endchunk-begchunk+1))
+
+ allocate(SHflux(pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','SHflux',pcols*(endchunk-begchunk+1))
+ allocate(LHflux(pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','LHflux',pcols*(endchunk-begchunk+1))
+ allocate(TUflux(pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','TUflux',pcols*(endchunk-begchunk+1))
+ allocate(TVflux(pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','TVflux',pcols*(endchunk-begchunk+1))
+ allocate(Cd (pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Cd' ,pcols*(endchunk-begchunk+1))
+ allocate(clat (pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','clat' ,pcols*(endchunk-begchunk+1))
+
+ ! Initialize time indices and latitudes
+ !----------------------------------------
+ do lchnk = begchunk,endchunk
+ ncol = get_ncols_p(lchnk)
+ do icol = 1,ncol
+ clat(icol,lchnk) = get_rlat_p(lchnk,icol)
+ end do
+ end do
+
+ ! At first model step, initialize some values
+ !-----------------------------------------------
+ if(is_first_step()) then
+ ! Initialize physics buffer values
+ !----------------------------------
+ call pbuf_set_field(pbuf2d, prec_pcw_idx, 0._r8)
+ call pbuf_set_field(pbuf2d, prec_dp_idx , 0._r8)
+
+ ! Allocate Surface fields
+ !-------------------------
+ allocate(Tsurf (pcols,begchunk:endchunk),stat=istat)
+ call alloc_err(istat,'Frierson INIT','Tsurf' ,pcols*(endchunk-begchunk+1))
+ allocate(Qsurf (pcols,begchunk:endchunk) ,stat=istat)
+ call alloc_err(istat,'Frierson INIT','Qsurf' ,pcols*(endchunk-begchunk+1))
+
+ ! Initialize Surface temperatures and Q
+ !-----------------------------------------------------------------------
+ do lchnk = begchunk,endchunk
+ ncol = get_ncols_p(lchnk)
+
+ ! Set to reference values for initialization
+ !------------------------------------------------------------
+ phys_state(lchnk)%ps(:ncol) = ps0
+
+ call frierson_surface_init(ncol, clat(:ncol,lchnk), &
+ phys_state(lchnk)%ps(:ncol), &
+ Tsurf(:ncol,lchnk), &
+ Qsurf(:ncol,lchnk) )
+ end do
+ endif
+
+ ! Initialize radiation and flux values to 0.0
+ !---------------------------------------------------------------------------
+ do lchnk = begchunk,endchunk
+ Fsolar(:,lchnk) = 0._r8
+ Fup (:,lchnk) = 0._r8
+ Fdown (:,lchnk) = 0._r8
+ Fup_toa (:,lchnk) = 0._r8
+ Fdown_toa (:,lchnk) = 0._r8
+ SHflux(:,lchnk) = 0._r8
+ LHflux(:,lchnk) = 0._r8
+ TUflux(:,lchnk) = 0._r8
+ TVflux(:,lchnk) = 0._r8
+ Cd (:,lchnk) = 0._r8
+ Fnet (:,lchnk) = 0._r8
+ end do
+
+ ! Informational Output
+ !----------------------
+ if(masterproc) then
+ write(iulog,*) ' '
+ write(iulog,*) '-----------------------------------------------------------'
+ write(iulog,*) ' FRIERSON MODULE INITIALIZED WITH THE FOLLOWING SETTINGS: '
+ write(iulog,*) '-----------------------------------------------------------'
+ write(iulog,*) 'FRIERSON: gravit=' , gravit
+ write(iulog,*) 'FRIERSON: cappa=' , cappa
+ write(iulog,*) 'FRIERSON: rair =' , rair
+ write(iulog,*) 'FRIERSON: cpair=' , cpair
+ write(iulog,*) 'FRIERSON: latvap=' , latvap
+ write(iulog,*) 'FRIERSON: rh2o=' , rh2o
+ write(iulog,*) 'FRIERSON: epsilo=' , epsilo
+ write(iulog,*) 'FRIERSON: rhoh2o=' , rhoh2o
+ write(iulog,*) 'FRIERSON: zvir=' , zvir
+ write(iulog,*) 'FRIERSON: ps0=' , ps0
+ write(iulog,*) 'FRIERSON: etamid=' , etamid
+ write(iulog,*) 'FRIERSON: T0=' , frierson_T0
+ write(iulog,*) 'FRIERSON: E0=' , frierson_E0
+ write(iulog,*) 'FRIERSON: Erad=' , frierson_Erad
+ write(iulog,*) 'FRIERSON: Wind_min=' , frierson_Wind_min
+ write(iulog,*) 'FRIERSON: Z0=' , frierson_Z0
+ write(iulog,*) 'FRIERSON: Ri_c=' , frierson_Ri_c
+ write(iulog,*) 'FRIERSON: Karman=' , frierson_Karman
+ write(iulog,*) 'FRIERSON: Fb=' , frierson_Fb
+ write(iulog,*) 'FRIERSON: Rs0=' , frierson_Rs0
+ write(iulog,*) 'FRIERSON: Albedo=' , frierson_Albedo
+ write(iulog,*) 'FRIERSON: Rs=' , frierson_Rs
+ write(iulog,*) 'FRIERSON: DeltaS=' , frierson_DeltaS
+ write(iulog,*) 'FRIERSON: Tau_eqtr=' , frierson_Tau_eqtr
+ write(iulog,*) 'FRIERSON: Tau_pole=' , frierson_Tau_pole
+ write(iulog,*) 'FRIERSON: LinFrac=' , frierson_LinFrac
+ write(iulog,*) 'FRIERSON: Boltz=' , frierson_Boltz
+ write(iulog,*) 'FRIERSON: C0=' , frierson_C0
+ write(iulog,*) 'FRIERSON: Tmin=' , frierson_Tmin
+ write(iulog,*) 'FRIERSON: Tdlt=' , frierson_Tdlt
+ write(iulog,*) 'FRIERSON: Twidth=' , frierson_Twidth
+ write(iulog,*) 'FRIERSON: WetDryCoef=', frierson_WetDryCoef
+ write(iulog,*) ' '
+ endif
+
+ end subroutine frierson_init
+ !==============================================================================
+
+
+ !==============================================================================
+
+
+ !==============================================================================
+ subroutine frierson_condensate_tend(state, ptend, ztodt, pbuf)
+ !
+ ! frierson_condensate_tend: Run the selected process to compute precipitation
+ ! due to large scale condensation.
+ !=====================================================================
+ use physics_types,only: physics_state, physics_ptend
+ use physics_types,only: physics_ptend_init
+ use frierson, only: frierson_condensate_NONE,frierson_condensate
+ use frierson, only: frierson_condensate_USER,frierson_condensate_TJ16
+ !
+ ! Passed Variables
+ !------------------
+ type(physics_state) ,intent(inout):: state
+ real(r8) ,intent(in) :: ztodt
+ type(physics_ptend) ,intent(out) :: ptend
+ type(physics_buffer_desc),pointer :: pbuf(:)
+ !
+ ! Local Values
+ !-----------------
+ real(r8),pointer:: relhum (:,:)
+ real(r8),pointer:: prec_pcw(:) ! large scale precip
+ real(r8) :: prec_cnv(state%ncol) ! Convective Precip
+ real(r8) :: evapdt(state%ncol, pver) ! T tendency due to re-evaporation of condensation
+ real(r8) :: evapdq(state%ncol, pver) ! Q tendency due to re-evaporation of condensation
+ real(r8) :: dtcond(state%ncol, pver) ! Temperature tendency due to condensation
+ real(r8) :: dqcond(state%ncol, pver) ! Q tendency due to condensation
+ real(r8) :: T (state%ncol, pver) ! T temporary
+ real(r8) :: qv (state%ncol, pver) ! Q temporary
+ logical :: lq(pcnst) ! Calc tendencies?
+ integer :: lchnk ! chunk identifier
+ integer :: ncol ! number of atmospheric columns
+ integer :: k
+
+ ! Set local copies of values
+ !---------------------------------
+ lchnk = state%lchnk
+ ncol = state%ncol
+ T (:ncol,:) = state%T(:ncol,:)
+ qv(:ncol,:) = state%Q(:ncol,:,1)
+
+ ! initialize individual parameterization tendencies
+ !---------------------------------------------------
+ lq = .false.
+ lq(1) = .true.
+ call physics_ptend_init(ptend, state%psetcols, 'Frierson condensate', &
+ ls=.true., lu=.true., lv=.true., lq=lq)
+
+ ! Get values from the physics buffer
+ !------------------------------------
+ call pbuf_get_field(pbuf,prec_pcw_idx,prec_pcw)
+ call pbuf_get_field(pbuf, relhum_idx,relhum )
+
+ ! Initialize values for condensate tendencies
+ !---------------------------------------------
+ do k = 1, pver
+ dtcond(:ncol,k) = state%T(:ncol,k)
+ dqcond(:ncol,k) = state%q(:ncol,k,1)
+ end do
+
+ ! Call the Selected condensation routine ~~DEVO style~~
+ !--------------------------------------------------------
+ if(CONDENSATE_OPT == CONDENSATE_NONE) then
+ prec_cnv(:ncol) = 0._r8
+ evapdt (:ncol,:) = 0._r8
+ evapdq (:ncol,:) = 0._r8
+ call frierson_condensate_NONE(ncol,pver,state%pmid(:ncol,:), &
+ T(:ncol,:), &
+ qv(:ncol,:), &
+ relhum(:ncol,:), &
+ prec_pcw(:ncol) )
+ elseif(CONDENSATE_OPT == CONDENSATE_FRIERSON) then
+ prec_cnv(:ncol) = 0._r8
+ call frierson_condensate(ncol,pver,ztodt,state%pmid(:ncol,:), &
+ state%pdel(:ncol,:), &
+ T(:ncol,:), &
+ qv(:ncol,:), &
+ relhum(:ncol,:), &
+ prec_pcw(:ncol) , &
+ evapdt(:ncol,:), &
+ evapdq(:ncol,:) )
+ elseif(CONDENSATE_OPT == CONDENSATE_TJ16) then
+ prec_cnv(:ncol) = 0._r8
+ evapdt (:ncol,:) = 0._r8
+ evapdq (:ncol,:) = 0._r8
+ call frierson_condensate_TJ16(ncol,pver,ztodt,state%pmid(:ncol,:), &
+ state%pdel(:ncol,:), &
+ T(:ncol,:), &
+ qv(:ncol,:), &
+ relhum(:ncol,:), &
+ prec_pcw(:ncol) )
+ elseif(CONDENSATE_OPT == CONDENSATE_USER) then
+ prec_cnv(:ncol) = 0._r8
+ evapdt (:ncol,:) = 0._r8
+ evapdq (:ncol,:) = 0._r8
+ call frierson_condensate_USER(ncol,pver,ztodt,state%pmid(:ncol,:), &
+ state%pdel(:ncol,:), &
+ T(:ncol,:), &
+ qv(:ncol,:), &
+ relhum(:ncol,:), &
+ prec_pcw(:ncol) )
+ else
+ ! ERROR: Unknown CONDENSATE_OPT value
+ !-------------------------------------
+ write(iulog,*) 'ERROR: unknown CONDENSATE_OPT=',CONDENSATE_OPT
+ call endrun('frierson_condensate_tend() CONDENSATE_OPT ERROR')
+ endif
+
+ ! Back out temperature and specific humidity
+ ! tendencies from updated fields
+ !--------------------------------------------
+ do k = 1, pver
+ ptend%s(:ncol,k) = (T (:,k)-state%T(:ncol,k) )/ztodt*cpair
+ ptend%q(:ncol,k,1) = (qv(:,k)-state%q(:ncol,k,1))/ztodt
+ end do
+
+ ! Output condensate tendencies
+ !------------------------------
+ do k = 1, pver
+ dtcond(:ncol,k) = (T (:ncol,k) - dtcond(:ncol,k))/ztodt
+ dqcond(:ncol,k) = (qv(:ncol,k) - dqcond(:ncol,k))/ztodt
+ end do
+ call outfld('gray_EVAPDT',evapdt ,ncol,lchnk)
+ call outfld('gray_EVAPDQ',evapdq ,ncol,lchnk)
+ call outfld('gray_DTCOND',dtcond ,ncol,lchnk)
+ call outfld('gray_DQCOND',dqcond ,ncol,lchnk)
+ call outfld('gray_PRECL' ,prec_pcw,ncol,lchnk)
+ call outfld('gray_PRECC' ,prec_cnv,ncol,lchnk)
+
+ end subroutine frierson_condensate_tend
+ !==============================================================================
+
+
+ !============================================================================
+ subroutine frierson_pbl_tend(state, ptend, ztodt, cam_in)
+ !
+ ! frierson_pbl_tend: Run the selected PBL process.
+ !=========================================================================
+ use physics_types,only: physics_state, physics_ptend
+ use physics_types,only: physics_ptend_init
+ use phys_grid, only: get_rlat_all_p
+ use frierson, only: frierson_pbl,frierson_pbl_USER
+ !
+ ! Passed Variables
+ !-------------------
+ type(physics_state),intent(in) :: state
+ real(r8), intent(in) :: ztodt
+ type(physics_ptend),intent(out) :: ptend
+ type(cam_in_t), intent(inout):: cam_in
+ !
+ ! Local Values
+ !----------------
+ real(r8) :: T (state%ncol,pver) ! T temporary
+ real(r8) :: qv (state%ncol,pver) ! Q temporary (specific humidity)
+ real(r8) :: U (state%ncol,pver) ! U temporary
+ real(r8) :: V (state%ncol,pver) ! V temporary
+ real(r8) :: dqdt_vdiff(state%ncol,pver) ! PBL Q vertical diffusion tend kg/kg/s
+ real(r8) :: dtdt_vdiff(state%ncol,pver) ! PBL T vertical diffusion tend K/s
+ real(r8) :: dudt_vdiff(state%ncol,pver) ! PBL U vertical diffusion tend m/s/s
+ real(r8) :: dvdt_vdiff(state%ncol,pver) ! PBL V vertical diffusion tend m/s/s
+ real(r8) :: Km (state%ncol,pverp) ! Eddy diffusivity at layer interfaces (m2/s)
+ real(r8) :: Ke (state%ncol,pverp) ! Eddy diffusivity at layer interfaces (m2/s)
+ real(r8) :: VSE (state%ncol,pver) ! Dry Static Energy divided by Cp (K)
+ real(r8) :: Zm (state%ncol,pver) !
+ real(r8) :: Zi (state%ncol,pver) !
+ real(r8) :: Z_pbl (state%ncol) !
+ real(r8) :: Rf (state%ncol,pver) !
+ real(r8) :: Tsfc (state%ncol) ! Surface T
+ real(r8) :: Qsfc (state%ncol) ! Surface Q (saturated)
+ real(r8) :: Cdrag (state%ncol) ! Cdrag coef from surface calculation
+
+ logical :: lq (pcnst) ! Calc tendencies?
+ real(r8) :: dTs (state%ncol)
+ real(r8) :: dUa (state%ncol,pver)
+ real(r8) :: dVa (state%ncol,pver)
+ real(r8) :: dTa (state%ncol,pver)
+ real(r8) :: dQa (state%ncol,pver)
+ integer :: lchnk ! chunk identifier
+ integer :: ncol ! number of atmospheric columns
+ integer :: kk ! loop index
+
+ ! Set local copies of values
+ !---------------------------------
+ lchnk = state%lchnk
+ ncol = state%ncol
+ Zm (:ncol,:) = state%zm (:ncol,:)
+ Zi (:ncol,1:pver) = state%zi (:ncol,1:pver)
+ T (:ncol,:) = state%T (:ncol,:)
+ U (:ncol,:) = state%U (:ncol,:)
+ V (:ncol,:) = state%V (:ncol,:)
+ qv (:ncol,:) = state%Q (:ncol,:,1)
+
+ ! Initialize individual parameterization tendencies
+ !-----------------------------------------------------
+ lq = .false.
+ lq(1) = .true.
+ call physics_ptend_init(ptend,state%psetcols,'Frierson pbl_tend', &
+ ls=.true., lu=.true., lv=.true., lq=lq)
+
+ ! Call the Selected PBL routine
+ !--------------------------------------------------------
+ Tsfc(:ncol) = Tsurf(:ncol,lchnk)
+ Qsfc(:ncol) = Qsurf(:ncol,lchnk)
+ if(PBL_OPT == PBL_FRIERSON) then
+ ! Call Frierson PBL scheme
+ !--------------------------------------------------
+ call frierson_pbl(ncol, pver, ztodt,state%pmid (:ncol,:), &
+ state%pint (:ncol,:), &
+ Zm(:ncol,:), &
+ Zi(:ncol,:), &
+ state%ps(:ncol) , &
+ Tsfc(:ncol) , &
+ Qsfc(:ncol) , &
+ T(:ncol,:), &
+ U(:ncol,:), &
+ V(:ncol,:), &
+ qv(:ncol,:), &
+ Fsolar(:ncol,lchnk), &
+ Fdown(:ncol,lchnk), &
+ Cdrag(:ncol) , &
+ Km(:ncol,:), &
+ Ke(:ncol,:), &
+ VSE(:ncol,:), &
+ Z_pbl(:ncol) , &
+ Rf(:ncol,:), &
+ dqdt_vdiff(:ncol,:), &
+ dtdt_vdiff(:ncol,:), &
+ dudt_vdiff(:ncol,:), &
+ dvdt_vdiff(:ncol,:), &
+ LHflux(:ncol,lchnk), &
+ SHflux(:ncol,lchnk), &
+ TUflux(:ncol,lchnk), &
+ TVflux(:ncol,lchnk) )
+ elseif(PBL_OPT == PBL_USER) then
+ ! Call USER implemented routine in frierson module
+ !--------------------------------------------------
+ call frierson_pbl_USER(ncol, pver, ztodt,state%pmid (:ncol,:), &
+ state%pint (:ncol,:), &
+ Zm(:ncol,:), &
+ Zi(:ncol,:), &
+ state%ps(:ncol) , &
+ Tsfc(:ncol) , &
+ Qsfc(:ncol) , &
+ T(:ncol,:), &
+ U(:ncol,:), &
+ V(:ncol,:), &
+ qv(:ncol,:), &
+ Fsolar(:ncol,lchnk), &
+ Fdown(:ncol,lchnk), &
+ Cdrag(:ncol) , &
+ Km(:ncol,:), &
+ Ke(:ncol,:), &
+ VSE(:ncol,:), &
+ Z_pbl(:ncol) , &
+ Rf(:ncol,:), &
+ dqdt_vdiff(:ncol,:), &
+ dtdt_vdiff(:ncol,:), &
+ dudt_vdiff(:ncol,:), &
+ dvdt_vdiff(:ncol,:), &
+ LHflux(:ncol,lchnk), &
+ SHflux(:ncol,lchnk), &
+ TUflux(:ncol,lchnk), &
+ TVflux(:ncol,lchnk) )
+ else
+ ! ERROR: Unknown PBL_OPT value
+ !-------------------------------------
+ write(iulog,*) 'ERROR: unknown PBL_OPT=',PBL_OPT
+ call endrun('frierson_pbl_tend() PBL_OPT ERROR')
+ endif
+ Tsurf(:ncol,lchnk) = Tsfc (:ncol)
+ Qsurf(:ncol,lchnk) = Qsfc (:ncol)
+ Cd (:ncol,lchnk) = Cdrag(:ncol)
+
+ ! Back out tendencies from updated fields
+ !-----------------------------------------
+ do kk = 1, pver
+ ptend%s(:ncol,kk ) = (T (:,kk)-state%T(:ncol,kk ))/ztodt*cpair
+ ptend%u(:ncol,kk ) = (U (:,kk)-state%U(:ncol,kk ))/ztodt
+ ptend%v(:ncol,kk ) = (V (:,kk)-state%V(:ncol,kk ))/ztodt
+ ptend%q(:ncol,kk,1) = (qv(:,kk)-state%q(:ncol,kk,1))/ztodt
+ end do
+
+ ! Archive diagnostic fields
+ !----------------------------
+ call outfld('gray_Tsurf' ,Tsurf(:ncol,lchnk) ,ncol,lchnk)
+ call outfld('gray_Qsurf' ,Qsurf(:ncol,lchnk) ,ncol,lchnk)
+ call outfld('gray_Cdrag' ,Cd (:ncol,lchnk) ,ncol,lchnk)
+ call outfld('gray_Zpbl' ,Z_pbl ,ncol,lchnk) !
+ call outfld('gray_KVH' ,Ke ,ncol,lchnk) ! Eddy diffusivity (heat and moisture,m2/s)
+ call outfld('gray_KVM' ,Km ,ncol,lchnk) ! Eddy diffusivity (momentum, m2/s)
+ call outfld('gray_VSE' ,VSE ,ncol,lchnk) ! Virtual Dry Static Energy divided by Cp (K)
+ call outfld('gray_Zm' ,Zm ,ncol,lchnk) !
+ call outfld('gray_Rf' ,Rf ,ncol,lchnk) !
+ call outfld('gray_DTV' ,dtdt_vdiff ,ncol,lchnk) ! PBL + surface flux T tendency (K/s)
+ call outfld('gray_DUV' ,dudt_vdiff ,ncol,lchnk) ! PBL u tendency (m/s2)
+ call outfld('gray_DVV' ,dvdt_vdiff ,ncol,lchnk) ! PBL v tendency (m/s2)
+ call outfld('gray_VD01' ,dqdt_vdiff ,ncol,lchnk) ! PBL + surface flux Q tendency (kg/kg/s)
+ call outfld('gray_SHflux',SHflux(:ncol,lchnk),ncol,lchnk) ! Sensible Heat Flux
+ call outfld('gray_LHflux',LHflux(:ncol,lchnk),ncol,lchnk) ! Latent Heat Flux
+ call outfld('gray_TauU' ,TUflux(:ncol,lchnk),ncol,lchnk) ! U Surface Stress
+ call outfld('gray_TauV' ,TVflux(:ncol,lchnk),ncol,lchnk) ! V Surface Stress
+
+ end subroutine frierson_pbl_tend
+ !============================================================================
+
+
+ !============================================================================
+ subroutine frierson_radiative_tend(state, ptend, ztodt,cam_in,cam_out)
+ !
+ ! frierson_radiative_tend: Run the radiative process
+ !=========================================================================
+ use physics_types,only: physics_state, physics_ptend
+ use physics_types,only: physics_ptend_init
+ use phys_grid, only: get_rlat_all_p
+ use frierson, only: frierson_radiation,frierson_radiation_USER
+ !
+ ! Passed Variables
+ !------------------
+ type(physics_state),intent(in) :: state
+ real(r8) ,intent(in) :: ztodt
+ type(physics_ptend),intent(out) :: ptend
+ type(cam_in_t), intent(inout):: cam_in
+ type(cam_out_t), intent(inout):: cam_out
+ !
+ ! Local Values
+ !---------------
+ real(r8):: T (state%ncol,pver) ! T temporary
+ real(r8):: qv (state%ncol,pver) ! Q temporary
+ real(r8):: dtdt_heating(state%ncol,pver) ! Longwave heating tendency K/s
+ real(r8):: dtdt_solar (state%ncol,pver) ! Shortwave heating tendency K/s
+ real(r8):: Tsfc (state%ncol) ! Surface T
+ real(r8):: Qsfc (state%ncol) ! Surface Q (saturated)
+ logical :: lq(pcnst) ! Calc tendencies?
+ integer :: lchnk ! chunk identifier
+ integer :: ncol ! number of atmospheric columns
+ integer :: k ! loop index
+
+ ! Copy to local values
+ !-------------------------------------------------
+ lchnk = state%lchnk
+ ncol = state%ncol
+ T (:ncol,:) = state%T(:ncol,:)
+ qv (:ncol,:) = state%Q(:ncol,:,1)
+
+ !--------------------------------------
+ Tsfc(:ncol) = Tsurf(:ncol,lchnk)
+ Qsfc(:ncol) = Qsurf(:ncol,lchnk)
+
+ ! initialize individual parameterization tendencies
+ !---------------------------------------------------
+ lq(:) = .false.
+ call physics_ptend_init(ptend, state%psetcols, 'Frierson radiative_tend', &
+ ls=.true., lu=.false., lv=.false., lq=lq)
+
+ ! Call the Selected radiative routine
+ !--------------------------------------------------------
+ if(RADIATION_OPT == RADIATION_FRIERSON) then
+ call frierson_radiation(ncol,pver,ztodt,clat(:ncol,lchnk), &
+ state%pint(:ncol,:), &
+ state%pmid(:ncol,:), &
+ state%ps(:ncol), &
+ Tsfc(:ncol), &
+ Qsfc(:ncol), &
+ T(:ncol,:), &
+ qv(:ncol,:), &
+ dtdt_heating(:ncol,:), &
+ Fsolar(:ncol,lchnk), &
+ Fup(:ncol,lchnk), &
+ Fdown(:ncol,lchnk), &
+ Fup_toa(:ncol,lchnk), &
+ Fdown_toa(:ncol,lchnk) )
+ dtdt_solar(:ncol,:) = 0._r8
+ elseif(RADIATION_OPT == RADIATION_USER) then
+ call frierson_radiation_USER(ncol,pver,ztodt,clat(:ncol,lchnk), &
+ state%pint(:ncol,:), &
+ state%pmid(:ncol,:), &
+ state%ps(:ncol), &
+ Tsfc(:ncol), &
+ Qsfc(:ncol), &
+ T(:ncol,:), &
+ qv(:ncol,:), &
+ dtdt_heating(:ncol,:), &
+ Fsolar(:ncol,lchnk), &
+ Fup(:ncol,lchnk), &
+ Fdown(:ncol,lchnk), &
+ Fup_toa(:ncol,lchnk), &
+ Fdown_toa(:ncol,lchnk) )
+ dtdt_solar(:ncol,:) = 0._r8
+ else
+ ! ERROR: Unknown RADIATION_OPT value
+ !-------------------------------------
+ write(iulog,*) 'ERROR: unknown RADIATION_OPT=',RADIATION_OPT
+ call endrun('frierson_pbl_tend() RADIATION_OPT ERROR')
+ endif
+
+ Fnet (:ncol,lchnk) = Fup(:ncol,lchnk) - Fdown (:ncol,lchnk)
+ Fnet_toa (:ncol,lchnk) = Fup_toa(:ncol,lchnk) - Fdown_toa (:ncol,lchnk)
+
+ ! Copy downward LW radiative heating values to cam_out%
+ !---------------------------------------------------------
+ cam_out%flwds(:ncol) = Fdown (:ncol,lchnk)
+ cam_out%netsw(:ncol) = Fsolar(:ncol,lchnk)
+ cam_out%sols (:ncol) = Fsolar(:ncol,lchnk)
+ cam_out%solsd(:ncol) = Fsolar(:ncol,lchnk)
+ cam_out%soll (:ncol) = Fsolar(:ncol,lchnk)
+ cam_out%solld(:ncol) = Fsolar(:ncol,lchnk)
+
+ ! Back out tendencies from updated T field
+ !--------------------------------------------
+ do k = 1, pver
+ ptend%s(:ncol,k) = (T(:,k)-state%T(:ncol,k))/ztodt*cpair
+ end do
+
+ ! Archive T tendency from temperature relaxation (mimics radiation, K/s)
+ !-----------------------------------------------------------------------
+ call outfld('gray_QRL' ,dtdt_heating, ncol,lchnk)
+ call outfld('gray_QRS' ,dtdt_solar , ncol,lchnk)
+ call outfld('gray_SWflux',Fsolar(:ncol,lchnk) , ncol,lchnk)
+ call outfld('gray_LUflux',Fup(:ncol,lchnk) , ncol,lchnk)
+ call outfld('gray_LDflux',Fdown(:ncol,lchnk) , ncol,lchnk)
+ call outfld('gray_LWflux',Fnet(:ncol,lchnk) , ncol,lchnk)
+ call outfld('gray_LUflux_TOA',Fup_toa(:ncol,lchnk) , ncol,lchnk)
+ call outfld('gray_LDflux_TOA',Fdown_toa(:ncol,lchnk) , ncol,lchnk)
+ call outfld('gray_LWflux_TOA',Fnet_toa(:ncol,lchnk) , ncol,lchnk)
+
+ end subroutine frierson_radiative_tend
+ !============================================================================
+
+
+ !=======================================================================
+ subroutine frierson_surface_init(ncol, clat, PS, Tsfc, Qsfc)
+ !
+ !
+ !==========================================================================
+ !
+ ! Passed variables
+ !--------------------
+ integer ,intent(in) :: ncol
+ real(r8),intent(in) :: clat (ncol)
+ real(r8),intent(in) :: PS (ncol)
+ real(r8),intent(out):: Tsfc(ncol)
+ real(r8),intent(out):: Qsfc(ncol)
+ !
+ ! Local values
+ !--------------
+ integer :: ii
+ real(r8):: T_width
+
+ ! set SST profile
+ !------------------
+ T_width = frierson_Twidth*pi/180.0_r8
+ do ii = 1, ncol
+ Tsfc(ii) = frierson_Tmin + frierson_Tdlt*exp(-((clat(ii)/T_width)**2)/2.0_r8)
+ Qsfc(ii) = epsilo*frierson_E0/PS(ii) &
+ *exp(-latvap/rh2o*((1._r8/Tsfc(ii))-1._r8/frierson_T0))
+ end do
+
+ end subroutine frierson_surface_init
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_restart_init(File,hdimids,hdimcnt)
+ !
+ ! frierson_restart_init:
+ !==========================================================================
+ !
+ ! Passed variables
+ !--------------------
+ type(file_desc_t),intent(inout):: File
+ integer ,intent(in) :: hdimcnt
+ integer ,intent(in) :: hdimids(1:hdimcnt)
+ !
+ ! Local values
+ !--------------
+ integer:: ierr
+
+ ierr = pio_def_var(File,'Frierson_Tsfc',pio_double, hdimids, Tsurf_desc)
+ if (ierr /= 0) then
+ call endrun('frierson_restart_init: ERROR defining Frierson_Tsfc')
+ end if
+
+ ierr = pio_def_var(File,'Frierson_Qsfc',pio_double, hdimids, Qsurf_desc)
+ if (ierr /= 0) then
+ call endrun('frierson_restart_init: ERROR defining Frierson_Qsfc')
+ end if
+
+ end subroutine frierson_restart_init
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_restart_write(File)
+ !
+ ! frierson_restart_write:
+ !==========================================================================
+ !
+ ! Passed variables
+ !--------------------
+ type(file_desc_t),intent(inout):: File
+ !
+ ! Local values
+ !--------------
+ type(io_desc_t),pointer:: iodesc
+ integer:: dims(3),gdims(3),nhdims
+ integer:: physgrid
+ integer:: ierr
+
+ ! Get the iodesc for write calls
+ !---------------------------------
+ dims(1) = pcols
+ dims(2) = endchunk - begchunk + 1
+ physgrid = cam_grid_id('physgrid')
+ call cam_grid_dimensions(physgrid, gdims(1:2), nhdims)
+ call cam_grid_get_decomp(physgrid, dims(1:2), gdims(1:nhdims), pio_double, iodesc)
+
+ ! Write Surface values
+ !---------------------
+ call pio_write_darray(File, Tsurf_desc, iodesc, Tsurf, ierr)
+ if (ierr /= 0) then
+ call endrun('frierson_restart_write: ERROR writing Tsurf')
+ end if
+
+ call pio_write_darray(File, Qsurf_desc, iodesc, Qsurf, ierr)
+ if (ierr /= 0) then
+ call endrun('frierson_restart_write: ERROR writing Qsurf')
+ end if
+
+ end subroutine frierson_restart_write
+ !=======================================================================
+
+
+ !=======================================================================
+ subroutine frierson_restart_read(File)
+ !
+ ! frierson_restart_read:
+ !==========================================================================
+ use error_messages,only: alloc_err
+ !
+ ! Passed variables
+ !--------------------
+ type(file_desc_t),intent(inout):: File
+ !
+ ! Local values
+ !--------------
+ type( io_desc_t),pointer:: iodesc
+ type(var_desc_t) :: vardesc
+ integer:: dims(3),gdims(3),nhdims
+ integer:: physgrid
+ integer:: ierr
+
+ ! Allocate space for the restart fields
+ !-----------------------------------------
+ allocate(Tsurf (pcols,begchunk:endchunk),stat=ierr)
+ call alloc_err(ierr,'Frierson RESTART','Tsurf' ,pcols*(endchunk-begchunk+1))
+ allocate(Qsurf (pcols,begchunk:endchunk) ,stat=ierr)
+ call alloc_err(ierr,'Frierson RESTART','Qsurf' ,pcols*(endchunk-begchunk+1))
+
+ ! Get the iodesc for read calls
+ !---------------------------------
+ dims(1) = pcols
+ dims(2) = endchunk - begchunk + 1
+ physgrid = cam_grid_id('physgrid')
+ call cam_grid_dimensions(physgrid, gdims(1:2), nhdims)
+ call cam_grid_get_decomp(physgrid, dims(1:2), gdims(1:nhdims), pio_double, iodesc)
+
+ ! Read Surface values
+ !---------------------
+ ierr = pio_inq_varid(File,'Frierson_Tsfc',vardesc)
+ if (ierr /= 0) then
+ call endrun('frierson_restart_read: ERROR PIO unable to find variable Frierson_Tsfc')
+ end if
+
+ call pio_read_darray(File, vardesc, iodesc, Tsurf, ierr)
+ if (ierr /= 0) then
+ call endrun('frierson_restart_read: ERROR PIO unable to read variable Tsurf')
+ end if
+
+ ierr = pio_inq_varid(File,'Frierson_Qsfc',vardesc)
+ if (ierr /= 0) then
+ call endrun('frierson_restart_read: ERROR PIO unable to find variable Frierson_Qsfc')
+ end if
+
+ call pio_read_darray(File, vardesc, iodesc, Qsurf, ierr)
+ if (ierr /= 0) then
+ call endrun('frierson_restart_read: ERROR PIO unable to read variable Qsurf')
+ end if
+
+ end subroutine frierson_restart_read
+ !=======================================================================
+
+end module frierson_cam
+
diff --git a/src/physics/simple/physpkg.F90 b/src/physics/simple/physpkg.F90
index 9c1e4c61bf..31c41def58 100644
--- a/src/physics/simple/physpkg.F90
+++ b/src/physics/simple/physpkg.F90
@@ -19,7 +19,7 @@ module physpkg
use camsrfexch, only: cam_out_t, cam_in_t, cam_export
! Note: ideal_phys is true for Held-Suarez (1994) physics
- use cam_control_mod, only: moist_physics, adiabatic, ideal_phys, kessler_phys, tj2016_phys
+ use cam_control_mod, only: moist_physics, adiabatic, ideal_phys, kessler_phys, tj2016_phys, frierson_phys
use phys_control, only: phys_getopts
use perf_mod, only: t_barrierf, t_startf, t_stopf, t_adj_detailf
use cam_logfile, only: iulog
@@ -80,6 +80,7 @@ subroutine phys_register
use check_energy, only: check_energy_register
use kessler_cam, only: kessler_register
use tj2016_cam, only: thatcher_jablonowski_register
+ use frierson_cam, only: frierson_register
!---------------------------Local variables-----------------------------
!
@@ -111,6 +112,8 @@ subroutine phys_register
call kessler_register()
else if (tj2016_phys) then
call thatcher_jablonowski_register()
+ else if (frierson_phys) then
+ call frierson_register()
end if
! Fields for physics package diagnostics
@@ -197,10 +200,12 @@ subroutine phys_init( phys_state, phys_tend, pbuf2d, cam_in, cam_out )
use held_suarez_cam, only: held_suarez_init
use kessler_cam, only: kessler_cam_init
use tj2016_cam, only: thatcher_jablonowski_init
+ use frierson_cam, only: frierson_init
use tracers, only: tracers_init
use wv_saturation, only: wv_sat_init
use phys_debug_util, only: phys_debug_init
use qneg_module, only: qneg_init
+ use nudging, only: Nudge_Model, nudging_init
use cam_snapshot, only: cam_snapshot_init
use cam_budget, only: cam_budget_init
@@ -243,7 +248,7 @@ subroutine phys_init( phys_state, phys_tend, pbuf2d, cam_in, cam_out )
! wv_saturation is relatively independent of everything else and
! low level, so init it early. Must at least do this before radiation.
- if (kessler_phys .or. tj2016_phys) then
+ if (kessler_phys .or. tj2016_phys .or. frierson_phys) then
call wv_sat_init()
end if
@@ -259,8 +264,14 @@ subroutine phys_init( phys_state, phys_tend, pbuf2d, cam_in, cam_out )
call kessler_cam_init(pbuf2d)
else if (tj2016_phys) then
call thatcher_jablonowski_init(pbuf2d)
+ else if (frierson_phys) then
+ call frierson_init(phys_state,pbuf2d)
end if
+ ! Initialize Nudging Parameters
+ !--------------------------------
+ if(Nudge_Model) call nudging_init
+
if (chem_is_active()) then
! Prognostic chemistry.
call chem_init(phys_state,pbuf2d)
@@ -476,6 +487,7 @@ subroutine tphysac (ztodt, cam_in, cam_out, state, tend, pbuf)
use constituents, only: cnst_get_ind, pcnst
use cam_diagnostics, only: diag_phys_tend_writeout, diag_surf
use tj2016_cam, only: thatcher_jablonowski_sfc_pbl_hs_tend
+ use frierson_cam, only: frierson_pbl_tend
use dycore, only: dycore_is
use check_energy, only: tot_energy_phys
use cam_history, only: hist_fld_active
@@ -483,6 +495,10 @@ subroutine tphysac (ztodt, cam_in, cam_out, state, tend, pbuf)
use cam_budget, only: thermo_budget_history
use dyn_tests_utils, only: vc_dycore, vc_height, vc_dry_pressure
use air_composition, only: cpairv, cp_or_cv_dycore
+ use time_manager, only: get_nstep
+ use nudging, only: Nudge_Model, Nudge_ON, nudging_timestep_tend
+ use check_energy, only: check_energy_chng
+
! Arguments
!
real(r8), intent(in) :: ztodt ! Two times model timestep (2 delta-t)
@@ -495,6 +511,9 @@ subroutine tphysac (ztodt, cam_in, cam_out, state, tend, pbuf)
!---------------------------Local workspace-----------------------------
+ integer :: nstep ! current timestep number
+ real(r8):: zero(pcols) ! array of zeros
+
type(physics_ptend) :: ptend ! indivdual parameterization tendencies
real(r8) :: tmp_q(pcols, pver)
real(r8) :: tmp_cldliq(pcols, pver)
@@ -518,6 +537,10 @@ subroutine tphysac (ztodt, cam_in, cam_out, state, tend, pbuf)
real(r8) :: scaling(pcols,pver)
!--------------------------------------------------------------------------
+ ! get nstep and zero array for energy checker
+ zero = 0._r8
+ nstep = get_nstep()
+
! number of active atmospheric columns
ncol = state%ncol
lchnk = state%lchnk
@@ -555,14 +578,28 @@ subroutine tphysac (ztodt, cam_in, cam_out, state, tend, pbuf)
call physics_update(state, ptend, ztodt, tend)
end if
+ if (frierson_phys) then
+ ! Update surface, PBL
+ call frierson_pbl_tend(state, ptend, ztodt, cam_in)
+ call physics_update(state, ptend, ztodt, tend)
+ end if
+
+ ! Update Nudging values, if needed
+ !----------------------------------
+ if (Nudge_Model .and. Nudge_ON) then
+ call nudging_timestep_tend(state,ptend)
+ call physics_update(state, ptend, ztodt, tend)
+ call check_energy_chng(state, tend, "nudging", nstep, ztodt, zero, zero, zero, zero)
+ endif
+
call tot_energy_phys(state, 'phAP')
call tot_energy_phys(state, 'dyAP',vc=vc_dycore)
-
+
! FV: convert dry-type mixing ratios to moist here because
! physics_dme_adjust assumes moist. This is done in p_d_coupling for
! other dynamics. Bundy, Feb 2004.
!
- moist_mixing_ratio_dycore = dycore_is('LR').or. dycore_is('FV3')
+ moist_mixing_ratio_dycore = dycore_is('LR').or. dycore_is('FV3')
!
! update cp/cv for energy computation based in updated water variables
!
@@ -608,7 +645,7 @@ subroutine tphysac (ztodt, cam_in, cam_out, state, tend, pbuf)
else
!
! for moist-mixing ratio based dycores
- !
+ !
! Note: this operation will NOT be reverted with set_wet_to_dry after set_dry_to_wet call
!
call set_dry_to_wet(state)
@@ -619,7 +656,7 @@ subroutine tphysac (ztodt, cam_in, cam_out, state, tend, pbuf)
if (vc_dycore == vc_height.or.vc_dycore == vc_dry_pressure) then
!
! MPAS and SE specific scaling of temperature for enforcing energy consistency
- ! (and to make sure that temperature dependent diagnostic tendencies
+ ! (and to make sure that temperature dependent diagnostic tendencies
! are computed correctly; e.g. dtcore)
!
scaling(1:ncol,:) = cpairv(:ncol,:,lchnk)/cp_or_cv_dycore(:ncol,:,lchnk)
@@ -630,7 +667,7 @@ subroutine tphysac (ztodt, cam_in, cam_out, state, tend, pbuf)
! else: do nothing for dycores with energy consistent with CAM physics
!
end if
-
+
else
tmp_q (:ncol,:pver) = 0.0_r8
tmp_cldliq(:ncol,:pver) = 0.0_r8
@@ -692,6 +729,8 @@ subroutine tphysbc (ztodt, state, tend, pbuf, cam_out, cam_in )
use held_suarez_cam, only: held_suarez_tend
use kessler_cam, only: kessler_tend
use tj2016_cam, only: thatcher_jablonowski_precip_tend
+ use frierson_cam, only: frierson_condensate_tend
+ use frierson_cam, only: frierson_radiative_tend
use dycore, only: dycore_is
use cam_snapshot_common,only: cam_snapshot_all_outfld
use cam_snapshot_common,only: cam_snapshot_ptend_outfld
@@ -886,6 +925,37 @@ subroutine tphysbc (ztodt, state, tend, pbuf, cam_out, cam_in )
if (trim(cam_take_snapshot_after) == "thatcher_jablonowski_precip_tend") then
call cam_snapshot_all_outfld(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf)
end if
+ else if (frierson_phys) then
+ ! Compute the large-scale precipitation
+ !----------------------------------------
+ if (trim(cam_take_snapshot_before) == "frierson_condensate_tend") then
+ call cam_snapshot_all_outfld(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf)
+ end if
+ call frierson_condensate_tend(state, ptend, ztodt, pbuf)
+ if ( (trim(cam_take_snapshot_after) == "frierson_condensate_tend") .and. &
+ (trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then
+ call cam_snapshot_ptend_outfld(ptend, lchnk)
+ end if
+ call physics_update(state, ptend, ztodt, tend)
+ if (trim(cam_take_snapshot_after) == "frierson_condensate_tend") then
+ call cam_snapshot_all_outfld(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf)
+ end if
+
+ ! Compute the radiative tendencies
+ !-----------------------------------
+ if (trim(cam_take_snapshot_before) == "frierson_radiative_tend") then
+ call cam_snapshot_all_outfld(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf)
+ end if
+ call frierson_radiative_tend(state, ptend, ztodt, cam_in, cam_out)
+ if ( (trim(cam_take_snapshot_after) == "frierson_radiative_tend") .and. &
+ (trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then
+ call cam_snapshot_ptend_outfld(ptend, lchnk)
+ end if
+ call physics_update(state, ptend, ztodt, tend)
+ if (trim(cam_take_snapshot_after) == "frierson_radiative_tend") then
+ call cam_snapshot_all_outfld(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf)
+ end if
+
end if
! Can't turn on conservation error messages unless the appropriate heat
@@ -945,6 +1015,7 @@ subroutine phys_timestep_init(phys_state, cam_in, cam_out, pbuf2d)
!--------------------------------------------------------------------------
use physics_types, only: physics_state
use physics_buffer, only: physics_buffer_desc
+ use nudging, only: Nudge_Model, nudging_timestep_init
implicit none
@@ -956,6 +1027,10 @@ subroutine phys_timestep_init(phys_state, cam_in, cam_out, pbuf2d)
!--------------------------------------------------------------------------
+ ! Update Nudging values, if needed
+ !----------------------------------
+ if(Nudge_Model) call nudging_timestep_init(phys_state)
+
end subroutine phys_timestep_init
!======================================================================================
diff --git a/src/physics/simple/radconstants.F90 b/src/physics/simple/radconstants.F90
index 0649a6f730..b69fac1552 100644
--- a/src/physics/simple/radconstants.F90
+++ b/src/physics/simple/radconstants.F90
@@ -19,6 +19,7 @@ module radconstants
integer, parameter, public :: ot_length = 32
public :: rad_gas_index
+public :: get_lw_spectral_boundaries
integer, public, parameter :: gasnamelength = 1
integer, public, parameter :: nradgas = 1
@@ -37,4 +38,15 @@ integer function rad_gas_index(gasname)
end function rad_gas_index
+!------------------------------------------------------------------------------
+subroutine get_lw_spectral_boundaries(low_boundaries, high_boundaries, units)
+ ! stub should not be called
+
+ real(r8), intent(out) :: low_boundaries(nlwbands), high_boundaries(nlwbands)
+ character(*), intent(in) :: units ! requested units
+
+ call endrun('get_lw_spectral_boundaries: ERROR: this is a stub')
+
+end subroutine get_lw_spectral_boundaries
+
end module radconstants
diff --git a/src/physics/simple/restart_physics.F90 b/src/physics/simple/restart_physics.F90
index ef8f8795ef..fb40c5921b 100644
--- a/src/physics/simple/restart_physics.F90
+++ b/src/physics/simple/restart_physics.F90
@@ -13,6 +13,9 @@ module restart_physics
pio_inq_varid, pio_def_var, pio_def_dim, &
pio_put_var, pio_get_var
+ use cam_control_mod, only: frierson_phys
+ use frierson_cam,only: frierson_restart_init, frierson_restart_write, frierson_restart_read
+
implicit none
private
save
@@ -59,6 +62,10 @@ subroutine init_restart_physics ( File, pbuf2d)
call pbuf_init_restart(File, pbuf2d)
+ if (frierson_phys) then
+ call frierson_restart_init(File,hdimids,hdimcnt)
+ end if
+
end subroutine init_restart_physics
subroutine write_restart_physics (File, cam_in, cam_out, pbuf2d)
@@ -85,6 +92,10 @@ subroutine write_restart_physics (File, cam_in, cam_out, pbuf2d)
! Physics buffer
call pbuf_write_restart(File, pbuf2d)
+ if (frierson_phys) then
+ call frierson_restart_write(File)
+ end if
+
end subroutine write_restart_physics
!#######################################################################
@@ -110,6 +121,9 @@ subroutine read_restart_physics(File, cam_in, cam_out, pbuf2d)
call pbuf_read_restart(File, pbuf2d)
+ if (frierson_phys) then
+ call frierson_restart_read(File)
+ end if
end subroutine read_restart_physics
end module restart_physics
diff --git a/src/utils/table_interp_mod.F90 b/src/utils/table_interp_mod.F90
new file mode 100644
index 0000000000..9daac52b51
--- /dev/null
+++ b/src/utils/table_interp_mod.F90
@@ -0,0 +1,214 @@
+!----------------------------------------------------------------------------
+! Utility module used for interpolation of aerosol optics table
+! NOTE: Results will be set to table edges for interpolations beyond
+! the edges -- no extropolations
+!----------------------------------------------------------------------------
+module table_interp_mod
+ use shr_kind_mod, only: r8=>shr_kind_r8
+
+ implicit none
+
+ private
+ public :: table_interp
+ public :: table_interp_wghts
+ public :: table_interp_calcwghts
+
+ ! overload the interpolation routines
+ interface table_interp
+ module procedure interp1d
+ module procedure interp2d
+ module procedure interp4d
+ end interface table_interp
+
+ ! interpolation weights and indices
+ type :: table_interp_wghts
+ real(r8) :: wt1
+ real(r8) :: wt2
+ integer :: ix1
+ integer :: ix2
+ end type table_interp_wghts
+
+contains
+
+ !--------------------------------------------------------------------------
+ ! 1-D interpolation
+ !--------------------------------------------------------------------------
+ pure function interp1d( ncol, nxs, xwghts, tbl ) result(res)
+
+ integer, intent(in) :: ncol ! number of model columns
+ integer, intent(in) :: nxs ! table size
+ real(r8), intent(in) :: tbl(nxs) ! table values to be interpolated
+ type(table_interp_wghts), intent(in) :: xwghts(ncol) ! interpolation weights and indices
+
+ real(r8) :: res(ncol)
+
+ integer :: i
+
+ do i = 1,ncol
+
+ res(i) = xwghts(i)%wt1*tbl(xwghts(i)%ix1) &
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2)
+
+ end do
+
+ end function interp1d
+
+ !--------------------------------------------------------------------------
+ ! 2-D interpolation
+ !--------------------------------------------------------------------------
+ pure function interp2d( ncoef, ncol, nxs, nys, xwghts, ywghts, tbl ) result(res)
+
+ integer, intent(in) :: ncoef ! number chebyshev coefficients
+ integer, intent(in) :: ncol ! number of model columns
+ integer, intent(in) :: nxs ! table x-dimension size
+ integer, intent(in) :: nys ! table y-dimension size
+ real(r8), intent(in) :: tbl(ncoef,nxs,nys) ! table values to be interpolated
+ type(table_interp_wghts), intent(in) :: xwghts(ncol) ! x interpolation weights and indices
+ type(table_interp_wghts), intent(in) :: ywghts(ncol) ! y interpolation weights and indices
+
+ real(r8) :: res(ncoef,ncol)
+
+ real(r8) :: fx(ncoef,2)
+
+ integer :: i
+
+ do i = 1,ncol
+
+ ! interp x dir
+ fx(:,1) = xwghts(i)%wt1*tbl(:,xwghts(i)%ix1,ywghts(i)%ix1) & ! @ y1
+ + xwghts(i)%wt2*tbl(:,xwghts(i)%ix2,ywghts(i)%ix1)
+ fx(:,2) = xwghts(i)%wt1*tbl(:,xwghts(i)%ix1,ywghts(i)%ix2) & ! @ y2
+ + xwghts(i)%wt2*tbl(:,xwghts(i)%ix2,ywghts(i)%ix2)
+
+ ! interp y dir
+ res(:,i) = ywghts(i)%wt1*fx(:,1) + ywghts(i)%wt2*fx(:,2)
+
+ end do
+
+ end function interp2d
+
+ !--------------------------------------------------------------------------
+ ! 4-D interpolation
+ !--------------------------------------------------------------------------
+ pure function interp4d( ncol, nxs, nys, nzs, nts, xwghts, ywghts, zwghts, twghts, tbl ) result(res)
+
+ integer, intent(in) :: ncol ! number of model columns
+ integer, intent(in) :: nxs ! table x-dimension size
+ integer, intent(in) :: nys ! table y-dimension size
+ integer, intent(in) :: nzs ! table z-dimension size
+ integer, intent(in) :: nts ! table t-dimension size
+ real(r8), intent(in) :: tbl(nxs,nys,nzs,nts) ! table values to be interpolated
+ type(table_interp_wghts), intent(in) :: xwghts(ncol) ! x interpolation weights and indices
+ type(table_interp_wghts), intent(in) :: ywghts(ncol) ! y interpolation weights and indices
+ type(table_interp_wghts), intent(in) :: zwghts(ncol) ! z interpolation weights and indices
+ type(table_interp_wghts), intent(in) :: twghts(ncol) ! t interpolation weights and indices
+
+ real(r8) :: res(ncol)
+
+ real(r8) :: fx(8)
+ real(r8) :: fy(4)
+ real(r8) :: fz(2)
+
+ integer :: i
+
+ do i = 1,ncol
+
+ ! interp x dir
+ fx(1) = xwghts(i)%wt1*tbl(xwghts(i)%ix1,ywghts(i)%ix1,zwghts(i)%ix1,twghts(i)%ix1) & ! @ y1, z1, t1
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2,ywghts(i)%ix1,zwghts(i)%ix1,twghts(i)%ix1)
+ fx(2) = xwghts(i)%wt1*tbl(xwghts(i)%ix1,ywghts(i)%ix2,zwghts(i)%ix1,twghts(i)%ix1) & ! @ y2, z1, t1
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2,ywghts(i)%ix2,zwghts(i)%ix1,twghts(i)%ix1)
+
+ fx(3) = xwghts(i)%wt1*tbl(xwghts(i)%ix1,ywghts(i)%ix1,zwghts(i)%ix2,twghts(i)%ix1) & ! @ y1, z2, t1
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2,ywghts(i)%ix1,zwghts(i)%ix2,twghts(i)%ix1)
+ fx(4) = xwghts(i)%wt1*tbl(xwghts(i)%ix1,ywghts(i)%ix2,zwghts(i)%ix2,twghts(i)%ix1) & ! @ y2, z2, t1
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2,ywghts(i)%ix2,zwghts(i)%ix2,twghts(i)%ix1)
+
+ fx(5) = xwghts(i)%wt1*tbl(xwghts(i)%ix1,ywghts(i)%ix1,zwghts(i)%ix1,twghts(i)%ix2) & ! @ y1, z1, t2
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2,ywghts(i)%ix1,zwghts(i)%ix1,twghts(i)%ix2)
+ fx(6) = xwghts(i)%wt1*tbl(xwghts(i)%ix1,ywghts(i)%ix2,zwghts(i)%ix1,twghts(i)%ix2) & ! @ y2, z1, t2
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2,ywghts(i)%ix2,zwghts(i)%ix1,twghts(i)%ix2)
+
+ fx(7) = xwghts(i)%wt1*tbl(xwghts(i)%ix1,ywghts(i)%ix1,zwghts(i)%ix2,twghts(i)%ix2) & ! @ y1, z2, t2
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2,ywghts(i)%ix1,zwghts(i)%ix2,twghts(i)%ix2)
+ fx(8) = xwghts(i)%wt1*tbl(xwghts(i)%ix1,ywghts(i)%ix2,zwghts(i)%ix2,twghts(i)%ix2) & ! @ y2, z2, t2
+ + xwghts(i)%wt2*tbl(xwghts(i)%ix2,ywghts(i)%ix2,zwghts(i)%ix2,twghts(i)%ix2)
+
+ ! interp y dir
+ fy(1) = ywghts(i)%wt1*fx(1) + ywghts(i)%wt2*fx(2) ! @ z1, t1
+ fy(2) = ywghts(i)%wt1*fx(3) + ywghts(i)%wt2*fx(4) ! @ z2, t1
+ fy(3) = ywghts(i)%wt1*fx(5) + ywghts(i)%wt2*fx(6) ! @ z1, t2
+ fy(4) = ywghts(i)%wt1*fx(7) + ywghts(i)%wt2*fx(8) ! @ z2, t2
+
+ ! interp z dir
+ fz(1) = zwghts(i)%wt1*fy(1) + zwghts(i)%wt2*fy(2) ! @ t1
+ fz(2) = zwghts(i)%wt1*fy(3) + zwghts(i)%wt2*fy(4) ! @ t2
+
+ ! interp t dir
+ res(i) = twghts(i)%wt1*fz(1) + twghts(i)%wt2*fz(2)
+
+ end do
+
+ end function interp4d
+
+ !--------------------------------------------------------------------------
+ ! determines interpolation weights and indices for given values at the model columns
+ !--------------------------------------------------------------------------
+ pure function table_interp_calcwghts( ngrid, xgrid, ncols, xcols ) result(wghts)
+
+ integer, intent(in) :: ngrid ! number of grid point values
+ real(r8), intent(in) :: xgrid(ngrid) ! grid point values
+ integer, intent(in) :: ncols ! number of model columns
+ real(r8), intent(in) :: xcols(ncols) ! values at the model columns
+
+ type(table_interp_wghts) :: wghts(ncols) ! interpolations weights at the model columns
+
+ integer :: i
+ real(r8) :: xs(ncols)
+
+ xs(:) = xcols(:)
+
+ ! do not extrapolate beyond the edges of the table
+ where(xs < xgrid(1))
+ xs = xgrid(1)
+ end where
+ where(xs > xgrid(ngrid))
+ xs = xgrid(ngrid)
+ end where
+
+ do i = 1,ncols
+ wghts(i)%ix2 = find_index(ngrid,xgrid,xs(i))
+ wghts(i)%ix1 = wghts(i)%ix2 - 1
+ wghts(i)%wt1 = (xgrid(wghts(i)%ix2)-xs(i)) &
+ /(xgrid(wghts(i)%ix2)-xgrid(wghts(i)%ix1))
+ wghts(i)%wt2 = 1._r8 - wghts(i)%wt1
+ end do
+
+ end function table_interp_calcwghts
+
+ ! private methods
+ !--------------------------------------------------------------------------
+ !--------------------------------------------------------------------------
+ ! determines last index of grid vals of which is greater then or equal to
+ ! value vx
+ !--------------------------------------------------------------------------
+ pure function find_index( nvals, vals, vx ) result(res)
+ integer, intent(in) :: nvals
+ real(r8), intent(in) :: vals(nvals)
+ real(r8), intent(in) :: vx
+ integer :: res
+
+ integer :: ndx
+
+ res = -1
+
+ find_ndx: do ndx = 2, nvals
+ if (vals(ndx)>=vx) then
+ res = ndx
+ exit find_ndx
+ end if
+ end do find_ndx
+
+ end function find_index
+
+end module table_interp_mod