Files
piscal/leafres/testarea/StomatalConductance.f
T
2016-02-03 18:52:05 +00:00

119 lines
4.9 KiB
FortranFixed

subroutine StomatalConductance(pco2s,rehulfsurf,gammas,
& pvapordef_s,rayDzero,assim_net,istommodel,
& stomintercept,stomslope,gswmod)
implicit none
!=====================Inputs===================================
! pvapordef_s: water vapor partial pressure deficit at the leaf surface [Pa]
! istommodel: which stomatal conductance model to use
! 1 = Ball - Berry Model
! 2 = Ray Leuning model using leaf surface CO2 concentration
! 3 = Belinda E. Medlyn model
! 4 = Dewar model
! stomintercept: Interception in the Ball - Berry model or the Leuning version [mol H2O m-2 s-1]
! stomslope: Slope in the Ball - Berry model or the leuning version [--]
! rayDzero: D0 in the Ray Leuning modified Ball - Berry Model [Pa]
!
! assim_net: net rate of CO2 uptake per unit leaf area
! calculated from the biochemical model[umol m-2 s-1]
! gammas: CO2 compensation point (ppm)
! pco2s: CO2 concentration at the leaf surface or internal CO2 (ppm)
! rehulfsurf: relative humidity at the leaf surface [0-1]
integer istommodel
double precision pco2s,rehulfsurf,gammas,
& pvapordef_s,rayDzero,stomintercept,
& stomslope,assim_net
!=====================Outputs=================================
! gswmod: stomatal conductance for water vapor calculated
! from stomatal conductance model [mol m-2 s-1]
double precision gswmod
if(istommodel.eq.1)then
! Ball - Berry model
gswmod=stomintercept+stomslope*assim_net*
& rehulfsurf/pco2s
gswmod=dmax1(gswmod,stomintercept)
endif
if(istommodel.eq.2)then
! Ray Leuning model using leaf surface CO2 or internal CO2
gswmod=stomintercept+stomslope*assim_net/
& ((pco2s-gammas)*(1.0d0+pvapordef_s/rayDzero))
gswmod=dmax1(gswmod,stomintercept)
endif
if(istommodel.eq.3)then
!Belinda Medlyn model
gswmod=stomintercept+(1.0d0+stomslope/dsqrt(1.0d-3*pvapordef_s))
&*assim_net/pco2s
gswmod=dmax1(gswmod,stomintercept)
endif
if(istommodel.eq.4)then
! Dewar model
gswmod=(stomintercept+stomslope*assim_net)/
& (pco2s*(1.0d0+pvapordef_s/rayDzero))
gswmod=dmax1(gswmod,stomintercept)
endif
return
end subroutine StomatalConductance
subroutine Der_StomatalConductance(pco2s,rehulfsurf,
& gammas,pvapordef_s,rayDzero,assim_net,istommodel,
& stomintercept,stomslope,derivb,derivslope,derivd0)
implicit none
!=====================Inputs===================================
! pvapordef_s: water vapor partial pressure deficit at the leaf surface [Pa]
! istommodel: which stomatal conductance model to use
! 1 = Ball - Berry Model
! 2 = Ray Leuning model using leaf surface CO2 concentration
! 3 = Belinda Medlyn model
! 4 = Dewar model
! stomintercept: Interception in the Ball - Berry model or the Leuning version [mol H2O m-2 s-1]
! stomslope: Slope in the Ball - Berry model or the leuning version [--]
! rayDzero: D0 in the Ray Leuning modified Ball - Berry Model [Pa]
!
! assim_net: net rate of CO2 uptake per unit leaf area
! calculated from the biochemical model[umol m-2 s-1]
! gammas: CO2 compensation point (ppm)
! pco2s: CO2 concentration at the leaf surface or internal CO2 (ppm)
! rehulfsurf: relative humidity at the leaf surface [0-1]
integer istommodel
double precision pco2s,rehulfsurf,gammas,
& pvapordef_s,rayDzero,stomintercept,
& stomslope,assim_net
!=====================Outputs=================================
! gswmod: stomatal conductance for water vapor calculated
! from stomatal conductance model [mol m-2 s-1]
double precision derivb,derivslope,derivd0
derivb=1.0d0
if(istommodel.eq.1)then
! Ball - Berry model
derivslope=assim_net*rehulfsurf/pco2s
endif
if(istommodel.eq.2)then
! Ray Leuning model using leaf surface CO2
derivslope=assim_net/
& ((pco2s-gammas)*(1.0d0+pvapordef_s/rayDzero))
derivd0=(stomslope*assim_net/(pco2s-gammas))*
& pvapordef_s/((rayDzero+pvapordef_s)**2.0d0)
endif
if(istommodel.eq.3)then
! Belinda E. Medlyn model
derivslope=assim_net/(pco2s*dsqrt(1.0d-3*pvapordef_s))
endif
if(istommodel.eq.4)then
! Ray Leuning model using leaf surface partial pressure
derivb=1.0d0/(pco2s*(1.0d0+pvapordef_s/rayDzero))
derivslope=assim_net/
& (pco2s*(1.0d0+pvapordef_s/rayDzero))
derivd0=((stomintercept+stomslope*assim_net)/pco2s)*
& pvapordef_s/((rayDzero+pvapordef_s)**2.0d0)
endif
return
end subroutine Der_StomatalConductance