ESCOMP / CTSM

Community Terrestrial Systems Model (includes the Community Land Model of CESM)
http://www.cesm.ucar.edu/models/cesm2.0/land/
Other
296 stars 301 forks source link

Some adjustments to the Li Fire model #889

Closed ekluzek closed 3 years ago

ekluzek commented 4 years ago

@lifang2012 has a set of changes to the fire model that fix some issues with the latest fire model.

This is a summary that she made of the changes:

"Changes include: (1) fix 2 bugs in fire module,(2) recalibrate the relationship between tropical deforestation rate and deforestation & degradation (DD) fires, (3) change BTRAN2 to root-zone soil moisture, (4) change parameter values due to (2) and (3).

(1) About bugs in CNFireLi2016Mod.F90:

Bug 1 is at the calculation of cloud-to-ground lightning.

(5.16_r8+2.16_r8*cos(3*min(60._r8,abs(grc%latdeg(g)))))

should be:

(5.16_r8+2.16_r8*cos(SHR_CONST_PI/180._r8*3*min(60._r8,abs(grc%latdeg(g)))))

Bug 2 is caused by Bill's revisions when he introduced dynamic landunit in CLM5. The deforestation rate and tropical forest coverage used in DD fires should be for gridcell rather than nat. vegetation column.

  trotr1_col(c)=trotr1_col(c)+patch%wtcol(p)

  trotr2_col(c)=trotr2_col(c)+patch%wtcol(p)

  dtrotr_col(c)=dtrotr_col(c)-dwt_smoothed(p)

should be:

  trotr1_col(c)=trotr1_col(c)+patch%wtcol(p)*col%wtgcell(c)

  trotr2_col(c)=trotr2_col(c)+patch%wtcol(p)*col%wtgcell(c)

  dtrotr_col(c)=dtrotr_col(c)-dwt_smoothed(p)*col%wtgcell(c)

(2) recalibrate the relationship between tropical deforestation rate and deforestation and degradation (DD) fires

In default CLM4.5 and CLM5, GFED3 fire products and CLM4's LULCC were used to calibrate the relationship (see Li et al. 2013 for details). Now GFED4s and CLM5's LULCC are used.

Accordingly, in CNFireLi2016Mod.F90,

max(0.0005_r8,min(1._r8,19._r8*dtrotr_col(c)*dayspyr*secspday/dt-0.001_r8))

is changed to

(15._r8*min(0.0016_r8,dtrotr_col(c)/dt*dayspyr*secspday)+0.009_r8)

(3) About BTRAN2:

In SoilMoistStressMod.F90, BTRAN2 is changed from:

   s_node = max(h2osoi_vol(c,j)/watsat(c,j), 0.01_r8)

   call soil_water_retention_curve%soil_suction(c, j, s_node, soilstate_inst, smp_node_lf)

   smp_node_lf = max(smpsc(patch%itype(p)), smp_node_lf)
   btran2(p)   = btran2(p) +rootfr(p,j)*max(0._r8,min((smp_node_lf - smpsc(patch%itype(p))) / &
                    (smpso(patch%itype(p)) - smpsc(patch%itype(p))), 1._r8))

to root-zone soil wetness:

  s_node = max(h2osoi_vol(c,j)/watsat(c,j), 0.01_r8)

   btran2(p)   = btran2(p) +rootfr(p,j)*s_node

Accordingly, in CNFireLi2016Mod.F90,

     btran_col(c) = btran_col(c)+max(0._r8, min(1._r8, &
                    (btran2(p)-0.3)/0.8))*patch%wtcol(p)

is changed to:

    btran_col(c) = btran_col(c)+max(0._r8, min(1._r8, &
                      (btran2(p)-rswf_min(patch%itype(p)))/(rswf_max(patch%itype(p)) &
                      -rswf_min(patch%itype(p)))))*patch%wtcol(p)

and

