Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fang summer '24 PR 2.1] More improvements to fire model #2711

Merged
merged 13 commits into from
Aug 22, 2024
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion bld/CLMBuildNamelist.pm
Original file line number Diff line number Diff line change
Expand Up @@ -2266,7 +2266,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'} ) ) {
Expand Down
44 changes: 39 additions & 5 deletions bld/namelist_files/namelist_defaults_ctsm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,12 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
<fire_method phys="clm5_0" >li2016crufrc</fire_method>
<fire_method phys="clm4_5" >li2014qianfrc</fire_method>

<max_rh30_affecting_fuel>90.d00</max_rh30_affecting_fuel>
<defo_fire_precip_thresh_bet>4.0d00</defo_fire_precip_thresh_bet>
<defo_fire_precip_thresh_bdt>1.8d00</defo_fire_precip_thresh_bdt>
<borpeat_fire_soilmoist_denom>0.3d00</borpeat_fire_soilmoist_denom>
<nonborpeat_fire_precip_denom>1.0d00</nonborpeat_fire_precip_denom>

<rh_low fire_method="li2014qianfrc" >30.0d00</rh_low>
<rh_hgh fire_method="li2014qianfrc" >80.0d00</rh_hgh>
<bt_min fire_method="li2014qianfrc" >0.3d00</bt_min>
Expand Down Expand Up @@ -350,21 +356,49 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
<ufuel fire_method="li2021gswpfrc" >1050.d00</ufuel>
<cmb_cmplt_fact_litter fire_method="li2021gswpfrc" >0.5d00</cmb_cmplt_fact_litter>
<cmb_cmplt_fact_cwd fire_method="li2021gswpfrc" >0.28d00</cmb_cmplt_fact_cwd>
<max_rh30_affecting_fuel fire_method="li2021gswpfrc" >90.</max_rh30_affecting_fuel>
samsrabin marked this conversation as resolved.
Show resolved Hide resolved
<defo_fire_precip_thresh_bet fire_method="li2021gswpfrc" >4.0d00</defo_fire_precip_thresh_bet>
<defo_fire_precip_thresh_bdt fire_method="li2021gswpfrc" >1.8d00</defo_fire_precip_thresh_bdt>

<rh_low fire_method="li2024gswpfrc" >30.0d00</rh_low>
<rh_hgh fire_method="li2024gswpfrc" >80.0d00</rh_hgh>
<bt_min fire_method="li2024gswpfrc" >0.85d00</bt_min>
<bt_max fire_method="li2024gswpfrc" >0.98d00</bt_max>
<cli_scale fire_method="li2024gswpfrc" >0.025d00</cli_scale>
<boreal_peatfire_c fire_method="li2024gswpfrc" >0.09d-4</boreal_peatfire_c>
<cli_scale fire_method="li2024gswpfrc" >0.01d00</cli_scale>
<boreal_peatfire_c fire_method="li2024gswpfrc" >0.28d-4</boreal_peatfire_c>
<pot_hmn_ign_counts_alpha fire_method="li2024gswpfrc" >0.010d00</pot_hmn_ign_counts_alpha>
<non_boreal_peatfire_c fire_method="li2024gswpfrc" >0.17d-3</non_boreal_peatfire_c>
<cropfire_a1 fire_method="li2024gswpfrc" >0.21d00</cropfire_a1>
<non_boreal_peatfire_c fire_method="li2024gswpfrc" >0.71d-4</non_boreal_peatfire_c>
<cropfire_a1 fire_method="li2024gswpfrc" >0.3d00</cropfire_a1>
<occur_hi_gdp_tree fire_method="li2024gswpfrc" >0.33d00</occur_hi_gdp_tree>
<lfuel fire_method="li2024gswpfrc" >75.d00</lfuel>
<ufuel fire_method="li2024gswpfrc" >1050.d00</ufuel>
<ufuel fire_method="li2024gswpfrc" >825.d00</ufuel>
<cmb_cmplt_fact_litter fire_method="li2024gswpfrc" >0.5d00</cmb_cmplt_fact_litter>
<cmb_cmplt_fact_cwd fire_method="li2024gswpfrc" >0.28d00</cmb_cmplt_fact_cwd>
<max_rh30_affecting_fuel fire_method="li2024gswpfrc" >90.d00</max_rh30_affecting_fuel>
<defo_fire_precip_thresh_bet fire_method="li2024gswpfrc" >1.4d00</defo_fire_precip_thresh_bet>
<defo_fire_precip_thresh_bdt fire_method="li2024gswpfrc" >0.5d00</defo_fire_precip_thresh_bdt>
<nonborpeat_fire_precip_denom fire_method="li2024gswpfrc" >6.0d00</nonborpeat_fire_precip_denom>

