C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_add_tides.F,v 1.3 2017/06/11 01:36:56 dimitri Exp $
C $Name: $
#include "OBCS_OPTIONS.h"
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: OBCS_ADD_TIDES
C !INTERFACE:
SUBROUTINE OBCS_ADD_TIDES( myTime, myIter, myThid )
C !DESCRIPTION:
C *==========================================================*
C | SUBROUTINE OBCS_ADD_TIDES
C | o Modify OB normal flow to add tidal forcing
C | NOTE that at the moment tidal forcing is applied
C | only to "normal" flow. Code below should eventually
C | be augmented to also specify flow parallel to boundary.
C *==========================================================*
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "OBCS_PARAMS.h"
#include "OBCS_GRID.h"
#include "OBCS_FIELDS.h"
C !INPUT/OUTPUT PARAMETERS:
_RL myTime
INTEGER myIter
INTEGER myThid
CEOP
#ifdef ALLOW_OBCS
#ifdef ALLOW_OBCS_TIDES
C !FUNCTIONS:
C !LOCAL VARIABLES:
C bi, bj :: tile indices
C i,j,k :: loop indices
C iB, jB :: local index of open boundary
C msgBuf :: Informational/error message buffer
INTEGER bi, bj
INTEGER i, j, k, iB, jB
INTEGER td
#ifdef ALLOW_DEBUG
IF (debugMode) CALL DEBUG_ENTER('OBCS_ADD_TIDES',myThid)
#endif
C-- Add tidal currents:
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
#ifdef ALLOW_OBCS_EAST
IF ( tileHasOBE(bi,bj) ) THEN
DO k=1,Nr
DO j=1-OLy,sNy+OLy
iB = OB_Ie(j,bi,bj)
IF ( iB.NE.OB_indexNone ) THEN
DO td=1,tidalComponents
OBEu(j,k,bi,bj) = OBEu(j,k,bi,bj) +
& maskW(iB,j,k,bi,bj) * OBEam(j,td,bi,bj) *
& COS( 2.D0 * PI * (myTime-OBEph(j,td,bi,bj)) /
& tidalPeriod(td) )
ENDDO
ENDIF
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_OBCS_EAST */
#ifdef ALLOW_OBCS_WEST
IF ( tileHasOBW(bi,bj) ) THEN
DO k=1,Nr
DO j=1-OLy,sNy+OLy
iB = OB_Iw(j,bi,bj)
IF ( iB.NE.OB_indexNone ) THEN
DO td=1,tidalComponents
OBWu(j,k,bi,bj) = OBWu(j,k,bi,bj) +
& maskW(1+iB,j,k,bi,bj) * OBWam(j,td,bi,bj) *
& COS( 2.D0 * PI * (myTime-OBWph(j,td,bi,bj)) /
& tidalPeriod(td) )
ENDDO
ENDIF
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_OBCS_WEST */
#ifdef ALLOW_OBCS_NORTH
IF ( tileHasOBN(bi,bj) ) THEN
DO k=1,Nr
DO i=1-OLx,sNx+OLx
jB = OB_Jn(i,bi,bj)
IF ( jB.NE.OB_indexNone ) THEN
DO td=1,tidalComponents
OBNv(i,k,bi,bj) = OBNv(i,k,bi,bj) +
& maskS(i,jB,k,bi,bj) * OBNam(i,td,bi,bj) *
& COS( 2.D0 * PI * (myTime-OBNph(i,td,bi,bj)) /
& tidalPeriod(td) )
ENDDO
ENDIF
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_OBCS_NORTH */
#ifdef ALLOW_OBCS_SOUTH
IF ( tileHasOBS(bi,bj) ) THEN
DO k=1,Nr
DO i=1-OLx,sNx+OLx
jB = OB_Js(i,bi,bj)
IF ( jB.NE.OB_indexNone ) THEN
DO td=1,tidalComponents
OBSv(i,k,bi,bj) = OBSv(i,k,bi,bj) +
& maskS(i,1+jB,k,bi,bj)* OBSam(i,td,bi,bj) *
& COS( 2.D0 * PI * (myTime-OBSph(i,td,bi,bj)) /
& tidalPeriod(td) )
ENDDO
ENDIF
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_OBCS_SOUTH */
ENDDO
ENDDO
#ifdef ALLOW_DEBUG
IF (debugMode) CALL DEBUG_LEAVE('OBCS_ADD_TIDES',myThid)
#endif
#endif /* ALLOW_OBCS_TIDES */
#endif /* ALLOW_OBCS */
RETURN
END