181     &                           LBi, UBi, LBj, UBj, UBk,               &
 
  182     &                           IminS, ImaxS, JminS, JmaxS,            &
 
  183     &                           krhs, kstp, knew,                      &
 
  188     &                           pmask, rmask, umask, vmask,            &
 
  190#ifdef WET_DRY_NOT_YET
 
  191     &                           pmask_wet, pmask_full,                 &
 
  192     &                           rmask_wet, rmask_full,                 &
 
  193     &                           umask_wet, umask_full,                 &
 
  194     &                           vmask_wet, vmask_full,                 &
 
  201     &                           om_u, om_v, on_u, on_v, omn, pm, pn,   &
 
  202#if defined CURVGRID && defined UV_ADV
 
  205#if defined UV_VIS2 || defined UV_VIS4
 
  206     &                           pmon_r, pnom_r, pmon_p, pnom_p,        &
 
  207     &                           om_r, on_r, om_p, on_p,                &
 
  209     &                           visc2_p, visc2_r,                      &
 
  212     &                           visc4_p, visc4_r,                      &
 
  215#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
 
  219     &                           tl_rustr2d, tl_rvstr2d,                &
 
  220     &                           tl_rulag2d, tl_rvlag2d,                &
 
  221     &                           ubar_stokes, tl_ubar_stokes,           &
 
  222     &                           vbar_stokes, tl_vbar_stokes,           &
 
  224#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
 
  225     &                           eq_tide, tl_eq_tide,                   &
 
  228     &                           tl_bustr, tl_bvstr,                    &
 
  233# ifdef VAR_RHO_2D_NOT_YET
 
  237     &                           tl_DU_avg1, tl_DU_avg2,                &
 
  238     &                           tl_DV_avg1, tl_DV_avg2,                &
 
  239     &                           Zt_avg1, tl_Zt_avg1,                   &
 
  240     &                           tl_rufrc, tl_rvfrc,                    &
 
  244!!   &                           DiaU2wrk, DiaV2wrk,                    &
 
  245!!   &                           DiaRUbar, DiaRVbar,                    &
 
  247!!   &                           DiaU2int, DiaV2int,                    &
 
  248!!   &                           DiaRUfrc, DiaRVfrc,                    &
 
  261      integer, 
intent(in    ) :: ng, tile
 
  262      integer, 
intent(in    ) :: LBi, UBi, LBj, UBj, UBk
 
  263      integer, 
intent(in    ) :: IminS, ImaxS, JminS, JmaxS
 
  264      integer, 
intent(in    ) :: krhs, kstp, knew
 
  266      integer, 
intent(in    ) :: nstp, nnew
 
  271      real(r8), 
intent(in   ) :: pmask(LBi:,LBj:)
 
  272      real(r8), 
intent(in   ) :: rmask(LBi:,LBj:)
 
  273      real(r8), 
intent(in   ) :: umask(LBi:,LBj:)
 
  274      real(r8), 
intent(in   ) :: vmask(LBi:,LBj:)
 
  276      real(r8), 
intent(in   ) :: fomn(LBi:,LBj:)
 
  277      real(r8), 
intent(in   ) :: h(LBi:,LBj:)
 
  278      real(r8), 
intent(in   ) :: om_u(LBi:,LBj:)
 
  279      real(r8), 
intent(in   ) :: om_v(LBi:,LBj:)
 
  280      real(r8), 
intent(in   ) :: on_u(LBi:,LBj:)
 
  281      real(r8), 
intent(in   ) :: on_v(LBi:,LBj:)
 
  282      real(r8), 
intent(in   ) :: omn(LBi:,LBj:)
 
  283      real(r8), 
intent(in   ) :: pm(LBi:,LBj:)
 
  284      real(r8), 
intent(in   ) :: pn(LBi:,LBj:)
 
  285# if defined CURVGRID && defined UV_ADV 
  286      real(r8), 
intent(in   ) :: dndx(LBi:,LBj:)
 
  287      real(r8), 
intent(in   ) :: dmde(LBi:,LBj:)
 
  289# if defined UV_VIS2 || defined UV_VIS4 
  290      real(r8), 
intent(in   ) :: pmon_r(LBi:,LBj:)
 
  291      real(r8), 
intent(in   ) :: pnom_r(LBi:,LBj:)
 
  292      real(r8), 
intent(in   ) :: pmon_p(LBi:,LBj:)
 
  293      real(r8), 
intent(in   ) :: pnom_p(LBi:,LBj:)
 
  294      real(r8), 
intent(in   ) :: om_r(LBi:,LBj:)
 
  295      real(r8), 
intent(in   ) :: on_r(LBi:,LBj:)
 
  296      real(r8), 
intent(in   ) :: om_p(LBi:,LBj:)
 
  297      real(r8), 
intent(in   ) :: on_p(LBi:,LBj:)
 
  299      real(r8), 
intent(in   ) :: visc2_p(LBi:,LBj:)
 
  300      real(r8), 
intent(in   ) :: visc2_r(LBi:,LBj:)
 
  303      real(r8), 
intent(in   ) :: visc4_p(LBi:,LBj:)
 
  304      real(r8), 
intent(in   ) :: visc4_r(LBi:,LBj:)
 
  307# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET 
  308      real(r8), 
intent(in   ) :: tl_bed_thick(LBi:,LBj:,:)
 
  311      real(r8), 
intent(in   ) :: ubar_stokes(LBi:,LBj:)
 
  312      real(r8), 
intent(in   ) :: vbar_stokes(LBi:,LBj:)
 
  314# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D 
  315      real(r8), 
intent(in   ) :: eq_tide(LBi:,LBj:)
 
  316      real(r8), 
intent(in   ) :: tl_eq_tide(LBi:,LBj:)
 
  318      real(r8), 
intent(in   ) :: rubar(LBi:,LBj:,:)
 
  319      real(r8), 
intent(in   ) :: rvbar(LBi:,LBj:,:)
 
  320      real(r8), 
intent(in   ) :: rzeta(LBi:,LBj:,:)
 
  321      real(r8), 
intent(in   ) :: ubar(LBi:,LBj:,:)
 
  322      real(r8), 
intent(in   ) :: vbar(LBi:,LBj:,:)
 
  323      real(r8), 
intent(in   ) :: zeta(LBi:,LBj:,:)
 
  324# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET 
  325      real(r8), 
intent(inout) :: tl_h(LBi:,LBj:)
 
  327      real(r8), 
intent(in   ) :: tl_h(LBi:,LBj:)
 
  330      real(r8), 
intent(in   ) :: tl_bustr(LBi:,LBj:)
 
  331      real(r8), 
intent(in   ) :: tl_bvstr(LBi:,LBj:)
 
  333      real(r8), 
intent(in   ) :: Pair(LBi:,LBj:)
 
  336#  ifdef VAR_RHO_2D_NOT_YET 
  337      real(r8), 
intent(in   ) :: rhoA(LBi:,LBj:)
 
  338      real(r8), 
intent(in   ) :: rhoS(LBi:,LBj:)
 
  339      real(r8), 
intent(in   ) :: tl_rhoA(LBi:,LBj:)
 
  340      real(r8), 
intent(in   ) :: tl_rhoS(LBi:,LBj:)
 
  342      real(r8), 
intent(in   ) :: Zt_avg1(LBi:,LBj:)
 
  344      real(r8), 
intent(inout) :: tl_DU_avg1(LBi:,LBj:)
 
  345      real(r8), 
intent(inout) :: tl_DU_avg2(LBi:,LBj:)
 
  346      real(r8), 
intent(inout) :: tl_DV_avg1(LBi:,LBj:)
 
  347      real(r8), 
intent(inout) :: tl_DV_avg2(LBi:,LBj:)
 
  348      real(r8), 
intent(inout) :: tl_Zt_avg1(LBi:,LBj:)
 
  349      real(r8), 
intent(inout) :: tl_rufrc(LBi:,LBj:)
 
  350      real(r8), 
intent(inout) :: tl_rvfrc(LBi:,LBj:)
 
  351      real(r8), 
intent(inout) :: tl_ru(LBi:,LBj:,0:,:)
 
  352      real(r8), 
intent(inout) :: tl_rv(LBi:,LBj:,0:,:)
 
  355      real(r8), 
intent(inout) :: tl_rustr2d(LBi:,LBj:)
 
  356      real(r8), 
intent(inout) :: tl_rvstr2d(LBi:,LBj:)
 
  357      real(r8), 
intent(inout) :: tl_rulag2d(LBi:,LBj:)
 
  358      real(r8), 
intent(inout) :: tl_rvlag2d(LBi:,LBj:)
 
  359      real(r8), 
intent(inout) :: tl_ubar_stokes(LBi:,LBj:)
 
  360      real(r8), 
intent(inout) :: tl_vbar_stokes(LBi:,LBj:)
 
  362# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D 
  363      real(r8), 
intent(in   ) :: eq_tide(LBi:UBi,LBj:UBj)
 
  364      real(r8), 
intent(in   ) :: tl_eq_tide(LBi:UBi,LBj:UBj)
 
  366# ifdef WET_DRY_NOT_YET 
  367      real(r8), 
intent(inout) :: pmask_full(LBi:,LBj:)
 
  368      real(r8), 
intent(inout) :: rmask_full(LBi:,LBj:)
 
  369      real(r8), 
intent(inout) :: umask_full(LBi:,LBj:)
 
  370      real(r8), 
intent(inout) :: vmask_full(LBi:,LBj:)
 
  372      real(r8), 
intent(inout) :: pmask_wet(LBi:,LBj:)
 
  373      real(r8), 
intent(inout) :: rmask_wet(LBi:,LBj:)
 
  374      real(r8), 
intent(inout) :: umask_wet(LBi:,LBj:)
 
  375      real(r8), 
intent(inout) :: vmask_wet(LBi:,LBj:)
 
  377      real(r8), 
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
 
  380# ifdef DIAGNOSTICS_UV 
  392      real(r8), 
intent(inout) :: tl_rubar(LBi:,LBj:,:)
 
  393      real(r8), 
intent(inout) :: tl_rvbar(LBi:,LBj:,:)
 
  394      real(r8), 
intent(inout) :: tl_rzeta(LBi:,LBj:,:)
 
  395      real(r8), 
intent(inout) :: tl_ubar(LBi:,LBj:,:)
 
  396      real(r8), 
intent(inout) :: tl_vbar(LBi:,LBj:,:)
 
  397      real(r8), 
intent(inout) :: tl_zeta(LBi:,LBj:,:)
 
  402      real(r8), 
intent(in   ) :: pmask(LBi:UBi,LBj:UBj)
 
  403      real(r8), 
intent(in   ) :: rmask(LBi:UBi,LBj:UBj)
 
  404      real(r8), 
intent(in   ) :: umask(LBi:UBi,LBj:UBj)
 
  405      real(r8), 
intent(in   ) :: vmask(LBi:UBi,LBj:UBj)
 
  407      real(r8), 
intent(in   ) :: fomn(LBi:UBi,LBj:UBj)
 
  408      real(r8), 
intent(in   ) :: h(LBi:UBi,LBj:UBj)
 
  409      real(r8), 
intent(in   ) :: om_u(LBi:UBi,LBj:UBj)
 
  410      real(r8), 
intent(in   ) :: om_v(LBi:UBi,LBj:UBj)
 
  411      real(r8), 
intent(in   ) :: on_u(LBi:UBi,LBj:UBj)
 
  412      real(r8), 
intent(in   ) :: on_v(LBi:UBi,LBj:UBj)
 
  413      real(r8), 
intent(in   ) :: omn(LBi:UBi,LBj:UBj)
 
  414      real(r8), 
intent(in   ) :: pm(LBi:UBi,LBj:UBj)
 
  415      real(r8), 
intent(in   ) :: pn(LBi:UBi,LBj:UBj)
 
  416# if defined CURVGRID && defined UV_ADV 
  417      real(r8), 
