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"
245 j_loop :
DO j=jstr,jend
251 hz_inv(i,k)=1.0_r8/hz(i,j,k)
252 tl_hz_inv(i,k)=-hz_inv(i,k)*hz_inv(i,k)*tl_hz(i,j,k)+ &
260 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
261 tl_hz_inv2(i,k)=-hz_inv2(i,k)*hz_inv2(i,k)* &
262 & (tl_hz(i,j,k)+tl_hz(i,j,k+1))+ &
264 & 2.0_r8*hz_inv2(i,k)
270 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
271 tl_hz_inv3(i,k)=-hz_inv3(i,k)*hz_inv3(i,k)* &
272 & (tl_hz(i,j,k-1)+tl_hz(i,j,k)+ &
275 & 2.0_r8*hz_inv3(i,k)
287 bio1(i,k,ibio)=0.0_r8
288 tl_bio(i,k,ibio)=0.0_r8
316 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
317 tl_biotrc(ibio,nstp)=tl_t(i,j,k,nstp,ibio)
320 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
321 tl_biotrc(ibio,nnew)=tl_t(i,j,k,nnew,ibio)* &
323 & t(i,j,k,nnew,ibio)*hz(i,j,k)* &
339 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
341 & (0.5_r8-sign(0.5_r8, &
342 & biotrc(ibio,itime)-minval))* &
343 & tl_biotrc(ibio,itime)+ &
345 & (0.5_r8-sign(0.5_r8, &
346 & biotrc(ibio,itime)-minval))* &
349 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
352 biotrc1(ibio,itime)=biotrc(ibio,itime)
353 biotrc(ibio,itime)=max(minval,biotrc1(ibio,itime))
354 tl_biotrc(ibio,itime)=(0.5_r8- &
357 & biotrc1(ibio,itime)))* &
358 & tl_biotrc(ibio,itime)+ &
363 & biotrc1(ibio,itime)))* &
367 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
368 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
369 tl_biotrc(itrcmax,itime)=tl_biotrc(itrcmax,itime)- &
378 bio_old(i,k,ibio)=biotrc(ibio,nstp)
379 tl_bio_old(i,k,ibio)=tl_biotrc(ibio,nstp)
380 bio(i,k,ibio)=biotrc(ibio,nstp)
381 tl_bio(i,k,ibio)=tl_biotrc(ibio,nstp)
397 tl_parsur(i)=158.075_r8
465 iter_loop:
DO iter=1,
bioiter(ng)
487 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
490 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
501 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
502 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
505 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
507 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
508 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
516 bio_old(i,k,ibio)=biotrc(ibio,nnew)
517 bio(i,k,ibio)=biotrc(ibio,nnew)
548 IF (parsur(i).gt.0.0_r8)
THEN
556 & (z_w(i,j,k)-z_w(i,j,k-1))
559 par=itop*(1.0_r8-expatt)/att
585 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
586 cff=bio(i,k,
iphyt)* &
587 & cff1*cff4*light(i,k)/ &
597 IF (iteradj.ne.iter)
THEN
604 cff1=dtdays*
zoogr(ng)
608 cff=bio(i,k,
izoop)* &
609 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
613 & bio(i,k,
iphyt)*cff2*cff
626 cff1=1.0_r8/(1.0_r8+cff2+cff3)
631 & bio(i,k,
iphyt)*cff2
633 & bio(i,k,
iphyt)*cff3
642 cff1=1.0_r8/(1.0_r8+cff2+cff3)
647 & bio(i,k,
izoop)*cff2
649 & bio(i,k,
izoop)*cff3
655 cff2=dtdays*
detrr(ng)
656 cff1=1.0_r8/(1.0_r8+cff2)
661 & bio(i,k,
isdet)*cff2
683 qc(i,k)=bio(i,k,ibio)
689 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
694 dltr=hz(i,j,k)*fc(i,k)
695 dltl=hz(i,j,k)*fc(i,k-1)
696 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
703 IF ((dltr*dltl).le.0.0_r8)
THEN
706 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
708 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
721 cff=(dltr-dltl)*hz_inv3(i,k)
722 dltr=dltr-cff*hz(i,j,k+1)
723 dltl=dltl+cff*hz(i,j,k-1)
726 wr(i,k)=(2.0_r8*dltr-dltl)**2
727 wl(i,k)=(dltr-2.0_r8*dltl)**2
733 dltl=max(cff,wl(i,k ))
734 dltr=max(cff,wr(i,k+1))
735 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
741#if defined LINEAR_CONTINUATION
742 bl(i,
n(ng))=br(i,
n(ng)-1)
743 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
745 bl(i,
n(ng))=br(i,
n(ng)-1)
746 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
748 br(i,
n(ng))=qc(i,
n(ng))
749 bl(i,
n(ng))=qc(i,
n(ng))
750 br(i,
n(ng)-1)=qc(i,
n(ng))
752#if defined LINEAR_CONTINUATION
754 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
757 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
775 IF ((dltr*dltl).lt.0.0_r8)
THEN
778 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
780 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
802 cff=dtdays*abs(wbio(isink))
806 wl(i,k)=z_w(i,j,k-1)+cff
807 wr(i,k)=hz(i,j,k)*qc(i,k)
814 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
816 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
827 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
828 fc(i,k-1)=fc(i,k-1)+ &
831 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
833 & (br(i,ks)+bl(i,ks)- &
839 bio(i,k,ibio)=qc(i,k)+ &
840 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
858 IF (parsur(i).gt.0.0_r8)
THEN
866 & (z_w(i,j,k)-z_w(i,j,k-1))
868 & (z_w(i,j,k)-z_w(i,j,k-1))+ &
870 & (tl_z_w(i,j,k)-tl_z_w(i,j,k-1))- &
873 & (z_w(i,j,k)-z_w(i,j,k-1))
876 tl_expatt=-expatt*tl_att+ &
878 & (1.0_r8+att)*expatt
882 par=itop*(1.0_r8-expatt)/att
883 tl_par=(-tl_att*par+tl_itop*(1.0_r8-expatt)- &
884 & itop*tl_expatt)/att+ &
896 tl_par=tl_itop*expatt+itop*tl_expatt-
921 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
922 tl_cff4=-cff3*tl_light(i,k)*light(i,k)*cff4*cff4*cff4+ &
924 & (cff2+2.0_r8*cff3*light(i,k)*light(i,k))* &
927 cff=bio1(i,k,
iphyt)* &
928 & cff1*cff4*light(i,k)/ &
930 tl_cff=(tl_bio(i,k,
iphyt)*cff1*cff4*light(i,k)+ &
931 & bio1(i,k,
iphyt)*cff1* &
932 & (tl_cff4*light(i,k)+cff4*tl_light(i,k))- &
933 & tl_bio(i,k,
ino3_)*cff)/ &
942 & tl_cff*bio(i,k,
ino3_))/ &
945 & cff*bio(i,k,
ino3_)/ &
952 & tl_bio(i,k,
ino3_)*cff+ &
953 & bio(i,k,
ino3_)*tl_cff- &
980 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
983 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
994 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
995 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
998 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
1000 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
1001 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
1009 bio_old(i,k,ibio)=biotrc(ibio,nnew)
1010 bio(i,k,ibio)=biotrc(ibio,nnew)
1024 parsur(i)=158.075_r8
1041 IF (parsur(i).gt.0.0_r8)
THEN
1049 & (z_w(i,j,k)-z_w(i,j,k-1))
1052 par=itop*(1.0_r8-expatt)/att
1078 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
1079 cff=bio(i,k,
iphyt)* &
1080 & cff1*cff4*light(i,k)/ &
1084 & bio(i,k,
ino3_)*cff
1093 cff1=dtdays*
zoogr(ng)
1097 cff=bio(i,k,
izoop)* &
1098 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
1104 & bio(i,k,
iphyt)*cff2*cff
1112 IF (iteradj.ne.iter)
THEN
1119 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1124 & bio(i,k,
iphyt)*cff2
1126 & bio(i,k,
iphyt)*cff3
1135 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1140 & bio(i,k,
izoop)*cff2
1142 & bio(i,k,
izoop)*cff3
1148 cff2=dtdays*
detrr(ng)
1149 cff1=1.0_r8/(1.0_r8+cff2)
1154 & bio(i,k,
isdet)*cff2
1176 qc(i,k)=bio(i,k,ibio)
1182 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1187 dltr=hz(i,j,k)*fc(i,k)
1188 dltl=hz(i,j,k)*fc(i,k-1)
1189 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1196 IF ((dltr*dltl).le.0.0_r8)
THEN
1199 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1201 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1214 cff=(dltr-dltl)*hz_inv3(i,k)
1215 dltr=dltr-cff*hz(i,j,k+1)
1216 dltl=dltl+cff*hz(i,j,k-1)
1217 br(i,k)=qc(i,k)+dltr
1218 bl(i,k)=qc(i,k)-dltl
1219 wr(i,k)=(2.0_r8*dltr-dltl)**2
1220 wl(i,k)=(dltr-2.0_r8*dltl)**2
1226 dltl=max(cff,wl(i,k ))
1227 dltr=max(cff,wr(i,k+1))
1228 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1234#if defined LINEAR_CONTINUATION
1235 bl(i,
n(ng))=br(i,
n(ng)-1)
1236 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1237#elif defined NEUMANN
1238 bl(i,
n(ng))=br(i,
n(ng)-1)
1239 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1241 br(i,
n(ng))=qc(i,
n(ng))
1242 bl(i,
n(ng))=qc(i,
n(ng))
1243 br(i,
n(ng)-1)=qc(i,
n(ng))
1245#if defined LINEAR_CONTINUATION
1247 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1248#elif defined NEUMANN
1250 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1264 dltr=br(i,k)-qc(i,k)
1265 dltl=qc(i,k)-bl(i,k)
1268 IF ((dltr*dltl).lt.0.0_r8)
THEN
1271 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1273 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1276 br(i,k)=qc(i,k)+dltr
1277 bl(i,k)=qc(i,k)-dltl
1295 cff=dtdays*abs(wbio(isink))
1299 wl(i,k)=z_w(i,j,k-1)+cff
1300 wr(i,k)=hz(i,j,k)*qc(i,k)
1307 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1309 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1320 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1321 fc(i,k-1)=fc(i,k-1)+ &
1324 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1326 & (br(i,ks)+bl(i,ks)- &
1327 & 2.0_r8*qc(i,ks))))
1332 bio(i,k,ibio)=qc(i,k)+ &
1333 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1347 cff1=dtdays*
zoogr(ng)
1351 cff=bio1(i,k,
izoop)* &
1352 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio1(i,k,
iphyt)))/ &
1354 tl_cff=(tl_bio(i,k,
izoop)* &
1355 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio1(i,k,
iphyt)))+ &
1358 & tl_bio(i,k,
iphyt)*cff)/ &
1359 & bio1(i,k,
iphyt)- &
1361 & bio1(i,k,
izoop)* &
1370 & tl_cff*bio(i,k,
iphyt))/ &
1373 & cff*bio(i,k,
iphyt)/ &
1380 & cff2*(tl_bio(i,k,
iphyt)*cff+ &
1381 & bio(i,k,
iphyt)*tl_cff)- &
1383 & bio(i,k,
iphyt)*cff2*cff
1390 & bio(i,k,
iphyt)*tl_cff)- &
1399 & bio(i,k,
iphyt)*tl_cff)- &
1411 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1421 & tl_bio(i,k,
iphyt)*cff2
1426 & tl_bio(i,k,
iphyt)*cff3
1435 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1445 & tl_bio(i,k,
izoop)*cff2
1450 & tl_bio(i,k,
izoop)*cff3
1456 cff2=dtdays*
detrr(ng)
1457 cff1=1.0_r8/(1.0_r8+cff2)
1467 & tl_bio(i,k,
isdet)*cff2
1491 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
1494 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
1505 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
1506 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
1509 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
1511 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
1512 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
1520 bio_old(i,k,ibio)=biotrc(ibio,nstp)
1521 bio(i,k,ibio)=biotrc(ibio,nstp)
1535 parsur(i)=158.075_r8
1552 IF (parsur(i).gt.0.0_r8)
THEN
1560 & (z_w(i,j,k)-z_w(i,j,k-1))
1563 par=itop*(1.0_r8-expatt)/att
1589 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
1590 cff=bio(i,k,
iphyt)* &
1591 & cff1*cff4*light(i,k)/ &
1595 & bio(i,k,
ino3_)*cff
1604 cff1=dtdays*
zoogr(ng)
1608 cff=bio(i,k,
izoop)* &
1609 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
1613 & bio(i,k,
iphyt)*cff2*cff
1626 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1631 & bio(i,k,
iphyt)*cff2
1633 & bio(i,k,
iphyt)*cff3
1642 cff1=1.0_r8/(1.0_r8+cff2+cff3)
1647 & bio(i,k,
izoop)*cff2
1649 & bio(i,k,
izoop)*cff3
1655 cff2=dtdays*
detrr(ng)
1656 cff1=1.0_r8/(1.0_r8+cff2)
1661 & bio(i,k,
isdet)*cff2
1665 IF (iteradj.ne.iter)
THEN
1685 qc(i,k)=bio(i,k,ibio)
1691 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1696 dltr=hz(i,j,k)*fc(i,k)
1697 dltl=hz(i,j,k)*fc(i,k-1)
1698 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1705 IF ((dltr*dltl).le.0.0_r8)
THEN
1708 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1710 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1723 cff=(dltr-dltl)*hz_inv3(i,k)
1724 dltr=dltr-cff*hz(i,j,k+1)
1725 dltl=dltl+cff*hz(i,j,k-1)
1726 br(i,k)=qc(i,k)+dltr
1727 bl(i,k)=qc(i,k)-dltl
1728 wr(i,k)=(2.0_r8*dltr-dltl)**2
1729 wl(i,k)=(dltr-2.0_r8*dltl)**2
1735 dltl=max(cff,wl(i,k ))
1736 dltr=max(cff,wr(i,k+1))
1737 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1743#if defined LINEAR_CONTINUATION
1744 bl(i,
n(ng))=br(i,
n(ng)-1)
1745 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1746#elif defined NEUMANN
1747 bl(i,
n(ng))=br(i,
n(ng)-1)
1748 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1750 br(i,
n(ng))=qc(i,
n(ng))
1751 bl(i,
n(ng))=qc(i,
n(ng))
1752 br(i,
n(ng)-1)=qc(i,
n(ng))
1754#if defined LINEAR_CONTINUATION
1756 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1757#elif defined NEUMANN
1759 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1773 dltr=br(i,k)-qc(i,k)
1774 dltl=qc(i,k)-bl(i,k)
1777 IF ((dltr*dltl).lt.0.0_r8)
THEN
1780 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1782 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1785 br(i,k)=qc(i,k)+dltr
1786 bl(i,k)=qc(i,k)-dltl
1804 cff=dtdays*abs(wbio(isink))
1808 wl(i,k)=z_w(i,j,k-1)+cff
1809 wr(i,k)=hz(i,j,k)*qc(i,k)
1816 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1818 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1829 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1830 fc(i,k-1)=fc(i,k-1)+ &
1833 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1835 & (br(i,ks)+bl(i,ks)- &
1836 & 2.0_r8*qc(i,ks))))
1841 bio(i,k,ibio)=qc(i,k)+ &
1842 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1859 sink_loop:
DO isink=1,nsink
1869 qc(i,k)=bio(i,k,ibio)
1870 tl_qc(i,k)=tl_bio(i,k,ibio)
1876 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1877 tl_fc(i,k)=(tl_qc(i,k+1)-tl_qc(i,k))*hz_inv2(i,k)+ &
1878 & (qc(i,k+1)-qc(i,k))*tl_hz_inv2(i,k)- &
1886 dltr=hz(i,j,k)*fc(i,k)
1887 tl_dltr=tl_hz(i,j,k)*fc(i,k)+hz(i,j,k)*tl_fc(i,k)- &
1891 dltl=hz(i,j,k)*fc(i,k-1)
1892 tl_dltl=tl_hz(i,j,k)*fc(i,k-1)+hz(i,j,k)*tl_fc(i,k-1)- &
1896 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1897 tl_cff=tl_hz(i,j,k-1)+2.0_r8*tl_hz(i,j,k)+tl_hz(i,j,k+1)
1899 tl_cffr=tl_cff*fc(i,k)+cff*tl_fc(i,k)- &
1904 tl_cffl=tl_cff*fc(i,k-1)+cff*tl_fc(i,k-1)- &
1912 IF ((dltr*dltl).le.0.0_r8)
THEN
1917 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1920 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1934 cff=(dltr-dltl)*hz_inv3(i,k)
1935 tl_cff=(tl_dltr-tl_dltl)*hz_inv3(i,k)+ &
1936 & (dltr-dltl)*tl_hz_inv3(i,k)- &
1940 dltr=dltr-cff*hz(i,j,k+1)
1941 tl_dltr=tl_dltr-tl_cff*hz(i,j,k+1)-cff*tl_hz(i,j,k+1)+ &
1945 dltl=dltl+cff*hz(i,j,k-1)
1946 tl_dltl=tl_dltl+tl_cff*hz(i,j,k-1)+cff*tl_hz(i,j,k-1)- &
1950 br(i,k)=qc(i,k)+dltr
1951 tl_br(i,k)=tl_qc(i,k)+tl_dltr
1952 bl(i,k)=qc(i,k)-dltl
1953 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
1954 wr(i,k)=(2.0_r8*dltr-dltl)**2
1955 tl_wr(i,k)=2.0_r8*(2.0_r8*dltr-dltl)* &
1956 & (2.0_r8*tl_dltr-tl_dltl)- &
1960 wl(i,k)=(dltr-2.0_r8*dltl)**2
1961 tl_wl(i,k)=2.0_r8*(dltr-2.0_r8*dltl)* &
1962 & (tl_dltr-2.0_r8*tl_dltl)- &
1971 dltl=max(cff,wl(i,k ))
1972 tl_dltl=(0.5_r8-sign(0.5_r8,cff-wl(i,k )))* &
1975 & cff*(0.5_r8+sign(0.5_r8,cff-wl(i,k )))
1977 dltr=max(cff,wr(i,k+1))
1978 tl_dltr=(0.5_r8-sign(0.5_r8,cff-wr(i,k+1)))* &
1981 & cff*(0.5_r8+sign(0.5_r8,cff-wr(i,k+1)))
1984 bl1(i,k+1)=bl(i,k+1)
1985 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1986 tl_br(i,k)=(tl_dltr*br1(i,k )+dltr*tl_br(i,k )+ &
1987 & tl_dltl*bl1(i,k+1)+dltl*tl_bl(i,k+1))/ &
1989 & (tl_dltr+tl_dltl)*br(i,k)/(dltr+dltl)
1991 tl_bl(i,k+1)=tl_br(i,k)
1996 tl_fc(i,
n(ng))=0.0_r8
1997#if defined LINEAR_CONTINUATION
1998 bl(i,
n(ng))=br(i,
n(ng)-1)
1999 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
2000 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
2001 tl_br(i,
n(ng))=2.0_r8*tl_qc(i,
n(ng))-tl_bl(i,
n(ng))
2002#elif defined NEUMANN
2003 bl(i,
n(ng))=br(i,
n(ng)-1)
2004 tl_bl(i,
n(ng))=tl_br(i,
n(ng)-1)
2005 br(i,
n(ng))=1.5_r8*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
2006 tl_br(i,
n(ng))=1.5_r8*tl_qc(i,
n(ng))-0.5_r8*tl_bl(i,
n(ng))
2008 br(i,
n(ng))=qc(i,
n(ng))
2009 bl(i,
n(ng))=qc(i,
n(ng))
2010 br(i,
n(ng)-1)=qc(i,
n(ng))
2011 tl_br(i,
n(ng))=tl_qc(i,
n(ng))
2012 tl_bl(i,
n(ng))=tl_qc(i,
n(ng))
2013 tl_br(i,
n(ng)-1)=tl_qc(i,
n(ng))
2015#if defined LINEAR_CONTINUATION
2017 tl_br(i,1)=tl_bl(i,2)
2018 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
2019 tl_bl(i,1)=2.0_r8*tl_qc(i,1)-tl_br(i,1)
2020#elif defined NEUMANN
2022 tl_br(i,1)=tl_bl(i,2)
2023 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
2024 tl_bl(i,1)=1.5_r8*tl_qc(i,1)-0.5_r8*tl_br(i,1)
2029 tl_bl(i,2)=tl_qc(i,1)
2030 tl_br(i,1)=tl_qc(i,1)
2031 tl_bl(i,1)=tl_qc(i,1)
2041 dltr=br(i,k)-qc(i,k)
2042 tl_dltr=tl_br(i,k)-tl_qc(i,k)
2043 dltl=qc(i,k)-bl(i,k)
2044 tl_dltl=tl_qc(i,k)-tl_bl(i,k)
2046 tl_cffr=2.0_r8*tl_dltr
2048 tl_cffl=2.0_r8*tl_dltl
2049 IF ((dltr*dltl).lt.0.0_r8)
THEN
2054 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2057 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2061 br(i,k)=qc(i,k)+dltr
2062 tl_br(i,k)=tl_qc(i,k)+tl_dltr
2063 bl(i,k)=qc(i,k)-dltl
2064 tl_bl(i,k)=tl_qc(i,k)-tl_dltl
2082 cff=dtdays*abs(wbio(isink))
2083 tl_cff=dtdays*sign(1.0_r8,wbio(isink))*tl_wbio(isink)
2088 wl(i,k)=z_w(i,j,k-1)+cff
2089 tl_wl(i,k)=tl_z_w(i,j,k-1)+tl_cff
2090 wr(i,k)=hz(i,j,k)*qc(i,k)
2091 tl_wr(i,k)=tl_hz(i,j,k)*qc(i,k)+hz(i,j,k)*tl_qc(i,k)- &
2101 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
2103 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
2104 tl_fc(i,k-1)=tl_fc(i,k-1)+tl_wr(i,ks)
2115 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
2116 tl_cu=(0.5_r8+sign(0.5_r8, &
2117 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
2118 & hz_inv(i,ks))))* &
2119 & ((tl_wl(i,k)-tl_z_w(i,j,ks-1))*hz_inv(i,ks)+ &
2120 & (wl(i,k)-z_w(i,j,ks-1))*tl_hz_inv(i,ks)- &
2122 & (wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks) &
2126 & (0.5_r8-sign(0.5_r8, &
2127 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
2130 fc(i,k-1)=fc(i,k-1)+ &
2133 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2135 & (br(i,ks)+bl(i,ks)- &
2136 & 2.0_r8*qc(i,ks))))
2137 tl_fc(i,k-1)=tl_fc(i,k-1)+ &
2138 & (tl_hz(i,j,ks)*cu+hz(i,j,ks)*tl_cu)* &
2140 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2142 & (br(i,ks)+bl(i,ks)- &
2143 & 2.0_r8*qc(i,ks))))+ &
2146 & tl_cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2148 & (br(i,ks)+bl(i,ks)- &
2149 & 2.0_r8*qc(i,ks)))+ &
2150 & cu*(0.5_r8*(tl_br(i,ks)-tl_bl(i,ks))+ &
2152 & (br(i,ks)+bl(i,ks)-2.0_r8*qc(i,ks))- &
2154 & (tl_br(i,ks)+tl_bl(i,ks)- &
2155 & 2.0_r8*tl_qc(i,ks))))- &
2158 & (2.0_r8*bl(i,ks)+ &
2159 & cu*(1.5_r8*(br(i,ks)-bl(i,ks))- &
2160 & (4.5_r8-4.0_r8*cu)* &
2161 & (br(i,ks)+bl(i,ks)- &
2162 & 2.0_r8*qc(i,ks))))
2168 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2169 tl_bio(i,k,ibio)=tl_qc(i,k)+ &
2170 & (tl_fc(i,k)-tl_fc(i,k-1))*hz_inv(i,k)+ &
2171 & (fc(i,k)-fc(i,k-1))*tl_hz_inv(i,k)- &
2173 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2200 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
2201 tl_cff=tl_bio(i,k,ibio)-tl_bio_old(i,k,ibio)
2204 tl_t(i,j,k,nnew,ibio)=tl_t(i,j,k,nnew,ibio)+ &
2205 & tl_cff*hz(i,j,k)+cff*tl_hz(i,j,k)- &