Skip to content

Commit

Permalink
Merge pull request #100 from noaa-oar-arl/feature/wai2pai
Browse files Browse the repository at this point in the history
New WAI adaptation for PAI calculation option from Fang et al.
  • Loading branch information
drnimbusrain authored Dec 18, 2023
2 parents a435c52 + 9577e18 commit a70321f
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 20 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ You can also [generate global inputs using Python (see python/global_data_proces
| `z0ghc` | ratio of ground roughness length to canopy top height (Massman et al., 2017) |
| `rsl_opt` | user-set option for either MOST or unified Roughness SubLayer (RSL) effects above and at canopy top (Uc).(= `0`, default: uses MOST and a constant lambdars factor only), (= `1`, under development: will use a more unified RSL approach from Bonan et al. (2018) and Abolafia-Rosenzweig et al., 2021) |
| `lambdars` | Value representing influence of RSL effects (with `rsl_opt=0`) (Massman et al., 2017) |
| `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) |
| `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 (based on PAI=LAI/(1-alpha)*Omega, where alpha is the "woody-to-total area ratio" and is vegetation type dependent, and Omega is the observed clumping index. Based on Fang et al. (2019) (https://doi.org/10.1029/2018RG000608) and Zou et al., 2009 (https://doi.org/10.1093/treephys/tpp042) ; `3`: user-set PAI value) |
| `pai_set` | user-set real value of PAI (default: `4.0`; only used if `pai_opt=3`) |
| `z0_opt` | integer (`0`: use model input or `1`: vegtype dependent z0 for first estimate) |
| | **Canopy fire/WAF-specific options** |
Expand Down
4 changes: 2 additions & 2 deletions src/canopy_calcs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ SUBROUTINE canopy_calcs(nn)

! ... call canopy parameters to get canopy, fire info, and shape distribution parameters

call canopy_parm(vtyperef, hcmref, ffracref, lairef, &
call canopy_parm(cluref, vtyperef, hcmref, ffracref, lairef, &
pai_opt, pai_set, lu_opt, firetype, cdrag, &
pai, zcanmax, sigmau, sigma1)

Expand Down Expand Up @@ -488,7 +488,7 @@ SUBROUTINE canopy_calcs(nn)

! ... call canopy parameters to get canopy, fire info, and shape distribution parameters

call canopy_parm(vtyperef, hcmref, ffracref, lairef, &
call canopy_parm(cluref, vtyperef, hcmref, ffracref, lairef, &
pai_opt, pai_set, lu_opt, firetype, cdrag, &
pai, zcanmax, sigmau, sigma1)

Expand Down
36 changes: 19 additions & 17 deletions src/canopy_profile_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module canopy_profile_mod
contains

!:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SUBROUTINE CANOPY_PARM( VTYPE, FCH, FFRAC, LAI, &
SUBROUTINE CANOPY_PARM( CLU, VTYPE, FCH, FFRAC, LAI, &
PAI_OPT, PAI_SET, LU_OPT, FIRETYPE, CDRAG, &
PAI, ZCANMAX, SIGMAU, SIGMA1 )

Expand All @@ -30,6 +30,7 @@ SUBROUTINE CANOPY_PARM( VTYPE, FCH, FFRAC, LAI, &

! Arguments:
! IN/OUT
REAL(RK), INTENT( IN ) :: CLU ! Grid cell clumping index
INTEGER, INTENT( IN ) :: VTYPE ! Grid cell dominant vegetation type
REAL(RK), INTENT( IN ) :: FCH ! Grid cell canopy height (m)
REAL(RK), INTENT( IN ) :: FFRAC ! Grid cell forest fraction
Expand All @@ -56,10 +57,10 @@ SUBROUTINE CANOPY_PARM( VTYPE, FCH, FFRAC, LAI, &
PAI=(3.28_rk + 2.41_rk + 2.14_rk + 3.78_rk)/4.0_rk
else if (PAI_OPT .eq. 1) then !PAI calculation (Massman et al., Eq. 19)
PAI=CalcPAI(FCH,FFRAC)
else if (PAI_OPT .eq. 2) then !PAI = LAI + SAI (WAI)
PAI=LAI + 0.52_rk !WAI = 0.52 from Toda and Richardson (2018):
! https://doi.org/10.1016/j.agrformet.2017.09.004
! Section 3.3
else if (PAI_OPT .eq. 2) then !PAI=LAI/(1-alpha)*CLU, where alpha is the "woody-to-total area ratio"
!and is vegetation type dependent from Fang et al. (2019),
!https://doi.org/10.1029/2018RG000608:
PAI=(LAI/(1.0_rk - 0.2_rk))*CLU !Assume alpha evergreen are more boreal/conifer softwoods
else if (PAI_OPT .eq. 3) then !PAI value from user
PAI=PAI_SET
else
Expand All @@ -79,10 +80,10 @@ SUBROUTINE CANOPY_PARM( VTYPE, FCH, FFRAC, LAI, &
PAI=(4.93_rk + 3.28)/2.0_rk
else if (PAI_OPT .eq. 1) then !Massman PAI calculation (Eq. 19)
PAI=CalcPAI(FCH,FFRAC)
else if (PAI_OPT .eq. 2) then !need PAI function of model LAI
PAI=LAI + 0.52_rk !WAI = 0.52 from Toda and Richardson (2018):
!https://doi.org/10.1016/j.agrformet.2017.09.004
! Section 3.3
else if (PAI_OPT .eq. 2) then !PAI=LAI/(1-alpha)*CLU, where alpha is the "woody-to-total area ratio"
!and is vegetation type dependent from Fang et al. (2019),
!https://doi.org/10.1029/2018RG000608:
PAI=(LAI/(1.0_rk - 0.1_rk))*CLU !assume alpha deciduous have more tropical hardwoods
else if (PAI_OPT .eq. 3) then !PAI value from user
PAI=PAI_SET
else
Expand All @@ -102,10 +103,10 @@ SUBROUTINE CANOPY_PARM( VTYPE, FCH, FFRAC, LAI, &
PAI=(5.73_rk + 3.28_rk + 2.41_rk + 2.14_rk + 3.78_rk + 4.93_rk)/6.0_rk
else if (PAI_OPT .eq. 1) then !PAI calculation (Massman et al., Eq. 19)
PAI=CalcPAI(FCH,FFRAC)
else if (PAI_OPT .eq. 2) then !PAI = LAI + SAI (WAI)
PAI=LAI + 0.52_rk !WAI = 0.52 from Toda and Richardson (2018):
! https://doi.org/10.1016/j.agrformet.2017.09.004
! Section 3.3
else if (PAI_OPT .eq. 2) then !PAI=LAI/(1-alpha)*CLU, where alpha is the "woody-to-total area ratio"
!and is vegetation type dependent from Fang et al. (2019),
!https://doi.org/10.1029/2018RG000608:
PAI=(LAI/(1.0_rk - 0.15_rk))*CLU!assume alpha is avg. of evergreen and deciduous
else if (PAI_OPT .eq. 3) then !PAI value from user
PAI=PAI_SET
else
Expand All @@ -125,10 +126,10 @@ SUBROUTINE CANOPY_PARM( VTYPE, FCH, FFRAC, LAI, &
PAI=(2.94_rk + 3.10_rk)/2.0_rk
else if (PAI_OPT .eq. 1) then !PAI calculation (Massman et al., Eq. 19)
PAI=CalcPAI(FCH,FFRAC)
else if (PAI_OPT .eq. 2) then !PAI = LAI + SAI (WAI)
PAI=LAI + 0.52_rk !WAI = 0.52 from Toda and Richardson (2018):
!https://doi.org/10.1016/j.agrformet.2017.09.004
! Section 3.3
else if (PAI_OPT .eq. 2) then !PAI=LAI/(1-alpha)*CLU, where alpha is the "woody-to-total area ratio"
!and is vegetation type dependent from Fang et al. (2019),
!https://doi.org/10.1029/2018RG000608:
PAI=(LAI/(1.0_rk - 0.32_rk))*CLU!assume alpha is avg. of shrubs + savanna
else if (PAI_OPT .eq. 3) then !PAI value from user
PAI=PAI_SET
else
Expand Down Expand Up @@ -207,6 +208,7 @@ SUBROUTINE CANOPY_FOLIAGE( MODLAYS, ZHC, ZCANMAX, SIGMAU, SIGMA1, &
fainc(i) = exp((-1.0*((ZCANMAX-ZHC(i))**2.0))/SIGMA1**2.0)
end if
end do

fatot = IntegrateTrapezoid(ZHC,fainc)

! ... calculate plant distribution function
Expand Down

0 comments on commit a70321f

Please sign in to comment.