C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_w_smag_3d.F,v 1.2 2013/11/06 00:37:11 jmc Exp $ C $Name: $ #include "MOM_COMMON_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP C !ROUTINE: MOM_W_SMAG_3D C !INTERFACE: SUBROUTINE MOM_W_SMAG_3D( I str13, str23, str33, I viscAh3d_00, viscAh3d_13, viscAh3d_23, I rThickC_W, rThickC_S, rThickC_C, recip_rThickC, O wDissip, I iMin,iMax,jMin,jMax, k, bi, bj, myThid ) C !DESCRIPTION: C !USES: IMPLICIT NONE C == Global variables == #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" C !INPUT PARAMETERS: C rThickC_W :: thickness (in r-units) of W-Cell at Western Edge C rThickC_S :: thickness (in r-units) of W-Cell at Southern Edge C rThickC_C :: thickness (in r-units) of W-Cell (centered on W pt) C recip_rThickC :: reciprol thickness of W-Cell (centered on W-point) C iMin,iMax :: 1rst index loop ranges C jMin,jMax :: 2nd index loop ranges _RL str13(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) _RL str23(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) _RL str33(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL viscAh3d_00(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL viscAh3d_13(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) _RL viscAh3d_23(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) _RL rThickC_W (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL rThickC_S (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL rThickC_C (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL recip_rThickC(1-OLx:sNx+OLx,1-OLy:sNy+OLy) INTEGER iMin,iMax, jMin,jMax INTEGER k, bi, bj INTEGER myThid C !OUTPUT PARAMETERS: _RL wDissip(1-OLx:sNx+OLx,1-OLy:sNy+OLy) CEOP #ifdef ALLOW_SMAG_3D C !LOCAL VARIABLES: INTEGER i,j INTEGER km1 _RL maskM1 km1 = MAX(1,k-1) maskM1 = 1. IF ( k.LE.1 ) maskM1 = 0. C - Laplacian and bi-harmonic terms c IF (harmonic) THEN C- note: free-slip @ bottom is commented out C- use simple (momentum conserving) scaling C (but not conserving angular momentum) DO j= jMin,jMax DO i= iMin,iMax c wDissip(i,j) = recip_rThickC(i,j)* wDissip(i,j) = & recip_rA(i,j,bi,bj)*( & ( viscAh3d_13(i+1, j , k )*str13(i+1, j ,k) c & *dyG(i+1, j ,bi,bj)*rThickC_W(i+1, j ) & *dyG(i+1, j ,bi,bj) & -viscAh3d_13( i , j , k )*str13( i , j ,k) c & *dyG( i , j ,bi,bj)*rThickC_W( i , j ) & *dyG( i , j ,bi,bj) & ) & +( viscAh3d_23( i ,j+1, k )*str23( i ,j+1,k) c & *dxG( i ,j+1,bi,bj)*rThickC_S( i ,j+1) & *dxG( i ,j+1,bi,bj) & -viscAh3d_23( i , j , k )*str23( i , j ,k) c & *dxG( i , j ,bi,bj)*rThickC_S( i , j ) & *dxG( i , j ,bi,bj) & ) ) & + recip_rThickC(i,j) & *( viscAh3d_00( i , j , k )*str33( i , j , k ) & -viscAh3d_00( i , j ,km1)*str33( i , j ,km1)*maskM1 & )*rkSign ENDDO ENDDO c ENDIF c IF (biharmonic) THEN c STOP 'MOM_UV_SMAG_3D: BIHARMONIC NOT ALLOWED WITH SMAG_3D' c ENDIF #endif /* ALLOW_SMAG_3D */ RETURN END