<rh_low fire_method="li2024crujra" >30.0d00</rh_low>
ekluzek marked this conversation as resolved.
Show resolved Hide resolved
<rh_hgh fire_method="li2024crujra" >85.0d00</rh_hgh>
<bt_min fire_method="li2024crujra" >0.85d00</bt_min>
<bt_max fire_method="li2024crujra" >0.98d00</bt_max>
<cli_scale fire_method="li2024crujra" >0.01d00</cli_scale>
<boreal_peatfire_c fire_method="li2024crujra" >0.28d-4</boreal_peatfire_c>
<pot_hmn_ign_counts_alpha fire_method="li2024crujra" >0.010d00</pot_hmn_ign_counts_alpha>
<non_boreal_peatfire_c fire_method="li2024crujra" >0.71d-4</non_boreal_peatfire_c>
<cropfire_a1 fire_method="li2024crujra" >0.3d00</cropfire_a1>
<occur_hi_gdp_tree fire_method="li2024crujra" >0.33d00</occur_hi_gdp_tree>
<lfuel fire_method="li2024crujra" >75.d00</lfuel>
<ufuel fire_method="li2024crujra" >825.d00</ufuel>
<cmb_cmplt_fact_litter fire_method="li2024crujra" >0.5d00</cmb_cmplt_fact_litter>
<cmb_cmplt_fact_cwd fire_method="li2024crujra" >0.28d00</cmb_cmplt_fact_cwd>
<max_rh30_affecting_fuel fire_method="li2024crujra" >95.</max_rh30_affecting_fuel>
<defo_fire_precip_thresh_bet fire_method="li2024crujra" >1.8d00</defo_fire_precip_thresh_bet>
<defo_fire_precip_thresh_bdt fire_method="li2024crujra" >0.6d00</defo_fire_precip_thresh_bdt>
<borpeat_fire_soilmoist_denom fire_method="li2024crujra" > 0.35d00</borpeat_fire_soilmoist_denom>
<nonborpeat_fire_precip_denom fire_method="li2024crujra" >6.5d00</nonborpeat_fire_precip_denom>


<!-- Canopy fluxes namelist defaults -->
<use_undercanopy_stability >.false.</use_undercanopy_stability>
Expand Down
32 changes: 29 additions & 3 deletions bld/namelist_files/namelist_definition_ctsm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -252,14 +252,15 @@ formulation (1).
</entry>

<entry id="fire_method" type="char*80" category="clm_physics"
group="cnfire_inparm" valid_values="nofire,li2014qianfrc,li2016crufrc,li2021gswpfrc,li2024gswpfrc" >
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
</entry>

<entry id="pot_hmn_ign_counts_alpha" type="real" category="clm_physics"
Expand Down Expand Up @@ -332,6 +333,31 @@ Combustion completeness factor for litter (unitless)
Combustion completeness factor for CWD[Course Woody Debris] (unitless)
</entry>

