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

319 lines
10 KiB
FortranFixed

subroutine ALightCombinatorial()
implicit none
include '../testarea/LeafGasHybridFit.h'
integer i,ilastrubp1,ilastrubis1,ilastrubp2,ilastrubis2,
&ilastrubp3,ilastrubis3,ilastrubp4,ilastrubis4,
&ilastrubp5,ilastrubis5,ilastrubp6,ilastrubis6,
&ilastrubp7,ilastrubis7,ilastrubp8,ilastrubis8,
&ilastrubp9,ilastrubis9,ilastrubp10,ilastrubis10,
&ilastrubp11,ilastrubis11,ilastrubp12,ilastrubis12,
&ilastrubp13,ilastrubis13,ilastrubp14,ilastrubis14,
&ilastrubp15,ilastrubis15,k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,
&k11,k12,k13,k14,k15
!common block variables: numALightcurves,nALightPoints(numALightcurves),
!ALightiphotolimit(nALightPoints,numALightcurves),ialightmin(numALightcurves),
!ialightmax(numALightcurves),ialightrubpmin(numALightcurves),ialightrubpmax(numALightcurves),
!ialightorder(numALightcurves)
if(numALightcurves.eq.0)then
!no conventional A/Light curves. go to free-style measurements directly and then return
call FreeCombinatorial()
return
endif
!(before 17/09/2014 remarks.) Assume rubp, rubisco and tpu limitations in the order of (rubp, rubisco, tpu)
!but any limitation can be missing in any light response curves. The nALightPoints data in each light
!response curve must be ordered from low to high PAR. When ordered in such, the three limitation states
!should occur in the order of (rubp, rubisco, tpu)
!
!17/09/2014 Wenting found (RuBP, TPU, Rubisco) is more likely for A/Light curves if Ci decreases with
!increased light. Thus the following changes are made:
!we generally assume the points of an A/Light curve are lined up in a sequence of (RuBP, TPU and Rubisco),
!which is indicated by ialightorder=0. However, if Ci increases steadily from nstartalight to the end, we
!assume a sequence of (RuBP, Rubisco and TPU),which is indicated by ialightorder=2.
do ilastrubp1=ialightrubpmin(1),ialightrubpmax(1)
do i=1,ilastrubp1
ALightiphotolimit(i,1)=2
enddo
k1=max0(ilastrubp1,ialightmin(1))
do 1 ilastrubis1=k1,ialightmax(1)
do i=ilastrubp1+1,ilastrubis1
ALightiphotolimit(i,1)=3-ialightorder(1)
enddo
do i=ilastrubis1+1,nALightPoints(1)
ALightiphotolimit(i,1)=1+ialightorder(1)
enddo
if(numALightcurves.eq.1)then
call FreeCombinatorial()
goto 1
endif
do ilastrubp2=ialightrubpmin(2),ialightrubpmax(2)
do i=1,ilastrubp2
ALightiphotolimit(i,2)=2
enddo
k2=max0(ilastrubp2,ialightmin(2))
do 2 ilastrubis2=k2,ialightmax(2)
do i=ilastrubp2+1,ilastrubis2
ALightiphotolimit(i,2)=3-ialightorder(2)
enddo
do i=ilastrubis2+1,nALightPoints(2)
ALightiphotolimit(i,2)=1+ialightorder(2)
enddo
if(numALightcurves.eq.2)then
call FreeCombinatorial()
goto 2
endif
do ilastrubp3=ialightrubpmin(3),ialightrubpmax(3)
do i=1,ilastrubp3
ALightiphotolimit(i,3)=2
enddo
k3=max0(ilastrubp3,ialightmin(3))
do 3 ilastrubis3=k3,ialightmax(3)
do i=ilastrubp3+1,ilastrubis3
ALightiphotolimit(i,3)=3-ialightorder(3)
enddo
do i=ilastrubis3+1,nALightPoints(3)
ALightiphotolimit(i,3)=1+ialightorder(3)
enddo
if(numALightcurves.eq.3)then
call FreeCombinatorial()
goto 3
endif
do ilastrubp4=ialightrubpmin(4),ialightrubpmax(4)
do i=1,ilastrubp4
ALightiphotolimit(i,4)=2
enddo
k4=max0(ilastrubp4,ialightmin(4))
do 4 ilastrubis4=k4,ialightmax(4)
do i=ilastrubp4+1,ilastrubis4
ALightiphotolimit(i,4)=3-ialightorder(4)
enddo
do i=ilastrubis4+1,nALightPoints(4)
ALightiphotolimit(i,4)=1+ialightorder(4)
enddo
if(numALightcurves.eq.4)then
call FreeCombinatorial()
goto 4
endif
do ilastrubp5=ialightrubpmin(5),ialightrubpmax(5)
do i=1,ilastrubp5
ALightiphotolimit(i,5)=2
enddo
k5=max0(ilastrubp5,ialightmin(5))
do 5 ilastrubis5=k5,ialightmax(5)
do i=ilastrubp5+1,ilastrubis5
ALightiphotolimit(i,5)=3-ialightorder(5)
enddo
do i=ilastrubis5+1,nALightPoints(5)
ALightiphotolimit(i,5)=1+ialightorder(5)
enddo
if(numALightcurves.eq.5)then
call FreeCombinatorial()
goto 5
endif
do ilastrubp6=ialightrubpmin(6),ialightrubpmax(6)
do i=1,ilastrubp6
ALightiphotolimit(i,6)=2
enddo
k6=max0(ilastrubp6,ialightmin(6))
do 6 ilastrubis6=k6,ialightmax(6)
do i=ilastrubp6+1,ilastrubis6
ALightiphotolimit(i,6)=3-ialightorder(6)
enddo
do i=ilastrubis6+1,nALightPoints(6)
ALightiphotolimit(i,6)=1+ialightorder(6)
enddo
if(numALightcurves.eq.6)then
call FreeCombinatorial()
goto 6
endif
do ilastrubp7=ialightrubpmin(7),ialightrubpmax(7)
do i=1,ilastrubp7
ALightiphotolimit(i,7)=2
enddo
k7=max0(ilastrubp7,ialightmin(7))
do 7 ilastrubis7=k7,ialightmax(7)
do i=ilastrubp7+1,ilastrubis7
ALightiphotolimit(i,7)=3-ialightorder(7)
enddo
do i=ilastrubis7+1,nALightPoints(7)
ALightiphotolimit(i,7)=1+ialightorder(7)
enddo
if(numALightcurves.eq.7)then
call FreeCombinatorial()
goto 7
endif
do ilastrubp8=ialightrubpmin(8),ialightrubpmax(8)
do i=1,ilastrubp8
ALightiphotolimit(i,8)=2
enddo
k8=max0(ilastrubp8,ialightmin(8))
do 8 ilastrubis8=k8,ialightmax(8)
do i=ilastrubp8+1,ilastrubis8
ALightiphotolimit(i,8)=3-ialightorder(8)
enddo
do i=ilastrubis8+1,nALightPoints(8)
ALightiphotolimit(i,8)=1+ialightorder(8)
enddo
if(numALightcurves.eq.8)then
call FreeCombinatorial()
goto 8
endif
do ilastrubp9=ialightrubpmin(9),ialightrubpmax(9)
do i=1,ilastrubp9
ALightiphotolimit(i,9)=2
enddo
k9=max0(ilastrubp9,ialightmin(9))
do 9 ilastrubis9=k9,ialightmax(9)
do i=ilastrubp9+1,ilastrubis9
ALightiphotolimit(i,9)=3-ialightorder(9)
enddo
do i=ilastrubis9+1,nALightPoints(9)
ALightiphotolimit(i,9)=1+ialightorder(9)
enddo
if(numALightcurves.eq.9)then
call FreeCombinatorial()
goto 9
endif
do ilastrubp10=ialightrubpmin(10),ialightrubpmax(10)
do i=1,ilastrubp10
ALightiphotolimit(i,10)=2
enddo
k10=max0(ilastrubp10,ialightmin(10))
do 10 ilastrubis10=k10,ialightmax(10)
do i=ilastrubp10+1,ilastrubis10
ALightiphotolimit(i,10)=3-ialightorder(10)
enddo
do i=ilastrubis10+1,nALightPoints(10)
ALightiphotolimit(i,10)=1+ialightorder(10)
enddo
if(numALightcurves.eq.10)then
call FreeCombinatorial()
goto 10
endif
do ilastrubp11=ialightrubpmin(11),ialightrubpmax(11)
do i=1,ilastrubp11
ALightiphotolimit(i,11)=2
enddo
k11=max0(ilastrubp11,ialightmin(11))
do 11 ilastrubis11=k11,ialightmax(11)
do i=ilastrubp11+1,ilastrubis11
ALightiphotolimit(i,11)=3-ialightorder(11)
enddo
do i=ilastrubis11+1,nALightPoints(11)
ALightiphotolimit(i,11)=1+ialightorder(11)
enddo
if(numALightcurves.eq.11)then
call FreeCombinatorial()
goto 11
endif
do ilastrubp12=ialightrubpmin(12),ialightrubpmax(12)
do i=1,ilastrubp12
ALightiphotolimit(i,12)=2
enddo
k12=max0(ilastrubp12,ialightmin(12))
do 12 ilastrubis12=k12,ialightmax(12)
do i=ilastrubp12+1,ilastrubis12
ALightiphotolimit(i,12)=3-ialightorder(12)
enddo
do i=ilastrubis12+1,nALightPoints(12)
ALightiphotolimit(i,12)=1+ialightorder(12)
enddo
if(numALightcurves.eq.12)then
call FreeCombinatorial()
goto 12
endif
do ilastrubp13=ialightrubpmin(13),ialightrubpmax(13)
do i=1,ilastrubp13
ALightiphotolimit(i,13)=2
enddo
k13=max0(ilastrubp13,ialightmin(13))
do 13 ilastrubis13=k13,ialightmax(13)
do i=ilastrubp13+1,ilastrubis13
ALightiphotolimit(i,13)=3-ialightorder(13)
enddo
do i=ilastrubis13+1,nALightPoints(13)
ALightiphotolimit(i,13)=1+ialightorder(13)
enddo
if(numALightcurves.eq.13)then
call FreeCombinatorial()
goto 13
endif
do ilastrubp14=ialightrubpmin(14),ialightrubpmax(14)
do i=1,ilastrubp14
ALightiphotolimit(i,14)=2
enddo
k14=max0(ilastrubp14,ialightmin(14))
do 14 ilastrubis14=k14,ialightmax(14)
do i=ilastrubp14+1,ilastrubis14
ALightiphotolimit(i,14)=3-ialightorder(14)
enddo
do i=ilastrubis14+1,nALightPoints(14)
ALightiphotolimit(i,14)=1+ialightorder(14)
enddo
if(numALightcurves.eq.14)then
call FreeCombinatorial()
goto 14
endif
do ilastrubp15=ialightrubpmin(15),ialightrubpmax(15)
do i=1,ilastrubp15
ALightiphotolimit(i,15)=2
enddo
k15=max0(ilastrubp15,ialightmin(15))
do 15 ilastrubis15=k15,ialightmax(15)
do i=ilastrubp15+1,ilastrubis15
ALightiphotolimit(i,15)=3-ialightorder(15)
enddo
do i=ilastrubis15+1,nALightPoints(15)
ALightiphotolimit(i,15)=1+ialightorder(15)
enddo
if(numALightcurves.eq.15)then
call FreeCombinatorial()
goto 15
endif
15 continue
enddo
14 continue
enddo
13 continue
enddo
12 continue
enddo
11 continue
enddo
10 continue
enddo
9 continue
enddo
8 continue
enddo
7 continue
enddo
6 continue
enddo
5 continue
enddo
4 continue
enddo
3 continue
enddo
2 continue
enddo
1 continue
enddo
return
end subroutine ALightCombinatorial