From fb88f17c37dbdf8d368980b6f13f69ca545e109a Mon Sep 17 00:00:00 2001 From: drnimbusrain Date: Wed, 30 Aug 2023 14:10:52 -0400 Subject: [PATCH] Added vegtype dependent FRP to FlameH calculations. --- README.md | 2 +- src/canopy_calcs.F90 | 4 +- src/canopy_utils_mod.F90 | 181 ++++++++++++++++++++++++++++++++++++--- src/canopy_waf_mod.F90 | 12 +-- 4 files changed, 180 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 92388d32..5968762c 100644 --- a/README.md +++ b/README.md @@ -203,7 +203,7 @@ You can also [generate global inputs using Python (see python/global_data_proces | `lambdars` | Value representing influence of RSL effects (with `rsl_opt=0`) (Massman et al., 2017) | | `dx_opt` | `0`: Calculation of dx resolution/distance from lon; `1`: user-set dx grid resolution | | `dx_set` | user-set real value of grid resolution (m) only if `dx_opt=1` | -| `flameh_opt` | `0`: Calculation of flame height from FRP (Byram, 1959); `1`: user-set flameh; `2`: FRP calculation where available (active fires), elsewhere user-set `flameh`; `3`: FlameH override, i.e., only uses fraction of canopy height (`flameh_set` must be <=1.0) as a surrogate for `flameh`; `4`: FRP calculation where available (active fires) and FlameH override elsewhere (same as option 3); `5`: FRP/intensity dependent (i.e., sub-canopy vs. crown fires) calculation where available (active fires) and FlameH override elsewhere (same as option 3). If option 5 is used and crowning is calculated, then the total flame height (i.e., top of canopy=FCH) is used instead of 1/2 flame height. | +| `flameh_opt` | `0`: Calculation of vegtype dependent flame height from FRP (Alexander and Cruz, 2012); `1`: user-set flameh; `2`: FRP calculation where available (active fires), elsewhere user-set `flameh`; `3`: FlameH override, i.e., only uses fraction of canopy height (`flameh_set` must be <=1.0) as a surrogate for `flameh`; `4`: FRP calculation where available (active fires) and FlameH override elsewhere (same as option 3); `5`: FRP/intensity dependent (i.e., sub-canopy vs. crown fires) calculation where available (active fires) and FlameH override elsewhere (same as option 3). If option 5 is used and crowning is calculated, then the total flame height (i.e., top of canopy=FCH) is used instead of 1/2 flame height. | | `flameh_set` | user-set real value of flame height (m) if `flameh_opt=1` or `2`, or `flameh` = fraction of canopy height (<=1.0), i.e., `flameh` override, if `flameh_opt=3`, `4`, or `5` | | `frp_fac` | user-set real value of tuning factor applied to FRP in calculation of flame height (default: 1.0). Used only if `flameh_opt=0`, `2`, `4`, or `5`. | | `pai_opt` | integer (`0`: PAI fixed from Katul et al. 2004 veg types-->default; `1`: PAI Massman et al. 2017 Eq. 19 calc; `2`: PAI from model LAI+WAI; `3`: user-set PAI value) | diff --git a/src/canopy_calcs.F90 b/src/canopy_calcs.F90 index 5ced80cd..02ee8357 100644 --- a/src/canopy_calcs.F90 +++ b/src/canopy_calcs.F90 @@ -170,7 +170,7 @@ SUBROUTINE canopy_calcs ! ... determine midflamepoint and flame height from user or FRP calculation call canopy_flameh(flameh_opt, flameh_set, dx_2d(i,j), modres, & - frpref, frp_fac, hcmref, midflamepoint, flameh_2d(i,j)) + frpref, frp_fac, hcmref, lu_opt, vtyperef, midflamepoint, flameh_2d(i,j)) if (firetype .eq. 0) then !forest/sub-canopy firetype if (flameh_2d(i,j) .gt. 0.0) then !flameh must be > 0 if (flameh_2d(i,j) .le. hcmref) then !only calculate when flameh <= FCH @@ -482,7 +482,7 @@ SUBROUTINE canopy_calcs ! ... determine midflamepoint and flame height from user or FRP calculation call canopy_flameh(flameh_opt, flameh_set, dx(loc), modres, & - frpref, frp_fac, hcmref, midflamepoint, flameh(loc)) + frpref, frp_fac, hcmref, lu_opt, vtyperef, midflamepoint, flameh(loc)) if (firetype .eq. 0) then !forest/sub-canopy firetype if (flameh(loc) .gt. 0.0) then !flameh must be > 0 if (flameh(loc) .le. hcmref) then !only calculate when flameh <= FCH diff --git a/src/canopy_utils_mod.F90 b/src/canopy_utils_mod.F90 index ae1117bb..7db2906f 100644 --- a/src/canopy_utils_mod.F90 +++ b/src/canopy_utils_mod.F90 @@ -108,21 +108,180 @@ real(rk) function CalcDX(lat, dlon) result(dx) ! end function ! !-------------------------------------------------------------------------------------- - function CalcFlameH(frp, dx) - !! Approximates the Flame Height as a function of FRP intensity and grid cell distance (dx) - !! forest fraction (Based on Byram 1959). + real(rk) function CalcFlameH(frp, dx, lu_opt, vtype) result( CalcFlameH_set ) + !! Approximates the Flame Height as a function of FRP intensity, grid cell distance (dx), + !! and vegetation type (Based on Alexander and Cruz 2012). - !! Byram, GM (1959). Combustion of Forest Fuels. In Forest Fire: Control and Use. - !! (Ed. KP David) pp. 61-89. McGraw Hill, New York, NY + !! Alexander, Martin E.; Cruz, Miguel G. 2012. Interdependencies between flame length and + !! fireline intensity in predicting crown fire initiation and crown scorch height. + !! International Journal of Wildland Fire 21(2):95-113. !! Assume Flame Length = Flame Height under calm winds - real(rk), intent(in) :: frp !! Input Grid cell Fire Radiative Power (MW/cell) - real(rk), intent(in) :: dx !! Input Grid cell length (m) - real(rk) :: CalcFlameH !! Calculated Plant area index (PAI) - - CalcFlameH=0.0775_rk*((frp*1000.0_rk)/dx)**0.46_rk !Byram flameh calculation as function of FRP - + real(rk), intent(in) :: frp !! Input Grid cell Fire Radiative Power (MW/cell) + real(rk), intent(in) :: dx !! Input Grid cell length (m) + integer, intent(in) :: lu_opt !! Supported land use classifications + integer, intent(in) :: vtype !! Grid cell dominant vegetation type + real(rk) :: CalcFlameH_B59 !! Fireline intensity flame length (height) relationship (m): Byram (1959) + real(rk) :: CalcFlameH_A66_L !! Fireline intensity to flame height (m): Anderson et al. (1966) + real(rk) :: CalcFlameH_A66_D !! Fireline intensity to flame height (m): Anderson et al. (1966) + real(rk) :: CalcFlameH_N80 !! Fireline intensity to flame height (m): Nelson (1980) + real(rk) :: CalcFlameH_C83_H !! Fireline intensity to flame height (m): Clark (1983) + real(rk) :: CalcFlameH_C83_B !! Fireline intensity to flame height (m): Clark (1983) + real(rk) :: CalcFlameH_N86 !! Fireline intensity to flame height (m): Nelson and Adkins (1986) + real(rk) :: CalcFlameH_V86 !! Fireline intensity to flame height (m): van Wilgen (1986) + real(rk) :: CalcFlameH_B94 !! Fireline intensity to flame height (m): Burrows (1994) + real(rk) :: CalcFlameH_W96 !! Fireline intensity to flame height (m): Weise and Biging (1996) + real(rk) :: CalcFlameH_V98 !! Fireline intensity to flame height (m): Vega et al. (1998) + real(rk) :: CalcFlameH_C98 !! Fireline intensity to flame height (m): Catchpole et al. (1998) + real(rk) :: CalcFlameH_F00 !! Fireline intensity to flame height (m): Fernandes et al. (2000) + real(rk) :: CalcFlameH_B04 !! Fireline intensity to flame height (m): Butler et al. (2004) + real(rk) :: CalcFlameH_F09_H !! Fireline intensity to flame height (m): Fernandes et al. (2009) + real(rk) :: CalcFlameH_F09_B !! Fireline intensity to flame height (m): Fernandes et al. (2009) + + !! ------------------------------------------------------------------------------------- + !! Byram, GM (1959). Combustion of Forest Fuels. In Forest Fire: Control and Use. + !! (Ed. KP David) pp. 61-89. McGraw Hill, New York, NY + !Pine litter with grass understorey (Evergreen and Grasses) + CalcFlameH_B59=0.0775_rk*((frp*1000.0_rk)/dx)**0.46_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Anderson HE, Brackebusch AP, Mutch RW, Rothermel RC (1966) Mechanisms of fire spread + !! research progress report 2. USDA Forest Service, + !! Intermountain Forest and Range Experiment Station, Research Paper + !! INT-28. (Ogden, UT) + !Lodgepole pine slash (Evergreen) + CalcFlameH_A66_L=0.074_rk*((frp*1000.0_rk)/dx)**0.651_rk + !Douglas-fir slash (Evergreen) + CalcFlameH_A66_D=0.0447_rk*((frp*1000.0_rk)/dx)**0.67_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Nelson RM Jr (1980) Flame characteristics for fires in southern fuels. USDA + !! Forest Service, Southeastern Forest Experiment Station, Research Paper + !! SE-205. (Asheville, NC) + !Southern USA Fuels (Mixed Forest) + CalcFlameH_N80=0.0377_rk*((frp*1000.0_rk)/dx)**0.50_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Clark RG (1983) Threshold requirements for fire spread in grassland fuels. + !! PhD dissertation, Texas Tech University, Lubbock. + !Grasslands (head fire) (Grasslands) + CalcFlameH_C83_H=0.00015_rk*((frp*1000.0_rk)/dx)**1.75_rk + !Grasslands (backfire) (Grasslands) + CalcFlameH_C83_B=0.000722_rk*((frp*1000.0_rk)/dx)**0.99_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Nelson RM Jr, Adkins CW (1986) Flame characteristics of wind-driven + !! surface fires. Canadian Journal of Forest Research 16, 1293–1300. + !! doi:10.1139/X86-229 + !Litter and shrubs (Shrublands) + CalcFlameH_N86=0.0475_rk*((frp*1000.0_rk)/dx)**0.493_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! van Wilgen BW (1986) A simple relationship for estimating the intensity of + !! fires in natural vegetation. South African Journal of Botany 52, 384–385 + !Fynbos shrublands (Shrublands) + CalcFlameH_V86=0.0075_rk*((frp*1000.0_rk)/dx)**0.46_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Burrows ND (1994) Experimental development of a fire management model + !! for jarrah (Eucalyptus marginata Donn ex Sm.) forest. PhD thesis, + !! Australian National University, Canberra. + !Eucalypt Forest (Evergreens) + CalcFlameH_B94=0.0147_rk*((frp*1000.0_rk)/dx)**0.767_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Weise DR, Biging GS (1996) Effects of wind velocity and slope on flame + !! properties. Canadian Journal of Forest Research 26, 1849–1858. + !! doi:10.1139/X26-210 + !Excelsior (Deciduous) + CalcFlameH_W96=0.016_rk*((frp*1000.0_rk)/dx)**0.7_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Vega JA, Cuinas P, Fonturbel T, Perez-Gorostiaga P, Fernandez C (1998) + !! Predicting fire behaviour in Galician (NW Spain) shrubland fuel + !! complexes. In ‘Proceedings of 3rd International Conference on Forest + !! Flame length and fireline intensity interdependences. + !Shrublands + CalcFlameH_V98=0.087_rk*((frp*1000.0_rk)/dx)**0.493_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! CatchpoleWR, Bradstock RA, Choate J, Fogarty LG, Gellie N, McCarthy G, + !! McCaw WL, Marsden-Smedley JB, Pearce G (1998) Cooperative + !! development of equations for heathland fire behaviour. In ‘Proceedings + !! of 3rd International Conference on Forest Fire Research and 14th + !! Conference on Fire and Forest Meteorology, Volume II’, 16–20 + !! November 1998, Luso–Coimbra, Portugal. (Ed. DX Viegas) + !! pp. 631–645. (University of Coimbra: Coimbra, Portugal) + !Shrublands + CalcFlameH_C98=0.0325_rk*((frp*1000.0_rk)/dx)**0.56_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Fernandes PM, Catchpole WR, Rego FC (2000) Shrubland fire behaviour + !! modelling with microplot data.Canadian Journal of Forest Research 30, + !! 889–899. doi:10.1139/X00-012 + !Shrublands + CalcFlameH_F00=0.0516_rk*((frp*1000.0_rk)/dx)**0.453_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Butler BW, Finney MA, Andrews PL, Albini FA (2004) A radiation-driven + !! model of crown fire spread. Canadian Journal of Forest Research 34, + !! 1588–1599. doi:10.1139/X04-074 + !Jack Pine Forest - Crown Fire (Evergreen) + CalcFlameH_B04=0.0175_rk*((frp*1000.0_rk)/dx)**0.667_rk + !! ------------------------------------------------------------------------------------- + + !! ------------------------------------------------------------------------------------- + !! Fernandes PM, Botelho HS, Rego FC, Loureiro C (2009) Empirical + !! modelling of surface fire behaviour in maritime pine stands. + !! International Journal of Wildland Fire 18, 698–710. doi:10.1071/ + !! WF08023 + !Maritime Pine (head fire) (Evergreen) + CalcFlameH_F09_H=0.045_rk*((frp*1000.0_rk)/dx)**0.543_rk + !Maritime Pine (backfire) (Evergreen) + CalcFlameH_F09_B=0.029_rk*((frp*1000.0_rk)/dx)**0.724_rk + !! ------------------------------------------------------------------------------------- + + if (lu_opt .eq. 0 .or. lu_opt .eq. 1) then !VIIRS or MODIS LU types + if (vtype .ge. 1 .and. vtype .le. 2) then !VIIRS/MODIS Cat 1-2/Evergreen Needleleaf & Broadleaf + CalcFlameH_set=(CalcFlameH_B59+CalcFlameH_A66_L+CalcFlameH_A66_D+CalcFlameH_B94+ & + CalcFlameH_F09_H+CalcFlameH_F09_B) / 6.0_rk + if (((frp*1000.0_rk)/dx) .ge. 1700.0_rk ) then !Evergreen forest crowning likely + CalcFlameH_set=CalcFlameH_B04 + end if + else if (vtype .ge. 3 .and. vtype .le. 4) then !VIIRS/MODIS Cat 3-4 Deciduous Needleleaf and Broadleaf + CalcFlameH_set=(CalcFlameH_N80+CalcFlameH_W96) / 2.0_rk + else if (vtype .eq. 5) then !VIIRS/MODIS Cat 5 Mixed Forests + CalcFlameH_set=CalcFlameH_N80 + else if (vtype .ge. 6 .and. vtype .le. 7) then !VIIRS/MODIS Cat 6-7 Shrublands + CalcFlameH_set=(CalcFlameH_N86+CalcFlameH_V86+CalcFlameH_V98+CalcFlameH_C98+ & + CalcFlameH_F00) / 5.0_rk + else if (vtype .ge. 8 .and. vtype .le. 10) then !VIIRS/MODIS Cat 8-10 Savannas and Grasslands + CalcFlameH_set=(CalcFlameH_B59+CalcFlameH_C83_H+CalcFlameH_C83_B) / 3.0_rk + else if (vtype .ge. 12) then !VIIRS/MODIS Cat 12 Croplands + CalcFlameH_set=(CalcFlameH_B59+CalcFlameH_C83_H+CalcFlameH_C83_B) / 3.0_rk + else + CalcFlameH_set=(CalcFlameH_B59+CalcFlameH_A66_L+CalcFlameH_A66_D+CalcFlameH_N80+ & + CalcFlameH_C83_H+CalcFlameH_C83_B+CalcFlameH_N86+CalcFlameH_V86+ & + CalcFlameH_B94+CalcFlameH_W96+CalcFlameH_V98+CalcFlameH_C98+ & + CalcFlameH_F00+CalcFlameH_B04+CalcFlameH_F09_H+ & + CalcFlameH_F09_B) / 16.0_rk + end if + else + write(*,*) 'Wrong LU_OPT choice of ', LU_OPT, 'in namelist, only VIIRS/MODIS available right now...exiting' + call exit(2) + end if end function real(rk) function GET_GAMMA_CO2(co2_opt, co2_set) result( GAMMA_CO2 ) diff --git a/src/canopy_waf_mod.F90 b/src/canopy_waf_mod.F90 index a0ace48e..8b672c60 100644 --- a/src/canopy_waf_mod.F90 +++ b/src/canopy_waf_mod.F90 @@ -6,7 +6,7 @@ module canopy_waf_mod !::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: SUBROUTINE CANOPY_FLAMEH( FLAMEH_OPT, FLAMEH_SET, DX, MODRES, & - FRP_IN, FRP_FAC, FCH, MIDFLAMEPOINT, FLAMEH ) + FRP_IN, FRP_FAC, FCH, LU_OPT, VTYPE, MIDFLAMEPOINT, FLAMEH ) !----------------------------------------------------------------------- @@ -34,6 +34,8 @@ SUBROUTINE CANOPY_FLAMEH( FLAMEH_OPT, FLAMEH_SET, DX, MODRES, & REAL(RK), INTENT( IN ) :: FRP_IN ! Model input FRP (MW/grid cell area) REAL(RK), INTENT( IN ) :: FRP_FAC ! FRP tuning factor for flame height calculation REAL(RK), INTENT( IN ) :: FCH ! Grid cell canopy height (m) + INTEGER, INTENT( IN ) :: LU_OPT ! Supported land use classifications + INTEGER, INTENT( IN ) :: VTYPE ! Dominant vegetation type INTEGER, INTENT( OUT ) :: MIDFLAMEPOINT ! Indice of the mid-flame point REAL(RK), INTENT( OUT ) :: FLAMEH ! Flame Height (m) @@ -50,13 +52,13 @@ SUBROUTINE CANOPY_FLAMEH( FLAMEH_OPT, FLAMEH_SET, DX, MODRES, & FLAMEH_SET, ' from namelist' FLAMEH = FLAMEH_SET else !calculate flameh - FLAMEH = CalcFlameH(frp,DX) + FLAMEH = CalcFlameH(frp,DX,LU_OPT,VTYPE) end if else if (FLAMEH_OPT .eq. 1) then !user set value FLAMEH = FLAMEH_SET else if (FLAMEH_OPT .eq. 2) then !both FRP calc and user set if (frp .gt. 0.0) then - FLAMEH = CalcFlameH(frp,DX) + FLAMEH = CalcFlameH(frp,DX,LU_OPT,VTYPE) else FLAMEH = FLAMEH_SET end if @@ -69,7 +71,7 @@ SUBROUTINE CANOPY_FLAMEH( FLAMEH_OPT, FLAMEH_SET, DX, MODRES, & end if else if (FLAMEH_OPT .eq. 4) then !uses FRP and overide elsewhere if (frp .gt. 0.0) then - FLAMEH = CalcFlameH(frp,DX) + FLAMEH = CalcFlameH(frp,DX,LU_OPT,VTYPE) else if (FLAMEH_SET .le. 1.0) then FLAMEH = FCH * FLAMEH_SET !not real flame height but uses WAF at this fractional FCH @@ -83,7 +85,7 @@ SUBROUTINE CANOPY_FLAMEH( FLAMEH_OPT, FLAMEH_SET, DX, MODRES, & if ( ((frp*1000.0_rk)/DX) .ge. 1700.0_rk ) then !Crown fire likely (Andrews et al., 2011). FLAMEH = FCH !https://doi.org/10.2737/RMRS-GTR-253 else - FLAMEH = CalcFlameH(frp,DX) + FLAMEH = CalcFlameH(frp,DX,LU_OPT,VTYPE) end if else if (FLAMEH_SET .le. 1.0) then