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

258 lines
7.5 KiB
FortranFixed

subroutine sim_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
!common block variables: numALightcurves,nALightPoints(numALightcurves),
!ALightiphotolimit(nALightPoints,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.
!
!Assume a light response curve is either rubp and rubisco or rubp and tpu
do ilastrubp1=nstartalight(1),nendalight(1)
do i=1,ilastrubp1
ALightiphotolimit(i,1)=2
enddo
do 1 ilastrubis1=1,2
do i=ilastrubp1+1,nALightPoints(1)
ALightiphotolimit(i,1)=2*ilastrubis1-1
enddo
if(numALightcurves.eq.1)then
call FreeCombinatorial()
goto 1
endif
do ilastrubp2=nstartalight(2),nendalight(2)
do i=1,ilastrubp2
ALightiphotolimit(i,2)=2
enddo
do 2 ilastrubis2=1,2
do i=ilastrubp2+1,nALightPoints(2)
ALightiphotolimit(i,2)=2*ilastrubis2-1
enddo
if(numALightcurves.eq.2)then
call FreeCombinatorial()
goto 2
endif
do ilastrubp3=nstartalight(3),nendalight(3)
do i=1,ilastrubp3
ALightiphotolimit(i,3)=2
enddo
do 3 ilastrubis3=1,2
do i=ilastrubp3+1,nALightPoints(3)
ALightiphotolimit(i,3)=2*ilastrubis3-1
enddo
if(numALightcurves.eq.3)then
call FreeCombinatorial()
goto 3
endif
do ilastrubp4=nstartalight(4),nendalight(4)
do i=1,ilastrubp4
ALightiphotolimit(i,4)=2
enddo
do 4 ilastrubis4=1,2
do i=ilastrubp4+1,nALightPoints(4)
ALightiphotolimit(i,4)=2*ilastrubis4-1
enddo
if(numALightcurves.eq.4)then
call FreeCombinatorial()
goto 4
endif
do ilastrubp5=nstartalight(5),nendalight(5)
do i=1,ilastrubp5
ALightiphotolimit(i,5)=2
enddo
do 5 ilastrubis5=1,2
do i=ilastrubp5+1,nALightPoints(5)
ALightiphotolimit(i,5)=2*ilastrubis5-1
enddo
if(numALightcurves.eq.5)then
call FreeCombinatorial()
goto 5
endif
do ilastrubp6=nstartalight(6),nendalight(6)
do i=1,ilastrubp6
ALightiphotolimit(i,6)=2
enddo
do 6 ilastrubis6=1,2
do i=ilastrubp6+1,nALightPoints(6)
ALightiphotolimit(i,6)=2*ilastrubis6-1
enddo
if(numALightcurves.eq.6)then
call FreeCombinatorial()
goto 6
endif
do ilastrubp7=nstartalight(7),nendalight(7)
do i=1,ilastrubp7
ALightiphotolimit(i,7)=2
enddo
do 7 ilastrubis7=1,2
do i=ilastrubp7+1,nALightPoints(7)
ALightiphotolimit(i,7)=2*ilastrubis7-1
enddo
if(numALightcurves.eq.7)then
call FreeCombinatorial()
goto 7
endif
do ilastrubp8=nstartalight(8),nendalight(8)
do i=1,ilastrubp8
ALightiphotolimit(i,8)=2
enddo
do 8 ilastrubis8=1,2
do i=ilastrubp8+1,nALightPoints(8)
ALightiphotolimit(i,8)=2*ilastrubis8-1
enddo
if(numALightcurves.eq.8)then
call FreeCombinatorial()
goto 8
endif
do ilastrubp9=nstartalight(9),nendalight(9)
do i=1,ilastrubp9
ALightiphotolimit(i,9)=2
enddo
do 9 ilastrubis9=1,2
do i=ilastrubp9+1,nALightPoints(9)
ALightiphotolimit(i,9)=2*ilastrubis9-1
enddo
if(numALightcurves.eq.9)then
call FreeCombinatorial()
goto 9
endif
do ilastrubp10=nstartalight(10),nendalight(10)
do i=1,ilastrubp10
ALightiphotolimit(i,10)=2
enddo
do 10 ilastrubis10=1,2
do i=ilastrubp10+1,nALightPoints(10)
ALightiphotolimit(i,10)=2*ilastrubis10-1
enddo
if(numALightcurves.eq.10)then
call FreeCombinatorial()
goto 10
endif
do ilastrubp11=nstartalight(11),nendalight(11)
do i=1,ilastrubp11
ALightiphotolimit(i,11)=2
enddo
do 11 ilastrubis11=1,2
do i=ilastrubp11+1,nALightPoints(11)
ALightiphotolimit(i,11)=2*ilastrubis11-1
enddo
if(numALightcurves.eq.11)then
call FreeCombinatorial()
goto 11
endif
do ilastrubp12=nstartalight(12),nendalight(12)
do i=1,ilastrubp12
ALightiphotolimit(i,12)=2
enddo
do 12 ilastrubis12=1,2
do i=ilastrubp12+1,nALightPoints(12)
ALightiphotolimit(i,12)=2*ilastrubis12-1
enddo
if(numALightcurves.eq.12)then
call FreeCombinatorial()
goto 12
endif
do ilastrubp13=nstartalight(13),nendalight(13)
do i=1,ilastrubp13
ALightiphotolimit(i,13)=2
enddo
do 13 ilastrubis13=1,2
do i=ilastrubp13+1,nALightPoints(13)
ALightiphotolimit(i,13)=2*ilastrubis13-1
enddo
if(numALightcurves.eq.13)then
call FreeCombinatorial()
goto 13
endif
do ilastrubp14=nstartalight(14),nendalight(14)
do i=1,ilastrubp14
ALightiphotolimit(i,14)=2
enddo
do 14 ilastrubis14=1,2
do i=ilastrubp14+1,nALightPoints(14)
ALightiphotolimit(i,14)=2*ilastrubis14-1
enddo
if(numALightcurves.eq.14)then
call FreeCombinatorial()
goto 14
endif
do ilastrubp15=nstartalight(15),nendalight(15)
do i=1,ilastrubp15
ALightiphotolimit(i,15)=2
enddo
do 15 ilastrubis15=1,2
do i=ilastrubp15+1,nALightPoints(15)
ALightiphotolimit(i,15)=2*ilastrubis15-1
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 sim_ALightCombinatorial