intent(in   ) :: dndx(LBi:UBi,LBj:UBj)
 
  418      real(r8), 
intent(in   ) :: dmde(LBi:UBi,LBj:UBj)
 
  420# if defined UV_VIS2 || defined UV_VIS4 
  421      real(r8), 
intent(in   ) :: pmon_r(LBi:UBi,LBj:UBj)
 
  422      real(r8), 
intent(in   ) :: pnom_r(LBi:UBi,LBj:UBj)
 
  423      real(r8), 
intent(in   ) :: pmon_p(LBi:UBi,LBj:UBj)
 
  424      real(r8), 
intent(in   ) :: pnom_p(LBi:UBi,LBj:UBj)
 
  425      real(r8), 
intent(in   ) :: om_r(LBi:UBi,LBj:UBj)
 
  426      real(r8), 
intent(in   ) :: on_r(LBi:UBi,LBj:UBj)
 
  427      real(r8), 
intent(in   ) :: om_p(LBi:UBi,LBj:UBj)
 
  428      real(r8), 
intent(in   ) :: on_p(LBi:UBi,LBj:UBj)
 
  430      real(r8), 
intent(in   ) :: visc2_p(LBi:UBi,LBj:UBj)
 
  431      real(r8), 
intent(in   ) :: visc2_r(LBi:UBi,LBj:UBj)
 
  434      real(r8), 
intent(in   ) :: visc4_p(LBi:UBi,LBj:UBj)
 
  435      real(r8), 
intent(in   ) :: visc4_r(LBi:UBi,LBj:UBj)
 
  438# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET 
  439      real(r8), 
intent(in   ) :: tl_bed_thick(LBi:UBi,LBj:UBj,3)
 
  442      real(r8), 
intent(in   ) :: ubar_stokes(LBi:UBi,LBj:UBj)
 
  443      real(r8), 
intent(in   ) :: vbar_stokes(LBi:UBi,LBj:UBj)
 
  445# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D 
  446      real(r8), 
intent(in   ) :: eq_tide(LBi:UBi,LBj:UBj)
 
  447      real(r8), 
intent(in   ) :: tl_eq_tide(LBi:UBi,LBj:UBj)
 
  449      real(r8), 
intent(in   ) :: rubar(LBi:UBi,LBj:UBj,2)
 
  450      real(r8), 
intent(in   ) :: rvbar(LBi:UBi,LBj:UBj,2)
 
  451      real(r8), 
intent(in   ) :: rzeta(LBi:UBi,LBj:UBj,2)
 
  452      real(r8), 
intent(in   ) :: ubar(LBi:UBi,LBj:UBj,:)
 
  453      real(r8), 
intent(in   ) :: vbar(LBi:UBi,LBj:UBj,:)
 
  454      real(r8), 
intent(in   ) :: zeta(LBi:UBi,LBj:UBj,:)
 
  455# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET 
  456      real(r8), 
intent(inout) :: tl_h(LBi:UBi,LBj:UBj)
 
  458      real(r8), 
intent(in   ) :: tl_h(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)
 
  467#  ifdef VAR_RHO_2D_NOT_YET 
  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(in   ) :: Zt_avg1(LBi:UBi,LBj:UBj)
 
  475      real(r8), 
intent(inout) :: tl_DU_avg1(LBi:UBi,LBj:UBj)
 
  476      real(r8), 
intent(inout) :: tl_DU_avg2(LBi:UBi,LBj:UBj)
 
  477      real(r8), 
intent(inout) :: tl_DV_avg1(LBi:UBi,LBj:UBj)
 
  478      real(r8), 
intent(inout) :: tl_DV_avg2(LBi:UBi,LBj:UBj)
 
  479      real(r8), 
intent(inout) :: tl_Zt_avg1(LBi:UBi,LBj:UBj)
 
  480      real(r8), 
intent(inout) :: tl_rufrc(LBi:UBi,LBj:UBj)
 
  481      real(r8), 
intent(inout) :: tl_rvfrc(LBi:UBi,LBj:UBj)
 
  482      real(r8), 
intent(inout) :: tl_ru(LBi:UBi,LBj:UBj,0:UBk,2)
 
  483      real(r8), 
intent(inout) :: tl_rv(LBi:UBi,LBj:UBj,0:UBk,2)
 
  486      real(r8), 
intent(inout) :: tl_rustr2d(LBi:UBi,LBj:UBj)
 
  487      real(r8), 
intent(inout) :: tl_rvstr2d(LBi:UBi,LBj:UBj)
 
  488      real(r8), 
intent(inout) :: tl_rulag2d(LBi:UBi,LBj:UBj)
 
  489      real(r8), 
intent(inout) :: tl_rvlag2d(LBi:UBi,LBj:UBj)
 
  490      real(r8), 
intent(inout) :: tl_ubar_stokes(LBi:UBi,LBj:UBj)
 
  491      real(r8), 
intent(inout) :: tl_vbar_stokes(LBi:UBi,LBj:UBj)
 
  493# ifdef WET_DRY_NOT_YET 
  494      real(r8), 
intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
 
  495      real(r8), 
intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
 
  496      real(r8), 
intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
 
  497      real(r8), 
intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
 
  499      real(r8), 
intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
 
  500      real(r8), 
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
 
  501      real(r8), 
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
 
  502      real(r8), 
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
 
  504      real(r8), 
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
 
  507# ifdef DIAGNOSTICS_UV 
  519      real(r8), 
intent(inout) :: tl_rubar(LBi:UBi,LBj:UBj,2)
 
  520      real(r8), 
intent(inout) :: tl_rvbar(LBi:UBi,LBj:UBj,2)
 
  521      real(r8), 
intent(inout) :: tl_rzeta(LBi:UBi,LBj:UBj,2)
 
  522      real(r8), 
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
 
  523      real(r8), 
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
 
  524      real(r8), 
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
 
  529      logical :: CORRECTOR_2D_STEP
 
  531      integer :: i, is, j, ptsk
 
  536      real(r8) :: cff, cff1, cff2, cff3, cff4, cff5, cff6, cff7
 
  537      real(r8) :: fac, fac1, fac2, fac3
 
  538      real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3, tl_cff4
 
  539      real(r8) :: tl_fac, tl_fac1
 
  541      real(r8), 
parameter :: IniVal = 0.0_r8
 
  543      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
 
  544      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
 
  545      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
 
  546      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
 
  547      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
 
  548      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
 
  549      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
 
  551      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
 
  552      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
 
  555      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: LapU
 
  556      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: LapV
 
  558      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
 
  559      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
 
  560      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
 
  561      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
 
  562      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
 
  563      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta
 
  564      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta2
 
  565#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
  566      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: gzetaSA
 
  568      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_ubar
 
  569      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_vbar
 
  570      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_zeta
 
  571      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
 
  572      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
 
  573#ifdef WET_DRY_NOT_YET 
  574      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
 
  583      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dgrad
 
  584      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dnew
 
  585      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Drhs
 
  586      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Drhs_p
 
  587      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dstp
 
  588      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DUon
 
  589      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DVom
 
  591      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DUSon
 
  592      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DVSom
 
  595      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_LapU
 
  596      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_LapV
 
  598      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFe
 
  599      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFx
 
  600      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFe
 
  601      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFx
 
  602      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
 
  603      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_gzeta
 
  604      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_gzeta2
 
  605#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
  606      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_gzetaSA
 
  608      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rhs_ubar
 
  609      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rhs_vbar
 
  610      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rhs_zeta
 
  611      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_zeta_new
 
  612      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_zwrk
 
  613#ifdef WET_DRY_NOT_YET 
  614      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_wetdry
 
  617#include "set_bounds.h" 
  624     &                kstp, krhs, knew, ptsk
 
  625 20     
FORMAT (
' iic = ',i5.5,
' predictor = ',l1,
' kstp = ',i1,        &
 
  626     &          
' krhs = ',i1,
' knew = ',i1,
' ptsk = ',i1)
 
  629#ifdef INITIALIZE_AUTOMATIC 
  660# if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
  672          tl_drhs_p(i,j)=inival
 
  690          tl_gzeta2(i,j)=inival
 
  691# if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
  692          tl_gzetasa(i,j)=inival
 
  694          tl_rhs_ubar(i,j)=inival
 
  695          tl_rhs_vbar(i,j)=inival
 
  696          tl_rhs_zeta(i,j)=inival
 
  697          tl_zeta_new(i,j)=inival
 
  707#if defined DISTRIBUTE && !defined NESTING 
  718          dnew(i,j)=zeta(i,j,knew)+h(i,j)
 
  719          drhs(i,j)=zeta(i,j,krhs)+h(i,j)
 
  720          tl_drhs(i,j)=tl_zeta(i,j,krhs)+tl_h(i,j)
 
  726          cff1=cff*(drhs(i,j)+drhs(i-1,j))
 
  727          tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i-1,j))
 
  728          duon(i,j)=ubar(i,j,krhs)*cff1
 
  729          tl_duon(i,j)=tl_ubar(i,j,krhs)*cff1+                          &
 
  730     &                 ubar(i,j,krhs)*tl_cff1
 
  732          duson(i,j)=ubar_stokes(i,j)*cff1
 
  733          tl_duson(i,j)=tl_ubar_stokes(i,j)*cff1+                       &
 
  734     &                  ubar_stokes(i,j)*tl_cff1
 
  735          duon(i,j)=duon(i,j)+duson(i,j)
 
  736          tl_duon(i,j)=tl_duon(i,j)+tl_duson(i,j)
 
  743          cff1=cff*(drhs(i,j)+drhs(i,j-1))
 
  744          tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i,j-1))
 
  745          dvom(i,j)=vbar(i,j,krhs)*cff1
 
  746          tl_dvom(i,j)=tl_vbar(i,j,krhs)*cff1+                          &
 
  747     &                 vbar(i,j,krhs)*tl_cff1
 
  749          dvsom(i,j)=vbar_stokes(i,j)*cff1
 
  750          tl_dvsom(i,j)=tl_vbar_stokes(i,j)*cff1+                       &
 
  751     &                  vbar_stokes(i,j)*tl_cff1
 
  752          dvom(i,j)=dvom(i,j)+dvsom(i,j)
 
  753          tl_dvom(i,j)=tl_dvom(i,j)+tl_dvsom(i,j)
 
  760      DO j=jstrvm2-1,jendp2
 
  761        DO i=istrum2-1,iendp2
 
  762          dnew(i,j)=zeta(i,j,knew)+h(i,j)
 
  763          drhs(i,j)=zeta(i,j,krhs)+h(i,j)
 
  764          tl_drhs(i,j)=tl_zeta(i,j,krhs)+tl_h(i,j)
 
  767      DO j=jstrvm2-1,jendp2
 
  770          cff1=cff*(drhs(i,j)+drhs(i-1,j))
 
  771          tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i-1,j))
 
  772          duon(i,j)=ubar(i,j,krhs)*cff1
 
  773          tl_duon(i,j)=tl_ubar(i,j,krhs)*cff1+                          &
 
  774     &                 ubar(i,j,krhs)*tl_cff1
 
  776          duson(i,j)=ubar_stokes(i,j)*cff1
 
  777          tl_duson(i,j)=tl_ubar_stokes(i,j)*cff1+                       &
 
  778     &                  ubar_stokes(i,j)*tl_cff1
 
  779          duon(i,j)=duon(i,j)+duson(i,j)
 
  780          tl_duon(i,j)=tl_duon(i,j)+tl_duson(i,j)
 
  785        DO i=istrum2-1,iendp2
 
  787          cff1=cff*(drhs(i,j)+drhs(i,j-1))
 
  788          tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i,j-1))
 
  789          dvom(i,j)=vbar(i,j,krhs)*cff1
 
  790          tl_dvom(i,j)=tl_vbar(i,j,krhs)*cff1+                          &
 
  791     &                 vbar(i,j,krhs)*tl_cff1
 
  793          dvsom(i,j)=vbar_stokes(i,j)*cff1
 
  794          tl_dvsom(i,j)=tl_vbar_stokes(i,j)*cff1+                       &
 
  795     &                  vbar_stokes(i,j)*tl_cff1
 
  796          dvom(i,j)=dvom(i,j)+dvsom(i,j)
 
  797          tl_dvom(i,j)=tl_dvom(i,j)+tl_dvsom(i,j)
 
  806     &                          imins, imaxs, jmins, jmaxs,             &
 
  809     &                          imins, imaxs, jmins, jmaxs,             &
 
  812     &                          imins, imaxs, jmins, jmaxs,             &
 
  815     &                          imins, imaxs, jmins, jmaxs,             &
 
  820     &                    imins, imaxs, jmins, jmaxs,                   &
 
  825     &                    imins, imaxs, jmins, jmaxs,                   &
 
  830#if !defined FORWARD_RHS 
  848     &                      lbi, ubi, lbj, ubj,                         &
 
  849     &                      imins, imaxs, jmins, jmaxs,                 &
 
  861     &                        lbi, ubi, lbj, ubj,                       &
 
  862     &                        imins, imaxs, jmins, jmaxs,               &
 
  871     &                           lbi, ubi, lbj, ubj,                    &
 
  872     &                           imins, imaxs, jmins, jmaxs,            &
 
  877     &                           om_v, on_u, ubar, vbar,                &
 
  878     &                           tl_ubar, tl_vbar,                      &
 
  879     &                           drhs, duon, dvom,                      &
 
  880     &                           tl_drhs, tl_duon, tl_dvom)
 
  889        IF (first_2d_step) 
