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"
221 j_loop :
DO j=jstr,jend
227 hz_inv(i,k)=1.0_r8/hz(i,j,k)
228 tl_hz_inv(i,k)=-hz_inv(i,k)*hz_inv(i,k)*tl_hz(i,j,k)+ &
236 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
237 tl_hz_inv2(i,k)=-hz_inv2(i,k)*hz_inv2(i,k)* &
238 & (tl_hz(i,j,k)+tl_hz(i,j,k+1))+ &
240 & 2.0_r8*hz_inv2(i,k)
246 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
247 tl_hz_inv3(i,k)=-hz_inv3(i,k)*hz_inv3(i,k)* &
248 & (tl_hz(i,j,k-1)+tl_hz(i,j,k)+ &
251 & 2.0_r8*hz_inv3(i,k)
263 bio1(i,k,ibio)=0.0_r8
264 tl_bio(i,k,ibio)=0.0_r8
281 bio_old(i,k,ibio)=t(i,j,k,nstp,ibio)
282 tl_bio_old(i,k,ibio)=tl_t(i,j,k,nstp,ibio)
291 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
292 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
293 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
294 & max(0.0_r8,eps-bio_old(i,k,
isdet))
295 tl_cff1=-(0.5_r8-sign(0.5_r8,bio_old(i,k,
ino3_)-eps))* &
296 & tl_bio_old(i,k,
ino3_)- &
297 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
iphyt)-eps))* &
298 & tl_bio_old(i,k,
iphyt)- &
299 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
izoop)-eps))* &
300 & tl_bio_old(i,k,
izoop)- &
301 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
isdet)-eps))* &
302 & tl_bio_old(i,k,
isdet)+ &
304 & ((0.5_r8-sign(0.5_r8,bio_old(i,k,
ino3_)-eps))+ &
305 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
iphyt)-eps))+ &
306 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
izoop)-eps))+ &
307 & (0.5_r8-sign(0.5_r8,bio_old(i,k,
isdet)-eps)))* &
313 IF (cff1.gt.0.0)
THEN
315 cff=t(i,j,k,nstp,itrmx)
317 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
319 cff=t(i,j,k,nstp,ibio)
327 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
329 & (sign(0.5_r8, real(itrmx-ibio,r8)**2)+ &
330 & sign(0.5_r8,-real(itrmx-ibio,r8)**2))
331 tl_bio(i,k,ibio)=(0.5_r8- &
332 & sign(0.5_r8,eps-bio_old(i,k,ibio)))* &
333 & tl_bio_old(i,k,ibio)- &
335 & (sign(0.5_r8, real(itrmx-ibio,r8)**2)+ &
336 & sign(0.5_r8,-real(itrmx-ibio,r8)**2))+&
339 & sign(0.5_r8,eps-bio_old(i,k,ibio)))* &
346 bio(i,k,ibio)=bio_old(i,k,ibio)
347 tl_bio(i,k,ibio)=tl_bio_old(i,k,ibio)
407 iter_loop:
DO iter=1,
bioiter(ng)
415 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
416 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
417 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
418 & max(0.0_r8,eps-bio_old(i,k,
isdet))
422 IF (cff1.gt.0.0)
THEN
424 cff=t(i,j,k,nstp,itrmx)
426 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
428 cff=t(i,j,k,nstp,ibio)
436 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
437 & cff1*(sign(0.5_r8, &
438 & real(itrmx-ibio,r8)**2)+ &
440 & -real(itrmx-ibio,r8)**2))
445 bio(i,k,ibio)=bio_old(i,k,ibio)
463 cff=bio(i,k,
iphyt)* &
464 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
475 IF (iteradj.ne.iter)
THEN
480 cff1=dtdays*
zoogr(ng)
481 cff2=dtdays*
phymr(ng)
503 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
504 cff2=dtdays*
zoomr(ng)
505 cff3=dtdays*
zoomd(ng)
510 & bio(i,k,
izoop)*cff2
512 & bio(i,k,
izoop)*cff3
518 cff1=dtdays*
detrr(ng)
519 cff2=1.0_r8/(1.0_r8+cff1)
524 & bio(i,k,
isdet)*cff1
546 qc(i,k)=bio(i,k,ibio)
552 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
557 dltr=hz(i,j,k)*fc(i,k)
558 dltl=hz(i,j,k)*fc(i,k-1)
559 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
566 IF ((dltr*dltl).le.0.0_r8)
THEN
569 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
571 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
584 cff=(dltr-dltl)*hz_inv3(i,k)
585 dltr=dltr-cff*hz(i,j,k+1)
586 dltl=dltl+cff*hz(i,j,k-1)
589 wr(i,k)=(2.0_r8*dltr-dltl)**2
590 wl(i,k)=(dltr-2.0_r8*dltl)**2
596 dltl=max(cff,wl(i,k ))
597 dltr=max(cff,wr(i,k+1))
598 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
604#if defined LINEAR_CONTINUATION
605 bl(i,
n(ng))=br(i,
n(ng)-1)
606 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
608 bl(i,
n(ng))=br(i,
n(ng)-1)
609 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
611 br(i,
n(ng))=qc(i,
n(ng))
612 bl(i,
n(ng))=qc(i,
n(ng))
613 br(i,
n(ng)-1)=qc(i,
n(ng))
615#if defined LINEAR_CONTINUATION
617 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
620 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
638 IF ((dltr*dltl).lt.0.0_r8)
THEN
641 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
643 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
665 cff=dtdays*abs(wbio(isink))
669 wl(i,k)=z_w(i,j,k-1)+cff
670 wr(i,k)=hz(i,j,k)*qc(i,k)
677 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
679 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
690 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
691 fc(i,k-1)=fc(i,k-1)+ &
694 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
696 & (br(i,ks)+bl(i,ks)- &
702 bio(i,k,ibio)=qc(i,k)+ &
703 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
717 cff=bio1(i,k,
iphyt)* &
718 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
720 tl_cff=(tl_bio(i,k,
iphyt)* &
721 & cff1*exp(
k_ext(ng)*z_r(i,j,k))- &
722 & tl_bio(i,k,
ino3_)*cff)/ &
724 &
k_ext(ng)*tl_z_r(i,j,k)*cff- &
726 &
k_ext(ng)*z_r(i,j,k)*cff+ &
727 & bio1(i,k,
ino3_)*cff/ &
734 & tl_cff*bio(i,k,
ino3_))/ &
737 & cff*bio(i,k,
ino3_)/ &
744 & tl_bio(i,k,
ino3_)*cff+ &
745 & bio(i,k,
ino3_)*tl_cff- &
758 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
759 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
760 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
761 & max(0.0_r8,eps-bio_old(i,k,
isdet))
765 IF (cff1.gt.0.0)
THEN
767 cff=t(i,j,k,nstp,itrmx)
769 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
771 cff=t(i,j,k,nstp,ibio)
779 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
780 & cff1*(sign(0.5_r8, &
781 & real(itrmx-ibio,r8)**2)+ &
783 & -real(itrmx-ibio,r8)**2))
788 bio(i,k,ibio)=bio_old(i,k,ibio)
806 cff=bio(i,k,
iphyt)* &
807 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
821 cff1=dtdays*
zoogr(ng)
822 cff2=dtdays*
phymr(ng)
842 IF (iteradj.ne.iter)
THEN
846 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
847 cff2=dtdays*
zoomr(ng)
848 cff3=dtdays*
zoomd(ng)
853 & bio(i,k,
izoop)*cff2
855 & bio(i,k,
izoop)*cff3
861 cff1=dtdays*
detrr(ng)
862 cff2=1.0_r8/(1.0_r8+cff1)
867 & bio(i,k,
isdet)*cff1
889 qc(i,k)=bio(i,k,ibio)
895 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
900 dltr=hz(i,j,k)*fc(i,k)
901 dltl=hz(i,j,k)*fc(i,k-1)
902 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
909 IF ((dltr*dltl).le.0.0_r8)
THEN
912 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
914 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
927 cff=(dltr-dltl)*hz_inv3(i,k)
928 dltr=dltr-cff*hz(i,j,k+1)
929 dltl=dltl+cff*hz(i,j,k-1)
932 wr(i,k)=(2.0_r8*dltr-dltl)**2
933 wl(i,k)=(dltr-2.0_r8*dltl)**2
939 dltl=max(cff,wl(i,k ))
940 dltr=max(cff,wr(i,k+1))
941 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
947#if defined LINEAR_CONTINUATION
948 bl(i,
n(ng))=br(i,
n(ng)-1)
949 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
951 bl(i,
n(ng))=br(i,
n(ng)-1)
952 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
954 br(i,
n(ng))=qc(i,
n(ng))
955 bl(i,
n(ng))=qc(i,
n(ng))
956 br(i,
n(ng)-1)=qc(i,
n(ng))
958#if defined LINEAR_CONTINUATION
960 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
963 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
981 IF ((dltr*dltl).lt.0.0_r8)
THEN
984 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
986 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1008 cff=dtdays*abs(wbio(isink))
1012 wl(i,k)=z_w(i,j,k-1)+cff
1013 wr(i,k)=hz(i,j,k)*qc(i,k)
1020 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1022 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1033 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1034 fc(i,k-1)=fc(i,k-1)+ &
1037 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1039 & (br(i,ks)+bl(i,ks)- &
1040 & 2.0_r8*qc(i,ks))))
1045 bio(i,k,ibio)=qc(i,k)+ &
1046 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1058 cff1=dtdays*
zoogr(ng)
1059 cff2=dtdays*
phymr(ng)
1065 tl_cff=((tl_bio(i,k,
izoop)*bio1(i,k,
iphyt)+ &
1067 & 2.0_r8*bio1(i,k,
iphyt)*tl_bio(i,k,
iphyt)*cff)/ &
1070 & cff+2.0_r8*bio1(i,k,
iphyt)*bio1(i,k,
iphyt)*cff/ &
1077 & tl_cff*bio(i,k,
iphyt))/ &
1078 & (1.0_r8+cff+cff2)+ &
1080 & cff*bio(i,k,
iphyt)/ &
1087 & tl_bio(i,k,
iphyt)* &
1088 & cff*(1.0_r8-
zooga(ng))+ &
1090 & tl_cff*(1.0_r8-
zooga(ng))- &
1099 & tl_bio(i,k,
iphyt)* &
1120 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
1121 cff2=dtdays*
zoomr(ng)
1122 cff3=dtdays*
zoomd(ng)
1132 & tl_bio(i,k,
izoop)*cff2
1137 & tl_bio(i,k,
izoop)*cff3
1143 cff1=dtdays*
detrr(ng)
1144 cff2=1.0_r8/(1.0_r8+cff1)
1154 & tl_bio(i,k,
isdet)*cff1
1164 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
1165 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
1166 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
1167 & max(0.0_r8,eps-bio_old(i,k,
isdet))
1171 IF (cff1.gt.0.0)
THEN
1173 cff=t(i,j,k,nstp,itrmx)
1175 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
1177 cff=t(i,j,k,nstp,ibio)
1185 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
1186 & cff1*(sign(0.5_r8, &
1187 & real(itrmx-ibio,r8)**2)+ &
1189 & -real(itrmx-ibio,r8)**2))
1194 bio(i,k,ibio)=bio_old(i,k,ibio)
1212 cff=bio(i,k,
iphyt)* &
1213 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
1220 & bio(i,k,
ino3_)*cff
1227 cff1=dtdays*
zoogr(ng)
1228 cff2=dtdays*
phymr(ng)
1250 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
1251 cff2=dtdays*
zoomr(ng)
1252 cff3=dtdays*
zoomd(ng)
1257 & bio(i,k,
izoop)*cff2
1259 & bio(i,k,
izoop)*cff3
1265 cff1=dtdays*
detrr(ng)
1266 cff2=1.0_r8/(1.0_r8+cff1)
1271 & bio(i,k,
isdet)*cff1
1275 IF (iteradj.ne.iter)
THEN
1295 qc(i,k)=bio(i,k,ibio)
1301 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1306 dltr=hz(i,j,k)*fc(i,k)
1307 dltl=hz(i,j,k)*fc(i,k-1)
1308 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1315 IF ((dltr*dltl).le.0.0_r8)
THEN
1318 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1320 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1333 cff=(dltr-dltl)*hz_inv3(i,k)
1334 dltr=dltr-cff*hz(i,j,k+1)
1335 dltl=dltl+cff*hz(i,j,k-1)
1336 br(i,k)=qc(i,k)+dltr
1337 bl(i,k)=qc(i,k)-dltl
1338 wr(i,k)=(2.0_r8*dltr-dltl)**2
1339 wl(i,k)=(dltr-2.0_r8*dltl)**2
1345 dltl=max(cff,wl(i,k ))
1346 dltr=max(cff,wr(i,k+1))
1347 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1353#if defined LINEAR_CONTINUATION
1354 bl(i,
n(ng))=br(i,
n(ng)-1)
1355 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1356#elif defined NEUMANN
1357 bl(i,
n(ng))=br(i,
n(ng)-1)
1358 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1360 br(i,
n(ng))=qc(i,
n(ng))
1361 bl(i,
n(ng))=qc(i,
n(ng))
1362 br(i,
n(ng)-1)=qc(i,
n(ng))
1364#if defined LINEAR_CONTINUATION
1366 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1367#elif defined NEUMANN
1369 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1383 dltr=br(i,k)-qc(i,k)
1384 dltl=qc(i,k)-bl(i,k)
1387 IF ((dltr*dltl).lt.0.0_r8)
THEN
1390 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1392 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1395 br(i,k)=qc(i,k)+dltr
1396 bl(i,k)=qc(i,k)-dltl
1414 cff=dtdays*abs(wbio(isink))
1418 wl(i,k)=z_w(i,j,k-1)+cff
1419 wr(i,k)=hz(i,j,k)*qc(i,k)
1426 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1428 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1439 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1440 fc(i,k-1)=fc(i,k-1)+ &
1443 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1445 & (br(i,ks)+bl(i,ks)- &
1446 & 2.0_r8*qc(i,ks))))
1451 bio(i,k,ibio)=qc(i,k)+ &
1452 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1469 sink_loop:
DO isink=1,nsink
1479 qc(i,k)=bio(i,k,ibio)
1480 tl_qc(i,k)=tl_bio(i,k,ibio)
1486 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1487 tl_fc(i,k)=(tl_qc(i,k+1)-tl_qc(i,k))*hz_inv2(i,k)+ &
1488 & (qc(i,k+1)-qc(i,k))*tl_hz_inv2(i,k)- &
1496 dltr=hz(i,j,k)*fc(i,k)
1497 tl_dltr=tl_hz(i,j,k)*fc(i,k)+hz(i,j,k)*tl_fc(i,k)- &
1501 dltl=hz(i,j,k)*fc(i,k-1)
1502 tl_dltl=tl_hz(i,j,k)*fc(i,k-1)+hz(i,j,k)*tl_fc(i,k-1)- &
1506 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1507 tl_cff=tl_hz(i,j,k-1)+2.0_r8*tl_hz(i,j,k)+tl_hz(i,j,k+1)
1509 tl_cffr=tl_cff*fc(i,k)+cff*tl_fc(i,k)- &
1514 tl_cffl=tl_cff*fc(i,k-1)+cff*tl_fc(i,k-1)- &
1522 IF ((dltr*dltl).le.0.0_r8)
THEN
1527 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1530 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1544 cff=(dltr-dltl)*hz_inv3(i,k)
1545 tl_cff=(tl_dltr-tl_dltl)*hz_inv3(i,k)+ &
1546 & (dltr-dltl)*tl_hz_inv3(i,k)- &
1550 dltr=dltr-cff*hz(i,j,k+1)
1551 tl_dltr=tl_dltr-tl_cff*hz(i,j,k+1)-cff*tl_hz(i,j,k+1)+ &
1555 dltl=dltl+cff*hz(i,j,k-1)
1556 tl_dltl=tl_dltl+tl_cff*hz(i,j,k-1)+cff*tl_hz(i,j,k-1)- &
1560 br(i,k)=qc(i,k)+dltr
1561 tl_br(i,k)=tl_qc(i,k)+tl_dltr
1562 bl(i,k)=qc(i,k)-dltl
1563 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
1564 wr(i,k)=(2.0_r8*dltr-dltl)**2
1565 tl_wr(i,k)=2.0_r8*(2.0_r8*dltr-dltl)* &
1566 & (2.0_r8*tl_dltr-tl_dltl)- &
1570 wl(i,k)=(dltr-2.0_r8*dltl)**2
1571 tl_wl(i,k)=2.0_r8*(dltr-2.0_r8*dltl)* &
1572 & (tl_dltr-2.0_r8*tl_dltl)- &
1581 dltl=max(cff,wl(i,k ))
1582 tl_dltl=(0.5_r8-sign(0.5_r8,cff-wl(i,k )))* &
1585 & cff*(0.5_r8+sign(0.5_r8,cff-wl(i,k )))
1587 dltr=max(cff,wr(i,k+1))
1588 tl_dltr=(0.5_r8-sign(0.5_r8,cff-wr(i,k+1)))* &
1591 & cff*(0.5_r8+sign(0.5_r8,cff-wr(i,k+1)))
1594 bl1(i,k+1)=bl(i,k+1)
1595 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1596 tl_br(i,k)=(tl_dltr*br1(i,k )+dltr*tl_br(i,k )+ &
1597 & tl_dltl*bl1(i,k+1)+dltl*tl_bl(i,k+1))/ &
1599 & (tl_dltr+tl_dltl)*br(i,k)/(dltr+dltl)
1601 tl_bl(i,k+1)=tl_br(i,k)
1606 tl_fc(i,
n(ng))=0.0_r8
1607#if defined LINEAR_CONTINUATION
1608 bl(i,
n(ng))=br(i,
n(ng)-1)
1609 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
1610 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1611 tl_br(i,
n(ng))=2.0_r8*tl_qc(i,
n(ng))-tl_bl(i,
n(ng))
1612#elif defined NEUMANN
1613 bl(i,
n(ng))=br(i,
n(ng)-1)
1614 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
1615 br(i,
n(ng))=1.5_r8*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1616 tl_br(i,
n(ng))=1.5_r8*tl_qc(i,
n(ng))-0.5_r8*tl_bl(i,
n(ng))
1618 br(i,
n(ng))=qc(i,
n(ng))
1619 bl(i,
n(ng))=qc(i,
n(ng))
1620 br(i,
n(ng)-1)=qc(i,
n(ng))
1621 tl_br(i,
n(ng))=tl_qc(i,
n(ng))
1622 tl_bl(i,
n(ng))=tl_qc(i,
n(ng))
1623 tl_br(i,
n(ng)-1)=tl_qc(i,
n(ng))
1625#if defined LINEAR_CONTINUATION
1627 tl_br(i,1)=tl_bl(i,2)
1628 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1629 tl_bl(i,1)=2.0_r8*tl_qc(i,1)-tl_br(i,1)
1630#elif defined NEUMANN
1632 tl_br(i,1)=tl_bl(i,2)
1633 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1634 tl_bl(i,1)=1.5_r8*tl_qc(i,1)-0.5_r8*tl_br(i,1)
1639 tl_bl(i,2)=tl_qc(i,1)
1640 tl_br(i,1)=tl_qc(i,1)
1641 tl_bl(i,1)=tl_qc(i,1)
1651 dltr=br(i,k)-qc(i,k)
1652 tl_dltr=tl_br(i,k)-tl_qc(i,k)
1653 dltl=qc(i,k)-bl(i,k)
1654 tl_dltl=tl_qc(i,k)-tl_bl(i,k)
1656 tl_cffr=2.0_r8*tl_dltr
1658 tl_cffl=2.0_r8*tl_dltl
1659 IF ((dltr*dltl).lt.0.0_r8)
THEN
1664 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1667 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1671 br(i,k)=qc(i,k)+dltr
1672 tl_br(i,k)=tl_qc(i,k)+tl_dltr
1673 bl(i,k)=qc(i,k)-dltl
1674 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
1692 cff=dtdays*abs(wbio(isink))
1693 tl_cff=dtdays*sign(1.0_r8,wbio(isink))*tl_wbio(isink)
1698 wl(i,k)=z_w(i,j,k-1)+cff
1699 tl_wl(i,k)=tl_z_w(i,j,k-1)+tl_cff
1700 wr(i,k)=hz(i,j,k)*qc(i,k)
1701 tl_wr(i,k)=tl_hz(i,j,k)*qc(i,k)+hz(i,j,k)*tl_qc(i,k)- &
1711 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1713 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1714 tl_fc(i,k-1)=tl_fc(i,k-1)+tl_wr(i,ks)
1725 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1726 tl_cu=(0.5_r8+sign(0.5_r8, &
1727 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
1728 & hz_inv(i,ks))))* &
1729 & ((tl_wl(i,k)-tl_z_w(i,j,ks-1))*hz_inv(i,ks)+ &
1730 & (wl(i,k)-z_w(i,j,ks-1))*tl_hz_inv(i,ks)- &
1732 & (wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks) &
1736 & (0.5_r8-sign(0.5_r8, &
1737 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
1740 fc(i,k-1)=fc(i,k-1)+ &
1743 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1745 & (br(i,ks)+bl(i,ks)- &
1746 & 2.0_r8*qc(i,ks))))
1747 tl_fc(i,k-1)=tl_fc(i,k-1)+ &
1748 & (tl_hz(i,j,ks)*cu+hz(i,j,ks)*tl_cu)* &
1750 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1752 & (br(i,ks)+bl(i,ks)- &
1753 & 2.0_r8*qc(i,ks))))+ &
1756 & tl_cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1758 & (br(i,ks)+bl(i,ks)- &
1759 & 2.0_r8*qc(i,ks)))+ &
1760 & cu*(0.5_r8*(tl_br(i,ks)-tl_bl(i,ks))+ &
1762 & (br(i,ks)+bl(i,ks)-2.0_r8*qc(i,ks))- &
1764 & (tl_br(i,ks)+tl_bl(i,ks)- &
1765 & 2.0_r8*tl_qc(i,ks))))- &
1768 & (2.0_r8*bl(i,ks)+ &
1769 & cu*(1.5_r8*(br(i,ks)-bl(i,ks))- &
1770 & (4.5_r8-4.0_r8*cu)* &
1771 & (br(i,ks)+bl(i,ks)- &
1772 & 2.0_r8*qc(i,ks))))
1778 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1779 tl_bio(i,k,ibio)=tl_qc(i,k)+ &
1780 & (tl_fc(i,k)-tl_fc(i,k-1))*hz_inv(i,k)+ &
1781 & (fc(i,k)-fc(i,k-1))*tl_hz_inv(i,k)- &
1783 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1810 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
1811 tl_cff=tl_bio(i,k,ibio)-tl_bio_old(i,k,ibio)
1814 tl_t(i,j,k,nnew,ibio)=tl_t(i,j,k,nnew,ibio)+ &
1815 & tl_cff*hz(i,j,k)+cff*tl_hz(i,j,k)- &