98 & LBi, UBi, LBj, UBj, UBk, UBt, &
99 & IminS, ImaxS, JminS, JmaxS, &
104#if defined IRON_LIMIT && defined IRON_RELAX
121 integer,
intent(in) :: ng, tile
122 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
123 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
124 integer,
intent(in) :: nstp, nnew
128 real(r8),
intent(in) :: rmask(LBi:,LBj:)
130# if defined IRON_LIMIT && defined IRON_RELAX
131 real(r8),
intent(in) :: h(LBi:,LBj:)
133 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
134 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
135 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
136 real(r8),
intent(in) :: srflx(LBi:,LBj:)
137 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
139 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
140 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
141 real(r8),
intent(in) :: tl_z_w(LBi:,LBj:,0:)
142 real(r8),
intent(in) :: tl_srflx(LBi:,LBj:)
143 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
146 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
148# if defined IRON_LIMIT && defined IRON_RELAX
149 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
151 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
152 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
153 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
154 real(r8),
intent(in) :: srflx(LBi:UBi,LBj:UBj)
155 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
157 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,UBk)
158 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,UBk)
159 real(r8),
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:UBk)
160 real(r8),
intent(in) :: tl_srflx(LBi:UBi,LBj:UBj)
161 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,UBk,3,UBt)
166 integer,
parameter :: Nsink = 2
168 integer :: Iter, i, ibio, isink, itime, itrc, iTrcMax, j, k, ks
171 integer,
dimension(Nsink) :: idsink
173 real(r8),
parameter :: MinVal = 1.0e-6_r8
175 real(r8) :: Att, ExpAtt, Itop, PAR
176 real(r8) :: tl_Att, tl_ExpAtt, tl_Itop, tl_PAR
177 real(r8) :: cff, cff1, cff2, cff3, cff4, cff5, cff6, dtdays
178 real(r8) :: tl_cff, tl_cff1, tl_cff4, tl_cff5, tl_cff6
179 real(r8) :: cffL, cffR, cu, dltL, dltR
180 real(r8) :: tl_cffL, tl_cffR, tl_cu, tl_dltL, tl_dltR
181 real(r8) :: fac, fac1, fac2
182 real(r8) :: tl_fac, tl_fac1, tl_fac2
184 real(r8) :: Nlimit, FNlim
185 real(r8) :: tl_Nlimit, tl_FNlim
186 real(r8) :: FNratio, FCratio, FCratioE, Flimit
187 real(r8) :: tl_FNratio, tl_FCratio, tl_FCratioE, tl_Flimit
188 real(r8) :: FeC2FeN, FeN2FeC
190 real(r8) :: FeNudgCoef
193 real(r8),
dimension(Nsink) :: Wbio
194 real(r8),
dimension(Nsink) :: tl_Wbio
196 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
198 real(r8),
dimension(IminS:ImaxS) :: PARsur
199 real(r8),
dimension(IminS:ImaxS) :: tl_PARsur
201 real(r8),
dimension(NT(ng),2) :: BioTrc
202 real(r8),
dimension(NT(ng),2) :: BioTrc1
203 real(r8),
dimension(NT(ng),2) :: tl_BioTrc
204 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
205 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio1
206 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio2
207 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
209 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: tl_Bio
210 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: tl_Bio_old
212 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
213 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_FC
215 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
216 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
217 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
218 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Light
219 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WL
220 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WR
221 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL
222 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL1
223 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR
224 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR1
225 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qc
227 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv
228 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv2
229 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv3
230 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Light
231 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_WL
232 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_WR
233 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_bL
234 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_bR
235 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_qc
237#include "set_bounds.h"
251#if defined IRON_LIMIT && defined IRON_RELAX
261 fen2fec=(16.0_r8/106.0_r8)*1.0e3_r8
262 fec2fen=(106.0_r8/16.0_r8)*1.0e-3_r8
278 j_loop :
DO j=jstr,jend
284 hz_inv(i,k)=1.0_r8/hz(i,j,k)
285 tl_hz_inv(i,k)=-hz_inv(i,k)*hz_inv(i,k)*tl_hz(i,j,k)
290 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
291 tl_hz_inv2(i,k)=-hz_inv2(i,k)*hz_inv2(i,k)* &
292 & (tl_hz(i,j,k)+tl_hz(i,j,k+1))
297 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
298 tl_hz_inv3(i,k)=-hz_inv3(i,k)*hz_inv3(i,k)* &
299 & (tl_hz(i,j,k-1)+tl_hz(i,j,k)+ &
311 bio1(i,k,ibio)=0.0_r8
312 bio2(i,k,ibio)=0.0_r8
313 tl_bio(i,k,ibio)=0.0_r8
341 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
342 tl_biotrc(ibio,nstp)=tl_t(i,j,k,nstp,ibio)
345 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
346 tl_biotrc(ibio,nnew)=tl_t(i,j,k,nnew,ibio)* &
348 & t(i,j,k,nnew,ibio)*hz(i,j,k)* &
365 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
367 & (0.5_r8-sign(0.5_r8, &
368 & biotrc(ibio,itime)-minval))* &
369 & tl_biotrc(ibio,itime)
370 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
373 biotrc1(ibio,itime)=biotrc(ibio,itime)
374 biotrc(ibio,itime)=max(minval,biotrc1(ibio,itime))
375 tl_biotrc(ibio,itime)=(0.5_r8- &
378 & biotrc1(ibio,itime)))* &
379 & tl_biotrc(ibio,itime)
381 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
382 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
383 tl_biotrc(itrcmax,itime)=tl_biotrc(itrcmax,itime)- &
389 biotrc1(ibio,itime)=biotrc(ibio,itime)
390 biotrc(ibio,itime)=max(minval,biotrc1(ibio,itime))
391 tl_biotrc(ibio,itime)=(0.5_r8- &
394 & biotrc1(ibio,itime)))* &
395 & tl_biotrc(ibio,itime)
404 bio_old(i,k,ibio)=biotrc(ibio,nstp)
405 tl_bio_old(i,k,ibio)=tl_biotrc(ibio,nstp)
406 bio(i,k,ibio)=biotrc(ibio,nstp)
407 tl_bio(i,k,ibio)=tl_biotrc(ibio,nstp)
410#if defined IRON_LIMIT && defined IRON_RELAX
416 IF (h(i,j).le.
fehmin(ng))
THEN
421 & fenudgcoef*tl_bio(i,k,
ifdis)
499 iter_loop:
DO iter=1,
bioiter(ng)
521 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
524 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
539 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
540 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
543 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
545 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
546 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
551 biotrc1(ibio,itime)=biotrc(ibio,itime)
552 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
561 bio_old(i,k,ibio)=biotrc(ibio,nstp)
562 bio(i,k,ibio)=biotrc(ibio,nstp)
565#if defined IRON_LIMIT && defined IRON_RELAX
571 IF (h(i,j).le.
fehmin(ng))
THEN
605 IF (parsur(i).gt.0.0_r8)
THEN
613 & (z_w(i,j,k)-z_w(i,j,k-1))
616 par=itop*(1.0_r8-expatt)/att
658 fnratio=bio(i,k,
ifphy)/max(minval,bio(i,k,
iphyt))
659 fcratio=fnratio*fen2fec
661 flimit=fcratio*fcratio/ &
665 fnlim=min(1.0_r8,flimit/(bio(i,k,
ino3_)*nlimit))
667 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
668 cff=bio(i,k,
iphyt)* &
670 & cff1*cff4*light(i,k)*fnlim*nlimit
672 & cff1*cff4*light(i,k)/ &
685 fac=cff*bio(i,k,
ino3_)*fnratio/ &
686 & max(minval,bio(i,k,
ifdis))
697 cff5=dtdays*(fcratioe-fcratio)/
t_fe(ng)
698 cff6=bio(i,k,
iphyt)*cff5*fec2fen
699 IF (cff6.ge.0.0_r8)
THEN
700 cff=cff6/max(minval,bio(i,k,
ifdis))
705 cff=-cff6/max(minval,bio(i,k,
ifphy))
714 IF (iteradj.ne.iter)
THEN
725 cff1=dtdays*
zoogr(ng)
729 cff=bio(i,k,
izoop)* &
730 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
734 & bio(i,k,
iphyt)*cff2*cff
752 cff1=1.0_r8/(1.0_r8+cff2+cff3)
757 & bio(i,k,
iphyt)*cff2
759 & bio(i,k,
iphyt)*cff3
773 cff1=1.0_r8/(1.0_r8+cff2+cff3)
778 & bio(i,k,
izoop)*cff2
780 & bio(i,k,
izoop)*cff3
786 cff2=dtdays*
detrr(ng)
787 cff1=1.0_r8/(1.0_r8+cff2)
792 & bio(i,k,
isdet)*cff2
814 qc(i,k)=bio(i,k,ibio)
820 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
825 dltr=hz(i,j,k)*fc(i,k)
826 dltl=hz(i,j,k)*fc(i,k-1)
827 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
834 IF ((dltr*dltl).le.0.0_r8)
THEN
837 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
839 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
852 cff=(dltr-dltl)*hz_inv3(i,k)
853 dltr=dltr-cff*hz(i,j,k+1)
854 dltl=dltl+cff*hz(i,j,k-1)
857 wr(i,k)=(2.0_r8*dltr-dltl)**2
858 wl(i,k)=(dltr-2.0_r8*dltl)**2
864 dltl=max(cff,wl(i,k ))
865 dltr=max(cff,wr(i,k+1))
866 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
872#if defined LINEAR_CONTINUATION
873 bl(i,
n(ng))=br(i,
n(ng)-1)
874 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
876 bl(i,
n(ng))=br(i,
n(ng)-1)
877 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
879 br(i,
n(ng))=qc(i,
n(ng))
880 bl(i,
n(ng))=qc(i,
n(ng))
881 br(i,
n(ng)-1)=qc(i,
n(ng))
883#if defined LINEAR_CONTINUATION
885 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
888 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
906 IF ((dltr*dltl).lt.0.0_r8)
THEN
909 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
911 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
933 cff=dtdays*abs(wbio(isink))
937 wl(i,k)=z_w(i,j,k-1)+cff
938 wr(i,k)=hz(i,j,k)*qc(i,k)
945 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
947 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
958 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
959 fc(i,k-1)=fc(i,k-1)+ &
962 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
964 & (br(i,ks)+bl(i,ks)- &
970 bio(i,k,ibio)=qc(i,k)+ &
971 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
985 IF (parsur(i).gt.0.0_r8)
THEN
993 & (z_w(i,j,k)-z_w(i,j,k-1))
995 & (z_w(i,j,k)-z_w(i,j,k-1))+ &
997 & (tl_z_w(i,j,k)-tl_z_w(i,j,k-1))
999 tl_expatt=-expatt*tl_att
1002 par=itop*(1.0_r8-expatt)/att
1003 tl_par=(-tl_att*par+tl_itop*(1.0_r8-expatt)- &
1004 & itop*tl_expatt)/att
1007 tl_light(i,k)=tl_par
1013 tl_par=tl_itop*expatt+itop*tl_expatt
1019 tl_light(i,k)=0.0_r8
1053 fac1=max(minval,bio1(i,k,
iphyt))
1054 tl_fac1=(0.5_r8-sign(0.5_r8,minval-bio1(i,k,
iphyt)))* &
1056 fnratio=bio1(i,k,
ifphy)/fac1
1057 tl_fnratio=(tl_bio(i,k,
ifphy)-tl_fac1*fnratio)/fac1
1058 fcratio=fnratio*fen2fec
1059 tl_fcratio=tl_fnratio*fen2fec
1064 flimit=fcratio*fcratio/ &
1066 tl_flimit=2.0_r8*(tl_fcratio*fcratio- &
1067 & tl_fcratio*fcratio*flimit)/ &
1070 tl_nlimit=-tl_bio(i,k,
ino3_)*nlimit*nlimit
1073 fac1=flimit/(bio1(i,k,
ino3_)*nlimit)
1074 tl_fac1=tl_flimit/(bio1(i,k,
ino3_)*nlimit)- &
1075 & (tl_bio(i,k,
ino3_)*nlimit+ &
1076 & bio1(i,k,
ino3_)*tl_nlimit)*fac1/ &
1077 & (bio1(i,k,
ino3_)*nlimit)
1078 fnlim=min(1.0_r8,fac1)
1079 tl_fnlim=(0.5_r8+sign(0.5_r8,1.0_r8-fac1))*tl_fac1
1081 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
1082 tl_cff4=-cff3*tl_light(i,k)*light(i,k)*cff4*cff4*cff4
1083 cff=bio1(i,k,
iphyt)* &
1085 & cff1*cff4*light(i,k)*fnlim*nlimit
1087 & cff1*cff4*light(i,k)/ &
1091 tl_cff=tl_bio(i,k,
iphyt)* &
1092 & cff1*cff4*light(i,k)*fnlim*nlimit+ &
1093 & bio1(i,k,
iphyt)*cff1*cff4* &
1094 & (tl_light(i,k)*fnlim*nlimit+ &
1095 & light(i,k)*tl_fnlim*nlimit+ &
1096 & light(i,k)*fnlim*tl_nlimit)+ &
1097 & bio1(i,k,
iphyt)*cff1*tl_cff4* &
1098 & light(i,k)*fnlim*nlimit
1100 tl_cff=(tl_bio(i,k,
iphyt)*cff1*cff4*light(i,k)+ &
1101 & bio1(i,k,
iphyt)*cff1* &
1102 & (tl_cff4*light(i,k)+cff4*tl_light(i,k))- &
1103 & tl_bio(i,k,
ino3_)*cff)/ &
1109 & tl_cff*bio(i,k,
ino3_))/ &
1115 & tl_bio(i,k,
ino3_)*cff+ &
1116 & bio(i,k,
ino3_)*tl_cff
1124 fac1=max(minval,bio1(i,k,
ifdis))
1125 tl_fac1=(0.5_r8-sign(0.5_r8,minval-bio1(i,k,
ifdis)))* &
1128 tl_fac2=-fac2*fac2*tl_fac1
1129 fac=cff*bio(i,k,
ino3_)*fnratio*fac2
1130 tl_fac=fnratio*fac2*(tl_cff*bio(i,k,
ino3_)+ &
1131 & cff*tl_bio(i,k,
ino3_))+ &
1132 & cff*bio(i,k,
ino3_)*(tl_fnratio*fac2+ &
1137 & tl_fac*bio2(i,k,
ifdis))/ &
1143 & tl_bio(i,k,
ifdis)*fac+ &
1144 & bio2(i,k,
ifdis)*tl_fac
1148 cff5=dtdays*(fcratioe-fcratio)/
t_fe(ng)
1149 tl_cff5=dtdays*(tl_fcratioe-tl_fcratio)/
t_fe(ng)
1150 cff6=bio(i,k,
iphyt)*cff5*fec2fen
1151 tl_cff6=(tl_bio(i,k,
iphyt)*cff5+ &
1152 & bio(i,k,
iphyt)*tl_cff5)*fec2fen
1153 IF (cff6.ge.0.0_r8)
THEN
1156 fac1=max(minval,bio2(i,k,
ifdis))
1157 tl_fac1=(0.5_r8-sign(0.5_r8,minval-bio2(i,k,
ifdis)))* &
1160 tl_cff=(tl_cff6-tl_fac1*cff)/fac1
1164 & tl_cff*bio(i,k,
ifdis))/ &
1170 & tl_bio(i,k,
ifdis)*cff+ &
1171 & bio(i,k,
ifdis)*tl_cff
1175 fac1=-max(minval,bio2(i,k,
ifphy))
1176 tl_fac1=-(0.5_r8-sign(0.5_r8,minval-bio2(i,k,
ifphy)))* &
1179 tl_cff=(tl_cff6-tl_fac1*cff)/fac1
1183 & tl_cff*bio(i,k,
ifphy))/ &
1189 & tl_bio(i,k,
ifphy)*cff+ &
1190 & bio(i,k,
ifphy)*tl_cff
1216 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
1219 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
1234 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
1235 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
1238 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
1240 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
1241 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
1246 biotrc1(ibio,itime)=biotrc(ibio,itime)
1247 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
1256 bio_old(i,k,ibio)=biotrc(ibio,nstp)
1257 bio(i,k,ibio)=biotrc(ibio,nstp)
1260#if defined IRON_LIMIT && defined IRON_RELAX
1266 IF (h(i,j).le.
fehmin(ng))
THEN
1283 parsur(i)=158.075_r8
1300 IF (parsur(i).gt.0.0_r8)
THEN
1308 & (z_w(i,j,k)-z_w(i,j,k-1))
1311 par=itop*(1.0_r8-expatt)/att
1353 fnratio=bio(i,k,
ifphy)/max(minval,bio(i,k,
iphyt))
1354 fcratio=fnratio*fen2fec
1356 flimit=fcratio*fcratio/ &
1360 fnlim=min(1.0_r8,flimit/(bio(i,k,
ino3_)*nlimit))
1362 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
1363 cff=bio(i,k,
iphyt)* &
1365 & cff1*cff4*light(i,k)*fnlim*nlimit
1367 & cff1*cff4*light(i,k)/ &
1372 & bio(i,k,
ino3_)*cff
1378 fac=cff*bio(i,k,
ino3_)*fnratio/ &
1379 & max(minval,bio(i,k,
ifdis))
1382 & bio(i,k,
ifdis)*fac
1386 cff5=dtdays*(fcratioe-fcratio)/
t_fe(ng)
1387 cff6=bio(i,k,
iphyt)*cff5*fec2fen
1388 IF (cff6.ge.0.0_r8)
THEN
1389 cff=cff6/max(minval,bio(i,k,
ifdis))
1392 & bio(i,k,
ifdis)*cff
1394 cff=-cff6/max(minval,bio(i,k,
ifphy))
1397 & bio(i,k,
ifphy)*cff
1412 cff1=dtdays*
zoogr(ng)
1416 cff=bio(i,k,
izoop)* &
1417 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
1423 & bio(i,k,
iphyt)*cff2*cff
1443 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1448 & bio(i,k,
iphyt)*cff2
1450 & bio(i,k,
iphyt)*cff3
1459 IF (iteradj.ne.iter)
THEN
1466 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1471 & bio(i,k,
izoop)*cff2
1473 & bio(i,k,
izoop)*cff3
1479 cff2=dtdays*
detrr(ng)
1480 cff1=1.0_r8/(1.0_r8+cff2)
1485 & bio(i,k,
isdet)*cff2
1507 qc(i,k)=bio(i,k,ibio)
1513 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1518 dltr=hz(i,j,k)*fc(i,k)
1519 dltl=hz(i,j,k)*fc(i,k-1)
1520 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1527 IF ((dltr*dltl).le.0.0_r8)
THEN
1530 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1532 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1545 cff=(dltr-dltl)*hz_inv3(i,k)
1546 dltr=dltr-cff*hz(i,j,k+1)
1547 dltl=dltl+cff*hz(i,j,k-1)
1548 br(i,k)=qc(i,k)+dltr
1549 bl(i,k)=qc(i,k)-dltl
1550 wr(i,k)=(2.0_r8*dltr-dltl)**2
1551 wl(i,k)=(dltr-2.0_r8*dltl)**2
1557 dltl=max(cff,wl(i,k ))
1558 dltr=max(cff,wr(i,k+1))
1559 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1565#if defined LINEAR_CONTINUATION
1566 bl(i,
n(ng))=br(i,
n(ng)-1)
1567 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1568#elif defined NEUMANN
1569 bl(i,
n(ng))=br(i,
n(ng)-1)
1570 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1572 br(i,
n(ng))=qc(i,
n(ng))
1573 bl(i,
n(ng))=qc(i,
n(ng))
1574 br(i,
n(ng)-1)=qc(i,
n(ng))
1576#if defined LINEAR_CONTINUATION
1578 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1579#elif defined NEUMANN
1581 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1595 dltr=br(i,k)-qc(i,k)
1596 dltl=qc(i,k)-bl(i,k)
1599 IF ((dltr*dltl).lt.0.0_r8)
THEN
1602 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1604 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1607 br(i,k)=qc(i,k)+dltr
1608 bl(i,k)=qc(i,k)-dltl
1626 cff=dtdays*abs(wbio(isink))
1630 wl(i,k)=z_w(i,j,k-1)+cff
1631 wr(i,k)=hz(i,j,k)*qc(i,k)
1638 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1640 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1651 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1652 fc(i,k-1)=fc(i,k-1)+ &
1655 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1657 & (br(i,ks)+bl(i,ks)- &
1658 & 2.0_r8*qc(i,ks))))
1663 bio(i,k,ibio)=qc(i,k)+ &
1664 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1682 cff1=dtdays*
zoogr(ng)
1686 cff=bio1(i,k,
izoop)* &
1687 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio1(i,k,
iphyt)))/ &
1689 tl_cff=(tl_bio(i,k,
izoop)* &
1690 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio1(i,k,
iphyt)))+ &
1693 & tl_bio(i,k,
iphyt)*cff)/ &
1698 & tl_cff*bio(i,k,
iphyt))/ &
1704 & cff2*(tl_bio(i,k,
iphyt)*cff+ &
1705 & bio(i,k,
iphyt)*tl_cff)
1711 & bio(i,k,
iphyt)*tl_cff)
1717 & bio(i,k,
iphyt)*tl_cff)
1723 & tl_cff*bio2(i,k,
ifphy))/ &
1729 & (tl_bio(i,k,
ifphy)*cff+ &
1740 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1750 & tl_bio(i,k,
iphyt)*cff2
1755 & tl_bio(i,k,
iphyt)*cff3
1765 & tl_bio(i,k,
ifphy)*(cff2+cff3)*
ferr(ng)
1775 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1785 & tl_bio(i,k,
izoop)*cff2
1790 & tl_bio(i,k,
izoop)*cff3
1796 cff2=dtdays*
detrr(ng)
1797 cff1=1.0_r8/(1.0_r8+cff2)
1807 & tl_bio(i,k,
isdet)*cff2
1831 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
1834 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
1849 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
1850 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
1853 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
1855 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
1856 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
1861 biotrc1(ibio,itime)=biotrc(ibio,itime)
1862 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
1871 bio_old(i,k,ibio)=biotrc(ibio,nstp)
1872 bio(i,k,ibio)=biotrc(ibio,nstp)
1875#if defined IRON_LIMIT && defined IRON_RELAX
1881 IF (h(i,j).le.
fehmin(ng))
THEN
1898 parsur(i)=158.075_r8
1915 IF (parsur(i).gt.0.0_r8)
THEN
1923 & (z_w(i,j,k)-z_w(i,j,k-1))
1926 par=itop*(1.0_r8-expatt)/att
1965 fnratio=bio(i,k,
ifphy)/max(minval,bio(i,k,
iphyt))
1966 fcratio=fnratio*fen2fec
1968 flimit=fcratio*fcratio/ &
1972 fnlim=min(1.0_r8,flimit/(bio(i,k,
ino3_)*nlimit))
1974 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
1975 cff=bio(i,k,
iphyt)* &
1977 & cff1*cff4*light(i,k)*fnlim*nlimit
1979 & cff1*cff4*light(i,k)/ &
1984 & bio(i,k,
ino3_)*cff
1990 fac=cff*bio(i,k,
ino3_)*fnratio/ &
1991 & max(minval,bio(i,k,
ifdis))
1994 & bio(i,k,
ifdis)*fac
1998 cff5=dtdays*(fcratioe-fcratio)/
t_fe(ng)
1999 cff6=bio(i,k,
iphyt)*cff5*fec2fen
2000 IF (cff6.ge.0.0_r8)
THEN
2001 cff=cff6/max(minval,bio(i,k,
ifdis))
2004 & bio(i,k,
ifdis)*cff
2006 cff=-cff6/max(minval,bio(i,k,
ifphy))
2009 & bio(i,k,
ifphy)*cff
2024 cff1=dtdays*
zoogr(ng)
2028 cff=bio(i,k,
izoop)* &
2029 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
2033 & bio(i,k,
iphyt)*cff2*cff
2051 cff1=1.0_r8/(1.0_r8+cff2+cff3)
2056 & bio(i,k,
iphyt)*cff2
2058 & bio(i,k,
iphyt)*cff3
2072 cff1=1.0_r8/(1.0_r8+cff2+cff3)
2077 & bio(i,k,
izoop)*cff2
2079 & bio(i,k,
izoop)*cff3
2085 cff2=dtdays*
detrr(ng)
2086 cff1=1.0_r8/(1.0_r8+cff2)
2091 & bio(i,k,
isdet)*cff2
2095 IF (iteradj.ne.iter)
THEN
2115 qc(i,k)=bio(i,k,ibio)
2121 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
2126 dltr=hz(i,j,k)*fc(i,k)
2127 dltl=hz(i,j,k)*fc(i,k-1)
2128 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
2135 IF ((dltr*dltl).le.0.0_r8)
THEN
2138 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2140 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2153 cff=(dltr-dltl)*hz_inv3(i,k)
2154 dltr=dltr-cff*hz(i,j,k+1)
2155 dltl=dltl+cff*hz(i,j,k-1)
2156 br(i,k)=qc(i,k)+dltr
2157 bl(i,k)=qc(i,k)-dltl
2158 wr(i,k)=(2.0_r8*dltr-dltl)**2
2159 wl(i,k)=(dltr-2.0_r8*dltl)**2
2165 dltl=max(cff,wl(i,k ))
2166 dltr=max(cff,wr(i,k+1))
2167 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
2173#if defined LINEAR_CONTINUATION
2174 bl(i,
n(ng))=br(i,
n(ng)-1)
2175 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
2176#elif defined NEUMANN
2177 bl(i,
n(ng))=br(i,
n(ng)-1)
2178 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
2180 br(i,
n(ng))=qc(i,
n(ng))
2181 bl(i,
n(ng))=qc(i,
n(ng))
2182 br(i,
n(ng)-1)=qc(i,
n(ng))
2184#if defined LINEAR_CONTINUATION
2186 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
2187#elif defined NEUMANN
2189 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
2203 dltr=br(i,k)-qc(i,k)
2204 dltl=qc(i,k)-bl(i,k)
2207 IF ((dltr*dltl).lt.0.0_r8)
THEN
2210 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2212 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2215 br(i,k)=qc(i,k)+dltr
2216 bl(i,k)=qc(i,k)-dltl
2234 cff=dtdays*abs(wbio(isink))
2238 wl(i,k)=z_w(i,j,k-1)+cff
2239 wr(i,k)=hz(i,j,k)*qc(i,k)
2246 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
2248 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
2259 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
2260 fc(i,k-1)=fc(i,k-1)+ &
2263 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2265 & (br(i,ks)+bl(i,ks)- &
2266 & 2.0_r8*qc(i,ks))))
2271 bio(i,k,ibio)=qc(i,k)+ &
2272 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2289 sink_loop:
DO isink=1,nsink
2299 qc(i,k)=bio(i,k,ibio)
2300 tl_qc(i,k)=tl_bio(i,k,ibio)
2306 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
2307 tl_fc(i,k)=(tl_qc(i,k+1)-tl_qc(i,k))*hz_inv2(i,k)+ &
2308 & (qc(i,k+1)-qc(i,k))*tl_hz_inv2(i,k)
2313 dltr=hz(i,j,k)*fc(i,k)
2314 tl_dltr=tl_hz(i,j,k)*fc(i,k)+hz(i,j,k)*tl_fc(i,k)
2315 dltl=hz(i,j,k)*fc(i,k-1)
2316 tl_dltl=tl_hz(i,j,k)*fc(i,k-1)+hz(i,j,k)*tl_fc(i,k-1)
2317 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
2318 tl_cff=tl_hz(i,j,k-1)+2.0_r8*tl_hz(i,j,k)+tl_hz(i,j,k+1)
2320 tl_cffr=tl_cff*fc(i,k)+cff*tl_fc(i,k)
2322 tl_cffl=tl_cff*fc(i,k-1)+cff*tl_fc(i,k-1)
2327 IF ((dltr*dltl).le.0.0_r8)
THEN
2332 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2335 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2349 cff=(dltr-dltl)*hz_inv3(i,k)
2350 tl_cff=(tl_dltr-tl_dltl)*hz_inv3(i,k)+ &
2351 & (dltr-dltl)*tl_hz_inv3(i,k)
2352 dltr=dltr-cff*hz(i,j,k+1)
2353 tl_dltr=tl_dltr-tl_cff*hz(i,j,k+1)-cff*tl_hz(i,j,k+1)
2354 dltl=dltl+cff*hz(i,j,k-1)
2355 tl_dltl=tl_dltl+tl_cff*hz(i,j,k-1)+cff*tl_hz(i,j,k-1)
2356 br(i,k)=qc(i,k)+dltr
2357 tl_br(i,k)=tl_qc(i,k)+tl_dltr
2358 bl(i,k)=qc(i,k)-dltl
2359 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
2360 wr(i,k)=(2.0_r8*dltr-dltl)**2
2361 tl_wr(i,k)=2.0_r8*(2.0_r8*dltr-dltl)* &
2362 & (2.0_r8*tl_dltr-tl_dltl)
2363 wl(i,k)=(dltr-2.0_r8*dltl)**2
2364 tl_wl(i,k)=2.0_r8*(dltr-2.0_r8*dltl)* &
2365 & (tl_dltr-2.0_r8*tl_dltl)
2371 dltl=max(cff,wl(i,k ))
2372 tl_dltl=(0.5_r8-sign(0.5_r8,cff-wl(i,k )))* &
2374 dltr=max(cff,wr(i,k+1))
2375 tl_dltr=(0.5_r8-sign(0.5_r8,cff-wr(i,k+1)))* &
2378 bl1(i,k+1)=bl(i,k+1)
2379 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
2380 tl_br(i,k)=(tl_dltr*br1(i,k )+dltr*tl_br(i,k )+ &
2381 & tl_dltl*bl1(i,k+1)+dltl*tl_bl(i,k+1))/ &
2383 & (tl_dltr+tl_dltl)*br(i,k)/(dltr+dltl)
2385 tl_bl(i,k+1)=tl_br(i,k)
2390 tl_fc(i,
n(ng))=0.0_r8
2391#if defined LINEAR_CONTINUATION
2392 bl(i,
n(ng))=br(i,
n(ng)-1)
2393 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
2394 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
2395 tl_br(i,
n(ng))=2.0_r8*tl_qc(i,
n(ng))-tl_bl(i,
n(ng))
2396#elif defined NEUMANN
2397 bl(i,
n(ng))=br(i,
n(ng)-1)
2398 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
2399 br(i,
n(ng))=1.5_r8*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
2400 tl_br(i,
n(ng))=1.5_r8*tl_qc(i,
n(ng))-0.5_r8*tl_bl(i,
n(ng))
2402 br(i,
n(ng))=qc(i,
n(ng))
2403 bl(i,
n(ng))=qc(i,
n(ng))
2404 br(i,
n(ng)-1)=qc(i,
n(ng))
2405 tl_br(i,
n(ng))=tl_qc(i,
n(ng))
2406 tl_bl(i,
n(ng))=tl_qc(i,
n(ng))
2407 tl_br(i,
n(ng)-1)=tl_qc(i,
n(ng))
2409#if defined LINEAR_CONTINUATION
2411 tl_br(i,1)=tl_bl(i,2)
2412 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
2413 tl_bl(i,1)=2.0_r8*tl_qc(i,1)-tl_br(i,1)
2414#elif defined NEUMANN
2416 tl_br(i,1)=tl_bl(i,2)
2417 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
2418 tl_bl(i,1)=1.5_r8*tl_qc(i,1)-0.5_r8*tl_br(i,1)
2423 tl_bl(i,2)=tl_qc(i,1)
2424 tl_br(i,1)=tl_qc(i,1)
2425 tl_bl(i,1)=tl_qc(i,1)
2435 dltr=br(i,k)-qc(i,k)
2436 tl_dltr=tl_br(i,k)-tl_qc(i,k)
2437 dltl=qc(i,k)-bl(i,k)
2438 tl_dltl=tl_qc(i,k)-tl_bl(i,k)
2440 tl_cffr=2.0_r8*tl_dltr
2442 tl_cffl=2.0_r8*tl_dltl
2443 IF ((dltr*dltl).lt.0.0_r8)
THEN
2448 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2451 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2455 br(i,k)=qc(i,k)+dltr
2456 tl_br(i,k)=tl_qc(i,k)+tl_dltr
2457 bl(i,k)=qc(i,k)-dltl
2458 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
2476 cff=dtdays*abs(wbio(isink))
2477 tl_cff=dtdays*sign(1.0_r8,wbio(isink))*tl_wbio(isink)
2482 wl(i,k)=z_w(i,j,k-1)+cff
2483 tl_wl(i,k)=tl_z_w(i,j,k-1)+tl_cff
2484 wr(i,k)=hz(i,j,k)*qc(i,k)
2485 tl_wr(i,k)=tl_hz(i,j,k)*qc(i,k)+hz(i,j,k)*tl_qc(i,k)
2492 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
2494 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
2495 tl_fc(i,k-1)=tl_fc(i,k-1)+tl_wr(i,ks)
2506 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
2507 tl_cu=(0.5_r8+sign(0.5_r8, &
2508 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
2509 & hz_inv(i,ks))))* &
2510 & ((tl_wl(i,k)-tl_z_w(i,j,ks-1))*hz_inv(i,ks)+ &
2511 & (wl(i,k)-z_w(i,j,ks-1))*tl_hz_inv(i,ks))
2512 fc(i,k-1)=fc(i,k-1)+ &
2515 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2517 & (br(i,ks)+bl(i,ks)- &
2518 & 2.0_r8*qc(i,ks))))
2519 tl_fc(i,k-1)=tl_fc(i,k-1)+ &
2520 & (tl_hz(i,j,ks)*cu+hz(i,j,ks)*tl_cu)* &
2522 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2524 & (br(i,ks)+bl(i,ks)- &
2525 & 2.0_r8*qc(i,ks))))+ &
2528 & tl_cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2530 & (br(i,ks)+bl(i,ks)- &
2531 & 2.0_r8*qc(i,ks)))+ &
2532 & cu*(0.5_r8*(tl_br(i,ks)-tl_bl(i,ks))+ &
2534 & (br(i,ks)+bl(i,ks)-2.0_r8*qc(i,ks))- &
2536 & (tl_br(i,ks)+tl_bl(i,ks)- &
2537 & 2.0_r8*tl_qc(i,ks))))
2542 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2543 tl_bio(i,k,ibio)=tl_qc(i,k)+ &
2544 & (tl_fc(i,k)-tl_fc(i,k-1))*hz_inv(i,k)+ &
2545 & (fc(i,k)-fc(i,k-1))*tl_hz_inv(i,k)
2571 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
2572 tl_cff=tl_bio(i,k,ibio)-tl_bio_old(i,k,ibio)
2575 tl_t(i,j,k,nnew,ibio)=tl_t(i,j,k,nnew,ibio)+ &
2576 & tl_cff*hz(i,j,k)+cff*tl_hz(i,j,k)