164 & LBi, UBi, LBj, UBj, UBk, &
165 & IminS, ImaxS, JminS, JmaxS, &
166 & krhs, kstp, knew, &
171 & pmask, rmask, umask, vmask, &
174 & pmask_wet, pmask_full, &
175 & rmask_wet, rmask_full, &
176 & umask_wet, umask_full, &
177 & vmask_wet, vmask_full, &
183 & om_u, om_v, on_u, on_v, omn, pm, pn, &
184#if defined CURVGRID && defined UV_ADV
187#if defined UV_VIS2 || defined UV_VIS4
188 & pmon_r, pnom_r, pmon_p, pnom_p, &
189 & om_r, on_r, om_p, on_p, &
191 & visc2_p, visc2_r, &
194 & visc4_p, visc4_r, &
197#if defined SEDIMENT && defined SED_MORPH
203 & rurol2d, rvrol2d, &
205# ifdef BOTTOM_STREAMING
206 & rubst2d, rvbst2d, &
208# ifdef SURFACE_STREAMING
209 & russt2d, rvsst2d, &
211 & rubrk2d, rvbrk2d, &
212 & rukvf2d, rvkvf2d, &
215 & ubar_stokes, vbar_stokes, &
217#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
221 & sustr, svstr, bustr, bvstr, &
229 & DU_avg1, DU_avg2, &
230 & DV_avg1, DV_avg2, &
232 & rufrc, rvfrc, ru, rv, &
235 & DiaU2wrk, DiaV2wrk, &
236 & DiaRUbar, DiaRVbar, &
238 & DiaU2int, DiaV2int, &
239 & DiaRUfrc, DiaRVfrc, &
242#if defined NESTING && !defined SOLVE3D
243 & DU_flux, DV_flux, &
245 & rubar, rvbar, rzeta, &
253#if defined SEDIMENT && defined SED_MORPH
272 integer,
intent(in ) :: ng, tile
273 integer,
intent(in ) :: LBi, UBi, LBj, UBj, UBk
274 integer,
intent(in ) :: IminS, ImaxS, JminS, JmaxS
275 integer,
intent(in ) :: krhs, kstp, knew
277 integer,
intent(in ) :: nstp, nnew
282 real(r8),
intent(in ) :: pmask(LBi:,LBj:)
283 real(r8),
intent(in ) :: rmask(LBi:,LBj:)
284 real(r8),
intent(in ) :: umask(LBi:,LBj:)
285 real(r8),
intent(in ) :: vmask(LBi:,LBj:)
287 real(r8),
intent(in ) :: fomn(LBi:,LBj:)
288# if defined SEDIMENT && defined SED_MORPH
289 real(r8),
intent(inout) :: h(LBi:,LBj:)
291 real(r8),
intent(in ) :: h(LBi:,LBj:)
293 real(r8),
intent(in ) :: om_u(LBi:,LBj:)
294 real(r8),
intent(in ) :: om_v(LBi:,LBj:)
295 real(r8),
intent(in ) :: on_u(LBi:,LBj:)
296 real(r8),
intent(in ) :: on_v(LBi:,LBj:)
297 real(r8),
intent(in ) :: omn(LBi:,LBj:)
298 real(r8),
intent(in ) :: pm(LBi:,LBj:)
299 real(r8),
intent(in ) :: pn(LBi:,LBj:)
300# if defined CURVGRID && defined UV_ADV
301 real(r8),
intent(in ) :: dndx(LBi:,LBj:)
302 real(r8),
intent(in ) :: dmde(LBi:,LBj:)
304# if defined UV_VIS2 || defined UV_VIS4
305 real(r8),
intent(in ) :: pmon_r(LBi:,LBj:)
306 real(r8),
intent(in ) :: pnom_r(LBi:,LBj:)
307 real(r8),
intent(in ) :: pmon_p(LBi:,LBj:)
308 real(r8),
intent(in ) :: pnom_p(LBi:,LBj:)
309 real(r8),
intent(in ) :: om_r(LBi:,LBj:)
310 real(r8),
intent(in ) :: on_r(LBi:,LBj:)
311 real(r8),
intent(in ) :: om_p(LBi:,LBj:)
312 real(r8),
intent(in ) :: on_p(LBi:,LBj:)
314 real(r8),
intent(in ) :: visc2_p(LBi:,LBj:)
315 real(r8),
intent(in ) :: visc2_r(LBi:,LBj:)
318 real(r8),
intent(in ) :: visc4_p(LBi:,LBj:)
319 real(r8),
intent(in ) :: visc4_r(LBi:,LBj:)
322# if defined SEDIMENT && defined SED_MORPH
323 real(r8),
intent(in ) :: bed_thick(LBi:,LBj:,:)
328 real(r8),
intent(in) :: rurol2d(LBi:,LBj:)
329 real(r8),
intent(in) :: rvrol2d(LBi:,LBj:)
331# ifdef BOTTOM_STREAMING
332 real(r8),
intent(in) :: rubst2d(LBi:,LBj:)
333 real(r8),
intent(in) :: rvbst2d(LBi:,LBj:)
335# ifdef SURFACE_STREAMING
336 real(r8),
intent(in) :: russt2d(LBi:,LBj:)
337 real(r8),
intent(in) :: rvsst2d(LBi:,LBj:)
339 real(r8),
intent(in) :: rubrk2d(LBi:,LBj:)
340 real(r8),
intent(in) :: rvbrk2d(LBi:,LBj:)
341 real(r8),
intent(in) :: rukvf2d(LBi:,LBj:)
342 real(r8),
intent(in) :: rvkvf2d(LBi:,LBj:)
343 real(r8),
intent(in) :: bh(LBi:,LBj:)
344 real(r8),
intent(in) :: qsp(LBi:,LBj:)
345 real(r8),
intent(in) :: zetaw(LBi:,LBj:)
347 real(r8),
intent(in) :: ubar_stokes(LBi:,LBj:)
348 real(r8),
intent(in) :: vbar_stokes(LBi:,LBj:)
350# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
351 real(r8),
intent(in ) :: eq_tide(LBi:,LBj:)
354 real(r8),
intent(in ) :: sustr(LBi:,LBj:)
355 real(r8),
intent(in ) :: svstr(LBi:,LBj:)
356 real(r8),
intent(in ) :: bustr(LBi:,LBj:)
357 real(r8),
intent(in ) :: bvstr(LBi:,LBj:)
359 real(r8),
intent(in ) :: Pair(LBi:,LBj:)
363 real(r8),
intent(in ) :: rhoA(LBi:,LBj:)
364 real(r8),
intent(in ) :: rhoS(LBi:,LBj:)
366 real(r8),
intent(inout) :: DU_avg1(LBi:,LBj:)
367 real(r8),
intent(inout) :: DU_avg2(LBi:,LBj:)
368 real(r8),
intent(inout) :: DV_avg1(LBi:,LBj:)
369 real(r8),
intent(inout) :: DV_avg2(LBi:,LBj:)
370 real(r8),
intent(inout) :: Zt_avg1(LBi:,LBj:)
371 real(r8),
intent(inout) :: rufrc(LBi:,LBj:)
372 real(r8),
intent(inout) :: rvfrc(LBi:,LBj:)
373 real(r8),
intent(inout) :: ru(LBi:,LBj:,0:,:)
374 real(r8),
intent(inout) :: rv(LBi:,LBj:,0:,:)
377 real(r8),
intent(inout) :: pmask_full(LBi:,LBj:)
378 real(r8),
intent(inout) :: rmask_full(LBi:,LBj:)
379 real(r8),
intent(inout) :: umask_full(LBi:,LBj:)
380 real(r8),
intent(inout) :: vmask_full(LBi:,LBj:)
382 real(r8),
intent(inout) :: pmask_wet(LBi:,LBj:)
383 real(r8),
intent(inout) :: rmask_wet(LBi:,LBj:)
384 real(r8),
intent(inout) :: umask_wet(LBi:,LBj:)
385 real(r8),
intent(inout) :: vmask_wet(LBi:,LBj:)
387 real(r8),
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
390# ifdef DIAGNOSTICS_UV
391 real(r8),
intent(inout) :: DiaU2wrk(LBi:,LBj:,:)
392 real(r8),
intent(inout) :: DiaV2wrk(LBi:,LBj:,:)
393 real(r8),
intent(inout) :: DiaRUbar(LBi:,LBj:,:,:)
394 real(r8),
intent(inout) :: DiaRVbar(LBi:,LBj:,:,:)
396 real(r8),
intent(inout) :: DiaU2int(LBi:,LBj:,:)
397 real(r8),
intent(inout) :: DiaV2int(LBi:,LBj:,:)
398 real(r8),
intent(inout) :: DiaRUfrc(LBi:,LBj:,:,:)
399 real(r8),
intent(inout) :: DiaRVfrc(LBi:,LBj:,:,:)
402 real(r8),
intent(inout) :: rubar(LBi:,LBj:,:)
403 real(r8),
intent(inout) :: rvbar(LBi:,LBj:,:)
404 real(r8),
intent(inout) :: rzeta(LBi:,LBj:,:)
405 real(r8),
intent(inout) :: ubar(LBi:,LBj:,:)
406 real(r8),
intent(inout) :: vbar(LBi:,LBj:,:)
407 real(r8),
intent(inout) :: zeta(LBi:,LBj:,:)
408# if defined NESTING && !defined SOLVE3D
409 real(r8),
intent(out ) :: DU_flux(LBi:,LBj:)
410 real(r8),
intent(out ) :: DV_flux(LBi:,LBj:)
416 real(r8),
intent(in ) :: pmask(LBi:UBi,LBj:UBj)
417 real(r8),
intent(in ) :: rmask(LBi:UBi,LBj:UBj)
418 real(r8),
intent(in ) :: umask(LBi:UBi,LBj:UBj)
419 real(r8),
intent(in ) :: vmask(LBi:UBi,LBj:UBj)
421 real(r8),
intent(in ) :: fomn(LBi:UBi,LBj:UBj)
422# if defined SEDIMENT && defined SED_MORPH
423 real(r8),
intent(inout) :: h(LBi:UBi,LBj:UBj)
425 real(r8),
intent(in ) :: h(LBi:UBi,LBj:UBj)
427 real(r8),
intent(in ) :: om_u(LBi:UBi,LBj:UBj)
428 real(r8),
intent(in ) :: om_v(LBi:UBi,LBj:UBj)
429 real(r8),
intent(in ) :: on_u(LBi:UBi,LBj:UBj)
430 real(r8),
intent(in ) :: on_v(LBi:UBi,LBj:UBj)
431 real(r8),
intent(in ) :: omn(LBi:UBi,LBj:UBj)
432 real(r8),
intent(in ) :: pm(LBi:UBi,LBj:UBj)
433 real(r8),
intent(in ) :: pn(LBi:UBi,LBj:UBj)
434# if defined CURVGRID && defined UV_ADV
435 real(r8),
intent(in ) :: dndx(LBi:UBi,LBj:UBj)
436 real(r8),
intent(in ) :: dmde(LBi:UBi,LBj:UBj)
438# if defined UV_VIS2 || defined UV_VIS4
439 real(r8),
intent(in ) :: pmon_r(LBi:UBi,LBj:UBj)
440 real(r8),
intent(in ) :: pnom_r(LBi:UBi,LBj:UBj)
441 real(r8),
intent(in ) :: pmon_p(LBi:UBi,LBj:UBj)
442 real(r8),
intent(in ) :: pnom_p(LBi:UBi,LBj:UBj)
443 real(r8),
intent(in ) :: om_r(LBi:UBi,LBj:UBj)
444 real(r8),
intent(in ) :: on_r(LBi:UBi,LBj:UBj)
445 real(r8),
intent(in ) :: om_p(LBi:UBi,LBj:UBj)
446 real(r8),
intent(in ) :: on_p(LBi:UBi,LBj:UBj)
448 real(r8),
intent(in ) :: visc2_p(LBi:UBi,LBj:UBj)
449 real(r8),
intent(in ) :: visc2_r(LBi:UBi,LBj:UBj)
452 real(r8),
intent(in ) :: visc4_p(LBi:UBi,LBj:UBj)
453 real(r8),
intent(in ) :: visc4_r(LBi:UBi,LBj:UBj)
456# if defined SEDIMENT && defined SED_MORPH
457 real(r8),
intent(in ) :: bed_thick(LBi:UBi,LBj:UBj,1:3)
462 real(r8),
intent(in) :: rurol2d(LBi:UBi,LBj:UBj)
463 real(r8),
intent(in) :: rvrol2d(LBi:UBi,LBj:UBj)
465# ifdef BOTTOM_STREAMING
466 real(r8),
intent(in) :: rubst2d(LBi:UBi,LBj:UBj)
467 real(r8),
intent(in) :: rvbst2d(LBi:UBi,LBj:UBj)
469# ifdef SURFACE_STREAMING
470 real(r8),
intent(in) :: russt2d(LBi:UBi,LBj:UBj)
471 real(r8),
intent(in) :: rvsst2d(LBi:UBi,LBj:UBj)
473 real(r8),
intent(in) :: rubrk2d(LBi:UBi,LBj:UBj)
474 real(r8),
intent(in) :: rvbrk2d(LBi:UBi,LBj:UBj)
475 real(r8),
intent(in) :: rukvf2d(LBi:UBi,LBj:UBj)
476 real(r8),
intent(in) :: rvkvf2d(LBi:UBi,LBj:UBj)
477 real(r8),
intent(in) :: bh(LBi:UBi,LBj:UBj)
478 real(r8),
intent(in) :: qsp(LBi:UBi,LBj:UBj)
479 real(r8),
intent(in) :: zetaw(LBi:UBi,LBj:UBj)
481 real(r8),
intent(in) :: ubar_stokes(LBi:UBi,LBj:UBj)
482 real(r8),
intent(in) :: vbar_stokes(LBi:UBi,LBj:UBj)
484# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
485 real(r8),
intent(in ) :: eq_tide(LBi:UBi,LBj:UBj)
488 real(r8),
intent(in ) :: sustr(LBi:UBi,LBj:UBj)
489 real(r8),
intent(in ) :: svstr(LBi:UBi,LBj:UBj)
490 real(r8),
intent(in ) :: bustr(LBi:UBi,LBj:UBj)
491 real(r8),
intent(in ) :: bvstr(LBi:UBi,LBj:UBj)
493 real(r8),
intent(in ) :: Pair(LBi:UBi,LBj:UBj)
497 real(r8),
intent(in ) :: rhoA(LBi:UBi,LBj:UBj)
498 real(r8),
intent(in ) :: rhoS(LBi:UBi,LBj:UBj)
500 real(r8),
intent(inout) :: DU_avg1(LBi:UBi,LBj:UBj)
501 real(r8),
intent(inout) :: DU_avg2(LBi:UBi,LBj:UBj)
502 real(r8),
intent(inout) :: DV_avg1(LBi:UBi,LBj:UBj)
503 real(r8),
intent(inout) :: DV_avg2(LBi:UBi,LBj:UBj)
504 real(r8),
intent(inout) :: Zt_avg1(LBi:UBi,LBj:UBj)
505 real(r8),
intent(inout) :: rufrc(LBi:UBi,LBj:UBj)
506 real(r8),
intent(inout) :: rvfrc(LBi:UBi,LBj:UBj)
507 real(r8),
intent(inout) :: ru(LBi:UBi,LBj:UBj,0:UBk,2)
508 real(r8),
intent(inout) :: rv(LBi:UBi,LBj:UBj,0:UBk,2)
511 real(r8),
intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
512 real(r8),
intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
513 real(r8),
intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
514 real(r8),
intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
516 real(r8),
intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
517 real(r8),
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
518 real(r8),
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
519 real(r8),
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
521 real(r8),
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
524# ifdef DIAGNOSTICS_UV
525 real(r8),
intent(inout) :: DiaU2wrk(LBi:UBi,LBj:UBj,NDM2d)
526 real(r8),
intent(inout) :: DiaV2wrk(LBi:UBi,LBj:UBj,NDM2d)
527 real(r8),
intent(inout) :: DiaRUbar(LBi:UBi,LBj:UBj,2,NDM2d-1)
528 real(r8),
intent(inout) :: DiaRVbar(LBi:UBi,LBj:UBj,2,NDM2d-1)
530 real(r8),
intent(inout) :: DiaU2int(LBi:UBi,LBj:UBj,NDM2d)
531 real(r8),
intent(inout) :: DiaV2int(LBi:UBi,LBj:UBj,NDM2d)
532 real(r8),
intent(inout) :: DiaRUfrc(LBi:UBi,LBj:UBj,3,NDM2d-1)
533 real(r8),
intent(inout) :: DiaRVfrc(LBi:UBi,LBj:UBj,3,NDM2d-1)
536 real(r8),
intent(inout) :: rubar(LBi:UBi,LBj:UBj,2)
537 real(r8),
intent(inout) :: rvbar(LBi:UBi,LBj:UBj,2)
538 real(r8),
intent(inout) :: rzeta(LBi:UBi,LBj:UBj,2)
539 real(r8),
intent(inout) :: ubar(LBi:UBi,LBj:UBj,:)
540 real(r8),
intent(inout) :: vbar(LBi:UBi,LBj:UBj,:)
541 real(r8),
intent(inout) :: zeta(LBi:UBi,LBj:UBj,:)
542# if defined NESTING && !defined SOLVE3D
543 real(r8),
intent(out ) :: DU_flux(LBi:UBi,LBj:UBj)
544 real(r8),
intent(out ) :: DV_flux(LBi:UBi,LBj:UBj)
550 logical :: CORRECTOR_2D_STEP
552 integer :: i, is, j, ptsk
557 real(r8) :: cff, cff1, cff2, cff3, cff4, cff5, cff6, cff7
558 real(r8) :: fac, fac1, fac2, fac3
560 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
561 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
562 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
563 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
564 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
565 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
566 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
568 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
569 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
572 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSom
573 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSon
576 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapU
577 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapV
579 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
580 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
581 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
582 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
583 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
584 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta
585 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta2
586#if defined VAR_RHO_2D && defined SOLVE3D
587 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzetaSA
589 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_ubar
590 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_vbar
591 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_zeta
592 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
593 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
595 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
598 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Uwrk
599 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vwrk
600 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,NDM2d-1) :: DiaU2rhs
601 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,NDM2d-1) :: DiaV2rhs
604#include "set_bounds.h"
613#if defined DISTRIBUTE && !defined NESTING
624 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
630 cff1=cff*(drhs(i,j)+drhs(i-1,j))
631 duon(i,j)=ubar(i,j,krhs)*cff1
634 cff5=abs(abs(umask_wet(i,j))-1.0_r8)
635 cff6=0.5_r8+dsign(0.5_r8,ubar_stokes(i,j))*umask_wet(i,j)
636 cff7=0.5_r8*umask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
639 duson(i,j)=ubar_stokes(i,j)*cff1
640 duon(i,j)=duon(i,j)+duson(i,j)
647 cff1=cff*(drhs(i,j)+drhs(i,j-1))
648 dvom(i,j)=vbar(i,j,krhs)*cff1
651 cff5=abs(abs(vmask_wet(i,j))-1.0_r8)
652 cff6=0.5_r8+dsign(0.5_r8,vbar_stokes(i,j))*vmask_wet(i,j)
653 cff7=0.5_r8*vmask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
656 dvsom(i,j)=vbar_stokes(i,j)*cff1
657 dvom(i,j)=dvom(i,j)+dvsom(i,j)
664 DO j=jstrvm2-1,jendp2
665 DO i=istrum2-1,iendp2
666 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
669 DO j=jstrvm2-1,jendp2
672 cff1=cff*(drhs(i,j)+drhs(i-1,j))
673 duon(i,j)=ubar(i,j,krhs)*cff1
676 cff5=abs(abs(umask_wet(i,j))-1.0_r8)
677 cff6=0.5_r8+dsign(0.5_r8,ubar_stokes(i,j))*umask_wet(i,j)
678 cff7=0.5_r8*umask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
681 duson(i,j)=ubar_stokes(i,j)*cff1
682 duon(i,j)=duon(i,j)+duson(i,j)
687 DO i=istrum2-1,iendp2
689 cff1=cff*(drhs(i,j)+drhs(i,j-1))
690 dvom(i,j)=vbar(i,j,krhs)*cff1
693 cff5=abs(abs(vmask_wet(i,j))-1.0_r8)
694 cff6=0.5_r8+dsign(0.5_r8,vbar_stokes(i,j))*vmask_wet(i,j)
695 cff7=0.5_r8*vmask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
698 dvsom(i,j)=vbar_stokes(i,j)*cff1
699 dvom(i,j)=dvom(i,j)+dvsom(i,j)
708 & imins, imaxs, jmins, jmaxs, &
711 & imins, imaxs, jmins, jmaxs, &
715 & imins, imaxs, jmins, jmaxs, &
726 & lbi, ubi, lbj, ubj, &
727 & imins, imaxs, jmins, jmaxs, &
743 IF (first_2d_step)
THEN
747 cff2=(-1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
754 du_avg2(i,j)=cff2*duon(i,j)
760 dv_avg2(i,j)=cff2*dvom(i,j)
770 cff2=(8.0_r8/12.0_r8)*
weight(2,
iif(ng) ,ng)- &
771 & (1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
774 zt_avg1(i,j)=zt_avg1(i,j)+cff1*zeta(i,j,krhs)
777 du_avg1(i,j)=du_avg1(i,j)+cff1*duon(i,j)
779 du_avg1(i,j)=du_avg1(i,j)-cff1*duson(i,j)
781 du_avg2(i,j)=du_avg2(i,j)+cff2*duon(i,j)
786 dv_avg1(i,j)=dv_avg1(i,j)+cff1*dvom(i,j)
788 dv_avg1(i,j)=dv_avg1(i,j)-cff1*dvsom(i,j)
790 dv_avg2(i,j)=dv_avg2(i,j)+cff2*dvom(i,j)
795 IF (first_2d_step)
THEN
798 cff2=(5.0_r8/12.0_r8)*
weight(2,
iif(ng),ng)
802 du_avg2(i,j)=du_avg2(i,j)+cff2*duon(i,j)
807 dv_avg2(i,j)=dv_avg2(i,j)+cff2*dvom(i,j)
824 & lbi, ubi, lbj, ubj, &
827 & lbi, ubi, lbj, ubj, &
830 & lbi, ubi, lbj, ubj, &
834 & lbi, ubi, lbj, ubj, &
837 & lbi, ubi, lbj, ubj, &
843 & lbi, ubi, lbj, ubj, &
846 & zt_avg1, du_avg1, dv_avg1)
849 & lbi, ubi, lbj, ubj, &
864 & lbi, ubi, lbj, ubj, &
865 & imins, imaxs, jmins, jmaxs, &
867 & pmask, rmask, umask, vmask, &
869 & h, zeta(:,:,kstp), &
871 & du_avg1, dv_avg1, &
874 & pmask_wet, pmask_full, &
875 & rmask_wet, rmask_full, &
876 & umask_wet, umask_full, &
877 & vmask_wet, vmask_full)
892#if defined VAR_RHO_2D && defined SOLVE3D
899 IF (first_2d_step)
THEN
903 rhs_zeta(i,j)=(duon(i,j)-duon(i+1,j))+ &
904 & (dvom(i,j)-dvom(i,j+1))
905 zeta_new(i,j)=zeta(i,j,kstp)+ &
906 & pm(i,j)*pn(i,j)*cff1*rhs_zeta(i,j)
908 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
910 dnew(i,j)=zeta_new(i,j)+h(i,j)
912 zwrk(i,j)=0.5_r8*(zeta(i,j,kstp)+zeta_new(i,j))
913#if defined VAR_RHO_2D && defined SOLVE3D
914 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
915 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
916 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
919 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
926 cff5=1.0_r8-2.0_r8*cff4
929 rhs_zeta(i,j)=(duon(i,j)-duon(i+1,j))+ &
930 & (dvom(i,j)-dvom(i,j+1))
931 zeta_new(i,j)=zeta(i,j,kstp)+ &
932 & pm(i,j)*pn(i,j)*cff1*rhs_zeta(i,j)
934 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
936 dnew(i,j)=zeta_new(i,j)+h(i,j)
938 zwrk(i,j)=cff5*zeta(i,j,krhs)+ &
939 & cff4*(zeta(i,j,kstp)+zeta_new(i,j))
940#if defined VAR_RHO_2D && defined SOLVE3D
941 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
942 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
943 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
946 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
950 ELSE IF (corrector_2d_step)
THEN
951 cff1=
dtfast(ng)*5.0_r8/12.0_r8
952 cff2=
dtfast(ng)*8.0_r8/12.0_r8
953 cff3=
dtfast(ng)*1.0_r8/12.0_r8
958 cff=cff1*((duon(i,j)-duon(i+1,j))+ &
959 & (dvom(i,j)-dvom(i,j+1)))
960 zeta_new(i,j)=zeta(i,j,kstp)+ &
961 & pm(i,j)*pn(i,j)*(cff+ &
962 & cff2*rzeta(i,j,kstp)- &
963 & cff3*rzeta(i,j,ptsk))
965 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
967 dnew(i,j)=zeta_new(i,j)+h(i,j)
969 zwrk(i,j)=cff5*zeta_new(i,j)+cff4*zeta(i,j,krhs)
970#if defined VAR_RHO_2D && defined SOLVE3D
971 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
972 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
973 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
976 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
991 zeta(i,j,knew)=zeta_new(i,j)
992#if defined WET_DRY && defined MASKING
993 zeta(i,j,knew)=zeta(i,j,knew)+ &
994 & (
dcrit(ng)-h(i,j))*(1.0_r8-rmask(i,j))
1004 rzeta(i,j,krhs)=rhs_zeta(i,j)
1009 & lbi, ubi, lbj, ubj, &
1014 & lbi, ubi, lbj, ubj, &
1027 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
1030 IF (((istrr.le.i).and.(i.le.iendr)).and. &
1031 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
1032 zeta(i,j,knew)=zeta(i,j,knew)+ &
1034 & pm(i,j)*pn(i,j)*
dtfast(ng)
1040#if defined SEDIMENT && defined SED_MORPH
1049 cff=fac*(bed_thick(i,j,nstp)-bed_thick(i,j,nnew))
1058 & lbi, ubi, lbj, ubj, &
1059 & imins, imaxs, jmins, jmaxs, &
1060 & krhs, kstp, knew, &
1064 & lbi, ubi, lbj, ubj, &
1069 & lbi, ubi, lbj, ubj, &
1085#if !defined SOLVE3D && defined ATM_PRESS
1086 fac3=0.5_r8*100.0_r8/
rho0
1090 rhs_ubar(i,j)=cff1*on_u(i,j)* &
1095#if defined VAR_RHO_2D && defined SOLVE3D
1098 & (gzetasa(i-1,j)+ &
1100 & cff2*(rhoa(i-1,j)- &
1107#if defined ATM_PRESS && !defined SOLVE3D
1108 rhs_ubar(i,j)=rhs_ubar(i,j)- &
1110 & (h(i-1,j)+h(i,j)+ &
1111 & gzeta(i-1,j)+gzeta(i,j))* &
1112 & (pair(i,j)-pair(i-1,j))
1114#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
1115 rhs_ubar(i,j)=rhs_ubar(i,j)- &
1117 & (h(i-1,j)+h(i,j)+ &
1118 & gzeta(i-1,j)+gzeta(i,j))* &
1119 & (eq_tide(i,j)-eq_tide(i-1,j))
1121#ifdef DIAGNOSTICS_UV
1122 diau2rhs(i,j,
m2pgrd)=rhs_ubar(i,j)
1125 cff3=0.5_r8*on_u(i,j)* &
1126 & (h(i-1,j)+h(i,j)+ &
1127 & gzeta(i-1,j)+gzeta(i,j))
1128 cff4=cff3*
g*(zetaw(i-1,j)-zetaw(i,j))
1129 cff5=cff3*
g*(qsp(i-1,j)-qsp(i,j))
1130 cff6=cff3*(bh(i-1,j)-bh(i,j))
1132 rhs_ubar(i,j)=rhs_ubar(i,j)-cff4-cff5+cff6+cff7
1133# ifdef DIAGNOSTICS_UV
1134 diau2rhs(i,j,m2zeta)=diau2rhs(i,j,
m2pgrd)
1135 diau2rhs(i,j,
m2pgrd)=diau2rhs(i,j,
m2pgrd)-cff4-cff5+cff6
1136 diau2rhs(i,j,m2zetw)=-cff4
1137 diau2rhs(i,j,m2zqsp)=-cff5
1138 diau2rhs(i,j,m2zbeh)=cff6
1139 diau2rhs(i,j,m2kvrf)=cff7
1141 diau2rhs(i,j,m2hjvf)=0.0_r8
1146 IF (j.ge.jstrv)
THEN
1148 rhs_vbar(i,j)=cff1*om_v(i,j)* &
1153#if defined VAR_RHO_2D && defined SOLVE3D
1156 & (gzetasa(i,j-1)+ &
1158 & cff2*(rhoa(i,j-1)- &
1165#if defined ATM_PRESS && !defined SOLVE3D
1166 rhs_vbar(i,j)=rhs_vbar(i,j)- &
1168 & (h(i,j-1)+h(i,j)+ &
1169 & gzeta(i,j-1)+gzeta(i,j))* &
1170 & (pair(i,j)-pair(i,j-1))
1172#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
1173 rhs_vbar(i,j)=rhs_vbar(i,j)- &
1175 & (h(i,j-1)+h(i,j)+ &
1176 & gzeta(i,j-1)+gzeta(i,j))* &
1177 & (eq_tide(i,j)-eq_tide(i,j-1))
1179#ifdef DIAGNOSTICS_UV
1180 diav2rhs(i,j,
m2pgrd)=rhs_vbar(i,j)
1183 cff3=0.5_r8*om_v(i,j)* &
1184 & (h(i,j-1)+h(i,j)+ &
1185 & gzeta(i,j-1)+gzeta(i,j))
1186 cff4=cff3*
g*(zetaw(i,j-1)-zetaw(i,j))
1187 cff5=cff3*
g*(qsp(i,j-1)-qsp(i,j))
1188 cff6=cff3*(bh(i,j-1)-bh(i,j))
1190 rhs_vbar(i,j)=rhs_vbar(i,j)-cff4-cff5+cff6+cff7
1191# ifdef DIAGNOSTICS_UV
1192 diav2rhs(i,j,m2zeta)=diav2rhs(i,j,
m2pgrd)
1193 diav2rhs(i,j,
m2pgrd)=diav2rhs(i,j,
m2pgrd)-cff4-cff5+cff6
1194 diav2rhs(i,j,m2zetw)=-cff4
1195 diav2rhs(i,j,m2zqsp)=-cff5
1196 diav2rhs(i,j,m2zbeh)=cff6
1197 diav2rhs(i,j,m2kvrf)=cff7
1199 diav2rhs(i,j,m2hjvf)=0.0_r8
1212# ifdef UV_C2ADVECTION
1218 ufx(i,j)=0.25_r8*(duon(i,j)+duon(i+1,j))* &
1219 & (ubar(i ,j,krhs)+ &
1226 ufe(i,j)=0.25_r8*(dvom(i,j)+dvom(i-1,j))* &
1227 & (ubar(i,j ,krhs)+ &
1234 vfx(i,j)=0.25_r8*(duon(i,j)+duon(i,j-1))* &
1235 & (vbar(i ,j,krhs)+ &
1242 vfe(i,j)=0.25_r8*(dvom(i,j)+dvom(i,j+1))* &
1243 & (vbar(i,j ,krhs)+ &
1253 grad(i,j)=ubar(i-1,j,krhs)-2.0_r8*ubar(i,j,krhs)+ &
1255 dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
1259 IF (
domain(ng)%Western_Edge(tile))
THEN
1261 grad(istr,j)=grad(istr+1,j)
1262 dgrad(istr,j)=dgrad(istr+1,j)
1267 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1269 grad(iend+1,j)=grad(iend,j)
1270 dgrad(iend+1,j)=dgrad(iend,j)
1278 ufx(i,j)=0.25_r8*(ubar(i ,j,krhs)+ &
1279 & ubar(i+1,j,krhs)- &
1280 & cff*(grad(i,j)+grad(i+1,j)))* &
1281 & (duon(i,j)+duon(i+1,j)- &
1282 & cff*(dgrad(i,j)+dgrad(i+1,j)))
1288 grad(i,j)=ubar(i,j-1,krhs)-2.0_r8*ubar(i,j,krhs)+ &
1293 IF (
domain(ng)%Southern_Edge(tile))
THEN
1295 grad(i,jstr-1)=grad(i,jstr)
1300 IF (
domain(ng)%Northern_Edge(tile))
THEN
1302 grad(i,jend+1)=grad(i,jend)
1308 dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
1315 ufe(i,j)=0.25_r8*(ubar(i,j ,krhs)+ &
1316 & ubar(i,j-1,krhs)- &
1317 & cff*(grad(i,j)+grad(i,j-1)))* &
1318 & (dvom(i,j)+dvom(i-1,j)- &
1319 & cff*(dgrad(i,j)+dgrad(i-1,j)))
1325 grad(i,j)=vbar(i-1,j,krhs)-2.0_r8*vbar(i,j,krhs)+ &
1330 IF (
domain(ng)%Western_Edge(tile))
THEN
1332 grad(istr-1,j)=grad(istr,j)
1337 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1339 grad(iend+1,j)=grad(iend,j)
1345 dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
1352 vfx(i,j)=0.25_r8*(vbar(i ,j,krhs)+ &
1353 & vbar(i-1,j,krhs)- &
1354 & cff*(grad(i,j)+grad(i-1,j)))* &
1355 & (duon(i,j)+duon(i,j-1)- &
1356 & cff*(dgrad(i,j)+dgrad(i,j-1)))
1362 grad(i,j)=vbar(i,j-1,krhs)-2.0_r8*vbar(i,j,krhs)+ &
1364 dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
1368 IF (
domain(ng)%Southern_Edge(tile))
THEN
1370 grad(i,jstr)=grad(i,jstr+1)
1371 dgrad(i,jstr)=dgrad(i,jstr+1)
1376 IF (
domain(ng)%Northern_Edge(tile))
THEN
1378 grad(i,jend+1)=grad(i,jend)
1379 dgrad(i,jend+1)=dgrad(i,jend)
1387 vfe(i,j)=0.25_r8*(vbar(i,j ,krhs)+ &
1388 & vbar(i,j+1,krhs)- &
1389 & cff*(grad(i,j)+grad(i,j+1)))* &
1390 & (dvom(i,j)+dvom(i,j+1)- &
1391 & cff*(dgrad(i,j)+dgrad(i,j+1)))
1400 cff1=ufx(i,j)-ufx(i-1,j)
1401 cff2=ufe(i,j+1)-ufe(i,j)
1403 rhs_ubar(i,j)=rhs_ubar(i,j)-fac
1404# if defined DIAGNOSTICS_UV
1405 diau2rhs(i,j,
m2xadv)=-cff1
1406 diau2rhs(i,j,
m2yadv)=-cff2
1407 diau2rhs(i,j,
m2hadv)=-fac
1413 cff1=vfx(i+1,j)-vfx(i,j)
1414 cff2=vfe(i,j)-vfe(i,j-1)
1416 rhs_vbar(i,j)=rhs_vbar(i,j)-fac
1417# if defined DIAGNOSTICS_UV
1418 diav2rhs(i,j,
m2xadv)=-cff1
1419 diav2rhs(i,j,
m2yadv)=-cff2
1420 diav2rhs(i,j,
m2hadv)=-fac
1434 cff=0.5_r8*drhs(i,j)*fomn(i,j)
1435 ufx(i,j)=cff*(vbar(i,j ,krhs)+ &
1437 vfe(i,j)=cff*(ubar(i ,j,krhs)+ &
1443 fac1=0.5_r8*(ufx(i,j)+ufx(i-1,j))
1444 rhs_ubar(i,j)=rhs_ubar(i,j)+fac1
1445# if defined DIAGNOSTICS_UV
1446 diau2rhs(i,j,
m2fcor)=fac1
1452 fac1=0.5_r8*(vfe(i,j)+vfe(i,j-1))
1453 rhs_vbar(i,j)=rhs_vbar(i,j)-fac1
1454# if defined DIAGNOSTICS_UV
1455 diav2rhs(i,j,
m2fcor)=-fac1
1463 cff=0.5_r8*drhs(i,j)*fomn(i,j)
1464 ufx(i,j)=cff*(vbar_stokes(i,j )+ &
1465 & vbar_stokes(i,j+1))
1466 vfe(i,j)=cff*(ubar_stokes(i ,j)+ &
1467 & ubar_stokes(i+1,j))
1472 fac1=0.5_r8*(ufx(i,j)+ufx(i-1,j))
1473 rhs_ubar(i,j)=rhs_ubar(i,j)+fac1
1474# if defined DIAGNOSTICS_UV
1475 diau2rhs(i,j,m2fsco)=fac1
1481 fac1=0.5_r8*(vfe(i,j)+vfe(i,j-1))
1482 rhs_vbar(i,j)=rhs_vbar(i,j)-fac1
1483# if defined DIAGNOSTICS_UV
1484 diav2rhs(i,j,m2fsco)=-fac1
1491#if defined CURVGRID && defined UV_ADV
1499 cff1=0.5_r8*(vbar(i,j ,krhs)+ &
1501 & vbar_stokes(i,j )+ &
1502 & vbar_stokes(i,j+1)+ &
1505 cff2=0.5_r8*(ubar(i ,j,krhs)+ &
1507 & ubar_stokes(i ,j)+ &
1508 & ubar_stokes(i+1,j)+ &
1514 cff5=0.5_r8*(vbar_stokes(i,j )+ &
1515 & vbar_stokes(i,j+1))
1516 cff6=0.5_r8*(ubar_stokes(i ,j)+ &
1517 & ubar_stokes(i+1,j))
1521 cff=drhs(i,j)*(cff3-cff4)
1525 ufx(i,j)=ufx(i,j)-(cff5*drhs(i,j)*(cff7-cff8))
1526 vfe(i,j)=vfe(i,j)-(cff6*drhs(i,j)*(cff7-cff8))
1528# if defined DIAGNOSTICS_UV
1533 uwrk(i,j)=uwrk(i,j)+drhs(i,j)*cff5*cff8
1534 vwrk(i,j)=vwrk(i,j)-drhs(i,j)*cff6*cff8
1541 fac1=0.5_r8*(ufx(i,j)+ufx(i-1,j))
1542 rhs_ubar(i,j)=rhs_ubar(i,j)+fac1
1543# if defined DIAGNOSTICS_UV
1544 fac2=0.5_r8*(uwrk(i,j)+uwrk(i-1,j))
1553 fac1=0.5_r8*(vfe(i,j)+vfe(i,j-1))
1554 rhs_vbar(i,j)=rhs_vbar(i,j)-fac1
1555# if defined DIAGNOSTICS_UV
1556 fac2=0.5_r8*(vwrk(i,j)+vwrk(i,j-1))
1564#if defined UV_VIS2 || defined UV_VIS4
1577 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
1578 & drhs(i,j-1)+drhs(i-1,j-1))
1593 cff=visc2_r(i,j)*drhs(i,j)*0.5_r8* &
1595 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
1596 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
1598 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
1599 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))
1600 ufx(i,j)=on_r(i,j)*on_r(i,j)*cff
1601 vfe(i,j)=om_r(i,j)*om_r(i,j)*cff
1606 cff=visc2_p(i,j)*drhs_p(i,j)*0.5_r8* &
1608 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
1609 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
1611 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
1612 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))
1617 cff=cff*pmask_wet(i,j)
1619 ufe(i,j)=om_p(i,j)*om_p(i,j)*cff
1620 vfx(i,j)=on_p(i,j)*on_p(i,j)*cff
1628 cff1=0.5_r8*(pn(i-1,j)+pn(i,j))*(ufx(i,j )-ufx(i-1,j))
1629 cff2=0.5_r8*(pm(i-1,j)+pm(i,j))*(ufe(i,j+1)-ufe(i ,j))
1631 rhs_ubar(i,j)=rhs_ubar(i,j)+fac
1632# if defined DIAGNOSTICS_UV
1634 diau2rhs(i,j,
m2xvis)=cff1
1635 diau2rhs(i,j,
m2yvis)=cff2
1641 cff1=0.5_r8*(pn(i,j-1)+pn(i,j))*(vfx(i+1,j)-vfx(i,j ))
1642 cff2=0.5_r8*(pm(i,j-1)+pm(i,j))*(vfe(i ,j)-vfe(i,j-1))
1644 rhs_vbar(i,j)=rhs_vbar(i,j)+fac
1645# if defined DIAGNOSTICS_UV
1647 diav2rhs(i,j,
m2xvis)= cff1
1648 diav2rhs(i,j,
m2yvis)=-cff2
1669 cff=visc4_r(i,j)*0.5_r8* &
1671 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
1672 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
1674 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
1675 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))
1676 ufx(i,j)=on_r(i,j)*on_r(i,j)*cff
1677 vfe(i,j)=om_r(i,j)*om_r(i,j)*cff
1682 cff=visc4_p(i,j)*0.5_r8* &
1684 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
1685 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
1687 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
1688 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))
1693 cff=cff*pmask_wet(i,j)
1695 ufe(i,j)=om_p(i,j)*om_p(i,j)*cff
1696 vfx(i,j)=on_p(i,j)*on_p(i,j)*cff
1704 lapu(i,j)=0.125_r8* &
1705 & (pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))* &
1706 & ((pn(i-1,j)+pn(i,j))* &
1707 & (ufx(i,j )-ufx(i-1,j))+ &
1708 & (pm(i-1,j)+pm(i,j))* &
1709 & (ufe(i,j+1)-ufe(i ,j)))
1714 lapv(i,j)=0.125_r8* &
1715 & (pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))* &
1716 & ((pn(i,j-1)+pn(i,j))* &
1717 & (vfx(i+1,j)-vfx(i,j ))- &
1718 & (pm(i,j-1)+pm(i,j))* &
1719 & (vfe(i ,j)-vfe(i,j-1)))
1728 IF (
domain(ng)%Western_Edge(tile))
THEN
1731 lapu(istru-1,j)=0.0_r8
1735 lapu(istru-1,j)=lapu(istru,j)
1740 lapv(istr-1,j)=
gamma2(ng)*lapv(istr,j)
1744 lapv(istr-1,j)=0.0_r8
1751 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1754 lapu(iend+1,j)=0.0_r8
1758 lapu(iend+1,j)=lapu(iend,j)
1763 lapv(iend+1,j)=
gamma2(ng)*lapv(iend,j)
1767 lapv(iend+1,j)=0.0_r8
1774 IF (
domain(ng)%Southern_Edge(tile))
THEN
1777 lapu(i,jstr-1)=
gamma2(ng)*lapu(i,jstr)
1781 lapu(i,jstr-1)=0.0_r8
1786 lapv(i,jstrv-1)=0.0_r8
1790 lapv(i,jstrv-1)=lapv(i,jstrv)
1797 IF (
domain(ng)%Northern_Edge(tile))
THEN
1800 lapu(i,jend+1)=
gamma2(ng)*lapu(i,jend)
1804 lapu(i,jend+1)=0.0_r8
1809 lapv(i,jend+1)=0.0_r8
1813 lapv(i,jend+1)=lapv(i,jend)
1821 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1822 lapu(istr ,jstr-1)=0.5_r8*(lapu(istr+1,jstr-1)+ &
1823 & lapu(istr ,jstr ))
1824 lapv(istr-1,jstr )=0.5_r8*(lapv(istr-1,jstr+1)+ &
1825 & lapv(istr ,jstr ))
1831 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1832 lapu(iend+1,jstr-1)=0.5_r8*(lapu(iend ,jstr-1)+ &
1833 & lapu(iend+1,jstr ))
1834 lapv(iend+1,jstr )=0.5_r8*(lapv(iend ,jstr )+ &
1835 & lapv(iend+1,jstr+1))
1841 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1842 lapu(istr ,jend+1)=0.5_r8*(lapu(istr+1,jend+1)+ &
1843 & lapu(istr ,jend ))
1844 lapv(istr-1,jend+1)=0.5_r8*(lapv(istr ,jend+1)+ &
1845 & lapv(istr-1,jend ))
1851 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1852 lapu(iend+1,jend+1)=0.5_r8*(lapu(iend ,jend+1)+ &
1853 & lapu(iend+1,jend ))
1854 lapv(iend+1,jend+1)=0.5_r8*(lapv(iend ,jend+1)+ &
1855 & lapv(iend+1,jend ))
1864 cff=visc4_r(i,j)*drhs(i,j)*0.5_r8* &
1866 & ((pn(i ,j)+pn(i+1,j))*lapu(i+1,j)- &
1867 & (pn(i-1,j)+pn(i ,j))*lapu(i ,j))- &
1869 & ((pm(i,j )+pm(i,j+1))*lapv(i,j+1)- &
1870 & (pm(i,j-1)+pm(i,j ))*lapv(i,j )))
1871 ufx(i,j)=on_r(i,j)*on_r(i,j)*cff
1872 vfe(i,j)=om_r(i,j)*om_r(i,j)*cff
1877 cff=visc4_p(i,j)*drhs_p(i,j)*0.5_r8* &
1879 & ((pn(i ,j-1)+pn(i ,j))*lapv(i ,j)- &
1880 & (pn(i-1,j-1)+pn(i-1,j))*lapv(i-1,j))+ &
1882 & ((pm(i-1,j )+pm(i,j ))*lapu(i,j )- &
1883 & (pm(i-1,j-1)+pm(i,j-1))*lapu(i,j-1)))
1888 cff=cff*pmask_wet(i,j)
1890 ufe(i,j)=om_p(i,j)*om_p(i,j)*cff
1891 vfx(i,j)=on_p(i,j)*on_p(i,j)*cff
1899 cff1=0.5_r8*(pn(i-1,j)+pn(i,j))*(ufx(i,j )-ufx(i-1,j))
1900 cff2=0.5_r8*(pm(i-1,j)+pm(i,j))*(ufe(i,j+1)-ufe(i ,j))
1902 rhs_ubar(i,j)=rhs_ubar(i,j)-fac
1903# if defined DIAGNOSTICS_UV
1904 diau2rhs(i,j,
m2hvis)=-fac
1905 diau2rhs(i,j,
m2xvis)=-cff1
1906 diau2rhs(i,j,
m2yvis)=-cff2
1912 cff1=0.5_r8*(pn(i,j-1)+pn(i,j))*(vfx(i+1,j)-vfx(i,j ))
1913 cff2=0.5_r8*(pm(i,j-1)+pm(i,j))*(vfe(i ,j)-vfe(i,j-1))
1915 rhs_vbar(i,j)=rhs_vbar(i,j)-fac
1916# if defined DIAGNOSTICS_UV
1917 diav2rhs(i,j,
m2hvis)=-fac
1918 diav2rhs(i,j,
m2xvis)=-cff1
1919 diav2rhs(i,j,
m2yvis)= cff2
1924#if defined WEC_VF && defined SOLVE3D
1933 rhs_ubar(i,j)=rhs_ubar(i,j)+cff1
1934# ifdef DIAGNOSTICS_UV
1935 diau2rhs(i,j,m2wbrk)=cff1
1939 rhs_ubar(i,j)=rhs_ubar(i,j)+cff1
1940# ifdef DIAGNOSTICS_UV
1941 diau2rhs(i,j,m2wrol)=cff1
1944# ifdef DIAGNOSTICS_UV
1945 diau2rhs(i,j,m2wrol)=0.0_r8
1948# ifdef BOTTOM_STREAMING
1950 rhs_ubar(i,j)=rhs_ubar(i,j)+cff1
1951# ifdef DIAGNOSTICS_UV
1952 diau2rhs(i,j,m2bstm)=cff1
1955# ifdef SURFACE_STREAMING
1957 rhs_ubar(i,j)=rhs_ubar(i,j)+cff1
1958# ifdef DIAGNOSTICS_UV
1959 diau2rhs(i,j,m2sstm)=cff1
1963 IF (j.ge.jstrv)
THEN
1966 rhs_vbar(i,j)=rhs_vbar(i,j)+cff1
1967# ifdef DIAGNOSTICS_UV
1968 diav2rhs(i,j,m2wbrk)=cff1
1972 rhs_vbar(i,j)=rhs_vbar(i,j)+cff1
1973# ifdef DIAGNOSTICS_UV
1974 diav2rhs(i,j,m2wrol)=cff1
1977# ifdef DIAGNOSTICS_UV
1978 diav2rhs(i,j,m2wrol)=0.0_r8
1981# ifdef BOTTOM_STREAMING
1983 rhs_vbar(i,j)=rhs_vbar(i,j)+cff1
1984# ifdef DIAGNOSTICS_UV
1985 diav2rhs(i,j,m2bstm)=cff1
1988# ifdef SURFACE_STREAMING
1990 rhs_vbar(i,j)=rhs_vbar(i,j)+cff1
1991# ifdef DIAGNOSTICS_UV
1992 diav2rhs(i,j,m2sstm)=cff1
1999# ifdef DIAGNOSTICS_UV
2008 cff=0.5_r8*(drhs(i-1,j)+drhs(i,j))
2009 dvsom(i,j)=0.25_r8*cff*om_u(i,j)* &
2010 & (vbar_stokes(i ,j )+ &
2011 & vbar_stokes(i ,j+1)+ &
2012 & vbar_stokes(i-1,j )+ &
2013 & vbar_stokes(i-1,j+1))
2018 ufx(i,j)=0.5_r8*(ubar(i ,j-1,krhs)+ &
2024 cff1=ufx(i,j+1)-ufx(i,j)
2028 diau2rhs(i,j,m2hjvf)=-cff
2033 cff=0.5_r8*(drhs(i,j)+drhs(i,j-1))
2034 duson(i,j)=cff*0.25_r8*on_v(i,j)* &
2035 & (ubar_stokes(i ,j )+ &
2036 & ubar_stokes(i+1,j )+ &
2037 & ubar_stokes(i ,j-1)+ &
2038 & ubar_stokes(i+1,j-1))
2043 vfe(i,j)=0.5_r8*(vbar(i-1,j ,krhs)+ &
2049 cff2=vfe(i+1,j)-vfe(i,j)
2053 diav2rhs(i,j,m2hjvf)=-cff
2066 cff=0.5_r8*(drhs(i-1,j)+drhs(i,j))
2067 duson(i,j)=cff*on_u(i,j)*ubar_stokes(i,j)
2068 dvson(i,j)=0.25_r8*cff*on_u(i,j)* &
2069 & (vbar_stokes(i ,j )+ &
2070 & vbar_stokes(i ,j+1)+ &
2071 & vbar_stokes(i-1,j )+ &
2072 & vbar_stokes(i-1,j+1))
2075 ufx(i,j)=0.5_r8*(ubar(i ,j ,krhs)+ &
2077 vfx(i,j)=0.5_r8*(vbar(i ,j ,krhs)+ &
2078 & vbar(i ,j+1,krhs))
2083 cff=0.5_r8*(drhs(i,j)+drhs(i,j-1))
2084 dusom(i,j)=cff*0.25_r8*om_v(i,j)* &
2085 & (ubar_stokes(i ,j )+ &
2086 & ubar_stokes(i+1,j )+ &
2087 & ubar_stokes(i ,j-1)+ &
2088 & ubar_stokes(i+1,j-1))
2089 dvsom(i,j)=cff*om_v(i,j)*vbar_stokes(i,j)
2094 cff=0.5_r8*(drhs(i,j)+drhs(i,j-1))
2095 ufe(i,j)=0.5_r8*(ubar(i+1,j ,krhs)+ &
2097 vfe(i,j)=0.5_r8*(vbar(i ,j ,krhs)+ &
2098 & vbar(i ,j+1,krhs))
2103 cff1=ufx(i,j)-ufx(i-1,j)
2104 cff2=vfx(i,j)-vfx(i-1,j)
2105 cff3=duson(i,j)*cff1
2106 cff4=dvson(i,j)*cff2
2107 rhs_ubar(i,j)=rhs_ubar(i,j)+cff3+cff4
2109# ifdef DIAGNOSTICS_UV
2112 diau2rhs(i,j,m2hjvf)=diau2rhs(i,j,m2hjvf)+cff4
2118 cff1=ufe(i,j)-ufe(i,j-1)
2119 cff2=vfe(i,j)-vfe(i,j-1)
2120 cff3=dusom(i,j)*cff1
2121 cff4=dvsom(i,j)*cff2
2122 rhs_vbar(i,j)=rhs_vbar(i,j)+cff3+cff4
2124# ifdef DIAGNOSTICS_UV
2127 diav2rhs(i,j,m2hjvf)=diav2rhs(i,j,m2hjvf)+cff3
2141 fac=bustr(i,j)*om_u(i,j)*on_u(i,j)
2142 rhs_ubar(i,j)=rhs_ubar(i,j)-fac
2143# ifdef DIAGNOSTICS_UV
2144 diau2rhs(i,j,
m2bstr)=-fac
2150 fac=bvstr(i,j)*om_v(i,j)*on_v(i,j)
2151 rhs_vbar(i,j)=rhs_vbar(i,j)-fac
2152# ifdef DIAGNOSTICS_UV
2153 diav2rhs(i,j,
m2bstr)=-fac
2158# ifdef DIAGNOSTICS_UV
2164 diau2rhs(i,j,
m2bstr)=0.0_r8
2169 diav2rhs(i,j,
m2bstr)=0.0_r8
2182 cff=0.25_r8*(
clima(ng)%M2nudgcof(i-1,j)+ &
2183 &
clima(ng)%M2nudgcof(i ,j))* &
2184 & om_u(i,j)*on_u(i,j)
2185 rhs_ubar(i,j)=rhs_ubar(i,j)+ &
2186 & cff*(drhs(i-1,j)+drhs(i,j))* &
2187 & (
clima(ng)%ubarclm(i,j)- &
2193 cff=0.25_r8*(
clima(ng)%M2nudgcof(i,j-1)+ &
2194 &
clima(ng)%M2nudgcof(i,j ))* &
2195 & om_v(i,j)*on_v(i,j)
2196 rhs_vbar(i,j)=rhs_vbar(i,j)+ &
2197 & cff*(drhs(i,j-1)+drhs(i,j))* &
2198 & (
clima(ng)%vbarclm(i,j)- &
2208 cff5=abs(abs(umask_wet(i,j))-1.0_r8)
2209 cff6=0.5_r8+dsign(0.5_r8,rhs_ubar(i,j))*umask_wet(i,j)
2210 cff7=0.5_r8*umask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
2211 rhs_ubar(i,j)=rhs_ubar(i,j)*cff7
2216 cff5=abs(abs(vmask_wet(i,j))-1.0_r8)
2217 cff6=0.5_r8+dsign(0.5_r8,rhs_vbar(i,j))*vmask_wet(i,j)
2218 cff7=0.5_r8*vmask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
2219 rhs_vbar(i,j)=rhs_vbar(i,j)*cff7
2245 rufrc(i,j)=rufrc(i,j)-rhs_ubar(i,j)
2246 rhs_ubar(i,j)=rhs_ubar(i,j)+rufrc(i,j)
2247 ru(i,j,0,nstp)=rufrc(i,j)
2248# ifdef DIAGNOSTICS_UV
2250 diarufrc(i,j,3,idiag)=diarufrc(i,j,3,idiag)- &
2251 & diau2rhs(i,j,idiag)
2252 diau2rhs(i,j,idiag)=diau2rhs(i,j,idiag)+ &
2253 & diarufrc(i,j,3,idiag)
2254 diarufrc(i,j,nstp,idiag)=diarufrc(i,j,3,idiag)
2261 diau2rhs(i,j,m2zeta)=diau2rhs(i,j,m2zeta)+ &
2269 rvfrc(i,j)=rvfrc(i,j)-rhs_vbar(i,j)
2270 rhs_vbar(i,j)=rhs_vbar(i,j)+rvfrc(i,j)
2271 rv(i,j,0,nstp)=rvfrc(i,j)
2272# ifdef DIAGNOSTICS_UV
2274 diarvfrc(i,j,3,idiag)=diarvfrc(i,j,3,idiag)- &
2275 & diav2rhs(i,j,idiag)
2276 diav2rhs(i,j,idiag)=diav2rhs(i,j,idiag)+ &
2277 & diarvfrc(i,j,3,idiag)
2278 diarvfrc(i,j,nstp,idiag)=diarvfrc(i,j,3,idiag)
2285 diav2rhs(i,j,m2zeta)=diav2rhs(i,j,m2zeta)+ &
2294 rufrc(i,j)=rufrc(i,j)-rhs_ubar(i,j)
2295 rhs_ubar(i,j)=rhs_ubar(i,j)+ &
2296 & 1.5_r8*rufrc(i,j)-0.5_r8*ru(i,j,0,nnew)
2297 ru(i,j,0,nstp)=rufrc(i,j)
2298# ifdef DIAGNOSTICS_UV
2300 diarufrc(i,j,3,idiag)=diarufrc(i,j,3,idiag)- &
2301 & diau2rhs(i,j,idiag)
2302 diau2rhs(i,j,idiag)=diau2rhs(i,j,idiag)+ &
2303 & 1.5_r8*diarufrc(i,j,3,idiag)- &
2304 & 0.5_r8*diarufrc(i,j,nnew,idiag)
2305 diarufrc(i,j,nstp,idiag)=diarufrc(i,j,3,idiag)
2308 & 0.5_r8*diarufrc(i,j,nnew,
m2sstr)
2311 & 0.5_r8*diarufrc(i,j,nnew,
m2bstr)
2314 diau2rhs(i,j,m2zeta)=diau2rhs(i,j,m2zeta)+ &
2315 & 1.5_r8*diarufrc(i,j,3,
m2pgrd)- &
2316 & 0.5_r8*diarufrc(i,j,nnew,
m2pgrd)
2323 rvfrc(i,j)=rvfrc(i,j)-rhs_vbar(i,j)
2324 rhs_vbar(i,j)=rhs_vbar(i,j)+ &
2325 & 1.5_r8*rvfrc(i,j)-0.5_r8*rv(i,j,0,nnew)
2326 rv(i,j,0,nstp)=rvfrc(i,j)
2327# ifdef DIAGNOSTICS_UV
2329 diarvfrc(i,j,3,idiag)=diarvfrc(i,j,3,idiag)- &
2330 & diav2rhs(i,j,idiag)
2331 diav2rhs(i,j,idiag)=diav2rhs(i,j,idiag)+ &
2332 & 1.5_r8*diarvfrc(i,j,3,idiag)- &
2333 & 0.5_r8*diarvfrc(i,j,nnew,idiag)
2334 diarvfrc(i,j,nstp,idiag)=diarvfrc(i,j,3,idiag)
2337 & 0.5_r8*diarvfrc(i,j,nnew,
m2sstr)
2340 & 0.5_r8*diarvfrc(i,j,nnew,
m2bstr)
2343 diav2rhs(i,j,m2zeta)=diav2rhs(i,j,m2zeta)+ &
2344 & 1.5_r8*diarvfrc(i,j,3,
m2pgrd)- &
2345 & 0.5_r8*diarvfrc(i,j,nnew,
m2pgrd)
2351 cff1=23.0_r8/12.0_r8
2352 cff2=16.0_r8/12.0_r8
2353 cff3= 5.0_r8/12.0_r8
2356 rufrc(i,j)=rufrc(i,j)-rhs_ubar(i,j)
2357 rhs_ubar(i,j)=rhs_ubar(i,j)+ &
2358 & cff1*rufrc(i,j)- &
2359 & cff2*ru(i,j,0,nnew)+ &
2360 & cff3*ru(i,j,0,nstp)
2361 ru(i,j,0,nstp)=rufrc(i,j)
2362# ifdef DIAGNOSTICS_UV
2364 diarufrc(i,j,3,idiag)=diarufrc(i,j,3,idiag)- &
2365 & diau2rhs(i,j,idiag)
2366 diau2rhs(i,j,idiag)=diau2rhs(i,j,idiag)+ &
2367 & cff1*diarufrc(i,j,3,idiag)- &
2368 & cff2*diarufrc(i,j,nnew,idiag)+ &
2369 & cff3*diarufrc(i,j,nstp,idiag)
2370 diarufrc(i,j,nstp,idiag)=diarufrc(i,j,3,idiag)
2373 & cff2*diarufrc(i,j,nnew,
m2sstr)+ &
2374 & cff3*diarufrc(i,j,nstp,
m2sstr)
2377 & cff2*diarufrc(i,j,nnew,
m2bstr)+ &
2378 & cff3*diarufrc(i,j,nstp,
m2bstr)
2381 diau2rhs(i,j,m2zeta)=diau2rhs(i,j,m2zeta)+ &
2382 & cff1*diarufrc(i,j,3,
m2pgrd)- &
2383 & cff2*diarufrc(i,j,nnew,
m2pgrd)+ &
2384 & cff3*diarufrc(i,j,nstp,
m2pgrd)
2391 rvfrc(i,j)=rvfrc(i,j)-rhs_vbar(i,j)
2392 rhs_vbar(i,j)=rhs_vbar(i,j)+ &
2393 & cff1*rvfrc(i,j)- &
2394 & cff2*rv(i,j,0,nnew)+ &
2395 & cff3*rv(i,j,0,nstp)
2396 rv(i,j,0,nstp)=rvfrc(i,j)
2397# ifdef DIAGNOSTICS_UV
2399 diarvfrc(i,j,3,idiag)=diarvfrc(i,j,3,idiag)- &
2400 & diav2rhs(i,j,idiag)
2401 diav2rhs(i,j,idiag)=diav2rhs(i,j,idiag)+ &
2402 & cff1*diarvfrc(i,j,3,idiag)- &
2403 & cff2*diarvfrc(i,j,nnew,idiag)+ &
2404 & cff3*diarvfrc(i,j,nstp,idiag)
2405 diarvfrc(i,j,nstp,idiag)=diarvfrc(i,j,3,idiag)
2408 & cff2*diarvfrc(i,j,nnew,
m2sstr)+ &
2409 & cff3*diarvfrc(i,j,nstp,
m2sstr)
2412 & cff2*diarvfrc(i,j,nnew,
m2bstr)+ &
2413 & cff3*diarvfrc(i,j,nstp,
m2bstr)
2416 diav2rhs(i,j,m2zeta)=diav2rhs(i,j,m2zeta)+ &
2417 & cff1*diarvfrc(i,j,3,
m2pgrd)- &
2418 & cff2*diarvfrc(i,j,nnew,
m2pgrd)+ &
2419 & cff3*diarvfrc(i,j,nstp,
m2pgrd)
2428 rhs_ubar(i,j)=rhs_ubar(i,j)+rufrc(i,j)
2429# ifdef DIAGNOSTICS_UV
2431 diau2rhs(i,j,idiag)=diau2rhs(i,j,idiag)+ &
2432 & diarufrc(i,j,3,idiag)
2437 diau2rhs(i,j,m2zeta)=diau2rhs(i,j,m2zeta)+ &
2445 rhs_vbar(i,j)=rhs_vbar(i,j)+rvfrc(i,j)
2446# ifdef DIAGNOSTICS_UV
2448 diav2rhs(i,j,idiag)=diav2rhs(i,j,idiag)+ &
2449 & diarvfrc(i,j,3,idiag)
2454 diav2rhs(i,j,m2zeta)=diav2rhs(i,j,m2zeta)+ &
2469 fac=sustr(i,j)*om_u(i,j)*on_u(i,j)
2470 rhs_ubar(i,j)=rhs_ubar(i,j)+fac
2471# ifdef DIAGNOSTICS_UV
2478 fac=svstr(i,j)*om_v(i,j)*on_v(i,j)
2479 rhs_vbar(i,j)=rhs_vbar(i,j)+fac
2480# ifdef DIAGNOSTICS_UV
2495 dstp(i,j)=zeta(i,j,kstp)+h(i,j)
2503 IF (first_2d_step)
THEN
2510 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2511 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2512 ubar(i,j,knew)=(ubar(i,j,kstp)* &
2513 & (dstp(i,j)+dstp(i-1,j))+ &
2514 & cff*cff1*rhs_ubar(i,j))*fac
2516 ubar(i,j,knew)=ubar(i,j,knew)*umask(i,j)
2519 cff5=abs(abs(umask_wet(i,j))-1.0_r8)
2520 cff6=0.5_r8+dsign(0.5_r8,ubar(i,j,knew))*umask_wet(i,j)
2521 cff7=0.5_r8*umask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
2522 ubar(i,j,knew)=ubar(i,j,knew)*cff7
2523 rhs_ubar(i,j)=rhs_ubar(i,j)*cff7
2526 rufrc(i,j)=rufrc(i,j)*cff7
2527 ru(i,j,0,nstp)=rufrc(i,j)
2531#if defined NESTING && !defined SOLVE3D
2532 du_flux(i,j)=ubar(i,j,knew)* &
2533 & 0.5_r8*(dnew(i,j)+dnew(i-1,j))*on_u(i,j)
2539 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2540 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
2541 vbar(i,j,knew)=(vbar(i,j,kstp)* &
2542 & (dstp(i,j)+dstp(i,j-1))+ &
2543 & cff*cff1*rhs_vbar(i,j))*fac
2545 vbar(i,j,knew)=vbar(i,j,knew)*vmask(i,j)
2548 cff5=abs(abs(vmask_wet(i,j))-1.0_r8)
2549 cff6=0.5_r8+dsign(0.5_r8,vbar(i,j,knew))*vmask_wet(i,j)
2550 cff7=0.5_r8*vmask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
2551 vbar(i,j,knew)=vbar(i,j,knew)*cff7
2552 rhs_vbar(i,j)=rhs_vbar(i,j)*cff7
2555 rvfrc(i,j)=rvfrc(i,j)*cff7
2556 rv(i,j,0,nstp)=rvfrc(i,j)
2560#if defined NESTING && !defined SOLVE3D
2561 dv_flux(i,j)=vbar(i,j,knew)* &
2562 & 0.5_r8*(dnew(i,j)+dnew(i,j-1))*om_v(i,j)
2573 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2574 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2575 ubar(i,j,knew)=(ubar(i,j,kstp)* &
2576 & (dstp(i,j)+dstp(i-1,j))+ &
2577 & cff*cff1*rhs_ubar(i,j))*fac
2579 ubar(i,j,knew)=ubar(i,j,knew)*umask(i,j)
2582 cff5=abs(abs(umask_wet(i,j))-1.0_r8)
2583 cff6=0.5_r8+dsign(0.5_r8,ubar(i,j,knew))*umask_wet(i,j)
2584 cff7=0.5_r8*umask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
2585 ubar(i,j,knew)=ubar(i,j,knew)*cff7
2586 rhs_ubar(i,j)=rhs_ubar(i,j)*cff7
2588#if defined NESTING && !defined SOLVE3D
2589 du_flux(i,j)=ubar(i,j,knew)* &
2590 & 0.5_r8*(dnew(i,j)+dnew(i-1,j))*on_u(i,j)
2596 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2597 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
2598 vbar(i,j,knew)=(vbar(i,j,kstp)* &
2599 & (dstp(i,j)+dstp(i,j-1))+ &
2600 & cff*cff1*rhs_vbar(i,j))*fac
2602 vbar(i,j,knew)=vbar(i,j,knew)*vmask(i,j)
2605 cff5=abs(abs(vmask_wet(i,j))-1.0_r8)
2606 cff6=0.5_r8+dsign(0.5_r8,vbar(i,j,knew))*vmask_wet(i,j)
2607 cff7=0.5_r8*vmask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
2608 vbar(i,j,knew)=vbar(i,j,knew)*cff7
2609 rhs_vbar(i,j)=rhs_vbar(i,j)*cff7
2611#if defined NESTING && !defined SOLVE3D
2612 dv_flux(i,j)=vbar(i,j,knew)* &
2613 & 0.5_r8*(dnew(i,j)+dnew(i,j-1))*om_v(i,j)
2617 ELSE IF (corrector_2d_step)
THEN
2618 cff1=0.5_r8*
dtfast(ng)*5.0_r8/12.0_r8
2619 cff2=0.5_r8*
dtfast(ng)*8.0_r8/12.0_r8
2620 cff3=0.5_r8*
dtfast(ng)*1.0_r8/12.0_r8
2626 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2627 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2628 ubar(i,j,knew)=(ubar(i,j,kstp)* &
2629 & (dstp(i,j)+dstp(i-1,j))+ &
2630 & cff*(cff1*rhs_ubar(i,j)+ &
2631 & cff2*rubar(i,j,kstp)- &
2632 & cff3*rubar(i,j,ptsk)))*fac
2634 ubar(i,j,knew)=ubar(i,j,knew)*umask(i,j)
2637 cff5=abs(abs(umask_wet(i,j))-1.0_r8)
2638 cff6=0.5_r8+dsign(0.5_r8,ubar(i,j,knew))*umask_wet(i,j)
2639 cff7=0.5_r8*umask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
2640 ubar(i,j,knew)=ubar(i,j,knew)*cff7
2641 rhs_ubar(i,j)=rhs_ubar(i,j)*cff7
2643#if defined NESTING && !defined SOLVE3D
2644 du_flux(i,j)=ubar(i,j,knew)* &
2645 & 0.5_r8*(dnew(i,j)+dnew(i-1,j))*on_u(i,j)
2651 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2652 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
2653 vbar(i,j,knew)=(vbar(i,j,kstp)* &
2654 & (dstp(i,j)+dstp(i,j-1))+ &
2655 & cff*(cff1*rhs_vbar(i,j)+ &
2656 & cff2*rvbar(i,j,kstp)- &
2657 & cff3*rvbar(i,j,ptsk)))*fac
2659 vbar(i,j,knew)=vbar(i,j,knew)*vmask(i,j)
2662 cff5=abs(abs(vmask_wet(i,j))-1.0_r8)
2663 cff6=0.5_r8+dsign(0.5_r8,vbar(i,j,knew))*vmask_wet(i,j)
2664 cff7=0.5_r8*vmask_wet(i,j)*cff5+cff6*(1.0_r8-cff5)
2665 vbar(i,j,knew)=vbar(i,j,knew)*cff7
2666 rhs_vbar(i,j)=rhs_vbar(i,j)*cff7
2668#if defined NESTING && !defined SOLVE3D
2669 dv_flux(i,j)=vbar(i,j,knew)* &
2670 & 0.5_r8*(dnew(i,j)+dnew(i,j-1))*om_v(i,j)
2676#ifdef DIAGNOSTICS_UV
2689 diau2rhs(i,j,idiag)=diau2rhs(i,j,idiag)*umask(i,j)
2694 diav2rhs(i,j,idiag)=diav2rhs(i,j,idiag)*vmask(i,j)
2708 IF (first_2d_step.and.corrector_2d_step)
THEN
2713 diau2int(i,j,idiag)=cff1*diau2rhs(i,j,idiag)
2714 diau2wrk(i,j,idiag)=diau2int(i,j,idiag)* &
2715 & (pm(i-1,j)+pm(i,j))*fac
2720 diav2int(i,j,idiag)=cff1*diav2rhs(i,j,idiag)
2721 diav2wrk(i,j,idiag)=diav2int(i,j,idiag)* &
2722 & (pn(i,j)+pn(i,j-1))*fac
2726 ELSE IF (corrector_2d_step)
THEN
2727 cff1=0.5_r8*
dtfast(ng)*5.0_r8/12.0_r8
2728 cff2=0.5_r8*
dtfast(ng)*8.0_r8/12.0_r8
2729 cff3=0.5_r8*
dtfast(ng)*1.0_r8/12.0_r8
2733 diau2int(i,j,idiag)=diau2int(i,j,idiag)+ &
2734 & (cff1*diau2rhs(i,j,idiag)+ &
2735 & cff2*diarubar(i,j,kstp,idiag)- &
2736 & cff3*diarubar(i,j,ptsk,idiag))
2737 diau2wrk(i,j,idiag)=diau2wrk(i,j,idiag)+ &
2738 & diau2int(i,j,idiag)* &
2739 & (pm(i-1,j)+pm(i,j))*fac
2744 diav2int(i,j,idiag)=diav2int(i,j,idiag)+ &
2745 & (cff1*diav2rhs(i,j,idiag)+ &
2746 & cff2*diarvbar(i,j,kstp,idiag)- &
2747 & cff3*diarvbar(i,j,ptsk,idiag))
2748 diav2wrk(i,j,idiag)=diav2wrk(i,j,idiag)+ &
2749 & diav2int(i,j,idiag)* &
2750 & (pn(i,j)+pn(i,j-1))*fac
2759 IF (first_2d_step.and.corrector_2d_step)
THEN
2764 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2765 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2766 diau2wrk(i,j,idiag)=cff*cff1*diau2rhs(i,j,idiag)*fac
2771 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2772 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
2773 diav2wrk(i,j,idiag)=cff*cff1*diav2rhs(i,j,idiag)*fac
2779 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2780 diau2wrk(i,j,
m2rate)=ubar(i,j,knew)-ubar(i,j,kstp)* &
2781 & (dstp(i,j)+dstp(i-1,j))*fac
2786 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
2787 diav2wrk(i,j,
m2rate)=vbar(i,j,knew)-vbar(i,j,kstp)* &
2788 & (dstp(i,j)+dstp(i,j-1))*fac
2791 ELSE IF (corrector_2d_step)
THEN
2792 cff1=0.5_r8*
dtfast(ng)*5.0_r8/12.0_r8
2793 cff2=0.5_r8*
dtfast(ng)*8.0_r8/12.0_r8
2794 cff3=0.5_r8*
dtfast(ng)*1.0_r8/12.0_r8
2798 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2799 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2800 diau2wrk(i,j,idiag)=cff*(cff1*diau2rhs(i,j,idiag)+ &
2801 & cff2*diarubar(i,j,kstp,idiag)- &
2802 & cff3*diarubar(i,j,ptsk,idiag))* &
2808 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2809 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
2810 diav2wrk(i,j,idiag)=cff*(cff1*diav2rhs(i,j,idiag)+ &
2811 & cff2*diarvbar(i,j,kstp,idiag)- &
2812 & cff3*diarvbar(i,j,ptsk,idiag))* &
2819 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2820 diau2wrk(i,j,
m2rate)=ubar(i,j,knew)- &
2822 & (dstp(i,j)+dstp(i-1,j))*fac
2827 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
2828 diav2wrk(i,j,
m2rate)=vbar(i,j,knew)- &
2830 & (dstp(i,j)+dstp(i,j-1))*fac
2843 rubar(i,j,krhs)=rhs_ubar(i,j)
2848 rvbar(i,j,krhs)=rhs_vbar(i,j)
2851#ifdef DIAGNOSTICS_UV
2855 diarubar(i,j,krhs,idiag)=diau2rhs(i,j,idiag)
2860 diarvbar(i,j,krhs,idiag)=diav2rhs(i,j,idiag)
2872 & lbi, ubi, lbj, ubj, &
2873 & imins, imaxs, jmins, jmaxs, &
2874 & krhs, kstp, knew, &
2877 & lbi, ubi, lbj, ubj, &
2878 & imins, imaxs, jmins, jmaxs, &
2879 & krhs, kstp, knew, &
2887 & lbi, ubi, lbj, ubj, &
2888 & imins, imaxs, jmins, jmaxs, &
2897#if defined NESTING && !defined SOLVE3D
2904 IF (
domain(ng)%Western_Edge(tile))
THEN
2906 dnew(istr-1,j)=h(istr-1,j)+zeta_new(istr-1,j)
2911 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2913 dnew(iend+1,j)=h(iend+1,j)+zeta_new(iend+1,j)
2918 IF (
domain(ng)%Southern_Edge(tile))
THEN
2920 dnew(i,jstr-1)=h(i,jstr-1)+zeta_new(i,jstr-1)
2925 IF (
domain(ng)%Northern_Edge(tile))
THEN
2927 dnew(i,jend+1)=h(i,jend+1)+zeta_new(i,jend+1)
2933 IF (
domain(ng)%Western_Edge(tile))
THEN
2935 du_flux(istru-1,j)=ubar(istru-1,j,knew)*on_u(istru-1,j)* &
2936 & 0.5_r8*(dnew(istru-1,j)+dnew(istru-2,j))
2939 dv_flux(istr-1,j)=vbar(istr-1,j,knew)*om_v(istr-1,j)* &
2940 & 0.5_r8*(dnew(istr-1,j)+dnew(istr-1,j-1))
2945 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2947 du_flux(iend+1,j)=ubar(iend+1,j,knew)*on_u(iend+1,j)* &
2948 & 0.5_r8*(dnew(iend+1,j)+dnew(iend,j))
2951 dv_flux(iend+1,j)=vbar(iend+1,j,knew)*om_v(iend+1,j)* &
2952 & 0.5_r8*(dnew(iend+1,j)+dnew(iend+1,j-1))
2957 IF (
domain(ng)%Southern_Edge(tile))
THEN
2959 du_flux(i,jstr-1)=ubar(i,jstr-1,knew)*on_u(i,jstr-1)* &
2960 & 0.5_r8*(dnew(i,jstr-1)+dnew(i-1,jstr-1))
2963 dv_flux(i,jstrv-1)=vbar(i,jstrv-1,knew)*om_v(i,jstrv-1)* &
2964 & 0.5_r8*(dnew(i,jstrv-1)+dnew(i,jstrv-2))
2969 IF (
domain(ng)%Northern_Edge(tile))
THEN
2971 du_flux(i,jend+1)=ubar(i,jend+1,knew)*on_u(i,jend+1)* &
2972 & 0.5_r8*(dnew(i,jend+1)+dnew(i-1,jend+1))
2975 dv_flux(i,jend+1)=vbar(i,jend+1,knew)*om_v(i,jend+1)* &
2976 & 0.5_r8*(dnew(i,jend+1)+dnew(i,jend))
2993 IF (((istrr.le.i).and.(i.le.iendr)).and. &
2994 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
2995 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
2996 cff=1.0_r8/(on_u(i,j)* &
2997 & 0.5_r8*(zeta(i-1,j,knew)+h(i-1,j)+ &
2998 & zeta(i ,j,knew)+h(i ,j)))
2999 ubar(i,j,knew)=
sources(ng)%Qbar(is)*cff
3000#if defined NESTING && !defined SOLVE3D
3001 du_flux(i,j)=
sources(ng)%Qbar(is)
3003 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
3004 cff=1.0_r8/(om_v(i,j)* &
3005 & 0.5_r8*(zeta(i,j-1,knew)+h(i,j-1)+ &
3006 & zeta(i,j ,knew)+h(i,j )))
3007 vbar(i,j,knew)=
sources(ng)%Qbar(is)*cff
3008#if defined NESTING && !defined SOLVE3D
3009 dv_flux(i,j)=
sources(ng)%Qbar(is)
3022 & lbi, ubi, lbj, ubj, &
3025 & lbi, ubi, lbj, ubj, &
3028#if defined NESTING && !defined SOLVE3D
3030 & lbi, ubi, lbj, ubj, &
3033 & lbi, ubi, lbj, ubj, &
3040# if defined NESTING && !defined SOLVE3D
3045 & lbi, ubi, lbj, ubj, &
3048# if defined NESTING && !defined SOLVE3D
3049 & du_flux, dv_flux, &