THEN 
  893          cff2=(-1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
 
  898              tl_zt_avg1(i,j)=0.0_r8
 
  903              tl_du_avg1(i,j)=0.0_r8
 
  906              tl_du_avg2(i,j)=cff2*tl_duon(i,j)
 
  913              tl_dv_avg1(i,j)=0.0_r8
 
  916              tl_dv_avg2(i,j)=cff2*tl_dvom(i,j)
 
  926          cff2=(8.0_r8/12.0_r8)*
weight(2,
iif(ng)  ,ng)-                 &
 
  927     &         (1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
 
  932              tl_zt_avg1(i,j)=tl_zt_avg1(i,j)+cff1*tl_zeta(i,j,krhs)
 
  937              tl_du_avg1(i,j)=tl_du_avg1(i,j)+cff1*tl_duon(i,j)
 
  941              tl_du_avg1(i,j)=tl_du_avg1(i,j)-cff1*tl_duson(i,j)
 
  945              tl_du_avg2(i,j)=tl_du_avg2(i,j)+cff2*tl_duon(i,j)
 
  952              tl_dv_avg1(i,j)=tl_dv_avg1(i,j)+cff1*tl_dvom(i,j)
 
  956              tl_dv_avg1(i,j)=tl_dv_avg1(i,j)-cff1*tl_dvsom(i,j)
 
  960              tl_dv_avg2(i,j)=tl_dv_avg2(i,j)+cff2*tl_dvom(i,j)
 
  965        IF (first_2d_step) 
THEN 
  968          cff2=(5.0_r8/12.0_r8)*
weight(2,
iif(ng),ng)
 
  974            tl_du_avg2(i,j)=tl_du_avg2(i,j)+cff2*tl_duon(i,j)
 
  981            tl_dv_avg2(i,j)=tl_dv_avg2(i,j)+cff2*tl_dvom(i,j)
 
 1002     &                            lbi, ubi, lbj, ubj,                   &
 
 1009     &                            lbi, ubi, lbj, ubj,                   &
 
 1016     &                            lbi, ubi, lbj, ubj,                   &
 
 1024     &                            lbi, ubi, lbj, ubj,                   &
 
 1031     &                            lbi, ubi, lbj, ubj,                   &
 
 1044     &                      lbi, ubi, lbj, ubj,                         &
 
 1047     &                      tl_zt_avg1, tl_du_avg1, tl_dv_avg1)
 
 1056     &                      lbi, ubi, lbj, ubj,                         &
 
 1059     &                      tl_du_avg2, tl_dv_avg2)
 
 1064#ifdef WET_DRY_NOT_YET 
 1103#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
 1106#if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE && \ 
 1108      IF (first_2d_step.and.soinitial(ng)) 
THEN 
 1110      IF (first_2d_step) 
THEN 
 1118            tl_rhs_zeta(i,j)=(tl_duon(i,j)-tl_duon(i+1,j))+             &
 
 1119     &                       (tl_dvom(i,j)-tl_dvom(i,j+1))
 
 1124            zeta_new(i,j)=zeta(i,j,knew)
 
 1125            tl_zeta_new(i,j)=tl_zeta(i,j,kstp)+                         &
 
 1126     &                       pm(i,j)*pn(i,j)*cff1*tl_rhs_zeta(i,j)
 
 1128            zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
 
 1129            tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
 
 1133            tl_dnew(i,j)=tl_zeta_new(i,j)+tl_h(i,j)
 
 1135            zwrk(i,j)=0.5_r8*(zeta(i,j,kstp)+zeta_new(i,j))
 
 1136            tl_zwrk(i,j)=0.5_r8*(tl_zeta(i,j,kstp)+tl_zeta_new(i,j))
 
 1137#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
 1138            gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
 
 1139            tl_gzeta(i,j)=(fac+rhos(i,j))*tl_zwrk(i,j)+                 &
 
 1140     &                    tl_rhos(i,j)*zwrk(i,j)
 
 1141            gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
 
 1142            tl_gzeta2(i,j)=tl_gzeta(i,j)*zwrk(i,j)+                     &
 
 1143     &                     gzeta(i,j)*tl_zwrk(i,j)
 
 1144            gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
 
 1145            tl_gzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+         &
 
 1146     &                      zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))
 
 1148            gzeta(i,j)=zwrk(i,j)
 
 1149            tl_gzeta(i,j)=tl_zwrk(i,j)
 
 1150            gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
 
 1151            tl_gzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)
 
 1158        cff5=1.0_r8-2.0_r8*cff4
 
 1164            tl_rhs_zeta(i,j)=(tl_duon(i,j)-tl_duon(i+1,j))+             &
 
 1165     &                       (tl_dvom(i,j)-tl_dvom(i,j+1))
 
 1170            zeta_new(i,j)=zeta(i,j,knew)
 
 1171            tl_zeta_new(i,j)=tl_zeta(i,j,kstp)+                         &
 
 1172     &                       pm(i,j)*pn(i,j)*cff1*tl_rhs_zeta(i,j)
 
 1174            zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
 
 1175            tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
 
 1179            tl_dnew(i,j)=tl_zeta_new(i,j)+tl_h(i,j)
 
 1181            zwrk(i,j)=cff5*zeta(i,j,krhs)+                              &
 
 1182     &                cff4*(zeta(i,j,kstp)+zeta_new(i,j))
 
 1183            tl_zwrk(i,j)=cff5*tl_zeta(i,j,krhs)+                        &
 
 1184     &                   cff4*(tl_zeta(i,j,kstp)+tl_zeta_new(i,j))
 
 1185#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
 1186            gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
 
 1187            tl_gzeta(i,j)=(fac+rhos(i,j))*tl_zwrk(i,j)+                 &
 
 1188     &                    tl_rhos(i,j)*zwrk(i,j)
 
 1189            gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
 
 1190            tl_gzeta2(i,j)=tl_gzeta(i,j)*zwrk(i,j)+                     &
 
 1191     &                     gzeta(i,j)*tl_zwrk(i,j)
 
 1192            gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
 
 1193            tl_gzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+         &
 
 1194     &                      zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))
 
 1196            gzeta(i,j)=zwrk(i,j)
 
 1197            tl_gzeta(i,j)=tl_zwrk(i,j)
 
 1198            gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
 
 1199            tl_gzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)
 
 1203      ELSE IF (corrector_2d_step) 
THEN 
 1204        cff1=
dtfast(ng)*5.0_r8/12.0_r8
 
 1205        cff2=
dtfast(ng)*8.0_r8/12.0_r8
 
 1206        cff3=
dtfast(ng)*1.0_r8/12.0_r8
 
 1214            tl_cff=cff1*((tl_duon(i,j)-tl_duon(i+1,j))+                 &
 
 1215     &                   (tl_dvom(i,j)-tl_dvom(i,j+1)))
 
 1222            zeta_new(i,j)=zeta(i,j,knew)
 
 1223            tl_zeta_new(i,j)=tl_zeta(i,j,kstp)+                         &
 
 1224     &                       pm(i,j)*pn(i,j)*(tl_cff+                   &
 
 1225     &                                        cff2*tl_rzeta(i,j,kstp)-  &
 
 1226     &                                        cff3*tl_rzeta(i,j,ptsk))
 
 1228            zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
 
 1229            tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
 
 1233            tl_dnew(i,j)=tl_zeta_new(i,j)+tl_h(i,j)
 
 1235            zwrk(i,j)=cff5*zeta_new(i,j)+cff4*zeta(i,j,krhs)
 
 1236            tl_zwrk(i,j)=cff5*tl_zeta_new(i,j)+cff4*tl_zeta(i,j,krhs)
 
 1237#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
 1238            gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
 
 1239            tl_gzeta(i,j)=(fac+rhos(i,j))*tl_zwrk(i,j)+                 &
 
 1240     &                    tl_rhos(i,j)*zwrk(i,j)
 
 1241            gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
 
 1242            tl_gzeta2(i,j)=tl_gzeta(i,j)*zwrk(i,j)+                     &
 
 1243     &                     gzeta(i,j)*tl_zwrk(i,j)
 
 1244            gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
 
 1245            tl_gzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+         &
 
 1246     &                      zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))
 
 1248            gzeta(i,j)=zwrk(i,j)
 
 1249            tl_gzeta(i,j)=tl_zwrk(i,j)
 
 1250            gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
 
 1251            tl_gzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)
 
 1259#ifdef WET_DRY_NOT_YET 
 1268          tl_zeta(i,j,knew)=tl_zeta_new(i,j)
 
 1269#if defined WET_DRY_NOT_YET && defined MASKING 
 1273          tl_zeta(i,j,knew)=tl_zeta(i,j,knew)-                          &
 
 1274     &                      tl_h(i,j)*(1.0_r8-rmask(i,j))
 
 1286            tl_rzeta(i,j,krhs)=tl_rhs_zeta(i,j)
 
 1296     &                            lbi, ubi, lbj, ubj,                   &
 
 1297     &                            tl_rzeta(:,:,krhs))
 
 1308     &                      lbi, ubi, lbj, ubj,                         &
 
 1311     &                      tl_rzeta(:,:,krhs))
 
 1321          IF (int(
sources(ng)%Dsrc(is)).eq.2) 
THEN 
 1324            IF (((istrr.le.i).and.(i.le.iendr)).and.                    &
 
 1325     &          ((jstrr.le.j).and.(j.le.jendr))) 
THEN 
 1336#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET 
 1347          tl_cff=fac*(tl_bed_thick(i,j,nstp)-tl_bed_thick(i,j,nnew))
 
 1350          tl_h(i,j)=tl_h(i,j)-tl_cff
 
 1364     &                     lbi, ubi, lbj, ubj,                          &
 
 1365     &                     imins, imaxs, jmins, jmaxs,                  &
 
 1366     &                     krhs, kstp, knew,                            &
 
 1375     &                          lbi, ubi, lbj, ubj,                     &
 
 1376     &                          tl_zeta(:,:,knew))
 
 1387     &                    lbi, ubi, lbj, ubj,                           &
 
 1390     &                    tl_zeta(:,:,knew))
 
 1403#if !defined SOLVE3D && defined ATM_PRESS 
 1404      fac3=0.5_r8*100.0_r8/
