umomentum - 2D-momentum for all interior points.

INTERFACE:

    subroutine umomentum(tausx,airp)
DESCRIPTION:

Here, the vertically integrated $U$-momentum equation (61) given on page [*] including a number of slow terms is calculated. One slight modification is that for better stability of drying and flooding processes the slow friction term $S^x_F$ is now also multiplied with the parameter $\alpha$ defined in eq. (5).

Furthermore, the horizontal pressure gradient $\partial^*_x\zeta$ is modified in order to support drying and flooding, see figure 10 on page [*] and the explanations in section 5.5. $\partial^*_x\zeta$ is now also considering the atmospheric pressure gradient at sea surface height.

For numerical stability reasons, the $U$-momentum equation is here discretised in time such that the bed friction is treated explicitely:

$\displaystyle \displaystyle
U^{n+1}=\frac{U^n-\Delta t_m(gD\partial^*_x\zeta
+\...
...F^x))}
{1+\Delta t_m\frac{R}{D^2}\sqrt{\left(U^n\right)^2+\left(V^n\right)^2}},$ (92)

with $U_{Ex}$ combining advection and diffusion of $U$, see routines uv_advect (section 7.4.13 on page [*]) and uv_diffusion (section 7.4.14 on page [*]). The slow terms are calculated in the routine slow_terms documented in section 8.13.11 on page [*]. In (92), $U^{n+1}$ denotes the transport on the new and $U^n$ and $V^n$ the transports on the old time level.

The Coriolis term $fU$ for the subsequent $V$-momentum is also calculated here, by directly interpolating the $U$-transports to the V-points or by a method suggested by Espelid et al. (2000) which takes the varying water depths into account.

Some provisions for proper behaviour of the $U$-transports when GETM runs as slice model are made as well, see section 3.2 on page [*]. USES:

    use parameters, only: g,rho_0
    use domain, only: imin,imax,jmin,jmax
    use domain, only: H,au,av,min_depth,dry_u,Cori,corv
 #if defined(SPHERICAL) || defined(CURVILINEAR)
    use domain, only: dxu,arvd1,dxc,dyx
    use variables_2d, only: V
 #else
    use domain, only: dx
 #endif
    use m2d, only: dtm
    use variables_2d, only: D,z,UEx,U,DU,fV,SlUx,Slru,ru,fU,DV
    use getm_timers,  only: tic, toc, TIM_MOMENTUMH
    use halo_zones, only : update_2d_halo,wait_halo,U_TAG
  $ use omp_lib
    IMPLICIT NONE
INPUT PARAMETERS:
    REALTYPE, intent(in)                :: tausx(E2DFIELD),airp(E2DFIELD)
LOCAL VARIABLES:
    integer                   :: i,j
    REALTYPE                  :: zp,zm,zx,tausu,Slr,Uloc
    REALTYPE                  :: gamma=rho_0*g
    REALTYPE                  :: cord_curv=_ZERO_
    REALTYPE                  :: gammai