114 & LBi, UBi, LBj, UBj, &
115 & IminS, ImaxS, JminS, JmaxS, &
117 & h, z_r, z_w, angler, ZoBot, &
118#if defined SSW_CALC_UB
123 & Dwave, Pwave_bot, &
129#if defined SSW_LOGINT_STOKES
130 & u_stokes, v_stokes, &
132#if defined SSW_CALC_UB
136 & Ubot, Vbot, Ur, Vr, &
139 & bustrcwmax, bvstrcwmax, &
157 integer,
intent(in) :: ng, tile
158 integer,
intent(in) :: LBi, UBi, LBj, UBj
159 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
160 integer,
intent(in) :: nrhs
163 integer,
intent(inout) :: Iconv(LBi:,LBj:)
165 real(r8),
intent(in) :: h(LBi:,LBj:)
166 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
167 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
168 real(r8),
intent(in) :: angler(LBi:,LBj:)
169 real(r8),
intent(in) :: ZoBot(LBi:,LBj:)
170# if defined SSW_CALC_UB
171 real(r8),
intent(in) :: Hwave(LBi:,LBj:)
173 real(r8),
intent(in) :: Uwave_rms(LBi:,LBj:)
175 real(r8),
intent(in) :: Dwave(LBi:,LBj:)
176 real(r8),
intent(in) :: Pwave_bot(LBi:,LBj:)
178 real(r8),
intent(in) :: bedldu(LBi:,LBj:,:)
179 real(r8),
intent(in) :: bedldv(LBi:,LBj:,:)
181 real(r8),
intent(inout) :: bottom(LBi:,LBj:,:)
182 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
183 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
184 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
185# if defined SSW_LOGINT_STOKES
186 real(r8),
intent(in) :: u_stokes(LBi:,LBj:,:)
187 real(r8),
intent(in) :: v_stokes(LBi:,LBj:,:)
189# if defined SSW_CALC_UB
190 real(r8),
intent(in) :: zeta(LBi:,LBj:,:)
192 real(r8),
intent(out) :: Ubot(LBi:,LBj:)
193 real(r8),
intent(out) :: Vbot(LBi:,LBj:)
194 real(r8),
intent(out) :: Ur(LBi:,LBj:)
195 real(r8),
intent(out) :: Vr(LBi:,LBj:)
196 real(r8),
intent(out) :: bustrc(LBi:,LBj:)
197 real(r8),
intent(out) :: bvstrc(LBi:,LBj:)
198 real(r8),
intent(out) :: bustrw(LBi:,LBj:)
199 real(r8),
intent(out) :: bvstrw(LBi:,LBj:)
200 real(r8),
intent(out) :: bustrcwmax(LBi:,LBj:)
201 real(r8),
intent(out) :: bvstrcwmax(LBi:,LBj:)
202 real(r8),
intent(out) :: bustr(LBi:,LBj:)
203 real(r8),
intent(out) :: bvstr(LBi:,LBj:)
205 integer,
intent(inout) :: Iconv(LBi:UBi,LBj:UBj)
207 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
208 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
209 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
210 real(r8),
intent(in) :: angler(LBi:UBi,LBj:UBj)
211 real(r8),
intent(in) :: ZoBot(LBi:UBi,LBj:UBj)
212# if defined SSW_CALC_UB
213 real(r8),
intent(in) :: Hwave(LBi:UBi,LBj:UBj)
215 real(r8),
intent(in) :: Uwave_rms(LBi:UBi,LBj:UBj)
217 real(r8),
intent(in) :: Dwave(LBi:UBi,LBj:UBj)
218 real(r8),
intent(in) :: Pwave_bot(LBi:UBi,LBj:UBj)
220 real(r8),
intent(in) :: bedldu(LBi:UBi,LBj:UBj,1:NST)
221 real(r8),
intent(in) :: bedldv(LBi:UBi,LBj:UBj,1:NST)
223 real(r8),
intent(inout) :: bottom(LBi:UBi,LBj:UBj,MBOTP)
224 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
225 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
226 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
227# if defined SSW_LOGINT_STOKES
228 real(r8),
intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
229 real(r8),
intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
231# if defined SSW_CALC_UB
232 real(r8),
intent(in) :: zeta(LBi:UBi,LBj:UBj,3)
234 real(r8),
intent(out) :: Ubot(LBi:UBi,LBj:UBj)
235 real(r8),
intent(out) :: Vbot(LBi:UBi,LBj:UBj)
236 real(r8),
intent(out) :: Ur(LBi:UBi,LBj:UBj)
237 real(r8),
intent(out) :: Vr(LBi:UBi,LBj:UBj)
238 real(r8),
intent(out) :: bustrc(LBi:UBi,LBj:UBj)
239 real(r8),
intent(out) :: bvstrc(LBi:UBi,LBj:UBj)
240 real(r8),
intent(out) :: bustrw(LBi:UBi,LBj:UBj)
241 real(r8),
intent(out) :: bvstrw(LBi:UBi,LBj:UBj)
242 real(r8),
intent(out) :: bustrcwmax(LBi:UBi,LBj:UBj)
243 real(r8),
intent(out) :: bvstrcwmax(LBi:UBi,LBj:UBj)
244 real(r8),
intent(out) :: bustr(LBi:UBi,LBj:UBj)
245 real(r8),
intent(out) :: bvstr(LBi:UBi,LBj:UBj)
252 integer :: Iter, i, j, k
254 real(r8),
parameter :: eps = 1.0e-10_r8
256 real(r8) :: Kbh, Kbh2, Kdh
257 real(r8) :: taucr, wsedr, tstar, coef_st
258 real(r8) :: coef_b1, coef_b2, coef_b3, d0
259 real(r8) :: dolam, dolam1, doeta1, doeta2, fdo_etaano
260 real(r8) :: lamorb, lamanorb
261 real(r8) :: m_ubr, m_wr, m_ucr, m_zr, m_phicw, m_kb
262 real(r8) :: m_ustrc, m_ustrwm, m_ustrr, m_fwc, m_zoa, m_dwc
264 real(r8) :: Kb, Kdelta, Ustr
265 real(r8) :: anglec, anglew
266 real(r8) :: cff, cff1, cff2, cff3, og, fac, fac1, fac2
267 real(r8) :: sg_ab, sg_abokb, sg_a1, sg_b1, sg_chi, sg_c1, d50
268 real(r8) :: sg_epsilon, ssw_eta, sg_fofa, sg_fofb, sg_fofc, sg_fwm
269 real(r8) :: sg_kbs, ssw_lambda, sg_mu, sg_phicw, sg_ro, sg_row
270 real(r8) :: sg_shdnrm, sg_shld, sg_shldcr, sg_scf, rhos, sg_star
271 real(r8) :: sg_ub, sg_ubokur, sg_ubouc, sg_ubouwm, sg_ur
272 real(r8) :: sg_ustarc, sg_ustarcw, sg_ustarwm, sg_znot, sg_znotp
273 real(r8) :: sg_zr, sg_zrozn, sg_z1, sg_z1ozn, sg_z2, z1, z2
274 real(r8) :: zoMIN, zoMAX
277 real(r8),
parameter :: twopi=2.0_r8*
pi
279 real(r8),
parameter :: absolute_zoMIN = 5.0d-5
281 real(r8),
parameter :: Cd_fd = 0.5_r8
283 real(r8),
parameter :: K1 = 0.6666666666_r8
284 real(r8),
parameter :: K2 = 0.3555555555_r8
285 real(r8),
parameter :: K3 = 0.1608465608_r8
286 real(r8),
parameter :: K4 = 0.0632098765_r8
287 real(r8),
parameter :: K5 = 0.0217540484_r8
288 real(r8),
parameter :: K6 = 0.0065407983_r8
290 real(r8),
parameter :: coef_a1=0.095_r8
291 real(r8),
parameter :: coef_a2=0.442_r8
292 real(r8),
parameter :: coef_a3=2.280_r8
294#if defined GM82_RIPRUF
295 real(r8),
parameter :: ar = 27.7_r8/30.0_r8
296#elif defined N92_RIPRUF
297 real(r8),
parameter :: ar = 0.267_r8
298#elif defined R88_RIPRUF
299 real(r8),
parameter :: ar = 0.533_r8
301 no ripple roughness coeff. chosen
304 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ab
305 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Fwave_bot
306 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Tauc
307 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Tauw
308 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Taucwmax
309 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ur_sg
310 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vr_sg
311 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ub
312 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ucur
313 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Umag
314 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vcur
315 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Zr
316 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: phic
317 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: phicw
318 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rheight
319 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rlength
320 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: u100
321 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: znot
322 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: znotc
323 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zoN
324 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zoST
325 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zoBF
326 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zoDEF
327 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zoBIO
328 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: thck_wbl
329#if defined BEDLOAD_VANDERA_MADSEN_UDELTA
330 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ksd_wbl
331 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ustrc_wbl
333#if defined BEDLOAD_VANDERA_MADSEN_UDELTA || \
334 defined bedload_vandera_direct_udelta
335 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: udelta_wbl
336 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Zr_wbl
337 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: phic_sgwbl
340 real(r8),
dimension(1:N(ng)) :: Urz, Vrz
341#if defined BEDLOAD_VANDERA_MADSEN_UDELTA || \
342 defined bedload_vandera_direct_udelta
343 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ur_sgwbl
344 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vr_sgwbl
345 real(r8) :: Ucur_sgwbl, Vcur_sgwbl
348#include "set_bounds.h"
359 zr(i,j)=z_r(i,j,1)-z_w(i,j,0)
361#if defined SSW_LOGINT
363 dstp=z_r(i,j,n(ng))-z_w(i,j,0)
365# if defined SSW_LOGINT_DIRECT
369 cff1=min(0.9_r8*dstp, max(zr(i,j), sg_zwbl(ng)))
370# elif defined SSW_LOGINT_WBL
374 cff1=min(0.98_r8*dstp,max(zr(i,j), bottom(i,j,idtbl)*1.1_r8))
385 urz(k)=0.5_r8*(u(i,j,k,nrhs)+u(i+1,j,k,nrhs))
386 vrz(k)=0.5_r8*(v(i,j,k,nrhs)+v(i,j+1,k,nrhs))
387# ifdef SSW_LOGINT_STOKES
388 urz(k)=urz(k)+0.5_r8*(u_stokes(i,j,k)+u_stokes(i+1,j,k))
389 vrz(k)=vrz(k)+0.5_r8*(v_stokes(i,j,k)+v_stokes(i,j+1,k))
394 & z_r(i,j,:), z_w(i,j,:), &
397 & ur_sg(i,j), vr_sg(i,j) )
403 ur_sg(i,j)=0.5_r8*(u(i,j,1,nrhs)+u(i+1,j,1,nrhs))
404 vr_sg(i,j)=0.5_r8*(v(i,j,1,nrhs)+v(i,j+1,1,nrhs))
405# ifdef SSW_LOGINT_STOKES
406 ur_sg(i,j)=ur_sg(i,j)+0.5_r8*(u_stokes(i,j,1)+u_stokes(i+1,j,1))
407 vr_sg(i,j)=vr_sg(i,j)+0.5_r8*(v_stokes(i,j,1)+v_stokes(i,j+1,1))
424 fwave_bot(i,j)=twopi/max(pwave_bot(i,j),1.0_r8)
426 kdh=(h(i,j)+zeta(i,j,nrhs))*fwave_bot(i,j)**2/
g
428 & kdh/(1.0_r8+kdh*(k1+kdh*(k2+kdh*(k3+kdh*(k4+ &
429 & kdh*(k5+k6*kdh))))))
431 ab(i,j)=0.5_r8*hwave(i,j)/sinh(kbh)+eps
432 ub(i,j)=fwave_bot(i,j)*ab(i,j)+eps
434 ub(i,j)=max(uwave_rms(i,j),0.0_r8)+eps
435 ab(i,j)=ub(i,j)/fwave_bot(i,j)+eps
443 umag(i,j)=sqrt(ucur(i,j)*ucur(i,j)+vcur(i,j)*vcur(i,j)+eps)
447 IF (ucur(i,j).eq.0.0_r8)
THEN
448 phic(i,j)=0.5_r8*
pi*sign(1.0_r8,vcur(i,j))
450 phic(i,j)=atan2(vcur(i,j),ucur(i,j))
452 phicw(i,j)=1.5_r8*
pi-dwave(i,j)-phic(i,j)-angler(i,j)
464 d50=bottom(i,j,
isd50)
465 rhos=bottom(i,j,
idens)/(rho(i,j,1)+1000.0_r8)
466 wsedr=bottom(i,j,
iwsed)
467 taucr=bottom(i,j,
itauc)
468 tauc(i,j)=sqrt(bustrc(i,j)**2+bvstrc(i,j)**2)
469 tauw(i,j)=sqrt(bustrw(i,j)**2+bvstrw(i,j)**2)
470 taucwmax(i,j)=sqrt( bustrcwmax(i,j)**2+bvstrcwmax(i,j)**2)
472 rheight(i,j)=bottom(i,j,
irhgt)
473 rlength(i,j)=bottom(i,j,
irlen)
475 zomin=max(absolute_zomin,2.5_r8*d50/30.0_r8)
479 zon(i,j)=min(max(2.5_r8*d50/30.0_r8, zomin ),zomax)
484 zodef(i,j)=zobot(i,j)
492 tstar=taucwmax(i,j)/(taucr+eps)
493 IF (tstar.lt.1.0_r8)
THEN
495 zobf(i,j)=ar*rheight(i,j)**2/(rlength(i,j)+eps)
503 coef_st=0.0204_r8*log(100.0_r8*d50+eps)**2+ &
504 & 0.0220_r8*log(100.0_r8*d50+eps)+0.0709_r8
505 zost(i,j)=0.056_r8*d50*0.68_r8*tstar/ &
506 & (1.0_r8+coef_st*tstar)
507 IF (zost(i,j).lt.0.0_r8)
THEN
510 &
'Warning zoST < 0: tstar, d50, coef_st:'
511 WRITE (
stdout,*) tstar, d50, coef_st
518 coef_b1=1.0_r8/coef_a1
519 coef_b2=0.5_r8*(1.0_r8 + coef_a2)*coef_b1
520 coef_b3=coef_b2**2-coef_a3*coef_b1
522 IF ((d0/d50).gt.13000.0_r8)
THEN
524 rlength(i,j)=535.0_r8*d50
526 dolam1=d0/(535.0_r8*d50)
527 doeta1=exp(coef_b2-sqrt(coef_b3-coef_b1*log(dolam1)))
529 lamanorb=535.0_r8*d50
530 IF (doeta1.lt.20.0_r8)
THEN
532 ELSE IF (doeta1.gt.100.0_r8)
THEN
535 fdo_etaano=-log(lamorb/lamanorb)* &
536 & log(0.01_r8*doeta1)/log(5.0_r8)
537 dolam=dolam1*exp(-fdo_etaano)
539 doeta2=exp(coef_b2-sqrt(coef_b3-coef_b1*log(dolam)))
540 rheight(i,j)=d0/doeta2
541 rlength(i,j)=d0/dolam
546 zobf(i,j)=ar*rheight(i,j)**2/rlength(i,j)
559 IF (zodef(i,j).lt.absolute_zomin)
THEN
560 zodef(i,j)=absolute_zomin
562 WRITE (
stdout,*)
' Warning: default zo < 0.05 mm,', &
563 &
' replaced with: ', zodef
573 zo=min(max(zo,zomin),zomax)
575 cff1=
vonkar/log(zr(i,j)/zo)
577 tauc(i,j)=cff2*umag(i,j)*umag(i,j)
579 taucwmax(i,j)=tauc(i,j)
582#if defined BEDLOAD_VANDERA_MADSEN_UDELTA
584 ustrc_wbl(i,j)=sqrt(tauc(i,j)+eps)
587 IF ((umag(i,j).le.eps).and.(ub(i,j).ge.eps))
THEN
592 sg_abokb=ab(i,j)/(30.0_r8*zo)
594 IF ((sg_abokb.gt.0.2_r8).and.(sg_abokb.le.100.0_r8))
THEN
595 sg_fwm=exp(-8.82_r8+7.02_r8*sg_abokb**(-0.078_r8))
596 ELSE IF (sg_abokb.gt.100.0_r8)
THEN
597 sg_fwm=exp(-7.30_r8+5.61_r8*sg_abokb**(-0.109_r8))
600 tauw(i,j)= 0.5_r8*sg_fwm*ub(i,j)*ub(i,j)
601 taucwmax(i,j)=tauw(i,j)
604 ELSE IF ((umag(i,j).gt.eps).and.(ub(i,j).ge.eps).and. &
605 & ((zr(i,j)/zo).le.1.0_r8))
THEN
610 WRITE (
stdout,*)
' Warning: w-c calcs ignored because', &
613 ELSE IF ((umag(i,j).gt.eps).and.(ub(i,j).ge.eps).and. &
614 & ((zr(i,j)/zo).gt.1.0_r8))
THEN
620 sg_ubokur=ub(i,j)/(
sg_kappa*umag(i,j))
624 CALL sg_bstress (sg_row, sg_zrozn, sg_phicw, sg_ubokur, &
625 & sg_a1, sg_mu, sg_epsilon, sg_ro, sg_fofa)
626 sg_abokb=ab(i,j)/(30.0_r8*zo)
627 IF (sg_abokb.le.100.0_r8)
THEN
628 sg_fwm=exp(-8.82_r8+7.02_r8*sg_abokb**(-0.078_r8))
630 sg_fwm=exp(-7.30_r8+5.61_r8*sg_abokb**(-0.109_r8))
632 sg_ubouwm=sqrt(2.0_r8/sg_fwm)
637 CALL sg_purewave (sg_row, sg_ubouwm, sg_znotp, sg_ro)
644 sg_c1=0.5_r8*(sg_a1+sg_b1)
645 CALL sg_bstress (sg_row, sg_zrozn, sg_phicw, sg_ubokur, &
646 & sg_c1, sg_mu, sg_epsilon, sg_ro, sg_fofc)
653 IF ((sg_fofb*sg_fofc).lt.0.0_r8)
THEN
658 sg_c1=0.5_r8*(sg_a1+sg_b1)
659 CALL sg_bstress (sg_row, sg_zrozn, sg_phicw, sg_ubokur, &
660 & sg_c1, sg_mu, sg_epsilon, sg_ro, &
662 iterate=(sg_b1-sg_c1) .ge.
sg_tol
663 IF (iterate) iconv(i,j)=iter
670 sg_ustarcw=ub(i,j)/sg_ubouc
671 sg_ustarwm=sg_mu*sg_ustarcw
673 sg_ustarc=max(sqrt(tauc(i,j)),sg_epsilon*sg_ustarcw)
674 tauc(i,j)=sg_ustarc*sg_ustarc
675 tauw(i,j)=sg_ustarwm*sg_ustarwm
676 taucwmax(i,j)=sqrt((tauc(i,j)+ &
677 & tauw(i,j)*cos(phicw(i,j)))**2+ &
678 & (tauw(i,j)*sin(phicw(i,j)))**2)
682 IF (sg_epsilon.gt.0.0_r8)
THEN
684 sg_z2=sg_z1/sg_epsilon
687 & exp(-(1.0_r8-sg_epsilon+ &
688 & sg_epsilon*log(sg_z1ozn)))
693 u100(i,j)=sg_ustarc* &
694 & (log(
sg_z100/sg_z2)+1.0_r8-sg_epsilon+ &
695 & sg_epsilon*log(sg_z1ozn))/
sg_kappa
696 ELSE IF ((
sg_z100.le.sg_z2).and.(zr(i,j).gt.sg_z1))
THEN
697 u100(i,j)=sg_ustarc*sg_epsilon* &
700 u100(i,j)=sg_ustarc*sg_epsilon* &
711 dstp=z_r(i,j,n(ng))-z_w(i,j,0)
712 CALL madsen94 (m_ubr, m_wr, m_ucr, &
713 & m_zr, m_phicw, m_kb, dstp, &
714 & m_ustrc, m_ustrwm, m_ustrr, m_fwc, m_zoa, &
716 tauc(i,j)=m_ustrc*m_ustrc
717 tauw(i,j)=m_ustrwm*m_ustrwm
718 taucwmax(i,j)=m_ustrr*m_ustrr
719 znotc(i,j)=min( m_zoa, zomax )
720 u100(i,j)=(m_ustrc/
vonkar)*log(1.0_r8/m_zoa)
723#if defined SSW_FORM_DRAG_COR
724 IF (rheight(i,j).gt.(zon(i,j)+zost(i,j)))
THEN
725 coef_fd=0.5_r8*cd_fd*(rheight(i,j)/rlength(i,j))* &
727 & (log(rheight(i,j)/ &
728 & (zon(i,j)+zost(i,j)))-1.0_r8)**2
729 taucwmax(i,j)=taucwmax(i,j)/(1.0_r8+coef_fd)
730 taucwmax(i,j)=taucwmax(i,j)*(1.0_r8+8.0_r8* &
731 & rheight(i,j)/rlength(i,j))
734#if defined BEDLOAD_VANDERA_MADSEN_UDELTA
736 ustrc_wbl(i,j)=m_ustrc
742#if defined BEDLOAD_VANDERA_MADSEN_UDELTA
752 dstp=z_r(i,j,n(ng))-z_w(i,j,0)
757 cff=min( 0.98_r8*dstp, thck_wbl(i,j) )
762 cff1=max(cff, 1.1_r8*ksd_wbl(i,j))
763 cff2=log(cff1/ksd_wbl(i,j))
764 udelta_wbl(i,j)=(ustrc_wbl(i,j)/
vonkar)*cff2
767 urz(k)=0.5_r8*(u(i,j,k,nrhs)+u(i+1,j,k,nrhs))
768 vrz(k)=0.5_r8*(v(i,j,k,nrhs)+v(i,j+1,k,nrhs))
769# ifdef SSW_LOGINT_STOKES
770 urz(k)=urz(k)+0.5_r8*(u_stokes(i,j,k)+u_stokes(i+1,j,k))
771 vrz(k)=vrz(k)+0.5_r8*(v_stokes(i,j,k)+v_stokes(i,j+1,k))
776 & z_r(i,j,:), z_w(i,j,:), &
779 & ur_sgwbl(i,j), vr_sgwbl(i,j) )
783 ucur_sgwbl=ur_sgwbl(i,j)
784 vcur_sgwbl=vr_sgwbl(i,j)
786 IF (ucur_sgwbl.eq.0.0_r8)
THEN
787 phic_sgwbl(i,j)=0.5_r8*
pi*sign(1.0_r8,vcur_sgwbl)
789 phic_sgwbl(i,j)=atan2(vcur_sgwbl,ucur_sgwbl)
794#if defined BEDLOAD_VANDERA_DIRECT_UDELTA
802 dstp=z_r(i,j,n(ng))-z_w(i,j,0)
803 cff=min( 0.98_r8*dstp, sg_zwbl(ng) )
805 urz(k)=0.5_r8*(u(i,j,k,nrhs)+u(i+1,j,k,nrhs))
806 vrz(k)=0.5_r8*(v(i,j,k,nrhs)+v(i,j+1,k,nrhs))
807# ifdef SSW_LOGINT_STOKES
808 urz(k)=urz(k)+0.5_r8*(u_stokes(i,j,k)+u_stokes(i+1,j,k))
809 vrz(k)=vrz(k)+0.5_r8*(v_stokes(i,j,k)+v_stokes(i,j+1,k))
814 & z_r(i,j,:), z_w(i,j,:), &
817 & ur_sgwbl(i,j), vr_sgwbl(i,j) )
821 ucur_sgwbl=ur_sgwbl(i,j)
822 vcur_sgwbl=vr_sgwbl(i,j)
823 udelta_wbl(i,j)=sqrt(ur_sgwbl(i,j)*ur_sgwbl(i,j)+ &
824 & vr_sgwbl(i,j)*vr_sgwbl(i,j)+eps)
826 IF (ucur_sgwbl.eq.0.0_r8)
THEN
827 phic_sgwbl(i,j)=0.5_r8*
pi*sign(1.0_r8,vcur_sgwbl)
829 phic_sgwbl(i,j)=atan2(vcur_sgwbl,ucur_sgwbl)
843 anglec=0.5_r8*(ur_sg(i,j)+ur_sg(i-1,j))/ &
844 & (0.5_r8*(umag(i-1,j)+umag(i,j)))
845 bustr(i,j)=0.5_r8*(tauc(i-1,j)+tauc(i,j))*anglec
847 cff2=0.75_r8*0.5_r8*(z_w(i-1,j,1)+z_w(i,j,1)- &
848 & z_w(i-1,j,0)-z_w(i,j,0))
849 bustr(i,j)=sign(1.0_r8,bustr(i,j))*min(abs(bustr(i,j)), &
850 & abs(u(i,j,1,nrhs))*cff2/
dt(ng))
856 anglec=0.5_r8*(vr_sg(i,j)+vr_sg(i,j-1))/ &
857 & (0.5_r8*(umag(i,j-1)+umag(i,j)))
858 bvstr(i,j)=0.5_r8*(tauc(i,j-1)+tauc(i,j))*anglec
860 cff2=0.75_r8*0.5_r8*(z_w(i,j-1,1)+z_w(i,j,1)- &
861 & z_w(i,j-1,0)-z_w(i,j,0))
862 bvstr(i,j)=sign(1.0_r8,bvstr(i,j))*min(abs(bvstr(i,j)), &
863 & abs(v(i,j,1,nrhs))*cff2/
dt(ng))
869 anglec=ucur(i,j)/umag(i,j)
870 anglew=cos(1.5_r8*
pi-dwave(i,j)-angler(i,j))
871 bustrc(i,j)=tauc(i,j)*anglec
872 bustrw(i,j)=tauw(i,j)*anglew
873 bustrcwmax(i,j)=taucwmax(i,j)*anglew
874 ubot(i,j)=ub(i,j)*anglew
877 anglec=vcur(i,j)/umag(i,j)
878 anglew=sin(1.5_r8*
pi-dwave(i,j)-angler(i,j))
879 bvstrc(i,j)=tauc(i,j)*anglec
880 bvstrw(i,j)=tauw(i,j)*anglew
881 bvstrcwmax(i,j)=taucwmax(i,j)*anglew
882 vbot(i,j)=ub(i,j)*anglew
885 bottom(i,j,
irlen)=rlength(i,j)
886 bottom(i,j,
irhgt)=rheight(i,j)
887 bottom(i,j,
ibwav)=ab(i,j)
888 bottom(i,j,
izdef)=zodef(i,j)
889 bottom(i,j,
izapp)=znotc(i,j)
890 bottom(i,j,
iznik)=zon(i,j)
891 bottom(i,j,
izbio)=zobio(i,j)
892 bottom(i,j,
izbfm)=zobf(i,j)
893 bottom(i,j,
izbld)=zost(i,j)
894 bottom(i,j,
izwbl)=znot(i,j)
895 bottom(i,j,idtbl)=thck_wbl(i,j)
896#if defined BEDLOAD_VANDERA_MADSEN_UDELTA
897 bottom(i,j,idksd)=ksd_wbl(i,j)
898 bottom(i,j,idusc)=ustrc_wbl(i,j)
900#if defined BEDLOAD_VANDERA_MADSEN_UDELTA || \
901 defined bedload_vandera_direct_udelta
902 bottom(i,j,idubl)=udelta_wbl(i,j)
903 bottom(i,j,idzrw)=zr_wbl(i,j)
904 bottom(i,j,idpcx)=phic_sgwbl(i,j)
906 bottom(i,j,idpcx)=phic(i,j)
907 bottom(i,j,idpwc)=phicw(i,j)
916 & lbi, ubi, lbj, ubj, &
919 & lbi, ubi, lbj, ubj, &
922 & lbi, ubi, lbj, ubj, &
925 & lbi, ubi, lbj, ubj, &
928 & lbi, ubi, lbj, ubj, &
931 & lbi, ubi, lbj, ubj, &
934 & lbi, ubi, lbj, ubj, &
937 & lbi, ubi, lbj, ubj, &
940 & lbi, ubi, lbj, ubj, &
943 & lbi, ubi, lbj, ubj, &
946 & lbi, ubi, lbj, ubj, &
949 & lbi, ubi, lbj, ubj, &
952 & lbi, ubi, lbj, ubj, &
955 & lbi, ubi, lbj, ubj, &
958 & lbi, ubi, lbj, ubj, &
961 & lbi, ubi, lbj, ubj, &
964 & lbi, ubi, lbj, ubj, &
967 & lbi, ubi, lbj, ubj, &
970 & lbi, ubi, lbj, ubj, &
973 & lbi, ubi, lbj, ubj, &
976 & lbi, ubi, lbj, ubj, &
979 & lbi, ubi, lbj, ubj, &
981#if defined BEDLOAD_VANDERA_MADSEN_UDELTA
983 & lbi, ubi, lbj, ubj, &
986 & lbi, ubi, lbj, ubj, &
989 & lbi, ubi, lbj, ubj, &
992#if defined BEDLOAD_VANDERA_MADSEN_UDELTA || \
993 defined bedload_vandera_direct_udelta
995 & lbi, ubi, lbj, ubj, &
998 & lbi, ubi, lbj, ubj, &
1002 & lbi, ubi, lbj, ubj, &
1003 & bottom(:,:,idpwc))
1006 & lbi, ubi, lbj, ubj, &
1007 & bottom(:,:,idpcx))
1010 & lbi, ubi, lbj, ubj, &
1013 & bustr, bvstr, bustrc, bvstrc)
1015 & lbi, ubi, lbj, ubj, &
1018 & bustrw, bvstrw, bustrcwmax, bvstrcwmax)
1020 & lbi, ubi, lbj, ubj, &
1023 & ubot, vbot, ur, vr)
1025 & lbi, ubi, lbj, ubj, &
1028 & bottom(:,:,
irlen), &
1029 & bottom(:,:,
irhgt), &
1030 & bottom(:,:,
ibwav))
1032 & lbi, ubi, lbj, ubj, &
1035 & bottom(:,:,
izdef), &
1036 & bottom(:,:,
izapp), &
1037 & bottom(:,:,
iznik))
1039 & lbi, ubi, lbj, ubj, &
1042 & bottom(:,:,
izbio), &
1043 & bottom(:,:,
izbfm), &
1044 & bottom(:,:,
izbld), &
1045 & bottom(:,:,
izwbl))
1046# if defined BEDLOAD_VANDERA_MADSEN_UDELTA
1048 & lbi, ubi, lbj, ubj, &
1051 & bottom(:,:,idtbl), &
1052 & bottom(:,:,idksd), &
1053 & bottom(:,:,idusc))
1055# if defined BEDLOAD_VANDERA_MADSEN_UDELTA || \
1056 defined bedload_vandera_direct_udelta
1058 & lbi, ubi, lbj, ubj, &
1061 & bottom(:,:,idzrw), &
1062 & bottom(:,:,idubl))
1065 & lbi, ubi, lbj, ubj, &
1068 & bottom(:,:,idpwc))
1071 & lbi, ubi, lbj, ubj, &
1074 & bottom(:,:,idpcx))