Back to home page

MITgcm

 
 

    


File indexing completed on 2025-06-05 05:08:28 UTC

view on githubraw file Latest commit 6a6c83f9 on 2025-06-04 22:00:11 UTC
6a6c83f9ac Hajo*0001 #include "LONGSTEP_OPTIONS.h"
                0002 #ifdef ALLOW_GMREDI
                0003 # include "GMREDI_OPTIONS.h"
                0004 #endif
                0005 
                0006 CBOP
                0007 C     !ROUTINE:
                0008 C     !INTERFACE: LONGSTEP_RESIDUAL_FLOW
                0009       SUBROUTINE LONGSTEP_RESIDUAL_FLOW(
                0010      U                  uFld, vFld, wFld,
                0011      I                  bi, bj, myIter, myThid )
                0012 C     !DESCRIPTION:
                0013 C     Add GM-bolus velocity to Eulerian velocity to get Residual Mean velocity.
                0014 
                0015 C     !USES:
                0016       IMPLICIT NONE
                0017 
                0018 C     == GLobal variables ==
                0019 #include "SIZE.h"
                0020 #include "EEPARAMS.h"
                0021 #include "PARAMS.h"
                0022 #include "GRID.h"
                0023 #include "LONGSTEP.h"
                0024 #ifdef ALLOW_GMREDI
                0025 # include "GMREDI.h"
                0026 #endif
                0027 
                0028 C     !INPUT/OUTPUT PARAMETERS:
                0029 C     == Routine arguments ==
                0030 C     uFld   :: zonal      velocity (updated)
                0031 C     vFld   :: meridional velocity (updated)
                0032 C     wFld   :: vertical volume transport (updated)
                0033 C     bi,bj  :: tile indices
                0034 C     myIter :: my Iteration number
                0035 C     myThid :: my Thread Id number
                0036       INTEGER bi, bj, myIter, myThid
                0037       _RL uFld  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
                0038       _RL vFld  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
                0039       _RL wFld  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
                0040 
                0041 #ifdef ALLOW_GMREDI
                0042 C     !LOCAL VARIABLES:
                0043 C     == Local variables ==
                0044 C     i, j, k :: loop indices
                0045       INTEGER i, j, k
                0046       INTEGER kp1
                0047       _RL maskp1, flipSign4LHCoord
                0048       _RL delPsi
                0049 CEOP
                0050 
                0051 C     Since bolus transport is computed as curl of stream-function, needs to
                0052 C     flip sign when using Left-Handed Coordinate system such as P-coordinate
                0053       flipSign4LHCoord = -gravitySign
                0054 
                0055       IF ( GM_AdvForm .AND. .NOT.GM_AdvSeparate
                0056      &     .AND. .NOT.GM_InMomAsStress ) THEN
                0057 
                0058        DO k=1,Nr
                0059         kp1 = MIN(k+1,Nr)
                0060         maskp1 = 1.
                0061         IF (k.GE.Nr) maskp1 = 0.
                0062 
                0063         DO j=1-OLy,sNy+OLy
                0064          DO i=1-OLx,sNx+OLx
                0065            delPsi = LS_PsiX(i,j,kp1,bi,bj)*deepFacF(kp1)*maskp1
                0066      &            - LS_PsiX(i,j, k, bi,bj)*deepFacF(k)
                0067            uFld(i,j,k) = uFld(i,j,k)
                0068      &                 + delPsi*recip_drF(k)*_recip_hFacW(i,j,k,bi,bj)
                0069      &                         *recip_deepFacC(k)*flipSign4LHCoord
                0070          ENDDO
                0071         ENDDO
                0072         DO j=1-OLy,sNy+OLy
                0073          DO i=1-OLx,sNx+OLx
                0074            delPsi = LS_PsiY(i,j,kp1,bi,bj)*deepFacF(kp1)*maskp1
                0075      &            - LS_PsiY(i,j, k, bi,bj)*deepFacF(k)
                0076            vFld(i,j,k) = vFld(i,j,k)
                0077      &                 + delPsi*recip_drF(k)*_recip_hFacS(i,j,k,bi,bj)
                0078      &                         *recip_deepFacC(k)*flipSign4LHCoord
                0079          ENDDO
                0080         ENDDO
                0081 C       deep-model: simplify FacF / Fac2F (from dx,y / rA) to: 1/FacF
                0082         DO j=1-OLy,sNy+OLy-1
                0083          DO i=1-OLx,sNx+OLx-1
                0084            delPsi = ( dyG(i+1,j,bi,bj)*LS_PsiX(i+1,j,k,bi,bj)
                0085      &               -dyG( i ,j,bi,bj)*LS_PsiX( i ,j,k,bi,bj)
                0086      &               +dxG(i,j+1,bi,bj)*LS_PsiY(i,j+1,k,bi,bj)
                0087      &               -dxG(i, j ,bi,bj)*LS_PsiY(i, j ,k,bi,bj)
                0088      &              )
                0089            wFld(i,j,k) = wFld(i,j,k)
                0090      &                 + delPsi*recip_rA(i,j,bi,bj)
                0091      &                         *recip_deepFacF(k)*flipSign4LHCoord
                0092          ENDDO
                0093         ENDDO
                0094        ENDDO
                0095 
                0096       ENDIF
                0097 #endif /* ALLOW_GMREDI */
                0098 
                0099       RETURN
                0100       END