rho0 
 1413#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
 1426          tl_rhs_ubar(i,j)=cff1*on_u(i,j)*                              &
 
 1433     &                      (tl_gzeta(i-1,j)-                           &
 
 1434     &                       tl_gzeta(i  ,j))+                          &
 
 1435#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
 1438     &                      (gzetasa(i-1,j)+                            &
 
 1440     &                       cff2*(rhoa(i-1,j)-                         &
 
 1446     &                      (tl_gzetasa(i-1,j)+                         &
 
 1447     &                       tl_gzetasa(i  ,j)+                         &
 
 1448     &                       cff2*((tl_rhoa(i-1,j)-                     &
 
 1454     &                             (tl_zwrk(i-1,j)-                     &
 
 1455     &                              tl_zwrk(i  ,j))))+                  &
 
 1457     &                      (tl_gzeta2(i-1,j)-                          &
 
 1459#if defined ATM_PRESS && !defined SOLVE3D 
 1466          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)-                            &
 
 1468     &                     (tl_h(i-1,j)+tl_h(i,j)+                      &
 
 1469     &                      tl_gzeta(i-1,j)+tl_gzeta(i,j))*             &
 
 1470     &                     (pair(i,j)-pair(i-1,j))
 
 1472#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D 
 1479          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)-                            &
 
 1481     &                     ((tl_h(i-1,j)+tl_h(i,j)+                     &
 
 1482     &                       tl_gzeta(i-1,j)+tl_gzeta(i,j))*            &
 
 1483     &                      (eq_tide(i,j)-eq_tide(i-1,j))+              &
 
 1484     &                      (h(i-1,j)+h(i,j)+                           &
 
 1485     &                       gzeta(i-1,j)+gzeta(i,j))*                  &
 
 1486     &                      (tl_eq_tide(i,j)-tl_eq_tide(i-1,j)))
 
 1488#ifdef DIAGNOSTICS_UV 
 1492        IF (j.ge.jstrv) 
THEN 
 1499#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
 1512            tl_rhs_vbar(i,j)=cff1*om_v(i,j)*                            &
 
 1519     &                        (tl_gzeta(i,j-1)-                         &
 
 1520     &                         tl_gzeta(i,j  ))+                        &
 
 1521#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D 
 1524     &                        (gzetasa(i,j-1)+                          &
 
 1526     &                         cff2*(rhoa(i,j-1)-                       &
 
 1532     &                        (tl_gzetasa(i,j-1)+                       &
 
 1533     &                         tl_gzetasa(i,j  )+                       &
 
 1534     &                         cff2*((tl_rhoa(i,j-1)-                   &
 
 1540     &                               (tl_zwrk(i,j-1)-                   &
 
 1541     &                                tl_zwrk(i,j  ))))+                &
 
 1543     &                        (tl_gzeta2(i,j-1)-                        &
 
 1545#if defined ATM_PRESS && !defined SOLVE3D 
 1552            tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-                          &
 
 1554     &                       (tl_h(i,j-1)+tl_h(i,j)+                    &
 
 1555     &                        tl_gzeta(i,j-1)+tl_gzeta(i,j))*           &
 
 1556     &                       (pair(i,j)-pair(i,j-1))
 
 1558#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D 
 1565            tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-                          &
 
 1567     &                       ((tl_h(i,j-1)+tl_h(i,j)+                   &
 
 1568     &                         tl_gzeta(i,j-1)+tl_gzeta(i,j))*          &
 
 1569     &                        (eq_tide(i,j)-eq_tide(i,j-1))+            &
 
 1570     &                        (h(i,j-1)+h(i,j)+                         &
 
 1571     &                         gzeta(i,j-1)+gzeta(i,j))*                &
 
 1572     &                        (tl_eq_tide(i,j)-tl_eq_tide(i,j-1)))
 
 1574#ifdef DIAGNOSTICS_UV 
 1586# ifdef UV_C2ADVECTION 
 1600          tl_ufx(i,j)=0.25_r8*                                          &
 
 1601     &                ((tl_duon(i,j)+tl_duon(i+1,j))*                   &
 
 1602     &                 (ubar(i  ,j,krhs)+                               &
 
 1604     &                  ubar_stokes(i  ,j)+                             &
 
 1605     &                  ubar_stokes(i+1,j)+                             &
 
 1607     &                  ubar(i+1,j,krhs))+                              &
 
 1608     &                 (duon(i,j)+duon(i+1,j))*                         &
 
 1609     &                 (tl_ubar(i  ,j,krhs)+                            &
 
 1611     &                  tl_ubar_stokes(i  ,j)+                          &
 
 1612     &                  tl_ubar_stokes(i+1,j)+                          &
 
 1614     &                  tl_ubar(i+1,j,krhs)))
 
 1628          tl_ufe(i,j)=0.25_r8*                                          &
 
 1629     &                ((tl_dvom(i,j)+tl_dvom(i-1,j))*                   &
 
 1630     &                 (ubar(i,j  ,krhs)+                               &
 
 1632     &                  ubar_stokes(i,j  )+                             &
 
 1633     &                  ubar_stokes(i,j-1)+                             &
 
 1635     &                  ubar(i,j-1,krhs))+                              &
 
 1636     &                 (dvom(i,j)+dvom(i-1,j))*                         &
 
 1637     &                 (tl_ubar(i,j  ,krhs)+                            &
 
 1639     &                  tl_ubar_stokes(i,j  )+                          &
 
 1640     &                  tl_ubar_stokes(i,j-1)+                          &
 
 1642     &                  tl_ubar(i,j-1,krhs)))
 
 1656          tl_vfx(i,j)=0.25_r8*                                          &
 
 1657     &                ((tl_duon(i,j)+tl_duon(i,j-1))*                   &
 
 1658     &                 (vbar(i  ,j,krhs)+                               &
 
 1660     &                  vbar_stokes(i  ,j)+                             &
 
 1661     &                  vbar_stokes(i-1,j)+                             &
 
 1663     &                  vbar(i-1,j,krhs))+                              &
 
 1664     &                 (duon(i,j)+duon(i,j-1))*                         &
 
 1665     &                 (tl_vbar(i  ,j,krhs)+                            &
 
 1667     &                  tl_vbar_stokes(i  ,j)+                          &
 
 1668     &                  tl_vbar_stokes(i-1,j)+                          &
 
 1670     &                  tl_vbar(i-1,j,krhs)))
 
 1684          tl_vfe(i,j)=0.25_r8*                                          &
 
 1685     &                ((tl_dvom(i,j)+tl_dvom(i,j+1))*                   &
 
 1686     &                 (vbar(i,j  ,krhs)+                               &
 
 1688     &                  vbar_stokes(i,j  )+                             &
 
 1689     &                  vbar_stokes(i,j+1)+                             &
 
 1691     &                  vbar(i,j+1,krhs))+                              &
 
 1692     &                 (dvom(i,j)+dvom(i,j+1))*                         &
 
 1693     &                 (tl_vbar(i,j  ,krhs)+                            &
 
 1695     &                  tl_vbar_stokes(i,j  )+                          &
 
 1696     &                  tl_vbar_stokes(i,j+1)+                          &
 
 1698     &                  tl_vbar(i,j+1,krhs)))
 
 1707          grad(i,j)=ubar(i-1,j,krhs)-2.0_r8*ubar(i,j,krhs)+            &
 
 1709     &               ubar_stokes(i-1,j)-2.0_r8*ubar_stokes(i,j)+        &
 
 1710     &               ubar_stokes(i+1,j)+                                &
 
 1713          tl_grad(i,j)=tl_ubar(i-1,j,krhs)-2.0_r8*tl_ubar(i,j,krhs)+    &
 
 1715     &                 tl_ubar_stokes(i-1,j)-2.0_r8*tl_ubar_stokes(i,j)+&
 
 1716     &                 tl_ubar_stokes(i+1,j)+                           &
 
 1718     &                 tl_ubar(i+1,j,krhs)
 
 1719          dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
 
 1720          tl_dgrad(i,j)=tl_duon(i-1,j)-2.0_r8*tl_duon(i,j)+             &
 
 1725        IF (
domain(ng)%Western_Edge(tile)) 
THEN 
 1727            grad(istr,j)=grad(istr+1,j)
 
 1728            tl_grad(istr,j)=tl_grad(istr+1,j)
 
 1729            dgrad(istr,j)=dgrad(istr+1,j)
 
 1730            tl_dgrad(istr,j)=tl_dgrad(istr+1,j)
 
 1735        IF (
domain(ng)%Eastern_Edge(tile)) 
THEN 
 1737            grad(iend+1,j)=grad(iend,j)
 
 1738            tl_grad(iend+1,j)=tl_grad(iend,j)
 
 1739            dgrad(iend+1,j)=dgrad(iend,j)
 
 1740            tl_dgrad(iend+1,j)=tl_dgrad(iend,j)
 
 1758          tl_ufx(i,j)=0.25_r8*                                          &
 
 1759     &                ((ubar(i  ,j,krhs)+                               &
 
 1761     &                  ubar_stokes(i  ,j)+                             &
 
 1762     &                  ubar_stokes(i+1,j)+                             &
 
 1764     &                  ubar(i+1,j,krhs)-                               &
 
 1765     &                  cff*(grad(i,j)+grad(i+1,j)))*                 &
 
 1766     &                 (tl_duon(i,j)+tl_duon(i+1,j)-                    &
 
 1767     &                  cff*(tl_dgrad(i,j)+tl_dgrad(i+1,j)))+           &
 
 1768     &                 (tl_ubar(i  ,j,krhs)+                            &
 
 1770     &                  tl_ubar_stokes(i  ,j)+                          &
 
 1771     &                  tl_ubar_stokes(i+1,j)+                          &
 
 1773     &                  tl_ubar(i+1,j,krhs)-                            &
 
 1774     &                  cff*(tl_grad(i,j)+tl_grad(i+1,j)))*           &
 
 1775     &                 (duon(i,j)+duon(i+1,j)-                          &
 
 1776     &                  cff*(dgrad(i,j)+dgrad(i+1,j))))
 
 1782          grad(i,j)=ubar(i,j-1,krhs)-2.0_r8*ubar(i,j,krhs)+             &
 
 1784     &              ubar_stokes(i,j-1)-2.0_r8*ubar_stokes(i,j)+         &
 
 1785     &              ubar_stokes(i,j+1)+                                 &
 
 1788          tl_grad(i,j)=tl_ubar(i,j-1,krhs)-2.0_r8*tl_ubar(i,j,krhs)+    &
 
 1790     &                 tl_ubar_stokes(i,j-1)-2.0_r8*tl_ubar_stokes(i,j)+&
 
 1791     &                 tl_ubar_stokes(i,j+1)+                           &
 
 1793     &                 tl_ubar(i,j+1,krhs)
 
 1797        IF (
domain(ng)%Southern_Edge(tile)) 
THEN 
 1799            grad(i,jstr-1)=grad(i,jstr)
 
 1800            tl_grad(i,jstr-1)=tl_grad(i,jstr)
 
 1805        IF (
domain(ng)%Northern_Edge(tile)) 
THEN 
 1807            grad(i,jend+1)=grad(i,jend)
 
 1808            tl_grad(i,jend+1)=tl_grad(i,jend)
 
 1814          dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
 
 1815          tl_dgrad(i,j)=tl_dvom(i-1,j)-2.0_r8*tl_dvom(i,j)+             &
 
 1833          tl_ufe(i,j)=0.25_r8*                                          &
 
 1834     &                ((tl_ubar(i,j  ,krhs)+                            &
 
 1836     &                  tl_ubar_stokes(i,j  )+                          &
 
 1837     &                  tl_ubar_stokes(i,j-1)+                          &
 
 1839     &                  tl_ubar(i,j-1,krhs)-                            &
 
 1840     &                  cff*(tl_grad(i,j)+tl_grad(i,j-1)))*           &
 
 1841     &                 (dvom(i,j)+dvom(i-1,j)-                          &
 
 1842     &                  cff*(dgrad(i,j)+dgrad(i-1,j)))+                 &
 
 1843     &                 (ubar(i,j  ,krhs)+                               &
 
 1845     &                  ubar_stokes(i,j  )+                             &
 
 1846     &                  ubar_stokes(i,j-1)+                             &
 
 1848     &                  ubar(i,j-1,krhs)-                               &
 
 1849     &                  cff*(grad(i,j)+grad(i,j-1)))*                 &
 
 1850     &                 (tl_dvom(i,j)+tl_dvom(i-1,j)-                    &
 
 1851     &                  cff*(tl_dgrad(i,j)+tl_dgrad(i-1,j))))
 
 1857          grad(i,j)=vbar(i-1,j,krhs)-2.0_r8*vbar(i,j,krhs)+             &
 
 1859     &              vbar_stokes(i-1,j)-2.0_r8*vbar_stokes(i,j)+         &
 
 1860     &              vbar_stokes(i+1,j)+                                 &
 
 1863          tl_grad(i,j)=tl_vbar(i-1,j,krhs)-2.0_r8*tl_vbar(i,j,krhs)+    &
 
 1865     &                 tl_vbar_stokes(i-1,j)-2.0_r8*tl_vbar_stokes(i,j)+&
 
 1866     &                 tl_vbar_stokes(i+1,j)+                           &
 
 1868     &                 tl_vbar(i+1,j,krhs)
 
 1872        IF (
domain(ng)%Western_Edge(tile)) 
THEN 
 1874            grad(istr-1,j)=grad(istr,j)
 
 1875            tl_grad(istr-1,j)=tl_grad(istr,j)
 
 1880        IF (
domain(ng)%Eastern_Edge(tile)) 
THEN 
 1882            grad(iend+1,j)=grad(iend,j)
 
 1883            tl_grad(iend+1,j)=tl_grad(iend,j)
 
 1889          dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
 
 1890          tl_dgrad(i,j)=tl_duon(i,j-1)-2.0_r8*tl_duon(i,j)+             &
 
 1908          tl_vfx(i,j)=0.25_r8*                                          &
 
 1909     &                ((tl_vbar(i  ,j,krhs)+                            &
 
 1911     &                  tl_vbar_stokes(i  ,j)+                          &
 
 1912     &                  tl_vbar_stokes(i-1,j)+                          &
 
 1914     &                  tl_vbar(i-1,j,krhs)-                            &
 
 1915     &                  cff*(tl_grad(i,j)+tl_grad(i-1,j)))*           &
 
 1916     &                 (duon(i,j)+duon(i,j-1)-                          &
 
 1917     &                  cff*(dgrad(i,j)+dgrad(i,j-1)))+                 &
 
 1918     &                 (vbar(i  ,j,krhs)+                               &
 
 1920     &                  vbar_stokes(i  ,j)+                             &
 
 1921     &                  vbar_stokes(i-1,j)+                             &
 
 1923     &                  vbar(i-1,j,krhs)-                               &
 
 1924     &                  cff*(grad(i,j)+grad(i-1,j)))*                 &
 
 1925     &                 (tl_duon(i,j)+tl_duon(i,j-1)-                    &
 
 1926     &                  cff*(tl_dgrad(i,j)+tl_dgrad(i,j-1))))
 
 1932          grad(i,j)=vbar(i,j-1,krhs)-2.0_r8*vbar(i,j,krhs)+             &
 
 1934     &              vbar_stokes(i,j-1)-2.0_r8*vbar_stokes(i,j)+         &
 
 1935     &              vbar_stokes(i,j+1)+                                 &
 
 1938          tl_grad(i,j)=tl_vbar(i,j-1,krhs)-2.0_r8*tl_vbar(i,j,krhs)+    &
 
 1940     &                 tl_vbar_stokes(i,j-1)-2.0_r8*tl_vbar_stokes(i,j)+&
 
 1941     &                 tl_vbar_stokes(i,j+1)+                           &
 
 1943     &                 tl_vbar(i,j+1,krhs)
 
 1944          dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
 
 1945          tl_dgrad(i,j)=tl_dvom(i,j-1)-2.0_r8*tl_dvom(i,j)+             &
 
 1950        IF (
domain(ng)%Southern_Edge(tile)) 
THEN 
 1952            grad(i,jstr)=grad(i,jstr+1)
 
 1953            tl_grad(i,jstr)=tl_grad(i,jstr+1)
 
 1954            dgrad(i,jstr)=dgrad(i,jstr+1)
 
 1955            tl_dgrad(i,jstr)=tl_dgrad(i,jstr+1)
 
 1960        IF (
domain(ng)%Northern_Edge(tile)) 
THEN 
 1962            grad(i,jend+1)=grad(i,jend)
 
 1963            tl_grad(i,jend+1)=tl_grad(i,jend)
 
 1964            dgrad(i,jend+1)=dgrad(i,jend)
 
 1965            tl_dgrad(i,jend+1)=tl_dgrad(i,jend)
 
 1983          tl_vfe(i,j)=0.25_r8*                                          &
 
 1984     &                ((tl_vbar(i,j  ,krhs)+                            &
 
 1986     &                  tl_vbar_stokes(i,j  )+                          &
 
 1987     &                  tl_vbar_stokes(i,j+1)+                          &
 
 1989     &                  tl_vbar(i,j+1,krhs)-                            &
 
 1990     &                  cff*(tl_grad(i,j)+tl_grad(i,j+1)))*           &
 
 1991     &                 (dvom(i,j)+dvom(i,j+1)-                          &
 
 1992     &                  cff*(dgrad(i,j)+dgrad(i,j+1)))+                 &
 
 1993     &                 (vbar(i,j  ,krhs)+                               &
 
 1995     &                  vbar_stokes(i,j  )+                             &
 
 1996     &                  vbar_stokes(i,j+1)+                             &
 
 1998     &                  vbar(i,j+1,krhs)-                               &
 
 1999     &                  cff*(grad(i,j)+grad(i,j+1)))*                 &
 
 2000     &                 (tl_dvom(i,j)+tl_dvom(i,j+1)-                    &
 
 2001     &                  cff*(tl_dgrad(i,j)+tl_dgrad(i,j+1))))
 
 2010          tl_cff1=tl_ufx(i,j)-tl_ufx(i-1,j)
 
 2013          tl_cff2=tl_ufe(i,j+1)-tl_ufe(i,j)
 
 2016          tl_fac=tl_cff1+tl_cff2
 
 2019          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)-tl_fac
 
 2020# if defined DIAGNOSTICS_UV 
 2031          tl_cff1=tl_vfx(i+1,j)-tl_vfx(i,j)
 
 2034          tl_cff2=tl_vfe(i,j)-tl_vfe(i,j-1)
 
 2037          tl_fac=tl_cff1+tl_cff2
 
 2040          tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_fac
 
 2041# if defined DIAGNOSTICS_UV 
 2057          cff=0.5_r8*drhs(i,j)*fomn(i,j)
 
 2058          tl_cff=0.5_r8*tl_drhs(i,j)*fomn(i,j)
 
 2066          tl_ufx(i,j)=tl_cff*(vbar(i,j  ,krhs)+                         &
 
 2068     &                        vbar_stokes(i,j  )+                       &
 
 2069     &                        vbar_stokes(i,j+1)+                       &
 
 2071     &                        vbar(i,j+1,krhs))+                        &
 
 2072     &                cff*(tl_vbar(i,j  ,krhs)+                         &
 
 2074     &                     tl_vbar_stokes(i,j  )+                       &
 
 2075     &                     tl_vbar_stokes(i,j+1)+                       &
 
 2077     &                     tl_vbar(i,j+1,krhs))
 
 2085          tl_vfe(i,j)=tl_cff*(ubar(i  ,j,krhs)+                         &
 
 2087     &                        ubar_stokes(i  ,j)+                       &
 
 2088     &                        ubar_stokes(i+1,j)+                       &
 
 2090     &                        ubar(i+1,j,krhs))+                        &
 
 2091     &                cff*(tl_ubar(i  ,j,krhs)+                         &
 
 2093     &                     tl_ubar_stokes(i  ,j)+                       &
 
 2094     &                     tl_ubar_stokes(i+1,j)+                       &
 
 2096     &                     tl_ubar(i+1,j,krhs))
 
 2103          tl_fac1=0.5_r8*(tl_ufx(i,j)+tl_ufx(i-1,j))
 
 2106          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_fac1
 
 2107# if defined DIAGNOSTICS_UV 
 2116          tl_fac1=0.5_r8*(tl_vfe(i,j)+tl_vfe(i,j-1))
 
 2119          tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_fac1
 
 2120# if defined DIAGNOSTICS_UV 
 2126#if defined CURVGRID && defined UV_ADV 
 2134          cff1=0.5_r8*(vbar(i,j  ,krhs)+                                &
 
 2136     &                 vbar_stokes(i,j  )+                              &
 
 2137     &                 vbar_stokes(i,j+1)+                              &
 
 2140          tl_cff1=0.5_r8*(tl_vbar(i,j  ,krhs)+                          &
 
 2142     &                    tl_vbar_stokes(i,j  )+                        &
 
 2143     &                    tl_vbar_stokes(i,j+1)+                        &
 
 2145     &                    tl_vbar(i,j+1,krhs))
 
 2146          cff2=0.5_r8*(ubar(i  ,j,krhs)+                                &
 
 2148     &                 ubar_stokes(i  ,j)+                              &
 
 2149     &                 ubar_stokes(i+1,j)+                              &
 
 2152          tl_cff2=0.5_r8*(tl_ubar(i  ,j,krhs)+                          &
 
 2154     &                    tl_ubar_stokes(i  ,j)+                        &
 
 2155     &                    tl_ubar_stokes(i+1,j)+                        &
 
 2157     &                    tl_ubar(i+1,j,krhs))
 
 2159          tl_cff3=tl_cff1*dndx(i,j)
 
 2161          tl_cff4=tl_cff2*dmde(i,j)
 
 2162          cff=drhs(i,j)*(cff3-cff4)
 
 2163          tl_cff=tl_drhs(i,j)*(cff3-cff4)+                              &
 
 2164     &           drhs(i,j)*(tl_cff3-tl_cff4)
 
 2167          tl_ufx(i,j)=tl_cff*cff1+cff*tl_cff1
 
 2170          tl_vfe(i,j)=tl_cff*cff2+cff*tl_cff2
 
 2171# if defined DIAGNOSTICS_UV 
 2182          tl_fac1=0.5_r8*(tl_ufx(i,j)+tl_ufx(i-1,j))
 
 2185          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_fac1
 
 2186# if defined DIAGNOSTICS_UV 
 2198          tl_fac1=0.5_r8*(tl_vfe(i,j)+tl_vfe(i,j-1))
 
 2201          tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_fac1
 
 2202# if defined DIAGNOSTICS_UV 
 2211#if defined UV_VIS2 || defined UV_VIS4 
 2224          drhs_p(i,j)=0.25_r8*(drhs(i,j  )+drhs(i-1,j  )+               &
 
 2225     &                         drhs(i,j-1)+drhs(i-1,j-1))
 
 2226          tl_drhs_p(i,j)=0.25_r8*(tl_drhs(i,j  )+tl_drhs(i-1,j  )+      &
 
 2227     &                            tl_drhs(i,j-1)+tl_drhs(i-1,j-1))
 
 2250          tl_cff=visc2_r(i,j)*0.5_r8*                                   &
 
 2253     &             ((pn(i  ,j)+pn(i+1,j))*ubar(i+1,j,krhs)-             &
 
 2254     &              (pn(i-1,j)+pn(i  ,j))*ubar(i  ,j,krhs))-            &
 
 2256     &             ((pm(i,j  )+pm(i,j+1))*vbar(i,j+1,krhs)-             &
 
 2257     &              (pm(i,j-1)+pm(i,j  ))*vbar(i,j  ,krhs)))+           &
 
 2260     &             ((pn(i  ,j)+pn(i+1,j))*tl_ubar(i+1,j,krhs)-          &
 
 2261     &              (pn(i-1,j)+pn(i  ,j))*tl_ubar(i  ,j,krhs))-         &
 
 2263     &             ((pm(i,j  )+pm(i,j+1))*tl_vbar(i,j+1,krhs)-          &
 
 2264     &              (pm(i,j-1)+pm(i,j  ))*tl_vbar(i,j  ,krhs))))
 
 2267          tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
 
 2270          tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
 
 2283          tl_cff=visc2_p(i,j)*0.5_r8*                                   &
 
 2284     &           (tl_drhs_p(i,j)*                                       &
 
 2286     &             ((pn(i  ,j-1)+pn(i  ,j))*vbar(i  ,j,krhs)-           &
 
 2287     &              (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+          &
 
 2289     &             ((pm(i-1,j  )+pm(i,j  ))*ubar(i,j  ,krhs)-           &
 
 2290     &              (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))+         &
 
 2293     &             ((pn(i  ,j-1)+pn(i  ,j))*tl_vbar(i  ,j,krhs)-        &
 
 2294     &              (pn(i-1,j-1)+pn(i-1,j))*tl_vbar(i-1,j,krhs))+       &
 
 2296     &             ((pm(i-1,j  )+pm(i,j  ))*tl_ubar(i,j  ,krhs)-        &
 
 2297     &              (pm(i-1,j-1)+pm(i,j-1))*tl_ubar(i,j-1,krhs))))
 
 2301          tl_cff=tl_cff*pmask(i,j)
 
 2305          tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
 
 2308          tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
 
 2318          tl_cff1=0.5_r8*(pn(i-1,j)+pn(i,j))*                           &
 
 2319     &            (tl_ufx(i,j  )-tl_ufx(i-1,j))
 
 2322          tl_cff2=0.5_r8*(pm(i-1,j)+pm(i,j))*                           &
 
 2323     &            (tl_ufe(i,j+1)-tl_ufe(i  ,j))
 
 2326          tl_fac=tl_cff1+tl_cff2
 
 2329          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_fac
 
 2330# if defined DIAGNOSTICS_UV 
 2341          tl_cff1=0.5_r8*(pn(i,j-1)+pn(i,j))*                           &
 
 2342     &            (tl_vfx(i+1,j)-tl_vfx(i,j  ))
 
 2345          tl_cff2=0.5_r8*(pm(i,j-1)+pm(i,j))*                           &
 
 2346     &            (tl_vfe(i  ,j)-tl_vfe(i,j-1))
 
 2349          tl_fac=tl_cff1-tl_cff2
 
 2352          tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+tl_fac
 
 2353# if defined DIAGNOSTICS_UV 
 2377          cff=visc4_r(i,j)*0.5_r8*                                      &
 
 2379     &         ((pn(i  ,j)+pn(i+1,j))*ubar(i+1,j,krhs)-                 &
 
 2380     &          (pn(i-1,j)+pn(i  ,j))*ubar(i  ,j,krhs))-                &
 
 2382     &         ((pm(i,j  )+pm(i,j+1))*vbar(i,j+1,krhs)-                 &
 
 2383     &          (pm(i,j-1)+pm(i,j  ))*vbar(i,j  ,krhs)))
 
 2384          tl_cff=visc4_r(i,j)*0.5_r8*                                   &
 
 2386     &            ((pn(i  ,j)+pn(i+1,j))*tl_ubar(i+1,j,krhs)-           &
 
 2387     &             (pn(i-1,j)+pn(i  ,j))*tl_ubar(i  ,j,krhs))-          &
 
 2389     &            ((pm(i,j  )+pm(i,j+1))*tl_vbar(i,j+1,krhs)-           &
 
 2390     &             (pm(i,j-1)+pm(i,j  ))*tl_vbar(i,j  ,krhs)))
 
 2391          ufx(i,j)=on_r(i,j)*on_r(i,j)*cff
 
 2392          tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
 
 2393          vfe(i,j)=om_r(i,j)*om_r(i,j)*cff
 
 2394          tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
 
 2399          cff=visc4_p(i,j)*0.5_r8*                                      &
 
 2401     &         ((pn(i  ,j-1)+pn(i  ,j))*vbar(i  ,j,krhs)-               &
 
 2402     &          (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+              &
 
 2404     &         ((pm(i-1,j  )+pm(i,j  ))*ubar(i,j  ,krhs)-               &
 
 2405     &          (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))
 
 2406          tl_cff=visc4_p(i,j)*0.5_r8*                                   &
 
 2408     &            ((pn(i  ,j-1)+pn(i  ,j))*tl_vbar(i  ,j,krhs)-         &
 
 2409     &             (pn(i-1,j-1)+pn(i-1,j))*tl_vbar(i-1,j,krhs))+        &
 
 2411     &            ((pm(i-1,j  )+pm(i,j  ))*tl_ubar(i,j  ,krhs)-         &
 
 2412     &             (pm(i-1,j-1)+pm(i,j-1))*tl_ubar(i,j-1,krhs)))
 
 2415          tl_cff=tl_cff*pmask(i,j)
 
 2417          ufe(i,j)=om_p(i,j)*om_p(i,j)*cff
 
 2418          tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
 
 2419          vfx(i,j)=on_p(i,j)*on_p(i,j)*cff
 
 2420          tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
 
 2428          lapu(i,j)=0.125_r8*                                           &
 
 2429     &              (pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))*            &
 
 2430     &              ((pn(i-1,j)+pn(i,j))*                               &
 
 2431     &               (ufx(i,j  )-ufx(i-1,j))+                           &
 
 2432     &               (pm(i-1,j)+pm(i,j))*                               &
 
 2433     &               (ufe(i,j+1)-ufe(i  ,j)))
 
 2434          tl_lapu(i,j)=0.125_r8*                                        &
 
 2435     &                 (pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))*         &
 
 2436     &                 ((pn(i-1,j)+pn(i,j))*                            &
 
 2437     &                  (tl_ufx(i,j  )-tl_ufx(i-1,j))+                  &
 
 2438     &                  (pm(i-1,j)+pm(i,j))*                            &
 
 2439     &                  (tl_ufe(i,j+1)-tl_ufe(i  ,j)))
 
 2444          lapv(i,j)=0.125_r8*                                           &
 
 2445     &              (pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))*            &
 
 2446     &              ((pn(i,j-1)+pn(i,j))*                               &
 
 2447     &               (vfx(i+1,j)-vfx(i,j  ))-                           &
 
 2448     &               (pm(i,j-1)+pm(i,j))*                               &
 
 2449     &               (vfe(i  ,j)-vfe(i,j-1)))
 
 2450          tl_lapv(i,j)=0.125_r8*                                        &
 
 2451     &                 (pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))*         &
 
 2452     &                 ((pn(i,j-1)+pn(i,j))*                            &
 
 2453     &                  (tl_vfx(i+1,j)-tl_vfx(i,j  ))-                  &
 
 2454     &                  (pm(i,j-1)+pm(i,j))*                            &
 
 2455     &                  (tl_vfe(i  ,j)-tl_vfe(i,j-1)))
 
 2464        IF (
domain(ng)%Western_Edge(tile)) 
THEN 
 2467              lapu(istru-1,j)=0.0_r8
 
 2468              tl_lapu(istru-1,j)=0.0_r8
 
 2472              lapu(istru-1,j)=lapu(istru,j)
 
 2473              tl_lapu(istru-1,j)=tl_lapu(istru,j)
 
 2478              lapv(istr-1,j)=
