Back to home page

MITgcm

 
 

    


File indexing completed on 2022-02-16 06:09:20 UTC

view on githubraw file Latest commit 4676ff26 on 2022-02-11 10:50:43 UTC
6f4cf52d27 Dimi*0001 #include "OBCS_OPTIONS.h"
                0002 
                0003 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 CBOP
                0005 C     !ROUTINE: OBCS_ADD_TIDES
                0006 
                0007 C     !INTERFACE:
                0008       SUBROUTINE OBCS_ADD_TIDES( myTime, myIter, myThid )
                0009 
                0010 C     !DESCRIPTION:
                0011 C     *==========================================================*
                0012 C     | SUBROUTINE OBCS_ADD_TIDES
                0013 C     | o Modify OB normal flow to add tidal forcing
b13b04666e Dimi*0014 C     |   NOTE that at the moment tidal forcing is applied
                0015 C     |   only to "normal" flow.  Code below should eventually
4676ff26c7 ndet*0016 C     |   be augmented to also specify flow parallel to boundary.
6f4cf52d27 Dimi*0017 C     *==========================================================*
                0018 
                0019 C     !USES:
                0020       IMPLICIT NONE
                0021 
                0022 C     === Global variables ===
                0023 #include "SIZE.h"
                0024 #include "EEPARAMS.h"
                0025 #include "PARAMS.h"
                0026 #include "GRID.h"
                0027 #include "OBCS_PARAMS.h"
                0028 #include "OBCS_GRID.h"
                0029 #include "OBCS_FIELDS.h"
                0030 
                0031 C     !INPUT/OUTPUT PARAMETERS:
                0032       _RL myTime
                0033       INTEGER myIter
                0034       INTEGER myThid
                0035 CEOP
                0036 
                0037 #ifdef ALLOW_OBCS
beb3b14177 Dimi*0038 #ifdef ALLOW_OBCS_TIDES
6f4cf52d27 Dimi*0039 
                0040 C     !FUNCTIONS:
                0041 
                0042 C     !LOCAL VARIABLES:
                0043 C     bi, bj       :: tile indices
                0044 C     i,j,k        :: loop indices
                0045 C     iB, jB       :: local index of open boundary
                0046 C     msgBuf       :: Informational/error message buffer
                0047       INTEGER bi, bj
                0048       INTEGER i, j, k, iB, jB
                0049       INTEGER td
                0050 
                0051 #ifdef ALLOW_DEBUG
                0052       IF (debugMode) CALL DEBUG_ENTER('OBCS_ADD_TIDES',myThid)
                0053 #endif
                0054 
                0055 C--   Add tidal currents:
4676ff26c7 ndet*0056       DO td=1,tidalComponents
                0057        IF ( tidalPeriod(td) .GT. 0.D0 ) THEN
                0058         DO bj=myByLo(myThid),myByHi(myThid)
                0059          DO bi=myBxLo(myThid),myBxHi(myThid)
6f4cf52d27 Dimi*0060 
                0061 #ifdef ALLOW_OBCS_EAST
4676ff26c7 ndet*0062           IF ( tileHasOBE(bi,bj) ) THEN
                0063            DO k=1,Nr
                0064             DO j=1-OLy,sNy+OLy
                0065              iB = OB_Ie(j,bi,bj)
                0066              IF ( iB.NE.OB_indexNone ) THEN
                0067               OBEu(j,k,bi,bj) = OBEu(j,k,bi,bj) +
6f4cf52d27 Dimi*0068      &              maskW(iB,j,k,bi,bj) * OBEam(j,td,bi,bj) *
                0069      &              COS( 2.D0 * PI * (myTime-OBEph(j,td,bi,bj)) /
                0070      &                   tidalPeriod(td) )
4676ff26c7 ndet*0071              ENDIF
6f4cf52d27 Dimi*0072             ENDDO
4676ff26c7 ndet*0073            ENDDO
                0074           ENDIF
