C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_w_coriolis_nh.F,v 1.3 2010/03/16 00:20:14 jmc Exp $
C $Name: $
#include "MOM_COMMON_OPTIONS.h"
CBOP
C !ROUTINE: MOM_W_CORIOLIS_NH
C !INTERFACE: ==========================================================
SUBROUTINE MOM_W_CORIOLIS_NH(
I bi,bj,k,
I uFld, vFld,
U wCoriolisTerm,
I myThid )
C !DESCRIPTION:
C Calculates the Coriolis term in the vertical momentum equation:
C \begin{equation*}
C + f_prime \overline{u}^{ik}
C \end{equation*}
C !USES: ===============================================================
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
C !INPUT PARAMETERS: ===================================================
C bi,bj :: tile indices
C k :: vertical level
C uFld :: horizontal flow, u component
C vFld :: horizontal flow, v component
C myThid :: my Thread Id number
INTEGER bi,bj,k
_RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
INTEGER myThid
C !OUTPUT PARAMETERS: ==================================================
C uCoriolisTerm :: Coriolis term
_RL wCoriolisTerm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
#ifdef ALLOW_NONHYDROSTATIC
C !LOCAL VARIABLES: ====================================================
C i,j :: loop indices
INTEGER i,j
CEOP
C Energy conserving discretization of 2*Omega*cos(phi)*u_eastward
IF ( k.GT.1 .AND. k.LE.Nr ) THEN
DO j=1-Oly,sNy+Oly-1
DO i=1-Olx,sNx+Olx-1
wCoriolisTerm(i,j) =
& -gravitySign*fCoriCos(i,j,bi,bj)*
& ( angleCosC(i,j,bi,bj)*(
& (uFld(i,j,k-1,bi,bj)+uFld(i+1,j,k-1,bi,bj))
& + (uFld(i,j, k ,bi,bj)+uFld(i+1,j, k ,bi,bj))
& )*0.25 _d 0
& -angleSinC(i,j,bi,bj)*(
& (vFld(i,j,k-1,bi,bj)+vFld(i,j+1,k-1,bi,bj))
& + (vFld(i,j, k ,bi,bj)+vFld(i,j+1, k ,bi,bj))
& )*0.25 _d 0
& )*wUnit2rVel(k)
ENDDO
ENDDO
ELSE
DO j=1-Oly,sNy+Oly-1
DO i=1-Olx,sNx+Olx-1
wCoriolisTerm(i,j) = 0. _d 0
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_NONHYDROSTATIC */
RETURN
END