198 & LBi, UBi, LBj, UBj, &
199 & IminS, ImaxS, JminS, JmaxS, &
205 & pmask, rmask, umask, vmask, &
207#ifdef WET_DRY_NOT_YET
208 & pmask_wet, pmask_full, &
209 & rmask_wet, rmask_full, &
210 & umask_wet, umask_full, &
211 & vmask_wet, vmask_full, &
216#if (defined UV_COR && !defined SOLVE3D) || defined step2d_coriolis
220 & om_u, om_v, on_u, on_v, omn, pm, pn, &
221#if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
224#if defined UV_VIS2 && !defined SOLVE3D
225 & pmon_r, pnom_r, pmon_p, pnom_p, &
226 & om_r, on_r, om_p, on_p, &
227 & visc2_p, visc2_r, &
229#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
233 & tl_rustr2d, tl_rvstr2d, &
234 & tl_rulag2d, tl_rvlag2d, &
235 & ubar_stokes, tl_ubar_stokes, &
236 & vbar_stokes, tl_vbar_stokes, &
238#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
239 & eq_tide, tl_eq_tide, &
254 & tl_du_avg1, tl_du_avg2, &
255 & tl_dv_avg1, tl_dv_avg2, &
259 & tl_rufrc_bak, tl_rvfrc_bak, &
261#if defined NESTING && !defined SOLVE3D
262 & tl_du_flux, tl_dv_flux, &
279 integer,
intent(in ) :: ng, tile
280 integer,
intent(in ) :: LBi, UBi, LBj, UBj
281 integer,
intent(in ) :: IminS, ImaxS, JminS, JmaxS
282 integer,
intent(in ) :: kstp, knew
284 integer,
intent(in ) :: nstp, nnew
289 real(r8),
intent(in ) :: pmask(LBi:,LBj:)
290 real(r8),
intent(in ) :: rmask(LBi:,LBj:)
291 real(r8),
intent(in ) :: umask(LBi:,LBj:)
292 real(r8),
intent(in ) :: vmask(LBi:,LBj:)
294# if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
295 real(r8),
intent(in ) :: fomn(LBi:,LBj:)
297 real(r8),
intent(in ) :: h(LBi:,LBj:)
298 real(r8),
intent(in ) :: om_u(LBi:,LBj:)
299 real(r8),
intent(in ) :: om_v(LBi:,LBj:)
300 real(r8),
intent(in ) :: on_u(LBi:,LBj:)
301 real(r8),
intent(in ) :: on_v(LBi:,LBj:)
302 real(r8),
intent(in ) :: omn(LBi:,LBj:)
303 real(r8),
intent(in ) :: pm(LBi:,LBj:)
304 real(r8),
intent(in ) :: pn(LBi:,LBj:)
305# if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
306 real(r8),
intent(in ) :: dndx(LBi:,LBj:)
307 real(r8),
intent(in ) :: dmde(LBi:,LBj:)
309# if defined UV_VIS2 && !defined SOLVE3D
310 real(r8),
intent(in ) :: pmon_r(LBi:,LBj:)
311 real(r8),
intent(in ) :: pnom_r(LBi:,LBj:)
312 real(r8),
intent(in ) :: pmon_p(LBi:,LBj:)
313 real(r8),
intent(in ) :: pnom_p(LBi:,LBj:)
314 real(r8),
intent(in ) :: om_r(LBi:,LBj:)
315 real(r8),
intent(in ) :: on_r(LBi:,LBj:)
316 real(r8),
intent(in ) :: om_p(LBi:,LBj:)
317 real(r8),
intent(in ) :: on_p(LBi:,LBj:)
318 real(r8),
intent(in ) :: visc2_p(LBi:,LBj:)
319 real(r8),
intent(in ) :: visc2_r(LBi:,LBj:)
321# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
322 real(r8),
intent(in ) :: tl_bed_thick(LBi:,LBj:,:)
325 real(r8),
intent(in ) :: ubar_stokes(LBi:,LBj:)
326 real(r8),
intent(in ) :: vbar_stokes(LBi:,LBj:)
328# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
329 real(r8),
intent(in ) :: eq_tide(LBi:,LBj:)
330 real(r8),
intent(in ) :: tl_eq_tide(LBi:,LBj:)
332 real(r8),
intent(in ) :: rufrc(LBi:,LBj:)
333 real(r8),
intent(in ) :: rvfrc(LBi:,LBj:)
334 real(r8),
intent(in ) :: ubar(LBi:,LBj:,:)
335 real(r8),
intent(in ) :: vbar(LBi:,LBj:,:)
336 real(r8),
intent(in ) :: zeta(LBi:,LBj:,:)
339 real(r8),
intent(in ) :: tl_sustr(LBi:,LBj:)
340 real(r8),
intent(in ) :: tl_svstr(LBi:,LBj:)
341 real(r8),
intent(in ) :: tl_bustr(LBi:,LBj:)
342 real(r8),
intent(in ) :: tl_bvstr(LBi:,LBj:)
344 real(r8),
intent(in ) :: Pair(LBi:,LBj:)
348 real(r8),
intent(in ) :: rhoA(LBi:,LBj:)
349 real(r8),
intent(in ) :: rhoS(LBi:,LBj:)
350 real(r8),
intent(in ) :: tl_rhoA(LBi:,LBj:)
351 real(r8),
intent(in ) :: tl_rhoS(LBi:,LBj:)
353 real(r8),
intent(inout) :: tl_DU_avg1(LBi:,LBj:)
354 real(r8),
intent(inout) :: tl_DU_avg2(LBi:,LBj:)
355 real(r8),
intent(inout) :: tl_DV_avg1(LBi:,LBj:)
356 real(r8),
intent(inout) :: tl_DV_avg2(LBi:,LBj:)
357 real(r8),
intent(inout) :: tl_Zt_avg1(LBi:,LBj:)
358 real(r8),
intent(inout) :: tl_rufrc(LBi:,LBj:)
359 real(r8),
intent(inout) :: tl_rvfrc(LBi:,LBj:)
360 real(r8),
intent(inout) :: tl_rufrc_bak(LBi:,LBj:,:)
361 real(r8),
intent(inout) :: tl_rvfrc_bak(LBi:,LBj:,:)
364 real(r8),
intent(inout) :: tl_rustr2d(LBi:,LBj:)
365 real(r8),
intent(inout) :: tl_rvstr2d(LBi:,LBj:)
366 real(r8),
intent(inout) :: tl_rulag2d(LBi:,LBj:)
367 real(r8),
intent(inout) :: tl_rvlag2d(LBi:,LBj:)
368 real(r8),
intent(inout) :: tl_ubar_stokes(LBi:,LBj:)
369 real(r8),
intent(inout) :: tl_vbar_stokes(LBi:,LBj:)
371# ifdef WET_DRY_NOT_YET
372 real(r8),
intent(inout) :: pmask_full(LBi:,LBj:)
373 real(r8),
intent(inout) :: rmask_full(LBi:,LBj:)
374 real(r8),
intent(inout) :: umask_full(LBi:,LBj:)
375 real(r8),
intent(inout) :: vmask_full(LBi:,LBj:)
377 real(r8),
intent(inout) :: pmask_wet(LBi:,LBj:)
378 real(r8),
intent(inout) :: rmask_wet(LBi:,LBj:)
379 real(r8),
intent(inout) :: umask_wet(LBi:,LBj:)
380 real(r8),
intent(inout) :: vmask_wet(LBi:,LBj:)
382 real(r8),
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
385# ifdef DIAGNOSTICS_UV
397 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
398 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
399 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
400 real(r8),
intent(inout) :: tl_h(LBi:,LBj:)
401# if defined NESTING && !defined SOLVE3D
402 real(r8),
intent(out ) :: tl_DU_flux(LBi:,LBj:)
403 real(r8),
intent(out ) :: tl_DV_flux(LBi:,LBj:)
409 real(r8),
intent(in ) :: pmask(LBi:UBi,LBj:UBj)
410 real(r8),
intent(in ) :: rmask(LBi:UBi,LBj:UBj)
411 real(r8),
intent(in ) :: umask(LBi:UBi,LBj:UBj)
412 real(r8),
intent(in ) :: vmask(LBi:UBi,LBj:UBj)
414# if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
415 real(r8),
intent(in ) :: fomn(LBi:UBi,LBj:UBj)
417 real(r8),
intent(in ) :: h(LBi:UBi,LBj:UBj)
418 real(r8),
intent(in ) :: om_u(LBi:UBi,LBj:UBj)
419 real(r8),
intent(in ) :: om_v(LBi:UBi,LBj:UBj)
420 real(r8),
intent(in ) :: on_u(LBi:UBi,LBj:UBj)
421 real(r8),
intent(in ) :: on_v(LBi:UBi,LBj:UBj)
422 real(r8),
intent(in ) :: omn(LBi:UBi,LBj:UBj)
423 real(r8),
intent(in ) :: pm(LBi:UBi,LBj:UBj)
424 real(r8),
intent(in ) :: pn(LBi:UBi,LBj:UBj)
425# if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
426 real(r8),
intent(in ) :: dndx(LBi:UBi,LBj:UBj)
427 real(r8),
intent(in ) :: dmde(LBi:UBi,LBj:UBj)
429# if defined UV_VIS2 && !defined SOLVE3D
430 real(r8),
intent(in ) :: pmon_r(LBi:UBi,LBj:UBj)
431 real(r8),
intent(in ) :: pnom_r(LBi:UBi,LBj:UBj)
432 real(r8),
intent(in ) :: pmon_p(LBi:UBi,LBj:UBj)
433 real(r8),
intent(in ) :: pnom_p(LBi:UBi,LBj:UBj)
434 real(r8),
intent(in ) :: om_r(LBi:UBi,LBj:UBj)
435 real(r8),
intent(in ) :: on_r(LBi:UBi,LBj:UBj)
436 real(r8),
intent(in ) :: om_p(LBi:UBi,LBj:UBj)
437 real(r8),
intent(in ) :: on_p(LBi:UBi,LBj:UBj)
438 real(r8),
intent(in ) :: visc2_p(LBi:UBi,LBj:UBj)
439 real(r8),
intent(in ) :: visc2_r(LBi:UBi,LBj:UBj)
441# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
442 real(r8),
intent(in ) :: tl_bed_thick(LBi:UBi,LBj:UBj,3)
445 real(r8),
intent(in ) :: ubar_stokes(LBi:UBi,LBj:UBj)
446 real(r8),
intent(in ) :: vbar_stokes(LBi:UBi,LBj:UBj)
448# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
449 real(r8),
intent(in ) :: eq_tide(LBi:UBi,LBj:UBj)
450 real(r8),
intent(in ) :: tl_eq_tide(LBi:UBi,LBj:UBj)
452 real(r8),
intent(in ) :: rufrc(LBi:UBi,LBj:UBj)
453 real(r8),
intent(in ) :: rvfrc(LBi:UBi,LBj:UBj)
454 real(r8),
intent(in ) :: ubar(LBi:UBi,LBj:UBj,:)
455 real(r8),
intent(in ) :: vbar(LBi:UBi,LBj:UBj,:)
456 real(r8),
intent(in ) :: zeta(LBi:UBi,LBj:UBj,:)
457 real(r8),
intent(inout) :: tl_h(LBi:UBi,LBj:UBj)
459 real(r8),
intent(in ) :: tl_sustr(LBi:UBi,LBj:UBj)
460 real(r8),
intent(in ) :: tl_svstr(LBi:UBi,LBj:UBj)
461 real(r8),
intent(in ) :: tl_bustr(LBi:UBi,LBj:UBj)
462 real(r8),
intent(in ) :: tl_bvstr(LBi:UBi,LBj:UBj)
464 real(r8),
intent(in ) :: Pair(LBi:UBi,LBj:UBj)
468 real(r8),
intent(in ) :: rhoA(LBi:UBi,LBj:UBj)
469 real(r8),
intent(in ) :: rhoS(LBi:UBi,LBj:UBj)
470 real(r8),
intent(in ) :: tl_rhoA(LBi:UBi,LBj:UBj)
471 real(r8),
intent(in ) :: tl_rhoS(LBi:UBi,LBj:UBj)
473 real(r8),
intent(inout) :: tl_DU_avg1(LBi:UBi,LBj:UBj)
474 real(r8),
intent(inout) :: tl_DU_avg2(LBi:UBi,LBj:UBj)
475 real(r8),
intent(inout) :: tl_DV_avg1(LBi:UBi,LBj:UBj)
476 real(r8),
intent(inout) :: tl_DV_avg2(LBi:UBi,LBj:UBj)
477 real(r8),
intent(inout) :: tl_Zt_avg1(LBi:UBi,LBj:UBj)
478 real(r8),
intent(inout) :: tl_rufrc(LBi:UBi,LBj:UBj)
479 real(r8),
intent(inout) :: tl_rvfrc(LBi:UBi,LBj:UBj)
480 real(r8),
intent(inout) :: tl_rufrc_bak(LBi:UBi,LBj:UBj,2)
481 real(r8),
intent(inout) :: tl_rvfrc_bak(LBi:UBi,LBj:UBj,2)
484 real(r8),
intent(inout) :: tl_rustr2d(LBi:UBi,LBj:UBj)
485 real(r8),
intent(inout) :: tl_rvstr2d(LBi:UBi,LBj:UBj)
486 real(r8),
intent(inout) :: tl_rulag2d(LBi:UBi,LBj:UBj)
487 real(r8),
intent(inout) :: tl_rvlag2d(LBi:UBi,LBj:UBj)
488 real(r8),
intent(inout) :: tl_ubar_stokes(LBi:UBi,LBj:UBj)
489 real(r8),
intent(inout) :: tl_vbar_stokes(LBi:UBi,LBj:UBj)
491# ifdef WET_DRY_NOT_YET
492 real(r8),
intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
493 real(r8),
intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
494 real(r8),
intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
495 real(r8),
intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
497 real(r8),
intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
498 real(r8),
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
499 real(r8),
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
500 real(r8),
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
502 real(r8),
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
505# ifdef DIAGNOSTICS_UV
517 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
518 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
519 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
520# if defined NESTING && !defined SOLVE3D
521 real(r8),
intent(out ) :: tl_DU_flux(LBi:UBi,LBj:UBj)
522 real(r8),
intent(out ) :: tl_DV_flux(LBi:UBi,LBj:UBj)
529 integer :: krhs, kbak
534 real(r8) :: cff, cff1, cff2, cff3, cff4
535#ifdef WET_DRY_NOT_YET
536 real(r8) :: cff5, cff6, cff7
538 real(r8) :: fac, fac1, fac2
539 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3, tl_cff4
540#ifdef WET_DRY_NOT_YET
541 real(r8) :: tl_cff5, tl_cff6, tl_cff7
543 real(r8) :: tl_fac, tl_fac1, tl_fac2
545#if defined UV_C4ADVECTION && !defined SOLVE3D
546 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
548 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
549 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
550#if defined UV_VIS2 && !defined SOLVE3D
551 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
553 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
554 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
555 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
557 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
558 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
560#if defined STEP2D_CORIOLIS || !defined SOLVE3D
561 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
562 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
565 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
566 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
568#if defined UV_C4ADVECTION && !defined SOLVE3D
569 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
571 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rubar
572 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rvbar
573 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzeta
574 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzeta2
575#if defined VAR_RHO_2D && defined SOLVE3D
576 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzetaSA
578 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
579 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
580#ifdef WET_DRY_NOT_YET
581 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
590#if defined UV_C4ADVECTION && !defined SOLVE3D
591 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dgrad
593 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dnew
594 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Drhs
595#if defined UV_VIS2 && !defined SOLVE3D
596 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Drhs_p
598 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dstp
599 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DUon
600 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DVom
602 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DUSon
603 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DVSom
605#if defined STEP2D_CORIOLIS || !defined SOLVE3D
606 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFx
607 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFe
610 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFe
611 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFx
613#if defined UV_C4ADVECTION && !defined SOLVE3D
614 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
616 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rzeta2
617#if defined VAR_RHO_2D && defined SOLVE3D
618 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rzetaSA
620 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rzeta
621 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rubar
622 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rvbar
623 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_zwrk
625 real(r8),
allocatable :: tl_zeta_new(:,:)
642 real(r8),
parameter :: gamma=0.0_r8, &
643 & beta =0.14_r8, epsil=0.74_r8
645#include "set_bounds.h"
660 IF (first_2d_step)
THEN
669 WRITE (20,10)
iic(ng),
iif(ng), knew.eq.3, &
670 & kbak, krhs, kstp, knew
671 10
FORMAT (
' iic = ',i5.5,
' iif = ',i3.3,
' predictor = ', l1, &
672 &
' kbak = ',i1,
' krhs = ',i1,
' kstp = ',i1,
' knew = ',i1)
685#if defined DISTRIBUTE && !defined NESTING
686# define IR_RANGE IstrUm2-1,Iendp2
687# define JR_RANGE JstrVm2-1,Jendp2
688# define IU_RANGE IstrUm1-1,Iendp2
689# define JU_RANGE Jstrm1-1,Jendp2
690# define IV_RANGE Istrm1-1,Iendp2
691# define JV_RANGE JstrVm1-1,Jendp2
693# define IR_RANGE IstrUm2-1,Iendp2
694# define JR_RANGE JstrVm2-1,Jendp2
695# define IU_RANGE IstrUm2,Iendp2
696# define JU_RANGE JstrVm2-1,Jendp2
697# define IV_RANGE IstrUm2-1,Iendp2
698# define JV_RANGE JstrVm2,Jendp2
703 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
704 tl_drhs(i,j)=tl_zeta(i,j,krhs)+tl_h(i,j)
710 cff1=cff*(drhs(i,j)+drhs(i-1,j))
711 tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i-1,j))
712 duon(i,j)=ubar(i,j,krhs)*cff1
713 tl_duon(i,j)=tl_ubar(i,j,krhs)*cff1+ &
714 & ubar(i,j,krhs)*tl_cff1- &
723 cff1=cff*(drhs(i,j)+drhs(i,j-1))
724 tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i,j-1))
725 dvom(i,j)=vbar(i,j,krhs)*cff1
726 tl_dvom(i,j)=tl_vbar(i,j,krhs)*cff1+ &
727 & vbar(i,j,krhs)*tl_cff1- &
741#if defined DISTRIBUTE && \
742 defined uv_adv && defined uv_c4advection &&
753 & imins, imaxs, jmins, jmaxs, &
756 & imins, imaxs, jmins, jmaxs, &
759 & imins, imaxs, jmins, jmaxs, &
762 & imins, imaxs, jmins, jmaxs, &
766 & imins, imaxs, jmins, jmaxs, &
778 & lbi, ubi, lbj, ubj, &
779 & imins, imaxs, jmins, jmaxs, &
791 & lbi, ubi, lbj, ubj, &
792 & imins, imaxs, jmins, jmaxs, &
801 & lbi, ubi, lbj, ubj, &
802 & imins, imaxs, jmins, jmaxs, &
809 & tl_ubar, tl_vbar, &
810 & drhs, duon, dvom, &
811 & tl_drhs, tl_duon, tl_dvom)
834 IF (first_2d_step)
THEN
839 tl_zt_avg1(i,j)=0.0_r8
842 tl_du_avg1(i,j)=0.0_r8
845 tl_dv_avg1(i,j)=0.0_r8
848 tl_du_avg2(i,j)=0.0_r8
851 tl_dv_avg2(i,j)=0.0_r8
860 tl_zt_avg1(i,j)=tl_zt_avg1(i,j)+cff*tl_zeta(i,j,krhs)
864 tl_du_avg1(i,j)=tl_du_avg1(i,j)+cff*tl_duon(i,j)
869 tl_dv_avg1(i,j)=tl_dv_avg1(i,j)+cff*tl_dvom(i,j)
881 tl_du_avg2(i,j)=tl_du_avg2(i,j)+cff*tl_duon(i,j)
886 tl_dv_avg2(i,j)=tl_dv_avg2(i,j)+cff*tl_dvom(i,j)
900 allocate ( tl_zeta_new(imins:imaxs,jmins:jmaxs) )
908 zeta_new(i,j)=zeta(i,j,knew)
910 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
911# ifdef WET_DRY_NOT_YET
916 dnew(i,j)=h(i,j)+zeta_new(i,j)
917 dstp(i,j)=h(i,j)+zeta(i,j,kstp)
936 IF (first_2d_step)
THEN
942 cff1=0.333333333333_r8
943 cff2=0.666666666667_r8
949 cff2=1.0_r8-2.0_r8*beta
955 fac=cff*pm(i,j)*pn(i,j)
960 tl_zeta_new(i,j)=tl_zeta(i,j,kbak)+ &
961 & fac*(tl_duon(i,j)-tl_duon(i+1,j)+ &
962 & tl_dvom(i,j)-tl_dvom(i,j+1))
966 tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
967# ifdef WET_DRY_NOT_YET
974 tl_dnew(i,j)=tl_zeta_new(i,j)+tl_h(i,j)
976 zwrk(i,j)=cff1*zeta_new(i,j)+ &
977 & cff2*zeta(i,j,kstp)+ &
978 & cff3*zeta(i,j,kbak)
979 tl_zwrk(i,j)=cff1*tl_zeta_new(i,j)+ &
980 & cff2*tl_zeta(i,j,kstp)+ &
981 & cff3*tl_zeta(i,j,kbak)
982#if defined VAR_RHO_2D && defined SOLVE3D
983 rzeta(i,j)=(1.0_r8+rhos(i,j))*zwrk(i,j)
984 tl_rzeta(i,j)=(1.0_r8+rhos(i,j))*tl_zwrk(i,j)+ &
985 & tl_rhos(i,j)*zwrk(i,j)- &
987 & rhos(i,j)*zwrk(i,j)
989 rzeta2(i,j)=rzeta(i,j)*zwrk(i,j)
990 tl_rzeta2(i,j)=tl_rzeta(i,j)*zwrk(i,j)+ &
991 & rzeta(i,j)*tl_zwrk(i,j)- &
995 rzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
996 tl_rzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+ &
997 & zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))- &
1002 rzeta(i,j)=zwrk(i,j)
1003 tl_rzeta(i,j)=tl_zwrk(i,j)
1004 rzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
1005 tl_rzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)- &
1013 IF (first_2d_step)
THEN
1014 cff =0.333333333333_r8
1015 cff1=0.333333333333_r8
1016 cff2=0.333333333333_r8
1020 cff1=(0.5_r8-gamma)*epsil
1021 cff2=(0.5_r8+2.0_r8*gamma)*epsil
1027 fac=
dtfast(ng)*pm(i,j)*pn(i,j)
1032 tl_zeta_new(i,j)=tl_zeta(i,j,kstp)+ &
1033 & fac*(tl_duon(i,j)-tl_duon(i+1,j)+ &
1034 & tl_dvom(i,j)-tl_dvom(i,j+1))
1038 tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
1039# ifdef WET_DRY_NOT_YET
1046 tl_dnew(i,j)=tl_zeta_new(i,j)+tl_h(i,j)
1048 zwrk(i,j)=cff *zeta(i,j,krhs)+ &
1049 & cff1*zeta_new(i,j)+ &
1050 & cff2*zeta(i,j,kstp)+ &
1051 & cff3*zeta(i,j,kbak)
1052 tl_zwrk(i,j)=cff *tl_zeta(i,j,krhs)+ &
1053 & cff1*tl_zeta_new(i,j)+ &
1054 & cff2*tl_zeta(i,j,kstp)+ &
1055 & cff3*tl_zeta(i,j,kbak)
1056#if defined VAR_RHO_2D && defined SOLVE3D
1057 rzeta(i,j)=(1.0_r8+rhos(i,j))*zwrk(i,j)
1058 tl_rzeta(i,j)=(1.0_r8+rhos(i,j))*tl_zwrk(i,j)+ &
1059 & tl_rhos(i,j)*zwrk(i,j)- &
1061 & rhos(i,j)*zwrk(i,j)
1063 rzeta2(i,j)=rzeta(i,j)*zwrk(i,j)
1064 tl_rzeta2(i,j)=tl_rzeta(i,j)*zwrk(i,j)+ &
1065 & rzeta(i,j)*tl_zwrk(i,j)- &
1069 rzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
1070 tl_rzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+ &
1071 & zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))- &
1076 rzeta(i,j)=zwrk(i,j)
1077 tl_rzeta(i,j)=tl_zwrk(i,j)
1078 rzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
1079 tl_rzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)- &
1094 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
1097 IF (((istrr.le.i).and.(i.le.iendr)).and. &
1098 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
1128 CALL rp_zetabc_local (ng, tile, &
1129 & lbi, ubi, lbj, ubj, &
1130 & imins, imaxs, jmins, jmaxs, &
1133 & zeta_new, tl_zeta_new)
1136 IF (first_2d_step)
THEN
1142 cff2=0.5_r8+2.0_r8*gamma
1151 tl_zeta(i,j,knew)=cff1*tl_zeta_new(i,j)+ &
1152 & cff2*tl_zeta(i,j,kstp)+ &
1153 & cff3*tl_zeta(i,j,kbak)
1161 tl_zeta(i,j,knew)=tl_zeta_new(i,j)
1178# ifdef STEP2D_CORIOLIS
1196 cff2=0.333333333333_r8
1197#if !defined SOLVE3D && defined ATM_PRESS
1198 fac=0.5_r8*100.0_r8/
rho0
1202 IF (i.ge.istru)
THEN
1208#if defined VAR_RHO_2D && defined SOLVE3D
1221 tl_rubar(i,j)=cff1*on_u(i,j)* &
1224 & (tl_rzeta(i-1,j)- &
1225 & tl_rzeta(i ,j))+ &
1226#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1238#if defined VAR_RHO_2D && defined SOLVE3D
1239# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1242 & (rzetasa(i-1,j)+ &
1244 & cff2*(rhoa(i-1,j)- &
1251 & (tl_rzetasa(i-1,j)+ &
1252 & tl_rzetasa(i ,j)+ &
1253 & cff2*((tl_rhoa(i-1,j)- &
1259 & (tl_zwrk(i-1,j)- &
1260 & tl_zwrk(i ,j))))- &
1262# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1265 & (rzetasa(i-1,j)+ &
1271 & (cff2*(rhoa(i-1,j)- &
1277 & (tl_rzeta2(i-1,j)- &
1279#if defined ATM_PRESS && !defined SOLVE3D
1286 tl_rubar(i,j)=tl_rubar(i,j)- &
1288 & (tl_h(i-1,j)+tl_h(i,j)+ &
1289 & tl_rzeta(i-1,j)+tl_rzeta(i,j))* &
1290 & (pair(i,j)-pair(i-1,j))
1292#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
1299 tl_rubar(i,j)=tl_rubar(i,j)- &
1301 & ((tl_h(i-1,j)+tl_h(i,j)+ &
1302 & tl_rzeta(i-1,j)+tl_rzeta(i,j))* &
1303 & (eq_tide(i,j)-eq_tide(i-1,j))+ &
1304 & (h(i-1,j)+h(i,j)+ &
1305 & rzeta(i-1,j)+rzeta(i,j))* &
1306 & (tl_eq_tide(i,j)-tl_eq_tide(i-1,j)))- &
1308 & (h(i-1,j)+h(i,j)+ &
1309 & rzeta(i-1,j)+rzeta(i,j))* &
1310 & (eq_tide(i,j)-eq_tide(i-1,j)))
1313#ifdef DIAGNOSTICS_UV
1318 IF (j.ge.jstrv)
THEN
1324#if defined VAR_RHO_2D && defined SOLVE3D
1337 tl_rvbar(i,j)=cff1*om_v(i,j)* &
1340 & (tl_rzeta(i,j-1)- &
1341 & tl_rzeta(i,j ))+ &
1342#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1354#if defined VAR_RHO_2D && defined SOLVE3D
1355# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1358 & (rzetasa(i,j-1)+ &
1360 & cff2*(rhoa(i,j-1)- &
1367 & (tl_rzetasa(i,j-1)+ &
1368 & tl_rzetasa(i,j )+ &
1369 & cff2*((tl_rhoa(i,j-1)- &
1375 & (tl_zwrk(i,j-1)- &
1376 & tl_zwrk(i,j ))))- &
1378# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1381 & (rzetasa(i,j-1)+ &
1387 & (cff2*(rhoa(i,j-1)- &
1393 & (tl_rzeta2(i,j-1)- &
1395#if defined ATM_PRESS && !defined SOLVE3D
1402 tl_rvbar(i,j)=tl_rvbar(i,j)- &
1404 & (tl_h(i,j-1)+tl_h(i,j)+ &
1405 & tl_rzeta(i,j-1)+tl_rzeta(i,j))* &
1406 & (pair(i,j)-pair(i,j-1))
1408#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
1415 tl_rvbar(i,j)=tl_rvbar(i,j)- &
1417 & ((tl_h(i,j-1)+tl_h(i,j)+ &
1418 & tl_rzeta(i,j-1)+tl_rzeta(i,j))* &
1419 & (eq_tide(i,j)-eq_tide(i,j-1))+ &
1420 & (h(i,j-1)+h(i,j)+ &
1421 & rzeta(i,j-1)+rzeta(i,j))* &
1422 & (tl_eq_tide(i,j)-tl_eq_tide(i,j-1)))- &
1424 & (h(i,j-1)+h(i,j)+ &
1425 & rzeta(i,j-1)+rzeta(i,j))* &
1426 & (eq_tide(i,j)-eq_tide(i,j-1)))
1429#ifdef DIAGNOSTICS_UV
1436#if defined UV_ADV && !defined SOLVE3D
1442# ifdef UV_C2ADVECTION
1449 & (duon(i,j)+duon(i+1,j))* &
1450 & (ubar(i ,j,krhs)+ &
1452 & ubar_stokes(i ,j)+ &
1453 & ubar_stokes(i+1,j)+ &
1457 tl_ufx(i,j)=0.25_r8* &
1458 & ((tl_duon(i,j)+tl_duon(i+1,j))* &
1459 & (ubar(i ,j,krhs)+ &
1461 & ubar_stokes(i ,j)+ &
1462 & ubar_stokes(i+1,j)+ &
1464 & ubar(i+1,j,krhs))+ &
1465 & (duon(i,j)+duon(i+1,j))* &
1466 & (tl_ubar(i ,j,krhs)+ &
1468 & tl_ubar_stokes(i ,j)+ &
1469 & tl_ubar_stokes(i+1,j)+ &
1471 & tl_ubar(i+1,j,krhs)))- &
1481 & (dvom(i,j)+dvom(i-1,j))* &
1482 & (ubar(i,j ,krhs)+ &
1484 & ubar_stokes(i,j )+ &
1485 & ubar_stokes(i,j-1)+ &
1489 tl_ufe(i,j)=0.25_r8* &
1490 & ((tl_dvom(i,j)+tl_dvom(i-1,j))* &
1491 & (ubar(i,j ,krhs)+ &
1493 & ubar_stokes(i,j )+ &
1494 & ubar_stokes(i,j-1)+ &
1496 & ubar(i,j-1,krhs))+ &
1497 & (dvom(i,j)+dvom(i-1,j))* &
1498 & (tl_ubar(i,j ,krhs)+ &
1500 & tl_ubar_stokes(i,j )+ &
1501 & tl_ubar_stokes(i,j-1)+ &
1503 & tl_ubar(i,j-1,krhs)))- &
1513 & (duon(i,j)+duon(i,j-1))* &
1514 & (vbar(i ,j,krhs)+ &
1516 & vbar_stokes(i ,j)+ &
1517 & vbar_stokes(i-1,j)+ &
1521 tl_vfx(i,j)=0.25_r8* &
1522 & ((tl_duon(i,j)+tl_duon(i,j-1))* &
1523 & (vbar(i ,j,krhs)+ &
1525 & vbar_stokes(i ,j)+ &
1526 & vbar_stokes(i-1,j)+ &
1528 & vbar(i-1,j,krhs))+ &
1529 & (duon(i,j)+duon(i,j-1))* &
1530 & (tl_vbar(i ,j,krhs)+ &
1532 & tl_vbar_stokes(i ,j)+ &
1533 & tl_vbar_stokes(i-1,j)+ &
1535 & tl_vbar(i-1,j,krhs)))- &
1545 & (dvom(i,j)+dvom(i,j+1))* &
1546 & (vbar(i,j ,krhs)+ &
1548 & vbar_stokes(i,j )+ &
1549 & vbar_stokes(i,j+1)+ &
1553 tl_vfe(i,j)=0.25_r8* &
1554 & ((tl_dvom(i,j)+tl_dvom(i,j+1))* &
1555 & (vbar(i,j ,krhs)+ &
1557 & vbar_stokes(i,j )+ &
1558 & vbar_stokes(i,j+1)+ &
1560 & vbar(i,j+1,krhs))+ &
1561 & (dvom(i,j)+dvom(i,j+1))* &
1562 & (tl_vbar(i,j ,krhs)+ &
1564 & tl_vbar_stokes(i,j )+ &
1565 & tl_vbar_stokes(i,j+1)+ &
1567 & tl_vbar(i,j+1,krhs)))- &
1574# elif defined UV_C4ADVECTION
1580 grad(i,j)=ubar(i-1,j,krhs)-2.0_r8*ubar(i,j,krhs)+ &
1582 & ubar_stokes(i-1,j)-2.0_r8*ubar_stokes(i,j)+ &
1583 & ubar_stokes(i+1,j)+ &
1586 tl_grad(i,j)=tl_ubar(i-1,j,krhs)-2.0_r8*tl_ubar(i,j,krhs)+ &
1588 & tl_ubar_stokes(i-1,j)-2.0_r8*tl_ubar_stokes(i,j)+&
1589 & tl_ubar_stokes(i+1,j)+ &
1591 & tl_ubar(i+1,j,krhs)
1592 dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
1593 tl_dgrad(i,j)=tl_duon(i-1,j)-2.0_r8*tl_duon(i,j)+ &
1598 IF (
domain(ng)%Western_Edge(tile))
THEN
1600 grad(istr,j)=grad(istr+1,j)
1601 tl_grad(istr,j)=tl_grad(istr+1,j)
1602 dgrad(istr,j)=dgrad(istr+1,j)
1603 tl_dgrad(istr,j)=tl_dgrad(istr+1,j)
1608 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1610 grad(iend+1,j)=grad(iend,j)
1611 tl_grad(iend+1,j)=tl_grad(iend,j)
1612 dgrad(iend+1,j)=dgrad(iend,j)
1613 tl_dgrad(iend+1,j)=tl_dgrad(iend,j)
1621 ufx(i,j)=0.25_r8*(ubar(i ,j,krhs)+ &
1623 & ubar_stokes(i ,j)+ &
1624 & ubar_stokes(i+1,j)+ &
1626 & ubar(i+1,j,krhs)- &
1627 & cff*(grad(i,j)+grad(i+1,j)))* &
1628 & (duon(i,j)+duon(i+1,j)- &
1629 & cff*(dgrad(i,j)+dgrad(i+1,j)))
1631 tl_ufx(i,j)=0.25_r8* &
1632 & ((ubar(i ,j,krhs)+ &
1634 & ubar_stokes(i ,j)+ &
1635 & ubar_stokes(i+1,j)+ &
1637 & ubar(i+1,j,krhs)- &
1638 & cff*(grad(i,j)+grad(i+1,j)))* &
1639 & (tl_duon(i,j)+tl_duon(i+1,j)- &
1640 & cff*(tl_dgrad(i,j)+tl_dgrad(i+1,j)))+ &
1641 & (tl_ubar(i ,j,krhs)+ &
1643 & tl_ubar_stokes(i ,j)+ &
1644 & tl_ubar_stokes(i+1,j)+ &
1646 & tl_ubar(i+1,j,krhs)- &
1647 & cff*(tl_grad(i,j)+tl_grad(i+1,j)))* &
1648 & (duon(i,j)+duon(i+1,j)- &
1649 & cff*(dgrad(i,j)+dgrad(i+1,j))))- &
1658 grad(i,j)=ubar(i,j-1,krhs)-2.0_r8*ubar(i,j,krhs)+ &
1660 & ubar_stokes(i,j-1)-2.0_r8*ubar_stokes(i,j)+ &
1661 & ubar_stokes(i,j+1)+ &
1664 tl_grad(i,j)=tl_ubar(i,j-1,krhs)-2.0_r8*tl_ubar(i,j,krhs)+ &
1666 & tl_ubar_stokes(i,j-1)-2.0_r8*tl_ubar_stokes(i,j)+&
1667 & tl_ubar_stokes(i,j+1)+ &
1669 & tl_ubar(i,j+1,krhs)
1674 IF (
domain(ng)%Southern_Edge(tile))
THEN
1676 grad(i,jstr-1)=grad(i,jstr)
1677 tl_grad(i,jstr-1)=tl_grad(i,jstr)
1682 IF (
domain(ng)%Northern_Edge(tile))
THEN
1684 grad(i,jend+1)=grad(i,jend)
1685 tl_grad(i,jend+1)=tl_grad(i,jend)
1691 dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
1692 tl_dgrad(i,j)=tl_dvom(i-1,j)-2.0_r8*tl_dvom(i,j)+ &
1700 ufe(i,j)=0.25_r8*(ubar(i,j ,krhs)+ &
1702 & ubar_stokes(i,j )+ &
1703 & ubar_stokes(i,j-1)+ &
1705 & ubar(i,j-1,krhs)- &
1706 & cff*(grad(i,j)+grad(i,j-1)))* &
1707 & (dvom(i,j)+dvom(i-1,j)- &
1708 & cff*(dgrad(i,j)+dgrad(i-1,j)))
1710 tl_ufe(i,j)=0.25_r8* &
1711 & ((tl_ubar(i,j ,krhs)+ &
1713 & tl_ubar_stokes(i,j )+ &
1714 & tl_ubar_stokes(i,j-1)+ &
1716 & tl_ubar(i,j-1,krhs)- &
1717 & cff*(tl_grad(i,j)+tl_grad(i,j-1)))* &
1718 & (dvom(i,j)+dvom(i-1,j)- &
1719 & cff*(dgrad(i,j)+dgrad(i-1,j)))+ &
1720 & (ubar(i,j ,krhs)+ &
1722 & ubar_stokes(i,j )+ &
1723 & ubar_stokes(i,j-1)+ &
1725 & ubar(i,j-1,krhs)- &
1726 & cff*(grad(i,j)+grad(i,j-1)))* &
1727 & (tl_dvom(i,j)+tl_dvom(i-1,j)- &
1728 & cff*(tl_dgrad(i,j)+tl_dgrad(i-1,j))))- &
1739 grad(i,j)=vbar(i-1,j,krhs)-2.0_r8*vbar(i,j,krhs)+ &
1741 & vbar_stokes(i-1,j)-2.0_r8*vbar_stokes(i,j)+ &
1742 & vbar_stokes(i+1,j)+ &
1745 tl_grad(i,j)=tl_vbar(i-1,j,krhs)-2.0_r8*tl_vbar(i,j,krhs)+ &
1747 & tl_vbar_stokes(i-1,j)-2.0_r8*tl_vbar_stokes(i,j)+&
1748 & tl_vbar_stokes(i+1,j)+ &
1750 & tl_vbar(i+1,j,krhs)
1755 IF (
domain(ng)%Western_Edge(tile))
THEN
1757 grad(istr-1,j)=grad(istr,j)
1758 tl_grad(istr-1,j)=tl_grad(istr,j)
1763 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1765 grad(iend+1,j)=grad(iend,j)
1766 tl_grad(iend+1,j)=tl_grad(iend,j)
1772 dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
1773 tl_dgrad(i,j)=tl_duon(i,j-1)-2.0_r8*tl_duon(i,j)+ &
1781 vfx(i,j)=0.25_r8*(vbar(i ,j,krhs)+ &
1783 & vbar_stokes(i ,j)+ &
1784 & vbar_stokes(i-1,j)+ &
1786 & vbar(i-1,j,krhs)- &
1787 & cff*(grad(i,j)+grad(i-1,j)))* &
1788 & (duon(i,j)+duon(i,j-1)- &
1789 & cff*(dgrad(i,j)+dgrad(i,j-1)))
1791 tl_vfx(i,j)=0.25_r8* &
1792 & ((tl_vbar(i ,j,krhs)+ &
1794 & tl_vbar_stokes(i ,j)+ &
1795 & tl_vbar_stokes(i-1,j)+ &
1797 & tl_vbar(i-1,j,krhs)- &
1798 & cff*(tl_grad(i,j)+tl_grad(i-1,j)))* &
1799 & (duon(i,j)+duon(i,j-1)- &
1800 & cff*(dgrad(i,j)+dgrad(i,j-1)))+ &
1801 & (vbar(i ,j,krhs)+ &
1803 & vbar_stokes(i ,j)+ &
1804 & vbar_stokes(i-1,j)+ &
1806 & vbar(i-1,j,krhs)- &
1807 & cff*(grad(i,j)+grad(i-1,j)))* &
1808 & (tl_duon(i,j)+tl_duon(i,j-1)- &
1809 & cff*(tl_dgrad(i,j)+tl_dgrad(i,j-1))))- &
1818 grad(i,j)=vbar(i,j-1,krhs)-2.0_r8*vbar(i,j,krhs)+ &
1820 & vbar_stokes(i,j-1)-2.0_r8*vbar_stokes(i,j)+ &
1821 & vbar_stokes(i,j+1)+ &
1824 tl_grad(i,j)=tl_vbar(i,j-1,krhs)-2.0_r8*tl_vbar(i,j,krhs)+ &
1826 & tl_vbar_stokes(i,j-1)-2.0_r8*tl_vbar_stokes(i,j)+&
1827 & tl_vbar_stokes(i,j+1)+ &
1829 & tl_vbar(i,j+1,krhs)
1830 dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
1831 tl_dgrad(i,j)=tl_dvom(i,j-1)-2.0_r8*tl_dvom(i,j)+ &
1836 IF (
domain(ng)%Southern_Edge(tile))
THEN
1838 grad(i,jstr)=grad(i,jstr+1)
1839 tl_grad(i,jstr)=tl_grad(i,jstr+1)
1840 dgrad(i,jstr)=dgrad(i,jstr+1)
1841 tl_dgrad(i,jstr)=tl_dgrad(i,jstr+1)
1846 IF (
domain(ng)%Northern_Edge(tile))
THEN
1848 grad(i,jend+1)=grad(i,jend)
1849 tl_grad(i,jend+1)=tl_grad(i,jend)
1850 dgrad(i,jend+1)=dgrad(i,jend)
1851 tl_dgrad(i,jend+1)=tl_dgrad(i,jend)
1859 vfe(i,j)=0.25_r8*(vbar(i,j ,krhs)+ &
1861 & vbar_stokes(i,j )+ &
1862 & vbar_stokes(i,j+1)+ &
1864 & vbar(i,j+1,krhs)- &
1865 & cff*(grad(i,j)+grad(i,j+1)))* &
1866 & (dvom(i,j)+dvom(i,j+1)- &
1867 & cff*(dgrad(i,j)+dgrad(i,j+1)))
1869 tl_vfe(i,j)=0.25_r8* &
1870 & ((tl_vbar(i,j ,krhs)+ &
1872 & tl_vbar_stokes(i,j )+ &
1873 & tl_vbar_stokes(i,j+1)+ &
1875 & tl_vbar(i,j+1,krhs)- &
1876 & cff*(tl_grad(i,j)+tl_grad(i,j+1)))* &
1877 & (dvom(i,j)+dvom(i,j+1)- &
1878 & cff*(dgrad(i,j)+dgrad(i,j+1)))+ &
1879 & (vbar(i,j ,krhs)+ &
1881 & vbar_stokes(i,j )+ &
1882 & vbar_stokes(i,j+1)+ &
1884 & vbar(i,j+1,krhs)- &
1885 & cff*(grad(i,j)+grad(i,j+1)))* &
1886 & (tl_dvom(i,j)+tl_dvom(i,j+1)- &
1887 & cff*(tl_dgrad(i,j)+tl_dgrad(i,j+1))))- &
1899 IF (i.ge.istru)
THEN
1902 tl_cff1=tl_ufx(i,j)-tl_ufx(i-1,j)
1905 tl_cff2=tl_ufe(i,j+1)-tl_ufe(i,j)
1908 tl_fac=tl_cff1+tl_cff2
1911 tl_rubar(i,j)=tl_rubar(i,j)-tl_fac
1912# if defined DIAGNOSTICS_UV
1919 IF (j.ge.jstrv)
THEN
1922 tl_cff1=tl_vfx(i+1,j)-tl_vfx(i,j)
1925 tl_cff2=tl_vfe(i,j)-tl_vfe(i,j-1)
1928 tl_fac=tl_cff1+tl_cff2
1931 tl_rvbar(i,j)=tl_rvbar(i,j)-tl_fac
1932# if defined DIAGNOSTICS_UV
1942#if (defined UV_COR & !defined SOLVE3D) || defined STEP2D_CORIOLIS
1950 cff=0.5_r8*drhs(i,j)*fomn(i,j)
1951 tl_cff=0.5_r8*tl_drhs(i,j)*fomn(i,j)
1952 ufx(i,j)=cff*(vbar(i,j ,krhs)+ &
1954 & vbar_stokes(i,j )+ &
1955 & vbar_stokes(i,j+1)+ &
1959 tl_ufx(i,j)=tl_cff*(vbar(i,j ,krhs)+ &
1961 & vbar_stokes(i,j )+ &
1962 & vbar_stokes(i,j+1)+ &
1964 & vbar(i,j+1,krhs))+ &
1965 & cff*(tl_vbar(i,j ,krhs)+ &
1967 & tl_vbar_stokes(i,j )+ &
1968 & tl_vbar_stokes(i,j+1)+ &
1970 & tl_vbar(i,j+1,krhs))- &
1975 vfe(i,j)=cff*(ubar(i ,j,krhs)+ &
1977 & ubar_stokes(i ,j)+ &
1978 & ubar_stokes(i+1,j)+ &
1982 tl_vfe(i,j)=tl_cff*(ubar(i ,j,krhs)+ &
1984 & ubar_stokes(i ,j)+ &
1985 & ubar_stokes(i+1,j)+ &
1987 & ubar(i+1,j,krhs))+ &
1988 & cff*(tl_ubar(i ,j,krhs)+ &
1990 & tl_ubar_stokes(i ,j)+ &
1991 & tl_ubar_stokes(i+1,j)+ &
1993 & tl_ubar(i+1,j,krhs))- &
2002 IF (i.ge.istru)
THEN
2005 tl_fac1=0.5_r8*(tl_ufx(i,j)+tl_ufx(i-1,j))
2008 tl_rubar(i,j)=tl_rubar(i,j)+tl_fac1
2009# if defined DIAGNOSTICS_UV
2014 IF (j.ge.jstrv)
THEN
2017 tl_fac2=0.5_r8*(tl_vfe(i,j)+tl_vfe(i,j-1))
2020 tl_rvbar(i,j)=tl_rvbar(i,j)-tl_fac2
2021# if defined DIAGNOSTICS_UV
2029#if (defined CURVGRID && defined UV_ADV) && !defined SOLVE3D
2037 cff1=0.5_r8*(vbar(i,j ,krhs)+ &
2039 & vbar_stokes(i,j )+ &
2040 & vbar_stokes(i,j+1)+ &
2043 tl_cff1=0.5_r8*(tl_vbar(i,j ,krhs)+ &
2045 & tl_vbar_stokes(i,j )+ &
2046 & tl_vbar_stokes(i,j+1)+ &
2048 & tl_vbar(i,j+1,krhs))
2049 cff2=0.5_r8*(ubar(i ,j,krhs)+ &
2051 & ubar_stokes(i ,j)+ &
2052 & ubar_stokes(i+1,j)+ &
2055 tl_cff2=0.5_r8*(tl_ubar(i ,j,krhs)+ &
2057 & tl_ubar_stokes(i ,j)+ &
2058 & tl_ubar_stokes(i+1,j)+ &
2060 & tl_ubar(i+1,j,krhs))
2062 tl_cff3=tl_cff1*dndx(i,j)
2064 tl_cff4=tl_cff2*dmde(i,j)
2065 cff=drhs(i,j)*(cff3-cff4)
2066 tl_cff=tl_drhs(i,j)*(cff3-cff4)+ &
2067 & drhs(i,j)*(tl_cff3-tl_cff4)- &
2073 tl_ufx(i,j)=tl_cff*cff1+cff*tl_cff1- &
2079 tl_vfe(i,j)=tl_cff*cff2+cff*tl_cff2- &
2083# if defined DIAGNOSTICS_UV
2093 IF (i.ge.istru)
THEN
2094 fac1=0.5_r8*(ufx(i,j)+ufx(i-1,j))
2095 rubar(i,j)=rubar(i,j)+fac1
2096# if defined DIAGNOSTICS_UV
2104 IF (j.ge.jstrv)
THEN
2107 tl_fac1=0.5_r8*(tl_ufx(i,j)+tl_ufx(i-1,j))
2110 tl_rvbar(i,j)=tl_rvbar(i,j)-tl_fac1
2111# if defined DIAGNOSTICS_UV
2122#if defined UV_VIS2 && !defined SOLVE3D
2132 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
2133 & drhs(i,j-1)+drhs(i-1,j-1))
2134 tl_drhs_p(i,j)=0.25_r8*(tl_drhs(i,j )+tl_drhs(i-1,j )+ &
2135 & tl_drhs(i,j-1)+tl_drhs(i-1,j-1))
2144 cff=visc2_r(i,j)*drhs(i,j)*0.5_r8* &
2146 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
2147 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
2149 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
2150 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))
2152 tl_cff=visc2_r(i,j)*0.5_r8* &
2155 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
2156 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
2158 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
2159 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))+ &
2162 & ((pn(i ,j)+pn(i+1,j))*tl_ubar(i+1,j,krhs)- &
2163 & (pn(i-1,j)+pn(i ,j))*tl_ubar(i ,j,krhs))- &
2165 & ((pm(i,j )+pm(i,j+1))*tl_vbar(i,j+1,krhs)- &
2166 & (pm(i,j-1)+pm(i,j ))*tl_vbar(i,j ,krhs))))- &
2172 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
2175 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
2181 cff=visc2_p(i,j)*drhs_p(i,j)*0.5_r8* &
2183 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
2184 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
2186 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
2187 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))
2189 tl_cff=visc2_p(i,j)*0.5_r8* &
2190 & (tl_drhs_p(i,j)* &
2192 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
2193 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
2195 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
2196 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))+ &
2199 & ((pn(i ,j-1)+pn(i ,j))*tl_vbar(i ,j,krhs)- &
2200 & (pn(i-1,j-1)+pn(i-1,j))*tl_vbar(i-1,j,krhs))+ &
2202 & ((pm(i-1,j )+pm(i,j ))*tl_ubar(i,j ,krhs)- &
2203 & (pm(i-1,j-1)+pm(i,j-1))*tl_ubar(i,j-1,krhs))))- &
2210 tl_cff=tl_cff*pmask(i,j
2212# ifdef WET_DRY_NOT_YET
2215 tl_cff=tl_cff*pmask_wet(i,j)
2219 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
2222 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
2230 IF (i.ge.istru)
THEN
2233 tl_cff1=0.5_r8*(pn(i-1,j)+pn(i,j))* &
2234 & (tl_ufx(i,j )-tl_ufx(i-1,j))
2237 tl_cff2=0.5_r8*(pm(i-1,j)+pm(i,j))* &
2238 & (tl_ufe(i,j+1)-tl_ufe(i ,j))
2241 tl_fac=tl_cff1+tl_cff2
2244 tl_rubar(i,j)=tl_rubar(i,j)+tl_fac
2245# if defined DIAGNOSTICS_UV
2252 IF (j.ge.jstrv)
THEN
2255 tl_cff1=0.5_r8*(pn(i,j-1)+pn(i,j))* &
2256 & (tl_vfx(i+1,j)-tl_vfx(i,j ))
2259 tl_cff2=0.5_r8*(pm(i,j-1)+pm(i,j))* &
2260 & (tl_vfe(i ,j)-tl_vfe(i,j-1))
2263 tl_fac=tl_cff1-tl_cff2
2266 tl_rvbar(i,j)=tl_rvbar(i,j)+tl_fac
2267# if defined DIAGNOSTICS_UV
2287 tl_fac=tl_bustr(i,j)*om_u(i,j)*on_u(i,j)
2290 tl_rubar(i,j)=tl_rubar(i,j)-tl_fac
2291# ifdef DIAGNOSTICS_UV
2300 tl_fac=tl_bvstr(i,j)*om_v(i,j)*on_v(i,j)
2303 tl_rvbar(i,j)=tl_rvbar(i,j)-tl_fac
2304# ifdef DIAGNOSTICS_UV
2310# ifdef DIAGNOSTICS_UV
2327#if defined RPM_RELAXATION && !defined SOLVE#D
2341 tl_ufx(i,j)=
tl_m2diff(ng)*pmon_r(i,j)*drhs(i,j)* &
2342 & (tl_ubar(i+1,j,kstp)-ubar(i+1,j,kstp)- &
2343 & tl_ubar(i ,j,kstp)+ubar(i ,j,kstp))
2348 tl_ufe(i,j)=
tl_m2diff(ng)*pnom_p(i,j)*drhs_p(i,j)* &
2349 & (tl_ubar(i,j ,kstp)-ubar(i,j ,kstp)- &
2350 & tl_ubar(i,j-1,kstp)+ubar(i,j-1,kstp))
2352 tl_ufe(i,j)=tl_ufe(i,j)*pmask(i,j)
2358 tl_vfx(i,j)=
tl_m2diff(ng)*pmon_p(i,j)*drhs_p(i,j)* &
2359 & (tl_vbar(i ,j,kstp)-vbar(i ,j,kstp)- &
2360 & tl_vbar(i-1,j,kstp)+vbar(i-1,j,kstp))
2362 tl_vfx(i,j)=tl_vfx(i,j)*pmask(i,j)
2368 tl_vfe(i,j)=
tl_m2diff(ng)*pnom_r(i,j)*drhs(i,j)* &
2369 & (tl_vbar(i,j+1,kstp)-vbar(i,j+1,kstp)- &
2370 & tl_vbar(i,j ,kstp)+vbar(i,j ,kstp))
2378 tl_rubar(i,j)=tl_rubar(i,j)+ &
2379 & tl_ufx(i,j)-tl_ufx(i-1,j)+ &
2380 & tl_ufe(i,j+1)-tl_ufe(i,j)
2385 tl_rvbar(i,j)=tl_rvbar(i,j)+ &
2386 & tl_vfx(i+1,j)-tl_vfx(i,j)+ &
2387 & tl_vfe(i,j)-tl_vfe(i,j-1)
2423 IF (first_time_step)
THEN
2427 ELSE IF (first_time_step+1)
THEN
2433 cff2=-0.5_r8-2.0_r8*cff3
2441 tl_cff=tl_rufrc(i,j)-tl_rubar(i,j)
2446 tl_rufrc(i,j)=cff1*tl_cff+ &
2447 & cff2*tl_rufrc_bak(i,j,3-nstp)+ &
2448 & cff3*tl_rufrc_bak(i,j,nstp )
2451 tl_rufrc_bak(i,j,nstp)=tl_cff
2458 tl_cff=tl_rvfrc(i,j)-tl_rvbar(i,j)
2463 tl_rvfrc(i,j)=cff1*tl_cff+ &
2464 & cff2*tl_rvfrc_bak(i,j,3-nstp)+ &
2465 & cff3*tl_rvfrc_bak(i,j,nstp )
2468 tl_rvfrc_bak(i,j,nstp)=tl_cff
2478 cff2=0.333333333333_r8
2479 cff3=1.666666666666_r8
2485 tl_zwrk(i,j)=cff2*(tl_zeta_new(i,j)-tl_zeta(i,j,kstp))
2486# if defined VAR_RHO_2D && defined SOLVE3D
2489 tl_rzeta(i,j)=(1.0_r8+rhos(i,j))*tl_zwrk(i,j)+ &
2490 & tl_rhos(i,j)+zwrk(i,j)- &
2492 & rhos(i,j)*zwrk(i,j)
2498 tl_rzeta2(i,j)=tl_rzeta(i,j)* &
2499 & (cff2*zeta_new(i,j)+ &
2500 & cff3*zeta(i,j,kstp))+ &
2502 & (cff2*zeta_new(i,j)+ &
2503 & cff3*zeta(i,j,kstp))- &
2509 tl_rzetasa(i,j)=tl_zwrk(i,j)* &
2510 & (rhos(i,j)-rhoa(i,j))+ &
2512 & (tl_rhos(i,j)-tl_rhoa(i,j))- &
2519 tl_rzeta(i,j)=tl_zwrk(i,j)
2524 tl_rzeta2(i,j)=tl_zwrk(i,j)* &
2525 & (cff2*zeta_new(i,j)+ &
2526 & cff3*zeta(i,j,kstp))+ &
2528 & (cff2*tl_zeta_new(i,j)+ &
2529 & cff3*tl_zeta(i,j,kstp))- &
2539 IF (i.ge.istru)
THEN
2546# if defined VAR_RHO_2D && defined SOLVE3D
2559 tl_rubar(i,j)=tl_rubar(i,j)+ &
2563 & (tl_rzeta(i-1,j)- &
2564 & tl_rzeta(i ,j))+ &
2565# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2577# if defined VAR_RHO_2D && defined SOLVE3D
2578# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2581 & (rzetasa(i-1,j)+ &
2583 & cff2*(rhoa(i-1,j)- &
2590 & (tl_rzetasa(i-1,j)+ &
2591 & tl_rzetasa(i ,j)+ &
2592 & cff2*((tl_rhoa(i-1,j)- &
2598 & (tl_zwrk(i-1,j)- &
2599 & tl_zwrk(i ,j))))- &
2601# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2604 & (rzetasa(i-1,j)+ &
2610 & (cff2*(rhoa(i-1,j)- &
2616 & (tl_rzeta2(i-1,j)- &
2618# ifdef DIAGNOSTICS_UV
2624 IF (j.ge.jstrv)
THEN
2631# if defined VAR_RHO_2D && defined SOLVE3D
2644 tl_rvbar(i,j)=tl_rvbar(i,j)+ &
2648 & (tl_rzeta(i,j-1)- &
2649 & tl_rzeta(i,j ))+ &
2650# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2662# if defined VAR_RHO_2D && defined SOLVE3D
2663# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2666 & (rzetasa(i,j-1)+ &
2668 & cff2*(rhoa(i,j-1)- &
2675 & (tl_rzetasa(i,j-1)+ &
2676 & tl_rzetasa(i,j )+ &
2677 & cff2*((tl_rhoa(i,j-1)- &
2683 & (tl_zwrk(i,j-1)- &
2684 & tl_zwrk(i,j ))))- &
2686# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
2689 & (rzetasa(i,j-1)+ &
2695 & (cff2*(rhoa(i,j-1)- &
2701 & (tl_rzeta2(i,j-1)- &
2703# ifdef DIAGNOSTICS_UV
2724 tl_dstp(i,j)=tl_h(i,j)+tl_zeta(i,j,kstp)
2732 tl_dstp(i,j)=tl_h(i,j)+tl_zeta(i,j,kbak)
2743 IF (first_2d_step)
THEN
2751 cff3=0.5_r8+2.0_r8*gamma
2757 cff=cff1*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2758 fac1=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2759 tl_fac1=-fac1*fac1*(tl_dnew(i,j)+tl_dnew(i-1,j))
2769 tl_ubar(i,j,knew)=tl_fac1* &
2770 & (ubar(i,j,kbak)* &
2771 & (dstp(i,j)+dstp(i-1,j))+ &
2773 & cff*(rubar(i,j)+rufrc(i,j)))+ &
2775 & cff*rubar(i,j)+4.0_r8*cff1*sustr(i,j))+ &
2778 & (tl_ubar(i,j,kbak)* &
2779 & (dstp(i,j)+dstp(i-1,j))+ &
2781 & (tl_dstp(i,j)+tl_dstp(i-1,j))+ &
2783 & cff*(tl_rubar(i,j)+tl_rufrc(i,j)))- &
2786 & (2.0_r8*ubar(i,j,kbak)* &
2787 & (dstp(i,j)+dstp(i-1,j))+ &
2788 & cff*(rubar(i,j)+rufrc(i,j)))
2791 & cff*tl_rubar(i,j)+ &
2792 & 4.0_r8*cff1*tl_sustr(i,j))- &
2795 & (2.0_r8*ubar(i,j,kstp)* &
2796 & (dstp(i,j)+dstp(i-1,j))+ &
2797 & cff*rubar(i,j)+cff1*sustr(i,j))
2803 tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
2809 tl_ubar(i,j,knew)=cff2*tl_ubar(i,j,knew)+ &
2810 & cff3*tl_ubar(i,j,kstp)+ &
2811 & cff4*tl_ubar(i,j,kbak)
2812#ifdef WET_DRY_NOT_YET
2821#if defined NESTING && !defined SOLVE3D
2825 tl_du_flux(i,j)=0.5_r8*on_u(i,j)* &
2826 & ((dnew(i,j)+dnew(i-1,j))* &
2827 & tl_ubar(i,j,knew)+ &
2828 & (tl_dnew(i,j)+tl_dnew(i-1,j))* &
2829 & ubar(i,j,knew))- &
2831 & 0.5_r8*on_u(i,j)* &
2832 & (dnew(i,j)+dnew(i-1,j))* &
2841 cff=cff1*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2842 fac2=1.0_r8/(dnew(i,j)+dnew(i,j-1))
2843 tl_fac2=-fac2*fac2*(tl_dnew(i,j)+tl_dnew(i,j-1))
2853 tl_vbar(i,j,knew)=tl_fac2* &
2854 & (vbar(i,j,kbak)* &
2855 & (dstp(i,j)+dstp(i,j-1))+ &
2857 & cff*(rvbar(i,j)+rvfrc(i,j)))+ &
2859 & cff*rvbar(i,j)+4.0_r8*cff1*svstr(i,j))+ &
2862 & (tl_vbar(i,j,kbak)* &
2863 & (dstp(i,j)+dstp(i,j-1))+ &
2865 & (tl_dstp(i,j)+tl_dstp(i,j-1))+ &
2867 & cff*(tl_rvbar(i,j)+tl_rvfrc(i,j)))- &
2870 & (2.0_r8*vbar(i,j,kbak)* &
2871 & (dstp(i,j)+dstp(i,j-1))+ &
2872 & cff*(rvbar(i,j)+rvfrc(i,j)))
2875 & cff*tl_rvbar(i,j)+ &
2876 & 4.0_r8*cff1*tl_svstr(i,j))- &
2879 & (2.0_r8*vbar(i,j,kstp)* &
2880 & (dstp(i,j)+dstp(i,j-1))+ &
2881 & cff*rvbar(i,j)+cff1*svstr(i,j))
2887 tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
2893 tl_vbar(i,j,knew)=cff2*tl_vbar(i,j,knew)+ &
2894 & cff3*tl_vbar(i,j,kstp)+ &
2895 & cff4*tl_vbar(i,j,kbak)
2896#ifdef WET_DRY_NOT_YET
2905#if defined NESTING && !defined SOLVE3D
2909 tl_dv_flux(i,j)=0.5_r8*om_v(i,j)* &
2910 & ((dnew(i,j)+dnew(i,j-1))* &
2911 & tl_vbar(i,j,knew)+ &
2912 & (tl_dnew(i,j)+tl_dnew(i,j-1))* &
2913 & vbar(i,j,knew))- &
2915 & 0.5_r8*om_v(i,j)* &
2916 & (dnew(i,j)+dnew(i,j-1))* &
2928 cff=cff1*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2929 fac1=1.0_r8/(dnew(i,j)+dnew(i-1,j))
2930 tl_fac1=-fac1*fac1*(dnew(i,j)+dnew(i-1,j))
2940 tl_ubar(i,j,knew)=tl_fac1* &
2941 & (ubar(i,j,kstp)* &
2942 & (dstp(i,j)+dstp(i-1,j))+ &
2944 & cff*(rubar(i,j)+rufrc(i,j)))+ &
2946 & cff*rubar(i,j)+4.0_r8*cff1*sustr(i,j))+ &
2949 & (tl_ubar(i,j,kstp)* &
2950 & (dstp(i,j)+dstp(i-1,j))+ &
2952 & (tl_dstp(i,j)+tl_dstp(i-1,j))+ &
2954 & cff*(tl_rubar(i,j)+tl_rufrc(i,j)))- &
2957 & (2.0_r8*ubar(i,j,kstp)* &
2958 & (dstp(i,j)+dstp(i-1,j))+ &
2959 & cff*(rubar(i,j)+rufrc(i,j)))
2962 & cff*tl_rubar(i,j)+ &
2963 & 4.0_r8*cff1*tl_sustr(i,j))- &
2966 & (2.0_r8*ubar(i,j,kstp)* &
2967 & (dstp(i,j)+dstp(i-1,j))+ &
2968 & cff*rubar(i,j)+cff1*sustr(i,j))
2974 tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
2976#ifdef WET_DRY_NOT_YET
2985#if defined NESTING && !defined SOLVE3D
2989 tl_du_flux(i,j)=0.5_r8*on_u(i,j)* &
2990 & ((dnew(i,j)+dnew(i-1,j))* &
2991 & tl_ubar(i,j,knew)+ &
2992 & (tl_dnew(i,j)+tl_dnew(i-1,j))* &
2993 & ubar(i,j,knew))- &
2995 & 0.5_r8*on_u(i,j)* &
2996 & (dnew(i,j)+dnew(i-1,j))* &
3005 cff=cff1*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
3006 fac2=1.0_r8/(dnew(i,j)+dnew(i,j-1))
3007 tl_fac2=-fac2*fac2*(tl_dnew(i,j)+tl_dnew(i,j-1))
3017 tl_vbar(i,j,knew)=tl_fac2* &
3018 & (vbar(i,j,kstp)* &
3019 & (dstp(i,j)+dstp(i,j-1))+ &
3021 & cff*(rvbar(i,j)+rvfrc(i,j)))+ &
3023 & cff*rvbar(i,j)+4.0_r8*cff1*svstr(i,j))+ &
3026 & (tl_vbar(i,j,kstp)* &
3027 & (dstp(i,j)+dstp(i,j-1))+ &
3029 & (tl_dstp(i,j)+tl_dstp(i,j-1))+ &
3031 & cff*(tl_rvbar(i,j)+tl_rvfrc(i,j)))- &
3034 & (2.0_r8*vbar(i,j,kstp)* &
3035 & (dstp(i,j)+dstp(i,j-1))+ &
3036 & cff*(rvbar(i,j)+rvfrc(i,j)))
3039 & cff*tl_rvbar(i,j)+ &
3040 & 4.0_r8*cff1*svstr(i,j))- &
3043 & (2.0_r8*vbar(i,j,kstp)* &
3044 & (dstp(i,j)+dstp(i,j-1))+ &
3045 & cff*rvbar(i,j)+cff1*svstr(i,j))
3051 tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
3053#ifdef WET_DRY_NOT_YET
3062#if defined NESTING && !defined SOLVE3D
3066 tl_dv_flux(i,j)=0.5_r8*om_v(i,j)* &
3067 & ((dnew(i,j)+dnew(i,j-1))* &
3068 & tl_vbar(i,j,knew)+ &
3069 & (tl_dnew(i,j)+tl_dnew(i,j-1))* &
3070 & vbar(i,j,knew))- &
3072 & 0.5_r8*om_v(i,j)* &
3073 & (dnew(i,j)+dnew(i,j-1))* &
3090 & lbi, ubi, lbj, ubj, &
3091 & imins, imaxs, jmins, jmaxs, &
3092 & krhs, kstp, knew, &
3093 & ubar, vbar, zeta, &
3094 & tl_ubar, tl_vbar, tl_zeta)
3102 & lbi, ubi, lbj, ubj, &
3103 & imins, imaxs, jmins, jmaxs, &
3104 & krhs, kstp, knew, &
3105 & ubar, vbar, zeta, &
3106 & tl_ubar, tl_vbar, tl_zeta)
3123 & lbi, ubi, lbj, ubj, &
3124 & imins, imaxs, jmins, jmaxs, &
3129 & h, tl_h, om_v, on_u, &
3130 & ubar, vbar, zeta, &
3131 & tl_ubar, tl_vbar, tl_zeta)
3134#if defined NESTING && !defined SOLVE3D
3139 IF (
domain(ng)%Western_Edge(tile))
THEN
3143 tl_dnew(istr-1,j)=tl_h(istr-1,j)+tl_zeta_new(istr-1,j)
3148 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3152 tl_dnew(iend+1,j)=tl_h(iend+1,j)+tl_zeta_new(iend+1,j)
3157 IF (
domain(ng)%Southern_Edge(tile))
THEN
3161 tl_dnew(i,jstr-1)=tl_h(i,jstr-1)+tl_zeta_new(i,jstr-1)
3166 IF (
domain(ng)%Northern_Edge(tile))
THEN
3170 tl_dnew(i,jend+1)=tl_h(i,jend+1)+tl_zeta_new(i,jend+1)
3176 IF (
domain(ng)%Western_Edge(tile))
THEN
3182 tl_du_flux(istru-1,j)=0.5_r8*on_u(istru-1,j)* &
3183 & ((dnew(istru-1,j)+ &
3184 & dnew(istru-2,j))* &
3185 & tl_ubar(istru-1,j,knew)+ &
3186 & (tl_dnew(istru-1,j)+ &
3187 & tl_dnew(istru-2,j))* &
3188 & ubar(istru-1,j,knew))- &
3190 & 0.5_r8*on_u(istru-1,j)* &
3191 & (dnew(istru-1,j)+dnew(istru-2,j))* &
3192 & ubar(istru-1,j,knew)
3200 tl_dv_flux(istr-1,j)=0.5_r8*om_v(istr-1,j)* &
3201 & ((dnew(istr-1,j )+ &
3202 & dnew(istr-1,j-1))* &
3203 & tl_vbar(istr-1,j,knew)+ &
3204 & (tl_dnew(istr-1,j )+ &
3205 & tl_dnew(istr-1,j-1))* &
3206 & vbar(istr-1,j,knew))- &
3208 & 0.5_r8*om_v(istr-1,j)* &
3209 & (dnew(istr-1,j)+dnew(istr-1,j-1))* &
3210 & vbar(istr-1,j,knew)
3216 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3222 tl_du_flux(iend+1,j)=0.5_r8*on_u(iend+1,j)* &
3223 & ((dnew(iend+1,j)+ &
3225 & tl_ubar(iend+1,j,knew)+ &
3226 & (tl_dnew(iend+1,j)+ &
3227 & tl_dnew(iend ,j))* &
3228 & ubar(iend+1,j,knew))- &
3230 & 0.5_r8*on_u(iend+1,j)* &
3231 & (dnew(iend+1,j)+dnew(iend,j))* &
3232 & ubar(iend+1,j,knew)
3240 tl_dv_flux(iend+1,j)=0.5_r8*om_v(iend+1,j)* &
3241 & ((dnew(iend+1,j )+ &
3242 & dnew(iend+1,j-1))* &
3243 & tl_vbar(iend+1,j,knew)+ &
3244 & (tl_dnew(iend+1,j )+ &
3245 & tl_dnew(iend+1,j-1))* &
3246 & vbar(iend+1,j,knew))- &
3248 & 0.5_r8*om_v(iend+1,j)* &
3249 & (dnew(iend+1,j)+dnew(iend+1,j-1))* &
3250 & vbar(iend+1,j,knew)
3256 IF (
domain(ng)%Southern_Edge(tile))
THEN
3262 tl_du_flux(i,jstr-1)=0.5_r8*on_u(i,jstr-1)* &
3263 & ((dnew(i ,jstr-1)+ &
3264 & dnew(i-1,jstr-1))* &
3265 & tl_ubar(i,jstr-1,knew)+ &
3266 & (tl_dnew(i ,jstr-1)+ &
3267 & tl_dnew(i-1,jstr-1))* &
3268 & ubar(i,jstr-1,knew))- &
3270 & 0.5_r8*on_u(i,jstr-1)* &
3271 & (dnew(i,jstr-1)+dnew(i-1,jstr-1))* &
3272 & ubar(i,jstr-1,knew)
3280 tl_dv_flux(i,jstrv-1)=0.5_r8*om_v(i,jstrv-1)* &
3281 & ((dnew(i,jstrv-1)+ &
3282 & dnew(i,jstrv-2))* &
3283 & tl_vbar(i,jstrv-1,knew)+ &
3284 & (tl_dnew(i,jstrv-1)+ &
3285 & tl_dnew(i,jstrv-2))* &
3286 & vbar(i,jstrv-1,knew))- &
3288 & 0.5_r8*om_v(i,jstrv-1)* &
3289 & (dnew(i,jstrv-1)+dnew(i,jstrv-2))* &
3290 & vbar(i,jstrv-1,knew)
3296 IF (
domain(ng)%Northern_Edge(tile))
THEN
3302 tl_du_flux(i,jend+1)=0.5_r8*on_u(i,jend+1)* &
3303 & ((dnew(i ,jend+1)+ &
3304 & dnew(i-1,jend+1))* &
3305 & tl_ubar(i,jend+1,knew)+ &
3306 & (tl_dnew(i ,jend+1)+ &
3307 & tl_dnew(i-1,jend+1))* &
3308 & ubar(i,jend+1,knew))- &
3310 & 0.5_r8*on_u(i,jend+1)* &
3311 & (dnew(i,jend+1)+dnew(i-1,jend+1))* &
3312 & ubar(i,jend+1,knew)
3320 tl_dv_flux(i,jend+1)=0.5_r8*om_v(i,jend+1)* &
3321 & ((dnew(i,jend+1)+ &
3323 & tl_vbar(i,jend+1,knew)+ &
3324 & (tl_dnew(i,jend+1)+ &
3325 & tl_dnew(i,jend ))* &
3326 & vbar(i,jend+1,knew))- &
3328 & 0.5_r8*om_v(i,jend+1)* &
3329 & (dnew(i,jend+1)+dnew(i,jend))* &
3330 & vbar(i,jend+1,knew)
3346 IF (((istrr.le.i).and.(i.le.iendr)).and. &
3347 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
3348 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
3349 cff=1.0_r8/(on_u(i,j)* &
3350 & 0.5_r8*(dnew(i-1,j)+dnew(i,j)))
3351 tl_cff=-cff*cff*on_u(i,j)* &
3352 & 0.5_r8*(tl_dnew(i-1,j)+tl_dnew(i ,j))+ &
3358 tl_ubar(i,j,knew)=
sources(ng)%tl_Qbar(is)*cff+ &
3359 &
sources(ng)%Qbar(is)*tl_cff- &
3366 tl_du_avg1(i,j)=
sources(ng)%tl_Qbar(is)
3368#if defined NESTING && !defined SOLVE3D
3371 tl_du_flux(i,j)=
sources(ng)%tl_Qbar(is)
3373 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
3374 cff=1.0_r8/(om_v(i,j)* &
3375 & 0.5_r8*(dnew(i,j-1)+dnew(i,j)))
3376 tl_cff=-cff*cff*om_v(i,j)* &
3377 & 0.5_r8*(tl_dnew(i,j-1)+tl_dnew(i,j))+ &
3383 tl_vbar(i,j,knew)=
sources(ng)%tl_Qbar(is)*cff+ &
3384 &
sources(ng)%Qbar(is)*tl_cff- &
3391 tl_dv_avg1(i,j)=
sources(ng)%tl_Qbar(is)
3393#if defined NESTING && !defined SOLVE3D
3396 tl_dv_flux(i,j)=
sources(ng)%tl_Qbar(is)
3417 IF ((
iif(ng).eq.
nfast(ng)).and.(knew.lt.3))
THEN
3419 IF (
domain(ng)%Western_Edge(tile))
THEN
3423 tl_dnew(istr-1,j)=tl_h(istr-1,j)+tl_zeta_new(istr-1,j)
3428 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3432 tl_dnew(iend+1,j)=tl_h(iend+1,j)+tl_zeta_new(iend+1,j)
3437 IF (
domain(ng)%Southern_Edge(tile))
THEN
3441 tl_dnew(i,jstr-1)=tl_h(i,jstr-1)+tl_zeta_new(i,jstr-1)
3446 IF (
domain(ng)%Northern_Edge(tile))
THEN
3450 tl_dnew(i,jend+1)=tl_h(i,jend+1)+tl_zeta_new(i,jend+1)
3467 tl_zt_avg1(i,j)=tl_zt_avg1(i,j)+ &
3468 & cff*tl_zeta(i,j,knew)
3474 tl_du_avg1(i,j)=tl_du_avg1(i,j)+ &
3476 & ((dnew(i,j)+dnew(i-1,j))* &
3477 & tl_ubar(i,j,knew)+ &
3478 & (tl_dnew(i,j)+tl_dnew(i-1,j))* &
3479 & ubar(i,j,knew))- &
3482 & ((dnew(i,j)+dnew(i-1,j))* &
3491 tl_dv_avg1(i,j)=tl_dv_avg1(i,j)+ &
3493 & ((dnew(i,j)+dnew(i,j-1))* &
3494 & tl_vbar(i,j,knew)+ &
3495 & (tl_dnew(i,j)+tl_dnew(i,j-1))* &
3496 & vbar(i,j,knew))- &
3499 & ((dnew(i,j)+dnew(i,j-1))* &
3505 tl_zeta(i,j,knew)=tl_zt_avg1(i,j)
3528 & lbi, ubi, lbj, ubj, &
3535 & lbi, ubi, lbj, ubj, &
3542 & lbi, ubi, lbj, ubj, &
3549 & lbi, ubi, lbj, ubj, &
3556 & lbi, ubi, lbj, ubj, &
3568 & lbi, ubi, lbj, ubj, &
3571 & tl_zt_avg1, tl_du_avg1, tl_dv_avg1)
3579 & lbi, ubi, lbj, ubj, &
3582 & tl_du_avg2, tl_dv_avg2)
3587#if defined NESTING && !defined SOLVE3D
3600 & lbi, ubi, lbj, ubj, &
3607 & lbi, ubi, lbj, ubj, &
3620 & lbi, ubi, lbj, ubj, &
3623 & tl_du_flux, tl_dv_flux)
3629 deallocate ( tl_zeta_new )
3631#ifdef WET_DRY_NOT_YET
3667 & lbi, ubi, lbj, ubj, &
3668 & tl_zeta(:,:,knew))
3674 & lbi, ubi, lbj, ubj, &
3675 & tl_ubar(:,:,knew))
3681 & lbi, ubi, lbj, ubj, &
3682 & tl_vbar(:,:,knew))
3696 & lbi, ubi, lbj, ubj, &
3699 & tl_zeta(:,:,knew), &
3700 & tl_ubar(:,:,knew), &
3701 & tl_vbar(:,:,knew))