6f4cf52d27 Dimi*0075 #endif /* ALLOW_OBCS_EAST */
                0076 
                0077 #ifdef ALLOW_OBCS_WEST
4676ff26c7 ndet*0078           IF ( tileHasOBW(bi,bj) ) THEN
                0079            DO k=1,Nr
                0080             DO j=1-OLy,sNy+OLy
                0081              iB = OB_Iw(j,bi,bj)
                0082              IF ( iB.NE.OB_indexNone ) THEN
                0083               OBWu(j,k,bi,bj) = OBWu(j,k,bi,bj) +
6f4cf52d27 Dimi*0084      &              maskW(1+iB,j,k,bi,bj) * OBWam(j,td,bi,bj) *
                0085      &              COS( 2.D0 * PI * (myTime-OBWph(j,td,bi,bj)) /
                0086      &                   tidalPeriod(td) )
4676ff26c7 ndet*0087              ENDIF
6f4cf52d27 Dimi*0088             ENDDO
4676ff26c7 ndet*0089            ENDDO
                0090           ENDIF
6f4cf52d27 Dimi*0091 #endif /* ALLOW_OBCS_WEST */
                0092 
                0093 #ifdef ALLOW_OBCS_NORTH
4676ff26c7 ndet*0094           IF ( tileHasOBN(bi,bj) ) THEN
                0095            DO k=1,Nr
                0096             DO i=1-OLx,sNx+OLx
                0097              jB = OB_Jn(i,bi,bj)
                0098              IF ( jB.NE.OB_indexNone ) THEN
                0099               OBNv(i,k,bi,bj) = OBNv(i,k,bi,bj) +
6f4cf52d27 Dimi*0100      &              maskS(i,jB,k,bi,bj) * OBNam(i,td,bi,bj) *
                0101      &              COS( 2.D0 * PI * (myTime-OBNph(i,td,bi,bj)) /
                0102      &                   tidalPeriod(td) )
4676ff26c7 ndet*0103              ENDIF
6f4cf52d27 Dimi*0104             ENDDO
4676ff26c7 ndet*0105            ENDDO
                0106           ENDIF
6f4cf52d27 Dimi*0107 #endif /* ALLOW_OBCS_NORTH */
                0108 
                0109 #ifdef ALLOW_OBCS_SOUTH
4676ff26c7 ndet*0110           IF ( tileHasOBS(bi,bj) ) THEN
                0111            DO k=1,Nr
                0112             DO i=1-OLx,sNx+OLx
                0113              jB = OB_Js(i,bi,bj)
                0114              IF ( jB.NE.OB_indexNone ) THEN
                0115               OBSv(i,k,bi,bj) = OBSv(i,k,bi,bj) +
beb3b14177 Dimi*0116      &              maskS(i,1+jB,k,bi,bj)* OBSam(i,td,bi,bj) *
6f4cf52d27 Dimi*0117      &              COS( 2.D0 * PI * (myTime-OBSph(i,td,bi,bj)) /
                0118      &                   tidalPeriod(td) )
4676ff26c7 ndet*0119              ENDIF
6f4cf52d27 Dimi*0120             ENDDO
4676ff26c7 ndet*0121            ENDDO
                0122           ENDIF
6f4cf52d27 Dimi*0123 #endif /* ALLOW_OBCS_SOUTH */
                0124 
4676ff26c7 ndet*0125          ENDDO
                0126         ENDDO
                0127        ENDIF
6f4cf52d27 Dimi*0128       ENDDO
                0129 
                0130 #ifdef ALLOW_DEBUG
                0131       IF (debugMode) CALL DEBUG_LEAVE('OBCS_ADD_TIDES',myThid)
                0132 #endif
                0133 
                0134 #endif /* ALLOW_OBCS_TIDES */
                0135 #endif /* ALLOW_OBCS */
                0136 
                0137       RETURN
                0138       END