C $Header: /u/gcmpack/MITgcm/model/src/taueddy_tendency_apply.F,v 1.2 2015/01/20 20:47:42 jmc Exp $ C $Name: $ #include "PACKAGES_CONFIG.h" #include "CPP_OPTIONS.h" #ifdef ALLOW_GMREDI # include "GMREDI_OPTIONS.h" #endif C-- File taueddy_tendency_apply.F: Routines to apply TAUEDDY tendencies C-- Contents C-- o TAUEDDY_TENDENCY_APPLY_U C-- o TAUEDDY_TENDENCY_APPLY_V C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP C !ROUTINE: TAUEDDY_TENDENCY_APPLY_U C !INTERFACE: SUBROUTINE TAUEDDY_TENDENCY_APPLY_U( U gU_arr, I iMin,iMax,jMin,jMax, k, bi, bj, I myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | S/R TAUEDDY_TENDENCY_APPLY_U C | o Contains problem specific forcing for zonal velocity. C *==========================================================* C | Adds terms to gU for forcing by external sources C | e.g. wind stress, bottom friction etc.................. C *==========================================================* C \ev C !USES: IMPLICIT NONE C == Global data == #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "FFIELDS.h" #ifdef ALLOW_GMREDI # include "GMREDI.h" #endif C !INPUT/OUTPUT PARAMETERS: C gU_arr :: the tendency array C iMin,iMax :: Working range of x-index for applying forcing. C jMin,jMax :: Working range of y-index for applying forcing. C k :: Current vertical level index C bi,bj :: Current tile indices C myTime :: Current time in simulation C myIter :: Current iteration number C myThid :: my Thread Id number _RL gU_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy) INTEGER iMin, iMax, jMin, jMax INTEGER k, bi, bj _RL myTime INTEGER myIter INTEGER myThid CEOP #ifdef ALLOW_EDDYPSI C !LOCAL VARIABLES: C i, j :: Loop counters INTEGER i, j INTEGER kp1 _RL maskm1, maskp1 C Add zonal eddy momentum impulse into the layer #ifdef ALLOW_GMREDI IF ( GM_InMomAsStress ) THEN #endif kp1 = MIN(k+1,Nr) maskp1 = 1. maskm1 = 1. IF (k.EQ.Nr) maskp1 = 0. IF (k.EQ.1) maskm1 = 0. DO j=jMin,jMax DO i=iMin,iMax gU_arr(i,j) = gU_arr(i,j) & +foFacMom*recip_rhoConst* & ( maskm1*_maskW(i,j, k ,bi,bj)*tauxEddy(i,j, k ,bi,bj) & - maskp1*_maskW(i,j,kp1,bi,bj)*tauxEddy(i,j,kp1,bi,bj) ) & *recip_drF(k)*_recip_hFacW(i,j,k,bi,bj) ENDDO ENDDO #ifdef ALLOW_GMREDI ENDIF #endif #endif /* ALLOW_EDDYPSI */ RETURN END C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP C !ROUTINE: TAUEDDY_TENDENCY_APPLY_V C !INTERFACE: SUBROUTINE TAUEDDY_TENDENCY_APPLY_V( U gV_arr, I iMin,iMax,jMin,jMax, k, bi, bj, I myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | S/R TAUEDDY_TENDENCY_APPLY_V C | o Contains problem specific forcing for merid velocity. C *==========================================================* C | Adds terms to gV for forcing by external sources C | e.g. wind stress, bottom friction etc.................. C *==========================================================* C \ev C !USES: IMPLICIT NONE C == Global data == #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "FFIELDS.h" #ifdef ALLOW_GMREDI #include "GMREDI.h" #endif C !INPUT/OUTPUT PARAMETERS: C gV_arr :: the tendency array C iMin,iMax :: Working range of x-index for applying forcing. C jMin,jMax :: Working range of y-index for applying forcing. C k :: Current vertical level index C bi,bj :: Current tile indices C myTime :: Current time in simulation C myIter :: Current iteration number C myThid :: my Thread Id number _RL gV_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy) INTEGER iMin, iMax, jMin, jMax INTEGER k, bi, bj _RL myTime INTEGER myIter INTEGER myThid CEOP #ifdef ALLOW_EDDYPSI C !LOCAL VARIABLES: C i, j :: Loop counters INTEGER i, j INTEGER kp1 _RL maskm1, maskp1 C Add meridional eddy momentum impulse into the layer #ifdef ALLOW_GMREDI IF ( GM_InMomAsStress ) THEN #endif kp1 = MIN(k+1,Nr) maskp1 = 1. maskm1 = 1. IF (k.EQ.Nr) maskp1 = 0. IF (k.EQ.1) maskm1 = 0. DO j=jMin,jMax DO i=iMin,iMax gV_arr(i,j) = gV_arr(i,j) & +foFacMom*recip_rhoConst* & ( maskm1*_maskS(i,j, k ,bi,bj)*tauyEddy(i,j, k ,bi,bj) & - maskp1*_maskS(i,j,kp1,bi,bj)*tauyEddy(i,j,kp1,bi,bj) ) & *recip_drF(k)*_recip_hFacS(i,j,k,bi,bj) ENDDO ENDDO #ifdef ALLOW_GMREDI ENDIF #endif #endif /* ALLOW_EDDYPSI */ RETURN END