207 & LBi, UBi, LBj, UBj, UBk, &
208 & IminS, ImaxS, JminS, JmaxS, &
209 & krhs, kstp, knew, &
214 & pmask, rmask, umask, vmask, &
216#ifdef WET_DRY_NOT_YET
217 & pmask_wet, pmask_full, &
218 & rmask_wet, rmask_full, &
219 & umask_wet, umask_full, &
220 & vmask_wet, vmask_full, &
225#if (defined UV_COR && !defined SOLVE3D) || defined step2d_coriolis
229 & om_u, om_v, on_u, on_v, pm, pn, &
230#if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
234#if defined UV_QDRAG && !defined SOLVE3D
237#if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
238 & pmon_r, pnom_r, pmon_p, pnom_p, &
239 & om_r, on_r, om_p, on_p, &
241 & visc2_p, visc2_r, &
244 & visc4_p, visc4_r, &
247#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
251 & tl_rustr2d, tl_rvstr2d, &
252 & tl_rulag2d, tl_rvlag2d, &
253 & ubar_stokes, tl_ubar_stokes, &
254 & vbar_stokes, tl_vbar_stokes, &
256#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
257 & eq_tide, tl_eq_tide, &
270 & tl_du_avg1, tl_du_avg2, &
271 & tl_dv_avg1, tl_dv_avg2, &
275 & tl_rufrc_bak, tl_rvfrc_bak, &
277#if defined NESTING && !defined SOLVE3D
278 & tl_du_flux, tl_dv_flux, &
295 integer,
intent(in ) :: ng, tile
296 integer,
intent(in ) :: LBi, UBi, LBj, UBj, UBk
297 integer,
intent(in ) :: IminS, ImaxS, JminS, JmaxS
298 integer,
intent(in ) :: krhs, kstp, knew
300 integer,
intent(in ) :: nstp, nnew
305 real(r8),
intent(in ) :: pmask(LBi:,LBj:)
306 real(r8),
intent(in ) :: rmask(LBi:,LBj:)
307 real(r8),
intent(in ) :: umask(LBi:,LBj:)
308 real(r8),
intent(in ) :: vmask(LBi:,LBj:)
310# if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
311 real(r8),
intent(in ) :: fomn(LBi:,LBj:)
313 real(r8),
intent(in ) :: h(LBi:,LBj:)
314 real(r8),
intent(in ) :: om_u(LBi:,LBj:)
315 real(r8),
intent(in ) :: om_v(LBi:,LBj:)
316 real(r8),
intent(in ) :: on_u(LBi:,LBj:)
317 real(r8),
intent(in ) :: on_v(LBi:,LBj:)
318 real(r8),
intent(in ) :: pm(LBi:,LBj:)
319 real(r8),
intent(in ) :: pn(LBi:,LBj:)
320# if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
321 real(r8),
intent(in ) :: dndx(LBi:,LBj:)
322 real(r8),
intent(in ) :: dmde(LBi:,LBj:)
324 real(r8),
intent(in ) :: rdrag(LBi:,LBj:)
325# if defined UV_QDRAG && !defined SOLVE3D
326 real(r8),
intent(in ) :: rdrag2(LBi:,LBj:)
328# if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
329 real(r8),
intent(in ) :: pmon_r(LBi:,LBj:)
330 real(r8),
intent(in ) :: pnom_r(LBi:,LBj:)
331 real(r8),
intent(in ) :: pmon_p(LBi:,LBj:)
332 real(r8),
intent(in ) :: pnom_p(LBi:,LBj:)
333 real(r8),
intent(in ) :: om_r(LBi:,LBj:)
334 real(r8),
intent(in ) :: on_r(LBi:,LBj:)
335 real(r8),
intent(in ) :: om_p(LBi:,LBj:)
336 real(r8),
intent(in ) :: on_p(LBi:,LBj:)
338 real(r8),
intent(in ) :: visc2_p(LBi:,LBj:)
339 real(r8),
intent(in ) :: visc2_r(LBi:,LBj:)
342 real(r8),
intent(in ) :: visc4_p(LBi:,LBj:)
343 real(r8),
intent(in ) :: visc4_r(LBi:,LBj:)
346# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
347 real(r8),
intent(in ) :: tl_bed_thick(LBi:,LBj:,:)
350 real(r8),
intent(in ) :: ubar_stokes(LBi:,LBj:)
351 real(r8),
intent(in ) :: vbar_stokes(LBi:,LBj:)
353# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
354 real(r8),
intent(in ) :: eq_tide(LBi:,LBj:)
355 real(r8),
intent(in ) :: tl_eq_tide(LBi:,LBj:)
357 real(r8),
intent(in ) :: ubar(LBi:,LBj:,:)
358 real(r8),
intent(in ) :: vbar(LBi:,LBj:,:)
359 real(r8),
intent(in ) :: zeta(LBi:,LBj:,:)
360# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
361 real(r8),
intent(inout) :: tl_h(LBi:,LBj:)
363 real(r8),
intent(in ) :: tl_h(LBi:,LBj:)
366 real(r8),
intent(in ) :: tl_sustr(LBi:,LBj:)
367 real(r8),
intent(in ) :: tl_svstr(LBi:,LBj:)
369 real(r8),
intent(in ) :: Pair(LBi:,LBj:)
373 real(r8),
intent(in ) :: rhoA(LBi:,LBj:)
374 real(r8),
intent(in ) :: rhoS(LBi:,LBj:)
375 real(r8),
intent(in ) :: tl_rhoA(LBi:,LBj:)
376 real(r8),
intent(in ) :: tl_rhoS(LBi:,LBj:)
378 real(r8),
intent(in ) :: rufrc(LBi:,LBj:)
379 real(r8),
intent(in ) :: rvfrc(LBi:,LBj:)
381 real(r8),
intent(inout) :: tl_DU_avg1(LBi:,LBj:)
382 real(r8),
intent(inout) :: tl_DU_avg2(LBi:,LBj:)
383 real(r8),
intent(inout) :: tl_DV_avg1(LBi:,LBj:)
384 real(r8),
intent(inout) :: tl_DV_avg2(LBi:,LBj:)
385 real(r8),
intent(inout) :: tl_Zt_avg1(LBi:,LBj:)
386 real(r8),
intent(inout) :: tl_rufrc(LBi:,LBj:)
387 real(r8),
intent(inout) :: tl_rvfrc(LBi:,LBj:)
388 real(r8),
intent(inout) :: tl_rufrc_bak(LBi:,LBj:,:)
389 real(r8),
intent(inout) :: tl_rvfrc_bak(LBi:,LBj:,:)
392 real(r8),
intent(inout) :: tl_rustr2d(LBi:,LBj:)
393 real(r8),
intent(inout) :: tl_rvstr2d(LBi:,LBj:)
394 real(r8),
intent(inout) :: tl_rulag2d(LBi:,LBj:)
395 real(r8),
intent(inout) :: tl_rvlag2d(LBi:,LBj:)
396 real(r8),
intent(inout) :: tl_ubar_stokes(LBi:,LBj:)
397 real(r8),
intent(inout) :: tl_vbar_stokes(LBi:,LBj:)
399# ifdef WET_DRY_NOT_YET
400 real(r8),
intent(inout) :: pmask_full(LBi:,LBj:)
401 real(r8),
intent(inout) :: rmask_full(LBi:,LBj:)
402 real(r8),
intent(inout) :: umask_full(LBi:,LBj:)
403 real(r8),
intent(inout) :: vmask_full(LBi:,LBj:)
405 real(r8),
intent(inout) :: pmask_wet(LBi:,LBj:)
406 real(r8),
intent(inout) :: rmask_wet(LBi:,LBj:)
407 real(r8),
intent(inout) :: umask_wet(LBi:,LBj:)
408 real(r8),
intent(inout) :: vmask_wet(LBi:,LBj:)
410 real(r8),
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
413# ifdef DIAGNOSTICS_UV
425 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
426 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
427 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
428# if defined NESTING && !defined SOLVE3D
429 real(r8),
intent(out ) :: tl_DU_flux(LBi:,LBj:)
430 real(r8),
intent(out ) :: tl_DV_flux(LBi:,LBj:)
436 real(r8),
intent(in ) :: pmask(LBi:UBi,LBj:UBj)
437 real(r8),
intent(in ) :: rmask(LBi:UBi,LBj:UBj)
438 real(r8),
intent(in ) :: umask(LBi:UBi,LBj:UBj)
439 real(r8),
intent(in ) :: vmask(LBi:UBi,LBj:UBj)
441# if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
442 real(r8),
intent(in ) :: fomn(LBi:UBi,LBj:UBj)
444 real(r8),
intent(in ) :: h(LBi:UBi,LBj:UBj)
445 real(r8),
intent(in ) :: om_u(LBi:UBi,LBj:UBj)
446 real(r8),
intent(in ) :: om_v(LBi:UBi,LBj:UBj)
447 real(r8),
intent(in ) :: on_u(LBi:UBi,LBj:UBj)
448 real(r8),
intent(in ) :: on_v(LBi:UBi,LBj:UBj)
449 real(r8),
intent(in ) :: pm(LBi:UBi,LBj:UBj)
450 real(r8),
intent(in ) :: pn(LBi:UBi,LBj:UBj)
451# if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
452 real(r8),
intent(in ) :: dndx(LBi:UBi,LBj:UBj)
453 real(r8),
intent(in ) :: dmde(LBi:UBi,LBj:UBj)
455 real(r8),
intent(in ) :: rdrag(LBi:UBi,LBj:UBj)
456# if defined UV_QDRAG && !defined SOLVE3D
457 real(r8),
intent(in ) :: rdrag2(LBi:UBi,LBj:UBj)
459# if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
460 real(r8),
intent(in ) :: pmon_r(LBi:UBi,LBj:UBj)
461 real(r8),
intent(in ) :: pnom_r(LBi:UBi,LBj:UBj)
462 real(r8),
intent(in ) :: pmon_p(LBi:UBi,LBj:UBj)
463 real(r8),
intent(in ) :: pnom_p(LBi:UBi,LBj:UBj)
464 real(r8),
intent(in ) :: om_r(LBi:UBi,LBj:UBj)
465 real(r8),
intent(in ) :: on_r(LBi:UBi,LBj:UBj)
466 real(r8),
intent(in ) :: om_p(LBi:UBi,LBj:UBj)
467 real(r8),
intent(in ) :: on_p(LBi:UBi,LBj:UBj)
469 real(r8),
intent(in ) :: visc2_p(LBi:UBi,LBj:UBj)
470 real(r8),
intent(in ) :: visc2_r(LBi:UBi,LBj:UBj)
473 real(r8),
intent(in ) :: visc4_p(LBi:UBi,LBj:UBj)
474 real(r8),
intent(in ) :: visc4_r(LBi:UBi,LBj:UBj)
477# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
478 real(r8),
intent(in ) :: tl_bed_thick(LBi:UBi,LBj:UBj,3)
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)
486 real(r8),
intent(in ) :: tl_eq_tide(LBi:UBi,LBj:UBj)
488 real(r8),
intent(in ) :: ubar(LBi:UBi,LBj:UBj,:)
489 real(r8),
intent(in ) :: vbar(LBi:UBi,LBj:UBj,:)
490 real(r8),
intent(in ) :: zeta(LBi:UBi,LBj:UBj,:)
491# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
492 real(r8),
intent(inout) :: tl_h(LBi:UBi,LBj:UBj)
494 real(r8),
intent(in ) :: tl_h(LBi:UBi,LBj:UBj)
497 real(r8),
intent(in ) :: tl_sustr(LBi:UBi,LBj:UBj)
498 real(r8),
intent(in ) :: tl_svstr(LBi:UBi,LBj:UBj)
500 real(r8),
intent(in ) :: Pair(LBi:UBi,LBj:UBj)
504 real(r8),
intent(in ) :: rhoA(LBi:UBi,LBj:UBj)
505 real(r8),
intent(in ) :: rhoS(LBi:UBi,LBj:UBj)
506 real(r8),
intent(in ) :: tl_rhoA(LBi:UBi,LBj:UBj)
507 real(r8),
intent(in ) :: tl_rhoS(LBi:UBi,LBj:UBj)
509 real(r8),
intent(in ) :: rufrc(LBi:UBi,LBj:UBj)
510 real(r8),
intent(in ) :: rvfrc(LBi:UBi,LBj:UBj)
512 real(r8),
intent(inout) :: tl_DU_avg1(LBi:UBi,LBj:UBj)
513 real(r8),
intent(inout) :: tl_DU_avg2(LBi:UBi,LBj:UBj)
514 real(r8),
intent(inout) :: tl_DV_avg1(LBi:UBi,LBj:UBj)
515 real(r8),
intent(inout) :: tl_DV_avg2(LBi:UBi,LBj:UBj)
516 real(r8),
intent(inout) :: tl_Zt_avg1(LBi:UBi,LBj:UBj)
517 real(r8),
intent(inout) :: tl_rufrc(LBi:UBi,LBj:UBj)
518 real(r8),
intent(inout) :: tl_rvfrc(LBi:UBi,LBj:UBj)
519 real(r8),
intent(inout) :: tl_rufrc_bak(LBi:UBi,LBj:UBj,2)
520 real(r8),
intent(inout) :: tl_rvfrc_bak(LBi:UBi,LBj:UBj,2)
523 real(r8),
intent(inout) :: tl_rustr2d(LBi:UBi,LBj:UBj)
524 real(r8),
intent(inout) :: tl_rvstr2d(LBi:UBi,LBj:UBj)
525 real(r8),
intent(inout) :: tl_rulag2d(LBi:UBi,LBj:UBj)
526 real(r8),
intent(inout) :: tl_rvlag2d(LBi:UBi,LBj:UBj)
527 real(r8),
intent(inout) :: tl_ubar_stokes(LBi:UBi,LBj:UBj)
528 real(r8),
intent(inout) :: tl_vbar_stokes(LBi:UBi,LBj:UBj)
530# ifdef WET_DRY_NOT_YET
531 real(r8),
intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
532 real(r8),
intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
533 real(r8),
intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
534 real(r8),
intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
536 real(r8),
intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
537 real(r8),
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
538 real(r8),
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
539 real(r8),
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
541 real(r8),
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
544# ifdef DIAGNOSTICS_UV
556 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
557 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
558 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
559# if defined NESTING && !defined SOLVE3D
560 real(r8),
intent(out ) :: tl_DU_flux(LBi:UBi,LBj:UBj)
561 real(r8),
intent(out ) :: tl_DV_flux(LBi:UBi,LBj:UBj)
568 integer :: kbak, kold
573 real(r8) :: bkw0, bkw1, bkw2, bkw_new
574 real(r8) :: fwd0, fwd1, fwd2
576 real(r8) :: cfwd0, cfwd1, cfwd2
578 real(r8) :: cff, cff1, cff2, cff3, cff4
579#ifdef WET_DRY_NOT_YET
580 real(r8) :: cff5, cff6, cff7
582 real(r8) :: fac, fac1, fac2
583 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3, tl_cff4
584#ifdef WET_DRY_NOT_YET
585 real(r8) :: tl_cff5, tl_cff6, tl_cff7
587 real(r8) :: tl_fac, tl_fac1, tl_fac2
589 real(r8),
parameter :: IniVal = 0.0_r8
592#if defined UV_C4ADVECTION && !defined SOLVE3D
593 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
595 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
596 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew_rd
597 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
598#if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
599 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
601 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
602 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
603 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
605 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
606 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
608#if defined STEP2D_CORIOLIS || !defined SOLVE3D
609 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
610 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
613 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
614 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
616#if defined UV_C4ADVECTION && !defined SOLVE3D
617 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
619 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzeta2
620#if defined VAR_RHO_2D && defined SOLVE3D
621 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzetaSA
623 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rubar
624 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rvbar
625 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzeta
626 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: urhs
627 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: vrhs
628 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
629 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
630#ifdef WET_DRY_NOT_YET
631 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
640#if defined UV_C4ADVECTION && !defined SOLVE3D
641 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dgrad
643 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dnew
644 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dnew_rd
645 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Drhs
646#if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
647 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Drhs_p
649 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dstp
650 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DUon
651 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DVom
653 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DUSon
654 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DVSom
656#if defined STEP2D_CORIOLIS || !defined SOLVE3D
657 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFx
658 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFe
661 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFe
662 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFx
664#if defined UV_C4ADVECTION && !defined SOLVE3D
665 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
667 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rzeta2
668#if defined VAR_RHO_2D && defined SOLVE3D
669 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rzetaSA
671 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rzeta
672 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rubar
673 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rvbar
674 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_urhs
675 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_vrhs
676 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_zwrk
678 real(r8),
allocatable :: tl_zeta_new(:,:)
680#include "set_bounds.h"
688# if defined UV_C4ADVECTION && !defined SOLVE3D
694# if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
700# if defined STEP2D_CORIOLIS || !defined SOLVE3D
708# if defined UV_C4ADVECTION && !defined SOLVE3D
712# if defined VAR_RHO_2D && defined SOLVE3D
721# ifdef WET_DRY_NOT_YET
724# ifdef DIAGNOSTICS_UV
754 IF (first_2d_step)
THEN
769 ELSE IF (first_2d_step+1)
THEN
771 IF (kbak.lt.1) kbak=4
776 bkw_new=1.0833333333333_r8
777 bkw0=-0.1666666666666_r8
778 bkw1= 0.0833333333333_r8
782 IF (kbak.lt.1) kbak=4
784 IF (kold.lt.1) kold=4
797 WRITE (20,10)
iic(ng),
iif(ng), kold, kbak, kstp, knew
798 10
FORMAT (
' iic = ',i5.5,
' iif = ',i3.3, &
799 &
' kold = ',i1,
' kbak = ',i1,
' kstp = ',i1,
' knew = ',i1)
812#if defined DISTRIBUTE && !defined NESTING
813# define IR_RANGE IstrUm2-1,Iendp2
814# define JR_RANGE JstrVm2-1,Jendp2
815# define IU_RANGE IstrUm1-1,Iendp2
816# define JU_RANGE Jstrm1-1,Jendp2
817# define IV_RANGE Istrm1-1,Iendp2
818# define JV_RANGE JstrVm1-1,Jendp2
820# define IR_RANGE IstrUm2-1,Iendp2
821# define JR_RANGE JstrVm2-1,Jendp2
822# define IU_RANGE IstrUm2,Iendp2
823# define JU_RANGE JstrVm2-1,Jendp2
824# define IV_RANGE IstrUm2-1,Iendp2
825# define JV_RANGE JstrVm2,Jendp2
834 drhs(i,j)=h(i,j)+zeta(i,j,kstp)
835 tl_drhs(i,j)=tl_h(i,j)+fwd0*tl_zeta(i,j,kstp)+ &
836 & fwd1*tl_zeta(i,j,kbak)+ &
837 & fwd2*tl_zeta(i,j,kold)
844 cff1=cff*(drhs(i,j)+drhs(i-1,j))
845 tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i-1,j))
850 urhs(i,j)=ubar(i,j,kstp)
851 tl_urhs(i,j)=fwd0*tl_ubar(i,j,kstp)+ &
852 & fwd1*tl_ubar(i,j,kbak)+ &
853 & fwd2*tl_ubar(i,j,kold)
854 duon(i,j)=urhs(i,j)*cff1
855 tl_duon(i,j)=tl_urhs(i,j)*cff1+ &
856 & urhs(i,j)*tl_cff1- &
866 cff1=cff*(drhs(i,j)+drhs(i,j-1))
867 tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i,j-1))
872 vrhs(i,j)=vbar(i,j,kstp)
873 tl_vrhs(i,j)=fwd0*tl_vbar(i,j,kstp)+ &
874 & fwd1*tl_vbar(i,j,kbak)+ &
875 & fwd2*tl_vbar(i,j,kold)
876 dvom(i,j)=vrhs(i,j)*cff1
877 tl_dvom(i,j)=tl_vrhs(i,j)*cff1+ &
878 & vrhs(i,j)*tl_cff1- &
892#if defined DISTRIBUTE && \
893 defined uv_adv && defined uv_c4advection &&
904 & imins, imaxs, jmins, jmaxs, &
907 & imins, imaxs, jmins, jmaxs, &
910 & imins, imaxs, jmins, jmaxs, &
913 & imins, imaxs, jmins, jmaxs, &
917 & imins, imaxs, jmins, jmaxs, &
930 & lbi, ubi, lbj, ubj, &
931 & imins, imaxs, jmins, jmaxs, &
939 CALL tl_obc_flux_tile (ng, tile, &
940 & lbi, ubi, lbj, ubj, &
941 & imins, imaxs, jmins, jmaxs, &
946 & h, tl_h, om_v, on_u, &
947 & ubar, vbar, zeta, &
948 & tl_ubar, tl_vbar, tl_zeta)
954 & lbi, ubi, lbj, ubj, &
955 & imins, imaxs, jmins, jmaxs, &
963 CALL tl_set_duv_bc_tile (ng, tile, &
964 & lbi, ubi, lbj, ubj, &
965 & imins, imaxs, jmins, jmaxs, &
972 & tl_ubar, tl_vbar, &
973 & drhs, duon, dvom, &
974 & tl_drhs, tl_duon, tl_dvom)
985 allocate ( tl_zeta_new(imins:imaxs,jmins:jmaxs) )
993 zeta_new(i,j)=zeta(i,j,knew)
995 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
996# ifdef WET_DRY_NOT_YET
1001 dnew(i,j)=h(i,j)+zeta_new(i,j)
1002 dnew_rd(i,j)=dnew(i,j)
1003 dstp(i,j)=h(i,j)+zeta(i,j,kstp)
1016 fac=
dtfast(ng)*pm(i,j)*pn(i,j)
1021 tl_zeta_new(i,j)=tl_zeta(i,j,kstp)+ &
1022 & fac*(tl_duon(i,j)-tl_duon(i+1,j)+ &
1023 & tl_dvom(i,j)-tl_dvom(i,j+1))
1027 tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
1028# ifdef WET_DRY_NOT_YET
1033 zwrk(i,j)=bkw_new*zeta_new(i,j)+ &
1034 & bkw0*zeta(i,j,kstp)+ &
1035 & bkw1*zeta(i,j,kbak)+ &
1036 & bkw2*zeta(i,j,kold)
1037 tl_zwrk(i,j)=bkw_new*tl_zeta_new(i,j)+ &
1038 & bkw0*tl_zeta(i,j,kstp)+ &
1039 & bkw1*tl_zeta(i,j,kbak)+ &
1040 & bkw2*tl_zeta(i,j,kold)
1042#if defined VAR_RHO_2D && defined SOLVE3D
1043 rzeta(i,j)=(1.0_r8+rhos(i,j))*zwrk(i,j)
1044 tl_rzeta(i,j)=(1.0_r8+rhos(i,j))*tl_zwrk(i,j)+ &
1045 & tl_rhos(i,j)*zwrk(i,j)- &
1047 & rhos(i,j)*zwrk(i,j)
1049 rzeta2(i,j)=rzeta(i,j)*zwrk(i,j)
1050 tl_rzeta2(i,j)=tl_rzeta(i,j)*zwrk(i,j)+ &
1051 & rzeta(i,j)*tl_zwrk(i,j)- &
1055 rzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
1056 tl_rzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+ &
1057 & zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))- &
1062 rzeta(i,j)=zwrk(i,j)
1063 tl_rzeta(i,j)=tl_zwrk(i,j)
1064 rzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
1065 tl_rzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)- &
1079 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
1082 IF (((istrr.le.i).and.(i.le.iendr)).and. &
1083 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
1110 CALL rp_zetabc_local (ng, tile, &
1111 & lbi, ubi, lbj, ubj, &
1112 & imins, imaxs, jmins, jmaxs, &
1115 & zeta_new, tl_zeta_new)
1123 tl_zeta(i,j,knew)=tl_zeta_new(i,j)
1141 IF (first_2d_step)
THEN
1146 tl_zt_avg1(i,j)=cff1*tl_zeta(i,j,knew)
1150 tl_du_avg1(i,j)=0.0_r8
1153 tl_du_avg2(i,j)=cff2*tl_duon(i,j)
1158 tl_dv_avg1(i,j)=0.0_r8
1161 tl_dv_avg2(i,j)=cff2*tl_dvom(i,j)
1170 tl_zt_avg1(i,j)=tl_zt_avg1(i,j)+cff1*tl_zeta(i,j,knew)
1174 tl_du_avg2(i,j)=tl_du_avg2(i,j)+cff2*tl_duon(i,j)
1179 tl_dv_avg2(i,j)=tl_dv_avg2(i,j)+cff2*tl_dvom(i,j)
1198# ifdef STEP2D_CORIOLIS
1211#if defined VAR_RHO_2D && defined SOLVE3D
1212 cff2=0.333333333333_r8
1214#if defined ATM_PRESS && !defined SOLVE3D
1215 cff3=0.5_r8*100.0_r8/
rho0
1219 IF (i.ge.istru)
THEN
1225#if defined VAR_RHO_2D && defined SOLVE3D
1238 tl_rubar(i,j)=cff1*on_u(i,j)* &
1241 & (tl_rzeta(i-1,j)- &
1242 & tl_rzeta(i ,j))+ &
1243#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1255#if defined VAR_RHO_2D && defined SOLVE3D
1256# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1259 & (rzetasa(i-1,j)+ &
1261 & cff2*(rhoa(i-1,j)- &
1268 & (tl_rzetasa(i-1,j)+ &
1269 & tl_rzetasa(i ,j)+ &
1270 & cff2*((tl_rhoa(i-1,j)- &
1276 & (tl_zwrk(i-1,j)- &
1277 & tl_zwrk(i ,j))))- &
1279# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1282 & (rzetasa(i-1,j)+ &
1288 & (cff2*(rhoa(i-1,j)- &
1294 & (tl_rzeta2(i-1,j)- &
1296#if defined ATM_PRESS && !defined SOLVE3D
1303 tl_rubar(i,j)=tl_rubar(i,j)- &
1305 & (tl_h(i-1,j)+tl_h(i,j)+ &
1306 & tl_rzeta(i-1,j)+tl_rzeta(i,j))* &
1307 & (pair(i,j)-pair(i-1,j))
1309#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
1316 tl_rubar(i,j)=tl_rubar(i,j)- &
1318 & ((tl_h(i-1,j)+tl_h(i,j)+ &
1319 & tl_rzeta(i-1,j)+tl_rzeta(i,j))* &
1320 & (eq_tide(i,j)-eq_tide(i-1,j))+ &
1321 & (h(i-1,j)+h(i,j)+ &
1322 & rzeta(i-1,j)+rzeta(i,j))* &
1323 & (tl_eq_tide(i,j)-tl_eq_tide(i-1,j))- &
1325 & (h(i-1,j)+h(i,j)+ &
1326 & rzeta(i-1,j)+rzeta(i,j))* &
1327 & (eq_tide(i,j)-eq_tide(i-1,j)))
1330#ifdef DIAGNOSTICS_UV
1335 IF (j.ge.jstrv)
THEN
1341#if defined VAR_RHO_2D && defined SOLVE3D
1354 tl_rvbar(i,j)=cff1*om_v(i,j)* &
1357 & (tl_rzeta(i,j-1)- &
1358 & tl_rzeta(i,j ))+ &
1359#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1371#if defined VAR_RHO_2D && defined SOLVE3D
1372# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1375 & (rzetasa(i,j-1)+ &
1377 & cff2*(rhoa(i,j-1)- &
1384 & (tl_rzetasa(i,j-1)+ &
1385 & tl_rzetasa(i,j )+ &
1386 & cff2*((tl_rhoa(i,j-1)- &
1392 & (tl_zwrk(i,j-1)- &
1393 & tl_zwrk(i,j ))))- &
1395# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1398 & (rzetasa(i,j-1)+ &
1404 & (cff2*(rhoa(i,j-1)- &
1410 & (tl_rzeta2(i,j-1)- &
1412#if defined ATM_PRESS && !defined SOLVE3D
1419 tl_rvbar(i,j)=tl_rvbar(i,j)- &
1421 & (tl_h(i,j-1)+tl_h(i,j)+ &
1422 & tl_rzeta(i,j-1)+tl_rzeta(i,j))* &
1423 & (pair(i,j)-pair(i,j-1))
1425#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
1432 tl_rvbar(i,j)=tl_rvbar(i,j)- &
1434 & ((tl_h(i,j-1)+tl_h(i,j)+ &
1435 & tl_rzeta(i,j-1)+tl_rzeta(i,j))* &
1436 & (eq_tide(i,j)-eq_tide(i,j-1))+ &
1437 & (h(i,j-1)+h(i,j)+ &
1438 & rzeta(i,j-1)+rzeta(i,j))* &
1439 & (tl_eq_tide(i,j)-tl_eq_tide(i,j-1))- &
1441 & (h(i,j-1)+h(i,j)+ &
1442 & rzeta(i,j-1)+rzeta(i,j))* &
1443 & (eq_tide(i,j)-eq_tide(i,j-1)))
1446#ifdef DIAGNOSTICS_UV
1453#if defined UV_ADV && !defined SOLVE3D
1459# ifdef UV_C2ADVECTION
1465 IF (i.ge.istru-1)
THEN
1467 & (duon(i,j)+duon(i+1,j))* &
1470 & ubar_stokes(i ,j)+ &
1471 & ubar_stokes(i+1,j)+ &
1475 tl_ufx(i,j)=0.25_r8* &
1476 & ((tl_duon(i,j)+tl_duon(i+1,j))* &
1479 & ubar_stokes(i ,j)+ &
1480 & ubar_stokes(i+1,j)+ &
1483 & (duon(i,j)+duon(i+1,j))* &
1486 & tl_ubar_stokes(i ,j)+ &
1487 & tl_ubar_stokes(i+1,j)+ &
1489 & tl_urhs(i+1,j)))- &
1495 vfx(i+1,j)=0.25_r8* &
1499 & (duon(i+1,j)+duon(i+1,j-1))* &
1502 & vbar_stokes(i ,j)+ &
1503 & vbar_stokes(i-1,j)+ &
1507 tl_vfx(i+1,j)=0.25_r8* &
1511 & ((tl_duon(i+1,j)+tl_duon(i+1,j-1))* &
1514 & vbar_stokes(i ,j)+ &
1515 & vbar_stokes(i-1,j)+ &
1518 & (duon(i+1,j)+duon(i+1,j-1))* &
1519 & (tl_vrhs(i+1,j)+ &
1521 & tl_vbar_stokes(i ,j)+ &
1522 & tl_vbar_stokes(i-1,j)+ &
1524 & tl_vrhs(i ,j)))- &
1533 IF (j.ge.jstrv-1)
THEN
1535 & (dvom(i,j)+dvom(i,j+1))* &
1538 & vbar_stokes(i,j )+ &
1539 & vbar_stokes(i,j+1)+ &
1543 tl_vfe(i,j)=0.25_r8* &
1544 & ((tl_dvom(i,j)+tl_dvom(i,j+1))* &
1547 & vbar_stokes(i,j )+ &
1548 & vbar_stokes(i,j+1)+ &
1551 & (dvom(i,j)+dvom(i,j+1))* &
1554 & tl_vbar_stokes(i,j )+ &
1555 & tl_vbar_stokes(i,j+1)+ &
1557 & tl_vrhs(i,j+1)))- &
1563 ufe(i,j+1)=0.25_r8* &
1567 & (dvom(i,j+1)+dvom(i-1,j+1))* &
1570 & ubar_stokes(i,j+1)+ &
1571 & ubar_stokes(i,j )+ &
1575 tl_ufe(i,j+1)=0.25_r8* &
1579 & ((tl_dvom(i,j+1)+tl_dvom(i-1,j+1))* &
1582 & ubar_stokes(i,j+1)+ &
1583 & ubar_stokes(i,j )+ &
1586 & (dvom(i,j+1)+dvom(i-1,j+1))* &
1587 & (tl_urhs(i,j+1)+ &
1589 & tl_ubar_stokes(i,j+1)+ &
1590 & tl_ubar_stokes(i,j )+ &
1592 & tl_urhs(i,j )))- &
1599# elif defined UV_C4ADVECTION
1605 grad(i,j)=urhs(i-1,j)-2.0_r8*urhs(i,j)+ &
1607 & ubar_stokes(i-1,j)-2.0_r8*ubar_stokes(i,j)+ &
1608 & ubar_stokes(i+1,j)+ &
1611 tl_grad(i,j)=tl_urhs(i-1,j)-2.0_r8*tl_urhs(i,j)+ &
1613 & tl_ubar_stokes(i-1,j)-2.0_r8*tl_ubar_stokes(i,j)+&
1614 & tl_ubar_stokes(i+1,j)+ &
1617 dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
1618 tl_dgrad(i,j)=tl_duon(i-1,j)-2.0_r8*tl_duon(i,j)+ &
1623 IF (
domain(ng)%Western_Edge(tile))
THEN
1625 grad(istr,j)=grad(istr+1,j)
1626 tl_grad(istr,j)=tl_grad(istr+1,j)
1627 dgrad(istr,j)=dgrad(istr+1,j)
1628 tl_dgrad(istr,j)=tl_dgrad(istr+1,j)
1633 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1635 grad(iend+1,j)=grad(iend,j)
1636 tl_grad(iend+1,j)=tl_grad(iend,j)
1637 dgrad(iend+1,j)=dgrad(iend,j)
1638 tl_dgrad(iend+1,j)=tl_dgrad(iend,j)
1646 ufx(i,j)=0.25_r8*(urhs(i ,j)+ &
1648 & ubar_stokes(i ,j)+ &
1649 & ubar_stokes(i+1,j)+ &
1652 & cff*(grad(i,j)+grad(i+1,j)))* &
1653 & (duon(i,j)+duon(i+1,j)- &
1654 & cff*(dgrad(i,j)+dgrad(i+1,j)))
1656 tl_ufx(i,j)=0.25_r8* &
1659 & ubar_stokes(i ,j)+ &
1660 & ubar_stokes(i+1,j)+ &
1663 & cff*(grad(i,j)+grad(i+1,j)))* &
1664 & (tl_duon(i,j)+tl_duon(i+1,j)- &
1665 & cff*(tl_dgrad(i,j)+tl_dgrad(i+1,j)))+ &
1668 & tl_ubar_stokes(i ,j)+ &
1669 & tl_ubar_stokes(i+1,j)+ &
1672 & cff*(tl_grad(i,j)+tl_grad(i+1,j)))* &
1673 & (duon(i,j)+duon(i+1,j)- &
1674 & cff*(dgrad(i,j)+dgrad(i+1,j))))- &
1683 grad(i,j)=urhs(i,j-1)-2.0_r8*urhs(i,j)+ &
1685 & ubar_stokes(i,j-1)-2.0_r8*ubar_stokes(i,j)+ &
1686 & ubar_stokes(i,j+1)+ &
1689 tl_grad(i,j)=tl_urhs(i,j-1)-2.0_r8*tl_urhs(i,j)+ &
1691 & tl_ubar_stokes(i,j-1)-2.0_r8*tl_ubar_stokes(i,j)+&
1692 & tl_ubar_stokes(i,j+1)+ &
1698 IF (
domain(ng)%Southern_Edge(tile))
THEN
1700 grad(i,jstr-1)=grad(i,jstr)
1701 tl_grad(i,jstr-1)=tl_grad(i,jstr)
1706 IF (
domain(ng)%Northern_Edge(tile))
THEN
1708 grad(i,jend+1)=grad(i,jend)
1709 tl_grad(i,jend+1)=tl_grad(i,jend)
1715 dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
1716 tl_dgrad(i,j)=tl_dvom(i-1,j)-2.0_r8*tl_dvom(i,j)+ &
1724 ufe(i,j)=0.25_r8*(urhs(i,j )+ &
1726 & ubar_stokes(i,j )+ &
1727 & ubar_stokes(i,j-1)+ &
1730 & cff*(grad(i,j)+grad(i,j-1)))* &
1731 & (dvom(i,j)+dvom(i-1,j)- &
1732 & cff*(dgrad(i,j)+dgrad(i-1,j)))
1734 tl_ufe(i,j)=0.25_r8* &
1735 & ((tl_urhs(i,j )+ &
1737 & tl_ubar_stokes(i,j )+ &
1738 & tl_ubar_stokes(i,j-1)+ &
1741 & cff*(tl_grad(i,j)+tl_grad(i,j-1)))* &
1742 & (dvom(i,j)+dvom(i-1,j)- &
1743 & cff*(dgrad(i,j)+dgrad(i-1,j)))+ &
1746 & ubar_stokes(i,j )+ &
1747 & ubar_stokes(i,j-1)+ &
1750 & cff*(grad(i,j)+grad(i,j-1)))* &
1751 & (tl_dvom(i,j)+tl_dvom(i-1,j)- &
1752 & cff*(tl_dgrad(i,j)+tl_dgrad(i-1,j))))- &
1763 grad(i,j)=vrhs(i-1,j)-2.0_r8*vrhs(i,j)+ &
1765 & vbar_stokes(i-1,j)-2.0_r8*vbar_stokes(i,j)+ &
1766 & vbar_stokes(i+1,j)+ &
1769 tl_grad(i,j)=tl_vrhs(i-1,j)-2.0_r8*tl_vrhs(i,j)+ &
1771 & tl_vbar_stokes(i-1,j)-2.0_r8*tl_vbar_stokes(i,j)+&
1772 & tl_vbar_stokes(i+1,j)+ &
1778 IF (
domain(ng)%Western_Edge(tile))
THEN
1780 grad(istr-1,j)=grad(istr,j)
1781 tl_grad(istr-1,j)=tl_grad(istr,j)
1786 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1788 grad(iend+1,j)=grad(iend,j)
1789 tl_grad(iend+1,j)=tl_grad(iend,j)
1795 dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
1796 tl_dgrad(i,j)=tl_duon(i,j-1)-2.0_r8*tl_duon(i,j)+ &
1804 vfx(i,j)=0.25_r8*(vrhs(i ,j)+ &
1806 & vbar_stokes(i ,j)+ &
1807 & vbar_stokes(i-1,j)+ &
1810 & cff*(grad(i,j)+grad(i-1,j)))* &
1811 & (duon(i,j)+duon(i,j-1)- &
1812 & cff*(dgrad(i,j)+dgrad(i,j-1)))
1814 tl_vfx(i,j)=0.25_r8* &
1815 & ((tl_vrhs(i ,j)+ &
1817 & tl_vbar_stokes(i ,j)+ &
1818 & tl_vbar_stokes(i-1,j)+ &
1821 & cff*(tl_grad(i,j)+tl_grad(i-1,j)))* &
1822 & (duon(i,j)+duon(i,j-1)- &
1823 & cff*(dgrad(i,j)+dgrad(i,j-1)))+ &
1826 & vbar_stokes(i ,j)+ &
1827 & vbar_stokes(i-1,j)+ &
1830 & cff*(grad(i,j)+grad(i-1,j)))* &
1831 & (tl_duon(i,j)+tl_duon(i,j-1)- &
1832 & cff*(tl_dgrad(i,j)+tl_dgrad(i,j-1))))- &
1841 grad(i,j)=vrhs(i,j-1)-2.0_r8*vrhs(i,j)+ &
1843 & vbar_stokes(i,j-1)-2.0_r8*vbar_stokes(i,j)+ &
1844 & vbar_stokes(i,j+1)+ &
1847 tl_grad(i,j)=tl_vrhs(i,j-1)-2.0_r8*tl_vrhs(i,j)+ &
1849 & tl_vbar_stokes(i,j-1)-2.0_r8*tl_vbar_stokes(i,j)+&
1850 & tl_vbar_stokes(i,j+1)+ &
1853 dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
1854 tl_dgrad(i,j)=tl_dvom(i,j-1)-2.0_r8*tl_dvom(i,j)+ &
1859 IF (
domain(ng)%Southern_Edge(tile))
THEN
1861 grad(i,jstr)=grad(i,jstr+1)
1862 tl_grad(i,jstr)=tl_grad(i,jstr+1)
1863 dgrad(i,jstr)=dgrad(i,jstr+1)
1864 tl_dgrad(i,jstr)=tl_dgrad(i,jstr+1)
1869 IF (
domain(ng)%Northern_Edge(tile))
THEN
1871 grad(i,jend+1)=grad(i,jend)
1872 tl_grad(i,jend+1)=tl_grad(i,jend)
1873 dgrad(i,jend+1)=dgrad(i,jend)
1874 tl_dgrad(i,jend+1)=tl_dgrad(i,jend)
1882 vfe(i,j)=0.25_r8*(vrhs(i,j )+ &
1884 & vbar_stokes(i,j )+ &
1885 & vbar_stokes(i,j+1)+ &
1888 & cff*(grad(i,j)+grad(i,j+1)))* &
1889 & (dvom(i,j)+dvom(i,j+1)- &
1890 & cff*(dgrad(i,j)+dgrad(i,j+1)))
1892 tl_vfe(i,j)=0.25_r8* &
1893 & ((tl_vrhs(i,j )+ &
1895 & tl_vbar_stokes(i,j )+ &
1896 & tl_vbar_stokes(i,j+1)+ &
1899 & cff*(tl_grad(i,j)+tl_grad(i,j+1)))* &
1900 & (dvom(i,j)+dvom(i,j+1)- &
1901 & cff*(dgrad(i,j)+dgrad(i,j+1)))+ &
1904 & vbar_stokes(i,j )+ &
1905 & vbar_stokes(i,j+1)+ &
1908 & cff*(grad(i,j)+grad(i,j+1)))* &
1909 & (tl_dvom(i,j)+tl_dvom(i,j+1)- &
1910 & cff*(tl_dgrad(i,j)+tl_dgrad(i,j+1))))- &
1922 IF (i.ge.istru)
THEN
1925 tl_cff1=tl_ufx(i,j)-tl_ufx(i-1,j)
1928 tl_cff2=tl_ufe(i,j+1)-tl_ufe(i,j)
1931 tl_fac1=tl_cff1+tl_cff2
1934 tl_rubar(i,j)=tl_rubar(i,j)-tl_fac1
1935# if defined DIAGNOSTICS_UV
1942 IF (j.ge.jstrv)
THEN
1945 tl_cff3=tl_vfx(i+1,j)-tl_vfx(i,j)
1948 tl_cff4=tl_vfe(i,j)-tl_vfe(i,j-1)
1951 tl_fac2=tl_cff3+tl_cff4
1954 tl_rvbar(i,j)=tl_rvbar(i,j)-tl_fac2
1955# if defined DIAGNOSTICS_UV
1965#if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
1973 cff=0.5_r8*drhs(i,j)*fomn(i,j)
1974 tl_cff=0.5_r8*tl_drhs(i,j)*fomn(i,j)
1975 ufx(i,j)=cff*(vrhs(i,j )+ &
1977 & vbar_stokes(i,j )+ &
1978 & vbar_stokes(i,j+1)+ &
1982 tl_ufx(i,j)=tl_cff*(vrhs(i,j )+ &
1984 & vbar_stokes(i,j )+ &
1985 & vbar_stokes(i,j+1)+ &
1988 & cff*(tl_vrhs(i,j )+ &
1990 & tl_vbar_stokes(i,j )+ &
1991 & tl_vbar_stokes(i,j+1)+ &
1993 & tl_vrhs(i,j+1))- &
1998 vfe(i,j)=cff*(urhs(i ,j)+ &
2000 & ubar_stokes(i ,j)+ &
2001 & ubar_stokes(i+1,j)+ &
2005 tl_vfe(i,j)=tl_cff*(urhs(i ,j)+ &
2007 & ubar_stokes(i ,j)+ &
2008 & ubar_stokes(i+1,j)+ &
2011 & cff*(tl_urhs(i ,j)+ &
2013 & tl_ubar_stokes(i ,j)+ &
2014 & tl_ubar_stokes(i+1,j)+ &
2016 & tl_urhs(i+1,j))- &
2025 IF (i.ge.istru)
THEN
2028 tl_fac1=0.5_r8*(tl_ufx(i,j)+tl_ufx(i-1,j))
2031 tl_rubar(i,j)=tl_rubar(i,j)+tl_fac1
2032# if defined DIAGNOSTICS_UV
2037 IF (j.ge.jstrv)
THEN
2040 tl_fac2=0.5_r8*(tl_vfe(i,j)+tl_vfe(i,j-1))
2043 tl_rvbar(i,j)=tl_rvbar(i,j)-tl_fac2
2044# if defined DIAGNOSTICS_UV
2052#if (defined CURVGRID && defined UV_ADV) && !defined SOLVE3D
2060 cff1=0.5_r8*(vrhs(i,j )+ &
2062 & vbar_stokes(i,j )+ &
2063 & vbar_stokes(i,j+1)+ &
2066 tl_cff1=0.5_r8*(tl_vrhs(i,j )+ &
2068 & tl_vbar_stokes(i,j )+ &
2069 & tl_vbar_stokes(i,j+1)+ &
2073 cff2=0.5_r8*(urhs(i ,j)+
2075 & ubar_stokes(i ,j)+ &
2076 & ubar_stokes(i+1,j)+ &
2079 tl_cff2=0.5_r8*(tl_urhs(i ,j)+ &
2081 & tl_ubar_stokes(i ,j)+ &
2082 & tl_ubar_stokes(i+1,j)+ &
2087 tl_cff3=tl_cff1*dndx(i,j)
2089 tl_cff4=tl_cff2*dmde(i,j)
2090 cff=drhs(i,j)*(cff3-cff4)
2091 tl_cff=tl_drhs(i,j)*(cff3-cff4)+ &
2092 & drhs(i,j)*(tl_cff3-tl_cff4)- &
2098 tl_ufx(i,j)=tl_cff*cff1+cff*tl_cff1- &
2104 tl_vfe(i,j)=tl_cff*cff2+cff*tl_cff2- &
2108# if defined DIAGNOSTICS_UV
2118 IF (i.ge.istru)
THEN
2121 tl_fac1=0.5_r8*(tl_ufx(i,j)+tl_ufx(i-1,j))
2124 tl_rubar(i,j)=tl_rubar(i,j)+tl_fac1
2125# if defined DIAGNOSTICS_UV
2133 IF (j.ge.jstrv)
THEN
2136 tl_fac1=0.5_r8*(tl_vfe(i,j)+tl_vfe(i,j-1))
2139 tl_rvbar(i,j)=tl_rvbar(i,j)-tl_fac1
2140# if defined DIAGNOSTICS_UV
2151#if (defined UV_VIS2 || defined RPM_RELAXATION) && !defined SOLVE3D
2161 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
2162 & drhs(i,j-1)+drhs(i-1,j-1))
2163 tl_drhs_p(i,j)=0.25_r8*(tl_drhs(i,j )+tl_drhs(i-1,j )+ &
2164 & tl_drhs(i,j-1)+tl_drhs(i-1,j-1))
2173 cff=visc2_r(i,j)*drhs(i,j)*0.5_r8* &
2175 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,kstp)- &
2176 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,kstp))- &
2178 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,kstp)- &
2179 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,kstp)))
2181 tl_cff=visc2_r(i,j)*0.5_r8* &
2184 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,kstp)- &
2185 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,kstp))- &
2187 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,kstp)- &
2188 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,kstp)))+ &
2191 & ((pn(i ,j)+pn(i+1,j))*tl_ubar(i+1,j,kstp)- &
2192 & (pn(i-1,j)+pn(i ,j))*tl_ubar(i ,j,kstp))- &
2194 & ((pm(i,j )+pm(i,j+1))*tl_vbar(i,j+1,kstp)- &
2195 & (pm(i,j-1)+pm(i,j ))*tl_vbar(i,j ,kstp))))- &
2201 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
2204 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
2210 cff=visc2_p(i,j)*drhs_p(i,j)*0.5_r8* &
2212 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,kstp)- &
2213 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,kstp))+ &
2215 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,kstp)- &
2216 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,kstp)))
2218 tl_cff=visc2_p(i,j)*0.5_r8* &
2219 & (tl_drhs_p(i,j)* &
2221 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,kstp)- &
2222 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,kstp))+ &
2224 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,kstp)- &
2225 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,kstp)))+ &
2228 & ((pn(i ,j-1)+pn(i ,j))*tl_vbar(i ,j,kstp)- &
2229 & (pn(i-1,j-1)+pn(i-1,j))*tl_vbar(i-1,j,kstp))+ &
2231 & ((pm(i-1,j )+pm(i,j ))*tl_ubar(i,j ,kstp)- &
2232 & (pm(i-1,j-1)+pm(i,j-1))*tl_ubar(i,j-1,kstp))))- &
2239 tl_cff=tl_cff*pmask(i,j)
2241# ifdef WET_DRY_NOT_YET
2244 tl_cff=tl_cff*pmask_wet(i,j)
2248 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
2251 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
2259 IF (i.ge.istru)
THEN
2262 tl_cff1=0.5_r8*(pn(i-1,j)+pn(i,j))* &
2263 & (tl_ufx(i,j )-tl_ufx(i-1,j))
2266 tl_cff2=0.5_r8*(pm(i-1,j)+pm(i,j))* &
2267 & (tl_ufe(i,j+1)-tl_ufe(i ,j))
2270 tl_fac1=tl_cff1+tl_cff2
2273 tl_rubar(i,j)=tl_rubar(i,j)+tl_fac1
2274# if defined DIAGNOSTICS_UV
2281 IF (j.ge.jstrv)
THEN
2284 tl_cff1=0.5_r8*(pn(i,j-1)+pn(i,j))* &
2285 & (tl_vfx(i+1,j)-tl_vfx(i,j ))
2288 tl_cff2=0.5_r8*(pm(i,j-1)+pm(i,j))* &
2289 & (tl_vfe(i ,j)-tl_vfe(i,j-1))
2292 tl_fac1=tl_cff1-tl_cff2
2295 tl_rvbar(i,j)=tl_rvbar(i,j)+tl_fac1
2296# if defined DIAGNOSTICS_UV
2306#if defined RPM_RELAXATION && !defined SOLVE#D
2320 tl_ufx(i,j)=
tl_m2diff(ng)*pmon_r(i,j)*drhs(i,j)* &
2321 & (tl_ubar(i+1,j,kstp)-ubar(i+1,j,kstp)- &
2322 & tl_ubar(i ,j,kstp)+ubar(i ,j,kstp))
2327 tl_ufe(i,j)=
tl_m2diff(ng)*pnom_p(i,j)*drhs_p(i,j)* &
2328 & (tl_ubar(i,j ,kstp)-ubar(i,j ,kstp)- &
2329 & tl_ubar(i,j-1,kstp)+ubar(i,j-1,kstp))
2331 tl_ufe(i,j)=tl_ufe(i,j)*pmask(i,j)
2337 tl_vfx(i,j)=
tl_m2diff(ng)*pmon_p(i,j)*drhs_p(i,j)* &
2338 & (tl_vbar(i ,j,kstp)-vbar(i ,j,kstp)- &
2339 & tl_vbar(i-1,j,kstp)+vbar(i-1,j,kstp))
2341 tl_vfx(i,j)=tl_vfx(i,j)*pmask(i,j)
2347 tl_vfe(i,j)=
tl_m2diff(ng)*pnom_r(i,j)*drhs(i,j)* &
2348 & (tl_vbar(i,j+1,kstp)-vbar(i,j+1,kstp)- &
2349 & tl_vbar(i,j ,kstp)+vbar(i,j ,kstp))
2357 tl_rubar(i,j)=tl_rubar(i,j)+ &
2358 & tl_ufx(i,j)-tl_ufx(i-1,j)+ &
2359 & tl_ufe(i,j+1)-tl_ufe(i,j)
2364 tl_rvbar(i,j)=tl_rvbar(i,j)+ &
2365 & tl_vfx(i+1,j)-tl_vfx(i,j)+ &
2366 & tl_vfe(i,j)-tl_vfe(i,j-1)
2397 coupled_step :
IF (first_2d_step)
THEN
2413 cfwd1=-0.5_r8-2.0_r8*cfwd2
2429 IF (i.ge.istru)
THEN
2434 tl_rufrc(i,j)=tl_rufrc(i,j)+ &
2435 & 0.5_r8*(rdrag(i,j)+rdrag(i-1,j))* &
2436 & om_u(i,j)*on_u(i,j)*tl_ubar(i,j,kstp)
2439 IF (j.ge.jstrv)
THEN
2444 tl_rvfrc(i,j)=tl_rvfrc(i,j)+ &
2445 & 0.5_r8*(rdrag(i,j)+rdrag(i,j-1))* &
2446 & om_v(i,j)*on_v(i,j)*tl_vbar(i,j,kstp)
2451 IF (i.ge.istru)
THEN
2454 tl_cff1=tl_rufrc(i,j)-tl_rubar(i,j)
2459 tl_rufrc(i,j)=cfwd0*tl_cff1+ &
2460 & cfwd1*tl_rufrc_bak(i,j, nstp)+ &
2461 & cfwd2*tl_rufrc_bak(i,j,3-nstp)
2464 tl_rufrc_bak(i,j,3-nstp)=tl_cff1
2467 IF (j.ge.jstrv)
THEN
2470 tl_cff2=tl_rvfrc(i,j)-tl_rvbar(i,j)
2475 tl_rvfrc(i,j)=cfwd0*tl_cff2+ &
2476 & cfwd1*tl_rvfrc_bak(i,j, nstp)+ &
2477 & cfwd2*tl_rvfrc_bak(i,j,3-nstp)
2480 tl_rvfrc_bak(i,j,3-nstp)=tl_cff2
2493 tl_zwrk(i,j)=tl_zeta_new(i,j)-tl_zeta(i,j,kstp)
2494# if defined VAR_RHO_2D && defined SOLVE3D
2497 tl_rzeta(i,j)=(1.0_r8+rhos(i,j))*tl_zwrk(i,j)+ &
2498 & tl_rhos(i,j)*zwrk(i,j)- &
2500 & rhos(i,j)*zwrk(i,j)
2504 tl_rzeta2(i,j)=tl_rzeta(i,j)* &
2505 & (zeta_new(i,j)+zeta(i,j,kstp))+ &
2507 & (tl_zeta_new(i,j)+tl_zeta(i,j,kstp))- &
2513 tl_rzetasa(i,j)=tl_zwrk(i,j)* &
2514 & (rhos(i,j)-rhoa(i,j))+ &
2516 & (tl_rhos(i,j)-tl_rhoa(i,j))- &
2523 tl_rzeta(i,j)=tl_zwrk(i,j)
2526 tl_rzeta2(i,j)=tl_zwrk(i,j)* &
2527 & (zeta_new(i,j)+zeta(i,j,kstp))+ &
2529 & (tl_zeta_new(i,j)+tl_zeta(i,j,kstp))- &
2538# if defined VAR_RHO_2D && defined SOLVE3D
2539 cff2=0.333333333333_r8
2543 IF (i.ge.istru)
THEN
2550# if defined VAR_RHO_2D && defined SOLVE3D
2563 tl_rubar(i,j)=tl_rubar(i,j)+ &
2567 & (tl_rzeta(i-1,j)- &
2568 & tl_rzeta(i ,j))+ &
2569#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2581#if defined VAR_RHO_2D && defined SOLVE3D
2582# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2585 & (rzetasa(i-1,j)+ &
2587 & cff2*(rhoa(i-1,j)- &
2594 & (tl_rzetasa(i-1,j)+ &
2595 & tl_rzetasa(i ,j)+ &
2596 & cff2*((tl_rhoa(i-1,j)- &
2602 & (tl_zwrk(i-1,j)- &
2603 & tl_zwrk(i ,j))))- &
2605# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2608 & (rzetasa(i-1,j)+ &
2614 & (cff2*(rhoa(i-1,j)- &
2620 & (tl_rzeta2(i-1,j)- &
2622# ifdef DIAGNOSTICS_UV
2628 IF (j.ge.jstrv)
THEN
2635# if defined VAR_RHO_2D && defined SOLVE3D
2648 tl_rvbar(i,j)=tl_rvbar(i,j)+ &
2652 & (tl_rzeta(i,j-1)- &
2653 & tl_rzeta(i,j ))+ &
2654#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2666#if defined VAR_RHO_2D && defined SOLVE3D
2667# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2670 & (rzetasa(i,j-1)+ &
2672 & cff2*(rhoa(i,j-1)- &
2679 & (tl_rzetasa(i,j-1)+ &
2680 & tl_rzetasa(i,j )+ &
2681 & cff2*((tl_rhoa(i,j-1)- &
2687 & (tl_zwrk(i,j-1)- &
2688 & tl_zwrk(i,j ))))- &
2690# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2693 & (rzetasa(i,j-1)+ &
2699 & (cff2*(rhoa(i,j-1)- &
2705 & (tl_rzeta2(i,j-1)- &
2707# ifdef DIAGNOSTICS_UV
2747 tl_dnew(i,j)=tl_h(i,j)+tl_zeta_new(i,j)
2750 tl_dnew_rd(i,j)=tl_dnew(i,j)
2753 tl_dstp(i,j)=tl_h(i,j)+tl_zeta(i,j,kstp)
2757#if defined UV_QDRAG && !defined SOLVE3D
2769 cff=
dtfast(ng)/sqrt(3.0_r8)
2772 cff1=ubar(i ,j,kstp)**2+ &
2773 & ubar(i+1,j,kstp)**2+ &
2774 & ubar(i ,j,kstp)*ubar(i+1,j,kstp)+ &
2775 & vbar(i,j ,kstp)**2+ &
2776 & vbar(i,j+1,kstp)**2+ &
2777 & vbar(i,j ,kstp)*vbar(i,j+1,kstp)
2778 tl_cff1=2.0_r8*ubar(i ,j,kstp)*tl_ubar(i ,j,kstp)+ &
2779 & 2.0_r8*ubar(i+1,j,kstp)*tl_ubar(i+1,j,kstp)+ &
2780 & tl_ubar(i ,j,kstp)*ubar(i+1,j,kstp)+ &
2781 & tl_ubar(i+1,j,kstp)*ubar(i ,j,kstp)+ &
2782 & 2.0_r8*vbar(i,j ,kstp)*tl_vbar(i,j ,kstp)+ &
2783 & 2.0_r8*vbar(i,j+1,kstp)*tl_ vbar(i,j+1,kstp)+ &
2784 & tl_vbar(i,j ,kstp)*vbar(i,j+1,kstp)+ &
2785 & tl_vbar(i,j+1,kstp)*vbar(i,j ,kstp)- &
2790 tl_cff2=0.5_r8*tl_cff1/cff2+ &
2797 tl_dnew_rd(i,j)=tl_dnew_rd(i,j)+ &
2798 & cff*rdrag2(i,j)*tl_cff2
2813 cff3=cff*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2814 fac1=1.0_r8/(dnew_rd(i,j)+dnew_rd(i-1,j))
2815 tl_fac1=-fac1*fac1*(tl_dnew_rd(i,j)+tl_dnew_rd(i-1,j))+ &
2827 tl_ubar(i,j,knew)=tl_fac1* &
2828 & ((dstp(i,j)+dstp(i-1,j))*ubar(i,j,kstp)+ &
2830 & cff3*(rubar(i,j)+rufrc(i,j)))+ &
2832 & cff3*rubar(i,j)+cff2*sustr(i,j))+ &
2835 & ((dstp(i,j)+dstp(i-1,j))* &
2836 & tl_ubar(i,j,kstp)+ &
2837 & (tl_dstp(i,j)+tl_dstp(i-1,j))* &
2840 & cff3*(tl_rubar(i,j)+tl_rufrc(i,j)))- &
2843 & (2.0_r8*ubar(i,j,kstp)* &
2844 & (dstp(i,j)+dstp(i-1,j))+ &
2845 & cff3*(rubar(i,j)+rufrc(i,j)))
2848 & cff3*tl_rubar(i,j)+cff2*tl_sustr(i,j))- &
2851 & (2.0_r8*ubar(i,j,kstp)* &
2852 & (dstp(i,j)+dstp(i-1,j))+ &
2853 & cff3*rubar(i,j)+cff2*sustr(i,j))
2859 tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
2861#ifdef WET_DRY_NOT_YET
2875 tl_du_avg1(i,j)=tl_du_avg1(i,j)+ &
2877 & ((dnew(i,j)+dnew(i-1,j))* &
2878 & tl_ubar(i,j,knew)+ &
2879 & (tl_dnew(i,j)+tl_dnew(i-1,j))* &
2880 & ubar(i,j,knew))- &
2883 & (dnew(i,j)+dnew(i-1,j))* &
2887#if defined NESTING && !defined SOLVE3D
2891 tl_du_flux(i,j)=0.5_r8*on_u(i,j)* &
2892 & ((dnew(i,j)+dnew(i-1,j))* &
2893 & tl_ubar(i,j,knew)+ &
2894 & (tl_dnew(i,j)+tl_dnew(i-1,j))* &
2895 & ubar(i,j,knew))- &
2897 & 0.5_r8*on_u(i,j)* &
2898 & (dnew(i,j)+dnew(i-1,j))* &
2907 cff3=cff*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2908 fac2=1.0_r8/(dnew_rd(i,j)+dnew_rd(i,j-1))
2909 tl_fac2=-fac2*fac2*(tl_dnew_rd(i,j)+tl_dnew_rd(i,j-1))+ &
2921 tl_vbar(i,j,knew)=tl_fac2* &
2922 & ((dstp(i,j)+dstp(i,j-1))*vbar(i,j,kstp)+ &
2924 & cff3*(rvbar(i,j)+rvfrc(i,j)))+ &
2926 & cff3*rvbar(i,j)+cff2*svstr(i,j))+ &
2929 & ((dstp(i,j)+dstp(i,j-1))* &
2930 & tl_vbar(i,j,kstp)+ &
2931 & (tl_dstp(i,j)+tl_dstp(i,j-1))* &
2934 & cff3*(tl_rvbar(i,j)+tl_rvfrc(i,j)))- &
2937 & (2.0_r8*vbar(i,j,kstp)* &
2938 & (dstp(i,j)+dstp(i,j-1))+ &
2939 & cff3*(rvbar(i,j)+rvfrc(i,j)))
2942 & cff3*tl_rvbar(i,j)+cff2*tl_svstr(i,j))- &
2945 & (2.0_r8*vbar(i,j,kstp)* &
2946 & (dstp(i,j)+dstp(i,j-1))+ &
2947 & cff3*rvbar(i,j)+cff2*svstr(i,j))
2953 tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
2955#ifdef WET_DRY_NOT_YET
2969 tl_dv_avg1(i,j)=tl_dv_avg1(i,j)+ &
2971 & ((dnew(i,j)+dnew(i,j-1))* &
2972 & tl_vbar(i,j,knew)+ &
2973 & (tl_dnew(i,j)+tl_dnew(i,j-1))* &
2974 & vbar(i,j,knew))- &
2977 & (dnew(i,j)+dnew(i,j-1))* &
2981#if defined NESTING && !defined SOLVE3D
2985 tl_dv_flux(i,j)=0.5_r8*om_v(i,j)* &
2986 & ((dnew(i,j)+dnew(i,j-1))* &
2987 & tl_vbar(i,j,knew)+ &
2988 & (tl_dnew(i,j)+tl_dnew(i,j-1))* &
2989 & vbar(i,j,knew))- &
2991 & 0.5_r8*om_v(i,j)* &
2992 & (dnew(i,j)+dnew(i,j-1))* &
3008 & lbi, ubi, lbj, ubj, &
3009 & imins, imaxs, jmins, jmaxs, &
3010 & krhs, kstp, knew, &
3011 & ubar, vbar, zeta, &
3012 & tl_ubar, tl_vbar, tl_zeta)
3020 & lbi, ubi, lbj, ubj, &
3021 & imins, imaxs, jmins, jmaxs, &
3022 & krhs, kstp, knew, &
3023 & ubar, vbar, zeta, &
3024 & tl_ubar, tl_vbar, tl_zeta)
3041 & lbi, ubi, lbj, ubj, &
3042 & imins, imaxs, jmins, jmaxs, &
3047 & h, tl_h, om_v, on_u, &
3048 & ubar, vbar, zeta, &
3049 & tl_ubar, tl_vbar, tl_zeta)
3052#if defined SOLVE3D || (defined NESTING && !defined SOLVE3D)
3057 IF (
domain(ng)%Western_Edge(tile))
THEN
3061 tl_dnew(istr-1,j)=tl_h(istr-1,j)+tl_zeta_new(istr-1,j)
3066 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3070 tl_dnew(iend+1,j)=tl_h(iend+1,j)+tl_zeta_new(iend+1,j)
3075 IF (
domain(ng)%Southern_Edge(tile))
THEN
3079 tl_dnew(i,jstr-1)=tl_h(i,jstr-1)+tl_zeta_new(i,jstr-1)
3084 IF (
domain(ng)%Northern_Edge(tile))
THEN
3088 tl_dnew(i,jend+1)=tl_h(i,jend+1)+tl_zeta_new(i,jend+1)
3099 IF (
domain(ng)%Western_Edge(tile))
THEN
3101# if defined NESTING && !defined SOLVE3D
3106 tl_du_flux(istru-1,j)=0.5_r8*on_u(istru-1,j)* &
3107 & ((dnew(istru-1,j)+ &
3108 & dnew(istru-2,j))* &
3109 & tl_ubar(istru-1,j,knew)+ &
3110 & (tl_dnew(istru-1,j)+ &
3111 & tl_dnew(istru-2,j))* &
3112 & ubar(istru-1,j,knew))- &
3114 & 0.5_r8*on_u(istru-1,j)* &
3115 & (dnew(istru-1,j)+dnew(istru-2,j))* &
3116 & ubar(istru-1,j,knew)
3124 tl_du_avg1(istru-1,j)=tl_du_avg1(istru-1,j)+ &
3125 & cff1*on_u(istru-1,j)* &
3126 & ((dnew(istru-1,j)+ &
3127 & dnew(istru-2,j))* &
3128 & tl_ubar(istru-1,j,knew)+ &
3129 & (tl_dnew(istru-1,j)+ &
3130 & tl_dnew(istru-2,j))* &
3131 & ubar(istru-1,j,knew))- &
3133 & cff1*on_u(istru-1,j)* &
3134 & (dnew(istru-1,j)+dnew(istru-2,j))* &
3135 & ubar(istru-1,j,knew)
3140# if defined NESTING && !defined SOLVE3D
3145 tl_dv_flux(istr-1,j)=0.5_r8*om_v(istr-1,j)* &
3146 & ((dnew(istr-1,j )+ &
3147 & dnew(istr-1,j-1))* &
3148 & tl_vbar(istr-1,j,knew)+ &
3149 & (tl_dnew(istr-1,j )+ &
3150 & tl_dnew(istr-1,j-1))* &
3151 & vbar(istr-1,j,knew))- &
3153 & 0.5_r8*om_v(istr-1,j)* &
3154 & (dnew(istr-1,j)+dnew(istr-1,j-1))* &
3155 & vbar(istr-1,j,knew)
3163 tl_dv_avg1(istr-1,j)=tl_dv_avg1(istr-1,j)+ &
3164 & cff1*om_v(istr-1,j)* &
3165 & ((dnew(istr-1,j )+ &
3166 & dnew(istr-1,j-1))* &
3167 & tl_vbar(istr-1,j,knew)+ &
3168 & (tl_dnew(istr-1,j )+ &
3169 & tl_dnew(istr-1,j-1))* &
3170 & vbar(istr-1,j,knew))- &
3172 & cff1*om_v(istr-1,j)* &
3173 & (dnew(istr-1,j)+dnew(istr-1,j-1))* &
3174 & vbar(istr-1,j,knew)
3181 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3183# if defined NESTING && !defined SOLVE3D
3188 tl_du_flux(iend+1,j)=0.5_r8*on_u(iend+1,j)* &
3189 & ((dnew(iend+1,j)+ &
3191 & tl_ubar(iend+1,j,knew)+ &
3192 & (tl_dnew(iend+1,j)+ &
3193 & tl_dnew(iend ,j))* &
3194 & ubar(iend+1,j,knew))- &
3196 & 0.5_r8*on_u(iend+1,j)* &
3197 & (dnew(iend+1,j)+dnew(iend,j))* &
3198 & ubar(iend+1,j,knew)
3206 tl_du_avg1(iend+1,j)=tl_du_avg1(iend+1,j)+ &
3207 & cff1*on_u(iend+1,j)* &
3208 & ((dnew(iend+1,j)+ &
3210 & tl_ubar(iend+1,j,knew)+ &
3211 & (tl_dnew(iend+1,j)+ &
3212 & tl_dnew(iend ,j))* &
3213 & ubar(iend+1,j,knew))- &
3215 & cff1*on_u(iend+1,j)* &
3216 & (dnew(iend+1,j)+dnew(iend,j))* &
3217 & ubar(iend+1,j,knew)
3222# if defined NESTING && !defined SOLVE3D
3227 tl_dv_flux(iend+1,j)=0.5_r8*om_v(iend+1,j)* &
3228 & ((dnew(iend+1,j )+ &
3229 & dnew(iend+1,j-1))* &
3230 & tl_vbar(iend+1,j,knew)+ &
3231 & (tl_dnew(iend+1,j )+ &
3232 & tl_dnew(iend+1,j-1))* &
3233 & vbar(iend+1,j,knew))- &
3235 & 0.5_r8*om_v(iend+1,j)* &
3236 & (dnew(iend+1,j)+dnew(iend+1,j-1))* &
3237 & vbar(iend+1,j,knew)
3245 tl_dv_avg1(iend+1,j)=tl_dv_avg1(iend+1,j)+ &
3246 & cff1*om_v(iend+1,j)* &
3247 & ((dnew(iend+1,j )+ &
3248 & dnew(iend+1,j-1))* &
3249 & tl_vbar(iend+1,j,knew)+ &
3250 & (tl_dnew(iend+1,j )+ &
3251 & tl_dnew(iend+1,j-1))* &
3252 & vbar(iend+1,j,knew))- &
3254 & cff1*om_v(iend+1,j)* &
3255 & (dnew(iend+1,j)+dnew(iend+1,j-1))* &
3256 & vbar(iend+1,j,knew)
3263 IF (
domain(ng)%Southern_Edge(tile))
THEN
3265# if defined NESTING && !defined SOLVE3D
3270 tl_du_flux(i,jstr-1)=0.5_r8*on_u(i,jstr-1)* &
3271 & ((dnew(i ,jstr-1)+ &
3272 & dnew(i-1,jstr-1))* &
3273 & tl_ubar(i,jstr-1,knew)+ &
3274 & (tl_dnew(i ,jstr-1)+ &
3275 & tl_dnew(i-1,jstr-1))* &
3276 & ubar(i,jstr-1,knew))- &
3278 & 0.5_r8*on_u(i,jstr-1)* &
3279 & (dnew(i,jstr-1)+dnew(i-1,jstr-1))* &
3280 & ubar(i,jstr-1,knew)
3288 tl_du_avg1(i,jstr-1)=tl_du_avg1(i,jstr-1)+ &
3289 & cff1*on_u(i,jstr-1)* &
3290 & ((dnew(i ,jstr-1)+ &
3291 & dnew(i-1,jstr-1))* &
3292 & tl_ubar(i,jstr-1,knew)+ &
3293 & (tl_dnew(i ,jstr-1)+ &
3294 & tl_dnew(i-1,jstr-1))* &
3295 & ubar(i,jstr-1,knew))- &
3297 & cff1*on_u(i,jstr-1)* &
3298 & (dnew(i,jstr-1)+dnew(i-1,jstr-1))* &
3299 & ubar(i,jstr-1,knew)
3304# if defined NESTING && !defined SOLVE3D
3309 tl_dv_flux(i,jstrv-1)=0.5_r8*om_v(i,jstrv-1)* &
3310 & ((dnew(i,jstrv-1)+ &
3311 & dnew(i,jstrv-2))* &
3312 & tl_vbar(i,jstrv-1,knew)+ &
3313 & (tl_dnew(i,jstrv-1)+ &
3314 & tl_dnew(i,jstrv-2))* &
3315 & vbar(i,jstrv-1,knew))- &
3317 & 0.5_r8*om_v(i,jstrv-1)* &
3318 & (dnew(i,jstrv-1)+dnew(i,jstrv-2))* &
3319 & vbar(i,jstrv-1,knew)
3327 tl_dv_avg1(i,jstrv-1)=tl_dv_avg1(i,jstrv-1)+ &
3328 & cff1*om_v(i,jstrv-1)* &
3329 & ((dnew(i,jstrv-1)+ &
3330 & dnew(i,jstrv-2))* &
3331 & tl_vbar(i,jstrv-1,knew)+ &
3332 & (tl_dnew(i,jstrv-1)+ &
3333 & tl_dnew(i,jstrv-2))* &
3334 & vbar(i,jstrv-1,knew))- &
3336 & cff1*om_v(i,jstrv-1)* &
3337 & (dnew(i,jstrv-1)+dnew(i,jstrv-2))* &
3338 & vbar(i,jstrv-1,knew)
3345 IF (
domain(ng)%Northern_Edge(tile))
THEN
3347# if defined NESTING && !defined SOLVE3D
3352 tl_du_flux(i,jend+1)=0.5_r8*on_u(i,jend+1)* &
3353 & ((dnew(i ,jend+1)+ &
3354 & dnew(i-1,jend+1))* &
3355 & tl_ubar(i,jend+1,knew)+ &
3356 & (tl_dnew(i ,jend+1)+ &
3357 & tl_dnew(i-1,jend+1))* &
3358 & ubar(i,jend+1,knew))- &
3360 & 0.5_r8*on_u(i,jend+1)* &
3361 & (dnew(i,jend+1)+dnew(i-1,jend+1))* &
3362 & ubar(i,jend+1,knew)
3370 tl_du_avg1(i,jend+1)=tl_du_avg1(i,jend+1)+ &
3371 & cff1*on_u(i,jend+1)* &
3372 & ((dnew(i ,jend+1)+ &
3373 & dnew(i-1,jend+1))* &
3374 & tl_ubar(i,jend+1,knew)+ &
3375 & (tl_dnew(i ,jend+1)+ &
3376 & tl_dnew(i-1,jend+1))* &
3377 & ubar(i,jend+1,knew))- &
3379 & cff1*on_u(i,jend+1)* &
3380 & (dnew(i,jend+1)+dnew(i-1,jend+1))* &
3381 & ubar(i,jend+1,knew)
3386# if defined NESTING && !defined SOLVE3D
3391 tl_dv_flux(i,jend+1)=0.5_r8*om_v(i,jend+1)* &
3392 & ((dnew(i,jend+1)+ &
3394 & tl_vbar(i,jend+1,knew)+ &
3395 & (tl_dnew(i,jend+1)+ &
3396 & tl_dnew(i,jend ))* &
3397 & vbar(i,jend+1,knew))- &
3399 & 0.5_r8*om_v(i,jend+1)* &
3400 & (dnew(i,jend+1)+dnew(i,jend))* &
3401 & vbar(i,jend+1,knew)
3409 tl_dv_avg1(i,jend+1)=tl_dv_avg1(i,jend+1)+ &
3410 & cff1*om_v(i,jend+1)* &
3411 & ((dnew(i,jend+1)+ &
3413 & tl_vbar(i,jend+1,knew)+ &
3414 & (tl_dnew(i,jend+1)+ &
3415 & tl_dnew(i,jend ))* &
3416 & vbar(i,jend+1,knew))- &
3418 & cff1*om_v(i,jend+1)* &
3419 & (dnew(i,jend+1)+dnew(i,jend))* &
3420 & vbar(i,jend+1,knew)
3439 IF (((istrr.le.i).and.(i.le.iendr)).and. &
3440 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
3441 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
3442 cff=1.0_r8/(on_u(i,j)* &
3443 & 0.5_r8*(dnew(i-1,j)+dnew(i,j)))
3444 tl_cff=-cff*cff*on_u(i,j)* &
3445 & 0.5_r8*(tl_dnew(i-1,j)+tl_dnew(i ,j))+ &
3451 tl_ubar(i,j,knew)=
sources(ng)%tl_Qbar(is)*cff+ &
3452 &
sources(ng)%Qbar(is)*tl_cff- &
3459 tl_du_avg1(i,j)=
sources(ng)%tl_Qbar(is)
3461#if defined NESTING && !defined SOLVE3D
3464 tl_du_flux(i,j)=
sources(ng)%tl_Qbar(is)
3466 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
3467 cff=1.0_r8/(om_v(i,j)* &
3468 & 0.5_r8*(dnew(i,j-1)+dnew(i,j)))
3469 tl_cff=-cff*cff*om_v(i,j)* &
3470 & 0.5_r8*(tl_dnew(i,j-1)+tl_dnew(i,j))+ &
3476 tl_vbar(i,j,knew)=
sources(ng)%tl_Qbar(is)*cff+ &
3477 &
sources(ng)%Qbar(is)*tl_cff- &
3484 tl_dv_avg1(i,j)=
sources(ng)%tl_Qbar(is)
3486#if defined NESTING && !defined SOLVE3D
3489 tl_dv_flux(i,j)=
sources(ng)%tl_Qbar(is)
3498 deallocate ( tl_zeta_new )
3500#ifdef WET_DRY_NOT_YET
3540 tl_zeta(i,j,knew)=tl_zt_avg1(i,j)
3567 & lbi, ubi, lbj, ubj, &
3574 & lbi, ubi, lbj, ubj, &
3581 & lbi, ubi, lbj, ubj, &
3588 & lbi, ubi, lbj, ubj, &
3595 & lbi, ubi, lbj, ubj, &
3608 & lbi, ubi, lbj, ubj, &
3611 & tl_zt_avg1, tl_du_avg1, tl_dv_avg1)
3619 & lbi, ubi, lbj, ubj, &
3622 & tl_du_avg2, tl_dv_avg2)
3638 & lbi, ubi, lbj, ubj, &
3645 & lbi, ubi, lbj, ubj, &
3658 & lbi, ubi, lbj, ubj, &
3661 & tl_du_flux, tl_dv_flux)
3676 & lbi, ubi, lbj, ubj, &
3677 & tl_zeta(:,:,knew))
3683 & lbi, ubi, lbj, ubj, &
3684 & tl_ubar(:,:,knew))
3690 & lbi, ubi, lbj, ubj, &
3691 & tl_vbar(:,:,knew))
3705 & lbi, ubi, lbj, ubj, &
3708 & tl_zeta(:,:,knew), &
3709 & tl_ubar(:,:,knew), &
3710 & tl_vbar(:,:,knew))