| 1 |
C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_w_smag_3d.F,v 1.1 2013/11/05 13:33:07 jmc Exp $ |
| 2 |
C $Name: $ |
| 3 |
|
| 4 |
#include "MOM_COMMON_OPTIONS.h" |
| 5 |
|
| 6 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
| 7 |
CBOP |
| 8 |
C !ROUTINE: MOM_W_SMAG_3D |
| 9 |
|
| 10 |
C !INTERFACE: |
| 11 |
SUBROUTINE MOM_W_SMAG_3D( |
| 12 |
I str13, str23, str33, |
| 13 |
I viscAh3d_00, viscAh3d_13, viscAh3d_23, |
| 14 |
I rThickC_W, rThickC_S, rThickC_C, recip_rThickC, |
| 15 |
O wDissip, |
| 16 |
I iMin,iMax,jMin,jMax, k, bi, bj, myThid ) |
| 17 |
|
| 18 |
C !DESCRIPTION: |
| 19 |
|
| 20 |
C !USES: |
| 21 |
IMPLICIT NONE |
| 22 |
|
| 23 |
C == Global variables == |
| 24 |
#include "SIZE.h" |
| 25 |
#include "EEPARAMS.h" |
| 26 |
#include "PARAMS.h" |
| 27 |
#include "GRID.h" |
| 28 |
|
| 29 |
C !INPUT PARAMETERS: |
| 30 |
C rThickC_W :: thickness (in r-units) of W-Cell at Western Edge |
| 31 |
C rThickC_S :: thickness (in r-units) of W-Cell at Southern Edge |
| 32 |
C rThickC_C :: thickness (in r-units) of W-Cell (centered on W pt) |
| 33 |
C recip_rThickC :: reciprol thickness of W-Cell (centered on W-point) |
| 34 |
C iMin,iMax :: 1rst index loop ranges |
| 35 |
C jMin,jMax :: 2nd index loop ranges |
| 36 |
_RL str13(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) |
| 37 |
_RL str23(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) |
| 38 |
_RL str33(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
| 39 |
_RL viscAh3d_00(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
| 40 |
_RL viscAh3d_13(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) |
| 41 |
_RL viscAh3d_23(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) |
| 42 |
_RL rThickC_W (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 43 |
_RL rThickC_S (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 44 |
_RL rThickC_C (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 45 |
_RL recip_rThickC(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 46 |
INTEGER iMin,iMax, jMin,jMax |
| 47 |
INTEGER k, bi, bj |
| 48 |
INTEGER myThid |
| 49 |
|
| 50 |
C !OUTPUT PARAMETERS: |
| 51 |
_RL wDissip(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 52 |
CEOP |
| 53 |
|
| 54 |
#ifdef ALLOW_SMAG_3D |
| 55 |
C !LOCAL VARIABLES: |
| 56 |
INTEGER i,j |
| 57 |
INTEGER km1 |
| 58 |
_RL maskM1 |
| 59 |
|
| 60 |
km1 = MAX(1,k-1) |
| 61 |
maskM1 = 1. |
| 62 |
IF ( k.LE.1 ) maskM1 = 0. |
| 63 |
|
| 64 |
C - Laplacian and bi-harmonic terms |
| 65 |
c IF (harmonic) THEN |
| 66 |
|
| 67 |
C- note: free-slip @ bottom is commented out |
| 68 |
|
| 69 |
C- use simple (momentum conserving) scaling |
| 70 |
C (but not conserving angular momentum) |
| 71 |
|
| 72 |
DO j= jMin,jMax |
| 73 |
DO i= iMin,iMax |
| 74 |
c wDissip(i,j) = recip_rThickC(i,j)* |
| 75 |
wDissip(i,j) = |
| 76 |
& recip_rA(i,j,bi,bj)*( |
| 77 |
& ( viscAh3d_13(i+1, j , k )*str13(i+1, j ,k) |
| 78 |
c & *dyG(i+1, j ,bi,bj)*rThickC_W(i+1, j ) |
| 79 |
& *dyG(i+1, j ,bi,bj) |
| 80 |
& -viscAh3d_13( i , j , k )*str13( i , j ,k) |
| 81 |
c & *dyG( i , j ,bi,bj)*rThickC_W( i , j ) |
| 82 |
& *dyG( i , j ,bi,bj) |
| 83 |
& ) |
| 84 |
& +( viscAh3d_23( i ,j+1, k )*str23( i ,j+1,k) |
| 85 |
c & *dxG( i ,j+1,bi,bj)*rThickC_S( i ,j+1) |
| 86 |
& *dxG( i ,j+1,bi,bj) |
| 87 |
& -viscAh3d_23( i , j , k )*str23( i , j ,k) |
| 88 |
c & *dxG( i , j ,bi,bj)*rThickC_S( i , j ) |
| 89 |
& *dxG( i , j ,bi,bj) |
| 90 |
& ) ) |
| 91 |
& + recip_rThickC(i,j) |
| 92 |
& *( viscAh3d_00( i , j , k )*str33( i , j , k ) |
| 93 |
& -viscAh3d_00( i , j ,km1)*str33( i , j ,km1)*maskM1 |
| 94 |
& )*rkSign |
| 95 |
ENDDO |
| 96 |
ENDDO |
| 97 |
|
| 98 |
c ENDIF |
| 99 |
|
| 100 |
c IF (biharmonic) THEN |
| 101 |
c STOP 'MOM_UV_SMAG_3D: BIHARMONIC NOT ALLOWED WITH SMAG_3D' |
| 102 |
c ENDIF |
| 103 |
|
| 104 |
#endif /* ALLOW_SMAG_3D */ |
| 105 |
RETURN |
| 106 |
END |