C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_w_sidedrag.F,v 1.1 2006/07/13 21:30:12 jmc Exp $ C $Name: $ #include "MOM_COMMON_OPTIONS.h" CBOP C !ROUTINE: MOM_W_SIDEDRAG C !INTERFACE: ========================================================== SUBROUTINE MOM_W_SIDEDRAG( I bi,bj,k, I wFld, del2w, I rThickC, recip_rThickC, I viscAh_W, viscA4_W, O gwSideDrag, I myThid) C !DESCRIPTION: C Calculates the drag terms due to the no-slip condition on viscous stresses: C \begin{equation*} C G^w_{drag} = - \frac{2}{\Delta x_w} (A_h w - A_4 \nabla^2 w) C \end{equation*} C !USES: =============================================================== IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "SURFACE.h" C !INPUT PARAMETERS: =================================================== C bi,bj :: tile indices C k :: vertical level C wFld :: vertical velocity C del2w :: Laplacian of vertical velocity C rThickC :: thickness of W-cell C recip_rThickC :: reciprol of W-cell thickness C viscAh_W :: harmonic horizontal viscosity (at W-Cell center) C viscA4_W :: biharmonic horizontal viscosity (at W-Cell center) C myThid :: my Thread Id number INTEGER bi,bj,k _RL wFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) _RL del2w (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL rThickC (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL recip_rThickC(1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL viscAh_W(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) _RL viscA4_W(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) INTEGER myThid C !OUTPUT PARAMETERS: ================================================== C gwSideDrag :: side drag tendency _RL gwSideDrag(1-OLx:sNx+OLx,1-OLy:sNy+OLy) #ifdef ALLOW_NONHYDROSTATIC C !LOCAL VARIABLES: ==================================================== C i,j :: loop indices C heightStepW :: height of topographic step to West C heightStepE :: height of topographic step to East C heightStepS :: height of topographic step to South C heightStepN :: height of topographic step to North INTEGER i,j _RL heightStepW, heightStepE _RL heightStepS, heightStepN CEOP C-- Laplacian and bi-harmonic terms: using variable-Viscosity coeff. C from MOM_CALC_VISC, consistent with dissipation in the interior DO j=2-Oly,sNy+Oly-1 DO i=2-Olx,sNx+Olx-1 C- this will not give any side-drag along thin wall. C (but this might just be what we want ...) heightStepW = MAX( 0. _d 0, rThickC(i,j) - rThickC(i-1,j) ) heightStepE = MAX( 0. _d 0, rThickC(i,j) - rThickC(i+1,j) ) heightStepS = MAX( 0. _d 0, rThickC(i,j) - rThickC(i,j-1) ) heightStepN = MAX( 0. _d 0, rThickC(i,j) - rThickC(i,j+1) ) C- jmc: take directly viscAh_W & viscA4_W (no bar_i, bar_j) since C they are already at the center (and not above u,v point). gwSideDrag(i,j) = & -sideDragFactor & *( heightStepW*_dyG( i ,j,bi,bj)*_recip_dxC( i ,j,bi,bj) & *( viscAh_W(i,j,k,bi,bj)*wFld(i,j,k,bi,bj) & *cosFacV(j,bi,bj) & -viscA4_W(i,j,k,bi,bj)*del2w(i,j) #ifdef COSINEMETH_III & *sqCosFacU(j,bi,bj) #else & *cosFacU(j,bi,bj) #endif & ) & +heightStepE*_dyG(i+1,j,bi,bj)*_recip_dxC(i+1,j,bi,bj) & *( viscAh_W(i,j,k,bi,bj)*wFld(i,j,k,bi,bj) & *cosFacV(j,bi,bj) & -viscA4_W(i,j,k,bi,bj)*del2w(i,j) #ifdef COSINEMETH_III & *sqCosFacU(j,bi,bj) #else & *cosFacU(j,bi,bj) #endif & ) & +heightStepS*_dxG(i,j,bi,bj)*_recip_dyC(i,j,bi,bj) & *( viscAh_W(i,j,k,bi,bj)*wFld(i,j,k,bi,bj) #ifdef ISOTROPIC_COS_SCALING & *cosFacV(j,bi,bj) #endif & -viscA4_W(i,j,k,bi,bj)*del2w(i,j) #ifdef ISOTROPIC_COS_SCALING # ifdef COSINEMETH_III & *sqCosFacV(j,bi,bj) else & *cosFacV(j,bi,bj) # endif #endif & ) & +heightStepN*_dxG(i,j+1,bi,bj)*_recip_dyC(i,j+1,bi,bj) & *( viscAh_W(i,j,k,bi,bj)*wFld(i,j,k,bi,bj) #ifdef ISOTROPIC_COS_SCALING & *cosFacV(j+1,bi,bj) #endif & -viscA4_W(i,j,k,bi,bj)*del2w(i,j) #ifdef ISOTROPIC_COS_SCALING # ifdef COSINEMETH_III & *sqCosFacV(j+1,bi,bj) else & *cosFacV(j+1,bi,bj) # endif #endif & ) & )*recip_rThickC(i,j)*recip_rA(i,j,bi,bj) ENDDO ENDDO #ifdef ALLOW_DIAGNOSTICS IF (useDiagnostics) THEN CALL DIAGNOSTICS_FILL(gwSideDrag,'WSidDrag',k,1,2,bi,bj,myThid) ENDIF #endif /* ALLOW_DIAGNOSTICS */ #endif /* ALLOW_NONHYDROSTATIC */ RETURN END