gamma2(ng)*lapv(istr,j)
 
 2479              tl_lapv(istr-1,j)=
gamma2(ng)*tl_lapv(istr,j)
 
 2483              lapv(istr-1,j)=0.0_r8
 
 2484              tl_lapv(istr-1,j)=0.0_r8
 
 2491        IF (
domain(ng)%Eastern_Edge(tile)) 
THEN 
 2494              lapu(iend+1,j)=0.0_r8
 
 2495              tl_lapu(iend+1,j)=0.0_r8
 
 2499              lapu(iend+1,j)=lapu(iend,j)
 
 2500              tl_lapu(iend+1,j)=tl_lapu(iend,j)
 
 2505              lapv(iend+1,j)=
gamma2(ng)*lapv(iend,j)
 
 2506              tl_lapv(iend+1,j)=
gamma2(ng)*tl_lapv(iend,j)
 
 2510              lapv(iend+1,j)=0.0_r8
 
 2511              tl_lapv(iend+1,j)=0.0_r8
 
 2518        IF (
domain(ng)%Southern_Edge(tile)) 
THEN 
 2521              lapu(i,jstr-1)=
gamma2(ng)*lapu(i,jstr)
 
 2522              tl_lapu(i,jstr-1)=
gamma2(ng)*tl_lapu(i,jstr)
 
 2526              lapu(i,jstr-1)=0.0_r8
 
 2527              tl_lapu(i,jstr-1)=0.0_r8
 
 2532              lapv(i,jstrv-1)=0.0_r8
 
 2533              tl_lapv(i,jstrv-1)=0.0_r8
 
 2537              lapv(i,jstrv-1)=lapv(i,jstrv)
 
 2538              tl_lapv(i,jstrv-1)=tl_lapv(i,jstrv)
 
 2545        IF (
domain(ng)%Northern_Edge(tile)) 
THEN 
 2548              lapu(i,jend+1)=