<entry id="max_rh30_affecting_fuel" type="real" category="clm_physics"
samsrabin marked this conversation as resolved.
Show resolved Hide resolved
group="lifire_inparm" >
Value above which 30-day running relative humidity has no effect on fuel combustibility
</entry>

<entry id="defo_fire_precip_thresh_bet" type="real" category="clm_physics"
group="lifire_inparm" >
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).
</entry>

<entry id="defo_fire_precip_thresh_bdt" type="real" category="clm_physics"
group="lifire_inparm" >
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).
</entry>

<entry id="nonborpeat_fire_precip_denom" type="real" category="clm_physics"
group="lifire_inparm" >
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).
</entry>

<entry id="borpeat_fire_soilmoist_denom" type="real" category="clm_physics"
group="lifire_inparm" >
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).
</entry>

<entry id="ncrit" type="real" category="clm_physics"
group="cnprecision_inparm" >
Critical threshold for truncation of Nitrogen (truncate Nitrogen states to zero below this value)
Expand Down
10 changes: 10 additions & 0 deletions cime_config/testdefs/testlist_clm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3600,6 +3600,16 @@
</options>
</test>

<test name="SMS_D_Ld65" grid="f10_f10_mg37" compset="I2000Clm60BgcCrop" testmods="clm/FireLi2024CruJra">
<machines>
<machine name="derecho" compiler="intel" category="aux_clm"/>
<machine name="derecho" compiler="intel" category="fire"/>
</machines>
<options>
<option name="wallclock">00:30:00</option>
</options>
</test>

<test name="SMS_Ld733" grid="f10_f10_mg37" compset="IHistClm60BgcCrop" testmods="clm/cropMonthOutput--clm/RxCropCalsNoAdapt">
<machines>
<machine name="derecho" compiler="intel" category="crop_calendars"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
../default
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fire_method = 'li2024crujra'
30 changes: 28 additions & 2 deletions src/biogeochem/CNFireBaseMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,12 @@ module CNFireBaseMod

real(r8) :: cmb_cmplt_fact_litter = 0.5_r8 ! combustion completion factor for litter (unitless)
real(r8) :: cmb_cmplt_fact_cwd = 0.25_r8 ! combustion completion factor for CWD (unitless)
end type
real(r8) :: max_rh30_affecting_fuel = 90._r8 ! Value above which 30-day running relative humidity has no effect on fuel combustibility (%)
real(r8) :: defo_fire_precip_thresh_bet = 4.0_r8 ! Max running mean daily precip (mm/d) allowing deforestation fire for broadleaf evergreen trees
real(r8) :: defo_fire_precip_thresh_bdt = 1.8_r8 ! Max running mean daily precip (mm/d) allowing deforestation fire for broadleaf deciduous trees
real(r8) :: borpeat_fire_soilmoist_denom = 0.3 ! Denominator of exponential in soil moisture term of equation relating that and temperature to boreal peat fire (unitless)
real(r8) :: nonborpeat_fire_precip_denom = 1.0 ! Denominator of precipitation in equation relating that to non-boreal peat fire (unitless)
end type

type, public :: params_type
real(r8) :: prh30 ! Factor related to dependence of fuel combustibility on 30-day running mean of relative humidity (unitless)
Expand Down Expand Up @@ -343,11 +348,17 @@ subroutine FireReadNML( this, NLFilename )
real(r8) :: non_boreal_peatfire_c, cropfire_a1
real(r8) :: rh_low, rh_hgh, bt_min, bt_max, occur_hi_gdp_tree
real(r8) :: lfuel, ufuel, cmb_cmplt_fact_litter, cmb_cmplt_fact_cwd
real(r8) :: max_rh30_affecting_fuel
real(r8) :: defo_fire_precip_thresh_bet, defo_fire_precip_thresh_bdt
real(r8) :: borpeat_fire_soilmoist_denom, nonborpeat_fire_precip_denom

