diff --git a/.gitmodules b/.gitmodules
index 80c1640e72..d16396da55 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -92,7 +92,7 @@ fxDONOTUSEurl = https://github.com/ESCOMP/CMEPS.git
[submodule "cdeps"]
path = components/cdeps
url = https://github.com/ESCOMP/CDEPS.git
-fxtag = cdeps1.0.47
+fxtag = cdeps1.0.48
fxrequired = ToplevelRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/ESCOMP/CDEPS.git
diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm
index 15d51ccfcb..a5b19dd62b 100755
--- a/bld/CLMBuildNamelist.pm
+++ b/bld/CLMBuildNamelist.pm
@@ -2282,7 +2282,9 @@ sub setup_logic_cnfire {
my @fire_consts = ( "rh_low", "rh_hgh", "bt_min", "bt_max", "cli_scale", "boreal_peatfire_c", "non_boreal_peatfire_c",
"pot_hmn_ign_counts_alpha", "cropfire_a1", "occur_hi_gdp_tree", "lfuel", "ufuel",
- "cmb_cmplt_fact_litter", "cmb_cmplt_fact_cwd" );
+ "cmb_cmplt_fact_litter", "cmb_cmplt_fact_cwd", "max_rh30_affecting_fuel",
+ "defo_fire_precip_thresh_bet", "defo_fire_precip_thresh_bdt",
+ "borpeat_fire_soilmoist_denom", "nonborpeat_fire_precip_denom" );
if ( &value_is_true($nl->get_value('use_cn')) ) {
foreach my $item ( @fire_consts ) {
if ( ! &value_is_true($nl_flags->{'cnfireson'} ) ) {
diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml
index 394f72a62e..81ce2704fa 100644
--- a/bld/namelist_files/namelist_defaults_ctsm.xml
+++ b/bld/namelist_files/namelist_defaults_ctsm.xml
@@ -161,10 +161,8 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
NONE
-.false.
-.false.
-.false.
-.false.
+.false.
+.true.
.false.
@@ -244,6 +242,12 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
li2016crufrc
li2014qianfrc
+90.d00
+4.0d00
+1.8d00
+0.3d00
+1.0d00
+
30.0d00
80.0d00
0.3d00
@@ -350,21 +354,49 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
1050.d00
0.5d00
0.28d00
+90.d00
+4.0d00
+1.8d00
30.0d00
80.0d00
0.85d00
0.98d00
-0.025d00
-0.09d-4
+0.01d00
+0.28d-4
0.010d00
-0.17d-3
-0.21d00
+0.71d-4
+0.3d00
0.33d00
75.d00
-1050.d00
+825.d00
0.5d00
0.28d00
+90.d00
+1.4d00
+0.5d00
+6.0d00
+
+30.0d00
+85.0d00
+0.85d00
+0.98d00
+0.01d00
+0.28d-4
+0.010d00
+0.71d-4
+0.3d00
+0.33d00
+75.d00
+825.d00
+0.5d00
+0.28d00
+95.
+1.8d00
+0.6d00
+ 0.35d00
+6.5d00
+
.false.
@@ -896,13 +928,14 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
hgrid=ne30np4.pg3 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.false. glc_nex=10 do_transient_pfts=.false. lnd_tuning_mode=clm6_0_GSWP3v1
+>hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.false. glc_nex=10 do_transient_pfts=.false. lnd_tuning_mode=clm5_1_GSWP3v1
hgrid=ne30np4.pg3 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.false. glc_nex=10 do_transient_pfts=.false. lnd_tuning_mode=clm6_0_GSWP3v1
+>hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.false. glc_nex=10 do_transient_pfts=.false. lnd_tuning_mode=clm6_0_GSWP3v1
+
hgrid=1.9x2.5 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
@@ -1343,13 +1376,19 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
>lnd/clm2/initdata_map/clmi.I1850Clm50SpCru.1706-01-01.0.9x1.25_gx1v7_simyr1850_c200806.nc
-
-
-
+
+lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
+
+lnd/clm2/initdata_esmf/ctsm5.2/clmi.I1850Clm60BgcCrop-ciso.1361-01-01.ne30pg3_mg17_c240317.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
lnd/clm2/initdata_esmf/ctsm5.2/clmi.I2000Clm52BgcCrop.2000-01-01.1.9x2.5_gx1v7_gl4_simyr2000_c240515.nc
+ lnd_tuning_mode="clm6_0_GSWP3v1" use_init_interp=".true."
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
@@ -1470,19 +1510,21 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
+
lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
+
lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
@@ -1542,11 +1584,12 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
+
lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
@@ -1605,11 +1648,12 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
+
lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
@@ -1679,18 +1723,20 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
>lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+
lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
+
lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
@@ -1750,11 +1796,12 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
+
lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
@@ -1814,11 +1861,12 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
+
lnd/clm2/initdata_map/clmi.BHIST.2000-01-01.0.9x1.25_gx1v7_simyr2000_c200728.nc
+>lnd/clm2/initdata_esmf/ctsm5.3/ctsm52018_f09_xsiceON_acON_pSASU.clm2.r.0201-01-01-00000.nc
@@ -2455,15 +2503,15 @@ lnd/clm2/surfdata_esmf/NEON/surfdata_1x1_NEON_TOOL_hist_78pfts_CMIP6_simyr2000_c
lnd/clm2/urbandata/CTSM52_tbuildmax_OlesonFeddema_2020_0.9x1.25_simyr1849-2106_c200605.nc
/glade/work/xinchang/02_Explicit_AC_Adoption/02_data_present_day/CTSM52_urbantv_Li_2024_0.9x1.25_simyr1849-2106_c20230621.nc
+>lnd/clm2/urbandata/CTSM52_urbantv_Li_2024_0.9x1.25_simyr1849-2106_c20230621.nc
lnd/clm2/urbandata/CTSM52_tbuildmax_OlesonFeddema_2020_0.9x1.25_simyr1849-2106_c200605.nc
/glade/work/xinchang/02_Explicit_AC_Adoption/02_data_present_day/CTSM52_urbantv_Li_2024_0.9x1.25_simyr1849-2106_c20230621.nc
+>lnd/clm2/urbandata/CTSM52_urbantv_Li_2024_0.9x1.25_simyr1849-2106_c20230621.nc
lnd/clm2/urbandata/CLM50_tbuildmax_Oleson_2016_0.9x1.25_simyr1849-2106_c160923.nc
/glade/work/xinchang/02_Explicit_AC_Adoption/02_data_present_day/CTSM52_urbantv_Li_2024_0.9x1.25_simyr1849-2106_c20230621.nc
+>lnd/clm2/urbandata/CTSM52_urbantv_Li_2024_0.9x1.25_simyr1849-2106_c20230621.nc
lnd/clm2/urbandata/CLM45_tbuildmax_Oleson_2016_0.9x1.25_simyr1849-2106_c160923.nc
@@ -2701,6 +2749,8 @@ lnd/clm2/surfdata_esmf/NEON/surfdata_1x1_NEON_TOOL_hist_78pfts_CMIP6_simyr2000_c
.false.
+.true.
+
-1.0
0.5
-3.15
diff --git a/bld/namelist_files/namelist_defaults_dust_emis.xml b/bld/namelist_files/namelist_defaults_dust_emis.xml
index 40bf3d9078..a13a23d14b 100644
--- a/bld/namelist_files/namelist_defaults_dust_emis.xml
+++ b/bld/namelist_files/namelist_defaults_dust_emis.xml
@@ -15,6 +15,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
Zender_2003
+Leung_2023
atm
diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml
index 4cc50da391..d2347121c1 100644
--- a/bld/namelist_files/namelist_definition_ctsm.xml
+++ b/bld/namelist_files/namelist_definition_ctsm.xml
@@ -252,14 +252,15 @@ formulation (1).
+ group="cnfire_inparm" valid_values="nofire,li2014qianfrc,li2016crufrc,li2021gswpfrc,li2024gswpfrc,li2024crujra" >
The method type to use for CNFire
nofire: Turn fire effects off
li2014qianfrc: Reference paper Li, et. al.(2014) tuned with QIAN atmospheric forcing
li2016crufrc: Reference paper Li, et. al.(2016) tuned with CRU-NCEP atmospheric forcing
-li2021gswpfrc: Reference paper Li, et. al.(2021?) tuned with GSWP3 atmospheric forcing
-li2024gswpfrc: No reference paper yet
+li2021gswpfrc: No reference paper yet, tuned with GSWP3 atmospheric forcing
+li2024gswpfrc: No reference paper yet, tuned with GSWP3 atmospheric forcing
+li2024crujra: No reference paper yet, tuned with CRU-JRA forcing
+
+Value above which 30-day running relative humidity has no effect on fuel combustibility
+
+
+
+Value (mm/d) above which running mean daily precipitation (10 or 60 days) does not allow deforestation fire for a column with broadleaf evergreen tropical trees but no broadleaf deciduous tropical trees. "PFT-dependent thresholds of P60d and P10d" in Li et al. (2013, doi:10.5194/bg-10-2293-2013).
+
+
+
+Value (mm/d) above which running mean daily precipitation (10 or 60 days) does not allow deforestation fire for a column with broadleaf deciduous tropical trees but no broadleaf evergreen tropical trees. "PFT-dependent thresholds of P60d and P10d" in Li et al. (2013, doi:10.5194/bg-10-2293-2013).
+
+
+
+Denominator of precipitation in equation relating that to non-boreal peat fire (unitless). Eq. 9 in Li et al. (2013, doi:10.5194/bg-10-2293-2013).
+
+
+
+Denominator of exponential in soil moisture term of equation relating that and temperature to boreal peat fire (unitless). Eq. 10 in Li et al. (2013, doi:10.5194/bg-10-2293-2013).
+
+
Critical threshold for truncation of Nitrogen (truncate Nitrogen states to zero below this value)
diff --git a/cime_config/testdefs/ExpectedTestFails.xml b/cime_config/testdefs/ExpectedTestFails.xml
index d1e0a1a8b8..e18b15a26e 100644
--- a/cime_config/testdefs/ExpectedTestFails.xml
+++ b/cime_config/testdefs/ExpectedTestFails.xml
@@ -52,13 +52,6 @@
-
-
- FAIL
- #2444
-
-
-
FAIL
@@ -113,20 +106,6 @@
-
-
- FAIL
- #2373
-
-
-
-
-
- FAIL
- #2373
-
-
-
FAIL
@@ -186,17 +165,6 @@
-
-
- FAIL
- #2373
-
-
- FAIL
- FATES#701
-
-
-
FAIL
diff --git a/cime_config/testdefs/testlist_clm.xml b/cime_config/testdefs/testlist_clm.xml
index 4166570ab0..d1c3171c98 100644
--- a/cime_config/testdefs/testlist_clm.xml
+++ b/cime_config/testdefs/testlist_clm.xml
@@ -152,7 +152,7 @@
-
+
@@ -3600,6 +3600,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/cime_config/testdefs/testmods_dirs/clm/FireLi2024CruJra/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FireLi2024CruJra/include_user_mods
new file mode 100644
index 0000000000..fe0e18cf88
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FireLi2024CruJra/include_user_mods
@@ -0,0 +1 @@
+../default
diff --git a/cime_config/testdefs/testmods_dirs/clm/FireLi2024CruJra/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FireLi2024CruJra/user_nl_clm
new file mode 100644
index 0000000000..437e4ef86e
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FireLi2024CruJra/user_nl_clm
@@ -0,0 +1 @@
+fire_method = 'li2024crujra'
diff --git a/components/cdeps b/components/cdeps
index 7476950699..7b0b3a8272 160000
--- a/components/cdeps
+++ b/components/cdeps
@@ -1 +1 @@
-Subproject commit 7476950699909813d1938a34bd8d71bf5bfbf1e9
+Subproject commit 7b0b3a827241c53d296ec877cb1f59966bf5e5bf
diff --git a/doc/.ChangeLog_template b/doc/.ChangeLog_template
index 60a7f49288..c95ea482e3 100644
--- a/doc/.ChangeLog_template
+++ b/doc/.ChangeLog_template
@@ -98,7 +98,7 @@ infrastructure should be run when appropriate, as described below.
python testing (if python code has changed; see instructions in python/README.md; document testing done):
- (any machine) -
+ derecho -
[If python code has changed and you are NOT running aux_clm (e.g., because the only changes are in python
code) then also run the clm_pymods test suite; this is a small subset of aux_clm that runs the system
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 7a6d764c14..3499c7d720 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,4 +1,349 @@
===============================================================
+Tag name: ctsm5.2.027
+Originator(s): erik (Erik Kluzek,UCAR/TSS,303-497-1326)
+Date: Wed 28 Aug 2024 09:13:22 PM MDT
+One-line Summary: Merge b4b-dev
+
+Purpose and description of changes
+----------------------------------
+
+Bring b4b-dev branch to main CTSM development.
+
+- PLUMBER2 for ctsm5.2 datasets
+- Last bit of PPE changes for namelist and parameter file settings
+- Update run_sys_tests on Derecho for compiler jobs to run using 16 tasks
+- Bring in a fix for dust emissions for coupling with CAM
+
+Update cs.status parsing script to make expected BASELINE fails more obvious
+
+Fix some issues with finding IC files for certain lnd_tuning_modes: all for cam7,
+ clm5_0_cam6.0, and clm6_0_cam6.0
+
+Significant changes to scientifically-supported configurations
+--------------------------------------------------------------
+
+Does this tag change answers significantly for any of the following physics configurations?
+(Details of any changes will be given in the "Answer changes" section below.)
+
+ [Put an [X] in the box for any configuration with significant answer changes.]
+
+[ ] clm6_0
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+
+List of CTSM issues fixed (include CTSM Issue # and description) [one per line]:
+ Fixes #2687 -- Error in Prigent streams setting when coupled to CAM
+ Fixes #2709 -- Problem in megan_specifier checking in namelist due to update in CMEPS
+ Fixes #2712 -- Allow user to change drydep, fire_emiss, megan namelists in user_nl_clm
+ even when those CLM_BLDNML_OPTS are off
+ Fixes #2567 -- PPE prep work
+ Fixes #1652 -- c3psn is wrong for some PFT's not currently used
+ Fixes #2484 -- update PLUMBER2 user-mods to ctsm5.2 surface datasets
+
+Notes of particular relevance for users
+---------------------------------------
+
+Caveats for users (e.g., need to interpolate initial conditions):
+ atm_provides_lightning can be set in drv_flds_in now, but doesn't do anything
+
+ When LND_SETS_DUST_EMIS_DRV_FLD==FALSE and you are coupled to CAM
+ and there is a conflict between CAM and CTSM settings, a message like this happens:
+
+ Using clm5_0_cam6.0 for lnd_tuning_mode
+Read in the drv_flds_in file generated by CAM's build-namelist
+Build::Namelist::_merge_nl:ERROR: A variable was already set, so we are terminating on the conflict variable name is =dep_data_file
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ Changed behavior for CLM_BLDNML_OPTS command line options: -drydep, -megan, and -fire_emis
+ Turning them on now only adds test namelists to use, you can add custom settings for them
+ in user_nl_clm with or without them on
+
+ atm_provides_lightning and atm_ozone_frequency can be set in user_nl_clm for drv_flds_in
+ The first is not active, and the second you should probably have CAM set
+
+ New XML variable: PLUMBER2SITE to set the site name for PLUMBER2 cases
+
+Changes made to namelist defaults (e.g., changed parameter values): PLUMBER2 datasets
+
+ Using PLUMBER2 user-mods now gives you ctsm5.2 surface datasets
+
+Changes to the datasets (e.g., parameter, surface or initial files): parameter files
+ New parameter file with c3psn corrected and ndays_on changed to PFT
+ new parameters: crit_onset_gdd_sf, zbedrock, zbedrock_sf
+
+Changes to documentation: Yes regarding build-namelist command line options listed above
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+ When LND_SETS_DUST_EMIS_DRV_FLD==FALSE (so coupled to CAM) -- The CAM $CASEDIR/Buildconf/camconf/drv_flds_in namelist is read in to get the CAM drv_flds_in settings. For this to work correctly
+ the drydep, and fire-emiss subroutines need to be after the dust_emis subroutine which reads in
+ the CAM drv_flds_in.
+ See plan to phase out LND_SETS_DUST_EMIS_DRV_FLD here:
+ https://github.com/ESCOMP/CTSM/issues/2713
+
+Changes to tests or testing:
+ Updated parameter files for some specific test mods
+
+Testing summary: regular
+----------------
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ derecho - PASS (1005 different because of new parameter files)
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ derecho - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ derecho ----- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: No bit-for-bit
+
+Other details
+-------------
+
+List any git submodules updated (cime, rtm, mosart, cism, fates, etc.): cdeps
+ cdeps to cdeps1.0.47
+
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+ https://github.com/ESCOMP/CTSM/pull/2731 -- merge b4b-dev
+
+===============================================================
+===============================================================
+Tag name: ctsm5.2.026
+Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Fri 23 Aug 2024 05:17:56 PM MDT
+One-line Summary: Turn on excess ice, explicit AC, Leung_2023 for clm6
+
+Purpose and description of changes
+----------------------------------
+
+ Turn on excess ice, explicit AC, Leung_2023 for clm6.
+
+
+Significant changes to scientifically-supported configurations
+--------------------------------------------------------------
+
+Does this tag change answers significantly for any of the following physics configurations?
+(Details of any changes will be given in the "Answer changes" section below.)
+
+ [Put an [X] in the box for any configuration with significant answer changes.]
+
+[X] clm6_0
+
+[X] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+List of CTSM issues fixed (include CTSM Issue # and description) [one per line]:
+Fixes #2466 Turn excess ice on by default in CESM3
+Fixes #2568 Turn on explicit AC, Leung_2023, and excess ice by default
+
+Notes of particular relevance for users
+---------------------------------------
+Changes made to namelist defaults (e.g., changed parameter values):
+ Namelist defaults now turn on excess ice, explicit AC, Leung_2023
+ in clm6; they also pick up new finidat files for clm6.
+
+Changes to the datasets (e.g., parameter, surface or initial files):
+ CLM6 cases need new finidat files. We use a f09 1850 finidat for
+ all clm6 cases because that's all that we have generated for now.
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+ CLM6 cases need new finidat files. We use a f09 1850 finidat for
+ all clm6 cases because that's all that we have generated for now.
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ derecho - OK, expected FAIL> cnfire_const%non_boreal_peatfire_c , & ! Input: [real(r8) ] (/hr) c parameter for non-boreal peatland fire
pot_hmn_ign_counts_alpha => cnfire_const%pot_hmn_ign_counts_alpha , & ! Input: [real(r8) ] (/person/month) Potential human ignition counts
boreal_peatfire_c => cnfire_const%boreal_peatfire_c , & ! Input: [real(r8) ] (/hr) c parameter for boreal peatland fire
+ defo_fire_precip_thresh_bet => cnfire_const%defo_fire_precip_thresh_bet, & ! Input: [real(r8) ] (mm/day) Max running mean daily precip allowing deforestation fire for broadleaf evergreen trees
+ defo_fire_precip_thresh_bdt => cnfire_const%defo_fire_precip_thresh_bdt, & ! Input: [real(r8) ] (mm/day) Max running mean daily precip allowing deforestation fire for broadleaf deciduous trees
+ borpeat_fire_soilmoist_denom => cnfire_const%borpeat_fire_soilmoist_denom, & ! Input: [real(r8) ] (unitless) Denominator of exponential in soil moisture term of equation relating that and temperature to boreal peat fire (unitless)
+ nonborpeat_fire_precip_denom => cnfire_const%nonborpeat_fire_precip_denom, & ! Input: [real(r8) ] (unitless) Denominator of precipitation in equation relating that to non-boreal peat fire (unitless)
+
fsr_pft => pftcon%fsr_pft , & ! Input:
fd_pft => pftcon%fd_pft , & ! Input:
@@ -532,10 +537,10 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
g= col%gridcell(c)
if(grc%latdeg(g) < cnfire_const%borealat )then
baf_peatf(c) = non_boreal_peatfire_c/secsphr*max(0._r8, &
- min(1._r8,(4.0_r8-prec60_col(c)*secspday)/ &
+ min(1._r8,(4.0_r8-prec60_col(c)*secspday/nonborpeat_fire_precip_denom)/ &
4.0_r8))**2*peatf_lf(c)*(1._r8-fsat(c))
else
- baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/0.3_r8))* &
+ baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/borpeat_fire_soilmoist_denom))* &
max(0._r8,min(1._r8,(tsoi17(c)-SHR_CONST_TKFRZ)/10._r8))*peatf_lf(c)* &
(1._r8-fsat(c))
end if
@@ -607,7 +612,11 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
fbac1(c) = 0._r8
farea_burned(c) = baf_crop(c)+baf_peatf(c)
else
- cri = (4.0_r8*trotr1_col(c)+1.8_r8*trotr2_col(c))/(trotr1_col(c)+trotr2_col(c))
+ ! Calculate the precip threshold as the area-weighted mean of that for BET and BDT
+ cri = (defo_fire_precip_thresh_bet * trotr1_col(c) &
+ + defo_fire_precip_thresh_bdt * trotr2_col(c)) &
+ / (trotr1_col(c) + trotr2_col(c))
+
cli = (max(0._r8,min(1._r8,(cri-prec60_col(c)*secspday)/cri))**0.5)* &
(max(0._r8,min(1._r8,(cri-prec10_col(c)*secspday)/cri))**0.5)* &
max(0.0005_r8,min(1._r8,19._r8*dtrotr_col(c)*dayspyr*secspday/dt-0.001_r8))* &
diff --git a/src/biogeochem/CNFireLi2016Mod.F90 b/src/biogeochem/CNFireLi2016Mod.F90
index 955d7fe398..b7c14938f7 100644
--- a/src/biogeochem/CNFireLi2016Mod.F90
+++ b/src/biogeochem/CNFireLi2016Mod.F90
@@ -179,6 +179,11 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
non_boreal_peatfire_c => cnfire_const%non_boreal_peatfire_c , & ! Input: [real(r8) ] (/hr) c parameter for non-boreal peatland fire
pot_hmn_ign_counts_alpha => cnfire_const%pot_hmn_ign_counts_alpha , & ! Input: [real(r8) ] (/person/month) Potential human ignition counts
boreal_peatfire_c => cnfire_const%boreal_peatfire_c , & ! Input: [real(r8) ] (/hr) c parameter for boreal peatland fire
+ max_rh30_affecting_fuel => cnfire_const%max_rh30_affecting_fuel , & ! Input: [real(r8) ] (%) Value above which 30-day running relative humidity has no effect on fuel combustibility
+ defo_fire_precip_thresh_bet => cnfire_const%defo_fire_precip_thresh_bet , & ! Input: [real(r8) ] (mm/day) Max running mean daily precip allowing deforestation fire for broadleaf evergreen trees
+ defo_fire_precip_thresh_bdt => cnfire_const%defo_fire_precip_thresh_bdt , & ! Input: [real(r8) ] (mm/day) Max running mean daily precip allowing deforestation fire for broadleaf deciduous trees
+ borpeat_fire_soilmoist_denom => cnfire_const%borpeat_fire_soilmoist_denom, & ! Input: [real(r8) ] (unitless) Denominator of exponential in soil moisture term of equation relating that and temperature to boreal peat fire (unitless)
+ nonborpeat_fire_precip_denom => cnfire_const%nonborpeat_fire_precip_denom, & ! Input: [real(r8) ] (unitless) Denominator of precipitation in equation relating that to non-boreal peat fire (unitless)
fsr_pft => pftcon%fsr_pft , & ! Input:
fd_pft => pftcon%fd_pft , & ! Input:
@@ -547,10 +552,10 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
g= col%gridcell(c)
if(grc%latdeg(g) < cnfire_const%borealat )then
baf_peatf(c) = non_boreal_peatfire_c/secsphr*max(0._r8, &
- min(1._r8,(4.0_r8-prec60_col(c)*secspday)/ &
+ min(1._r8,(4.0_r8-prec60_col(c)*secspday/nonborpeat_fire_precip_denom)/ &
4.0_r8))**2*peatf_lf(c)*(1._r8-fsat(c))
else
- baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/0.3_r8))* &
+ baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/borpeat_fire_soilmoist_denom))* &
max(0._r8,min(1._r8,(tsoi17(c)-SHR_CONST_TKFRZ)/10._r8))*peatf_lf(c)* &
(1._r8-fsat(c))
end if
@@ -597,7 +602,7 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
if (trotr1_col(c)+trotr2_col(c)<=0.6_r8) then
afuel =min(1._r8,max(0._r8,(fuelc(c)-2500._r8)/(5000._r8-2500._r8)))
arh=1._r8-max(0._r8, min(1._r8,(forc_rh(g)-rh_low)/(rh_hgh-rh_low)))
- arh30=1._r8-max(cnfire_params%prh30, min(1._r8,rh30_col(c)/90._r8))
+ arh30=1._r8-max(cnfire_params%prh30, min(1._r8,rh30_col(c)/max_rh30_affecting_fuel))
if (forc_rh(g) < rh_hgh.and. wtlf(c) > 0._r8 .and. tsoi17(c)> SHR_CONST_TKFRZ)then
fire_m = ((afuel*arh30+(1._r8-afuel)*arh)**1.5_r8)*((1._r8 -max(0._r8,&
min(1._r8,(btran_col(c)/wtlf(c)-bt_min)/(bt_max-bt_min))))**0.5_r8)
@@ -629,7 +634,11 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
fbac1(c) = 0._r8
farea_burned(c) = baf_crop(c)+baf_peatf(c)
else
- cri = (4.0_r8*trotr1_col(c)+1.8_r8*trotr2_col(c))/(trotr1_col(c)+trotr2_col(c))
+ ! Calculate the precip threshold as the area-weighted mean of that for BET and BDT
+ cri = (defo_fire_precip_thresh_bet * trotr1_col(c) &
+ + defo_fire_precip_thresh_bdt * trotr2_col(c)) &
+ / (trotr1_col(c) + trotr2_col(c))
+
cli = (max(0._r8,min(1._r8,(cri-prec60_col(c)*secspday)/cri))**0.5)* &
(max(0._r8,min(1._r8,(cri-prec10_col(c)*secspday)/cri))**0.5)* &
max(0.0005_r8,min(1._r8,19._r8*dtrotr_col(c)*dayspyr*secspday/dt-0.001_r8))* &
diff --git a/src/biogeochem/CNFireLi2021Mod.F90 b/src/biogeochem/CNFireLi2021Mod.F90
index 6d504a1e26..d1fd9338b8 100644
--- a/src/biogeochem/CNFireLi2021Mod.F90
+++ b/src/biogeochem/CNFireLi2021Mod.F90
@@ -177,6 +177,11 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
non_boreal_peatfire_c => cnfire_const%non_boreal_peatfire_c , & ! Input: [real(r8) ] (/hr) c parameter for non-boreal peatland fire
pot_hmn_ign_counts_alpha => cnfire_const%pot_hmn_ign_counts_alpha , & ! Input: [real(r8) ] (/person/month) Potential human ignition counts
boreal_peatfire_c => cnfire_const%boreal_peatfire_c , & ! Input: [real(r8) ] (/hr) c parameter for boreal peatland fire
+ max_rh30_affecting_fuel => cnfire_const%max_rh30_affecting_fuel , & ! Input: [real(r8) ] (%) Value above which 30-day running relative humidity has no effect on fuel combustibility
+ defo_fire_precip_thresh_bet => cnfire_const%defo_fire_precip_thresh_bet, & ! Input: [real(r8) ] (mm/day) Max running mean daily precip allowing deforestation fire for broadleaf evergreen trees
+ defo_fire_precip_thresh_bdt => cnfire_const%defo_fire_precip_thresh_bdt, & ! Input: [real(r8) ] (mm/day) Max running mean daily precip allowing deforestation fire for broadleaf deciduous trees
+ borpeat_fire_soilmoist_denom => cnfire_const%borpeat_fire_soilmoist_denom, & ! Input: [real(r8) ] (unitless) Denominator of exponential in soil moisture term of equation relating that and temperature to boreal peat fire (unitless)
+ nonborpeat_fire_precip_denom => cnfire_const%nonborpeat_fire_precip_denom, & ! Input: [real(r8) ] (unitless) Denominator of precipitation in equation relating that to non-boreal peat fire (unitless)
fsr_pft => pftcon%fsr_pft , & ! Input:
fd_pft => pftcon%fd_pft , & ! Input:
@@ -548,10 +553,10 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
g= col%gridcell(c)
if(grc%latdeg(g) < cnfire_const%borealat )then
baf_peatf(c) = non_boreal_peatfire_c/secsphr*max(0._r8, &
- min(1._r8,(4.0_r8-prec60_col(c)*secspday)/ &
+ min(1._r8,(4.0_r8-prec60_col(c)*secspday/nonborpeat_fire_precip_denom)/ &
4.0_r8))**2*peatf_lf(c)*(1._r8-fsat(c))
else
- baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/0.3_r8))* &
+ baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/borpeat_fire_soilmoist_denom))* &
max(0._r8,min(1._r8,(tsoi17(c)-SHR_CONST_TKFRZ)/10._r8))*peatf_lf(c)* &
(1._r8-fsat(c))
end if
@@ -598,7 +603,7 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
if (trotr1_col(c)+trotr2_col(c)<=0.6_r8) then
afuel =min(1._r8,max(0._r8,(fuelc(c)-2500._r8)/(5000._r8-2500._r8)))
arh=1._r8-max(0._r8, min(1._r8,(forc_rh(g)-rh_low)/(rh_hgh-rh_low)))
- arh30=1._r8-max(cnfire_params%prh30, min(1._r8,rh30_col(c)/90._r8))
+ arh30=1._r8-max(cnfire_params%prh30, min(1._r8,rh30_col(c)/max_rh30_affecting_fuel))
if (forc_rh(g) < rh_hgh.and. wtlf(c) > 0._r8 .and. tsoi17(c)> SHR_CONST_TKFRZ)then
fire_m = ((afuel*arh30+(1._r8-afuel)*arh)**1.5_r8) &
*((1._r8-btran_col(c)/wtlf(c))**0.5_r8)
@@ -631,7 +636,11 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
fbac1(c) = 0._r8
farea_burned(c) = baf_crop(c)+baf_peatf(c)
else
- cri = (4.0_r8*trotr1_col(c)+1.8_r8*trotr2_col(c))/(trotr1_col(c)+trotr2_col(c))
+ ! Calculate the precip threshold as the area-weighted mean of that for BET and BDT
+ cri = (defo_fire_precip_thresh_bet * trotr1_col(c) &
+ + defo_fire_precip_thresh_bdt * trotr2_col(c)) &
+ / (trotr1_col(c) + trotr2_col(c))
+
cli = (max(0._r8,min(1._r8,(cri-prec60_col(c)*secspday)/cri))**0.5)* &
(max(0._r8,min(1._r8,(cri-prec10_col(c)*secspday)/cri))**0.5)* &
(15._r8*min(0.0016_r8,dtrotr_col(c)/dt*dayspyr*secspday)+0.009_r8)* &
diff --git a/src/biogeochem/CNFireLi2024Mod.F90 b/src/biogeochem/CNFireLi2024Mod.F90
index 503ed28488..5f7c0019f6 100644
--- a/src/biogeochem/CNFireLi2024Mod.F90
+++ b/src/biogeochem/CNFireLi2024Mod.F90
@@ -151,11 +151,9 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
real(r8) :: afuel !weight for arh and arh30
real(r8) :: btran_col(bounds%begc:bounds%endc)
logical :: transient_landcover ! whether this run has any prescribed transient landcover
- real(r8), target :: prec60_col_target(bounds%begc:bounds%endc)
- real(r8), target :: prec10_col_target(bounds%begc:bounds%endc)
+ real(r8), target :: prec30_col_target(bounds%begc:bounds%endc)
real(r8), target :: rh30_col_target(bounds%begc:bounds%endc)
- real(r8), pointer :: prec60_col(:)
- real(r8), pointer :: prec10_col(:)
+ real(r8), pointer :: prec30_col(:)
real(r8), pointer :: rh30_col(:)
!-----------------------------------------------------------------------
@@ -177,6 +175,11 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
non_boreal_peatfire_c => cnfire_const%non_boreal_peatfire_c , & ! Input: [real(r8) ] (/hr) c parameter for non-boreal peatland fire
pot_hmn_ign_counts_alpha => cnfire_const%pot_hmn_ign_counts_alpha , & ! Input: [real(r8) ] (/person/month) Potential human ignition counts
boreal_peatfire_c => cnfire_const%boreal_peatfire_c , & ! Input: [real(r8) ] (/hr) c parameter for boreal peatland fire
+ max_rh30_affecting_fuel => cnfire_const%max_rh30_affecting_fuel , & ! Input: [real(r8) ] (%) Value above which 30-day running relative humidity has no effect on fuel combustibility
+ defo_fire_precip_thresh_bet => cnfire_const%defo_fire_precip_thresh_bet, & ! Input: [real(r8) ] (mm/day) Max running mean daily precip allowing deforestation fire for broadleaf evergreen trees
+ defo_fire_precip_thresh_bdt => cnfire_const%defo_fire_precip_thresh_bdt, & ! Input: [real(r8) ] (mm/day) Max running mean daily precip allowing deforestation fire for broadleaf deciduous trees
+ borpeat_fire_soilmoist_denom => cnfire_const%borpeat_fire_soilmoist_denom, & ! Input: [real(r8) ] (unitless) Denominator of exponential in soil moisture term of equation relating that and temperature to boreal peat fire (unitless)
+ nonborpeat_fire_precip_denom => cnfire_const%nonborpeat_fire_precip_denom, & ! Input: [real(r8) ] (unitless) Denominator of precipitation in equation relating that to non-boreal peat fire (unitless)
fsr_pft => pftcon%fsr_pft , & ! Input:
fd_pft => pftcon%fd_pft , & ! Input:
@@ -194,9 +197,8 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
forc_t => atm2lnd_inst%forc_t_downscaled_col , & ! Input: [real(r8) (:) ] downscaled atmospheric temperature (Kelvin)
forc_rain => wateratm2lndbulk_inst%forc_rain_downscaled_col , & ! Input: [real(r8) (:) ] downscaled rain
forc_snow => wateratm2lndbulk_inst%forc_snow_downscaled_col , & ! Input: [real(r8) (:) ] downscaled snow
- prec60 => wateratm2lndbulk_inst%prec60_patch , & ! Input: [real(r8) (:) ] 60-day running mean of tot. precipitation
- prec10 => wateratm2lndbulk_inst%prec10_patch , & ! Input: [real(r8) (:) ] 10-day running mean of tot. precipitation
- rh30 => wateratm2lndbulk_inst%rh30_patch , & ! Input: [real(r8) (:) ] 10-day running mean of tot. precipitation
+ prec30 => wateratm2lndbulk_inst%prec30_patch , & ! Input: [real(r8) (:) ] 10-day running mean of tot. precipitation
+ rh30 => wateratm2lndbulk_inst%rh30_patch , & ! Input: [real(r8) (:) ] 10-day running mean of tot. relative humidity
dwt_smoothed => cnveg_state_inst%dwt_smoothed_patch , & ! Input: [real(r8) (:) ] change in patch weight (-1 to 1) on the gridcell, smoothed over the year
cropf_col => cnveg_state_inst%cropf_col , & ! Input: [real(r8) (:) ] cropland fraction in veg column
gdp_lf => this%gdp_lf_col , & ! Input: [real(r8) (:) ] gdp data
@@ -246,15 +248,11 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
transient_landcover = run_has_transient_landcover()
!pft to column average
- prec10_col =>prec10_col_target
+ prec30_col =>prec30_col_target
call p2c(bounds, num_soilc, filter_soilc, &
- prec10(bounds%begp:bounds%endp), &
- prec10_col(bounds%begc:bounds%endc))
+ prec30(bounds%begp:bounds%endp), &
+ prec30_col(bounds%begc:bounds%endc))
- prec60_col =>prec60_col_target
- call p2c(bounds, num_soilc, filter_soilc, &
- prec60(bounds%begp:bounds%endp), &
- prec60_col(bounds%begc:bounds%endc))
rh30_col =>rh30_col_target
call p2c(bounds, num_soilc, filter_soilc, &
@@ -304,9 +302,9 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
if( patch%itype(p) > nc4_grass )then
cropf_col(c) = cropf_col(c) + patch%wtcol(p)
end if
- ! For natural vegetation (non-crop and non-bare-soil)
- if( patch%itype(p) >= ndllf_evr_tmp_tree .and. patch%itype(p) <= nc4_grass )then
- lfwt(c) = lfwt(c) + patch%wtcol(p)
+ ! For natural vegetation
+ if (patch%itype(p) <= nc4_grass ) then
+ lfwt(c) = lfwt(c) + patch%wtgcell(p)
end if
end do
!
@@ -545,11 +543,14 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
c = filter_soilc(fc)
g= col%gridcell(c)
if(grc%latdeg(g) < cnfire_const%borealat )then
- baf_peatf(c) = non_boreal_peatfire_c/secsphr*max(0._r8, &
- min(1._r8,(4.0_r8-prec60_col(c)*secspday)/ &
- 4.0_r8))**2*peatf_lf(c)*(1._r8-fsat(c))
+ if ((trotr1_col(c)+trotr2_col(c))*col%wtgcell(c)<=0.8_r8.and.trotr1_col(c)+trotr2_col(c)>0.0_r8) then
+ baf_peatf(c) = non_boreal_peatfire_c/secsphr*max(0._r8, &
+ min(1._r8,(1._r8-prec30_col(c)*secspday/nonborpeat_fire_precip_denom)))*peatf_lf(c)
+ else
+ baf_peatf(c) = 0._r8
+ end if
else
- baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/0.3_r8))* &
+ baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/borpeat_fire_soilmoist_denom))* &
max(0._r8,min(1._r8,(tsoi17(c)-SHR_CONST_TKFRZ)/10._r8))*peatf_lf(c)* &
(1._r8-fsat(c))
end if
@@ -592,32 +593,36 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
end do
end if
fuelc(c) = fuelc(c)/(1._r8-cropf_col(c))
- fb = max(0.0_r8,min(1.0_r8,(fuelc(c)-lfuel)/(ufuel-lfuel)))
+ fb = max(0.0_r8,min(1.0_r8,(fuelc(c)-lfuel)/(ufuel-lfuel)))
+ afuel = min(1._r8,max(0._r8,(fuelc(c)-2500._r8)/(5000._r8-2500._r8)))
+ arh = 1._r8-max(0._r8, min(1._r8,(forc_rh(g)-rh_low)/(rh_hgh-rh_low)))
+ arh30 = 1._r8-max(cnfire_params%prh30, min(1._r8,rh30_col(c)/max_rh30_affecting_fuel))
+ if (forc_rh(g) < rh_hgh.and. wtlf(c) > 0._r8 .and. tsoi17(c)> SHR_CONST_TKFRZ)then
+ fire_m = ((afuel*arh30+(1._r8-afuel)*arh)**1.5_r8) &
+ *((1._r8-btran_col(c)/wtlf(c))**0.5_r8)
+ else
+ fire_m = 0._r8
+ end if
+ lh = pot_hmn_ign_counts_alpha*6.8_r8*hdmlf**(0.43_r8)/30._r8/24._r8
+ fs = 1._r8-(0.01_r8+0.98_r8*exp(-0.025_r8*hdmlf))
if (trotr1_col(c)+trotr2_col(c)<=0.6_r8) then
- afuel =min(1._r8,max(0._r8,(fuelc(c)-2500._r8)/(5000._r8-2500._r8)))
- arh=1._r8-max(0._r8, min(1._r8,(forc_rh(g)-rh_low)/(rh_hgh-rh_low)))
- arh30=1._r8-max(cnfire_params%prh30, min(1._r8,rh30_col(c)/90._r8))
- if (forc_rh(g) < rh_hgh.and. wtlf(c) > 0._r8 .and. tsoi17(c)> SHR_CONST_TKFRZ)then
- fire_m = ((afuel*arh30+(1._r8-afuel)*arh)**1.5_r8) &
- *((1._r8-btran_col(c)/wtlf(c))**0.5_r8)
- else
- fire_m = 0._r8
- end if
- lh = pot_hmn_ign_counts_alpha*6.8_r8*hdmlf**(0.43_r8)/30._r8/24._r8
- fs = 1._r8-(0.01_r8+0.98_r8*exp(-0.025_r8*hdmlf))
- ig = (lh+this%forc_lnfm(g)/(5.16_r8+2.16_r8* &
- cos(SHR_CONST_PI/180._r8*3*min(60._r8,abs(grc%latdeg(g)))))* &
- cnfire_params%ignition_efficiency)*(1._r8-fs)*(1._r8-cropf_col(c))
- nfire(c) = ig/secsphr*fb*fire_m*lgdp_col(c) !fire counts/km2/sec
- Lb_lf = 1._r8+10._r8*(1._r8-EXP(-0.06_r8*forc_wind(g)))
- spread_m = fire_m**0.5_r8
- farea_burned(c) = min(1._r8,(cnfire_const%g0*spread_m*fsr_col(c)* &
- fd_col(c)/1000._r8)**2*lgdp1_col(c)* &
- lpop_col(c)*nfire(c)*SHR_CONST_PI*Lb_lf+ &
- baf_crop(c)+baf_peatf(c)) ! fraction (0-1) per sec
+ ig = (lh+this%forc_lnfm(g)/(5.16_r8+2.16_r8* &
+ cos(SHR_CONST_PI/180._r8*3*min(60._r8,abs(grc%latdeg(g)))))* &
+ cnfire_params%ignition_efficiency)*(1._r8-fs)* &
+ (lfwt(c)**0.5)
else
- farea_burned(c)=min(1._r8,baf_crop(c)+baf_peatf(c))
+ ig = this%forc_lnfm(g)/(5.16_r8+2.16_r8* &
+ cos(SHR_CONST_PI/180._r8*3*min(60._r8,abs(grc%latdeg(g)))))* &
+ cnfire_params%ignition_efficiency*(1._r8-fs)* &
+ (lfwt(c)**0.5)
end if
+ nfire(c) = ig/secsphr*fb*fire_m*lgdp_col(c) !fire counts/km2/sec
+ Lb_lf = 1._r8+10._r8*(1._r8-EXP(-0.06_r8*forc_wind(g)))
+ spread_m = fire_m**0.5_r8
+ fd_col(c) = (lfwt(c)*lgdp1_col(c)*lpop_col(c))**0.5_r8 * fd_col(c)
+ farea_burned(c) = min(1._r8,(cnfire_const%g0*spread_m*fsr_col(c)* &
+ fd_col(c)/1000._r8)**2*nfire(c)*SHR_CONST_PI*Lb_lf+ &
+ baf_crop(c)+baf_peatf(c)) ! fraction (0-1) per sec
!
! if landuse change data is used, calculate deforestation fires and
! add it in the total of burned area fraction
@@ -627,19 +632,22 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
if(( kmo == 1 .and. kda == 1 .and. mcsec == 0) .or. &
dtrotr_col(c) <=0._r8 )then
fbac1(c) = 0._r8
- farea_burned(c) = baf_crop(c)+baf_peatf(c)
- else
- cri = (4.0_r8*trotr1_col(c)+1.8_r8*trotr2_col(c))/(trotr1_col(c)+trotr2_col(c))
- cli = (max(0._r8,min(1._r8,(cri-prec60_col(c)*secspday)/cri))**0.5)* &
- (max(0._r8,min(1._r8,(cri-prec10_col(c)*secspday)/cri))**0.5)* &
+ else ! SSR: Why are the code blocks above and below this else mutually exclusive?
+ ! Calculate the precip threshold as the area-weighted mean of that for BET and BDT
+ cri = (defo_fire_precip_thresh_bet * trotr1_col(c) &
+ + defo_fire_precip_thresh_bdt * trotr2_col(c)) &
+ / (trotr1_col(c) + trotr2_col(c))
+
+ cli = max(0._r8,min(1._r8,1._r8-prec30_col(c)*secspday/cri))* &
(15._r8*min(0.0016_r8,dtrotr_col(c)/dt*dayspyr*secspday)+0.009_r8)* &
max(0._r8,min(1._r8,(0.25_r8-(forc_rain(c)+forc_snow(c))*secsphr)/0.25_r8))
- farea_burned(c) = fb*cli*(cli_scale/secspday)+baf_crop(c)+baf_peatf(c)
+
+ farea_burned(c) = farea_burned(c)+fb*cli*(cli_scale/secspday)
! burned area out of conversion region due to land use fire
fbac1(c) = max(0._r8,fb*cli*(cli_scale/secspday) - 2.0_r8*lfc(c)/dt)
end if
! total burned area out of conversion
- fbac(c) = fbac1(c)+baf_crop(c)+baf_peatf(c)
+ fbac(c) = farea_burned(c) + fbac1(c)
else
fbac(c) = farea_burned(c)
end if
diff --git a/src/biogeophys/Wateratm2lndBulkType.F90 b/src/biogeophys/Wateratm2lndBulkType.F90
index 4aacbe11c2..b3a28196f1 100644
--- a/src/biogeophys/Wateratm2lndBulkType.F90
+++ b/src/biogeophys/Wateratm2lndBulkType.F90
@@ -35,6 +35,7 @@ module Wateratm2lndBulkType
real(r8), pointer :: forc_rh_grc (:) ! atmospheric relative humidity (%)
real(r8) , pointer :: prec365_col (:) ! col 365-day running mean of tot. precipitation (see comment in UpdateAccVars regarding why this is col-level despite other prec accumulators being patch-level)
real(r8) , pointer :: prec60_patch (:) ! patch 60-day running mean of tot. precipitation (mm/s)
+ real(r8) , pointer :: prec30_patch (:)
real(r8) , pointer :: prec10_patch (:) ! patch 10-day running mean of tot. precipitation (mm/s)
real(r8) , pointer :: rh30_patch (:) ! patch 30-day running mean of relative humidity
real(r8) , pointer :: prec24_patch (:) ! patch 24-hour running mean of tot. precipitation (mm/s)
@@ -126,6 +127,7 @@ subroutine InitBulkAllocate(this, bounds)
allocate(this%forc_rh_grc (begg:endg)) ; this%forc_rh_grc (:) = ival
allocate(this%prec365_col (begc:endc)) ; this%prec365_col (:) = nan
allocate(this%prec60_patch (begp:endp)) ; this%prec60_patch(:) = nan
+ allocate(this%prec30_patch (begp:endp)) ; this%prec30_patch(:) = nan
allocate(this%prec10_patch (begp:endp)) ; this%prec10_patch(:) = nan
allocate(this%rh30_patch (begp:endp)) ; this%rh30_patch (:) = nan
if (use_fates) then
@@ -198,6 +200,12 @@ subroutine InitBulkHistory(this, bounds)
call hist_addfld1d (fname=this%info%fname('PREC60'), units='MM H2O/S', &
avgflag='A', long_name=this%info%lname('60-day running mean of PREC'), &
ptr_patch=this%prec60_patch, default='inactive')
+
+ this%prec30_patch(begp:endp) = spval
+ call hist_addfld1d (fname=this%info%fname('PREC30'), units='MM H2O/S', &
+ avgflag='A', long_name=this%info%lname('30-day running mean of PREC'), &
+ ptr_patch=this%prec30_patch, default='inactive')
+
end if
end subroutine InitBulkHistory
@@ -245,6 +253,11 @@ subroutine InitAccBuffer (this, bounds)
desc='60-day running mean of total precipitation', accum_type='runmean', accum_period=-60, &
subgrid_type='pft', numlev=1, init_value=0._r8)
+ call init_accum_field (name='PREC30', units='MM H2O/S', &
+ desc='30-day running mean of total precipitation', accum_type='runmean', accum_period=-30, &
+ subgrid_type='pft', numlev=1, init_value=0._r8)
+
+
call init_accum_field (name='RH30', units='%', &
desc='30-day running mean of relative humidity', accum_type='runmean', accum_period=-30, &
subgrid_type='pft', numlev=1, init_value=100._r8)
@@ -324,6 +337,9 @@ subroutine InitAccVars(this, bounds)
call extract_accum_field ('PREC60', rbufslp, nstep)
this%prec60_patch(begp:endp) = rbufslp(begp:endp)
+ call extract_accum_field ('PREC30', rbufslp, nstep)
+ this%prec30_patch(begp:endp) = rbufslp(begp:endp)
+
call extract_accum_field ('RH30', rbufslp, nstep)
this%rh30_patch(begp:endp) = rbufslp(begp:endp)
end if
@@ -404,6 +420,9 @@ subroutine UpdateAccVars (this, bounds)
call update_accum_field ('PREC60', rbufslp, nstep)
call extract_accum_field ('PREC60', this%prec60_patch, nstep)
+ call update_accum_field ('PREC30', rbufslp, nstep)
+ call extract_accum_field ('PREC30', this%prec30_patch, nstep)
+
! Accumulate and extract PREC10 (accumulates total precipitation as 10-day running mean)
call update_accum_field ('PREC10', rbufslp, nstep)
call extract_accum_field ('PREC10', this%prec10_patch, nstep)
@@ -483,6 +502,7 @@ subroutine Clean(this)
! anomaly forcing
deallocate(this%prec365_col)
deallocate(this%prec60_patch)
+ deallocate(this%prec30_patch)
deallocate(this%prec10_patch)
if (use_fates) then
deallocate(this%prec24_patch)