C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_calc_ke.F,v 1.1 2004/05/24 15:15:12 adcroft Exp $
C $Name:  $

#include "MOM_COMMON_OPTIONS.h"

CBOP
C !ROUTINE: MOM_CALC_KE

C !INTERFACE: ==========================================================
      SUBROUTINE MOM_CALC_KE(
     I        bi,bj,k,KEscheme,
     I        uFld, vFld,
     O        KE,
     I        myThid)

C !DESCRIPTION:
C Calculates the Kinetic energy of horizontal flow
C \begin{equation*}
C KE = \frac{1}{2} \left( h_w \overline{u^2}^i + h_s \overline{v^2}^j \right)
C \end{equation*}

C !USES: ===============================================================
      IMPLICIT NONE
#include "SIZE.h"
#include "GRID.h"

C !INPUT PARAMETERS: ===================================================
C  bi,bj                :: tile indices
C  k                    :: vertical level
C  uFld                 :: zonal flow
C  vFld                 :: meridional flow
C  myThid               :: thread number
      INTEGER bi,bj,k
      _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
      _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
      INTEGER KEscheme
      INTEGER myThid

C !OUTPUT PARAMETERS: ==================================================
C  KE                   :: Kinetic energy
      _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)

C !LOCAL VARIABLES: ====================================================
C  i,j                  :: loop indices
      INTEGER I,J
CEOP

C       This defn of KE should not ever be used. Just to let you know.
C                            2       2
C                 1  /  ___I    ___J   \
C           KE = --- |   U    +  V     |
C                 2  \                 /
C
      IF (KEscheme.EQ.1) THEN
       DO J=1-OLy,sNy+OLy-1
        DO I=1-OLx,sNx+OLx-1
         KE(i,j) = 0.125*(
     &             ( uFld(i,j)+uFld(i+1, j ) )**2
     &            +( vFld(i,j)+vFld( i ,j+1) )**2 )
       ENDDO
      ENDDO

      ELSEIF (KEscheme.EQ.2) THEN
C       This defn of KE should be used for the vector invariant equations.
C                       _____I  _____J
C                 1  /     2       2   \
C           KE = --- |   U    +  V     |
C                 2  \                 /
C
       DO J=1-OLy,sNy+OLy-1
        DO I=1-OLx,sNx+OLx-1
         KE(i,j) = 0.25*(
     &             uFld( i , j )*uFld( i , j )
     &            +uFld(i+1, j )*uFld(i+1, j )
     &            +vFld( i , j )*vFld( i , j )
     &            +vFld( i ,j+1)*vFld( i ,j+1) )
        ENDDO
       ENDDO

      ELSEIF (KEscheme.EQ.3) THEN
C       As above but including the lopping factors and should be used
C       for the conservative form of the momentum equations.
       DO J=1-OLy,sNy+OLy-1
        DO I=1-OLx,sNx+OLx-1
         KE(i,j) = 0.25*(
     &             uFld( i , j )*uFld( i , j )*hFacW(i,j,k,bi,bj)
     &            +uFld(i+1, j )*uFld(i+1, j )*hFacW(i+1,j,k,bi,bj)
     &            +vFld( i , j )*vFld( i , j )*hFacS(i,j,k,bi,bj)
     &            +vFld( i ,j+1)*vFld( i ,j+1)*hFacS(i,j+1,k,bi,bj)
     &            )*recip_hFacC(i,j,k,bi,bj)
        ENDDO
       ENDDO

      ELSE
       STOP 'S/R MOM_CALC_KE: We should never reach this point!'
      ENDIF

      RETURN
      END