namelist /lifire_inparm/ cli_scale, boreal_peatfire_c, pot_hmn_ign_counts_alpha, &
non_boreal_peatfire_c, cropfire_a1, &
rh_low, rh_hgh, bt_min, bt_max, occur_hi_gdp_tree, &
lfuel, ufuel, cmb_cmplt_fact_litter, cmb_cmplt_fact_cwd
lfuel, ufuel, 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 ( this%need_lightning_and_popdens() ) then
cli_scale = cnfire_const%cli_scale
Expand All @@ -364,6 +375,11 @@ subroutine FireReadNML( this, NLFilename )
occur_hi_gdp_tree = cnfire_const%occur_hi_gdp_tree
cmb_cmplt_fact_litter = cnfire_const%cmb_cmplt_fact_litter
cmb_cmplt_fact_cwd = cnfire_const%cmb_cmplt_fact_cwd
max_rh30_affecting_fuel = cnfire_const%max_rh30_affecting_fuel
defo_fire_precip_thresh_bet = cnfire_const%defo_fire_precip_thresh_bet
defo_fire_precip_thresh_bdt = cnfire_const%defo_fire_precip_thresh_bdt
borpeat_fire_soilmoist_denom = cnfire_const%borpeat_fire_soilmoist_denom
nonborpeat_fire_precip_denom = cnfire_const%nonborpeat_fire_precip_denom
! Initialize options to default values, in case they are not specified in
! the namelist

Expand Down Expand Up @@ -397,6 +413,11 @@ subroutine FireReadNML( this, NLFilename )
call shr_mpi_bcast (occur_hi_gdp_tree , mpicom)
call shr_mpi_bcast (cmb_cmplt_fact_litter , mpicom)
call shr_mpi_bcast (cmb_cmplt_fact_cwd , mpicom)
call shr_mpi_bcast (max_rh30_affecting_fuel , mpicom)
call shr_mpi_bcast (defo_fire_precip_thresh_bet, mpicom)
call shr_mpi_bcast (defo_fire_precip_thresh_bdt, mpicom)
call shr_mpi_bcast (borpeat_fire_soilmoist_denom, mpicom)
call shr_mpi_bcast (nonborpeat_fire_precip_denom, mpicom)

cnfire_const%cli_scale = cli_scale
cnfire_const%boreal_peatfire_c = boreal_peatfire_c
Expand All @@ -412,6 +433,11 @@ subroutine FireReadNML( this, NLFilename )
cnfire_const%occur_hi_gdp_tree = occur_hi_gdp_tree
cnfire_const%cmb_cmplt_fact_litter = cmb_cmplt_fact_litter
cnfire_const%cmb_cmplt_fact_cwd = cmb_cmplt_fact_cwd
cnfire_const%max_rh30_affecting_fuel = max_rh30_affecting_fuel
cnfire_const%defo_fire_precip_thresh_bet = defo_fire_precip_thresh_bet
cnfire_const%defo_fire_precip_thresh_bdt = defo_fire_precip_thresh_bdt
cnfire_const%borpeat_fire_soilmoist_denom = borpeat_fire_soilmoist_denom
cnfire_const%nonborpeat_fire_precip_denom = nonborpeat_fire_precip_denom

if (masterproc) then
write(iulog,*) ' '
Expand Down
2 changes: 1 addition & 1 deletion src/biogeochem/CNFireFactoryMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ subroutine create_cnfire_method( NLFilename, cnfire_method )
allocate(cnfire_li2016_type :: cnfire_method)
case ("li2021gswpfrc")
allocate(cnfire_li2021_type :: cnfire_method)
case ("li2024gswpfrc")
case ("li2024gswpfrc", "li2024crujra")
samsrabin marked this conversation as resolved.
Show resolved Hide resolved
allocate(cnfire_li2024_type :: cnfire_method)

case default
Expand Down
15 changes: 12 additions & 3 deletions src/biogeochem/CNFireLi2014Mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,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
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:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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))* &
Expand Down
Loading
Loading