120 & LBi, UBi, LBj, UBj, &
121 & IminS, ImaxS, JminS, JmaxS, &
123 & h, z_r, z_w, angler, ZoBot, &
129 & Dwave, Pwave_bot, &
130 & rho, u, v, bottom, &
131 & Ubot, Vbot, Ur, Vr, &
134 & bustrcwmax, bvstrcwmax, &
149 integer,
intent(in) :: ng, tile
150 integer,
intent(in) :: LBi, UBi, LBj, UBj
151 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
152 integer,
intent(in) :: nrhs
155 real(r8),
intent(in) :: h(LBi:,LBj:)
156 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
157 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
158 real(r8),
intent(in) :: angler(LBi:,LBj:)
159 real(r8),
intent(in) :: ZoBot(LBi:,LBj:)
161 real(r8),
intent(in) :: Hwave(LBi:,LBj:)
163 real(r8),
intent(in) :: Uwave_rms(LBi:,LBj:)
165 real(r8),
intent(in) :: Dwave(LBi:,LBj:)
166 real(r8),
intent(in) :: Pwave_bot(LBi:,LBj:)
167 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
168 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
169 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
171 real(r8),
intent(inout) :: bottom(LBi:,LBj:,:)
173 real(r8),
intent(out) :: Ubot(LBi:,LBj:)
174 real(r8),
intent(out) :: Vbot(LBi:,LBj:)
175 real(r8),
intent(out) :: Ur(LBi:,LBj:)
176 real(r8),
intent(out) :: Vr(LBi:,LBj:)
177 real(r8),
intent(out) :: bustrc(LBi:,LBj:)
178 real(r8),
intent(out) :: bvstrc(LBi:,LBj:)
179 real(r8),
intent(out) :: bustrw(LBi:,LBj:)
180 real(r8),
intent(out) :: bvstrw(LBi:,LBj:)
181 real(r8),
intent(out) :: bustrcwmax(LBi:,LBj:)
182 real(r8),
intent(out) :: bvstrcwmax(LBi:,LBj:)
183 real(r8),
intent(out) :: bustr(LBi:,LBj:)
184 real(r8),
intent(out) :: bvstr(LBi:,LBj:)
186 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
187 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
188 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
189 real(r8),
intent(in) :: angler(LBi:UBi,LBj:UBj)
190 real(r8),
intent(in) :: ZoBot(LBi:UBi,LBj:UBj)
192 real(r8),
intent(in) :: Hwave(LBi:UBi,LBj:UBj)
194 real(r8),
intent(in) :: Uwave_rms(LBi:UBi,LBj:UBj)
196 real(r8),
intent(in) :: Dwave(LBi:UBi,LBj:UBj)
197 real(r8),
intent(in) :: Pwave_bot(LBi:UBi,LBj:UBj)
198 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
199 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
200 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
202 real(r8),
intent(inout) :: bottom(LBi:UBi,LBj:UBj,MBOTP)
204 real(r8),
intent(out) :: Ubot(LBi:UBi,LBj:UBj)
205 real(r8),
intent(out) :: Vbot(LBi:UBi,LBj:UBj)
206 real(r8),
intent(out) :: Ur(LBi:UBi,LBj:UBj)
207 real(r8),
intent(out) :: Vr(LBi:UBi,LBj:UBj)
208 real(r8),
intent(out) :: bustrc(LBi:UBi,LBj:UBj)
209 real(r8),
intent(out) :: bvstrc(LBi:UBi,LBj:UBj)
210 real(r8),
intent(out) :: bustrw(LBi:UBi,LBj:UBj)
211 real(r8),
intent(out) :: bvstrw(LBi:UBi,LBj:UBj)
212 real(r8),
intent(out) :: bustrcwmax(LBi:UBi,LBj:UBj)
213 real(r8),
intent(out) :: bvstrcwmax(LBi:UBi,LBj:UBj)
214 real(r8),
intent(out) :: bustr(LBi:UBi,LBj:UBj)
215 real(r8),
intent(out) :: bvstr(LBi:UBi,LBj:UBj)
220 integer :: i, ised, j
222 real(r8),
parameter :: K1 = 0.6666666666_r8
223 real(r8),
parameter :: K2 = 0.3555555555_r8
224 real(r8),
parameter :: K3 = 0.1608465608_r8
225 real(r8),
parameter :: K4 = 0.0632098765_r8
226 real(r8),
parameter :: K5 = 0.0217540484_r8
227 real(r8),
parameter :: K6 = 0.0065407983_r8
229 real(r8),
parameter :: eps = 1.0e-10_r8
231 real(r8),
parameter :: scf1 = 0.5_r8 * 1.39_r8
232 real(r8),
parameter :: scf2 = 0.52_r8
233 real(r8),
parameter :: scf3 = 2.0_r8 - scf2
234 real(r8),
parameter :: scf4 = 1.2_r8
235 real(r8),
parameter :: scf5 = 3.2_r8
237 real(r8) :: twopi = 2.0_r8 *
pi
239 real(r8) :: RHbiomax = 0.006_r8
240 real(r8) :: RHmin = 0.001_r8
241 real(r8) :: RLmin = 0.01_r8
243 real(r8) :: Ab, Fwave_bot, Kbh, Kbh2, Kdh
244 real(r8) :: angleC, angleW, phiC, phiCW
245 real(r8) :: cff, cff1, cff2, d50, viscosity, wset
246 real(r8) :: RHbio, RHbiofac, RHmax, RLbio
247 real(r8) :: rhoWater, rhoSed
248 real(r8) :: rhgt, rlen, thetw
249 real(r8) :: Znot, ZnotC, Znot_bl, Znot_rip
250 real(r8) :: tau_bf, tau_ex, tau_en, tau_up, tau_w, tau_wb
251 real(r8) :: tau_c, tau_cb, tau_cs, tau_cw, tau_cwb, tau_cws
253 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ub
254 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ucur
255 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vcur
256 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Zr
257 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ur_mb
258 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vr_mb
259 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Umag
260 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tauC
261 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tauW
262 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tauCW
263 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tauCWmax
265#include "set_bounds.h"
271 rhbiofac=1.0_r8/exp(4.11_r8)
286 zr(i,j)=z_r(i,j,1)-z_w(i,j,0)
287 ur_mb(i,j)=u(i,j,1,nrhs)
288 vr_mb(i,j)=v(i,j,1,nrhs)
300 rlen=bottom(i,j,
irlen)
301 rhgt=bottom(i,j,
irhgt)
302 rhowater=rho(i,j,1)+1000.0_r8
303 viscosity=0.0013_r8/rhowater
311 fwave_bot=twopi/max(pwave_bot(i,j),0.05_r8)
312# ifdef MB_BBL_CALC_UB
313 kdh=h(i,j)*fwave_bot*fwave_bot/
g
315 & kdh/(1.0_r8+kdh*(k1+kdh*(k2+kdh*(k3+kdh*(k4+ &
316 & kdh*(k5+k6*kdh))))))
321 ab=0.5_r8*hwave(i,j)/sinh(kbh)+eps
324 ub(i,j)=uwave_rms(i,j)
325 ab=ub(i,j)/fwave_bot+eps
330 ucur(i,j)=0.5_r8*(ur_mb(i,j)+ur_mb(i+1,j))
331 vcur(i,j)=0.5_r8*(vr_mb(i,j)+vr_mb(i,j+1))
332 umag(i,j)=sqrt(ucur(i,j)*ucur(i,j)+vcur(i,j)*vcur(i,j))+eps
336 IF (ucur(i,j).ne.0.0_r8)
THEN
337 phic=atan2(vcur(i,j),ucur(i,j))
339 phic=0.5_r8*
pi*sign(1.0_r8,vcur(i,j))
341 phicw=1.5_r8*
pi-dwave(i,j)-phic-angler(i,j)
352 d50=bottom(i,j,
isd50)
353 tau_cb=bottom(i,j,
itauc)
354 wset=bottom(i,j,
iwsed)
355 rhosed=bottom(i,j,
idens)/rhowater
360 tau_up=0.172_r8*(rhosed-1.0_r8)*
g*(d50**0.624_r8)
364 tau_bf=0.79_r8*(viscosity**(-0.6_r8))* &
365 & (((rhosed-1.0_r8)*
g)**0.3_r8)*(d50**0.9_r8)*tau_cb
370 znot=max(zobot(i,j),znotc)
376 cff1=
vonkar/log(zr(i,j)/znot)
378 tauc(i,j)=cff2*umag(i,j)*umag(i,j)
380 cff1=
vonkar/log(zr(i,j)/znotc)
381 tau_cs=cff1*cff1*umag(i,j)*umag(i,j)
389 IF (ub(i,j).gt.0.01_r8)
THEN
395 tau_w=scf1*((znotc*fwave_bot)**scf2)*(ub(i,j)**scf3)
400 & (1.0_r8+scf4*((tau_w/(tau_w+tau_cs))**scf5))
405 tau_cws=sqrt((tau_cw+tau_w*cos(phicw))**2+ &
406 & (tau_w*sin(phicw))**2)
408 taucwmax(i,j)=tau_cws
413 tau_w=scf1*((znot*fwave_bot)**scf2)*(ub(i,j)**scf3)
415 & (1.0_r8+scf4*((tau_w/(tau_w+tauc(i,j)))**scf5))
427 tau_ex=max((tau_cws-tau_cb),0.0_r8)
428 cff=(1.0_r8/((rhosed-1.0_r8)*
g*d50))
429 znot_bl=17.4_r8*d50*(cff*tau_ex)**0.75_r8
438 cff1=
vonkar/log(zr(i,j)/znotc)
439 tau_c=cff1*cff1*umag(i,j)*umag(i,j)
440 tau_wb=scf1*((znotc*fwave_bot)**scf2)*(ub(i,j)**scf3)
441 tau_cw=tau_c*(1.0_r8+scf4*((tau_wb/(tau_wb+tau_c))**scf5))
446 tau_cwb=sqrt((tau_cw+tau_wb*cos(phicw))**2+ &
447 & (tau_wb*sin(phicw))**2)
448 taucwmax(i,j)=tau_cwb
461 IF (d50.ge.0.000063_r8)
THEN
466 rhgt=max(min(rhmax,rhgt),rhmin)
467 tau_en=max(tau_cws,tau_cws*(rlen/(rlen-
pi*rhgt))**2)
469 IF ((tau_cws.lt.tau_cb).and.(tau_en.ge.tau_cb))
THEN
470 rhgt=(19.6_r8*(sqrt(tau_cws/tau_cb))+20.9_r8)*d50
473 IF ((tau_cws.ge.tau_cb).and.(tau_cwb.lt.tau_bf))
THEN
474 rhgt=(22.15_r8*(sqrt(tau_cwb/tau_cb))+6.38_r8)*d50
477 IF ((tau_cwb.ge.tau_bf).and.(tau_cwb.lt.tau_up))
THEN
479 rhgt=0.15_r8*rlen*(sqrt(tau_up)-sqrt(tau_cwb))/ &
480 & (sqrt(tau_up)-sqrt(tau_bf ))
481 ELSE IF (tau_cwb.ge.tau_up)
THEN
485 rlen=bottom(i,j,
irlen)
486 rhgt=bottom(i,j,
irhgt)
505 IF (d50.lt.0.000063_r8)
THEN
507 thetw=tau_cws*(1.0_r8/((rhosed-1.0_r8)*
g*d50))
508 rhbio=(thetw**(-1.67_r8))*rlbio*rhbiofac
509 rhgt=min(rhbio,rhbiomax)
514# if defined MB_Z0RIP || defined MB_Z0BIO
519 znot_rip=0.92_r8*rhgt*rhgt/(max(rlen,rlmin))
527 cff1=
vonkar/log(zr(i,j)/znotc)
528 tau_c=cff1*cff1*umag(i,j)*umag(i,j)
529 tau_w=scf1*((znotc*fwave_bot)**scf2)*(ub(i,j)**scf3)
531 & (1.0_r8+scf4*((tau_w/(tau_w+tau_c))**scf5))
545 ELSE IF (ub(i,j).le.0.01_r8)
THEN
551 taucwmax(i,j)=tauc(i,j)
558 IF (tau_cs(i,j).gt.tau_up)
THEN
562 ELSE IF (tau_cs(i,j).lt.tau_cb)
THEN
563 rlen=bottom(i,j,
irlen)
564 rhgt=bottom(i,j,
irhgt)
567 rhgt=0.0308_r8*(rlen**1.19_r8)
572 znotc=znotc+0.92_r8*rhgt*rhgt/(max(rlen,rlmin))
575 cff1=
vonkar/log(zr(i,j)/znotc)
578 taucw(i,j)=cff2*umag(i,j)*umag(i,j)
586 bottom(i,j,
irlen)=rlen
587 bottom(i,j,
irhgt)=rhgt
588 bottom(i,j,
izdef)=znot
589 bottom(i,j,
izapp)=znotc
600 anglec=ur_mb(i,j)/(0.5*(umag(i-1,j)+umag(i,j)))
601 bustr(i,j)=0.5_r8*(taucw(i-1,j)+taucw(i,j))*anglec
603 cff2=0.75_r8*0.5_r8*(z_w(i-1,j,1)+z_w(i,j,1)- &
604 & z_w(i-1,j,0)-z_w(i,j,0))
605 bustr(i,j)=sign(1.0_r8,bustr(i,j))*min(abs(bustr(i,j)), &
606 & abs(u(i,j,1,nrhs))*cff2/
dt(ng))
612 anglec=vr_mb(i,j)/(0.5_r8*(umag(i,j-1)+umag(i,j)))
613 bvstr(i,j)=0.5_r8*(taucw(i,j-1)+taucw(i,j))*anglec
615 cff2=0.75_r8*0.5_r8*(z_w(i,j-1,1)+z_w(i,j,1)- &
616 & z_w(i,j-1,0)-z_w(i,j,0))
617 bvstr(i,j)=sign(1.0_r8,bvstr(i,j))*min(abs(bvstr(i,j)), &
618 & abs(v(i,j,1,nrhs))*cff2/
dt(ng))
624 anglec=ucur(i,j)/umag(i,j)
625 anglew=cos(1.5_r8*
pi-dwave(i,j)-angler(i,j))
626 bustrc(i,j)=taucw(i,j)*anglec
627 bustrw(i,j)=tauw(i,j)*anglew
628 bustrcwmax(i,j)=taucwmax(i,j)*anglew
629 ubot(i,j)=ub(i,j)*anglew
632 anglec=vcur(i,j)/umag(i,j)
633 anglew=sin(1.5_r8*
pi-dwave(i,j)-angler(i,j))
634 bvstrc(i,j)=taucw(i,j)*anglec
635 bvstrw(i,j)=tauw(i,j)*anglew
636 bvstrcwmax(i,j)=taucwmax(i,j)*anglew
637 vbot(i,j)=ub(i,j)*anglew
645 & lbi, ubi, lbj, ubj, &
648 & lbi, ubi, lbj, ubj, &
651 & lbi, ubi, lbj, ubj, &
654 & lbi, ubi, lbj, ubj, &
657 & lbi, ubi, lbj, ubj, &
660 & lbi, ubi, lbj, ubj, &
663 & lbi, ubi, lbj, ubj, &
666 & lbi, ubi, lbj, ubj, &
669 & lbi, ubi, lbj, ubj, &
672 & lbi, ubi, lbj, ubj, &
675 & lbi, ubi, lbj, ubj, &
678 & lbi, ubi, lbj, ubj, &
681 & lbi, ubi, lbj, ubj, &
684 & lbi, ubi, lbj, ubj, &
687 & lbi, ubi, lbj, ubj, &
690 & lbi, ubi, lbj, ubj, &
693 & lbi, ubi, lbj, ubj, &
698 & lbi, ubi, lbj, ubj, &
701 & bustr, bvstr, bustrc, bvstrc)
703 & lbi, ubi, lbj, ubj, &
706 & bustrw, bvstrw, bustrcwmax, bvstrcwmax)
708 & lbi, ubi, lbj, ubj, &
711 & ubot, vbot, ur, vr)
713 & lbi, ubi, lbj, ubj, &
716 & bottom(:,:,
ibwav), &
717 & bottom(:,:,
irhgt), &
720 & lbi, ubi, lbj, ubj, &
723 & bottom(:,:,
izdef), &