95 & LBi, UBi, LBj, UBj, UBk, UBt, &
96 & IminS, ImaxS, JminS, JmaxS, &
115 integer,
intent(in) :: ng, tile
116 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
117 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
118 integer,
intent(in) :: nstp, nnew
122 real(r8),
intent(in) :: rmask(LBi:,LBj:)
124 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
125 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
126 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
127 real(r8),
intent(in) :: srflx(LBi:,LBj:)
128 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
130 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
131 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
132 real(r8),
intent(in) :: tl_z_w(LBi:,LBj:,0:)
133 real(r8),
intent(in) :: tl_srflx(LBi:,LBj:)
134 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
137 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
139 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
140 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
141 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
142 real(r8),
intent(in) :: srflx(LBi:UBi,LBj:UBj)
143 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
145 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,UBk)
146 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,UBk)
147 real(r8),
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:UBk)
148 real(r8),
intent(in) :: tl_srflx(LBi:UBi,LBj:UBj)
149 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,UBk,3,UBt)
154 integer,
parameter :: Nsink = 2
156 integer :: Iter, i, ibio, isink, itime, itrc, iTrcMax, j, k, ks
159 integer,
dimension(Nsink) :: idsink
161 real(r8),
parameter :: MinVal = 1.0e-6_r8
163 real(r8) :: Att, ExpAtt, Itop, PAR
164 real(r8) :: tl_Att, tl_ExpAtt, tl_Itop, tl_PAR
165 real(r8) :: cff, cff1, cff2, cff3, cff4, dtdays
166 real(r8) :: tl_cff, tl_cff1, tl_cff4
167 real(r8) :: cffL, cffR, cu, dltL, dltR
168 real(r8) :: tl_cffL, tl_cffR, tl_cu, tl_dltL, tl_dltR
170 real(r8),
dimension(Nsink) :: Wbio
171 real(r8),
dimension(Nsink) :: tl_Wbio
173 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
175 real(r8),
dimension(IminS:ImaxS) :: PARsur
176 real(r8),
dimension(IminS:ImaxS) :: tl_PARsur
178 real(r8),
dimension(NT(ng),2) :: BioTrc
179 real(r8),
dimension(NT(ng),2) :: BioTrc1
180 real(r8),
dimension(NT(ng),2) :: tl_BioTrc
181 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
182 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio1
183 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
185 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: tl_Bio
186 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: tl_Bio_old
188 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
189 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_FC
191 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
192 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
193 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
194 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Light
195 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WL
196 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WR
197 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL
198 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL1
199 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR
200 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR1
201 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qc
203 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv
204 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv2
205 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv3
206 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Light
207 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_WL
208 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_WR
209 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_bL
210 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_bR
211 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_qc
213#include "set_bounds.h"
240 j_loop :
DO j=jstr,jend
246 hz_inv(i,k)=1.0_r8/hz(i,j,k)
247 tl_hz_inv(i,k)=-hz_inv(i,k)*hz_inv(i,k)*tl_hz(i,j,k)
252 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
253 tl_hz_inv2(i,k)=-hz_inv2(i,k)*hz_inv2(i,k)* &
254 & (tl_hz(i,j,k)+tl_hz(i,j,k+1))
259 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
260 tl_hz_inv3(i,k)=-hz_inv3(i,k)*hz_inv3(i,k)* &
261 & (tl_hz(i,j,k-1)+tl_hz(i,j,k)+ &
273 bio1(i,k,ibio)=0.0_r8
274 tl_bio(i,k,ibio)=0.0_r8
302 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
303 tl_biotrc(ibio,nstp)=tl_t(i,j,k,nstp,ibio)
306 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
307 tl_biotrc(ibio,nnew)=tl_t(i,j,k,nnew,ibio)* &
309 & t(i,j,k,nnew,ibio)*hz(i,j,k)* &
322 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
324 & (0.5_r8-sign(0.5_r8, &
325 & biotrc(ibio,itime)-minval))* &
326 & tl_biotrc(ibio,itime)
327 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
330 biotrc1(ibio,itime)=biotrc(ibio,itime)
331 biotrc(ibio,itime)=max(minval,biotrc1(ibio,itime))
332 tl_biotrc(ibio,itime)=(0.5_r8- &
335 & biotrc1(ibio,itime)))* &
336 & tl_biotrc(ibio,itime)
338 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
339 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
340 tl_biotrc(itrcmax,itime)=tl_biotrc(itrcmax,itime)- &
349 bio_old(i,k,ibio)=biotrc(ibio,nstp)
350 tl_bio_old(i,k,ibio)=tl_biotrc(ibio,nstp)
351 bio(i,k,ibio)=biotrc(ibio,nstp)
352 tl_bio(i,k,ibio)=tl_biotrc(ibio,nstp)
429 iter_loop:
DO iter=1,
bioiter(ng)
451 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
454 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
465 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
466 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
469 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
471 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
472 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
480 bio_old(i,k,ibio)=biotrc(ibio,nnew)
481 bio(i,k,ibio)=biotrc(ibio,nnew)
512 IF (parsur(i).gt.0.0_r8)
THEN
520 & (z_w(i,j,k)-z_w(i,j,k-1))
523 par=itop*(1.0_r8-expatt)/att
549 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
550 cff=bio(i,k,
iphyt)* &
551 & cff1*cff4*light(i,k)/ &
561 IF (iteradj.ne.iter)
THEN
568 cff1=dtdays*
zoogr(ng)
572 cff=bio(i,k,
izoop)* &
573 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
577 & bio(i,k,
iphyt)*cff2*cff
590 cff1=1.0_r8/(1.0_r8+cff2+cff3)
595 & bio(i,k,
iphyt)*cff2
597 & bio(i,k,
iphyt)*cff3
606 cff1=1.0_r8/(1.0_r8+cff2+cff3)
611 & bio(i,k,
izoop)*cff2
613 & bio(i,k,
izoop)*cff3
619 cff2=dtdays*
detrr(ng)
620 cff1=1.0_r8/(1.0_r8+cff2)
625 & bio(i,k,
isdet)*cff2
647 qc(i,k)=bio(i,k,ibio)
653 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
658 dltr=hz(i,j,k)*fc(i,k)
659 dltl=hz(i,j,k)*fc(i,k-1)
660 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
667 IF ((dltr*dltl).le.0.0_r8)
THEN
670 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
672 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
685 cff=(dltr-dltl)*hz_inv3(i,k)
686 dltr=dltr-cff*hz(i,j,k+1)
687 dltl=dltl+cff*hz(i,j,k-1)
690 wr(i,k)=(2.0_r8*dltr-dltl)**2
691 wl(i,k)=(dltr-2.0_r8*dltl)**2
697 dltl=max(cff,wl(i,k ))
698 dltr=max(cff,wr(i,k+1))
699 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
705#if defined LINEAR_CONTINUATION
706 bl(i,
n(ng))=br(i,
n(ng)-1)
707 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
709 bl(i,
n(ng))=br(i,
n(ng)-1)
710 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
712 br(i,
n(ng))=qc(i,
n(ng))
713 bl(i,
n(ng))=qc(i,
n(ng))
714 br(i,
n(ng)-1)=qc(i,
n(ng))
716#if defined LINEAR_CONTINUATION
718 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
721 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
739 IF ((dltr*dltl).lt.0.0_r8)
THEN
742 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
744 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
766 cff=dtdays*abs(wbio(isink))
770 wl(i,k)=z_w(i,j,k-1)+cff
771 wr(i,k)=hz(i,j,k)*qc(i,k)
778 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
780 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
791 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
792 fc(i,k-1)=fc(i,k-1)+ &
795 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
797 & (br(i,ks)+bl(i,ks)- &
803 bio(i,k,ibio)=qc(i,k)+ &
804 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
818 IF (parsur(i).gt.0.0_r8)
THEN
826 & (z_w(i,j,k)-z_w(i,j,k-1))
828 & (z_w(i,j,k)-z_w(i,j,k-1))+ &
830 & (tl_z_w(i,j,k)-tl_z_w(i,j,k-1))
832 tl_expatt=-expatt*tl_att
835 par=itop*(1.0_r8-expatt)/att
836 tl_par=(-tl_att*par+tl_itop*(1.0_r8-expatt)- &
837 & itop*tl_expatt)/att
846 tl_par=tl_itop*expatt+itop*tl_expatt
868 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
869 tl_cff4=-cff3*tl_light(i,k)*light(i,k)*cff4*cff4*cff4
870 cff=bio1(i,k,
iphyt)* &
871 & cff1*cff4*light(i,k)/ &
873 tl_cff=(tl_bio(i,k,
iphyt)*cff1*cff4*light(i,k)+ &
874 & bio1(i,k,
iphyt)*cff1* &
875 & (tl_cff4*light(i,k)+cff4*tl_light(i,k))- &
876 & tl_bio(i,k,
ino3_)*cff)/ &
881 & tl_cff*bio(i,k,
ino3_))/ &
887 & tl_bio(i,k,
ino3_)*cff+ &
888 & bio(i,k,
ino3_)*tl_cff
912 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
915 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
926 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
927 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
930 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
932 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
933 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
941 bio_old(i,k,ibio)=biotrc(ibio,nnew)
942 bio(i,k,ibio)=biotrc(ibio,nnew)
973 IF (parsur(i).gt.0.0_r8)
THEN
981 & (z_w(i,j,k)-z_w(i,j,k-1))
984 par=itop*(1.0_r8-expatt)/att
1010 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
1011 cff=bio(i,k,
iphyt)* &
1012 & cff1*cff4*light(i,k)/ &
1016 & bio(i,k,
ino3_)*cff
1025 cff1=dtdays*
zoogr(ng)
1029 cff=bio(i,k,
izoop)* &
1030 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
1036 & bio(i,k,
iphyt)*cff2*cff
1044 IF (iteradj.ne.iter)
THEN
1051 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1056 & bio(i,k,
iphyt)*cff2
1058 & bio(i,k,
iphyt)*cff3
1067 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1072 & bio(i,k,
izoop)*cff2
1074 & bio(i,k,
izoop)*cff3
1080 cff2=dtdays*
detrr(ng)
1081 cff1=1.0_r8/(1.0_r8+cff2)
1086 & bio(i,k,
isdet)*cff2
1108 qc(i,k)=bio(i,k,ibio)
1114 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1119 dltr=hz(i,j,k)*fc(i,k)
1120 dltl=hz(i,j,k)*fc(i,k-1)
1121 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1128 IF ((dltr*dltl).le.0.0_r8)
THEN
1131 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1133 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1146 cff=(dltr-dltl)*hz_inv3(i,k)
1147 dltr=dltr-cff*hz(i,j,k+1)
1148 dltl=dltl+cff*hz(i,j,k-1)
1149 br(i,k)=qc(i,k)+dltr
1150 bl(i,k)=qc(i,k)-dltl
1151 wr(i,k)=(2.0_r8*dltr-dltl)**2
1152 wl(i,k)=(dltr-2.0_r8*dltl)**2
1158 dltl=max(cff,wl(i,k ))
1159 dltr=max(cff,wr(i,k+1))
1160 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1166#if defined LINEAR_CONTINUATION
1167 bl(i,
n(ng))=br(i,
n(ng)-1)
1168 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1169#elif defined NEUMANN
1170 bl(i,
n(ng))=br(i,
n(ng)-1)
1171 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1173 br(i,
n(ng))=qc(i,
n(ng))
1174 bl(i,
n(ng))=qc(i,
n(ng))
1175 br(i,
n(ng)-1)=qc(i,
n(ng))
1177#if defined LINEAR_CONTINUATION
1179 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1180#elif defined NEUMANN
1182 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1196 dltr=br(i,k)-qc(i,k)
1197 dltl=qc(i,k)-bl(i,k)
1200 IF ((dltr*dltl).lt.0.0_r8)
THEN
1203 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1205 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1208 br(i,k)=qc(i,k)+dltr
1209 bl(i,k)=qc(i,k)-dltl
1227 cff=dtdays*abs(wbio(isink))
1231 wl(i,k)=z_w(i,j,k-1)+cff
1232 wr(i,k)=hz(i,j,k)*qc(i,k)
1239 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1241 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1252 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1253 fc(i,k-1)=fc(i,k-1)+ &
1256 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1258 & (br(i,ks)+bl(i,ks)- &
1259 & 2.0_r8*qc(i,ks))))
1264 bio(i,k,ibio)=qc(i,k)+ &
1265 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1279 cff1=dtdays*
zoogr(ng)
1283 cff=bio1(i,k,
izoop)* &
1284 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio1(i,k,
iphyt)))/ &
1286 tl_cff=(tl_bio(i,k,
izoop)* &
1287 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio1(i,k,
iphyt)))+ &
1290 & tl_bio(i,k,
iphyt)*cff)/ &
1295 & tl_cff*bio(i,k,
iphyt))/ &
1301 & cff2*(tl_bio(i,k,
iphyt)*cff+ &
1302 & bio(i,k,
iphyt)*tl_cff)
1308 & bio(i,k,
iphyt)*tl_cff)
1314 & bio(i,k,
iphyt)*tl_cff)
1323 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1333 & tl_bio(i,k,
iphyt)*cff2
1338 & tl_bio(i,k,
iphyt)*cff3
1347 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1357 & tl_bio(i,k,
izoop)*cff2
1362 & tl_bio(i,k,
izoop)*cff3
1368 cff2=dtdays*
detrr(ng)
1369 cff1=1.0_r8/(1.0_r8+cff2)
1379 & tl_bio(i,k,
isdet)*cff2
1403 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
1406 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
1417 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
1418 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
1421 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
1423 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
1424 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
1432 bio_old(i,k,ibio)=biotrc(ibio,nstp)
1433 bio(i,k,ibio)=biotrc(ibio,nstp)
1447 parsur(i)=158.075_r8
1464 IF (parsur(i).gt.0.0_r8)
THEN
1472 & (z_w(i,j,k)-z_w(i,j,k-1))
1475 par=itop*(1.0_r8-expatt)/att
1501 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
1502 cff=bio(i,k,
iphyt)* &
1503 & cff1*cff4*light(i,k)/ &
1507 & bio(i,k,
ino3_)*cff
1516 cff1=dtdays*
zoogr(ng)
1520 cff=bio(i,k,
izoop)* &
1521 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
1525 & bio(i,k,
iphyt)*cff2*cff
1538 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1543 & bio(i,k,
iphyt)*cff2
1545 & bio(i,k,
iphyt)*cff3
1554 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1559 & bio(i,k,
izoop)*cff2
1561 & bio(i,k,
izoop)*cff3
1567 cff2=dtdays*
detrr(ng)
1568 cff1=1.0_r8/(1.0_r8+cff2)
1573 & bio(i,k,
isdet)*cff2
1577 IF (iteradj.ne.iter)
THEN
1597 qc(i,k)=bio(i,k,ibio)
1603 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1608 dltr=hz(i,j,k)*fc(i,k)
1609 dltl=hz(i,j,k)*fc(i,k-1)
1610 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1617 IF ((dltr*dltl).le.0.0_r8)
THEN
1620 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1622 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1635 cff=(dltr-dltl)*hz_inv3(i,k)
1636 dltr=dltr-cff*hz(i,j,k+1)
1637 dltl=dltl+cff*hz(i,j,k-1)
1638 br(i,k)=qc(i,k)+dltr
1639 bl(i,k)=qc(i,k)-dltl
1640 wr(i,k)=(2.0_r8*dltr-dltl)**2
1641 wl(i,k)=(dltr-2.0_r8*dltl)**2
1647 dltl=max(cff,wl(i,k ))
1648 dltr=max(cff,wr(i,k+1))
1649 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1655#if defined LINEAR_CONTINUATION
1656 bl(i,
n(ng))=br(i,
n(ng)-1)
1657 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1658#elif defined NEUMANN
1659 bl(i,
n(ng))=br(i,
n(ng)-1)
1660 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1662 br(i,
n(ng))=qc(i,
n(ng))
1663 bl(i,
n(ng))=qc(i,
n(ng))
1664 br(i,
n(ng)-1)=qc(i,
n(ng))
1666#if defined LINEAR_CONTINUATION
1668 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1669#elif defined NEUMANN
1671 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1685 dltr=br(i,k)-qc(i,k)
1686 dltl=qc(i,k)-bl(i,k)
1689 IF ((dltr*dltl).lt.0.0_r8)
THEN
1692 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1694 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1697 br(i,k)=qc(i,k)+dltr
1698 bl(i,k)=qc(i,k)-dltl
1716 cff=dtdays*abs(wbio(isink))
1720 wl(i,k)=z_w(i,j,k-1)+cff
1721 wr(i,k)=hz(i,j,k)*qc(i,k)
1728 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1730 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1741 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1742 fc(i,k-1)=fc(i,k-1)+ &
1745 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1747 & (br(i,ks)+bl(i,ks)- &
1748 & 2.0_r8*qc(i,ks))))
1753 bio(i,k,ibio)=qc(i,k)+ &
1754 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1771 sink_loop:
DO isink=1,nsink
1781 qc(i,k)=bio(i,k,ibio)
1782 tl_qc(i,k)=tl_bio(i,k,ibio)
1788 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1789 tl_fc(i,k)=(tl_qc(i,k+1)-tl_qc(i,k))*hz_inv2(i,k)+ &
1790 & (qc(i,k+1)-qc(i,k))*tl_hz_inv2(i,k)
1795 dltr=hz(i,j,k)*fc(i,k)
1796 tl_dltr=tl_hz(i,j,k)*fc(i,k)+hz(i,j,k)*tl_fc(i,k)
1797 dltl=hz(i,j,k)*fc(i,k-1)
1798 tl_dltl=tl_hz(i,j,k)*fc(i,k-1)+hz(i,j,k)*tl_fc(i,k-1)
1799 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1800 tl_cff=tl_hz(i,j,k-1)+2.0_r8*tl_hz(i,j,k)+tl_hz(i,j,k+1)
1802 tl_cffr=tl_cff*fc(i,k)+cff*tl_fc(i,k)
1804 tl_cffl=tl_cff*fc(i,k-1)+cff*tl_fc(i,k-1)
1809 IF ((dltr*dltl).le.0.0_r8)
THEN
1814 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1817 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1831 cff=(dltr-dltl)*hz_inv3(i,k)
1832 tl_cff=(tl_dltr-tl_dltl)*hz_inv3(i,k)+ &
1833 & (dltr-dltl)*tl_hz_inv3(i,k)
1834 dltr=dltr-cff*hz(i,j,k+1)
1835 tl_dltr=tl_dltr-tl_cff*hz(i,j,k+1)-cff*tl_hz(i,j,k+1)
1836 dltl=dltl+cff*hz(i,j,k-1)
1837 tl_dltl=tl_dltl+tl_cff*hz(i,j,k-1)+cff*tl_hz(i,j,k-1)
1838 br(i,k)=qc(i,k)+dltr
1839 tl_br(i,k)=tl_qc(i,k)+tl_dltr
1840 bl(i,k)=qc(i,k)-dltl
1841 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
1842 wr(i,k)=(2.0_r8*dltr-dltl)**2
1843 tl_wr(i,k)=2.0_r8*(2.0_r8*dltr-dltl)* &
1844 & (2.0_r8*tl_dltr-tl_dltl)
1845 wl(i,k)=(dltr-2.0_r8*dltl)**2
1846 tl_wl(i,k)=2.0_r8*(dltr-2.0_r8*dltl)* &
1847 & (tl_dltr-2.0_r8*tl_dltl)
1853 dltl=max(cff,wl(i,k ))
1854 tl_dltl=(0.5_r8-sign(0.5_r8,cff-wl(i,k )))* &
1856 dltr=max(cff,wr(i,k+1))
1857 tl_dltr=(0.5_r8-sign(0.5_r8,cff-wr(i,k+1)))* &
1860 bl1(i,k+1)=bl(i,k+1)
1861 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1862 tl_br(i,k)=(tl_dltr*br1(i,k )+dltr*tl_br(i,k )+ &
1863 & tl_dltl*bl1(i,k+1)+dltl*tl_bl(i,k+1))/ &
1865 & (tl_dltr+tl_dltl)*br(i,k)/(dltr+dltl)
1867 tl_bl(i,k+1)=tl_br(i,k)
1872 tl_fc(i,
n(ng))=0.0_r8
1873#if defined LINEAR_CONTINUATION
1874 bl(i,
n(ng))=br(i,
n(ng)-1)
1875 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
1876 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1877 tl_br(i,
n(ng))=2.0_r8*tl_qc(i,
n(ng))-tl_bl(i,
n(ng))
1878#elif defined NEUMANN
1879 bl(i,
n(ng))=br(i,
n(ng)-1)
1880 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
1881 br(i,
n(ng))=1.5_r8*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1882 tl_br(i,
n(ng))=1.5_r8*tl_qc(i,
n(ng))-0.5_r8*tl_bl(i,
n(ng))
1884 br(i,
n(ng))=qc(i,
n(ng))
1885 bl(i,
n(ng))=qc(i,
n(ng))
1886 br(i,
n(ng)-1)=qc(i,
n(ng))
1887 tl_br(i,
n(ng))=tl_qc(i,
n(ng))
1888 tl_bl(i,
n(ng))=tl_qc(i,
n(ng))
1889 tl_br(i,
n(ng)-1)=tl_qc(i,
n(ng))
1891#if defined LINEAR_CONTINUATION
1893 tl_br(i,1)=tl_bl(i,2)
1894 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1895 tl_bl(i,1)=2.0_r8*tl_qc(i,1)-tl_br(i,1)
1896#elif defined NEUMANN
1898 tl_br(i,1)=tl_bl(i,2)
1899 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1900 tl_bl(i,1)=1.5_r8*tl_qc(i,1)-0.5_r8*tl_br(i,1)
1905 tl_bl(i,2)=tl_qc(i,1)
1906 tl_br(i,1)=tl_qc(i,1)
1907 tl_bl(i,1)=tl_qc(i,1)
1917 dltr=br(i,k)-qc(i,k)
1918 tl_dltr=tl_br(i,k)-tl_qc(i,k)
1919 dltl=qc(i,k)-bl(i,k)
1920 tl_dltl=tl_qc(i,k)-tl_bl(i,k)
1922 tl_cffr=2.0_r8*tl_dltr
1924 tl_cffl=2.0_r8*tl_dltl
1925 IF ((dltr*dltl).lt.0.0_r8)
THEN
1930 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1933 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1937 br(i,k)=qc(i,k)+dltr
1938 tl_br(i,k)=tl_qc(i,k)+tl_dltr
1939 bl(i,k)=qc(i,k)-dltl
1940 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
1958 cff=dtdays*abs(wbio(isink))
1959 tl_cff=dtdays*sign(1.0_r8,wbio(isink))*tl_wbio(isink)
1964 wl(i,k)=z_w(i,j,k-1)+cff
1965 tl_wl(i,k)=tl_z_w(i,j,k-1)+tl_cff
1966 wr(i,k)=hz(i,j,k)*qc(i,k)
1967 tl_wr(i,k)=tl_hz(i,j,k)*qc(i,k)+hz(i,j,k)*tl_qc(i,k)
1974 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1976 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1977 tl_fc(i,k-1)=tl_fc(i,k-1)+tl_wr(i,ks)
1988 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1989 tl_cu=(0.5_r8+sign(0.5_r8, &
1990 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
1991 & hz_inv(i,ks))))* &
1992 & ((tl_wl(i,k)-tl_z_w(i,j,ks-1))*hz_inv(i,ks)+ &
1993 & (wl(i,k)-z_w(i,j,ks-1))*tl_hz_inv(i,ks))
1994 fc(i,k-1)=fc(i,k-1)+ &
1997 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1999 & (br(i,ks)+bl(i,ks)- &
2000 & 2.0_r8*qc(i,ks))))
2001 tl_fc(i,k-1)=tl_fc(i,k-1)+ &
2002 & (tl_hz(i,j,ks)*cu+hz(i,j,ks)*tl_cu)* &
2004 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2006 & (br(i,ks)+bl(i,ks)- &
2007 & 2.0_r8*qc(i,ks))))+ &
2010 & tl_cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2012 & (br(i,ks)+bl(i,ks)- &
2013 & 2.0_r8*qc(i,ks)))+ &
2014 & cu*(0.5_r8*(tl_br(i,ks)-tl_bl(i,ks))+ &
2016 & (br(i,ks)+bl(i,ks)-2.0_r8*qc(i,ks))- &
2018 & (tl_br(i,ks)+tl_bl(i,ks)- &
2019 & 2.0_r8*tl_qc(i,ks))))
2024 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2025 tl_bio(i,k,ibio)=tl_qc(i,k)+ &
2026 & (tl_fc(i,k)-tl_fc(i,k-1))*hz_inv(i,k)+ &
2027 & (fc(i,k)-fc(i,k-1))*tl_hz_inv(i,k)
2053 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
2054 tl_cff=tl_bio(i,k,ibio)-tl_bio_old(i,k,ibio)
2057 tl_t(i,j,k,nnew,ibio)=tl_t(i,j,k,nnew,ibio)+ &
2058 & tl_cff*hz(i,j,k)+cff*tl_hz(i,j,k)