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