gamma2(ng)*lapu(i,jend)
 
 2549              tl_lapu(i,jend+1)=
gamma2(ng)*tl_lapu(i,jend)
 
 2553              lapu(i,jend+1)=0.0_r8
 
 2554              tl_lapu(i,jend+1)=0.0_r8
 
 2559              lapv(i,jend+1)=0.0_r8
 
 2560              tl_lapv(i,jend+1)=0.0_r8
 
 2564              lapv(i,jend+1)=lapv(i,jend)
 
 2565              tl_lapv(i,jend+1)=tl_lapv(i,jend)
 
 2573        IF (
domain(ng)%SouthWest_Corner(tile)) 
THEN 
 2574          lapu(istr  ,jstr-1)=0.5_r8*(lapu(istr+1,jstr-1)+              &
 
 2575     &                                lapu(istr  ,jstr  ))
 
 2576          tl_lapu(istr  ,jstr-1)=0.5_r8*(tl_lapu(istr+1,jstr-1)+        &
 
 2577     &                                   tl_lapu(istr  ,jstr  ))
 
 2578          lapv(istr-1,jstr  )=0.5_r8*(lapv(istr-1,jstr+1)+              &
 
 2579     &                                lapv(istr  ,jstr  ))
 
 2580          tl_lapv(istr-1,jstr  )=0.5_r8*(tl_lapv(istr-1,jstr+1)+        &
 
 2581     &                                   tl_lapv(istr  ,jstr  ))
 
 2587        IF (
domain(ng)%SouthEast_Corner(tile)) 
THEN 
 2588          lapu(iend+1,jstr-1)=0.5_r8*(lapu(iend  ,jstr-1)+              &
 
 2589     &                                lapu(iend+1,jstr  ))
 
 2590          tl_lapu(iend+1,jstr-1)=0.5_r8*(tl_lapu(iend  ,jstr-1)+        &
 
 2591     &                                   tl_lapu(iend+1,jstr  ))
 
 2592          lapv(iend+1,jstr  )=0.5_r8*(lapv(iend  ,jstr  )+              &
 
 2593     &                                lapv(iend+1,jstr+1))
 
 2594          tl_lapv(iend+1,jstr  )=0.5_r8*(tl_lapv(iend  ,jstr  )+        &
 
 2595     &                                   tl_lapv(iend+1,jstr+1))
 
 2601        IF (
domain(ng)%NorthWest_Corner(tile)) 
THEN 
 2602          lapu(istr  ,jend+1)=0.5_r8*(lapu(istr+1,jend+1)+              &
 
 2603     &                                lapu(istr  ,jend  ))
 
 2604          tl_lapu(istr  ,jend+1)=0.5_r8*(tl_lapu(istr+1,jend+1)+        &
 
 2605     &                                   tl_lapu(istr  ,jend  ))
 
 2606          lapv(istr-1,jend+1)=0.5_r8*(lapv(istr  ,jend+1)+              &
 
 2607     &                                lapv(istr-1,jend  ))
 
 2608          tl_lapv(istr-1,jend+1)=0.5_r8*(tl_lapv(istr  ,jend+1)+        &
 
 2609     &                                   tl_lapv(istr-1,jend  ))
 
 2615        IF (
domain(ng)%NorthEast_Corner(tile)) 
THEN 
 2616          lapu(iend+1,jend+1)=0.5_r8*(lapu(iend  ,jend+1)+              &
 
 2617     &                                lapu(iend+1,jend  ))
 
 2618          tl_lapu(iend+1,jend+1)=0.5_r8*(tl_lapu(iend  ,jend+1)+        &
 
 2619     &                                   tl_lapu(iend+1,jend  ))
 
 2620          lapv(iend+1,jend+1)=0.5_r8*(lapv(iend  ,jend+1)+              &
 
 2621     &                                lapv(iend+1,jend  ))
 
 2622          tl_lapv(iend+1,jend+1)=0.5_r8*(tl_lapv(iend  ,jend+1)+        &
 
 2623     &                                   tl_lapv(iend+1,jend  ))
 
 2640          tl_cff=visc4_r(i,j)*0.5_r8*                                   &
 
 2643     &             ((pn(i  ,j)+pn(i+1,j))*lapu(i+1,j)-                  &
 
 2644     &              (pn(i-1,j)+pn(i  ,j))*lapu(i  ,j))-                 &
 
 2646     &             ((pm(i,j  )+pm(i,j+1))*lapv(i,j+1)-                  &
 
 2647     &              (pm(i,j-1)+pm(i,j  ))*lapv(i,j  )))+                &
 
 2650     &             ((pn(i  ,j)+pn(i+1,j))*tl_lapu(i+1,j)-               &
 
 2651     &              (pn(i-1,j)+pn(i  ,j))*tl_lapu(i  ,j))-              &
 
 2653     &             ((pm(i,j  )+pm(i,j+1))*tl_lapv(i,j+1)-               &
 
 2654     &              (pm(i,j-1)+pm(i,j  ))*tl_lapv(i,j  ))))
 
 2657          tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
 
 2660          tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
 
 2673          tl_cff=visc4_p(i,j)*0.5_r8*                                   &
 
 2674     &           (tl_drhs_p(i,j)*                                       &
 
 2676     &             ((pn(i  ,j-1)+pn(i  ,j))*lapv(i  ,j)-                &
 
 2677     &              (pn(i-1,j-1)+pn(i-1,j))*lapv(i-1,j))+               &
 
 2679     &             ((pm(i-1,j  )+pm(i,j  ))*lapu(i,j  )-                &
 
 2680     &              (pm(i-1,j-1)+pm(i,j-1))*lapu(i,j-1)))+              &
 
 2683     &             ((pn(i  ,j-1)+pn(i  ,j))*tl_lapv(i  ,j)-             &
 
 2684     &              (pn(i-1,j-1)+pn(i-1,j))*tl_lapv(i-1,j))+            &
 
 2686     &             ((pm(i-1,j  )+pm(i,j  ))*tl_lapu(i,j  )-             &
 
 2687     &              (pm(i-1,j-1)+pm(i,j-1))*tl_lapu(i,j-1))))
 
 2691          tl_cff=tl_cff*pmask(i,j)
 
 2695          tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
 
 2698          tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
 
 2708          tl_cff1=0.5_r8*(pn(i-1,j)+pn(i,j))*                           &
 
 2709     &            (tl_ufx(i,j  )-tl_ufx(i-1,j))
 
 2712          tl_cff2=0.5_r8*(pm(i-1,j)+pm(i,j))*                           &
 
 2713     &            (ufe(i,j+1)-ufe(i  ,j))
 
 2716          tl_fac=tl_cff1+tl_cff2
 
 2719          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_fac
 
 2720# if defined DIAGNOSTICS_UV 
 2731          tl_cff1=0.5_r8*(pn(i,j-1)+pn(i,j))*                           &
 
 2732     &            (tl_vfx(i+1,j)-tl_vfx(i,j  ))
 
 2735          tl_cff2=0.5_r8*(pm(i,j-1)+pm(i,j))*                           &
 
 2736     &            (tl_vfe(i  ,j)-tl_vfe(i,j-1))
 
 2739          tl_fac=tl_cff1-tl_cff2
 
 2742          tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+tl_fac
 
 2743# if defined DIAGNOSTICS_UV 
 2751#if defined WEC_MELLOR && \ 
 2762          tl_cff1=tl_rustr2d(i,j)*om_u(i,j)*on_u(i,j)
 
 2765          tl_cff2=tl_rulag2d(i,j)
 
 2769          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)-tl_cff1-tl_cff2
 
 2771# ifdef DIAGNOSTICS_UV 
 2780          tl_cff1=tl_rvstr2d(i,j)*om_v(i,j)*on_v(i,j)
 
 2783          tl_cff2=tl_rvlag2d(i,j)
 
 2787          tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_cff1-tl_cff2
 
 2789# ifdef DIAGNOSTICS_UV 
 2805          tl_fac=tl_bustr(i,j)*om_u(i,j)*on_u(i,j)
 
 2808          tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)-tl_fac
 
 2809# ifdef DIAGNOSTICS_UV 
 2818          tl_fac=tl_bvstr(i,j)*om_v(i,j)*on_v(i,j)
 
 2821          tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_fac
 
 2822# ifdef DIAGNOSTICS_UV 
 2828# ifdef DIAGNOSTICS_UV 
 2852            cff=0.25_r8*(
clima(ng)%M2nudgcof(i-1,j)+                    &
 
 2853     &                   
clima(ng)%M2nudgcof(i  ,j))*                   &
 
 2854     &          om_u(i,j)*on_u(i,j)
 
 2860            tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+                          &
 
 2861     &                       cff*((drhs(i-1,j)+drhs(i,j))*              &
 
 2862     &                            (-tl_ubar(i,j,krhs))+                 &
 
 2863     &                            (tl_drhs(i-1,j)+tl_drhs(i,j))*        &
 
 2864     &                            (
clima(ng)%ubarclm(i,j)-              &
 
 2870            cff=0.25_r8*(
clima(ng)%M2nudgcof(i,j-1)+                    &
 
 2871     &                   
clima(ng)%M2nudgcof(i,j  ))*                   &
 
 2872     &          om_v(i,j)*on_v(i,j)
 
 2878            tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+                          &
 
 2879     &                       cff*((drhs(i,j-1)+drhs(i,j))*              &
 
 2880     &                            (-tl_vbar(i,j,krhs))+                 &
 
 2881     &                            (tl_drhs(i,j-1)+tl_drhs(i,j))*        &
 
 2882     &                            (
clima(ng)%vbarclm(i,j)-              &
 
 2908#if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE 
 2909        IF (
iic(ng).eq.
ntfirst(ng).and.soinitial(ng)) 
THEN 
 2917              tl_rufrc(i,j)=tl_rufrc(i,j)-tl_rhs_ubar(i,j)
 
 2920              tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_rufrc(i,j)
 
 2923              tl_ru(i,j,0,nstp)=tl_rufrc(i,j)
 
 2924# ifdef DIAGNOSTICS_UV 
 2943              tl_rvfrc(i,j)=tl_rvfrc(i,j)-tl_rhs_vbar(i,j)
 
 2946              tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+tl_rvfrc(i,j)
 
 2949              tl_rv(i,j,0,nstp)=tl_rvfrc(i,j)
 
 2950# ifdef DIAGNOSTICS_UV 
 2965#if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE 
 2966        ELSE IF (
iic(ng).eq.(
ntfirst(ng)+1).and.soinitial(ng)) 
THEN 
 2974              tl_rufrc(i,j)=tl_rufrc(i,j)-tl_rhs_ubar(i,j)
 
 2978              tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+                        &
 
 2979     &                         1.5_r8*tl_rufrc(i,j)-                    &
 
 2980     &                         0.5_r8*tl_ru(i,j,0,nnew)
 
 2983              tl_ru(i,j,0,nstp)=tl_rufrc(i,j)
 
 2984# ifdef DIAGNOSTICS_UV 
 3006              tl_rvfrc(i,j)=tl_rvfrc(i,j)-tl_rhs_vbar(i,j)
 
 3010              tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+                        &
 
 3011     &                         1.5_r8*tl_rvfrc(i,j)-                    &
 
 3012     &                         0.5_r8*tl_rv(i,j,0,nnew)
 
 3015              tl_rv(i,j,0,nstp)=tl_rvfrc(i,j)
 
 3016# ifdef DIAGNOSTICS_UV 
 3035          cff1=23.0_r8/12.0_r8
 
 3036          cff2=16.0_r8/12.0_r8
 
 3037          cff3= 5.0_r8/12.0_r8
 
 3042              tl_rufrc(i,j)=tl_rufrc(i,j)-tl_rhs_ubar(i,j)
 
 3048              tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+                        &
 
 3049     &                         cff1*tl_rufrc(i,j)-                      &
 
 3050     &                         cff2*tl_ru(i,j,0,nnew)+                  &
 
 3051     &                         cff3*tl_ru(i,j,0,nstp)
 
 3054              tl_ru(i,j,0,nstp)=tl_rufrc(i,j)
 
 3055# ifdef DIAGNOSTICS_UV 
 3080              tl_rvfrc(i,j)=tl_rvfrc(i,j)-tl_rhs_vbar(i,j)
 
 3086              tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+                        &
 
 3087     &                         cff1*tl_rvfrc(i,j)-                      &
 
 3088     &                         cff2*tl_rv(i,j,0,nnew)+                  &
 
 3089     &                         cff3*tl_rv(i,j,0,nstp)
 
 3092              tl_rv(i,j,0,nstp)=tl_rvfrc(i,j)
 
 3093# ifdef DIAGNOSTICS_UV 
 3120            tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_rufrc(i,j)
 
 3121# ifdef DIAGNOSTICS_UV 
 3135            tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+tl_rvfrc(i,j)
 
 3136# ifdef DIAGNOSTICS_UV 
 3157# ifdef DIAGNOSTICS_UV 
 3166# ifdef DIAGNOSTICS_UV 
 3181          dstp(i,j)=zeta(i,j,kstp)+h(i,j)
 
 3182          tl_dstp(i,j)=tl_zeta(i,j,kstp)+tl_h(i,j)
 
 3189#ifdef WET_DRY_NOT_YET 
 3194#if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE && \ 
 3196      IF (first_2d_step.and.soinitial(ng)) 
THEN 
 3198      IF (first_2d_step) 
THEN 
 3201#ifdef WET_DRY_NOT_YET 
 3206            cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
 
 3207            fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
 
 3208            tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i-1,j))
 
 3213            tl_ubar(i,j,knew)=(tl_ubar(i,j,kstp)*                       &
 
 3214     &                         (dstp(i,j)+dstp(i-1,j))+                 &
 
 3216     &                         (tl_dstp(i,j)+tl_dstp(i-1,j))+           &
 
 3217     &                         cff*cff1*tl_rhs_ubar(i,j))*fac+          &
 
 3218     &                        (ubar(i,j,kstp)*                          &
 
 3219     &                         (dstp(i,j)+dstp(i-1,j))+                 &
 
 3220     &                         cff*cff1*rhs_ubar(i,j))*tl_fac
 
 3224            tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
 
 3226#ifdef WET_DRY_NOT_YET 
 3239            tl_rhs_ubar(i,j)=(tl_ubar(i,j,knew)*                        &
 
 3240     &                        (dnew(i,j)+dnew(i-1,j))+                  &
 
 3242     &                        (tl_dnew(i,j)+tl_dnew(i-1,j))-            &
 
 3243     &                        tl_ubar(i,j,kstp)*                        &
 
 3244     &                        (dstp(i,j)+dstp(i-1,j))-                  &
 
 3246     &                        (tl_dstp(i,j)+tl_dstp(i-1,j)))*fac1
 
 3252            cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
 
 3253            fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
 
 3254            tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i,j-1))
 
 3259            tl_vbar(i,j,knew)=(tl_vbar(i,j,kstp)*                       &
 
 3260     &                         (dstp(i,j)+dstp(i,j-1))+                 &
 
 3262     &                         (tl_dstp(i,j)+tl_dstp(i,j-1))+           &
 
 3263     &                         cff*cff1*tl_rhs_vbar(i,j))*fac+          &
 
 3264     &                        (vbar(i,j,kstp)*                          &
 
 3265     &                         (dstp(i,j)+dstp(i,j-1))+                 &
 
 3266     &                         cff*cff1*rhs_vbar(i,j))*tl_fac
 
 3270            tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
 
 3272#ifdef WET_DRY_NOT_YET 
 3285            tl_rhs_vbar(i,j)=(tl_vbar(i,j,knew)*                        &
 
 3286     &                        (dnew(i,j)+dnew(i,j-1))+                  &
 
 3288     &                        (tl_dnew(i,j)+tl_dnew(i,j-1))-            &
 
 3289     &                        tl_vbar(i,j,kstp)*                        &
 
 3290     &                        (dstp(i,j)+dstp(i,j-1))-                  &
 
 3292     &                        (tl_dstp(i,j)+tl_dstp(i,j-1)))*fac1
 
 3298#ifdef WET_DRY_NOT_YET 
 3303            cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
 
 3304            fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
 
 3305            tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i-1,j))
 
 3310            tl_ubar(i,j,knew)=(tl_ubar(i,j,kstp)*                       &
 
 3311     &                         (dstp(i,j)+dstp(i-1,j))+                 &
 
 3313     &                         (tl_dstp(i,j)+tl_dstp(i-1,j))+           &
 
 3314     &                         cff*cff1*tl_rhs_ubar(i,j))*fac+          &
 
 3315     &                        (ubar(i,j,kstp)*                          &
 
 3316     &                         (dstp(i,j)+dstp(i-1,j))+                 &
 
 3317     &                         cff*cff1*rhs_ubar(i,j))*tl_fac
 
 3321            tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
 
 3323#ifdef WET_DRY_NOT_YET 
 3336            tl_rhs_ubar(i,j)=(tl_ubar(i,j,knew)*                        &
 
 3337     &                        (dnew(i,j)+dnew(i-1,j))+                  &
 
 3339     &                        (tl_dnew(i,j)+tl_dnew(i-1,j))-            &
 
 3340     &                        tl_ubar(i,j,kstp)*                        &
 
 3341     &                        (dstp(i,j)+dstp(i-1,j))-                  &
 
 3343     &                        (tl_dstp(i,j)+tl_dstp(i-1,j)))*fac1
 
 3349            cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
 
 3350            fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
 
 3351            tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i,j-1))
 
 3356            tl_vbar(i,j,knew)=(tl_vbar(i,j,kstp)*                       &
 
 3357     &                         (dstp(i,j)+dstp(i,j-1))+                 &
 
 3359     &                         (tl_dstp(i,j)+tl_dstp(i,j-1))+           &
 
 3360     &                         cff*cff1*tl_rhs_vbar(i,j))*fac+          &
 
 3361     &                        (vbar(i,j,kstp)*                          &
 
 3362     &                         (dstp(i,j)+dstp(i,j-1))+                 &
 
 3363     &                         cff*cff1*rhs_vbar(i,j))*tl_fac
 
 3367            tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
 
 3369#ifdef WET_DRY_NOT_YET 
 3382            tl_rhs_vbar(i,j)=(tl_vbar(i,j,knew)*                        &
 
 3383     &                        (dnew(i,j)+dnew(i,j-1))+                  &
 
 3385     &                        (tl_dnew(i,j)+tl_dnew(i,j-1))-            &
 
 3386     &                        tl_vbar(i,j,kstp)*                        &
 
 3387     &                        (dstp(i,j)+dstp(i,j-1))-                  &
 
 3389     &                        (tl_dstp(i,j)+tl_dstp(i,j-1)))*fac1
 
 3393      ELSE IF (corrector_2d_step) 
