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