93 & LBi, UBi, LBj, UBj, UBk, UBt, &
94 & IminS, ImaxS, JminS, JmaxS, &
114 integer,
intent(in) :: ng, tile
115 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
116 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
117 integer,
intent(in) :: nstp, nnew
121 real(r8),
intent(in) :: rmask(LBi:,LBj:)
124 real(r8),
intent(in) :: h(LBi:,LBj:)
126 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
127 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
128 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
129 real(r8),
intent(in) :: srflx(LBi:,LBj:)
130 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
133 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
136 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
138 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
139 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
140 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
141 real(r8),
intent(in) :: srflx(LBi:UBi,LBj:UBj)
142 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
147 integer,
parameter :: Nsink = 2
149 integer :: Iter, i, ibio, isink, itime, itrc, iTrcMax, j, k, ks
151 integer,
dimension(Nsink) :: idsink
153 real(r8),
parameter :: MinVal = 1.0e-6_r8
155 real(r8) :: Att, ExpAtt, Itop, PAR
156 real(r8) :: cff, cff1, cff2, cff3, cff4, cff5, cff6, dtdays
157 real(r8) :: cffL, cffR, cu, dltL, dltR
160 real(r8) :: Nlimit, FNlim
161 real(r8) :: FNratio, FCratio, FCratioE, Flimit
162 real(r8) :: FeC2FeN, FeN2FeC
165 real(r8) :: FeNudgCoef
168 real(r8),
dimension(Nsink) :: Wbio
170 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
172 real(r8),
dimension(IminS:ImaxS) :: PARsur
174 real(r8),
dimension(NT(ng),2) :: BioTrc
176 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
177 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
179 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
181 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
182 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
183 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
184 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Light
185 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WL
186 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WR
187 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL
188 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR
189 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qc
191#include "set_bounds.h"
205#if defined IRON_LIMIT && defined IRON_RELAX
215 fen2fec=(16.0_r8/106.0_r8)*1.0e3_r8
216 fec2fen=(106.0_r8/16.0_r8)*1.0e-3_r8
232 j_loop :
DO j=jstr,jend
235 hz_inv(i,k)=1.0_r8/hz(i,j,k)
240 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
245 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
264 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
265 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)*hz_inv(i,k)
280 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
281 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
284 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
286 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
287 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
292 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
301 bio_old(i,k,ibio)=biotrc(ibio,nstp)
302 bio(i,k,ibio)=biotrc(ibio,nstp)
305#if defined IRON_LIMIT && defined IRON_RELAX
311 IF (h(i,j).le.
fehmin(ng))
THEN
388 iter_loop:
DO iter=1,
bioiter(ng)
394 IF (parsur(i).gt.0.0_r8)
THEN
402 & (z_w(i,j,k)-z_w(i,j,k-1))
405 par=itop*(1.0_r8-expatt)/att
447 fnratio=bio(i,k,
ifphy)/max(minval,bio(i,k,
iphyt))
448 fcratio=fnratio*fen2fec
450 flimit=fcratio*fcratio/ &
454 fnlim=min(1.0_r8,flimit/(bio(i,k,
ino3_)*nlimit))
456 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
457 cff=bio(i,k,
iphyt)* &
459 & cff1*cff4*light(i,k)*fnlim*nlimit
461 & cff1*cff4*light(i,k)/ &
472 fac=cff*bio(i,k,
ino3_)*fnratio/max(minval,bio(i,k,
ifdis))
479 cff5=dtdays*(fcratioe-fcratio)/
t_fe(ng)
480 cff6=bio(i,k,
iphyt)*cff5*fec2fen
481 IF (cff6.ge.0.0_r8)
THEN
482 cff=cff6/max(minval,bio(i,k,
ifdis))
487 cff=-cff6/max(minval,bio(i,k,
ifphy))
505 cff1=dtdays*
zoogr(ng)
509 cff=bio(i,k,
izoop)* &
510 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
514 & bio(i,k,
iphyt)*cff2*cff
532 cff1=1.0_r8/(1.0_r8+cff2+cff3)
537 & bio(i,k,
iphyt)*cff2
539 & bio(i,k,
iphyt)*cff3
553 cff1=1.0_r8/(1.0_r8+cff2+cff3)
558 & bio(i,k,
izoop)*cff2
560 & bio(i,k,
izoop)*cff3
566 cff2=dtdays*
detrr(ng)
567 cff1=1.0_r8/(1.0_r8+cff2)
572 & bio(i,k,
isdet)*cff2
584 sink_loop:
DO isink=1,nsink
594 qc(i,k)=bio(i,k,ibio)
600 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
605 dltr=hz(i,j,k)*fc(i,k)
606 dltl=hz(i,j,k)*fc(i,k-1)
607 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
614 IF ((dltr*dltl).le.0.0_r8)
THEN
617 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
619 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
632 cff=(dltr-dltl)*hz_inv3(i,k)
633 dltr=dltr-cff*hz(i,j,k+1)
634 dltl=dltl+cff*hz(i,j,k-1)
637 wr(i,k)=(2.0_r8*dltr-dltl)**2
638 wl(i,k)=(dltr-2.0_r8*dltl)**2
644 dltl=max(cff,wl(i,k ))
645 dltr=max(cff,wr(i,k+1))
646 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
652#if defined LINEAR_CONTINUATION
653 bl(i,
n(ng))=br(i,
n(ng)-1)
654 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
656 bl(i,
n(ng))=br(i,
n(ng)-1)
657 br(i,
n(ng))=1.5_r8*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
659 br(i,
n(ng))=qc(i,
n(ng))
660 bl(i,
n(ng))=qc(i,
n(ng))
661 br(i,
n(ng)-1)=qc(i,
n(ng))
663#if defined LINEAR_CONTINUATION
665 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
668 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
686 IF ((dltr*dltl).lt.0.0_r8)
THEN
689 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
691 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
713 cff=dtdays*abs(wbio(isink))
717 wl(i,k)=z_w(i,j,k-1)+cff
718 wr(i,k)=hz(i,j,k)*qc(i,k)
725 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
727 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
738 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
739 fc(i,k-1)=fc(i,k-1)+ &
742 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
744 & (br(i,ks)+bl(i,ks)- &
750 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
776 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
777 t(i,j,k,nnew,ibio)=t(i,j,k,nnew,ibio)+cff*hz(i,j,k)