min(1._r8,(btran_col(c)/wtlf(c)-bt_min)/(bt_max-bt_min))))**0.5_r8)

is changed to

((1._r8-btran_col(c)/wtlf(c))**0.5_r8)

(4) About parameters

Due to (3),the dependence of BTRAN2 on PFT-dependent parameters smpsc and smpso (in SoilMoistStressMod.F90) is changed to new PFT-dependent parameters rswf_min and rswf_max (in CNFireLi2016Mod.F90), and fsr_pft in CLM5 parameter file is changed (new parameter file: /glade/scratch/fangli/clm5_params.fire1.nc). Also, I added the names of rswf_max and rswf_min in pftconMod.F90, and set fire parameter lfuel=75.d00 as Li et al. (2014) in user_nl_clm. Due to (2), I set fire parameter cli_scale = 0.025d00 in user_nl_clm." Should also fix #206 along with this.

ekluzek commented 3 years ago

Note the trotr1_col, trotr2_col, and dtrotr_col were marked as being "suspicious" in issue #12 under item (14.)

ekluzek commented 3 years ago

The change in question for trotr1_col and trotr2_col was done in clm4_5_12_r195. Where we have this discussion in the ChangeLog...

When calculating the fractions of BET and BDT, calculate these as fractions of the column rather than as fractions of the grid cell. This is needed for consistency with all other code in CLM, where the behavior of a column shouldn't depend on that column's weight on the grid cell. The earlier code was problematic in this way: If you did two runs - one with default areas, and one where the natural veg landunit area was larger or smaller - then the evolution of the natural veg landunit could change; this is not supposed to happen in CLM.

This can change answers for the fire code, but should generally only change answers by a small amount, unless there are tropical grid cells where the natural vegetation fraction is substantially less than 1.

Fang Li is okay with this change. She points out that the original formulation was based on the fact that literataure typically cites 60% of (BET+BDT) on the grid cell as a cutoff for being classified as tropical closed forest for the sake of fire determinations, so the earlier code was consistent with that definition. She also points out that this change could lead to a slightly greater prevalence of deforestation fires and (after tuning) a consequently smaller prevalence of non-deforestation fires - which can be undesirable. But overall she is okay with this change given its likely small impact.

ekluzek commented 3 years ago

The dtrotr change is documented in that same version as follows...

Still need to address dtrotr_col, but the fix there is different, and is tied in with other changes for dynamic landunits.

It was addressed in clm4_5_14_r223. With the ChangeLog saying this..

In addition, this makes the fire code work correctly with changing column / landunit areas: Similarly to the other C&N variables, the variable that triggers landcover-related fires was previously only considering changes in patch weights on the column.

The issue that was being addressed was 2106 from bugs.cgd.ucar.edu which says the following...

There is a lot of hard-coded logic in CNFireMod for its interaction with land cover change. I suspect (but have not looked closely) that some of this will not work as intended with dynamic landunits - where we can now have weights changing because of shifting landunit weights in addition to shifting PFT areas on the natural vegetated landunit.

A few examples of possibly-problematic code are:

  • expressions that depend on changes in subgrid weights
dlawrenncar commented 3 years ago

@ekluzek @olyson I'm trying to figure out if the fire parameter changes suggested by Fang were really implemented in CTSM5.1. Not sure how to check this because the parameter file that Fang points to in this issue was on scratch. Did either or you have a copy of it that you used during creation of the fire tag?

ekluzek commented 3 years ago

Yes, I had several along the way. Let me find the one that was used in the original branch based off of the release-clm5.0 branch.

ekluzek commented 3 years ago

Here's the one I started using on the release-clm5.0 version. It doesn't have any meta-data so presumably was identical to Fang's original version that was on scratch. If I would've done anything it it, I would've had metadata for the changes.

$CSMDATA/lnd/clm2/paramdata/ctsm5_1_params.c191216.nc

For that version I had some cases that point to the version on scratch that replicate a case that Fang ran.