THEN 
 3394        cff1=0.5_r8*
dtfast(ng)*5.0_r8/12.0_r8
 
 3395        cff2=0.5_r8*
dtfast(ng)*8.0_r8/12.0_r8
 
 3396        cff3=0.5_r8*
dtfast(ng)*1.0_r8/12.0_r8
 
 3397#ifdef WET_DRY_NOT_YET 
 3402            cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
 
 3403            fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
 
 3404            tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i-1,j))
 
 3411            tl_ubar(i,j,knew)=(tl_ubar(i,j,kstp)*                       &
 
 3412     &                         (dstp(i,j)+dstp(i-1,j))+                 &
 
 3414     &                         (tl_dstp(i,j)+tl_dstp(i-1,j))+           &
 
 3415     &                         cff*(cff1*tl_rhs_ubar(i,j)+              &
 
 3416     &                              cff2*tl_rubar(i,j,kstp)-            &
 
 3417     &                              cff3*tl_rubar(i,j,ptsk)))*fac+      &
 
 3418     &                        (ubar(i,j,kstp)*                          &
 
 3419     &                         (dstp(i,j)+dstp(i-1,j))+                 &
 
 3420     &                         cff*(cff1*rhs_ubar(i,j)+                 &
 
 3421     &                              cff2*rubar(i,j,kstp)-               &
 
 3422     &                              cff3*rubar(i,j,ptsk)))*tl_fac
 
 3426            tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
 
 3428#ifdef WET_DRY_NOT_YET 
 3443            tl_rhs_ubar(i,j)=((tl_ubar(i,j,knew)*                       &
 
 3444     &                         (dnew(i,j)+dnew(i-1,j))+                 &
 
 3446     &                         (tl_dnew(i,j)+tl_dnew(i-1,j))-           &
 
 3447     &                         tl_ubar(i,j,kstp)*                       &
 
 3448     &                         (dstp(i,j)+dstp(i-1,j))-                 &
 
 3450     &                         (tl_dstp(i,j)+tl_dstp(i-1,j)))*fac1-     &
 
 3451     &                        cff2*tl_rubar(i,j,kstp)+                  &
 
 3452     &                        cff3*tl_rubar(i,j,ptsk))*cff4
 
 3458            cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
 
 3459            fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
 
 3460            tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i,j-1))
 
 3467            tl_vbar(i,j,knew)=(tl_vbar(i,j,kstp)*                       &
 
 3468     &                         (dstp(i,j)+dstp(i,j-1))+                 &
 
 3470     &                         (tl_dstp(i,j)+tl_dstp(i,j-1))+           &
 
 3471     &                         cff*(cff1*tl_rhs_vbar(i,j)+              &
 
 3472     &                              cff2*tl_rvbar(i,j,kstp)-            &
 
 3473     &                              cff3*tl_rvbar(i,j,ptsk)))*fac+      &
 
 3474     &                        (vbar(i,j,kstp)*                          &
 
 3475     &                         (dstp(i,j)+dstp(i,j-1))+                 &
 
 3476     &                         cff*(cff1*rhs_vbar(i,j)+                 &
 
 3477     &                              cff2*rvbar(i,j,kstp)-               &
 
 3478     &                              cff3*rvbar(i,j,ptsk)))*tl_fac
 
 3482            tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
 
 3484#ifdef WET_DRY_NOT_YET 
 3499            tl_rhs_vbar(i,j)=((tl_vbar(i,j,knew)*                       &
 
 3500     &                         (dnew(i,j)+dnew(i,j-1))+                 &
 
 3502     &                         (tl_dnew(i,j)+tl_dnew(i,j-1))-           &
 
 3503     &                         tl_vbar(i,j,kstp)*                       &
 
 3504     &                         (dstp(i,j)+dstp(i,j-1))-                 &
 
 3506     &                         (tl_dstp(i,j)+tl_dstp(i,j-1)))*fac1-     &
 
 3507     &                        cff2*tl_rvbar(i,j,kstp)+                  &
 
 3508     &                        cff3*tl_rvbar(i,j,ptsk))*cff4
 
 3513#ifdef DIAGNOSTICS_UV 
 3682            tl_rubar(i,j,krhs)=tl_rhs_ubar(i,j)
 
 3689            tl_rvbar(i,j,krhs)=tl_rhs_vbar(i,j)
 
 3692#ifdef DIAGNOSTICS_UV 
 3719     &                    lbi, ubi, lbj, ubj,                           &
 
 3720     &                    imins, imaxs, jmins, jmaxs,                   &
 
 3721     &                    krhs, kstp, knew,                             &
 
 3722     &                    ubar, vbar, zeta,                             &
 
 3723     &                    tl_ubar, tl_vbar, tl_zeta)
 
 3731     &                    lbi, ubi, lbj, ubj,                           &
 
 3732     &                    imins, imaxs, jmins, jmaxs,                   &
 
 3733     &                    krhs, kstp, knew,                             &
 
 3734     &                    ubar, vbar, zeta,                             &
 
 3735     &                    tl_ubar, tl_vbar, tl_zeta)
 
 3742     &                         lbi, ubi, lbj, ubj,                      &
 
 3743     &                         imins, imaxs, jmins, jmaxs,              &
 
 3748     &                         h, tl_h, om_v, on_u,                     &
 
 3749     &                         ubar, vbar, zeta,                        &
 
 3750     &                         tl_ubar, tl_vbar, tl_zeta)
 
 3764          IF (((istrr.le.i).and.(i.le.iendr)).and.                      &
 
 3765     &        ((jstrr.le.j).and.(j.le.jendr))) 
