Files
piscal/leafres/testarea/c4leafanetmodel.f
2022-09-12 16:40:28 +00:00

90 lines
3.3 KiB
FortranFixed

subroutine c4leafanetmodel(ilimittype,aPPFDlf,templeaf,pco2i,
&pres_air,vcmax25,c4aparslope,c4kp25,rdlight25,anet_pred,
&Postiphotolimit)
implicit none
!------------ Inputs -------------------
!ilimittype=1: Rubisco,RuBp and TPU limitations
!ilimittype=2: Rubisco and RuBp limitations only
!ilimittype=3: Rubisco and TPU limitations only
!ilimittype=4: RuBp and TPU limitations only
!ilimittype=5: Rubisco limitation only
!ilimittype=6: RuBp limitation only
!ilimittype=7: TPU limitation only
!aPPFDlf: Absorbed photosynthetic photon flux density by leaf (umol m-2 s-1)
!templeaf: Leaf temperature [K]
!pco2i: Intercellular air pressure [Pa]
!pres_air: Ambient air pressure [Pa]
!vcmax25: Maximum RuBP saturated rate of carboxylation at 25oC
! of leaf temperature [umol m-2 s-1]
!c4aparslope: Slope of the response of light-limited rate with respect
! to absorbed light
!c4kp25: Slope of the response of the PEP carboxylase-limited
! rate of carboxylation for C4 plants
!rdlight25: Mitochondrial respiration rate in the light at 25oC
double precision aPPFDlf,templeaf,pco2i,pres_air,
&vcmax25,c4aparslope,c4kp25,rdlight25
!------------Output---------------------
!anet_pred: Predicted net photosynthetic rate [umol m-2 s-1]
!Postiphotolimit: limit state indicator
! = 1 Rubisco-limited rate
! = 2 RuBP-regeneration limited rate
! = 3 Product-limited rate
double precision anet_pred
integer ilimittype,Postiphotolimit
!--------------------------------------
double precision q10,fh,fl,frd,wc,wj,wp,rd,thetacj,thetaip,Ai
q10=2.0d0
fh=1.0d0+dexp(0.3d0*(templeaf-313.15d0))
fl=1.0d0+dexp(0.2d0*(288.15d0-templeaf))
frd=1.0d0+dexp(1.3d0*(templeaf-328.15d0))
wc=vcmax25*(q10**((templeaf-298.15d0)/10.0d0))/(fh*fl)
wj=c4aparslope*aPPFDlf
wp=c4kp25*(q10**((templeaf-298.15)/10.0d0))*pco2i/pres_air
rd=rdlight25*(q10**((templeaf-298.15d0)/10.0d0))/frd
if((ilimittype.eq.1.and.wc.le.wj.and.wc.le.wp).or.
&ilimittype.eq.5)then
Postiphotolimit=1
anet_pred=wc-rd
endif
if((ilimittype.eq.1.and.wj.le.wc.and.wj.le.wp).or.
&ilimittype.eq.6)then
Postiphotolimit=2
anet_pred=wj-rd
endif
if((ilimittype.eq.1.and.wp.le.wc.and.wp.le.wj).or.
&ilimittype.eq.7)then
Postiphotolimit=3
anet_pred=wp-rd
endif
if(ilimittype.eq.2.and.wc.le.wj)then
Postiphotolimit=1
anet_pred=wc-rd
else
Postiphotolimit=2
anet_pred=wj-rd
endif
if(ilimittype.eq.3.and.wc.le.wp)then
Postiphotolimit=1
anet_pred=wc-rd
else
Postiphotolimit=3
anet_pred=wp-rd
endif
if(ilimittype.eq.4.and.wj.le.wp)then
Postiphotolimit=2
anet_pred=wj-rd
else
Postiphotolimit=3
anet_pred=wp-rd
endif
if(ilimittype.eq.1)then
thetacj=0.8d0
thetaip=0.95d0
Ai=((wc+wj)-dsqrt((wc+wj)**2-4.0d0*thetacj*wc*wj))/
&(2.0d0*thetacj)
anet_pred=((Ai+wp)-dsqrt((Ai+wp)**2-4.0d0*thetaip*Ai*wp))/
&(2.0d0*thetaip)-rd
endif
return
end