Initial commit

This commit is contained in:
2016-02-03 18:52:05 +00:00
commit d40505e161
507 changed files with 91383 additions and 0 deletions
+627
View File
@@ -0,0 +1,627 @@
subroutine LeafGasFit_Stom(unitparamsout,unitwuecicacomp,
&unitstomcomp,curveno,curvename,npoints0,aPPFDlf0,templeaf0,
&tempair0,co2i_pa,co2a_pa,pres_air0,yAnet0,gswmeas0,vpdl0,trmmol0,
&abspt_lf_par,co2c_pa,co2recycleratio,stargamma25,ha_stargamma,
!
& siteID,Latitude,Longitude,Elevation,yearsampled,
& sampledoy,GrowingSeasonStart,GrowingSeasonEnd,
& standage,CanopyHeight,LeafAreaIndex,species,
& avetimeresolution,avetimesampled,SampleHeight,
& Needleage,specificLAI,nitrogencontent,carboncontent,
& phoscontent,woodporosity,sapwooddensity,leafratio)
implicit none
!
!----------Inputs-------------------------------------------
integer npoints0,unitparamsout,unitwuecicacomp,unitstomcomp,
&curveno
double precision aPPFDlf0(npoints0),templeaf0(npoints0),
&tempair0(npoints0),co2i_pa(npoints0),co2a_pa(npoints0),
&pres_air0(npoints0),yAnet0(npoints0),gswmeas0(npoints0),
&vpdl0(npoints0),trmmol0(npoints0),abspt_lf_par,
&co2c_pa(4,npoints0),co2recycleratio0(6,npoints0),
&stargamma25(6),ha_stargamma
character*100 curvename
character siteID*(*),species*(*),woodporosity*(*)
double precision Latitude,Longitude,Elevation,yearsampled,
&sampledoy,GrowingSeasonStart,GrowingSeasonEnd,standage,
&CanopyHeight,LeafAreaIndex,avetimeresolution,avetimesampled,
&SampleHeight,Needleage,specificLAI,nitrogencontent,
&carboncontent,phoscontent,sapwooddensity,leafratio
!----------Internal variables-------------------------------
integer npoints_stom,i,j,k,numparams,INFO,istommodel,malfit,
&imodel,iwrong,idostom,idocica,idowue,npoints
double precision co2threshold,co2current,vpdl_ref,gascon,
&templeaf_stom(npoints0),gswmeas_stom(npoints0),
&pres_air_stom(npoints0),xpco2i_stom(npoints0),
&yAnet_stom(npoints0),trmmol_stom(npoints0),stargamma(npoints0),
&pco2s(npoints0),rehulfsurf(npoints0),pvapordef_s(npoints0),
&combined1(npoints0),combined2(npoints0),wue(npoints0),
&wuemod(npoints0),wue_intrin(npoints0),wue_intrinmod(npoints0),
&cicameas(npoints0),cicamod(npoints0),gswmodcp(npoints0),
&gswmod1(npoints0),gswmod2(npoints0),gswmod(4,npoints0),
&sig(npoints0),ballintersurf,ballslopesurf,ballrsqsurf,
&ballinterinside,ballslopeinside,
&ballrsqinside,ballinter,ballslope,ballrsqgsw,esat,raysurfinter,
&raysurfslope,raysurfd0,raysurfrsqgsw,belindainter,belindaslope,
&belindad0,belindarsqgsw,dewarinter,dewarslope,deward0,dewarrsqgsw,
&wueref,der_wueref,rsqwue,alfit(10),der_alfit(10),wueref_intrin,
&der_wueref_intrin,rsqwue_intrin,blfit(10),der_blfit(10),cicaref,
&der_cicaref,rsqcica,avetleaf,avetair,avevpdl,avepari,term,
&ballrmsgsw,ballagrindgsw,raysurfrmsgsw,raysurfagrindgsw,
&belindarmsgsw,belindaagrindgsw,dewarrmsgsw,dewaragrindgsw,rmswue,
&agrindwue,rmswue_intrin,agrindwue_intrin,stomintercept,stomslope,
&rayDzero,rsqgsw,rmsgsw,agrindgsw,rmscica,agrindcica,cicafit(10),
&der_cicafit(10),bmin(10),bmax(10),rsqccci(4),rmsccci(4),
&agrindccci(4),cccifit(4,10),der_cccifit(4,10),ccciref(4),
&der_ccciref(4),co2iref,cccimeas(4,npoints0),cccimod(4,npoints0),
&avepres_air,rsqrecyc(6),rmsrecyc(6),agrindrecyc(6),recycfit(6,10),
&der_recycfit(6,10),recycref(6),der_recycref(6),
&recycmod(6,npoints0),aPPFDlf(npoints0),templeaf(npoints0),
&tempair(npoints0),co2i_ppm(npoints0),co2a_ppm(npoints0),
&pres_air(npoints0),yAnet(npoints0),gswmeas(npoints0),
&vpdl(npoints0),trmmol(npoints0),co2c_ppm(4,npoints0),
&co2recycleratio(6,npoints0)
parameter(gascon=8.314472d0,co2threshold=0.0d0,co2current=400.0d0,
&vpdl_ref=1600.0d0)
!if ambient co2 is too low, the ball-berry stomatal conductance model does not apply so we need to
!set up a threshold here
!this ambient CO2 threshold (250ppm) is taken from Gutschick and Simmonneau (2002)
!WUE are standardized for VPD at 50% relative humidity at 25 oC.
external lfitbasisfuncs
!-------------------------------------------------------------------------------------------
idostom=1
idowue=1
idocica=1
npoints=0
do j=1,npoints0
if(gswmeas0(j).gt.0.0d0.and.co2i_pa(j).gt.0.0d0.and.
&trmmol0(j).gt.0.0d0)then
npoints=npoints+1
aPPFDlf(npoints)=aPPFDlf0(j)
templeaf(npoints)=templeaf0(j)
tempair(npoints)=tempair0(j)
yAnet(npoints)=yAnet0(j)
co2i_ppm(npoints)=co2i_pa(j)*1.0d+6/pres_air0(j)
if(co2a_pa(j).gt.0.0d0)then
co2a_ppm(npoints)=co2a_pa(j)*1.0d+6/pres_air0(j)
else
co2a_ppm(npoints)=-9999.0d0
idocica=0
endif
pres_air(npoints)=pres_air0(j)
gswmeas(npoints)=gswmeas0(j)
trmmol(npoints)=trmmol0(j)
vpdl(npoints)=vpdl0(j)
do k=1,4
if(dabs(co2c_pa(k,j)+9999.0d0).gt.1.0d-5)then
co2c_ppm(k,npoints)=co2c_pa(k,j)*1.0d+6/pres_air0(j)
else
co2c_ppm(k,npoints)=-9999.0d0
endif
enddo
do k=1,6
co2recycleratio(k,npoints)=co2recycleratio0(k,j)
enddo
endif
enddo
if(npoints.le.3)return
avevpdl=0.0d0
avetleaf=0.0d0
avetair=0.0d0
avepari=0.0d0
avepres_air=0.0d0
do j=1,npoints
avevpdl=avevpdl+vpdl(j)
avetleaf=avetleaf+templeaf(j)
avetair=avetair+tempair(j)
avepari=avepari+aPPFDlf(j)/abspt_lf_par
avepres_air=avepres_air+pres_air(j)
enddo
avevpdl=avevpdl/dble(npoints)
avetleaf=avetleaf/dble(npoints)-273.15d0
avetair=avetair/dble(npoints)-273.15d0
avepari=avepari/dble(npoints)
avepres_air=avepres_air/dble(npoints)
if(avepres_air.lt.0.0d0)avepres_air=98000.0d0
!$$$$$$$$$$$$ Fitting stomatal conductance models $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
!Now fit the stomatal conductance models
npoints_stom=-9999
if(idostom.eq.1)then
npoints_stom=0
do j=1,npoints
if(co2a_ppm(j).gt.co2threshold.and.yAnet(j).gt.0.0d0)then
npoints_stom=npoints_stom+1
templeaf_stom(npoints_stom)=templeaf(j)
pres_air_stom(npoints_stom)=pres_air(j)
xpco2i_stom(npoints_stom)=co2i_ppm(j)
yAnet_stom(npoints_stom)=yAnet(j)
trmmol_stom(npoints_stom)=trmmol(j)
gswmeas_stom(npoints_stom)=gswmeas(j)
endif
enddo
if(npoints_stom.le.3)then
idostom=0
endif
endif
if(idostom.eq.1)then
do j=1,npoints_stom
call co2compens(templeaf_stom(j),stargamma25(5),ha_stargamma,
& gascon,stargamma(j))
!stargamma is in Pa, so convert it to ppm
term=esat(templeaf_stom(j),pres_air_stom(j))
stargamma(j)=1.0d+6*stargamma(j)/pres_air_stom(j)
pco2s(j)=xpco2i_stom(j)+1.6d0*yAnet_stom(j)/gswmeas_stom(j)
!mole fraction
pvapordef_s(j)=term/pres_air_stom(j)-
& 0.001d0*trmmol_stom(j)/gswmeas_stom(j)
!partial pressure
pvapordef_s(j)=pres_air_stom(j)*pvapordef_s(j)
!partial pressure deficit
pvapordef_s(j)=term-pvapordef_s(j)
pvapordef_s(j)=dmax1(0.0d0,pvapordef_s(j))
pvapordef_s(j)=dmin1(term,pvapordef_s(j))
rehulfsurf(j)=1.0d0-pvapordef_s(j)/term
combined1(j)=yAnet_stom(j)*rehulfsurf(j)/pco2s(j)
combined2(j)=yAnet_stom(j)*rehulfsurf(j)/xpco2i_stom(j)
enddo
malfit=2
do j=1,npoints_stom
sig(j)=1.0d0
enddo
call lfit(combined1,gswmeas_stom,sig,npoints_stom,alfit,
& malfit,malfit,lfitbasisfuncs,INFO)
do j=1,npoints_stom
gswmod1(j)=alfit(1)+alfit(2)*combined1(j)
enddo
call rsq_rms(gswmeas_stom,gswmod1,npoints_stom,rsqgsw,
& rmsgsw,agrindgsw)
ballintersurf=alfit(1)
ballslopesurf=alfit(2)
ballrsqsurf=rsqgsw
malfit=2
do j=1,npoints_stom
sig(j)=1.0d0
enddo
call lfit(combined2,gswmeas_stom,sig,npoints_stom,alfit,
& malfit,malfit,lfitbasisfuncs,INFO)
do j=1,npoints_stom
gswmod2(j)=alfit(1)+alfit(2)*combined2(j)
enddo
call rsq_rms(gswmeas_stom,gswmod2,npoints_stom,rsqgsw,
& rmsgsw,agrindgsw)
ballinterinside=alfit(1)
ballslopeinside=alfit(2)
ballrsqinside=rsqgsw
do istommodel=1,4
stomintercept=0.0001d0
stomslope=10.0d0
rayDzero=2000.0d0
if(istommodel.le.3)then
call StomRegression(npoints_stom,istommodel,pco2s,
& rehulfsurf,stargamma,yAnet_stom,gswmeas_stom,
& stomintercept,stomslope,pvapordef_s,rayDzero)
call stomoptimization(npoints_stom,istommodel,pco2s,
& rehulfsurf,stargamma,yAnet_stom,gswmeas_stom,
& stomintercept,stomslope,pvapordef_s,rayDzero)
do j=1,npoints_stom
call StomatalConductance(pco2s(j),rehulfsurf(j),
&stargamma(j),pvapordef_s(j),rayDzero,yAnet_stom(j),istommodel,
&stomintercept,stomslope,term)
gswmod(istommodel,j)=term
gswmodcp(j)=term
enddo
endif
if(istommodel.eq.4)then
!We experiment using internal CO2 to fit the dewar model
call StomRegression(npoints_stom,istommodel,xpco2i_stom,
& rehulfsurf,stargamma,yAnet_stom,gswmeas_stom,
& stomintercept,stomslope,pvapordef_s,rayDzero)
call stomoptimization(npoints_stom,istommodel,xpco2i_stom,
& rehulfsurf,stargamma,yAnet_stom,gswmeas_stom,
& stomintercept,stomslope,pvapordef_s,rayDzero)
do j=1,npoints_stom
call StomatalConductance(xpco2i_stom(j),
& rehulfsurf(j),stargamma(j),pvapordef_s(j),rayDzero,
& yAnet_stom(j),istommodel,
& stomintercept,stomslope,term)
gswmod(istommodel,j)=term
gswmodcp(j)=term
enddo
endif
call rsq_rms(gswmeas_stom,gswmodcp,
& npoints_stom,rsqgsw,rmsgsw,agrindgsw)
if(istommodel.eq.1)then
ballinter=stomintercept
ballslope=stomslope
ballrsqgsw=rsqgsw
ballrmsgsw=rmsgsw
ballagrindgsw=agrindgsw
endif
if(istommodel.eq.2)then
raysurfinter=stomintercept
raysurfslope=stomslope
raysurfd0=rayDzero
raysurfrsqgsw=rsqgsw
raysurfrmsgsw=rmsgsw
raysurfagrindgsw=agrindgsw
endif
if(istommodel.eq.3)then
belindainter=stomintercept
belindaslope=stomslope
belindad0=-9999.0d0
belindarsqgsw=rsqgsw
belindarmsgsw=rmsgsw
belindaagrindgsw=agrindgsw
endif
if(istommodel.eq.4)then
dewarinter=stomintercept
dewarslope=stomslope
deward0=rayDzero
dewarrsqgsw=rsqgsw
dewarrmsgsw=rmsgsw
dewaragrindgsw=agrindgsw
endif
enddo
do j=1,npoints_stom
write(unitstomcomp,370)curveno,trim(curvename),
& gswmeas_stom(j),gswmod1(j),gswmod2(j),gswmod(1,j),
& gswmod(2,j),gswmod(3,j),gswmod(4,j),xpco2i_stom(j),
& pco2s(j),rehulfsurf(j),stargamma(j),pvapordef_s(j),
& pres_air_stom(j),yAnet_stom(j)
enddo
else
ballintersurf=-9999.0d0
ballslopesurf=-9999.0d0
ballrsqsurf=-9999.0d0
ballinterinside=-9999.0d0
ballslopeinside=-9999.0d0
ballrsqinside=-9999.0d0
ballinter=-9999.0d0
ballslope=-9999.0d0
ballrsqgsw=-9999.0d0
ballrmsgsw=-9999.0d0
ballagrindgsw=-9999.0d0
raysurfinter=-9999.0d0
raysurfslope=-9999.0d0
raysurfd0=-9999.0d0
raysurfrsqgsw=-9999.0d0
raysurfrmsgsw=-9999.0d0
raysurfagrindgsw=-9999.0d0
belindainter=-9999.0d0
belindaslope=-9999.0d0
belindad0=-9999.0d0
belindarsqgsw=-9999.0d0
belindarmsgsw=-9999.0d0
belindaagrindgsw=-9999.0d0
dewarinter=-9999.0d0
dewarslope=-9999.0d0
deward0=-9999.0d0
dewarrsqgsw=-9999.0d0
dewarrmsgsw=-9999.0d0
dewaragrindgsw=-9999.0d0
endif
!$$$$$$$$$$$$ End of Stomatal Conductance Fit $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
!Now analyze the relationship of water use efficiency with ambient CO2
if(idowue.eq.1)then
do j=1,npoints
wue(j)=yAnet(j)/trmmol(j)
sig(j)=1.0d0
enddo
! malfit=3
! do j=1,npoints
! sig(j)=1.0d0
! enddo
! call lfit(co2a_ppm,wue,sig,npoints,alfit,malfit,malfit,
! & lfitbasisfuncs,INFO)
! do j=1,npoints
! wuemod(j)=alfit(1)+alfit(2)*co2a_ppm(j)+alfit(3)*
! & co2a_ppm(j)*co2a_ppm(j)/1000.0d0
! enddo
! call rsq_rms(wue,wuemod,npoints,rsqwue,rmswue,agrindwue)
! wueref=alfit(1)+alfit(2)*co2current+alfit(3)*
! & co2current*co2current/1000.0d0
! der_wueref=alfit(2)+2.0d0*alfit(3)*co2current/1000.0d0
alfit(1)=1.0d0
alfit(2)=0.1d0
alfit(3)=-20.0d0
alfit(4)=0.1d0
alfit(5)=100.0d0
bmin(1)=-1.0d+3
bmax(1)=1.0d+4
bmin(2)=-1.0d+4
bmax(2)=1.0d+5
bmin(3)=-1.0d+5
bmax(3)=1.0d+5
bmin(4)=-1.0d+5
bmax(4)=1.0d+5
bmin(5)=-1.0d+5
bmax(5)=1.0d+5
imodel=1
numparams=5
call cica_Regression5(npoints,wue,co2a_ppm,alfit,numparams,
&imodel,bmin,bmax)
call cicaoptimization5(npoints,wue,co2a_ppm,alfit,numparams,
&imodel,bmin,bmax)
do j=1,npoints
call cica_ca5(imodel,numparams,alfit,co2a_ppm(j),wuemod(j),
&der_wueref,der_alfit)
enddo
call cica_ca5(imodel,numparams,alfit,co2current,wueref,
&der_wueref,der_alfit)
call rsq_rms(wue,wuemod,npoints,rsqwue,rmswue,agrindwue)
!------------------------------------------------------------------------------
do j=1,npoints
wue_intrin(j)=yAnet(j)/gswmeas(j)
enddo
! call lfit(co2a_ppm,wue_intrin,sig,npoints,blfit,malfit,
! & malfit,lfitbasisfuncs,INFO)
! do j=1,npoints
! wue_intrinmod(j)=blfit(1)+blfit(2)*co2a_ppm(j)+
! & blfit(3)*co2a_ppm(j)*co2a_ppm(j)/1000.0d0
! enddo
! call rsq_rms(wue_intrin,wue_intrinmod,npoints,rsqwue_intrin,
! & rmswue,agrindwue)
! wueref_intrin=blfit(1)+blfit(2)*co2current+blfit(3)*
! & co2current*co2current/1000.0d0
! der_wueref_intrin=blfit(2)+2.0d0*blfit(3)*co2current/1000.0d0
blfit(1)=1.0d0
blfit(2)=0.10
blfit(3)=-20.0d0
blfit(4)=0.1d0
blfit(5)=100.0d0
bmin(1)=-1.0d+5
bmax(1)=1.0d+5
bmin(2)=-1.0d+5
bmax(2)=1.0d+5
bmin(3)=-1.0d+5
bmax(3)=1.0d+5
bmin(4)=-1.0d+5
bmax(4)=1.0d+5
bmin(5)=-1.0d+5
bmax(5)=1.0d+5
numparams=5
imodel=1
call cica_Regression5(npoints,wue_intrin,co2a_ppm,
&blfit,numparams,imodel,bmin,bmax)
call cicaoptimization5(npoints,wue_intrin,co2a_ppm,
&blfit,numparams,imodel,bmin,bmax)
do j=1,npoints
call cica_ca5(imodel,numparams,blfit,co2a_ppm(j),
&wue_intrinmod(j),der_wueref_intrin,der_blfit)
enddo
call cica_ca5(imodel,numparams,blfit,co2current,
&wueref_intrin,der_wueref_intrin,der_blfit)
call rsq_rms(wue_intrin,wue_intrinmod,npoints,rsqwue_intrin,
&rmswue,agrindwue)
else
rsqwue=-9999.0d0
rmswue=-9999.0d0
agrindwue=-9999.d0
wueref=-9999.0d0
der_wueref=-9999.0d0
avevpdl=-9999.0d0
avetleaf=-9999.0d0
avetair=-9999.0d0
do j=1,npoints
wue(j)=-9999.0d0
wuemod(j)=-9999.0d0
wue_intrin(j)=-9999.0d0
wue_intrinmod(j)=-9999.0d0
enddo
rsqwue_intrin=-9999.0d0
wueref_intrin=-9999.0d0
der_wueref_intrin=-9999.0d0
do j=1,numparams
alfit(j)=-9999.0d0
blfit(j)=-9999.0d0
enddo
endif
!----------------------------------------------------------------------------
!Now analyze the relationship of Ci/Ca ratio with ambient CO2 and Cc/Ci with Ci
100 term=co2a_ppm(1)
do j=2,npoints
if(co2a_ppm(j).gt.term)then
term=co2a_ppm(j)
endif
enddo
bmin(1)=-1.0d+2
bmax(1)=1.0d+2
bmin(2)=-300.0d0/term
bmax(2)=1.0d+6
if(idocica.eq.1)then
do j=1,npoints
cicameas(j)=co2i_ppm(j)/co2a_ppm(j)
enddo
!Ci/Ca=a*exp(-b*Ca)+c+d*ln(co2a)+e*(ln(co2))**2
cicafit(1)=1.5874d0
cicafit(2)=2.0343d0
cicafit(3)=0.8779d0
cicafit(4)=0.1d0
cicafit(5)=0.01d0
bmin(3)=-1.0d+2
bmax(3)=1.0d+2
bmin(4)=-1.0d+2
bmax(4)=1.0d+2
bmin(5)=-1.0d+2
bmax(5)=1.0d+2
numparams=5
imodel=3
call cica_Regression5(npoints,cicameas,co2a_ppm,
&cicafit,numparams,imodel,bmin,bmax)
call cicaoptimization5(npoints,cicameas,co2a_ppm,
&cicafit,numparams,imodel,bmin,bmax)
do j=1,npoints
call cica_ca5(imodel,numparams,cicafit,co2a_ppm(j),
&cicamod(j),der_cicaref,der_cicafit)
enddo
call cica_ca5(imodel,numparams,cicafit,co2current,
&cicaref,der_cicaref,der_cicafit)
call rsq_rms(cicameas,cicamod,npoints,rsqcica,rmscica,
& agrindcica)
else
do j=1,npoints
cicamod(j)=-9999.0d0
enddo
rsqcica=-9999.0d0
rmscica=-9999.0d0
agrindcica=-9999.0d0
cicaref=-9999.0d0
der_cicaref=-9999.0d0
do j=1,numparams
cicafit(j)=-9999.0d0
der_cicafit(j)=-9999.0d0
enddo
endif
!--------------------------------------------------------------------------
!below we fit Cc/Ci
110 do i=1,4
do j=1,npoints
cccimeas(i,j)=co2c_ppm(i,j)/co2i_ppm(j)
enddo
if(co2c_ppm(i,1).ge.0.0d0)then
cccifit(i,1)=2.5874d0
cccifit(i,2)=2.0343d0
cccifit(i,3)=0.8779d0
cccifit(i,4)=0.1d0
cccifit(i,5)=0.01d0
cccifit(i,6)=0.001d0
bmin(3)=-1.0d+2
bmax(3)=1.0d+2
bmin(4)=-1.0d+2
bmax(4)=1.0d+2
bmin(5)=-1.0d+2
bmax(5)=1.0d+2
bmin(6)=-1.0d+2
bmax(6)=1.0d+2
numparams=6
imodel=3
call cica_Regression5(npoints,cccimeas(i:i,1:npoints),
&co2i_ppm,cccifit(i:i,1:numparams),numparams,imodel,bmin,bmax)
call cicaoptimization5(npoints,cccimeas(i:i,1:npoints),
&co2i_ppm,cccifit(i:i,1:numparams),numparams,imodel,bmin,bmax)
do j=1,npoints
call cica_ca5(imodel,numparams,cccifit(i:i,1:numparams),
&co2i_ppm(j),cccimod(i,j),der_ccciref(i),der_cccifit)
enddo
if(dabs(cicaref+9999.0d0).gt.1.0d-5)then
co2iref=cicaref*co2current
else
co2iref=0.75d0*co2current
endif
call cica_ca5(imodel,numparams,cccifit(i:i,1:numparams),
&co2iref,ccciref(i),der_ccciref(i),der_cccifit)
call rsq_rms(cccimeas(i:i,1:npoints),cccimod(i:i,1:npoints),
&npoints,rsqccci(i),rmsccci(i),agrindccci(i))
else
do j=1,npoints
cccimod(i,j)=-9999.0d0
enddo
rsqccci(i)=-9999.0d0
rmsccci(i)=-9999.0d0
agrindccci(i)=-9999.0d0
ccciref(i)=-9999.0d0
der_ccciref(i)=-9999.0d0
do j=1,numparams
cccifit(i,j)=-9999.0d0
enddo
endif
enddo
!-----------------------------------------------------------------------
!now we fit CO2 recycling ratio
do i=1,6
if(co2recycleratio(i,1).ge.0.0d0)then
recycfit(i,1)=2.5874d0
recycfit(i,2)=2.0343d0
recycfit(i,3)=0.8779d0
recycfit(i,4)=0.1d0
recycfit(i,5)=0.01d0
recycfit(i,6)=0.001d0
bmin(3)=-1.0d+2
bmax(3)=1.0d+2
bmin(4)=-1.0d+2
bmax(4)=1.0d+2
bmin(5)=-1.0d+2
bmax(5)=1.0d+2
bmin(6)=-1.0d+2
bmax(6)=1.0d+2
numparams=5
imodel=3
call cica_Regression5(npoints,co2recycleratio(i:i,1:npoints),
&co2i_ppm,recycfit(i:i,1:numparams),numparams,imodel,bmin,bmax)
call cicaoptimization5(npoints,co2recycleratio(i:i,1:npoints),
&co2i_ppm,recycfit(i:i,1:numparams),numparams,imodel,bmin,bmax)
do j=1,npoints
call cica_ca5(imodel,numparams,recycfit(i:i,1:numparams),
&co2i_ppm(j),recycmod(i,j),der_recycref(i),der_recycfit)
enddo
if(dabs(cicaref+9999.0d0).gt.1.0d-5)then
co2iref=cicaref*co2current
else
co2iref=0.75d0*co2current
endif
call cica_ca5(imodel,numparams,recycfit(i:i,1:numparams),
&co2iref,recycref(i),der_recycref(i),der_recycfit)
call rsq_rms(co2recycleratio(i:i,1:npoints),
&recycmod(i:i,1:npoints),npoints,rsqrecyc(i),rmsrecyc(i),
&agrindrecyc(i))
else
do j=1,npoints
recycmod(i,j)=-9999.0d0
enddo
rsqrecyc(i)=-9999.0d0
rmsrecyc(i)=-9999.0d0
agrindrecyc(i)=-9999.0d0
recycref(i)=-9999.0d0
der_recycref(i)=-9999.0d0
do j=1,numparams
recycfit(i,j)=-9999.0d0
enddo
endif
enddo
!-----------------------------------------------------------------------
do j=1,npoints
write(unitwuecicacomp,380)curveno,trim(curvename),co2a_ppm(j),
&vpdl(j),wue(j),wuemod(j),cicameas(j),cicamod(j),wue_intrin(j),
&wue_intrinmod(j),((cccimeas(k,j),cccimod(k,j)),k=1,4),
&((co2recycleratio(k,j),recycmod(k,j)),k=1,6)
enddo
write(unitparamsout,390)curveno,trim(curvename),npoints_stom,
&co2threshold,co2current,vpdl_ref,ballintersurf,ballslopesurf,
&ballrsqsurf,ballinterinside,ballslopeinside,ballrsqinside,
&ballinter,ballslope,ballrsqgsw,raysurfinter,raysurfslope,
&raysurfd0,raysurfrsqgsw,belindainter,belindaslope,
&belindad0,belindarsqgsw,dewarinter,dewarslope,deward0,
&dewarrsqgsw,wueref,der_wueref,rsqwue,(alfit(i),i=1,5),
&wueref_intrin,der_wueref_intrin,rsqwue_intrin,(blfit(i),i=1,5),
&cicaref,der_cicaref,rsqcica,(cicafit(i),i=1,5),
&avetleaf,avetair,avevpdl,avepari,((ccciref(i),der_ccciref(i),
&rsqccci(i),(cccifit(i,j),j=1,6)),i=1,4),
&((recycref(i),der_recycref(i),
&rsqrecyc(i),(recycfit(i,j),j=1,5)),i=1,6),
!
&trim(siteID),Latitude,Longitude,Elevation,yearsampled,
&sampledoy,GrowingSeasonStart,GrowingSeasonEnd,
&standage,CanopyHeight,LeafAreaIndex,trim(species),
&avetimeresolution,avetimesampled,SampleHeight,
&Needleage,specificLAI,nitrogencontent,carboncontent,
&phoscontent,trim(woodporosity),sapwooddensity,leafratio
370 format(i0,',',a,',',13(f0.8,','),f0.8)
380 format(i0,',',a,',',27(f0.8,','),f0.8)
390 format(i0,',',a,',',i0,',',136(f0.8,','),a,',',10(f0.8,','),
&a,',',8(f0.8,','),a,',',f0.8,',',f0.8)
return
end subroutine LeafGasFit_Stom