103 & LBi, UBi, LBj, UBj, UBk, UBt, &
104 & IminS, ImaxS, JminS, JmaxS, &
110#ifdef DAILY_SHORTWAVE
113 & srflx, CystIni, DIN_obs, &
126 integer,
intent(in) :: ng, tile
127 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
128 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
129 integer,
intent(in) :: nstp, nnew
133 real(r8),
intent(in) :: rmask(LBi:,LBj:)
135 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
136 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
137 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
138 real(r8),
intent(in) :: CystIni(LBi:,LBj:)
139 real(r8),
intent(in) :: DIN_obs(LBi:,LBj:,:)
140# ifdef DAILY_SHORTWAVE
141 real(r8),
intent(in) :: srflx_avg(LBi:,LBj:)
143 real(r8),
intent(in) :: srflx(LBi:,LBj:)
144 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
147 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
149 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
150 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
151 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
152 real(r8),
intent(in) :: CystIni(LBi:UBi,LBj:UBj)
153# ifdef DAILY_SHORTWAVE
154 real(r8),
intent(in) :: srflx_avg(LBi:UBi,LBj:UBj)
156 real(r8),
intent(in) :: srflx(LBi:UBi,LBj:UBj)
157 real(r8),
intent(in) :: DIN_ob(LBi:UBi,LBj:UBj,UBk)
158 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
163 integer,
parameter :: Nswim = 1
165 integer,
parameter :: NsedLayers = 10
167 integer :: Iter, i, ibio, iswim, itrc, j, k, ks, ksed
169 integer,
dimension(Nswim) :: idswim
171 real(r8) :: Cell_Flux, C_depth, DIN, E_flux, EndoScale
172 real(r8) :: Rad, RadScale
173 real(r8) :: GermD, GermL, G_DIN, G_light, G_rate, M_rate
174 real(r8) :: G_fac, S_fac, T_fac
175 real(r8) :: dtdays, oNsedLayers, salt, temp, wmig
178 real(r8) :: alpha, cff, cffL, cffR, deltaL, deltaR, dz, wdt
180 real(r8),
parameter :: eps = 1.0e-8_r8
182 real(r8),
dimension(Nswim) :: Wbio
184 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
186 real(r8),
dimension(IminS:ImaxS) :: Germ
188 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
189 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
191 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
192 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: aL
193 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: aR
194 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dL
195 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dR
196 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: r
198 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
199 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Light
208 real(r8),
parameter :: TC0 = 0.379_r8
209 real(r8),
parameter :: TC1 =-0.0961_r8
210 real(r8),
parameter :: TC2 = 0.0169_r8
211 real(r8),
parameter :: TC3 =-0.000536_r8
220 real(r8),
parameter :: SC0 =-0.693_r8
221 real(r8),
parameter :: SC1 = 0.186_r8
222 real(r8),
parameter :: SC2 =-0.00622_r8
223 real(r8),
parameter :: SC3 = 0.0000557_r8
225#include "set_bounds.h"
258 onsedlayers=1.0_r8/real(nsedlayers,r8)
262 j_loop :
DO j=jstr,jend
265 hz_inv(i,k)=1.0_r8/hz(i,j,k)
280 bio_old(i,k,ibio)=max(0.0_r8,t(i,j,k,nstp,ibio))
281 bio(i,k,ibio)=bio_old(i,k,ibio)
290 bio(i,k,
itemp)=min(t(i,j,k,nstp,
itemp),36.0_r8)
291 bio(i,k,
isalt)=max(0.0_r8,t(i,j,k,nstp,
isalt))
330 iter_loop:
DO iter=1,
bioiter(ng)
347 & (8.72_r8-1.50_r8)*0.5_r8* &
348 & (tanh(0.790_r8*temp-6.27_r8)+1.0_r8))*onsedlayers
350 & (4.26_r8-1.04_r8)*0.5_r8* &
351 & (tanh(0.394_r8*temp-3.33_r8)+1.0_r8))*onsedlayers
358# ifdef DAILY_SHORTWAVE
359 e_flux=radscale*srflx_avg(i,j)* &
360 & exp(
attw(ng)*z_w(i,j,0)- &
361 &
atts(ng)*
dg(ng)*(real(ksed,r8)-0.5) )
363 e_flux=radscale*srflx(i,j)* &
364 & exp(
attw(ng)*z_w(i,j,0)- &
365 &
atts(ng)*
dg(ng)*(real(ksed,r8)-0.5) )
367 IF (e_flux.gt.
e_light(ng))
THEN
368 germ(i)=germ(i)+germl
369 ELSE IF (e_flux.lt.
e_dark(ng))
THEN
370 germ(i)=germ(i)+germd
384 germ(i)=germ(i)*
dg(ng)*100.0_r8*endoscale
388 germ(i)=germ(i)*0.01_r8
394 cell_flux=cystini(i,j)* &
395 & germ(i)*hz_inv(i,1)
399 bio(i,1,
idino)=bio(i,1,
idino)+cell_flux*dtdays
418 t_fac=tc0+temp*(tc1+temp*(tc2+temp*tc3))
423 t_fac=0.254_r8-0.0327_r8*(5.0_r8-temp)
429 s_fac=sc0+salt*(sc1+salt*(sc2+salt*sc3))
437# ifdef DAILY_SHORTWAVE
438 rad=srflx_avg(i,j)*radscale*exp(
attw(ng)*z_r(i,j,k))
440 rad=srflx(i,j)*radscale*exp(
attw(ng)*z_r(i,j,k))
442 IF (z_r(i,j,k).gt.c_depth)
THEN
444 g_light=max(0.0_r8,cff*tanh(
g_eff(ng)*rad/cff)-
g_r(ng))
455 IF (z_r(i,j,k).gt.c_depth)
THEN
464 g_din=
gmax(ng)*g_fac*din/(max(
kn(ng),0.0_r8)+din)
469 g_rate=max(min(g_light,g_din),0.0_r8)
470 bio(i,k,
idino)=bio(i,k,
idino)/(1.0_r8-g_rate*dtdays)
487 bio(i,k,
idino)=bio(i,k,
idino)/(1.0_r8+m_rate*dtdays)
500 swim_loop:
DO iswim=1,nswim
504 fc(i,k)=(bio(i,k+1,ibio)-bio(i,k,ibio))/ &
505 & (hz(i,j,k+1)+hz(i,j,k))
511 deltar=hz(i,j,k)*fc(i,k )
512 deltal=hz(i,j,k)*fc(i,k-1)
513 IF (deltar*deltal.lt.0.0_r8)
THEN
517 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
520 IF (abs(deltar).gt.abs(cffl)) deltar=cffl
521 IF (abs(deltal).gt.abs(cffr)) deltal=cffr
522 cff=(deltar-deltal)/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
523 deltar=deltar-cff*hz(i,j,k+1)
524 deltal=deltal+cff*hz(i,j,k-1)
526 ar(i,k)=bio(i,k,ibio)+deltar
527 al(i,k)=bio(i,k,ibio)-deltal
529 dr(i,k)=(2.0_r8*deltar-deltal)**2
530 dl(i,k)=(2.0_r8*deltal-deltar)**2
542 ar(i,
n(ng))=bio(i,
n(ng),ibio)
543 al(i,
n(ng))=bio(i,
n(ng),ibio)
547 ar(i,1)=bio(i,1,ibio)
548 al(i,1)=bio(i,1,ibio)
559 al(i,
n(ng))=ar(i,
n(ng)-1)
561 ar(i,
n(ng))=1.5_r8*bio(i,
n(ng),ibio)-0.5_r8*al(i,
n(ng))
563 ar(i,
n(ng))=2.0_r8*bio(i,
n(ng),ibio)-al(i,
n(ng))
565 dr(i,
n(ng))=(2.0_r8*ar(i,
n(ng))+al(i,
n(ng))- &
566 & 3.0_r8*bio(i,
n(ng),ibio))**2
567 dl(i,
n(ng))=(3.0_r8*bio(i,
n(ng),ibio)- &
568 & 2.0_r8*al(i,
n(ng))-ar(i,
n(ng)))**2
572 al(i,1)=1.5_r8*bio(i,1,ibio)-0.5_r8*ar(i,1)
574 al(i,1)=2.0_r8*bio(i,1,ibio)-ar(i,1)
576 dr(i,1)=(2.0_r8*ar(i,1)+al(i,1)- &
577 & 3.0_r8*bio(i,1,ibio))**2
578 dl(i,1)=(3.0_r8*bio(i,1,ibio)- &
579 & 2.0_r8*al(i,1)-ar(i,1))**2
588 deltal=max(dl(i,k ),eps)
589 deltar=max(dr(i,k+1),eps)
590 r(i,k)=(deltar*ar(i,k)+deltal*al(i,k+1))/ &
596 r(i,
n(ng))=1.5_r8*bio(i,
n(ng),ibio)-0.5_r8*r(i,
n(ng)-1)
597 r(i,0 )=1.5_r8*bio(i,1 ,ibio)-0.5_r8*r(i,1 )
599 r(i,
n(ng))=2.0_r8*bio(i,
n(ng),ibio)-r(i,
n(ng)-1)
600 r(i,0 )=2.0_r8*bio(i,1 ,ibio)-r(i,1 )
613 deltar=r(i,k)-bio(i,k,ibio)
614 deltal=bio(i,k,ibio)-r(i,k-1)
617 IF (deltar*deltal.lt.0.0_r8)
THEN
620 ELSE IF (abs(deltar).gt.abs(cffl))
THEN
622 ELSE IF (abs(deltal).gt.abs(cffr))
THEN
625 ar(i,k)=bio(i,k,ibio)+deltar
626 al(i,k)=bio(i,k,ibio)-deltal
631 dl(i,k)=0.5_r8*(ar(i,k)-al(i,k))
632 dr(i,k)=0.5_r8*(ar(i,k)+al(i,k))-bio(i,k,ibio)
640 wdt=-wbio(iswim)*dtdays
643 IF (wdt.gt.0.0_r8)
THEN
662 fc(i,k)=dz*(cff+alpha*(cffl-cffr*(3.0_r8-2.0_r8*alpha)))
674 cff=(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
675 bio(i,k,ibio)=bio(i,k,ibio)+cff
701 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
702 t(i,j,k,nnew,ibio)=t(i,j,k,nnew,ibio)+cff*hz(i,j,k)