88 & LBi, UBi, LBj, UBj, UBk, UBt, &
89 & IminS, ImaxS, JminS, JmaxS, &
105 integer,
intent(in) :: ng, tile
106 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
107 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
108 integer,
intent(in) :: nstp, nnew
112 real(r8),
intent(in) :: rmask(LBi:,LBj:)
114 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
115 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
116 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
117 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
120 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
122 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
123 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
124 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
125 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
130 integer,
parameter :: Nsink = 1
132 integer :: Iter, i, ibio, isink, itrc, itrmx, j, k, ks
134 integer,
dimension(Nsink) :: idsink
136 real(r8),
parameter :: eps = 1.0e-16_r8
138 real(r8) :: cff, cff1, cff2, cff3, dtdays
139 real(r8) :: cffL, cffR, cu, dltL, dltR
141 real(r8),
dimension(Nsink) :: Wbio
143 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
145 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
147 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
149 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
151 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
152 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
153 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
154 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WL
155 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WR
156 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL
157 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR
158 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qc
160#include "set_bounds.h"
185 j_loop :
DO j=jstr,jend
188 hz_inv(i,k)=1.0_r8/hz(i,j,k)
193 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
198 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
213 bio_old(i,k,ibio)=t(i,j,k,nstp,ibio)
222 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
223 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
224 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
225 & max(0.0_r8,eps-bio_old(i,k,
isdet))
229 IF (cff1.gt.0.0)
THEN
231 cff=t(i,j,k,nstp,itrmx)
233 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
235 cff=t(i,j,k,nstp,ibio)
243 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
244 & cff1*(sign(0.5_r8, &
245 & real(itrmx-ibio,r8)**2)+ &
247 & -real(itrmx-ibio,r8)**2))
252 bio(i,k,ibio)=bio_old(i,k,ibio)
312 iter_loop:
DO iter=1,
bioiter(ng)
319 cff=bio(i,k,
iphyt)* &
320 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
332 cff1=dtdays*
zoogr(ng)
333 cff2=dtdays*
phymr(ng)
353 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
354 cff2=dtdays*
zoomr(ng)
355 cff3=dtdays*
zoomd(ng)
360 & bio(i,k,
izoop)*cff2
362 & bio(i,k,
izoop)*cff3
368 cff1=dtdays*
detrr(ng)
369 cff2=1.0_r8/(1.0_r8+cff1)
374 & bio(i,k,
isdet)*cff1
386 sink_loop:
DO isink=1,nsink
396 qc(i,k)=bio(i,k,ibio)
402 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
407 dltr=hz(i,j,k)*fc(i,k)
408 dltl=hz(i,j,k)*fc(i,k-1)
409 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
416 IF ((dltr*dltl).le.0.0_r8)
THEN
419 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
421 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
434 cff=(dltr-dltl)*hz_inv3(i,k)
435 dltr=dltr-cff*hz(i,j,k+1)
436 dltl=dltl+cff*hz(i,j,k-1)
439 wr(i,k)=(2.0_r8*dltr-dltl)**2
440 wl(i,k)=(dltr-2.0_r8*dltl)**2
446 dltl=max(cff,wl(i,k ))
447 dltr=max(cff,wr(i,k+1))
448 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
454#if defined LINEAR_CONTINUATION
455 bl(i,
n(ng))=br(i,
n(ng)-1)
456 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
458 bl(i,
n(ng))=br(i,
n(ng)-1)
459 br(i,
n(ng))=1.5_r8*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
461 br(i,
n(ng))=qc(i,
n(ng))
462 bl(i,
n(ng))=qc(i,
n(ng))
463 br(i,
n(ng)-1)=qc(i,
n(ng))
465#if defined LINEAR_CONTINUATION
467 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
470 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
488 IF ((dltr*dltl).lt.0.0_r8)
THEN
491 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
493 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
515 cff=dtdays*abs(wbio(isink))
519 wl(i,k)=z_w(i,j,k-1)+cff
520 wr(i,k)=hz(i,j,k)*qc(i,k)
527 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
529 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
540 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
541 fc(i,k-1)=fc(i,k-1)+ &
544 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
546 & (br(i,ks)+bl(i,ks)- &
552 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
578 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
579 t(i,j,k,nnew,ibio)=t(i,j,k,nnew,ibio)+cff*hz(i,j,k)