90 & LBi, UBi, LBj, UBj, UBk, UBt, &
91 & IminS, ImaxS, JminS, JmaxS, &
109 integer,
intent(in) :: ng, tile
110 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
111 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
112 integer,
intent(in) :: nstp, nnew
116 real(r8),
intent(in) :: rmask(LBi:,LBj:)
118 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
119 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
120 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
121 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
123 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
124 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
125 real(r8),
intent(in) :: tl_z_w(LBi:,LBj:,0:)
126 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
129 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
131 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
132 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
133 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
134 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
136 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,UBk)
137 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,UBk)
138 real(r8),
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:UBk)
139 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,UBk,3,UBt)
144 integer,
parameter :: Nsink = 1
146 integer :: Iter, i, ibio, isink, itrc, itrmx, j, k, ks
149 integer,
dimension(Nsink) :: idsink
151 real(r8),
parameter :: eps = 1.0e-16_r8
153 real(r8) :: cff, cff1, cff2, cff3, dtdays
154 real(r8) :: tl_cff, tl_cff1
155 real(r8) :: cffL, cffR, cu, dltL, dltR
156 real(r8) :: tl_cffL, tl_cffR, tl_cu, tl_dltL, tl_dltR
158 real(r8),
dimension(Nsink) :: Wbio
159 real(r8),
dimension(Nsink) :: tl_Wbio
161 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
163 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
164 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio1
165 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
167 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: tl_Bio
168 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: tl_Bio_old
170 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
171 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_FC
173 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
174 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
175 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
176 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WL
177 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WR
178 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL
179 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL1
180 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR
181 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR1
182 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qc
184 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv
185 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv2
186 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_Hz_inv3
187 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_WL
188 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_WR
189 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_bL
190 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_bR
191 real(r8),
dimension(IminS:ImaxS,N(ng)) :: tl_qc
193#include "set_bounds.h"
217 j_loop :
DO j=jstr,jend
223 hz_inv(i,k)=1.0_r8/hz(i,j,k)
224 tl_hz_inv(i,k)=-hz_inv(i,k)*hz_inv(i,k)*tl_hz(i,j,k)
229 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
230 tl_hz_inv2(i,k)=-hz_inv2(i,k)*hz_inv2(i,k)* &
231 & (tl_hz(i,j,k)+tl_hz(i,j,k+1))
236 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
237 tl_hz_inv3(i,k)=-hz_inv3(i,k)*hz_inv3(i,k)* &
238 & (tl_hz(i,j,k-1)+tl_hz(i,j,k)+ &
250 bio1(i,k,ibio)=0.0_r8
251 tl_bio(i,k,ibio)=0.0_r8
268 bio_old(i,k,ibio)=t(i,j,k,nstp,ibio)
269 tl_bio_old(i,k,ibio)=tl_t(i,j,k,nstp,ibio)
278 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
279 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
280 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
281 & max(0.0_r8,eps-bio_old(i,k,
isdet))
282 tl_cff1=-(0.5_r8-sign(0.5_r8,bio_old(i,k,
ino3_)-eps))* &
283 & tl_bio_old(i,k,
ino3_)- &
284 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
iphyt)-eps))* &
285 & tl_bio_old(i,k,
iphyt)- &
286 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
izoop)-eps))* &
287 & tl_bio_old(i,k,
izoop)- &
288 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
isdet)-eps))* &
289 & tl_bio_old(i,k,
isdet)
293 IF (cff1.gt.0.0)
THEN
295 cff=t(i,j,k,nstp,itrmx)
297 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
299 cff=t(i,j,k,nstp,ibio)
307 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
309 & (sign(0.5_r8, real(itrmx-ibio,r8)**2)+ &
310 & sign(0.5_r8,-real(itrmx-ibio,r8)**2))
311 tl_bio(i,k,ibio)=(0.5_r8- &
312 & sign(0.5_r8,eps-bio_old(i,k,ibio)))* &
313 & tl_bio_old(i,k,ibio)- &
315 & (sign(0.5_r8, real(itrmx-ibio,r8)**2)+ &
316 & sign(0.5_r8,-real(itrmx-ibio,r8)**2))
321 bio(i,k,ibio)=bio_old(i,k,ibio)
322 tl_bio(i,k,ibio)=tl_bio_old(i,k,ibio)
382 iter_loop:
DO iter=1,
bioiter(ng)
390 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
391 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
392 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
393 & max(0.0_r8,eps-bio_old(i,k,
isdet))
397 IF (cff1.gt.0.0)
THEN
399 cff=t(i,j,k,nstp,itrmx)
401 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
403 cff=t(i,j,k,nstp,ibio)
411 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
412 & cff1*(sign(0.5_r8, &
413 & real(itrmx-ibio,r8)**2)+ &
415 & -real(itrmx-ibio,r8)**2))
420 bio(i,k,ibio)=bio_old(i,k,ibio)
438 cff=bio(i,k,
iphyt)* &
439 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
450 IF (iteradj.ne.iter)
THEN
455 cff1=dtdays*
zoogr(ng)
456 cff2=dtdays*
phymr(ng)
478 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
479 cff2=dtdays*
zoomr(ng)
480 cff3=dtdays*
zoomd(ng)
485 & bio(i,k,
izoop)*cff2
487 & bio(i,k,
izoop)*cff3
493 cff1=dtdays*
detrr(ng)
494 cff2=1.0_r8/(1.0_r8+cff1)
499 & bio(i,k,
isdet)*cff1
521 qc(i,k)=bio(i,k,ibio)
527 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
532 dltr=hz(i,j,k)*fc(i,k)
533 dltl=hz(i,j,k)*fc(i,k-1)
534 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
541 IF ((dltr*dltl).le.0.0_r8)
THEN
544 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
546 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
559 cff=(dltr-dltl)*hz_inv3(i,k)
560 dltr=dltr-cff*hz(i,j,k+1)
561 dltl=dltl+cff*hz(i,j,k-1)
564 wr(i,k)=(2.0_r8*dltr-dltl)**2
565 wl(i,k)=(dltr-2.0_r8*dltl)**2
571 dltl=max(cff,wl(i,k ))
572 dltr=max(cff,wr(i,k+1))
573 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
579#if defined LINEAR_CONTINUATION
580 bl(i,
n(ng))=br(i,
n(ng)-1)
581 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
583 bl(i,
n(ng))=br(i,
n(ng)-1)
584 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
586 br(i,
n(ng))=qc(i,
n(ng))
587 bl(i,
n(ng))=qc(i,
n(ng))
588 br(i,
n(ng)-1)=qc(i,
n(ng))
590#if defined LINEAR_CONTINUATION
592 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
595 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
613 IF ((dltr*dltl).lt.0.0_r8)
THEN
616 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
618 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
640 cff=dtdays*abs(wbio(isink))
644 wl(i,k)=z_w(i,j,k-1)+cff
645 wr(i,k)=hz(i,j,k)*qc(i,k)
652 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
654 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
665 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
666 fc(i,k-1)=fc(i,k-1)+ &
669 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
671 & (br(i,ks)+bl(i,ks)- &
677 bio(i,k,ibio)=qc(i,k)+ &
678 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
692 cff=bio1(i,k,
iphyt)* &
693 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
695 tl_cff=(tl_bio(i,k,
iphyt)* &
696 & cff1*exp(
k_ext(ng)*z_r(i,j,k))- &
697 & tl_bio(i,k,
ino3_)*cff)/ &
699 &
k_ext(ng)*tl_z_r(i,j,k)*cff
704 & tl_cff*bio(i,k,
ino3_))/ &
710 & tl_bio(i,k,
ino3_)*cff+ &
711 & bio(i,k,
ino3_)*tl_cff
721 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
722 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
723 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
724 & max(0.0_r8,eps-bio_old(i,k,
isdet))
728 IF (cff1.gt.0.0)
THEN
730 cff=t(i,j,k,nstp,itrmx)
732 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
734 cff=t(i,j,k,nstp,ibio)
742 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
743 & cff1*(sign(0.5_r8, &
744 & real(itrmx-ibio,r8)**2)+ &
746 & -real(itrmx-ibio,r8)**2))
751 bio(i,k,ibio)=bio_old(i,k,ibio)
769 cff=bio(i,k,
iphyt)* &
770 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
784 cff1=dtdays*
zoogr(ng)
785 cff2=dtdays*
phymr(ng)
805 IF (iteradj.ne.iter)
THEN
809 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
810 cff2=dtdays*
zoomr(ng)
811 cff3=dtdays*
zoomd(ng)
816 & bio(i,k,
izoop)*cff2
818 & bio(i,k,
izoop)*cff3
824 cff1=dtdays*
detrr(ng)
825 cff2=1.0_r8/(1.0_r8+cff1)
830 & bio(i,k,
isdet)*cff1
852 qc(i,k)=bio(i,k,ibio)
858 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
863 dltr=hz(i,j,k)*fc(i,k)
864 dltl=hz(i,j,k)*fc(i,k-1)
865 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
872 IF ((dltr*dltl).le.0.0_r8)
THEN
875 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
877 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
890 cff=(dltr-dltl)*hz_inv3(i,k)
891 dltr=dltr-cff*hz(i,j,k+1)
892 dltl=dltl+cff*hz(i,j,k-1)
895 wr(i,k)=(2.0_r8*dltr-dltl)**2
896 wl(i,k)=(dltr-2.0_r8*dltl)**2
902 dltl=max(cff,wl(i,k ))
903 dltr=max(cff,wr(i,k+1))
904 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
910#if defined LINEAR_CONTINUATION
911 bl(i,
n(ng))=br(i,
n(ng)-1)
912 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
914 bl(i,
n(ng))=br(i,
n(ng)-1)
915 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
917 br(i,
n(ng))=qc(i,
n(ng))
918 bl(i,
n(ng))=qc(i,
n(ng))
919 br(i,
n(ng)-1)=qc(i,
n(ng))
921#if defined LINEAR_CONTINUATION
923 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
926 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
944 IF ((dltr*dltl).lt.0.0_r8)
THEN
947 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
949 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
971 cff=dtdays*abs(wbio(isink))
975 wl(i,k)=z_w(i,j,k-1)+cff
976 wr(i,k)=hz(i,j,k)*qc(i,k)
983 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
985 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
996 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
997 fc(i,k-1)=fc(i,k-1)+ &
1000 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1002 & (br(i,ks)+bl(i,ks)- &
1003 & 2.0_r8*qc(i,ks))))
1008 bio(i,k,ibio)=qc(i,k)+ &
1009 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1021 cff1=dtdays*
zoogr(ng)
1022 cff2=dtdays*
phymr(ng)
1028 tl_cff=((tl_bio(i,k,
izoop)*bio1(i,k,
iphyt)+ &
1030 & 2.0_r8*bio1(i,k,
iphyt)*tl_bio(i,k,
iphyt)*cff)/ &
1036 & tl_cff*bio(i,k,
iphyt))/ &
1042 & tl_bio(i,k,
iphyt)* &
1043 & cff*(1.0_r8-
zooga(ng))+ &
1045 & tl_cff*(1.0_r8-
zooga(ng))
1051 & tl_bio(i,k,
iphyt)* &
1066 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
1067 cff2=dtdays*
zoomr(ng)
1068 cff3=dtdays*
zoomd(ng)
1078 & tl_bio(i,k,
izoop)*cff2
1083 & tl_bio(i,k,
izoop)*cff3
1089 cff1=dtdays*
detrr(ng)
1090 cff2=1.0_r8/(1.0_r8+cff1)
1100 & tl_bio(i,k,
isdet)*cff1
1110 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
1111 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
1112 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
1113 & max(0.0_r8,eps-bio_old(i,k,
isdet))
1117 IF (cff1.gt.0.0)
THEN
1119 cff=t(i,j,k,nstp,itrmx)
1121 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
1123 cff=t(i,j,k,nstp,ibio)
1131 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
1132 & cff1*(sign(0.5_r8, &
1133 & real(itrmx-ibio,r8)**2)+ &
1135 & -real(itrmx-ibio,r8)**2))
1140 bio(i,k,ibio)=bio_old(i,k,ibio)
1158 cff=bio(i,k,
iphyt)* &
1159 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
1166 & bio(i,k,
ino3_)*cff
1173 cff1=dtdays*
zoogr(ng)
1174 cff2=dtdays*
phymr(ng)
1196 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
1197 cff2=dtdays*
zoomr(ng)
1198 cff3=dtdays*
zoomd(ng)
1203 & bio(i,k,
izoop)*cff2
1205 & bio(i,k,
izoop)*cff3
1211 cff1=dtdays*
detrr(ng)
1212 cff2=1.0_r8/(1.0_r8+cff1)
1217 & bio(i,k,
isdet)*cff1
1221 IF (iteradj.ne.iter)
THEN
1241 qc(i,k)=bio(i,k,ibio)
1247 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1252 dltr=hz(i,j,k)*fc(i,k)
1253 dltl=hz(i,j,k)*fc(i,k-1)
1254 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1261 IF ((dltr*dltl).le.0.0_r8)
THEN
1264 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1266 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1279 cff=(dltr-dltl)*hz_inv3(i,k)
1280 dltr=dltr-cff*hz(i,j,k+1)
1281 dltl=dltl+cff*hz(i,j,k-1)
1282 br(i,k)=qc(i,k)+dltr
1283 bl(i,k)=qc(i,k)-dltl
1284 wr(i,k)=(2.0_r8*dltr-dltl)**2
1285 wl(i,k)=(dltr-2.0_r8*dltl)**2
1291 dltl=max(cff,wl(i,k ))
1292 dltr=max(cff,wr(i,k+1))
1293 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1299#if defined LINEAR_CONTINUATION
1300 bl(i,
n(ng))=br(i,
n(ng)-1)
1301 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1302#elif defined NEUMANN
1303 bl(i,
n(ng))=br(i,
n(ng)-1)
1304 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1306 br(i,
n(ng))=qc(i,
n(ng))
1307 bl(i,
n(ng))=qc(i,
n(ng))
1308 br(i,
n(ng)-1)=qc(i,
n(ng))
1310#if defined LINEAR_CONTINUATION
1312 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1313#elif defined NEUMANN
1315 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1329 dltr=br(i,k)-qc(i,k)
1330 dltl=qc(i,k)-bl(i,k)
1333 IF ((dltr*dltl).lt.0.0_r8)
THEN
1336 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1338 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1341 br(i,k)=qc(i,k)+dltr
1342 bl(i,k)=qc(i,k)-dltl
1360 cff=dtdays*abs(wbio(isink))
1364 wl(i,k)=z_w(i,j,k-1)+cff
1365 wr(i,k)=hz(i,j,k)*qc(i,k)
1372 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1374 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1385 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1386 fc(i,k-1)=fc(i,k-1)+ &
1389 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1391 & (br(i,ks)+bl(i,ks)- &
1392 & 2.0_r8*qc(i,ks))))
1397 bio(i,k,ibio)=qc(i,k)+ &
1398 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1415 sink_loop:
DO isink=1,nsink
1425 qc(i,k)=bio(i,k,ibio)
1426 tl_qc(i,k)=tl_bio(i,k,ibio)
1432 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1433 tl_fc(i,k)=(tl_qc(i,k+1)-tl_qc(i,k))*hz_inv2(i,k)+ &
1434 & (qc(i,k+1)-qc(i,k))*tl_hz_inv2(i,k)
1439 dltr=hz(i,j,k)*fc(i,k)
1440 tl_dltr=tl_hz(i,j,k)*fc(i,k)+hz(i,j,k)*tl_fc(i,k)
1441 dltl=hz(i,j,k)*fc(i,k-1)
1442 tl_dltl=tl_hz(i,j,k)*fc(i,k-1)+hz(i,j,k)*tl_fc(i,k-1)
1443 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1444 tl_cff=tl_hz(i,j,k-1)+2.0_r8*tl_hz(i,j,k)+tl_hz(i,j,k+1)
1446 tl_cffr=tl_cff*fc(i,k)+cff*tl_fc(i,k)
1448 tl_cffl=tl_cff*fc(i,k-1)+cff*tl_fc(i,k-1)
1453 IF ((dltr*dltl).le.0.0_r8)
THEN
1458 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1461 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1475 cff=(dltr-dltl)*hz_inv3(i,k)
1476 tl_cff=(tl_dltr-tl_dltl)*hz_inv3(i,k)+ &
1477 & (dltr-dltl)*tl_hz_inv3(i,k)
1478 dltr=dltr-cff*hz(i,j,k+1)
1479 tl_dltr=tl_dltr-tl_cff*hz(i,j,k+1)-cff*tl_hz(i,j,k+1)
1480 dltl=dltl+cff*hz(i,j,k-1)
1481 tl_dltl=tl_dltl+tl_cff*hz(i,j,k-1)+cff*tl_hz(i,j,k-1)
1482 br(i,k)=qc(i,k)+dltr
1483 tl_br(i,k)=tl_qc(i,k)+tl_dltr
1484 bl(i,k)=qc(i,k)-dltl
1485 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
1486 wr(i,k)=(2.0_r8*dltr-dltl)**2
1487 tl_wr(i,k)=2.0_r8*(2.0_r8*dltr-dltl)* &
1488 & (2.0_r8*tl_dltr-tl_dltl)
1489 wl(i,k)=(dltr-2.0_r8*dltl)**2
1490 tl_wl(i,k)=2.0_r8*(dltr-2.0_r8*dltl)* &
1491 & (tl_dltr-2.0_r8*tl_dltl)
1497 dltl=max(cff,wl(i,k ))
1498 tl_dltl=(0.5_r8-sign(0.5_r8,cff-wl(i,k )))* &
1500 dltr=max(cff,wr(i,k+1))
1501 tl_dltr=(0.5_r8-sign(0.5_r8,cff-wr(i,k+1)))* &
1504 bl1(i,k+1)=bl(i,k+1)
1505 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1506 tl_br(i,k)=(tl_dltr*br1(i,k )+dltr*tl_br(i,k )+ &
1507 & tl_dltl*bl1(i,k+1)+dltl*tl_bl(i,k+1))/ &
1509 & (tl_dltr+tl_dltl)*br(i,k)/(dltr+dltl)
1511 tl_bl(i,k+1)=tl_br(i,k)
1516 tl_fc(i,
n(ng))=0.0_r8
1517#if defined LINEAR_CONTINUATION
1518 bl(i,
n(ng))=br(i,
n(ng)-1)
1519 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
1520 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1521 tl_br(i,
n(ng))=2.0_r8*tl_qc(i,
n(ng))-tl_bl(i,
n(ng))
1522#elif defined NEUMANN
1523 bl(i,
n(ng))=br(i,
n(ng)-1)
1524 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
1525 br(i,
n(ng))=1.5_r8*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1526 tl_br(i,
n(ng))=1.5_r8*tl_qc(i,
n(ng))-0.5_r8*tl_bl(i,
n(ng))
1528 br(i,
n(ng))=qc(i,
n(ng))
1529 bl(i,
n(ng))=qc(i,
n(ng))
1530 br(i,
n(ng)-1)=qc(i,
n(ng))
1531 tl_br(i,
n(ng))=tl_qc(i,
n(ng))
1532 tl_bl(i,
n(ng))=tl_qc(i,
n(ng))
1533 tl_br(i,
n(ng)-1)=tl_qc(i,
n(ng))
1535#if defined LINEAR_CONTINUATION
1537 tl_br(i,1)=tl_bl(i,2)
1538 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1539 tl_bl(i,1)=2.0_r8*tl_qc(i,1)-tl_br(i,1)
1540#elif defined NEUMANN
1542 tl_br(i,1)=tl_bl(i,2)
1543 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1544 tl_bl(i,1)=1.5_r8*tl_qc(i,1)-0.5_r8*tl_br(i,1)
1549 tl_bl(i,2)=tl_qc(i,1)
1550 tl_br(i,1)=tl_qc(i,1)
1551 tl_bl(i,1)=tl_qc(i,1)
1561 dltr=br(i,k)-qc(i,k)
1562 tl_dltr=tl_br(i,k)-tl_qc(i,k)
1563 dltl=qc(i,k)-bl(i,k)
1564 tl_dltl=tl_qc(i,k)-tl_bl(i,k)
1566 tl_cffr=2.0_r8*tl_dltr
1568 tl_cffl=2.0_r8*tl_dltl
1569 IF ((dltr*dltl).lt.0.0_r8)
THEN
1574 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1577 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1581 br(i,k)=qc(i,k)+dltr
1582 tl_br(i,k)=tl_qc(i,k)+tl_dltr
1583 bl(i,k)=qc(i,k)-dltl
1584 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
1602 cff=dtdays*abs(wbio(isink))
1603 tl_cff=dtdays*sign(1.0_r8,wbio(isink))*tl_wbio(isink)
1608 wl(i,k)=z_w(i,j,k-1)+cff
1609 tl_wl(i,k)=tl_z_w(i,j,k-1)+tl_cff
1610 wr(i,k)=hz(i,j,k)*qc(i,k)
1611 tl_wr(i,k)=tl_hz(i,j,k)*qc(i,k)+hz(i,j,k)*tl_qc(i,k)
1618 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1620 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1621 tl_fc(i,k-1)=tl_fc(i,k-1)+tl_wr(i,ks)
1632 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1633 tl_cu=(0.5_r8+sign(0.5_r8, &
1634 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
1635 & hz_inv(i,ks))))* &
1636 & ((tl_wl(i,k)-tl_z_w(i,j,ks-1))*hz_inv(i,ks)+ &
1637 & (wl(i,k)-z_w(i,j,ks-1))*tl_hz_inv(i,ks))
1638 fc(i,k-1)=fc(i,k-1)+ &
1641 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1643 & (br(i,ks)+bl(i,ks)- &
1644 & 2.0_r8*qc(i,ks))))
1645 tl_fc(i,k-1)=tl_fc(i,k-1)+ &
1646 & (tl_hz(i,j,ks)*cu+hz(i,j,ks)*tl_cu)* &
1648 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1650 & (br(i,ks)+bl(i,ks)- &
1651 & 2.0_r8*qc(i,ks))))+ &
1654 & tl_cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1656 & (br(i,ks)+bl(i,ks)- &
1657 & 2.0_r8*qc(i,ks)))+ &
1658 & cu*(0.5_r8*(tl_br(i,ks)-tl_bl(i,ks))+ &
1660 & (br(i,ks)+bl(i,ks)-2.0_r8*qc(i,ks))- &
1662 & (tl_br(i,ks)+tl_bl(i,ks)- &
1663 & 2.0_r8*tl_qc(i,ks))))
1668 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1669 tl_bio(i,k,ibio)=tl_qc(i,k)+ &
1670 & (tl_fc(i,k)-tl_fc(i,k-1))*hz_inv(i,k)+ &
1671 & (fc(i,k)-fc(i,k-1))*tl_hz_inv(i,k)
1697 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
1698 tl_cff=tl_bio(i,k,ibio)-tl_bio_old(i,k,ibio)
1701 tl_t(i,j,k,nnew,ibio)=tl_t(i,j,k,nnew,ibio)+ &
1702 & tl_cff*hz(i,j,k)+cff*tl_hz(i,j,k)