| 1 |
C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_uv_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_UV_SMAG_3D |
| 9 |
|
| 10 |
C !INTERFACE: |
| 11 |
SUBROUTINE MOM_UV_SMAG_3D( |
| 12 |
I str11, str22, str12, str13, str23, |
| 13 |
I viscAh3d_00, viscAh3d_12, |
| 14 |
I viscAh3d_13, viscAh3d_23, |
| 15 |
c I hFacZ, |
| 16 |
O uDissip, vDissip, |
| 17 |
I iMin,iMax,jMin,jMax, k, bi, bj, myThid ) |
| 18 |
|
| 19 |
C !DESCRIPTION: |
| 20 |
|
| 21 |
C !USES: |
| 22 |
IMPLICIT NONE |
| 23 |
|
| 24 |
C == Global variables == |
| 25 |
#include "SIZE.h" |
| 26 |
#include "EEPARAMS.h" |
| 27 |
#include "GRID.h" |
| 28 |
#include "PARAMS.h" |
| 29 |
|
| 30 |
C !INPUT PARAMETERS: |
| 31 |
C iMin,iMax :: 1rst index loop ranges |
| 32 |
C jMin,jMax :: 2nd index loop ranges |
| 33 |
_RL str11(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
| 34 |
_RL str22(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
| 35 |
_RL str12(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
| 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 |
c _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 39 |
_RL viscAh3d_00(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
| 40 |
_RL viscAh3d_12(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
| 41 |
_RL viscAh3d_13(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) |
| 42 |
_RL viscAh3d_23(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) |
| 43 |
INTEGER iMin,iMax, jMin,jMax |
| 44 |
INTEGER k, bi, bj |
| 45 |
INTEGER myThid |
| 46 |
|
| 47 |
C !OUTPUT PARAMETERS: |
| 48 |
_RL uDissip(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 49 |
_RL vDissip(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 50 |
CEOP |
| 51 |
|
| 52 |
#ifdef ALLOW_SMAG_3D |
| 53 |
C !LOCAL VARIABLES: |
| 54 |
INTEGER i,j |
| 55 |
INTEGER km1, kp1 |
| 56 |
_RL maskM1, maskP1 |
| 57 |
|
| 58 |
km1 = MAX( 1,k-1) |
| 59 |
kp1 = MIN(Nr,k+1) |
| 60 |
maskM1 = 1. |
| 61 |
maskP1 = 1. |
| 62 |
IF ( k.LE.1 ) maskM1 = 0. |
| 63 |
IF ( k.GE.Nr ) maskP1 = 0. |
| 64 |
|
| 65 |
C - Laplacian and bi-harmonic terms |
| 66 |
c IF (harmonic) THEN |
| 67 |
|
| 68 |
C- note: free-slip @ bottom is commented out |
| 69 |
|
| 70 |
C- use simple (momentum conserving) scaling |
| 71 |
C (but not conserving angular momentum) |
| 72 |
|
| 73 |
DO j= jMin,jMax |
| 74 |
DO i= iMin,iMax |
| 75 |
uDissip(i,j) = recip_rAw(i,j,bi,bj)*( |
| 76 |
& ( viscAh3d_00( i , j , k )*str11( i , j , k ) |
| 77 |
& *dyF( i , j ,bi,bj) |
| 78 |
& -viscAh3d_00(i-1, j , k )*str11(i-1, j , k ) |
| 79 |
& *dyF(i-1, j ,bi,bj) |
| 80 |
& ) |
| 81 |
& +( viscAh3d_12( i ,j+1, k )*str12( i ,j+1, k ) |
| 82 |
& *dxV( i ,j+1,bi,bj) |
| 83 |
& -viscAh3d_12( i , j , k )*str12( i , j , k ) |
| 84 |
& *dxV( i , j ,bi,bj) |
| 85 |
& ) ) |
| 86 |
& + recip_drF( k ) |
| 87 |
& *( viscAh3d_13( i , j ,k+1)*str13( i , j ,k+1) |
| 88 |
c & *maskW(i,j,kp1,bi,bj)*maskP1 |
| 89 |
& -viscAh3d_13( i , j , k )*str13( i , j , k ) |
| 90 |
c & *maskW(i,j,km1,bi,bj)*maskM1 |
| 91 |
& )*rkSign*recip_hFacW(i,j,k,bi,bj) |
| 92 |
ENDDO |
| 93 |
ENDDO |
| 94 |
|
| 95 |
DO j= jMin,jMax |
| 96 |
DO i= iMin,iMax |
| 97 |
vDissip(i,j) = recip_rAs(i,j,bi,bj)*( |
| 98 |
& ( viscAh3d_12(i+1, j , k )*str12(i+1, j ,k) |
| 99 |
& *dyU(i+1, j ,bi,bj) |
| 100 |
& -viscAh3d_12( i , j , k )*str12( i , j ,k) |
| 101 |
& *dyU( i , j ,bi,bj) |
| 102 |
& ) |
| 103 |
& +( viscAh3d_00( i , j , k )*str22( i , j ,k) |
| 104 |
& *dxF( i , j ,bi,bj) |
| 105 |
& -viscAh3d_00( i ,j-1, k )*str22( i ,j-1,k) |
| 106 |
& *dxF( i ,j-1,bi,bj) |
| 107 |
& ) ) |
| 108 |
& + recip_drF( k ) |
| 109 |
& *( viscAh3d_23( i , j ,k+1)*str23( i , j ,k+1) |
| 110 |
c & *maskS(i,j,kp1,bi,bj)*maskP1 |
| 111 |
& -viscAh3d_23( i , j , k )*str23( i , j , k ) |
| 112 |
c & *maskS(i,j,km1,bi,bj)*maskM1 |
| 113 |
& )*rkSign*recip_hFacS(i,j,k,bi,bj) |
| 114 |
|
| 115 |
ENDDO |
| 116 |
ENDDO |
| 117 |
|
| 118 |
c ENDIF |
| 119 |
|
| 120 |
c IF (biharmonic) THEN |
| 121 |
c STOP 'MOM_UV_SMAG_3D: BIHARMONIC NOT ALLOWED WITH SMAG_3D' |
| 122 |
c ENDIF |
| 123 |
|
| 124 |
#endif /* ALLOW_SMAG_3D */ |
| 125 |
RETURN |
| 126 |
END |