diff --git a/.gitmodules b/.gitmodules
index d8a34d6ce1..b74aac6f02 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -179,7 +179,7 @@ fxDONOTUSEurl = https://github.com/ESCOMP/CESM_CICE
[submodule "clm"]
path = components/clm
url = https://github.com/ESCOMP/CTSM
-fxtag = ctsm5.2.009
+fxtag = ctsm5.2.027
fxrequired = ToplevelRequired
fxDONOTUSEurl = https://github.com/ESCOMP/CTSM
@@ -189,4 +189,3 @@ url = https://github.com/ESCOMP/FMS_interface
fxtag = fi_240516
fxrequired = ToplevelRequired
fxDONOTUSEurl = https://github.com/ESCOMP/FMS_interface
-
diff --git a/bld/build-namelist b/bld/build-namelist
index 49e42c3ba3..df276b2bfc 100755
--- a/bld/build-namelist
+++ b/bld/build-namelist
@@ -578,6 +578,14 @@ if ($cfg->get('debug')) {
my $prescribe_aerosols = $TRUE;
if ($simple_phys) {$prescribe_aerosols = $FALSE;}
+# CTSM Dust emissions scheme
+my $soil_erod_atm = $FALSE;
+add_default($nl, 'dust_emis_method');
+if ( $nl->get_value('dust_emis_method') =~ /Zender/ ) {
+ add_default($nl, 'zender_soil_erod_source');
+ if ($nl->get_value('zender_soil_erod_source') =~ /atm/) {$soil_erod_atm = $TRUE;}
+}
+
# Chemistry deposition lists
if ( ($chem ne 'none') or ( $prog_species ) ){
my $chem_proc_src = $cfg->get('chem_proc_src');
@@ -1757,7 +1765,7 @@ if ( $prog_species ) {
add_default($nl, 'ghg_chem', 'val'=>".true.");
add_default($nl, 'bndtvg');
}
- if ( $prog_species =~ /DST/ ) {
+ if ( $prog_species =~ /DST/ and $soil_erod_atm =~ /$TRUE/) {
add_default($nl, 'soil_erod_file' );
}
@@ -2047,9 +2055,11 @@ if ($chem =~ /geoschem/) {
add_default($nl, 'flbc_cycle_yr', 'val'=>'2000');
}
- my @files;
# Datasets
- @files = ( 'soil_erod_file', 'flbc_file' );
+ my @files = ( 'flbc_file' );
+ if ($soil_erod_atm =~ /$TRUE/) {
+ @files = ( @files, 'soil_erod_file' );
+ }
foreach my $file (@files) {
add_default($nl, $file);
}
@@ -2088,12 +2098,15 @@ if ($chem =~ /trop_mozart/ or $chem =~ /trop_strat/ or $chem =~ /waccm_tsmlt/) {
my @files;
# Datasets
if ($chem =~ /trop_strat/ or $chem =~ /waccm_tsmlt/) {
- @files = ( 'soil_erod_file', 'flbc_file',
+ @files = ( 'flbc_file',
'xs_coef_file','xs_short_file','xs_long_file', 'rsf_file' );
} else {
- @files = ( 'soil_erod_file', 'flbc_file',
+ @files = ( 'flbc_file',
'xs_coef_file','xs_short_file','xs_long_file', 'rsf_file', 'exo_coldens_file', 'sulf_file' );
}
+ if ($soil_erod_atm =~ /$TRUE/) {
+ @files = ( @files, 'soil_erod_file' );
+ }
foreach my $file (@files) {
add_default($nl, $file);
}
@@ -2191,8 +2204,10 @@ if ($chem eq 'trop_mam3') {
add_default($nl, 'flbc_list', 'val'=>"' '");
# Datasets
- my @files = ('soil_erod_file',
- 'xs_long_file', 'rsf_file', 'exo_coldens_file' );
+ my @files = ( 'xs_long_file', 'rsf_file', 'exo_coldens_file' );
+ if ($soil_erod_atm =~ /$TRUE/) {
+ @files = ( @files, 'soil_erod_file' );
+ }
foreach my $file (@files) {
add_default($nl, $file);
}
@@ -2696,8 +2711,10 @@ if (($chem eq 'trop_mam4') or ($chem eq 'waccm_sc_mam4') or ($chem eq 'ghg_mam4'
add_default($nl, 'flbc_list', 'val'=>"' '");
# Datasets
- my @files = ('soil_erod_file',
- 'xs_long_file', 'rsf_file', 'exo_coldens_file' );
+ my @files = ('xs_long_file', 'rsf_file', 'exo_coldens_file' );
+ if ($soil_erod_atm =~ /$TRUE/) {
+ @files = ( @files, 'soil_erod_file' );
+ }
foreach my $file (@files) {
add_default($nl, $file);
}
@@ -2785,8 +2802,10 @@ if ($chem eq 'trop_mam7') {
add_default($nl, 'flbc_list', 'val'=>"' '");
# Datasets
- my @files = ('soil_erod_file',
- 'xs_long_file', 'rsf_file', 'exo_coldens_file' );
+ my @files = ('xs_long_file', 'rsf_file', 'exo_coldens_file' );
+ if ($soil_erod_atm =~ /$TRUE/) {
+ @files = ( @files, 'soil_erod_file' );
+ }
foreach my $file (@files) {
add_default($nl, $file);
}
@@ -2845,8 +2864,10 @@ if ($chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/) {
'photon_file', 'electron_file', 'igrf_geomag_coefs_file',
'euvac_file', 'solar_parms_data_file',
'depvel_lnd_file',
- 'xs_coef_file', 'xs_short_file','xs_long_file', 'rsf_file',
- 'soil_erod_file' );
+ 'xs_coef_file', 'xs_short_file','xs_long_file', 'rsf_file' );
+ if ($soil_erod_atm =~ /$TRUE/) {
+ @files = ( @files, 'soil_erod_file' );
+ }
if (!$waccmx) { @files = (@files, 'tgcm_ubc_file', 'snoe_ubc_file' ); }
@@ -3685,19 +3706,15 @@ if ($cfg->get('microphys') eq 'rk') {
}
# Dust emissions tuning factor
-# If dust is prognostic ==> supply the tuning factor
-if ( length($nl->get_value('soil_erod_file'))>0 ) {
- # check whether turbulent mountain stress parameterization is on
- if ($nl->get_value('do_tms') =~ /$TRUE/io) {
- add_default($nl, 'dust_emis_fact', 'tms'=>'1');
+# check whether turbulent mountain stress parameterization is on
+if ($nl->get_value('do_tms') =~ /$TRUE/io) {
+ add_default($nl, 'dust_emis_fact', 'tms'=>'1');
+} else {
+ if ($chem =~ /trop_strat/ or $chem =~ /geoschem/ or $chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/ or $chem =~ /trop_mozart/) {
+ add_default($nl, 'dust_emis_fact', 'ver'=>'chem');
}
else {
- if ($chem =~ /trop_strat/ or $chem =~ /geoschem/ or $chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/ or $chem =~ /trop_mozart/) {
- add_default($nl, 'dust_emis_fact', 'ver'=>'chem');
- }
- else {
- add_default($nl, 'dust_emis_fact');
- }
+ add_default($nl, 'dust_emis_fact');
}
}
if (chem_has_species($cfg, 'NO')) {
@@ -4407,7 +4424,7 @@ my %nl_group = ();
foreach my $name (@nl_groups) { $nl_group{$name} = ''; }
# Dry deposition, MEGAN VOC emis and ozone namelists
-@comp_groups = qw(drydep_inparm megan_emis_nl fire_emis_nl carma_inparm ndep_inparm ozone_coupling_nl lightning_coupling_nl);
+@comp_groups = qw(drydep_inparm megan_emis_nl fire_emis_nl carma_inparm ndep_inparm ozone_coupling_nl lightning_coupling_nl dust_emis_inparm);
$outfile = "$opts{'dir'}/drv_flds_in";
$nl->write($outfile, 'groups'=>\@comp_groups);
diff --git a/bld/configure b/bld/configure
index 508ae7ade3..707fe16e74 100755
--- a/bld/configure
+++ b/bld/configure
@@ -1606,7 +1606,7 @@ else {
if ($print>=2 and $ttrac_nadv) { print "Advected constituents added by test tracer package: $ttrac_nadv$eol"; }
if ($age_of_air_trcs eq "ON") {
- $nadv += 4;
+ $nadv += 3;
if ($print>=2) { print "Advected constituents added by the age of air tracer package: 4$eol"; }
}
diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml
index dbadef2e49..70fc07ab6f 100644
--- a/bld/namelist_files/namelist_defaults_cam.xml
+++ b/bld/namelist_files/namelist_defaults_cam.xml
@@ -2530,6 +2530,10 @@
0.9D0
0.9D0
+
+Zender_2003
+atm
+
1.35D0
diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml
index 76d650424b..af5f067f86 100644
--- a/bld/namelist_files/namelist_definition.xml
+++ b/bld/namelist_files/namelist_definition.xml
@@ -7659,6 +7659,21 @@ List of fluxes needed by the CARMA model, from CLM to CAM.
Default: set by build-namelist.
+
+Which dust emission method is going to be used.
+Either the Zender 2003 scheme or the Leung 2023 scheme.
+Default: Zender_2003
+
+
+
+Option only applying for the Zender_2003 method for whether the soil erodibility
+file is handled in the active LAND model or in the ATM model.
+(only used when dust_emis_method is Zender_2003)
+Default: atm
+
+
'Q:H2O->UBC_FILE'
-atm/cam/chem/ubc/f.e21.FWHISTBgcCrop.f09_f09_mg17.CMIP6-AMIP-WACCM.ensAvg123.cam.h0zm.UBC.195001-201412_c220322.nc
+atm/cam/chem/ubc/b.e21.BWHIST.f09_g17.CMIP6-historical-WACCM.ensAvg123.cam.h0zm.H2O.1849-2014_c240604.nc
'SERIAL'
diff --git a/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml b/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml
index 6fa2495972..95b9e204db 100644
--- a/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml
+++ b/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml
@@ -92,7 +92,7 @@
- 'AOA1', 'AOA2', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
+ 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC',
'FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'HORZ', 'LANDFRAC', 'LHFLX', 'OCNFRAC',
'OH', 'OMEGA', 'PHIS', 'PRECC', 'PRECL', 'PS', 'QFLX', 'QRL', 'QRLNLTE',
diff --git a/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml b/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml
index 8adf1f6333..753c2e0035 100644
--- a/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml
@@ -71,7 +71,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
+ 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC',
'FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'HORZ', 'LANDFRAC', 'LHFLX', 'OCNFRAC',
'OH', 'OMEGA', 'PHIS', 'PRECC', 'PRECL', 'PS', 'QFLX', 'QRL', 'QRLNLTE',
diff --git a/bld/namelist_files/use_cases/sd_waccm_sulfur.xml b/bld/namelist_files/use_cases/sd_waccm_sulfur.xml
index 25c4d622de..7a02c11544 100644
--- a/bld/namelist_files/use_cases/sd_waccm_sulfur.xml
+++ b/bld/namelist_files/use_cases/sd_waccm_sulfur.xml
@@ -67,7 +67,7 @@
- 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO', 'BRONO2', 'CCL4', 'CF2CLBR', 'CF3BR',
+ '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', 'CO2', 'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT',
@@ -103,7 +103,7 @@
'CL','CL2', 'CLO', 'OCLO', 'CL2O2', 'CLONO2', 'HOCL', 'HCL', 'CLOX', 'CLOY',
'BR', 'BRO', 'HOBR', 'HBR', 'BRCL', 'BRONO2', 'BROX', 'BROY', 'TCLY',
'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jhocl', 'jno3_b', 'jcl2o2',
- 'SAD_SULFC', 'SAD_LNAT', 'SAD_ICE','AOA1','AOA2',
+ 'SAD_SULFC', 'SAD_LNAT', 'SAD_ICE',
'O2', 'CLDLIQ', 'CLDICE', 'ASDIR',
'VTHzm', 'WTHzm', 'UVzm', 'UWzm', 'TH', 'MSKtem'
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 e52fd92caa..9da740a7ae 100644
--- a/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
@@ -65,10 +65,10 @@
.true.
.true.
- 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+ 'NO2_CMXF'
- 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', 'AOA1', 'AOA_NH', 'AODABSdn', 'AODBCdn', 'AODdnDUST01', 'AODdnDUST02',
+ 'ABSORB', 'ACBZO2', 'ACTREL', 'ALKNIT', 'ALKO2', 'ALKOOH', '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',
diff --git a/bld/namelist_files/use_cases/sd_waccmx_ma_cam4.xml b/bld/namelist_files/use_cases/sd_waccmx_ma_cam4.xml
index 56b964bc54..6ec178700a 100644
--- a/bld/namelist_files/use_cases/sd_waccmx_ma_cam4.xml
+++ b/bld/namelist_files/use_cases/sd_waccmx_ma_cam4.xml
@@ -85,7 +85,7 @@
'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',
- 'ALATM', 'ALONM', 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO', 'BRONO2', 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11',
+ 'ALATM', 'ALONM', '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',
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 f380c36d60..6493ed584b 100644
--- a/bld/namelist_files/use_cases/sd_waccmx_ma_cam6.xml
+++ b/bld/namelist_files/use_cases/sd_waccmx_ma_cam6.xml
@@ -72,7 +72,7 @@
'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',
- 'ALATM', 'ALONM', 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO', 'BRONO2', 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11',
+ 'ALATM', 'ALONM', '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',
diff --git a/bld/namelist_files/use_cases/soa_chem_megan_emis.xml b/bld/namelist_files/use_cases/soa_chem_megan_emis.xml
index 512d95fcc9..5497ed52a9 100644
--- a/bld/namelist_files/use_cases/soa_chem_megan_emis.xml
+++ b/bld/namelist_files/use_cases/soa_chem_megan_emis.xml
@@ -63,7 +63,7 @@
NEU
- 'AEROD_v', 'AOA1', 'AOA2', 'CH2O', 'CH3O2', 'CH3OOH', 'CH4', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLOUD',
+ 'AEROD_v', 'CH2O', 'CH3O2', 'CH3OOH', 'CH4', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLOUD',
'CO', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC', 'FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'H', 'H2', 'H2O2', 'HNO3_GAS',
'HNO3_STS', 'HNO3_NAT', 'HNO3', 'HO2', 'HO2NO2', 'LANDFRAC', 'LHFLX', 'N2O', 'N2O5', 'NO', 'NO2', 'NO3', 'O', 'O1D',
'O3', 'OCNFRAC', 'OH', 'OMEGA', 'PHIS', 'PRECC', 'PRECL', 'PS', 'Q', 'QRL', 'QRS', 'RELHUM', 'SHFLX', 'SOLIN', 'SWCF',
diff --git a/bld/namelist_files/use_cases/waccm_carma_bc_2013_cam4.xml b/bld/namelist_files/use_cases/waccm_carma_bc_2013_cam4.xml
index a6e5287553..1429770e8e 100644
--- a/bld/namelist_files/use_cases/waccm_carma_bc_2013_cam4.xml
+++ b/bld/namelist_files/use_cases/waccm_carma_bc_2013_cam4.xml
@@ -77,7 +77,7 @@
- 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO', 'BRONO2', 'CCL4', 'CF2CLBR', 'CF3BR',
+ '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', 'CO2', 'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT',
@@ -113,7 +113,7 @@
'CL','CL2', 'CLO', 'OCLO', 'CL2O2', 'CLONO2', 'HOCL', 'HCL', 'CLOX', 'CLOY',
'BR', 'BRO', 'HOBR', 'HBR', 'BRCL', 'BRONO2', 'BROX', 'BROY', 'TCLY',
'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jhocl', 'jno3_b', 'jcl2o2',
- 'SAD_SULFC', 'SAD_LNAT', 'SAD_ICE','AOA1','AOA2',
+ 'SAD_SULFC', 'SAD_LNAT', 'SAD_ICE',
'O2', 'CLDLIQ', 'CLDICE', 'ASDIR',
'VTHzm', 'WTHzm', 'UVzm', 'UWzm', 'TH', 'MSKtem'
diff --git a/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml b/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
index 99eb24d6b8..24b55facc2 100644
--- a/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
@@ -55,7 +55,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
+ 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC',
'FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'HORZ', 'LANDFRAC', 'LHFLX', 'OCNFRAC',
'OH', 'OMEGA', 'PHIS', 'PRECC', 'PRECL', 'PS', 'QFLX', 'QRL', 'QRLNLTE',
diff --git a/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml b/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml
index f87670c6b0..9ccac8892f 100644
--- a/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml
@@ -150,7 +150,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
+ 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC',
'FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'HORZ', 'LANDFRAC', 'LHFLX', 'OCNFRAC',
'OH', 'OMEGA', 'PHIS', 'PRECC', 'PRECL', 'PS', 'QFLX', 'QRL', 'QRLNLTE',
diff --git a/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml b/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml
index 1177ebd155..e2376e4a70 100644
--- a/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml
+++ b/bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml
@@ -78,7 +78,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
+ 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC',
'FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'HORZ', 'LANDFRAC', 'LHFLX', 'OCNFRAC',
'OH', 'OMEGA', 'PHIS', 'PRECC', 'PRECL', 'PS', 'QFLX', 'QRL', 'QRLNLTE',
diff --git a/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml b/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
index 03c45f097a..042a153fe4 100644
--- a/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
@@ -49,7 +49,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
+ 'CLDHGH', 'CLDLOW', 'CLDMED', 'CLDTOT', 'CLO', 'CLONO2', 'CLOUD',
'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC',
'FSDS', 'FSNS', 'FSNSC', 'FSNT', 'FSNTC', 'HORZ', 'LANDFRAC', 'LHFLX', 'OCNFRAC',
'OH', 'OMEGA', 'PHIS', 'PRECC', 'PRECL', 'PS', 'QFLX', 'QRL', 'QRLNLTE',
diff --git a/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml b/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml
index a004dafd78..dbc6b0921b 100644
--- a/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml
@@ -72,7 +72,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CH4', 'H2O', 'N2O', 'CFC11', 'CFC12', 'CFC11STAR', 'UTGWORO', 'VTGWORO',
+ 'CH4', 'H2O', 'N2O', 'CFC11', 'CFC12', 'CFC11STAR', 'UTGWORO', 'VTGWORO',
'UTGWSPEC', 'VTGWSPEC', 'BUTGWSPEC', 'AODVISstdn', 'AODVISdn', 'KVH_CLUBB', 'KVH', 'TTENDICE', 'QVTENDICE', 'QCTENDICE',
'NCTENDICE', 'FQTENDICE', 'MASS'
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 040cf5acfc..ead1445075 100644
--- a/bld/namelist_files/use_cases/waccm_sc_2000_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_2000_cam6.xml
@@ -107,7 +107,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CH4', 'H2O', 'N2O', 'CFC11', 'CFC12', 'CFC11STAR', 'UTGWORO', 'VTGWORO',
+ 'CH4', 'H2O', 'N2O', 'CFC11', 'CFC12', 'CFC11STAR', 'UTGWORO', 'VTGWORO',
'UTGWSPEC', 'VTGWSPEC', 'BUTGWSPEC', 'AODVISstdn', 'AODVISdn', 'KVH_CLUBB', 'KVH', 'TTENDICE', 'QVTENDICE', 'QCTENDICE',
'NCTENDICE', 'FQTENDICE', 'MASS'
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 a77688d0f1..9b168bbef2 100644
--- a/bld/namelist_files/use_cases/waccm_sc_2010_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_2010_cam6.xml
@@ -110,7 +110,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CH4', 'H2O', 'N2O', 'CFC11', 'CFC12', 'CFC11STAR', 'UTGWORO', 'VTGWORO',
+ 'CH4', 'H2O', 'N2O', 'CFC11', 'CFC12', 'CFC11STAR', 'UTGWORO', 'VTGWORO',
'UTGWSPEC', 'VTGWSPEC', 'BUTGWSPEC', 'AODVISstdn', 'AODVISdn', 'KVH_CLUBB', 'KVH', 'TTENDICE', 'QVTENDICE', 'QCTENDICE',
'NCTENDICE', 'FQTENDICE', 'MASS'
diff --git a/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml b/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml
index cad2fb3f3a..3c2583af96 100644
--- a/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_sc_hist_cam6.xml
@@ -59,7 +59,7 @@
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'I'
- 'AOA1', 'AOA2', 'CH4', 'H2O', 'N2O', 'CFC11', 'CFC12', 'CFC11STAR', 'UTGWORO', 'VTGWORO',
+ 'CH4', 'H2O', 'N2O', 'CFC11', 'CFC12', 'CFC11STAR', 'UTGWORO', 'VTGWORO',
'UTGWSPEC', 'VTGWSPEC', 'BUTGWSPEC', 'AODVISstdn', 'AODVISdn', 'KVH_CLUBB', 'KVH', 'TTENDICE', 'QVTENDICE', 'QCTENDICE',
'NCTENDICE', 'FQTENDICE', 'MASS'
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 800b9b228a..86e6af3bab 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_1850_cam6.xml
@@ -63,7 +63,7 @@
.true.
.true.
- 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF', 'NO2_CLXF'
+ 'NO2_CMXF', 'NO2_CLXF'
'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
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 3ad0c7db31..efc485e990 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_2000_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_2000_cam6.xml
@@ -260,7 +260,7 @@
.true.
.true.
- 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+ 'NO2_CMXF'
'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
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 219083b1a4..fa65883ce1 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_2010_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_2010_cam6.xml
@@ -160,7 +160,7 @@
.true.
.true.
- 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+ 'NO2_CMXF'
'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
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 6ad0b14145..00fb808a52 100644
--- a/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccm_tsmlt_hist_cam6.xml
@@ -56,7 +56,7 @@
.true.
.true.
- 'AOA1SRC', 'AOA2SRC', 'NO2_CMXF'
+ 'NO2_CMXF'
'ACTREL', 'AQ_SO2', 'AREA', 'BROX', 'BROY', 'BRY', 'CLOX', 'CLOY', 'CLY', 'NOX', 'NOY', 'TBRY', 'TCLY', 'CFC11STAR',
diff --git a/bld/namelist_files/use_cases/waccmx_ma_2000_cam4.xml b/bld/namelist_files/use_cases/waccmx_ma_2000_cam4.xml
index d40cc385f4..017cc3362e 100644
--- a/bld/namelist_files/use_cases/waccmx_ma_2000_cam4.xml
+++ b/bld/namelist_files/use_cases/waccmx_ma_2000_cam4.xml
@@ -74,7 +74,7 @@
- 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO', 'BRONO2', 'CCL4', 'CF2CLBR', 'CF3BR',
+ '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', 'CO2', 'DTCOND', 'DTV', 'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT',
@@ -110,7 +110,7 @@
'CL','CL2', 'CLO', 'OCLO', 'CL2O2', 'CLONO2', 'HOCL', 'HCL', 'CLOX', 'CLOY',
'BR', 'BRO', 'HOBR', 'HBR', 'BRCL', 'BRONO2', 'BROX', 'BROY', 'TCLY',
'jo2_a', 'jo2_b', 'jo3_a', 'jo3_b', 'jhocl', 'jno3_b', 'jcl2o2',
- 'SAD_SULFC', 'SAD_LNAT', 'SAD_ICE','AOA1','AOA2',
+ 'SAD_SULFC', 'SAD_LNAT', 'SAD_ICE',
'O2', 'CLDLIQ', 'CLDICE', 'ASDIR',
'O2_1S', 'O2_1D',
'Op', 'O2p', 'Np', 'NOp', 'N2p', 'e',
@@ -121,7 +121,7 @@
- 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO', 'BRONO2', 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11', 'CFC113',
+ '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', 'CO2', 'DTCOND', 'DTV',
'DUV', 'DVV', 'EKGW', 'FLNS', 'FLNSC', 'FLNT', 'FLNTC', 'FSDS', 'FSNS', 'FSNSC', 'FSNT',
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 6e6986f127..06520cc3fb 100644
--- a/bld/namelist_files/use_cases/waccmx_ma_2000_cam6.xml
+++ b/bld/namelist_files/use_cases/waccmx_ma_2000_cam6.xml
@@ -52,7 +52,7 @@
'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', 'ALATM', 'ALONM', 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO',
+ 'OMEGA_12_SIN', 'OMEGA_08_COS', 'OMEGA_08_SIN', 'ALATM', 'ALONM', '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',
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 cc6eea7802..37ca427cd2 100644
--- a/bld/namelist_files/use_cases/waccmx_ma_hist_cam6.xml
+++ b/bld/namelist_files/use_cases/waccmx_ma_hist_cam6.xml
@@ -50,7 +50,7 @@
'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', 'ALATM', 'ALONM', 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO',
+ 'OMEGA_12_SIN', 'OMEGA_08_COS', 'OMEGA_08_SIN', 'ALATM', 'ALONM', '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',
diff --git a/bld/namelist_files/use_cases/waccmxie_ma_2000_cam4.xml b/bld/namelist_files/use_cases/waccmxie_ma_2000_cam4.xml
index a3f8c937ec..5fe9c654dd 100644
--- a/bld/namelist_files/use_cases/waccmxie_ma_2000_cam4.xml
+++ b/bld/namelist_files/use_cases/waccmxie_ma_2000_cam4.xml
@@ -104,7 +104,7 @@
'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',
- 'ALATM', 'ALONM', 'AOA1', 'AOA2', 'BR', 'BRCL', 'BRO', 'BRONO2', 'CCL4', 'CF2CLBR', 'CF3BR', 'CFC11',
+ 'ALATM', 'ALONM', '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',
diff --git a/cime_config/config_compsets.xml b/cime_config/config_compsets.xml
index a99a4d1d54..8ba81de44a 100644
--- a/cime_config/config_compsets.xml
+++ b/cime_config/config_compsets.xml
@@ -899,6 +899,12 @@
+
+
+ FALSE
+
+
+
diff --git a/cime_config/testdefs/testlist_cam.xml b/cime_config/testdefs/testlist_cam.xml
index 68a0ddbac3..2d736a2d51 100644
--- a/cime_config/testdefs/testlist_cam.xml
+++ b/cime_config/testdefs/testlist_cam.xml
@@ -1514,7 +1514,7 @@
-
+
@@ -2023,7 +2023,7 @@
-
+
@@ -2263,7 +2263,7 @@
-
+
@@ -2284,7 +2284,6 @@
-
@@ -2292,12 +2291,13 @@
-
+
+
-
+
diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/shell_commands b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/shell_commands
new file mode 100644
index 0000000000..de6a2792a7
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/shell_commands
@@ -0,0 +1,2 @@
+./xmlchange ROF_NCPL=\$ATM_NCPL
+./xmlchange --append CAM_CONFIG_OPTS="-age_of_air_trcs"
diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/user_nl_cam b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/user_nl_cam
new file mode 100644
index 0000000000..b0d39d2335
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/user_nl_cam
@@ -0,0 +1,4 @@
+mfilt=1,1,1,1,1,1
+ndens=1,1,1,1,1,1
+nhtfrq=-24,-24,-24,-24,-24,-24
+write_nstep0 = .true.
diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/user_nl_clm b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/user_nl_clm
new file mode 100644
index 0000000000..5634334558
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/user_nl_clm
@@ -0,0 +1,27 @@
+!----------------------------------------------------------------------------------
+! Users should add all user specific namelist changes below in the form of
+! namelist_var = new_namelist_value
+!
+! Include namelist variables for drv_flds_in ONLY if -megan and/or -drydep options
+! are set in the CLM_NAMELIST_OPTS env variable.
+!
+! EXCEPTIONS:
+! Set use_cndv by the compset you use and the CLM_BLDNML_OPTS -dynamic_vegetation setting
+! Set use_vichydro by the compset you use and the CLM_BLDNML_OPTS -vichydro setting
+! Set use_cn by the compset you use and CLM_BLDNML_OPTS -bgc setting
+! Set use_crop by the compset you use and CLM_BLDNML_OPTS -crop setting
+! Set spinup_state by the CLM_BLDNML_OPTS -bgc_spinup setting
+! Set irrigate by the CLM_BLDNML_OPTS -irrig setting
+! Set dtime with L_NCPL option
+! Set fatmlndfrc with LND_DOMAIN_PATH/LND_DOMAIN_FILE options
+! Set finidat with RUN_REFCASE/RUN_REFDATE/RUN_REFTOD options for hybrid or branch cases
+! (includes $inst_string for multi-ensemble cases)
+! Set glc_grid with CISM_GRID option
+! Set glc_smb with GLC_SMB option
+! Set maxpatch_glcmec with GLC_NEC option
+! Set glc_do_dynglacier with GLC_TWO_WAY_COUPLING env variable
+!----------------------------------------------------------------------------------
+hist_nhtfrq = -24
+hist_mfilt = 1
+hist_ndens = 1
+
diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands
new file mode 100644
index 0000000000..eb40ad83e0
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands
@@ -0,0 +1,2 @@
+./xmlchange ROF_NCPL=\$ATM_NCPL
+./xmlchange GLC_NCPL=\$ATM_NCPL
diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam
new file mode 100644
index 0000000000..351fe92801
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam
@@ -0,0 +1,9 @@
+dust_emis_method = 'Leung_2023'
+
+fincl2 = 'dst_a1SF', 'dst_a2SF', 'dst_a3SF'
+
+mfilt=1,1,1,1,1,1
+ndens=1,1,1,1,1,1
+nhtfrq=9,9,9,9,9,9
+write_nstep0=.true.
+inithist='ENDOFRUN'
diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm
new file mode 100644
index 0000000000..0d83b5367b
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm
@@ -0,0 +1,27 @@
+!----------------------------------------------------------------------------------
+! Users should add all user specific namelist changes below in the form of
+! namelist_var = new_namelist_value
+!
+! Include namelist variables for drv_flds_in ONLY if -megan and/or -drydep options
+! are set in the CLM_NAMELIST_OPTS env variable.
+!
+! EXCEPTIONS:
+! Set use_cndv by the compset you use and the CLM_BLDNML_OPTS -dynamic_vegetation setting
+! Set use_vichydro by the compset you use and the CLM_BLDNML_OPTS -vichydro setting
+! Set use_cn by the compset you use and CLM_BLDNML_OPTS -bgc setting
+! Set use_crop by the compset you use and CLM_BLDNML_OPTS -crop setting
+! Set spinup_state by the CLM_BLDNML_OPTS -bgc_spinup setting
+! Set irrigate by the CLM_BLDNML_OPTS -irrig setting
+! Set dtime with L_NCPL option
+! Set fatmlndfrc with LND_DOMAIN_PATH/LND_DOMAIN_FILE options
+! Set finidat with RUN_REFCASE/RUN_REFDATE/RUN_REFTOD options for hybrid or branch cases
+! (includes $inst_string for multi-ensemble cases)
+! Set glc_grid with CISM_GRID option
+! Set glc_smb with GLC_SMB option
+! Set maxpatch_glcmec with GLC_NEC option
+! Set glc_do_dynglacier with GLC_TWO_WAY_COUPLING env variable
+!----------------------------------------------------------------------------------
+hist_nhtfrq = 9
+hist_mfilt = 1
+hist_ndens = 1
+
diff --git a/components/cdeps b/components/cdeps
index 46c10740ce..7b0b3a8272 160000
--- a/components/cdeps
+++ b/components/cdeps
@@ -1 +1 @@
-Subproject commit 46c10740ce83a154edfc876093f72e7f041c3659
+Subproject commit 7b0b3a827241c53d296ec877cb1f59966bf5e5bf
diff --git a/components/cice b/components/cice
index bdf6ea04d6..f14ec8339b 160000
--- a/components/cice
+++ b/components/cice
@@ -1 +1 @@
-Subproject commit bdf6ea04d6133434fcaa4de5336de106f01290d0
+Subproject commit f14ec8339bc5bc4a7a0664da5e247b5cfda531a1
diff --git a/components/clm b/components/clm
index e04b7e2ee9..0999a32f52 160000
--- a/components/clm
+++ b/components/clm
@@ -1 +1 @@
-Subproject commit e04b7e2ee974aaef93117776a96fd7ce1e774b4d
+Subproject commit 0999a32f520c995c3dfc94b9b96781d20ed0d6d5
diff --git a/doc/ChangeLog b/doc/ChangeLog
index fa6c1de12a..a4260ed120 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,793 @@
+
+===============================================================
+
+Tag name: cam6_4_030
+Originator(s): eaton, cacraig
+Date: Sept 6, 2024
+One-line Summary: fix psl values sent to coupler in cam7
+Github PR URL: https://github.com/ESCOMP/CAM/pull/1128
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+. Fix issue #1116 - Test SMS_Ld2.ne30pg3_t232.BMT1850.derecho_gnu.allactive-defaultio Fails
+ - The cam7 version of tphysbc has a call to cpslec added in front of the
+ call to cam_export so that psl is set consistent with the state sent to
+ the coupler.
+
+. Fix issue #805 - cplsec.F90 needs to be in a module.
+ - Add subroutine cpslec to a new module, src/utils/cam_diagnostic_utils.F90
+
+Describe any changes made to build system: none
+
+Describe any changes made to the namelist: none
+
+List any changes to the defaults for the boundary datasets: none
+
+Describe any substantial timing or memory changes: none
+
+Code reviewed by: cacraig
+
+List all files eliminated:
+
+src/physics/cam/cpslec.F90
+. subroutine cpslec moved to new module
+
+List all files added and what they do:
+
+src/utils/cam_diagnostic_utils.F90
+. subroutine cpslec added to this new module
+
+List all existing files that have been modified, and describe the changes:
+
+src/physics/cam/cam_diagnostics.F90
+. add access to cpslec from cam_diagnostic_utils module
+
+src/physics/cam7/physpkg.F90
+. add calculation of psl to tphysbc right in front of call to cam_export
+
+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.
+
+derecho/intel/aux_cam:
+ FAIL SMS_D_Ln9_P1280x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.derecho_intel.cam-outfrq9s RUN time=77
+ PEND SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s
+ - pre-existing failures -- need fix in CLM external
+
+ FAIL ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s COMPARE_base_rest
+ - pre-existing failure due to HEMCO not having reproducible results issues #1018 and #856
+
+ ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s_rrtmgp (Overall: DIFF) details:
+ ERP_Ld3.ne30pg3_ne30pg3_mg17.FCts4MTHIST.derecho_intel.cam-outfrq1d_aoa (Overall: DIFF) details:
+ ERS_Ld3.f10_f10_mg37.F1850.derecho_intel.cam-outfrq1d_14dec_ghg_cam7 (Overall: DIFF) details:
+ SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FMTHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9_P1280x1.ne30pg3_ne30pg3_mg17.FCLTHIST.derecho_intel.cam-outfrq9s_Leung_dust (Overall: DIFF) details:
+ - CPL history file has difference in the atmImp_Sa_pslv field for CAM7 runs
+
+derecho/nvhpc/aux_cam:
+ ERS_Ln9_G4-a100-openacc.ne30pg3_ne30pg3_mg17.F2000dev.derecho_nvhpc.cam-outfrq9s_mg3_default (Overall: DIFF) details:
+ - CPL history file has difference in the atmImp_Sa_pslv field for CAM7 runs
+
+izumi/nag/aux_cam:
+ FAIL DAE.f45_f45_mg37.FHS94.izumi_nag.cam-dae
+ - pre-existing failure - issue #670
+
+izumi/gnu/aux_cam: all BFB
+
+CAM tag used for the baseline comparison tests if different than previous
+tag:
+
+Summarize any changes to answers: BFB in F compsets. Answers will change
+ in B compsets.
+
+===============================================================
+===============================================================
+
+Tag name: cam6_4_029
+Originator(s): fvitt
+Date: 5 Sep 2024
+One-line Summary: Updates to age of air diagnostic tracers
+Github PR URL: https://github.com/ESCOMP/CAM/pull/1110
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+ New age of air tracer (issue #1082):
+ Implement an age of air diagnostic tracer (AOA1MF) which has a mixing ratio lower
+ boundary condition which increases 2% per year starting from 1.e-6. Initial mass mixing
+ ratios. Legacy age of air tracers AOA1 and AOA2 are removed.
+
+ Update upper boundary file in CAM LT use case for simulations that begin in 1850.
+
+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
+
+List all files eliminated: N/A
+
+List all files added and what they do:
+A cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/shell_commands
+A cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/user_nl_cam
+A cime_config/testdefs/testmods_dirs/cam/outfrq1d_aoa/user_nl_clm
+ - for testing age-of-air tracers
+
+List all existing files that have been modified, and describe the changes:
+M bld/configure
+ - change number of advected AOA tracers to 3
+
+M bld/namelist_files/use_cases/1950-2010_ccmi_refc1_waccmx_ma.xml
+M bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml
+M bld/namelist_files/use_cases/sd_waccm_ma_cam6.xml
+M bld/namelist_files/use_cases/sd_waccm_sulfur.xml
+M bld/namelist_files/use_cases/sd_waccm_tsmlt_cam6.xml
+M bld/namelist_files/use_cases/sd_waccmx_ma_cam4.xml
+M bld/namelist_files/use_cases/sd_waccmx_ma_cam6.xml
+M bld/namelist_files/use_cases/soa_chem_megan_emis.xml
+M bld/namelist_files/use_cases/waccm_carma_bc_2013_cam4.xml
+M bld/namelist_files/use_cases/waccm_ma_1850_cam6.xml
+M bld/namelist_files/use_cases/waccm_ma_2000_cam6.xml
+M bld/namelist_files/use_cases/waccm_ma_hist_cam4.xml
+M bld/namelist_files/use_cases/waccm_ma_hist_cam6.xml
+M bld/namelist_files/use_cases/waccm_sc_1850_cam6.xml
+M bld/namelist_files/use_cases/waccm_sc_2000_cam6.xml
+M bld/namelist_files/use_cases/waccm_sc_2010_cam6.xml
+M bld/namelist_files/use_cases/waccm_sc_hist_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 bld/namelist_files/use_cases/waccmx_ma_2000_cam4.xml
+M bld/namelist_files/use_cases/waccmx_ma_2000_cam6.xml
+M bld/namelist_files/use_cases/waccmx_ma_hist_cam6.xml
+M bld/namelist_files/use_cases/waccmxie_ma_2000_cam4.xml
+ - remove obsolete AOA tracer fields from fincl lists
+
+M bld/namelist_files/use_cases/hist_cam_lt.xml
+ - update UBC file for runs that start in 1850
+
+M cime_config/testdefs/testlist_cam.xml
+ - add new TS4-cam7-MT AOA test
+
+M src/physics/cam/aoa_tracers.F90
+ - implement new AOAMF tracer (described above)
+ - remove obsolete AOA1 and AOA2 tracers
+
+M src/physics/cam/physpkg.F90
+M src/physics/cam7/physpkg.F90
+ - aoa_tracers_timestep_tend interface change
+
+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.
+
+derecho/intel/aux_cam:
+ PEND SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s
+ - pre-existing failures -- need fix in CLM external
+
+ FAIL ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s COMPARE_base_rest
+ - pre-existing failure due to HEMCO not having reproducible results issues #1018 and #856
+
+ NLFAIL ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s
+ NLFAIL ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s_rrtmgp
+ - change in ubc_file_path, otherwise bit-for-bit
+
+ DIFF ERC_D_Ln9.f19_f19_mg17.QPX2000.derecho_intel.cam-outfrq3s
+ DIFF ERP_Ld3.f09_f09_mg17.FWHIST.derecho_intel.cam-reduced_hist1d
+ DIFF ERP_Ld3.ne30pg3_ne30pg3_mg17.FCts4MTHIST.derecho_intel.cam-outfrq1d_aoa
+ DIFF ERP_Lh12.f19_f19_mg17.FW4madSD.derecho_intel.cam-outfrq3h
+ DIFF ERP_Ln9.f19_f19_mg17.FWsc1850.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.ne30pg3_ne30pg3_mg17.FCnudged.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9_P24x3.f45_f45_mg37.QPWmaC6.derecho_intel.cam-outfrq9s_mee_fluxes
+ DIFF ERS_Ln9.f09_f09_mg17.FX2000.derecho_intel.cam-outfrq9s
+ DIFF ERS_Ln9.f19_f19_mg17.FXSD.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f09_f09_mg17.FCts2nudged.derecho_intel.cam-outfrq9s_leapday
+ DIFF SMS_D_Ln9.f09_f09_mg17.FCvbsxHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s_waccm_ma_mam4
+ DIFF SMS_D_Ln9.f19_f19_mg17.FXHIST.derecho_intel.cam-outfrq9s_amie
+ DIFF SMS_D_Ln9.f19_f19_mg17.QPC2000climo.derecho_intel.cam-outfrq3s_usecase
+ DIFF SMS_D_Ln9.ne16_ne16_mg17.QPX2000.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.ne16pg3_ne16pg3_mg17.FX2000.derecho_intel.cam-outfrq9s
+ DIFF SMS_Ld1.f09_f09_mg17.FW2000climo.derecho_intel.cam-outfrq1d
+ DIFF SMS_Ld1.ne30pg3_ne30pg3_mg17.FC2010climo.derecho_intel.cam-outfrq1d
+ DIFF SMS_Lh12.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq3h
+ DIFF SMS_Ln9.f09_f09_mg17.FW1850.derecho_intel.cam-reduced_hist3s
+ DIFF SMS_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s_rrtmgp
+ - expect baseline failures -- differences in age-of-air tracers
+ otherwise bit-for-bit
+
+derecho/nvhpc/aux_cam: PASS
+
+izumi/nag/aux_cam:
+ FAIL DAE.f45_f45_mg37.FHS94.izumi_nag.cam-dae
+ - pre-existing failure - issue #670
+
+ DIFF ERC_D_Ln9.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s
+ DIFF SMS_D_Ln3.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s
+ DIFF SMS_D_Ln6.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem
+ - expect baseline failures -- differences in age-of-air tracers
+ otherwise bit-for-bit
+
+izumi/gnu/aux_cam:
+ DIFF SMS_D_Ln9.f10_f10_mg37.QPWmaC4.izumi_gnu.cam-outfrq9s_apmee
+ DIFF SMS_P48x1_D_Ln9.f19_f19_mg17.FW4madSD.izumi_gnu.cam-outfrq9s
+ - expect baseline failures -- differences in age-of-air tracers
+ otherwise bit-for-bit
+
+Summarize any changes to answers: bit-for-bit
+
+===============================================================
+===============================================================
+
+Tag name: cam6_4_028
+Originator(s): fvitt
+Date: 4 Sep 2024
+One-line Summary: Add capability to use Leung dust emission scheme
+Github PR URL: https://github.com/ESCOMP/CAM/pull/1104
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+ Add the capability to use Leung_2023 land model dust emission scheme.
+ Zender_2003 is the default scheme for all F compsets.
+ (issues #141 and #654)
+
+ NOTE: This reverts cam7 compsets back to Zender_2003 dust emissions.
+ In tag cam6_4_027 cam7 compsets dust emissions scheme defaulted to
+ Leung_2023 and where not properly scaled.
+
+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: ekluzek, cacraigucar
+
+List all files eliminated: N/A
+
+List all files added and what they do:
+A cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands
+A cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam
+A cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm
+ - add test for Leung_2023 dust emis scheme
+
+List all existing files that have been modified, and describe the changes:
+M bld/build-namelist
+M bld/namelist_files/namelist_defaults_cam.xml
+ - set default dust emis namelist settings (Zender_2003 is the default scheme)
+
+M bld/namelist_files/namelist_definition.xml
+ - new dust emis namelist vars:
+ . dust_emis_method ('Zender_2003' or 'Leung_2023')
+ . zend_soil_erod_source ('atm' or 'lnd')
+
+M cime_config/config_compsets.xml
+ - override the 'LND_SETS_DUST_EMIS_DRV_FLDS' xml setting to be FALSE for cam7/clm6 F compsets
+
+M cime_config/testdefs/testlist_cam.xml
+ - increase time for aux_cam HEMCO test
+ - regression test Leung_2023 dust emis scheme
+
+M src/chemistry/bulk_aero/dust_model.F90
+M src/chemistry/modal_aero/dust_model.F90
+ - use soil_erod only if Zender scheme is used
+
+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.
+
+derecho/intel/aux_cam:
+ PEND SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s
+ - pre-existing failures -- need fix in CLM external
+
+ FAIL ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s COMPARE_base_rest
+ - pre-existing failure due to HEMCO not having reproducible results issues #1018 and #856
+
+ DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s
+ DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s_rrtmgp
+ DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FCts4MTHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FMTHIST.derecho_intel.cam-outfrq9s
+ - differences due to switching dust emis scheme from Leung_2023 to Zender_2003
+
+ DIFF SMS_D_Ln9_P1280x1.ne30pg3_ne30pg3_mg17.FCLTHIST.derecho_intel.cam-outfrq9s_Leung_dust
+ - new reg test -- no baseline to compare against
+
+ NLFAIL ERC_D_Ln9.f19_f19_mg17.QPC6.derecho_intel.cam-outfrq3s_cosp
+ NLFAIL ERC_D_Ln9.f19_f19_mg17.QPMOZ.derecho_intel.cam-outfrq3s
+ NLFAIL ERC_D_Ln9.f19_f19_mg17.QPX2000.derecho_intel.cam-outfrq3s
+ NLFAIL ERC_D_Ln9.ne16_ne16_mg17.FADIAB.derecho_intel.cam-terminator
+ NLFAIL ERC_D_Ln9.ne16_ne16_mg17.QPC5HIST.derecho_intel.cam-outfrq3s_usecase
+ NLFAIL ERC_D_Ln9_P144x1.ne16pg3_ne16pg3_mg17.QPC6HIST.derecho_intel.cam-outfrq3s_ttrac_usecase
+ NLFAIL ERC_D_Ln9.T42_T42_mg17.FDABIP04.derecho_intel.cam-outfrq3s_usecase
+ NLFAIL ERC_D_Ln9.T42_T42_mg17.FHS94.derecho_intel.cam-outfrq3s_usecase
+ NLFAIL ERI_D_Ln18.f45_f45_mg37.QPC41850.derecho_intel.cam-co2rmp_usecase
+ NLFAIL ERP_D_Ln9.f19_f19_mg17.QPC6.derecho_intel.cam-outfrq9s
+ NLFAIL ERP_D_Ln9_P64x2.f09_f09_mg17.QSC6.derecho_intel.cam-outfrq9s
+ NLFAIL ERP_Ln9_P24x3.f45_f45_mg37.QPWmaC6.derecho_intel.cam-outfrq9s_mee_fluxes
+ NLFAIL ERS_Ln9.f19_f19_mg17.FSPCAMS.derecho_intel.cam-outfrq9s
+ NLFAIL ERS_Ln9.ne0TESTONLYne5x4_ne0TESTONLYne5x4_mg37.FADIAB.derecho_intel.cam-outfrq3s_refined
+ NLFAIL SCT_D_Ln7.ne3_ne3_mg37.QPC5.derecho_intel.cam-scm_prep
+ NLFAIL SCT_D_Ln7.T42_T42_mg17.QPC5.derecho_intel.cam-scm_prep
+ NLFAIL SMS_D_Ld2.f19_f19_mg17.QPC5HIST.derecho_intel.cam-volc_usecase
+ NLFAIL SMS_D_Ld5.f19_f19_mg17.PC4.derecho_intel.cam-cam4_port5d
+ NLFAIL SMS_D_Ln9.f19_f19_mg17.QPC2000climo.derecho_intel.cam-outfrq3s_usecase
+ NLFAIL SMS_D_Ln9.f19_f19_mg17.QPC5M7.derecho_intel.cam-outfrq9s
+ NLFAIL SMS_D_Ln9.ne16_ne16_mg17.QPX2000.derecho_intel.cam-outfrq9s
+ NLFAIL SMS_Ld5.f09_f09_mg17.PC6.derecho_intel.cam-cam6_port_f09
+ NLFAIL SMS_Ln9.f19_f19_mg17.FHIST.derecho_intel.cam-outfrq9s_nochem
+ - namelist compare failures due to dust_emis_inparm namelist in drv_flds_in
+ otherwise bit-for-bit
+
+derecho/nvhpc/aux_cam:
+ DIFF ERS_Ln9_G4-a100-openacc.ne30pg3_ne30pg3_mg17.F2000dev.derecho_nvhpc.cam-outfrq9s_mg3_default
+ - difference due to switching dust emis scheme from Leung_2023 to Zender_2003
+
+izumi/nag/aux_cam:
+ FAIL DAE.f45_f45_mg37.FHS94.izumi_nag.cam-dae
+ - pre-existing failure - issue #670
+
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-carma_sea_salt
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_cosp
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_subcol
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QSPCAMS.izumi_nag.cam-outfrq3s
+ NLFAIL ERC_D_Ln9.mpasa480z32_mpasa480.FHS94.izumi_nag.cam-outfrq3s_usecase
+ NLFAIL ERC_D_Ln9.ne16_ne16_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase
+ NLFAIL ERC_D_Ln9.ne16pg3_ne16pg3_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase
+ NLFAIL ERC_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac
+ NLFAIL ERC_D_Ln9.T5_T5_mg37.QPC4.izumi_nag.cam-outfrq3s_usecase
+ NLFAIL ERI_D_Ln18.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac
+ NLFAIL ERI_D_Ln18.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8
+ NLFAIL ERI_D_Ln18.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s_bwic
+ NLFAIL ERI_D_Ln18.ne5pg3_ne5pg3_mg37.FADIAB.izumi_nag.cam-outfrq3s_bwic
+ NLFAIL ERP_Ln9.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf
+ NLFAIL ERS_Ln27.ne5pg3_ne5pg3_mg37.FKESSLER.izumi_nag.cam-outfrq9s
+ NLFAIL ERS_Ln9.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq9s
+ NLFAIL PEM_D_Ln9.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s
+ NLFAIL PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0
+ NLFAIL PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1
+ NLFAIL PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3
+ NLFAIL PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0
+ NLFAIL PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1
+ NLFAIL PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3
+ NLFAIL SMS_D_Ld2.f45_f45_mg37.PC5.izumi_nag.cam-outfrq24h_port
+ NLFAIL SMS_D_Ln3.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s
+ NLFAIL SMS_D_Ln6.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem
+ NLFAIL SMS_D_Ln7.T42_T42_mg17.QPSCAMC5.izumi_nag.cam-scmarm
+ NLFAIL SMS_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-rad_diag_mam
+ NLFAIL SMS_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_ba
+ NLFAIL SMS_D_Ln9_P1x1.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s
+ NLFAIL SMS_P48x1_D_Ln3.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase
+ NLFAIL SUB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s
+ NLFAIL TMC_D.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac
+ NLFAIL TMC_D.T5_T5_mg37.QPC5.izumi_nag.cam-ghgrmp_e8
+ - namelist compare failures due to dust_emis_inparm namelist in drv_flds_in
+ otherwise bit-for-bit
+
+izumi/gnu/aux_cam:
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.FADIAB.izumi_gnu.cam-terminator
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC4.izumi_gnu.cam-outfrq3s_diags
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_gnu.cam-outfrq3s_unicon
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_gnu.cam-rad_diag
+ NLFAIL ERC_D_Ln9.f10_f10_mg37.QPSPCAMM.izumi_gnu.cam-outfrq3s
+ NLFAIL ERC_D_Ln9.ne5_ne5_mg37.QPC4.izumi_gnu.cam-outfrq3s_nudging_ne5_L26
+ NLFAIL ERC_D_Ln9.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq3s_ba
+ NLFAIL ERC_D_Ln9.ne5pg2_ne5pg2_mg37.FADIAB.izumi_gnu.cam-outfrq3s
+ NLFAIL ERC_D_Ln9.ne5pg3_ne5pg3_mg37.FADIAB.izumi_gnu.cam-outfrq3s
+ NLFAIL ERI_D_Ln18.T5_T5_mg37.QPC4.izumi_gnu.cam-co2rmp
+ NLFAIL ERP_D_Ln9.C48_C48_mg17.QPC6.izumi_gnu.cam-outfrq9s
+ NLFAIL ERP_D_Ln9.ne3pg3_ne3pg3_mg37.QPC6.izumi_gnu.cam-outfrq9s_rrtmgp
+ NLFAIL ERP_Ln9.ne5_ne5_mg37.FHS94.izumi_gnu.cam-outfrq9s
+ NLFAIL ERP_Ln9.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s
+ NLFAIL PEM_D_Ln9.ne5pg3_ne5pg3_mg37.FADIAB.izumi_gnu.cam-outfrq3s
+ NLFAIL PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0
+ NLFAIL PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1
+ NLFAIL PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3
+ NLFAIL SCT_D_Ln7.ne3_ne3_mg37.QPC6.izumi_gnu.cam-scm_prep_c6
+ NLFAIL SCT_D_Ln7.T42_T42_mg17.QPC4.izumi_gnu.cam-scm_prep
+ NLFAIL SCT_D_Ln7.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6
+ NLFAIL SMS_D_Ln3.f10_f10_mg37.QPMOZ.izumi_gnu.cam-outfrq3s_chemproc
+ NLFAIL SMS_D_Ln9.f10_f10_mg37.QPWmaC4.izumi_gnu.cam-outfrq9s_apmee
+ NLFAIL SMS_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac
+ NLFAIL SMS_Ld5.f09_f09_mg17.PC6.izumi_gnu.cam-cam6_port_f09_rrtmgp
+ - namelist compare failures due to dust_emis_inparm namelist in drv_flds_in
+ otherwise bit-for-bit
+
+Summarize any changes to answers: larger than roundoff for cam7, otherwise bit-for-bit
+
+===============================================================
+===============================================================
+
+Tag name: cam6_4_027
+Originator(s): fvitt
+Date: 3 Sep 2024
+One-line Summary: Update land model tag to ctsm5.2.027
+Github PR URL: https://github.com/ESCOMP/CAM/pull/1140
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+ Update of the CTSM external is needed for new dust emissions capabilities.
+ Issue #1139
+
+ The changes which affect CAM are summarized as:
+ ctsm5.2.016 -- changes answers for clm6_0 for crop grid cells
+ ctsm5.2.020 -- changes answers for all physics options for MEGAN BGVOC's which will affect CAM-Chem simulations
+ ctsm5.2.026 -- change answers for clm6_0 over urban grid cells
+
+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
+
+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 .gitmodules
+M components/clm
+ - update ctsm to ctsm5.2.027
+
+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.
+
+derecho/intel/aux_cam:
+
+ FAIL ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s
+ - pre-existing failure due to HEMCO not having reproducible results issues #1018 and #856
+
+ PEND SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s
+ - pre-existing failures -- need fix in CLM external
+
+ DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s
+ DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s_rrtmgp
+ DIFF ERP_Ld3.f09_f09_mg17.FWHIST.derecho_intel.cam-reduced_hist1d
+ DIFF ERP_Lh12.f19_f19_mg17.FW4madSD.derecho_intel.cam-outfrq3h
+ DIFF ERP_Ln9.C96_C96_mg17.F2000climo.derecho_intel.cam-outfrq9s_mg3
+ DIFF ERP_Ln9.f09_f09_mg17.F1850.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.f09_f09_mg17.F2000climo.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.f09_f09_mg17.FHIST_BDRD.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.f19_f19_mg17.FWsc1850.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.ne30pg3_ne30pg3_mg17.FCnudged.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s
+ DIFF ERS_Ld3.f10_f10_mg37.F1850.derecho_intel.cam-outfrq1d_14dec_ghg_cam7
+ DIFF ERS_Ln9.f09_f09_mg17.FX2000.derecho_intel.cam-outfrq9s
+ DIFF ERS_Ln9.f19_f19_mg17.FSPCAMS.derecho_intel.cam-outfrq9s
+ DIFF ERS_Ln9.f19_f19_mg17.FXSD.derecho_intel.cam-outfrq9s
+ DIFF ERS_Ln9_P288x1.mpasa120_mpasa120.F2000climo.derecho_intel.cam-outfrq9s_mpasa120
+ DIFF ERS_Ln9_P36x1.mpasa480_mpasa480.F2000climo.derecho_intel.cam-outfrq9s_mpasa480
+ DIFF SMS_D_Ln9.f09_f09_mg17.FCts2nudged.derecho_intel.cam-outfrq9s_leapday
+ DIFF SMS_D_Ln9.f09_f09_mg17.FCvbsxHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f09_f09_mg17.FSD.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s_waccm_ma_mam4
+ DIFF SMS_D_Ln9.f19_f19_mg17.FXHIST.derecho_intel.cam-outfrq9s_amie
+ DIFF SMS_D_Ln9.ne16pg3_ne16pg3_mg17.FX2000.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FCts4MTHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FMTHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9_P1280x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9_P1280x1.ne30pg3_ne30pg3_mg17.FCLTHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.T42_T42.FSCAMARM97.derecho_intel.cam-outfrq9s
+ DIFF SMS_Ld1.f09_f09_mg17.FCHIST_GC.derecho_intel.cam-outfrq1d
+ DIFF SMS_Ld1.f09_f09_mg17.FW2000climo.derecho_intel.cam-outfrq1d
+ DIFF SMS_Ld1.ne30pg3_ne30pg3_mg17.FC2010climo.derecho_intel.cam-outfrq1d
+ DIFF SMS_Lh12.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq3h
+ DIFF SMS_Lm13.f10_f10_mg37.F2000climo.derecho_intel.cam-outfrq1m
+ DIFF SMS_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-nudging
+ DIFF SMS_Ln9.f09_f09_mg17.FW1850.derecho_intel.cam-reduced_hist3s
+ DIFF SMS_Ln9.f19_f19.F2000climo.derecho_intel.cam-silhs
+ DIFF SMS_Ln9.f19_f19_mg17.FHIST.derecho_intel.cam-outfrq9s_nochem
+ DIFF SMS_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s_rrtmgp
+ - expected baseline test failures
+
+derecho/nvhpc/aux_cam:
+ DIFF ERS_Ln9_G4-a100-openacc.ne30pg3_ne30pg3_mg17.F2000dev.derecho_nvhpc.cam-outfrq9s_mg3_default
+ - expected baseline test failure
+
+izumi/nag/aux_cam:
+ FAIL DAE.f45_f45_mg37.FHS94.izumi_nag.cam-dae
+ - pre-existing failure - issue #670
+
+izumi/gnu/aux_cam:
+ DIFF SMS_P48x1_D_Ln9.f19_f19_mg17.FW4madSD.izumi_gnu.cam-outfrq9s
+ - expected baseline test failure
+
+Summarize any changes to answers: larger than roundoff
+
+===============================================================
+===============================================================
+
+Tag name: cam6_4_026
+Originator(s): cacraig
+Date: August 29, 2024
+One-line Summary: Neglected to remove the 0.5*timestep call from zm_convr_run - done now
+Github PR URL: https://github.com/ESCOMP/CAM/pull/1137
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+ - Last change needed in https://github.com/ESCOMP/CAM/issues/1124
+
+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 src/physics/cam/zm_conv_intr.F90
+ - Remove "0.5*timestep" from call and replace with "timestep"
+
+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.
+
+derecho/intel/aux_cam:
+ ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s (Overall: FAIL) details:
+ - pre-existing failure due to HEMCO not having reproducible results issues #1018 and #856
+
+ SMS_D_Ln9_P1280x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.derecho_intel.cam-outfrq9s (Overall: FAIL) details:
+ SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s (Overall: PEND) details:
+ - pre-existing failures -- need fix in CLM external
+
+ ERC_D_Ln9.f19_f19_mg17.QPC6.derecho_intel.cam-outfrq3s_cosp (Overall: DIFF) details:
+ ERC_D_Ln9.f19_f19_mg17.QPMOZ.derecho_intel.cam-outfrq3s (Overall: DIFF) details:
+ ERC_D_Ln9.f19_f19_mg17.QPX2000.derecho_intel.cam-outfrq3s (Overall: DIFF) details:
+ ERC_D_Ln9.ne16_ne16_mg17.QPC5HIST.derecho_intel.cam-outfrq3s_usecase (Overall: DIFF) details:
+ ERC_D_Ln9_P144x1.ne16pg3_ne16pg3_mg17.QPC6HIST.derecho_intel.cam-outfrq3s_ttrac_usecase (Overall: DIFF) details:
+ ERI_D_Ln18.f45_f45_mg37.QPC41850.derecho_intel.cam-co2rmp_usecase (Overall: DIFF) details:
+ ERP_D_Ln9.f19_f19_mg17.QPC6.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s_rrtmgp (Overall: DIFF) details:
+ ERP_D_Ln9_P64x2.f09_f09_mg17.QSC6.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ld3.f09_f09_mg17.FWHIST.derecho_intel.cam-reduced_hist1d (Overall: DIFF) details:
+ ERP_Lh12.f19_f19_mg17.FW4madSD.derecho_intel.cam-outfrq3h (Overall: DIFF) details:
+ ERP_Ln9.C96_C96_mg17.F2000climo.derecho_intel.cam-outfrq9s_mg3 (Overall: DIFF) details:
+ ERP_Ln9.f09_f09_mg17.F1850.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ln9.f09_f09_mg17.F2000climo.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ln9.f09_f09_mg17.FHIST_BDRD.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ln9.f19_f19_mg17.FWsc1850.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ln9.ne30pg3_ne30pg3_mg17.FCnudged.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERP_Ln9_P24x3.f45_f45_mg37.QPWmaC6.derecho_intel.cam-outfrq9s_mee_fluxes (Overall: DIFF) details:
+ ERS_Ld3.f10_f10_mg37.F1850.derecho_intel.cam-outfrq1d_14dec_ghg_cam7 (Overall: DIFF) details:
+ ERS_Ln9.f09_f09_mg17.FX2000.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERS_Ln9.f19_f19_mg17.FXSD.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ ERS_Ln9_P288x1.mpasa120_mpasa120.F2000climo.derecho_intel.cam-outfrq9s_mpasa120 (Overall: DIFF) details:
+ ERS_Ln9_P36x1.mpasa480_mpasa480.F2000climo.derecho_intel.cam-outfrq9s_mpasa480 (Overall: DIFF) details:
+ SCT_D_Ln7.ne3_ne3_mg37.QPC5.derecho_intel.cam-scm_prep (Overall: DIFF) details:
+ SCT_D_Ln7.T42_T42_mg17.QPC5.derecho_intel.cam-scm_prep (Overall: DIFF) details:
+ SMS_D_Ld2.f19_f19_mg17.QPC5HIST.derecho_intel.cam-volc_usecase (Overall: DIFF) details:
+ SMS_D_Ln9.f09_f09_mg17.FCts2nudged.derecho_intel.cam-outfrq9s_leapday (Overall: DIFF) details:
+ SMS_D_Ln9.f09_f09_mg17.FCvbsxHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9.f09_f09_mg17.FSD.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: DIFF) details:
+ SMS_D_Ln9.f19_f19_mg17.FXHIST.derecho_intel.cam-outfrq9s_amie (Overall: DIFF) details:
+ SMS_D_Ln9.f19_f19_mg17.QPC2000climo.derecho_intel.cam-outfrq3s_usecase (Overall: DIFF) details:
+ SMS_D_Ln9.f19_f19_mg17.QPC5M7.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9.ne16_ne16_mg17.QPX2000.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9.ne16pg3_ne16pg3_mg17.FX2000.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FCts4MTHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FMTHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_D_Ln9_P1280x1.ne30pg3_ne30pg3_mg17.FCLTHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
+ SMS_Ld1.f09_f09_mg17.FCHIST_GC.derecho_intel.cam-outfrq1d (Overall: DIFF) details:
+ SMS_Ld1.f09_f09_mg17.FW2000climo.derecho_intel.cam-outfrq1d (Overall: DIFF) details:
+ SMS_Ld1.ne30pg3_ne30pg3_mg17.FC2010climo.derecho_intel.cam-outfrq1d (Overall: DIFF) details:
+ SMS_Lh12.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq3h (Overall: DIFF) details:
+ SMS_Lm13.f10_f10_mg37.F2000climo.derecho_intel.cam-outfrq1m (Overall: DIFF) details:
+ SMS_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-nudging (Overall: DIFF) details:
+ SMS_Ln9.f09_f09_mg17.FW1850.derecho_intel.cam-reduced_hist3s (Overall: DIFF) details:
+ SMS_Ln9.f19_f19_mg17.FHIST.derecho_intel.cam-outfrq9s_nochem (Overall: DIFF) details:
+ SMS_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s_rrtmgp (Overall: DIFF) details:
+ - baseline changes due to change in ZM
+
+derecho/nvhpc/aux_cam:
+ ERS_Ln9_G4-a100-openacc.ne30pg3_ne30pg3_mg17.F2000dev.derecho_nvhpc.cam-outfrq9s_mg3_default (Overall: DIFF) details:
+ - baseline change due to change in ZM
+
+izumi/nag/aux_cam:
+ ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-carma_sea_salt (Overall: DIFF) details:
+ ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_cosp (Overall: DIFF) details:
+ ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_subcol (Overall: DIFF) details:
+ ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am (Overall: DIFF) details:
+ ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist (Overall: DIFF) details:
+ ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ ERC_D_Ln9.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ ERC_D_Ln9.ne16_ne16_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase (Overall: DIFF) details:
+ ERC_D_Ln9.ne16pg3_ne16pg3_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase (Overall: DIFF) details:
+ ERC_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac (Overall: DIFF) details:
+ ERC_D_Ln9.T5_T5_mg37.QPC4.izumi_nag.cam-outfrq3s_usecase (Overall: DIFF) details:
+ ERI_D_Ln18.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac (Overall: DIFF) details:
+ ERI_D_Ln18.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 (Overall: DIFF) details:
+ PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: DIFF) details:
+ PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: DIFF) details:
+ PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: DIFF) details:
+ PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: DIFF) details:
+ PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: DIFF) details:
+ PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: DIFF) details:
+ SMS_D_Ln3.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ SMS_D_Ln6.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem (Overall: DIFF) details:
+ SMS_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-rad_diag_mam (Overall: DIFF) details:
+ SMS_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_ba (Overall: DIFF) details:
+ SMS_P48x1_D_Ln3.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase (Overall: DIFF) details:
+ SUB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
+ TMC_D.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac (Overall: DIFF) details:
+ TMC_D.T5_T5_mg37.QPC5.izumi_nag.cam-ghgrmp_e8 (Overall: DIFF) details:
+ - baseline change due to change in ZM
+
+izumi/gnu/aux_cam:
+ DAE.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details:
+ - pre-existing failure - issue #670
+
+ ERC_D_Ln9.f10_f10_mg37.QPC4.izumi_gnu.cam-outfrq3s_diags (Overall: DIFF) details:
+ ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_gnu.cam-rad_diag (Overall: DIFF) details:
+ ERC_D_Ln9.ne5_ne5_mg37.QPC4.izumi_gnu.cam-outfrq3s_nudging_ne5_L26 (Overall: DIFF) details:
+ ERC_D_Ln9.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq3s_ba (Overall: DIFF) details:
+ ERI_D_Ln18.T5_T5_mg37.QPC4.izumi_gnu.cam-co2rmp (Overall: DIFF) details:
+ ERP_D_Ln9.C48_C48_mg17.QPC6.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
+ ERP_D_Ln9.ne3pg3_ne3pg3_mg37.QPC6.izumi_gnu.cam-outfrq9s_rrtmgp (Overall: DIFF) details:
+ ERP_Ln9.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
+ PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 (Overall: DIFF) details:
+ PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 (Overall: DIFF) details:
+ PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 (Overall: DIFF) details:
+ SCT_D_Ln7.ne3_ne3_mg37.QPC6.izumi_gnu.cam-scm_prep_c6 (Overall: DIFF) details:
+ SCT_D_Ln7.T42_T42_mg17.QPC4.izumi_gnu.cam-scm_prep (Overall: DIFF) details:
+ SCT_D_Ln7.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 (Overall: DIFF) details:
+ SMS_D_Ln3.f10_f10_mg37.QPMOZ.izumi_gnu.cam-outfrq3s_chemproc (Overall: DIFF) details:
+ SMS_D_Ln9.f10_f10_mg37.QPWmaC4.izumi_gnu.cam-outfrq9s_apmee (Overall: DIFF) details:
+ SMS_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac (Overall: DIFF) details:
+ SMS_P48x1_D_Ln9.f19_f19_mg17.FW4madSD.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
+ - baseline change due to change in ZM
+
+Summarize any changes to answers, i.e.,
+ Adam Harrington felt comfortable with the expected answer changes due to his previous run without this change. He felt they would
+ be round-off differences and authorized this commit.
+
+===============================================================
+===============================================================
+
+Tag name: cam6_4_025
+Originator(s): fvitt, tilmes
+Date: 28 Aug 2024
+One-line Summary: Repartition dust deposition fluxes passed to surface models
+Github PR URL: https://github.com/ESCOMP/CAM/pull/1096
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+
+ Repartition the modal dust deposition fluxes into 4 bulk bins for passing to the surface
+ models. The aerosol fluxes code was refactored in a generalized way which can easily be
+ expanded for other aerosol representations, such as CARMA, and aerosol species types.
+
+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
+
+List all files eliminated: N/A
+
+List all files added and what they do:
+A src/chemistry/aerosol/aero_deposition_cam.F90
+ - aerosol model independent module that uses aerosol abstract interface
+ to prepare deposition fluxes passed to surface models
+
+List all existing files that have been modified, and describe the changes:
+M src/chemistry/aerosol/aerosol_properties_mod.F90
+M src/chemistry/aerosol/modal_aerosol_properties_mod.F90
+ - add interface for calculating generalized bulk fluxes
+
+M src/chemistry/modal_aero/aero_model.F90
+ - replace use of modal_aero_deposition with generalized aero_deposition_cam
+
+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.
+
+derecho/intel/aux_cam:
+ PEND ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s
+ - pre-existing failure due to HEMCO not having reproducible results issues #1018 and #856
+
+ FAIL SMS_D_Ln9_P1280x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.derecho_intel.cam-outfrq9s
+ FAIL SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s
+ - pre-existing failures -- need fix in CLM external
+
+ DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s
+ DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s_rrtmgp
+ DIFF ERP_Ld3.f09_f09_mg17.FWHIST.derecho_intel.cam-reduced_hist1d
+ DIFF ERP_Ln9.C96_C96_mg17.F2000climo.derecho_intel.cam-outfrq9s_mg3
+ DIFF ERP_Ln9.f09_f09_mg17.F1850.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.f09_f09_mg17.F2000climo.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.f09_f09_mg17.FHIST_BDRD.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.f19_f19_mg17.FWsc1850.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.ne30pg3_ne30pg3_mg17.FCnudged.derecho_intel.cam-outfrq9s
+ DIFF ERP_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s
+ DIFF ERS_Ld3.f10_f10_mg37.F1850.derecho_intel.cam-outfrq1d_14dec_ghg_cam7
+ DIFF ERS_Ln9.f09_f09_mg17.FX2000.derecho_intel.cam-outfrq9s
+ DIFF ERS_Ln9.f19_f19_mg17.FXSD.derecho_intel.cam-outfrq9s
+ DIFF ERS_Ln9_P288x1.mpasa120_mpasa120.F2000climo.derecho_intel.cam-outfrq9s_mpasa120
+ DIFF ERS_Ln9_P36x1.mpasa480_mpasa480.F2000climo.derecho_intel.cam-outfrq9s_mpasa480
+ DIFF SMS_D_Ln9.f09_f09_mg17.FCts2nudged.derecho_intel.cam-outfrq9s_leapday
+ DIFF SMS_D_Ln9.f09_f09_mg17.FCvbsxHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f09_f09_mg17.FSD.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s_waccm_ma_mam4
+ DIFF SMS_D_Ln9.f19_f19_mg17.FXHIST.derecho_intel.cam-outfrq9s_amie
+ DIFF SMS_D_Ln9.ne16pg3_ne16pg3_mg17.FX2000.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FCts4MTHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FMTHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9_P1280x1.ne30pg3_ne30pg3_mg17.FCLTHIST.derecho_intel.cam-outfrq9s
+ DIFF SMS_D_Ln9.T42_T42.FSCAMARM97.derecho_intel.cam-outfrq9s
+ DIFF SMS_Ld1.f09_f09_mg17.FCHIST_GC.derecho_intel.cam-outfrq1d
+ DIFF SMS_Ld1.f09_f09_mg17.FW2000climo.derecho_intel.cam-outfrq1d
+ DIFF SMS_Ld1.ne30pg3_ne30pg3_mg17.FC2010climo.derecho_intel.cam-outfrq1d
+ DIFF SMS_Lh12.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq3h
+ DIFF SMS_Lm13.f10_f10_mg37.F2000climo.derecho_intel.cam-outfrq1m
+ DIFF SMS_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-nudging
+ DIFF SMS_Ln9.f09_f09_mg17.FW1850.derecho_intel.cam-reduced_hist3s
+ DIFF SMS_Ln9.f19_f19.F2000climo.derecho_intel.cam-silhs
+ DIFF SMS_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s_rrtmgp
+ - expected baseline failures due to changes in dust deposition fluxes to surface models
+
+derecho/nvhpc/aux_cam:
+ DIFF ERS_Ln9_G4-a100-openacc.ne30pg3_ne30pg3_mg17.F2000dev.derecho_nvhpc.cam-outfrq9s_mg3_default
+ - expected baseline failure due to changes in dust deposition fluxes to surface models
+
+izumi/nag/aux_cam:
+ FAIL DAE.f45_f45_mg37.FHS94.izumi_nag.cam-dae
+ - pre-existing failure - issue #670
+
+izumi/gnu/aux_cam: All PASS
+
+Summarize any changes to answers:
+ larger than roundoff but same climate
+
+URL for AMWG diagnostics output used to validate new climate:
+
+ https://acomstaff.acom.ucar.edu/tilmes/amwg/cam7/f.e23_beta02.FLTHIST_ne30.surf_flux_1995_2004_vs_f.e23_beta02.FLTHIST_ne30.001_1995_2004/website/index.html
+
+ The land diagnostics are here:
+
+ https://webext.cgd.ucar.edu/FLTHIST/f.e23_beta02.FLTHIST_ne30.surf_flux/lnd/f.e23_beta02.FLTHIST_ne30.surf_flux_1995_2004-f.e23_beta02.FLTHIST_ne30.001_1995_2004/setsIndex.html
+
+===============================================================
===============================================================
Tag name:
diff --git a/src/chemistry/aerosol/aero_deposition_cam.F90 b/src/chemistry/aerosol/aero_deposition_cam.F90
new file mode 100644
index 0000000000..d22119c6b4
--- /dev/null
+++ b/src/chemistry/aerosol/aero_deposition_cam.F90
@@ -0,0 +1,336 @@
+module aero_deposition_cam
+!------------------------------------------------------------------------------
+! Purpose:
+!
+! Partition the contributions from aerosols of wet and dry
+! deposition at the surface into the fields passed to the coupler.
+!------------------------------------------------------------------------------
+
+ use shr_kind_mod, only: r8 => shr_kind_r8
+ use shr_kind_mod, only: cl => shr_kind_cl
+ use constituents, only: cnst_get_ind, pcnst
+ use camsrfexch, only: cam_out_t
+ use cam_abortutils,only: endrun
+ use aerosol_properties_mod, only: aero_name_len
+ use aerosol_properties_mod, only: aerosol_properties
+
+ implicit none
+
+ private
+
+! Public interfaces
+
+ public :: aero_deposition_cam_init
+ public :: aero_deposition_cam_setwet
+ public :: aero_deposition_cam_setdry
+
+! Private module data
+
+ integer :: bcphi_ndx( pcnst ) = -1
+ integer :: bcphi_cnt = 0
+ integer :: bcpho_ndx( pcnst ) = -1
+ integer :: bcpho_cnt = 0
+ integer :: ocphi_ndx( pcnst ) = -1
+ integer :: ocphi_cnt = 0
+ integer :: ocpho_ndx( pcnst ) = -1
+ integer :: ocpho_cnt = 0
+
+ class(aerosol_properties), pointer :: aero_props=>null()
+ integer :: nele_tot=0 ! total number of aerosol elements
+
+ ! bulk dust bins (meters)
+
+ integer, parameter :: n_bulk_dst_bins = 4
+
+ ! CAM4 bulk dust bin sizes (https://doi.org/10.1002/2013MS000279)
+ real(r8), parameter :: bulk_dst_edges(n_bulk_dst_bins+1) = &
+ (/0.1e-6_r8, 1.0e-6_r8, 2.5e-6_r8, 5.0e-6_r8, 10.e-6_r8/)
+
+contains
+
+ !============================================================================
+ subroutine aero_deposition_cam_init(aero_props_in)
+
+ class(aerosol_properties),target, intent(in) :: aero_props_in
+
+ integer :: pcnt, scnt
+ character(len=*), parameter :: subrname = 'aero_deposition_cam_init'
+
+ ! construct the aerosol properties object
+ aero_props => aero_props_in
+
+ ! set the cam constituent indices and determine the counts
+ ! for the specified aerosol types
+
+ ! black carbons
+ call get_indices( type='black-c', hydrophilic=.true., indices=bcphi_ndx, count=bcphi_cnt )
+ call get_indices( type='black-c', hydrophilic=.false., indices=bcpho_ndx, count=bcpho_cnt )
+
+ ! primary and secondary organics
+ call get_indices( type='p-organic',hydrophilic=.true., indices=ocphi_ndx, count=pcnt )
+ call get_indices( type='s-organic',hydrophilic=.true., indices=ocphi_ndx(pcnt+1:), count=scnt )
+ ocphi_cnt = pcnt+scnt
+
+ call get_indices( type='p-organic',hydrophilic=.false., indices=ocpho_ndx, count=pcnt )
+ call get_indices( type='s-organic',hydrophilic=.false., indices=ocpho_ndx(pcnt+1:), count=scnt )
+ ocpho_cnt = pcnt+scnt
+
+ ! total number of aerosol elements
+ nele_tot = aero_props%ncnst_tot()
+
+ contains
+
+ !==========================================================================
+ ! returns CAM constituent indices of the aerosol tracers (and count)
+ !==========================================================================
+ subroutine get_indices( type, hydrophilic, indices, count)
+
+ character(len=*), intent(in) :: type
+ logical, intent(in ) :: hydrophilic
+ integer, intent(out) :: indices(:)
+ integer, intent(out) :: count
+
+ integer :: ibin,ispc, ndx, nspec
+ character(len=aero_name_len) :: spec_type, spec_name
+
+ count = 0
+ indices(:) = -1
+
+ ! loop through aerosol bins / modes
+ do ibin = 1, aero_props%nbins()
+
+ ! check if the bin/mode is hydrophilic
+ if ( aero_props%hydrophilic(ibin) .eqv. hydrophilic ) then
+ do ispc = 1, aero_props%nspecies(ibin)
+
+ call aero_props%get(ibin,ispc, spectype=spec_type, specname=spec_name)
+
+ if (spec_type==type) then
+
+ ! get CAM constituent index
+ call cnst_get_ind(spec_name, ndx, abort=.false.)
+ if (ndx>0) then
+ count = count+1
+ indices(count) = ndx
+ endif
+
+ endif
+
+ enddo
+ endif
+
+ enddo
+
+ end subroutine get_indices
+
+ end subroutine aero_deposition_cam_init
+
+ !============================================================================
+ ! Set surface wet deposition fluxes passed to coupler.
+ !============================================================================
+ subroutine aero_deposition_cam_setwet(aerdepwetis, aerdepwetcw, cam_out)
+
+ ! Arguments:
+ real(r8), intent(in) :: aerdepwetis(:,:) ! aerosol wet deposition (interstitial)
+ real(r8), intent(in) :: aerdepwetcw(:,:) ! aerosol wet deposition (cloud water)
+ type(cam_out_t), intent(inout) :: cam_out ! cam export state
+
+ ! Local variables:
+ integer :: i, ispec, ibin, mm, ndx
+ integer :: ncol ! number of columns
+
+ real(r8) :: dep_fluxes(nele_tot)
+ real(r8) :: dst_fluxes(n_bulk_dst_bins)
+ character(len=aero_name_len) :: specname, name_c
+ integer :: errstat
+ character(len=cl) :: errstr
+
+ ncol = cam_out%ncol
+
+ cam_out%bcphiwet(:) = 0._r8
+ cam_out%ocphiwet(:) = 0._r8
+ cam_out%dstwet1(:) = 0._r8
+ cam_out%dstwet2(:) = 0._r8
+ cam_out%dstwet3(:) = 0._r8
+ cam_out%dstwet4(:) = 0._r8
+
+ ! derive cam_out variables from deposition fluxes
+ ! note: wet deposition fluxes are negative into surface,
+ ! dry deposition fluxes are positive into surface.
+ ! srf models want positive definite fluxes.
+ do i = 1, ncol
+
+ ! hydrophilic black carbon fluxes
+ do ispec=1,bcphi_cnt
+ cam_out%bcphiwet(i) = cam_out%bcphiwet(i) &
+ - (aerdepwetis(i,bcphi_ndx(ispec))+aerdepwetcw(i,bcphi_ndx(ispec)))
+ enddo
+
+ ! hydrophobic black carbon fluxes
+ do ispec=1,bcpho_cnt
+ cam_out%bcphiwet(i) = cam_out%bcphiwet(i) &
+ - (aerdepwetis(i,bcpho_ndx(ispec))+aerdepwetcw(i,bcpho_ndx(ispec)))
+ enddo
+
+ ! hydrophilic organic carbon fluxes
+ do ispec=1,ocphi_cnt
+ cam_out%ocphiwet(i) = cam_out%ocphiwet(i) &
+ - (aerdepwetis(i,ocphi_ndx(ispec))+aerdepwetcw(i,ocphi_ndx(ispec)))
+ enddo
+
+ ! hydrophobic organic carbon fluxes
+ do ispec=1,ocpho_cnt
+ cam_out%ocphiwet(i) = cam_out%ocphiwet(i) &
+ - (aerdepwetis(i,ocpho_ndx(ispec))+aerdepwetcw(i,ocpho_ndx(ispec)))
+ enddo
+
+ ! dust fluxes
+
+ dep_fluxes = 0._r8
+ dst_fluxes = 0._r8
+
+ do ibin = 1,aero_props%nbins()
+ do ispec = 0,aero_props%nmasses(ibin)
+ if (ispec==0) then
+ call aero_props%num_names(ibin, specname, name_c)
+ else
+ call aero_props%get(ibin,ispec, specname=specname)
+ end if
+ call cnst_get_ind(specname, ndx, abort=.false.)
+ if (ndx>0) then
+ mm = aero_props%indexer(ibin,ispec)
+ dep_fluxes(mm) = - (aerdepwetis(i,ndx)+aerdepwetcw(i,ndx))
+ end if
+ end do
+ end do
+
+ ! rebin dust fluxes to bulk dust bins
+ call aero_props%rebin_bulk_fluxes('dust', dep_fluxes, bulk_dst_edges, dst_fluxes, errstat, errstr)
+ if (errstat/=0) then
+ call endrun('aero_deposition_cam_setwet: '//trim(errstr))
+ end if
+
+ cam_out%dstwet1(i) = cam_out%dstwet1(i) + dst_fluxes(1)
+ cam_out%dstwet2(i) = cam_out%dstwet2(i) + dst_fluxes(2)
+ cam_out%dstwet3(i) = cam_out%dstwet3(i) + dst_fluxes(3)
+ cam_out%dstwet4(i) = cam_out%dstwet4(i) + dst_fluxes(4)
+
+ ! in rare cases, integrated deposition tendency is upward
+ if (cam_out%bcphiwet(i) < 0._r8) cam_out%bcphiwet(i) = 0._r8
+ if (cam_out%ocphiwet(i) < 0._r8) cam_out%ocphiwet(i) = 0._r8
+ if (cam_out%dstwet1(i) < 0._r8) cam_out%dstwet1(i) = 0._r8
+ if (cam_out%dstwet2(i) < 0._r8) cam_out%dstwet2(i) = 0._r8
+ if (cam_out%dstwet3(i) < 0._r8) cam_out%dstwet3(i) = 0._r8
+ if (cam_out%dstwet4(i) < 0._r8) cam_out%dstwet4(i) = 0._r8
+
+ enddo
+
+ end subroutine aero_deposition_cam_setwet
+
+ !============================================================================
+ ! Set surface dry deposition fluxes passed to coupler.
+ !============================================================================
+ subroutine aero_deposition_cam_setdry(aerdepdryis, aerdepdrycw, cam_out)
+
+ ! Arguments:
+ real(r8), intent(in) :: aerdepdryis(:,:) ! aerosol dry deposition (interstitial)
+ real(r8), intent(in) :: aerdepdrycw(:,:) ! aerosol dry deposition (cloud water)
+ type(cam_out_t), intent(inout) :: cam_out ! cam export state
+
+ ! Local variables:
+ integer :: i, ispec, ibin, mm, ndx
+ integer :: ncol ! number of columns
+
+ real(r8) :: dep_fluxes(nele_tot)
+ real(r8) :: dst_fluxes(n_bulk_dst_bins)
+ character(len=aero_name_len) :: specname, name_c
+ integer :: errstat
+ character(len=cl) :: errstr
+
+ ncol = cam_out%ncol
+
+ cam_out%bcphidry(:) = 0._r8
+ cam_out%ocphidry(:) = 0._r8
+ cam_out%bcphodry(:) = 0._r8
+ cam_out%ocphodry(:) = 0._r8
+ cam_out%dstdry1(:) = 0._r8
+ cam_out%dstdry2(:) = 0._r8
+ cam_out%dstdry3(:) = 0._r8
+ cam_out%dstdry4(:) = 0._r8
+
+ ! derive cam_out variables from deposition fluxes
+ ! note: wet deposition fluxes are negative into surface,
+ ! dry deposition fluxes are positive into surface.
+ ! srf models want positive definite fluxes.
+ do i = 1, ncol
+
+ ! hydrophilic black carbon fluxes
+ do ispec=1,bcphi_cnt
+ cam_out%bcphidry(i) = cam_out%bcphidry(i) &
+ + (aerdepdryis(i,bcphi_ndx(ispec))+aerdepdrycw(i,bcphi_ndx(ispec)))
+ enddo
+
+ ! hydrophobic black carbon fluxes
+ do ispec=1,bcpho_cnt
+ cam_out%bcphodry(i) = cam_out%bcphodry(i) &
+ + (aerdepdryis(i,bcpho_ndx(ispec))+aerdepdrycw(i,bcpho_ndx(ispec)))
+ enddo
+
+ ! hydrophilic organic carbon fluxes
+ do ispec=1,ocphi_cnt
+ cam_out%ocphidry(i) = cam_out%ocphidry(i) &
+ + (aerdepdryis(i,ocphi_ndx(ispec))+aerdepdrycw(i,ocphi_ndx(ispec)))
+ enddo
+
+ ! hydrophobic organic carbon fluxes
+ do ispec=1,ocpho_cnt
+ cam_out%ocphodry(i) = cam_out%ocphodry(i) &
+ + (aerdepdryis(i,ocpho_ndx(ispec))+aerdepdrycw(i,ocpho_ndx(ispec)))
+ enddo
+
+ ! dust fluxes
+
+ dep_fluxes = 0._r8
+ dst_fluxes = 0._r8
+
+ do ibin = 1,aero_props%nbins()
+ do ispec = 0,aero_props%nspecies(ibin)
+ if (ispec==0) then
+ call aero_props%num_names(ibin, specname, name_c)
+ else
+ call aero_props%get(ibin,ispec, specname=specname)
+ end if
+ call cnst_get_ind(specname, ndx, abort=.false.)
+ if (ndx>0) then
+ mm = aero_props%indexer(ibin,ispec)
+ dep_fluxes(mm) = aerdepdryis(i,ndx)+aerdepdrycw(i,ndx)
+ end if
+ end do
+ end do
+
+ ! rebin dust fluxes to bulk dust bins
+ call aero_props%rebin_bulk_fluxes('dust', dep_fluxes, bulk_dst_edges, dst_fluxes, errstat, errstr)
+ if (errstat/=0) then
+ call endrun('aero_deposition_cam_setdry: '//trim(errstr))
+ end if
+
+ cam_out%dstdry1(i) = cam_out%dstdry1(i) + dst_fluxes(1)
+ cam_out%dstdry2(i) = cam_out%dstdry2(i) + dst_fluxes(2)
+ cam_out%dstdry3(i) = cam_out%dstdry3(i) + dst_fluxes(3)
+ cam_out%dstdry4(i) = cam_out%dstdry4(i) + dst_fluxes(4)
+
+ ! in rare cases, integrated deposition tendency is upward
+ if (cam_out%bcphidry(i) < 0._r8) cam_out%bcphidry(i) = 0._r8
+ if (cam_out%ocphidry(i) < 0._r8) cam_out%ocphidry(i) = 0._r8
+ if (cam_out%bcphodry(i) < 0._r8) cam_out%bcphodry(i) = 0._r8
+ if (cam_out%ocphodry(i) < 0._r8) cam_out%ocphodry(i) = 0._r8
+ if (cam_out%dstdry1(i) < 0._r8) cam_out%dstdry1(i) = 0._r8
+ if (cam_out%dstdry2(i) < 0._r8) cam_out%dstdry2(i) = 0._r8
+ if (cam_out%dstdry3(i) < 0._r8) cam_out%dstdry3(i) = 0._r8
+ if (cam_out%dstdry4(i) < 0._r8) cam_out%dstdry4(i) = 0._r8
+
+ enddo
+
+ end subroutine aero_deposition_cam_setdry
+
+end module aero_deposition_cam
diff --git a/src/chemistry/aerosol/aerosol_properties_mod.F90 b/src/chemistry/aerosol/aerosol_properties_mod.F90
index aadd56f87d..c94f277637 100644
--- a/src/chemistry/aerosol/aerosol_properties_mod.F90
+++ b/src/chemistry/aerosol/aerosol_properties_mod.F90
@@ -70,6 +70,8 @@ module aerosol_properties_mod
procedure(aero_min_mass_mean_rad), deferred :: min_mass_mean_rad
procedure(aero_optics_params), deferred :: optics_params
procedure(aero_bin_name), deferred :: bin_name
+ procedure(aero_rebin_bulk_fluxes), deferred :: rebin_bulk_fluxes
+ procedure(aero_hydrophilic), deferred :: hydrophilic
procedure :: final=>aero_props_final
end type aerosol_properties
@@ -91,12 +93,13 @@ end function aero_number_transported
! density
! hygroscopicity
! species type
+ ! species name
! short wave species refractive indices
! long wave species refractive indices
! species morphology
!------------------------------------------------------------------------
subroutine aero_props_get(self, bin_ndx, species_ndx, list_ndx, density, hygro, &
- spectype, specmorph, refindex_sw, refindex_lw)
+ spectype, specname, specmorph, refindex_sw, refindex_lw)
import :: aerosol_properties, r8
class(aerosol_properties), intent(in) :: self
integer, intent(in) :: bin_ndx ! bin index
@@ -105,6 +108,7 @@ subroutine aero_props_get(self, bin_ndx, species_ndx, list_ndx, density, hygro,
real(r8), optional, intent(out) :: density ! density (kg/m3)
real(r8), optional, intent(out) :: hygro ! hygroscopicity
character(len=*), optional, intent(out) :: spectype ! species type
+ character(len=*), optional, intent(out) :: specname ! species name
character(len=*), optional, intent(out) :: specmorph ! species morphology
complex(r8), pointer, optional, intent(out) :: refindex_sw(:) ! short wave species refractive indices
complex(r8), pointer, optional, intent(out) :: refindex_lw(:) ! long wave species refractive indices
@@ -378,6 +382,32 @@ function aero_bin_name(self, list_ndx, bin_ndx) result(name)
end function aero_bin_name
+ !------------------------------------------------------------------------------
+ ! returns bulk deposition fluxes of the specified species type
+ ! rebinned to specified diameter limits
+ !------------------------------------------------------------------------------
+ subroutine aero_rebin_bulk_fluxes(self, bulk_type, dep_fluxes, diam_edges, bulk_fluxes, &
+ error_code, error_string)
+ import :: aerosol_properties, r8
+ class(aerosol_properties), intent(in) :: self
+ character(len=*),intent(in) :: bulk_type ! aerosol type to rebin
+ real(r8), intent(in) :: dep_fluxes(:) ! kg/m2
+ real(r8), intent(in) :: diam_edges(:) ! meters
+ real(r8), intent(out) :: bulk_fluxes(:) ! kg/m2
+ integer, intent(out) :: error_code ! error code (0 if no error)
+ character(len=*), intent(out) :: error_string ! error string
+
+ end subroutine aero_rebin_bulk_fluxes
+
+ !------------------------------------------------------------------------------
+ ! Returns TRUE if bin is hydrophilic, otherwise FALSE
+ !------------------------------------------------------------------------------
+ logical function aero_hydrophilic(self, bin_ndx)
+ import :: aerosol_properties
+ class(aerosol_properties), intent(in) :: self
+ integer, intent(in) :: bin_ndx ! bin number
+ end function aero_hydrophilic
+
end interface
contains
diff --git a/src/chemistry/aerosol/modal_aerosol_properties_mod.F90 b/src/chemistry/aerosol/modal_aerosol_properties_mod.F90
index 66cee40480..54f64fa759 100644
--- a/src/chemistry/aerosol/modal_aerosol_properties_mod.F90
+++ b/src/chemistry/aerosol/modal_aerosol_properties_mod.F90
@@ -36,6 +36,8 @@ module modal_aerosol_properties_mod
procedure :: soluble
procedure :: min_mass_mean_rad
procedure :: bin_name
+ procedure :: rebin_bulk_fluxes
+ procedure :: hydrophilic
final :: destructor
end type modal_aerosol_properties
@@ -44,6 +46,8 @@ module modal_aerosol_properties_mod
procedure :: constructor
end interface modal_aerosol_properties
+ logical, parameter :: debug = .false.
+
contains
!------------------------------------------------------------------------------
@@ -182,12 +186,13 @@ end function number_transported
! density
! hygroscopicity
! species type
+ ! species name
! short wave species refractive indices
! long wave species refractive indices
! species morphology
!------------------------------------------------------------------------
subroutine get(self, bin_ndx, species_ndx, list_ndx, density, hygro, &
- spectype, specmorph, refindex_sw, refindex_lw)
+ spectype, specname, specmorph, refindex_sw, refindex_lw)
class(modal_aerosol_properties), intent(in) :: self
integer, intent(in) :: bin_ndx ! bin index
@@ -196,6 +201,7 @@ subroutine get(self, bin_ndx, species_ndx, list_ndx, density, hygro, &
real(r8), optional, intent(out) :: density ! density (kg/m3)
real(r8), optional, intent(out) :: hygro ! hygroscopicity
character(len=*), optional, intent(out) :: spectype ! species type
+ character(len=*), optional, intent(out) :: specname ! species name
character(len=*), optional, intent(out) :: specmorph ! species morphology
complex(r8), pointer, optional, intent(out) :: refindex_sw(:) ! short wave species refractive indices
complex(r8), pointer, optional, intent(out) :: refindex_lw(:) ! long wave species refractive indices
@@ -212,6 +218,10 @@ subroutine get(self, bin_ndx, species_ndx, list_ndx, density, hygro, &
density_aer=density, hygro_aer=hygro, spectype=spectype, &
refindex_aer_sw=refindex_sw, refindex_aer_lw=refindex_lw)
+ if (present(specname)) then
+ call rad_cnst_get_info(ilist, bin_ndx, species_ndx, spec_name=specname)
+ end if
+
if (present(specmorph)) then
specmorph = 'UNKNOWN'
end if
@@ -665,4 +675,114 @@ function bin_name(self, list_ndx, bin_ndx) result(name)
end function bin_name
+ !------------------------------------------------------------------------------
+ ! returns bulk deposition fluxes of the specified species type
+ ! rebinned to specified diameter limits
+ !------------------------------------------------------------------------------
+ subroutine rebin_bulk_fluxes(self, bulk_type, dep_fluxes, diam_edges, bulk_fluxes, &
+ error_code, error_string)
+ use infnan, only: nan, assignment(=)
+
+ class(modal_aerosol_properties), intent(in) :: self
+ character(len=*),intent(in) :: bulk_type ! aerosol type to rebin
+ real(r8), intent(in) :: dep_fluxes(:) ! kg/m2
+ real(r8), intent(in) :: diam_edges(:) ! meters
+ real(r8), intent(out) :: bulk_fluxes(:) ! kg/m2
+ integer, intent(out) :: error_code ! error code (0 if no error)
+ character(len=*), intent(out) :: error_string ! error string
+
+ real(r8) :: dns_dst ! kg/m3
+ real(r8) :: sigma_g, vmd, tmp, massfrac_bin(size(bulk_fluxes))
+ real(r8) :: Ntype, Mtype, Mtotal, Ntot
+ integer :: k,l,m,mm, nbulk
+ logical :: has_type, type_not_found
+
+ character(len=aero_name_len) :: spectype
+ character(len=aero_name_len) :: modetype
+
+ real(r8), parameter :: sqrtwo = sqrt(2._r8)
+ real(r8), parameter :: onethrd = 1._r8/3._r8
+
+ error_code = 0
+ error_string = ' '
+
+ type_not_found = .true.
+
+ nbulk = size(bulk_fluxes)
+
+ bulk_fluxes(:) = 0.0_r8
+
+ do m = 1,self%nbins()
+ Mtype = 0._r8
+ Mtotal = 0._r8
+ mm = self%indexer(m,0)
+ Ntot = dep_fluxes(mm) ! #/m2
+
+ has_type = .false.
+
+ do l = 1,self%nspecies(m)
+ mm = self%indexer(m,l)
+ call self%get(m,l, spectype=spectype, density=dns_dst) ! kg/m3
+ if (spectype==bulk_type) then
+ Mtype = dep_fluxes(mm) ! kg/m2
+ has_type = .true.
+ type_not_found = .false.
+ end if
+ Mtotal = Mtotal + dep_fluxes(mm) ! kg/m2
+ end do
+ mode_has_type: if (has_type) then
+ call rad_cnst_get_info(0, m, mode_type=modetype)
+ if (Ntot>1.e-40_r8 .and. Mtype>1.e-40_r8 .and. Mtotal>1.e-40_r8) then
+
+ call rad_cnst_get_mode_props(0, m, sigmag=sigma_g)
+ tmp = sqrtwo*log(sigma_g)
+
+ ! type number concentration
+ Ntype = Ntot * Mtype/Mtotal ! #/m2
+
+ ! volume median diameter (meters)
+ vmd = (6._r8*Mtype/(pi*Ntype*dns_dst))**onethrd * exp(1.5_r8*(log(sigma_g))**2)
+
+ massfrac_bin = 0._r8
+
+ do k = 1,nbulk
+ massfrac_bin(k) = 0.5_r8*( erf((log(diam_edges(k+1)/vmd))/tmp) &
+ - erf((log(diam_edges(k )/vmd))/tmp) )
+ bulk_fluxes(k) = bulk_fluxes(k) + massfrac_bin(k) * Mtype
+ end do
+
+ if (debug) then
+ if (abs(1._r8-sum(massfrac_bin)) > 1.e-6_r8) then
+ write(*,*) 'rebin_bulk_fluxes WARNING mode-num, massfrac_bin, sum(massfrac_bin) = ', &
+ m, massfrac_bin, sum(massfrac_bin)
+ end if
+ end if
+
+ end if
+ end if mode_has_type
+ end do
+
+ if (type_not_found) then
+ bulk_fluxes(:) = nan
+ error_code = 1
+ write(error_string,*) 'aerosol_properties::rebin_bulk_fluxes ERROR : ',trim(bulk_type),' not found'
+ end if
+
+ end subroutine rebin_bulk_fluxes
+
+ !------------------------------------------------------------------------------
+ ! Returns TRUE if bin is hydrophilic, otherwise FALSE
+ !------------------------------------------------------------------------------
+ logical function hydrophilic(self, bin_ndx)
+ class(modal_aerosol_properties), intent(in) :: self
+ integer, intent(in) :: bin_ndx ! bin number
+
+ character(len=aero_name_len) :: modetype
+
+ call rad_cnst_get_info(0, bin_ndx, mode_type=modetype)
+
+ hydrophilic = (trim(modetype) == 'accum')
+
+ end function hydrophilic
+
end module modal_aerosol_properties_mod
diff --git a/src/chemistry/bulk_aero/dust_model.F90 b/src/chemistry/bulk_aero/dust_model.F90
index 1a0ff4c5aa..6b559200c6 100644
--- a/src/chemistry/bulk_aero/dust_model.F90
+++ b/src/chemistry/bulk_aero/dust_model.F90
@@ -1,10 +1,12 @@
!===============================================================================
! Dust for Bulk Aerosol Model
!===============================================================================
-module dust_model
+module dust_model
use shr_kind_mod, only: r8 => shr_kind_r8, cl => shr_kind_cl
use spmd_utils, only: masterproc
use cam_abortutils, only: endrun
+ use cam_logfile, only: iulog
+ use shr_dust_emis_mod,only: is_dust_emis_zender, is_zender_soil_erod_from_atm
implicit none
private
@@ -34,8 +36,9 @@ module dust_model
real(r8) :: dust_dmt_vwr(dust_nbin)
real(r8) :: dust_stk_crc(dust_nbin)
- real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions
- character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset
+ real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions
+ character(len=cl) :: soil_erod_file = 'none' ! full pathname for soil erodibility dataset
+
contains
!=============================================================================
@@ -44,8 +47,8 @@ module dust_model
subroutine dust_readnl(nlfile)
use namelist_utils, only: find_group_name
- use units, only: getunit, freeunit
- use mpishorthand
+ use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_real8, mpi_success
+ use shr_dust_emis_mod, only: shr_dust_emis_readnl
character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
@@ -59,8 +62,7 @@ subroutine dust_readnl(nlfile)
! Read namelist
if (masterproc) then
- unitn = getunit()
- open( unitn, file=trim(nlfile), status='old' )
+ open( newunit=unitn, file=trim(nlfile), status='old' )
call find_group_name(unitn, 'dust_nl', status=ierr)
if (ierr == 0) then
read(unitn, dust_nl, iostat=ierr)
@@ -69,14 +71,34 @@ subroutine dust_readnl(nlfile)
end if
end if
close(unitn)
- call freeunit(unitn)
end if
-#ifdef SPMD
! Broadcast namelist variables
- call mpibcast(dust_emis_fact, 1, mpir8, 0, mpicom)
- call mpibcast(soil_erod_file, len(soil_erod_file), mpichar, 0, mpicom)
-#endif
+ call mpi_bcast(soil_erod_file, len(soil_erod_file), mpi_character, masterprocid, mpicom, ierr)
+ if (ierr/=mpi_success) then
+ call endrun(subname//' MPI_BCAST ERROR: soil_erod_file')
+ end if
+ call mpi_bcast(dust_emis_fact, 1, mpi_real8, masterprocid, mpicom, ierr)
+ if (ierr/=mpi_success) then
+ call endrun(subname//' MPI_BCAST ERROR: dust_emis_fact')
+ end if
+
+ call shr_dust_emis_readnl(mpicom, 'drv_flds_in')
+
+ if ((soil_erod_file /= 'none') .and. (.not.is_zender_soil_erod_from_atm())) then
+ call endrun(subname//': should not specify soil_erod_file if Zender soil erosion is not in CAM')
+ end if
+
+ if (masterproc) then
+ if (is_dust_emis_zender()) then
+ write(iulog,*) subname,': Zender_2003 dust emission method is being used.'
+ end if
+ if (is_zender_soil_erod_from_atm()) then
+ write(iulog,*) subname,': Zender soil erod file is handled in atm'
+ write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file)
+ write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact
+ end if
+ end if
end subroutine dust_readnl
@@ -95,7 +117,9 @@ subroutine dust_init()
dust_active = any(dust_indices(:) > 0)
if (.not.dust_active) return
- call soil_erod_init( dust_emis_fact, soil_erod_file )
+ if (is_zender_soil_erod_from_atm()) then
+ call soil_erod_init( dust_emis_fact, soil_erod_file )
+ endif
call dust_set_params( dust_nbin, dust_dmt_grd, dust_dmt_vwr, dust_stk_crc )
@@ -106,6 +130,7 @@ end subroutine dust_init
subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod )
use soil_erod_mod, only : soil_erod_fact
use soil_erod_mod, only : soil_erodibility
+ use cam_history_support, only : fillvalue
! args
integer, intent(in) :: ncol, lchnk
@@ -115,25 +140,44 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod )
! local vars
integer :: i, m, idst
+ real(r8) :: erodfctr(ncol)
real(r8), parameter :: dust_emis_sclfctr(dust_nbin) &
= (/ 0.011_r8/0.032456_r8, 0.087_r8/0.174216_r8, 0.277_r8/0.4085517_r8, 0.625_r8/0.384811_r8 /)
! set dust emissions
- col_loop: do i =1,ncol
+ if (is_zender_soil_erod_from_atm()) then
+
+ col_loop1: do i =1,ncol
+
+ soil_erod(i) = soil_erodibility( i, lchnk )
+
+ ! adjust emissions
+ do m = 1,dust_nbin
+
+ idst = dust_indices(m)
+ cflx(i,idst) = -dust_flux_in(i,m) &
+ * dust_emis_sclfctr(m)*soil_erod(i)/dust_emis_fact*1.15_r8
- soil_erod(i) = soil_erodibility( i, lchnk )
+ enddo
- ! adjust emissions based on soil erosion
- do m = 1,dust_nbin
+ end do col_loop1
- idst = dust_indices(m)
- cflx(i,idst) = -dust_flux_in(i,m) &
- * dust_emis_sclfctr(m)*soil_erod(i)/soil_erod_fact*1.15_r8
+ else
- enddo
+ col_loop2: do i =1,ncol
- end do col_loop
+ ! adjust emissions
+ do m = 1,dust_nbin
+
+ idst = dust_indices(m)
+ cflx(i,idst) = -dust_flux_in(i,m) * dust_emis_sclfctr(m) / dust_emis_fact
+
+ enddo
+
+ end do col_loop2
+
+ end if
end subroutine dust_emis
diff --git a/src/chemistry/modal_aero/aero_model.F90 b/src/chemistry/modal_aero/aero_model.F90
index d5be58e465..86236a0650 100644
--- a/src/chemistry/modal_aero/aero_model.F90
+++ b/src/chemistry/modal_aero/aero_model.F90
@@ -29,6 +29,7 @@ module aero_model
use modal_aero_wateruptake, only: modal_strat_sulfate
use mo_setsox, only: setsox, has_sox
+ use modal_aerosol_properties_mod, only: modal_aerosol_properties
implicit none
private
@@ -107,6 +108,8 @@ module aero_model
logical :: convproc_do_aer
+ class(modal_aerosol_properties), pointer :: aero_props=>null()
+
contains
!=============================================================================
@@ -194,7 +197,7 @@ subroutine aero_model_init( pbuf2d )
use modal_aero_calcsize, only: modal_aero_calcsize_init
use modal_aero_coag, only: modal_aero_coag_init
- use modal_aero_deposition, only: modal_aero_deposition_init
+ use aero_deposition_cam, only: aero_deposition_cam_init
use modal_aero_gasaerexch, only: modal_aero_gasaerexch_init
use modal_aero_newnuc, only: modal_aero_newnuc_init
use modal_aero_rename, only: modal_aero_rename_init
@@ -253,10 +256,11 @@ subroutine aero_model_init( pbuf2d )
call modal_aero_coag_init
call modal_aero_newnuc_init
- ! call modal_aero_deposition_init only if the user has not specified
+ ! call aero_deposition_cam_init only if the user has not specified
! prescribed aerosol deposition fluxes
if (.not.aerodep_flx_prescribed()) then
- call modal_aero_deposition_init
+ aero_props => modal_aerosol_properties()
+ call aero_deposition_cam_init(aero_props)
endif
if (convproc_do_aer) then
@@ -694,7 +698,7 @@ subroutine aero_model_drydep ( state, pbuf, obklen, ustar, cam_in, dt, cam_out,
use modal_aero_data, only: numptrcw_amode
use modal_aero_data, only: lmassptr_amode
use modal_aero_data, only: lmassptrcw_amode
- use modal_aero_deposition, only: set_srf_drydep
+ use aero_deposition_cam,only: aero_deposition_cam_setdry
! args
type(physics_state), intent(in) :: state ! Physics state variables
@@ -972,7 +976,7 @@ subroutine aero_model_drydep ( state, pbuf, obklen, ustar, cam_in, dt, cam_out,
! if the user has specified prescribed aerosol dep fluxes then
! do not set cam_out dep fluxes according to the prognostic aerosols
if (.not.aerodep_flx_prescribed()) then
- call set_srf_drydep(aerdepdryis, aerdepdrycw, cam_out)
+ call aero_deposition_cam_setdry(aerdepdryis, aerdepdrycw, cam_out)
endif
endsubroutine aero_model_drydep
@@ -981,10 +985,10 @@ subroutine aero_model_drydep ( state, pbuf, obklen, ustar, cam_in, dt, cam_out,
!=============================================================================
subroutine aero_model_wetdep( state, dt, dlf, cam_out, ptend, pbuf)
- use modal_aero_deposition, only: set_srf_wetdep
use wetdep, only: wetdepa_v2, wetdep_inputs_set, wetdep_inputs_t
use modal_aero_data
use modal_aero_convproc, only: deepconv_wetdep_history, ma_convproc_intr, convproc_do_evaprain_atonce
+ use aero_deposition_cam, only: aero_deposition_cam_setwet
! args
@@ -1635,7 +1639,7 @@ subroutine aero_model_wetdep( state, dt, dlf, cam_out, ptend, pbuf)
! if the user has specified prescribed aerosol dep fluxes then
! do not set cam_out dep fluxes according to the prognostic aerosols
if (.not. aerodep_flx_prescribed()) then
- call set_srf_wetdep(aerdepwetis, aerdepwetcw, cam_out)
+ call aero_deposition_cam_setwet(aerdepwetis, aerdepwetcw, cam_out)
endif
endsubroutine aero_model_wetdep
diff --git a/src/chemistry/modal_aero/dust_model.F90 b/src/chemistry/modal_aero/dust_model.F90
index 923ab9e3db..6213c47636 100644
--- a/src/chemistry/modal_aero/dust_model.F90
+++ b/src/chemistry/modal_aero/dust_model.F90
@@ -6,6 +6,8 @@ module dust_model
use spmd_utils, only: masterproc
use cam_abortutils, only: endrun
use modal_aero_data, only: ntot_amode, ndst=>nDust
+ use cam_logfile, only: iulog
+ use shr_dust_emis_mod,only: is_dust_emis_zender, is_zender_soil_erod_from_atm
implicit none
private
@@ -30,8 +32,8 @@ module dust_model
real(r8), allocatable :: dust_dmt_vwr(:)
real(r8), allocatable :: dust_stk_crc(:)
- real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions
- character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset
+ real(r8) :: dust_emis_fact = 0._r8 ! tuning parameter for dust emissions
+ character(len=cl) :: soil_erod_file = 'none' ! full pathname for soil erodibility dataset
logical :: dust_active = .false.
@@ -43,8 +45,8 @@ module dust_model
subroutine dust_readnl(nlfile)
use namelist_utils, only: find_group_name
- use units, only: getunit, freeunit
- use mpishorthand
+ use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_real8, mpi_success
+ use shr_dust_emis_mod, only: shr_dust_emis_readnl
character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
@@ -58,8 +60,7 @@ subroutine dust_readnl(nlfile)
! Read namelist
if (masterproc) then
- unitn = getunit()
- open( unitn, file=trim(nlfile), status='old' )
+ open( newunit=unitn, file=trim(nlfile), status='old' )
call find_group_name(unitn, 'dust_nl', status=ierr)
if (ierr == 0) then
read(unitn, dust_nl, iostat=ierr)
@@ -68,14 +69,34 @@ subroutine dust_readnl(nlfile)
end if
end if
close(unitn)
- call freeunit(unitn)
end if
-#ifdef SPMD
! Broadcast namelist variables
- call mpibcast(dust_emis_fact, 1, mpir8, 0, mpicom)
- call mpibcast(soil_erod_file, len(soil_erod_file), mpichar, 0, mpicom)
-#endif
+ call mpi_bcast(soil_erod_file, len(soil_erod_file), mpi_character, masterprocid, mpicom, ierr)
+ if (ierr/=mpi_success) then
+ call endrun(subname//' MPI_BCAST ERROR: soil_erod_file')
+ end if
+ call mpi_bcast(dust_emis_fact, 1, mpi_real8, masterprocid, mpicom, ierr)
+ if (ierr/=mpi_success) then
+ call endrun(subname//' MPI_BCAST ERROR: dust_emis_fact')
+ end if
+
+ call shr_dust_emis_readnl(mpicom, 'drv_flds_in')
+
+ if ((soil_erod_file /= 'none') .and. (.not.is_zender_soil_erod_from_atm())) then
+ call endrun(subname//': should not specify soil_erod_file if Zender soil erosion is not in CAM')
+ end if
+
+ if (masterproc) then
+ if (is_dust_emis_zender()) then
+ write(iulog,*) subname,': Zender_2003 dust emission method is being used.'
+ end if
+ if (is_zender_soil_erod_from_atm()) then
+ write(iulog,*) subname,': Zender soil erod file is handled in atm'
+ write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file)
+ write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact
+ end if
+ end if
end subroutine dust_readnl
@@ -131,7 +152,9 @@ subroutine dust_init()
dust_active = any(dust_indices(:) > 0)
if (.not.dust_active) return
- call soil_erod_init( dust_emis_fact, soil_erod_file )
+ if (is_zender_soil_erod_from_atm()) then
+ call soil_erod_init( dust_emis_fact, soil_erod_file )
+ end if
call dust_set_params( dust_nbin, dust_dmt_grd, dust_dmt_vwr, dust_stk_crc )
@@ -158,29 +181,36 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod )
! set dust emissions
- col_loop: do i =1,ncol
-
- soil_erod(i) = soil_erodibility( i, lchnk )
-
- if( soil_erod(i) .lt. soil_erod_threshold ) soil_erod(i) = 0._r8
-
- ! rebin and adjust dust emissons..
- do m = 1,dust_nbin
-
- idst = dust_indices(m)
-
- cflx(i,idst) = sum( -dust_flux_in(i,:) ) &
- * dust_emis_sclfctr(m)*soil_erod(i)/soil_erod_fact*1.15_r8
-
- x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8))
-
- inum = dust_indices(m+dust_nbin)
-
- cflx(i,inum) = cflx(i,idst)*x_mton
-
- enddo
-
- end do col_loop
+ if (is_zender_soil_erod_from_atm()) then
+ col_loop1: do i = 1,ncol
+ soil_erod(i) = soil_erodibility( i, lchnk )
+ if( soil_erod(i) .lt. soil_erod_threshold ) soil_erod(i) = 0._r8
+
+ ! rebin and adjust dust emissons.
+ do m = 1,dust_nbin
+ idst = dust_indices(m)
+ cflx(i,idst) = sum( -dust_flux_in(i,:) ) &
+ * dust_emis_sclfctr(m)*soil_erod(i)/dust_emis_fact*1.15_r8
+ x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8))
+ inum = dust_indices(m+dust_nbin)
+ cflx(i,inum) = cflx(i,idst)*x_mton
+ enddo
+ enddo col_loop1
+ else ! Leung emissions
+
+ col_loop2: do i = 1,ncol
+ ! rebin and adjust dust emissons.
+ do m = 1,dust_nbin
+ idst = dust_indices(m)
+
+ cflx(i,idst) = sum( -dust_flux_in(i,:) ) &
+ * dust_emis_sclfctr(m) / dust_emis_fact
+ x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8))
+ inum = dust_indices(m+dust_nbin)
+ cflx(i,inum) = cflx(i,idst)*x_mton
+ enddo
+ enddo col_loop2
+ end if
end subroutine dust_emis
diff --git a/src/dynamics/fv3 b/src/dynamics/fv3
index df3550b0f6..66227690a9 160000
--- a/src/dynamics/fv3
+++ b/src/dynamics/fv3
@@ -1 +1 @@
-Subproject commit df3550b0f6a835778f32ccc8c6291942e0413f62
+Subproject commit 66227690a9fb43a64492de32de14562a25ede717
diff --git a/src/physics/cam/aoa_tracers.F90 b/src/physics/cam/aoa_tracers.F90
index f13660b327..f0c272b69d 100644
--- a/src/physics/cam/aoa_tracers.F90
+++ b/src/physics/cam/aoa_tracers.F90
@@ -11,10 +11,11 @@ module aoa_tracers
use constituents, only: pcnst, cnst_add, cnst_name, cnst_longname
use cam_logfile, only: iulog
use ref_pres, only: pref_mid_norm
+ use time_manager, only: get_curr_date, get_start_date
+ use time_manager, only: is_leapyear, timemgr_get_calendar_cf, get_calday
implicit none
private
- save
! Public interfaces
public :: aoa_tracers_register ! register constituents
@@ -27,19 +28,18 @@ module aoa_tracers
! Private module data
- integer, parameter :: ncnst=4 ! number of constituents implemented by this module
+ integer, parameter :: ncnst=3 ! number of constituents implemented by this module
! constituent names
- character(len=8), parameter :: c_names(ncnst) = (/'AOA1', 'AOA2', 'HORZ', 'VERT'/)
+ character(len=6), parameter :: c_names(ncnst) = (/'AOAMF ', 'HORZ ', 'VERT '/)
! constituent source/sink names
- character(len=8), parameter :: src_names(ncnst) = (/'AOA1SRC', 'AOA2SRC', 'HORZSRC', 'VERTSRC'/)
+ character(len=8), parameter :: src_names(ncnst) = (/'AOAMFSRC', 'HORZSRC ', 'VERTSRC '/)
- integer :: ifirst ! global index of first constituent
- integer :: ixaoa1 ! global index for AOA1 tracer
- integer :: ixaoa2 ! global index for AOA2 tracer
- integer :: ixht ! global index for HORZ tracer
- integer :: ixvt ! global index for VERT tracer
+ integer :: ifirst = -1 ! global index of first constituent
+ integer :: ixaoa = -1 ! global index for AOAMFSRC tracer
+ integer :: ixht = -1 ! global index for HORZ tracer
+ integer :: ixvt = -1 ! global index for VERT tracer
! Data from namelist variables
logical :: aoa_tracers_flag = .false. ! true => turn on test tracer code, namelist variable
@@ -66,7 +66,11 @@ module aoa_tracers
! Troposphere and Stratosphere. J. Atmos. Sci., 57, 673-699.
! doi: http://dx.doi.org/10.1175/1520-0469(2000)057<0673:TDOGAI>2.0.CO;2
- real(r8) :: qrel_vert(pver) ! = -7._r8*log(pref_mid_norm(k)) + vert_offset
+ real(r8) :: qrel_vert(pver) = -huge(1._r8) ! = -7._r8*log(pref_mid_norm(k)) + vert_offset
+
+ integer :: yr0 = -huge(1)
+ real(r8) :: calday0 = -huge(1._r8)
+ real(r8) :: years = -huge(1._r8)
!===============================================================================
contains
@@ -75,12 +79,9 @@ module aoa_tracers
!================================================================================
subroutine aoa_tracers_readnl(nlfile)
- use namelist_utils, only: find_group_name
- use units, only: getunit, freeunit
- use mpishorthand
- use cam_abortutils, only: endrun
-
- implicit none
+ use namelist_utils, only: find_group_name
+ use cam_abortutils, only: endrun
+ use spmd_utils, only: mpicom, masterprocid, mpi_logical, mpi_success
character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
@@ -88,14 +89,12 @@ subroutine aoa_tracers_readnl(nlfile)
integer :: unitn, ierr
character(len=*), parameter :: subname = 'aoa_tracers_readnl'
-
namelist /aoa_tracers_nl/ aoa_tracers_flag, aoa_read_from_ic_file
!-----------------------------------------------------------------------------
if (masterproc) then
- unitn = getunit()
- open( unitn, file=trim(nlfile), status='old' )
+ open( newunit=unitn, file=trim(nlfile), status='old' )
call find_group_name(unitn, 'aoa_tracers_nl', status=ierr)
if (ierr == 0) then
read(unitn, aoa_tracers_nl, iostat=ierr)
@@ -104,13 +103,16 @@ subroutine aoa_tracers_readnl(nlfile)
end if
end if
close(unitn)
- call freeunit(unitn)
end if
-#ifdef SPMD
- call mpibcast(aoa_tracers_flag, 1, mpilog, 0, mpicom)
- call mpibcast(aoa_read_from_ic_file, 1, mpilog, 0, mpicom)
-#endif
+ call mpi_bcast(aoa_tracers_flag, 1, mpi_logical, masterprocid, mpicom, ierr)
+ if (ierr/=mpi_success) then
+ call endrun(subname//': MPI_BCAST ERROR: aoa_tracers_flag')
+ end if
+ call mpi_bcast(aoa_read_from_ic_file, 1, mpi_logical, masterprocid, mpicom, ierr)
+ if (ierr/=mpi_success) then
+ call endrun(subname//': MPI_BCAST ERROR: aoa_read_from_ic_file')
+ end if
endsubroutine aoa_tracers_readnl
@@ -125,18 +127,24 @@ subroutine aoa_tracers_register
use physconst, only: cpair, mwdry
!-----------------------------------------------------------------------
+ integer :: k
+
if (.not. aoa_tracers_flag) return
- call cnst_add(c_names(1), mwdry, cpair, 0._r8, ixaoa1, readiv=aoa_read_from_ic_file, &
- longname='Age-of_air tracer 1')
- ifirst = ixaoa1
- call cnst_add(c_names(2), mwdry, cpair, 0._r8, ixaoa2, readiv=aoa_read_from_ic_file, &
- longname='Age-of_air tracer 2')
- call cnst_add(c_names(3), mwdry, cpair, 1._r8, ixht, readiv=aoa_read_from_ic_file, &
+ call cnst_add(c_names(1), mwdry, cpair, 0._r8, ixaoa, readiv=aoa_read_from_ic_file, &
+ longname='mixing ratio LB tracer')
+
+ call cnst_add(c_names(2), mwdry, cpair, 1._r8, ixht, readiv=aoa_read_from_ic_file, &
longname='horizontal tracer')
- call cnst_add(c_names(4), mwdry, cpair, 0._r8, ixvt, readiv=aoa_read_from_ic_file, &
+ call cnst_add(c_names(3), mwdry, cpair, 0._r8, ixvt, readiv=aoa_read_from_ic_file, &
longname='vertical tracer')
+ ifirst = ixaoa
+
+ do k = 1,pver
+ qrel_vert(k) = -7._r8*log(pref_mid_norm(k)) + vert_offset
+ enddo
+
end subroutine aoa_tracers_register
!===============================================================================
@@ -211,7 +219,9 @@ subroutine aoa_tracers_init
use cam_history, only: addfld, add_default
- integer :: m, mm, k
+ integer :: m, mm
+ integer :: yr, mon, day, sec, ymd
+
!-----------------------------------------------------------------------
if (.not. aoa_tracers_flag) return
@@ -227,9 +237,12 @@ subroutine aoa_tracers_init
call add_default (src_names(m), 1, ' ')
end do
- do k = 1,pver
- qrel_vert(k) = -7._r8*log(pref_mid_norm(k)) + vert_offset
- enddo
+ call get_start_date(yr, mon, day, sec)
+
+ ymd = yr*10000 + mon*100 + day
+
+ yr0 = yr
+ calday0 = get_calday(ymd, sec)
end subroutine aoa_tracers_init
@@ -240,15 +253,14 @@ subroutine aoa_tracers_timestep_init( phys_state )
! Provides a place to reinitialize diagnostic constituents HORZ and VERT
!-----------------------------------------------------------------------
- use time_manager, only: get_curr_date
use ppgrid, only: begchunk, endchunk
use physics_types, only: physics_state
type(physics_state), intent(inout), dimension(begchunk:endchunk), optional :: phys_state
-
integer c, i, k, ncol
- integer yr, mon, day, tod
+ integer yr, mon, day, tod, ymd
+ real(r8) :: calday, dpy
!--------------------------------------------------------------------------
if (.not. aoa_tracers_flag) return
@@ -272,29 +284,34 @@ subroutine aoa_tracers_timestep_init( phys_state )
end if
+ ymd = yr*10000 + mon*100 + day
+ calday = get_calday(ymd, tod)
+
+ dpy = 365._r8
+ if (timemgr_get_calendar_cf() == 'gregorian' .and. is_leapyear(yr)) then
+ dpy = 366._r8
+ end if
+ years = (yr-yr0) + (calday-calday0)/dpy
+
end subroutine aoa_tracers_timestep_init
!===============================================================================
- subroutine aoa_tracers_timestep_tend(state, ptend, cflx, landfrac, dt)
+ subroutine aoa_tracers_timestep_tend(state, ptend, dt)
use physics_types, only: physics_state, physics_ptend, physics_ptend_init
use cam_history, only: outfld
- use time_manager, only: get_nstep
! Arguments
type(physics_state), intent(in) :: state ! state variables
type(physics_ptend), intent(out) :: ptend ! package tendencies
- real(r8), intent(inout) :: cflx(pcols,pcnst) ! Surface constituent flux (kg/m^2/s)
- real(r8), intent(in) :: landfrac(pcols) ! Land fraction
- real(r8), intent(in) :: dt ! timestep
+ real(r8), intent(in) :: dt ! timestep size (sec)
!----------------- Local workspace-------------------------------
integer :: i, k
integer :: lchnk ! chunk identifier
integer :: ncol ! no. of column in chunk
- integer :: nstep ! current timestep number
real(r8) :: qrel ! value to be relaxed to
real(r8) :: xhorz ! updated value of HORZ
real(r8) :: xvert ! updated value of VERT
@@ -302,6 +319,11 @@ subroutine aoa_tracers_timestep_tend(state, ptend, cflx, landfrac, dt)
real(r8) :: teul ! relaxation in 1/sec*dt/2 = k*dt/2
real(r8) :: wimp ! 1./(1.+ k*dt/2)
real(r8) :: wsrc ! teul*wimp
+
+ real(r8) :: xmmr
+ real(r8), parameter :: mmr0 = 1.0e-6_r8 ! initial lower boundary mmr
+ real(r8), parameter :: per_yr = 0.02_r8 ! fractional increase per year
+
!------------------------------------------------------------------
teul = .5_r8*dt/(86400._r8 * treldays) ! 1/2 for the semi-implicit scheme if dt=time step
@@ -313,26 +335,23 @@ subroutine aoa_tracers_timestep_tend(state, ptend, cflx, landfrac, dt)
return
end if
- lq(:) = .FALSE.
- lq(ixaoa1) = .TRUE.
- lq(ixaoa2) = .TRUE.
- lq(ixht) = .TRUE.
- lq(ixvt) = .TRUE.
+ lq(:) = .FALSE.
+ lq(ixaoa) = .TRUE.
+ lq(ixht) = .TRUE.
+ lq(ixvt) = .TRUE.
+
call physics_ptend_init(ptend,state%psetcols, 'aoa_tracers', lq=lq)
- nstep = get_nstep()
lchnk = state%lchnk
ncol = state%ncol
+ ! AOAMF
+ xmmr = mmr0*(1._r8 + per_yr*years)
+ ptend%q(1:ncol,pver,ixaoa) = (xmmr - state%q(1:ncol,pver,ixaoa)) / dt
+
do k = 1, pver
do i = 1, ncol
- ! AOA1
- ptend%q(i,k,ixaoa1) = 0.0_r8
-
- ! AOA2
- ptend%q(i,k,ixaoa2) = 0.0_r8
-
! HORZ
qrel = 2._r8 + sin(state%lat(i)) ! qrel should zonal mean
xhorz = state%q(i,k,ixht)*wimp + wsrc*qrel ! Xnew = weight*3D-tracer + (1.-weight)*1D-tracer
@@ -344,34 +363,13 @@ subroutine aoa_tracers_timestep_tend(state, ptend, cflx, landfrac, dt)
ptend%q(i,k,ixvt) = (xvert - state%q(i,k,ixvt)) / dt
end do
+
end do
! record tendencies on history files
- call outfld (src_names(1), ptend%q(:,:,ixaoa1), pcols, lchnk)
- call outfld (src_names(2), ptend%q(:,:,ixaoa2), pcols, lchnk)
- call outfld (src_names(3), ptend%q(:,:,ixht), pcols, lchnk)
- call outfld (src_names(4), ptend%q(:,:,ixvt), pcols, lchnk)
-
- ! Set tracer fluxes
- do i = 1, ncol
-
- ! AOA1
- cflx(i,ixaoa1) = 1.e-6_r8
-
- ! AOA2
- if (landfrac(i) .eq. 1._r8 .and. state%lat(i) .gt. 0.35_r8) then
- cflx(i,ixaoa2) = 1.e-6_r8 + 1e-6_r8*0.0434_r8*real(nstep,r8)*dt/(86400._r8*365._r8)
- else
- cflx(i,ixaoa2) = 0._r8
- endif
-
- ! HORZ
- cflx(i,ixht) = 0._r8
-
- ! VERT
- cflx(i,ixvt) = 0._r8
-
- end do
+ call outfld (src_names(1), ptend%q(:,:,ixaoa), pcols, lchnk)
+ call outfld (src_names(2), ptend%q(:,:,ixht), pcols, lchnk)
+ call outfld (src_names(3), ptend%q(:,:,ixvt), pcols, lchnk)
end subroutine aoa_tracers_timestep_tend
@@ -389,19 +387,17 @@ subroutine init_cnst_3d(m, latvals, lonvals, mask, q)
!-----------------------------------------------------------------------
if (masterproc) then
- write(iulog,*) 'AGE-OF-AIR CONSTITUENTS: INITIALIZING ',cnst_name(m),m
+ write(iulog,*) 'AGE-OF-AIR CONSTITUENTS: INITIALIZING ',cnst_name(m),m
end if
- if (m == ixaoa1) then
-
- q(:,:) = 0.0_r8
-
- else if (m == ixaoa2) then
+ if (m == ixaoa) then
+ ! AOAMF
q(:,:) = 0.0_r8
else if (m == ixht) then
+ ! HORZ
gsize = size(q, 1)
do j = 1, gsize
q(j,:) = 2._r8 + sin(latvals(j))
@@ -409,6 +405,7 @@ subroutine init_cnst_3d(m, latvals, lonvals, mask, q)
else if (m == ixvt) then
+ ! VERT
do k = 1, pver
do j = 1, size(q,1)
q(j,k) = qrel_vert(k)
@@ -421,5 +418,4 @@ end subroutine init_cnst_3d
!=====================================================================
-
end module aoa_tracers
diff --git a/src/physics/cam/cam_diagnostics.F90 b/src/physics/cam/cam_diagnostics.F90
index 2886c44222..97dad2ba01 100644
--- a/src/physics/cam/cam_diagnostics.F90
+++ b/src/physics/cam/cam_diagnostics.F90
@@ -901,11 +901,12 @@ subroutine diag_phys_writeout_dry(state, pbuf, p_surf_t)
! Purpose: output dry physics diagnostics
!
!-----------------------------------------------------------------------
- use physconst, only: gravit, rga, rair, cappa
- use time_manager, only: get_nstep
- use interpolate_data, only: vertinterp
- use tidal_diag, only: tidal_diag_write
- use air_composition, only: cpairv, rairv
+ use physconst, only: gravit, rga, rair, cappa
+ use time_manager, only: get_nstep
+ use interpolate_data, only: vertinterp
+ use tidal_diag, only: tidal_diag_write
+ use air_composition, only: cpairv, rairv
+ use cam_diagnostic_utils, only: cpslec
!-----------------------------------------------------------------------
!
! Arguments
diff --git a/src/physics/cam/physpkg.F90 b/src/physics/cam/physpkg.F90
index 6da5c0a9c5..d4c362f391 100644
--- a/src/physics/cam/physpkg.F90
+++ b/src/physics/cam/physpkg.F90
@@ -1557,7 +1557,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 aoa_tracers_timestep_tend(state, ptend, cam_in%cflx, cam_in%landfrac, ztodt)
+ call aoa_tracers_timestep_tend(state, ptend, ztodt)
if ( (trim(cam_take_snapshot_after) == "aoa_tracers_timestep_tend") .and. &
(trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then
call cam_snapshot_ptend_outfld(ptend, lchnk)
diff --git a/src/physics/cam/zm_conv_intr.F90 b/src/physics/cam/zm_conv_intr.F90
index 85e65e235c..fa33c50856 100644
--- a/src/physics/cam/zm_conv_intr.F90
+++ b/src/physics/cam/zm_conv_intr.F90
@@ -608,7 +608,7 @@ subroutine zm_conv_tend(pblh ,mcon ,cme , &
state%t(:ncol,:), state%q(:ncol,:,1), prec(:ncol), &
pblh(:ncol), state%zm(:ncol,:), state%phis(:ncol), state%zi(:ncol,:), ptend_loc%q(:ncol,:,1), &
ptend_loc%s(:ncol,:), state%pmid(:ncol,:), state%pint(:ncol,:), state%pdel(:ncol,:), &
- .5_r8*ztodt, mcon(:ncol,:), cme(:ncol,:), cape(:ncol), &
+ ztodt, mcon(:ncol,:), cme(:ncol,:), cape(:ncol), &
tpert(:ncol), dlf(:ncol,:), zdu(:ncol,:), rprd(:ncol,:), &
mu(:ncol,:), md(:ncol,:), du(:ncol,:), eu(:ncol,:), ed(:ncol,:), &
dp(:ncol,:), dsubcld(:ncol), jt(:ncol), maxg(:ncol), ideep(:ncol), &
diff --git a/src/physics/cam7/physpkg.F90 b/src/physics/cam7/physpkg.F90
index af9fc8d3ef..4d3868de77 100644
--- a/src/physics/cam7/physpkg.F90
+++ b/src/physics/cam7/physpkg.F90
@@ -94,6 +94,8 @@ module physpkg
integer :: dqcore_idx = 0 ! dqcore index in physics buffer
integer :: cmfmczm_idx = 0 ! Zhang-McFarlane convective mass fluxes
integer :: rliqbc_idx = 0 ! tphysbc reserve liquid
+ integer :: psl_idx = 0
+
!=======================================================================
contains
!=======================================================================
@@ -1037,6 +1039,8 @@ subroutine phys_init( phys_state, phys_tend, pbuf2d, cam_in, cam_out )
dtcore_idx = pbuf_get_index('DTCORE')
dqcore_idx = pbuf_get_index('DQCORE')
+ psl_idx = pbuf_get_index('PSL')
+
end subroutine phys_init
!
@@ -2050,7 +2054,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 aoa_tracers_timestep_tend(state, ptend, cam_in%cflx, cam_in%landfrac, ztodt)
+ call aoa_tracers_timestep_tend(state, ptend, ztodt)
if ( (trim(cam_take_snapshot_after) == "aoa_tracers_timestep_tend") .and. &
(trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then
call cam_snapshot_ptend_outfld(ptend, lchnk)
@@ -2502,7 +2506,9 @@ subroutine tphysbc (ztodt, state, &
use physics_types, only: physics_update, &
physics_state_check, &
dyn_te_idx
- use cam_diagnostics, only: diag_conv_tend_ini, diag_conv, diag_export, diag_state_b4_phys_write
+ use physconst, only: rair, gravit
+ use cam_diagnostics, only: diag_conv_tend_ini, diag_export, diag_state_b4_phys_write
+ use cam_diagnostic_utils, only: cpslec
use cam_history, only: outfld
use constituents, only: qmin
use air_composition, only: thermodynamic_active_species_liq_num,thermodynamic_active_species_liq_idx
@@ -2611,6 +2617,8 @@ subroutine tphysbc (ztodt, state, &
type(check_tracers_data):: tracerint ! energy integrals and cummulative boundary fluxes
real(r8) :: zero_tracers(pcols,pcnst)
+ real(r8), pointer :: psl(:) ! Sea Level Pressure
+
logical :: lq(pcnst)
!-----------------------------------------------------------------------
@@ -2888,6 +2896,8 @@ subroutine tphysbc (ztodt, state, &
! Save atmospheric fields to force surface models
call t_startf('cam_export')
+ call pbuf_get_field(pbuf, psl_idx, psl)
+ call cpslec(ncol, state%pmid, state%phis, state%ps, state%t, psl, gravit, rair)
call cam_export (state,cam_out,pbuf)
call t_stopf('cam_export')
diff --git a/src/physics/cam/cpslec.F90 b/src/utils/cam_diagnostic_utils.F90
similarity index 55%
rename from src/physics/cam/cpslec.F90
rename to src/utils/cam_diagnostic_utils.F90
index cb29dc29e7..7a6921904a 100644
--- a/src/physics/cam/cpslec.F90
+++ b/src/utils/cam_diagnostic_utils.F90
@@ -1,31 +1,34 @@
+module cam_diagnostic_utils
-subroutine cpslec (ncol, pmid, phis, ps, t, psl, gravit, rair)
+! Collection of routines used for diagnostic calculations.
+
+use shr_kind_mod, only: r8 => shr_kind_r8
+use ppgrid, only: pcols, pver
+
+
+implicit none
+private
+save
+
+public :: &
+ cpslec ! compute sea level pressure
+
+!===============================================================================
+contains
+!===============================================================================
+
+subroutine cpslec(ncol, pmid, phis, ps, t, psl, gravit, rair)
!-----------------------------------------------------------------------
!
-! Purpose:
-! Hybrid coord version: Compute sea level pressure for a latitude line
+! Compute sea level pressure.
!
-! Method:
-! CCM2 hybrid coord version using ECMWF formulation
-! Algorithm: See section 3.1.b in NCAR NT-396 "Vertical
+! Uses ECMWF formulation Algorithm: See section 3.1.b in NCAR NT-396 "Vertical
! Interpolation and Truncation of Model-Coordinate Data
!
-! Author: Stolen from the Processor by Erik Kluzek
-!
-!-----------------------------------------------------------------------
-!
-! $Id$
-! $Author$
-!
!-----------------------------------------------------------------------
- use shr_kind_mod, only: r8 => shr_kind_r8
- use ppgrid, only: pcols, pver
-
- implicit none
-
-!-----------------------------Arguments---------------------------------
+ !-----------------------------Arguments---------------------------------
integer , intent(in) :: ncol ! longitude dimension
real(r8), intent(in) :: pmid(pcols,pver) ! Atmospheric pressure (pascals)
@@ -36,21 +39,19 @@ subroutine cpslec (ncol, pmid, phis, ps, t, psl, gravit, rair)
real(r8), intent(in) :: rair ! gas constant for dry air
real(r8), intent(out):: psl(pcols) ! Sea level pressures (pascals)
-!-----------------------------------------------------------------------
-!-----------------------------Parameters--------------------------------
+ !-----------------------------Parameters--------------------------------
real(r8), parameter :: xlapse = 6.5e-3_r8 ! Temperature lapse rate (K/m)
-!-----------------------------------------------------------------------
-!-----------------------------Local Variables---------------------------
- integer i ! Loop index
- real(r8) alpha ! Temperature lapse rate in terms of pressure ratio (unitless)
- real(r8) Tstar ! Computed surface temperature
- real(r8) TT0 ! Computed temperature at sea-level
- real(r8) alph ! Power to raise P/Ps to get rate of increase of T with pressure
- real(r8) beta ! alpha*phis/(R*T) term used in approximation of PSL
-!-----------------------------------------------------------------------
-!
+ !-----------------------------Local Variables---------------------------
+ integer :: i ! Loop index
+ real(r8) :: alpha ! Temperature lapse rate in terms of pressure ratio (unitless)
+ real(r8) :: Tstar ! Computed surface temperature
+ real(r8) :: TT0 ! Computed temperature at sea-level
+ real(r8) :: alph ! Power to raise P/Ps to get rate of increase of T with pressure
+ real(r8) :: beta ! alpha*phis/(R*T) term used in approximation of PSL
+ !-----------------------------------------------------------------------
+
alpha = rair*xlapse/gravit
do i=1,ncol
if ( abs(phis(i)/gravit) < 1.e-4_r8 )then
@@ -77,5 +78,8 @@ subroutine cpslec (ncol, pmid, phis, ps, t, psl, gravit, rair)
end if
enddo
- return
end subroutine cpslec
+
+!===============================================================================
+
+end module cam_diagnostic_utils