THEN 
 3766            IF (int(
sources(ng)%Dsrc(is)).eq.0) 
THEN 
 3767              cff=1.0_r8/(on_u(i,j)*                                    &
 
 3768     &                    0.5_r8*(zeta(i-1,j,knew)+h(i-1,j)+            &
 
 3769     &                            zeta(i  ,j,knew)+h(i  ,j)))
 
 3770              tl_cff=-cff*cff*on_u(i,j)*                                &
 
 3771     &               0.5_r8*(tl_zeta(i-1,j,knew)+tl_h(i-1,j)+           &
 
 3772     &                       tl_zeta(i  ,j,knew)+tl_h(i  ,j))
 
 3775              tl_ubar(i,j,knew)=
sources(ng)%tl_Qbar(is)*cff+            &
 
 3777            ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1) 
THEN 
 3778              cff=1.0_r8/(om_v(i,j)*                                    &
 
 3779     &                    0.5_r8*(zeta(i,j-1,knew)+h(i,j-1)+            &
 
 3780     &                            zeta(i,j  ,knew)+h(i,j  )))
 
 3781              tl_cff=-cff*cff*om_v(i,j)*                                &
 
 3782     &               0.5_r8*(tl_zeta(i,j-1,knew)+tl_h(i,j-1)+           &
 
 3783     &                       tl_zeta(i,j  ,knew)+tl_h(i,j  ))
 
 3786              tl_vbar(i,j,knew)=
sources(ng)%tl_Qbar(is)*cff+            &
 
 3803     &                          lbi, ubi, lbj, ubj,                     &
 
 3804     &                          tl_ubar(:,:,knew))
 
 3810     &                          lbi, ubi, lbj, ubj,                     &
 
 3811     &                          tl_vbar(:,:,knew))
 
 3823     &                    lbi, ubi, lbj, ubj,                           &
 
 3826     &                    tl_ubar(:,:,knew),                            &
 
 3827     &                    tl_vbar(:,:,knew))