/[MITgcm]/MITgcm/pkg/mom_common/mom_hdissip.F
ViewVC logotype

Contents of /MITgcm/pkg/mom_common/mom_hdissip.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (show annotations) (download)
Thu Mar 10 03:45:11 2005 UTC (19 years, 2 months ago) by baylor
Branch: MAIN
CVS Tags: checkpoint57f_pre, checkpoint57f_post
Changes since 1.1: +74 -18 lines
Added Harmonic Smagorinsky Viscosity.  May not work with strongly anisotropic grids.

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_hdissip.F,v 1.1 2004/05/14 17:43:11 adcroft Exp $
2 C $Name: $
3
4 #include "MOM_COMMON_OPTIONS.h"
5
6 SUBROUTINE MOM_HDISSIP(
7 I bi,bj,k,
8 I tension,strain,hFacZ,viscAt,viscAs,
9 O uDissip,vDissip,
10 I myThid)
11 IMPLICIT NONE
12 C
13 C Calculate horizontal dissipation terms in terms of tension and strain
14 C
15 C Du = d/dx At Tension + d/dy As Strain
16 C Dv = d/dx As Strain - d/dy At Tension
17
18 C == Global variables ==
19 #include "SIZE.h"
20 #include "EEPARAMS.h"
21 #include "GRID.h"
22 #include "PARAMS.h"
23
24 C == Routine arguments ==
25 INTEGER bi,bj,k
26 _RL tension(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
27 _RL strain(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
28 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
29 _RL viscAt
30 _RL viscAs
31 _RL uDissip(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
32 _RL vDissip(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
33 INTEGER myThid
34
35 C == Local variables ==
36 INTEGER I,J
37 _RL viscA_t(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
38 _RL viscA_s(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
39 _RL ASmag, smagfac
40 _RL vg2Min, vg2Max, AlinMax, AlinMin
41
42 IF (deltaTmom.NE.0.) THEN
43 vg2Min=viscAhGridMin/deltaTmom
44 vg2Max=viscAhGridMax/deltaTmom
45 ELSE
46 vg2Min=0.
47 vg2Max=0.
48 ENDIF
49
50 C - Calculate Smagorinsky Coefficients
51 smagfac=(viscC2smag/pi)**2
52 DO j=2-Oly,sNy+Oly-1
53 DO i=2-Olx,sNx+Olx-1
54 IF (viscC2smag.NE.0.) THEN
55 Asmag=smagfac*rA(i,j,bi,bj)
56 & *sqrt(tension(i,j)**2
57 & +0.25*(strain(i+1, j )**2+strain( i ,j+1)**2
58 & +strain(i-1, j )**2+strain( i ,j-1)**2))
59 viscA_t(i,j)=min(viscAhMax,max(viscAt,Asmag))
60
61 IF (vg2Max.GT.0.) THEN
62 AlinMax=vg2Max*(rA ( i , j ,bi,bj))
63 viscA_t(i,j)=min(AlinMax,viscA_t(i,j))
64 ENDIF
65 AlinMin=vg2Min*(rA ( i , j ,bi,bj))
66 viscA_t(i,j)=max(AlinMin,viscA_t(i,j))
67
68 Asmag=smagfac*rAz(i,j,bi,bj)
69 & *sqrt(strain(i,j)**2
70 & +0.25*(tension( i , j )**2+tension( i ,j+1)**2
71 & +tension(i+1, j )**2+tension(i+1,j+1)**2))
72 viscA_s(i,j)=min(viscAhMax,max(viscAs,Asmag))
73
74 IF (vg2Max.GT.0.) THEN
75 AlinMax=vg2Max*(rAz( i , j ,bi,bj))
76 viscA_s(i,j)=min(AlinMax,viscA_s(i,j))
77 ENDIF
78 AlinMin=vg2Min*(rAz( i , j ,bi,bj))
79 viscA_s(i,j)=max(AlinMin,viscA_s(i,j))
80
81 ELSE
82 viscA_t(i,j)=viscAt
83 viscA_s(i,j)=viscAs
84 ENDIF
85 ENDDO
86 ENDDO
87
88 C - Laplacian and bi-harmonic terms
89 DO j=2-Oly,sNy+Oly-1
90 DO i=2-Olx,sNx+Olx-1
91
92 uDissip(i,j) =
93 & recip_dyg(i,j,bi,bj)*recip_dyg(i,j,bi,bj)
94 & *recip_dxc(i,j,bi,bj)
95 & *(
96 & dyf( i , j ,bi,bj)*dyf( i , j ,bi,bj)
97 & *viscA_t( i , j )*tension( i , j )
98 & -dyf(i-1, j ,bi,bj)*dyf(i-1, j ,bi,bj)
99 & *viscA_t(i-1, j )*tension(i-1, j )
100 & )
101 & +recip_dxc(i,j,bi,bj)*recip_dxc(i,j,bi,bj)
102 & *recip_dyg(i,j,bi,bj)
103 & *(
104 & dxv( i ,j+1,bi,bj)*dxv( i ,j+1,bi,bj)
105 & *viscA_s(i,j+1)*strain( i ,j+1)
106 & -dxv( i , j ,bi,bj)*dxv( i , j ,bi,bj)
107 & *viscA_s(i, j )*strain( i , j )
108 & )
109
110 vDissip(i,j) =
111 & recip_dyc(i,j,bi,bj)*recip_dyc(i,j,bi,bj)
112 & *recip_dxg(i,j,bi,bj)
113 & *(
114 & dyu(i+1, j ,bi,bj)*dyu(i+1, j ,bi,bj)
115 & *viscA_s(i+1,j)*strain(i+1,j)
116 & -dyu( i , j ,bi,bj)*dyu( i , j ,bi,bj)
117 & *viscA_s( i ,j)*strain( i ,j)
118 & )
119 & -recip_dxg(i,j,bi,bj)*recip_dxg(i,j,bi,bj)
120 & *recip_dyc(i,j,bi,bj)
121 & *(
122 & dxf( i , j ,bi,bj)*dxf( i , j ,bi,bj)
123 & *viscA_t(i, j )*tension(i, j )
124 & -dxf( i ,j-1,bi,bj)*dxf( i ,j-1,bi,bj)
125 & *viscA_t(i,j-1)*tension(i,j-1)
126 & )
127
128 ENDDO
129 ENDDO
130
131 RETURN
132 END

  ViewVC Help
Powered by ViewVC 1.1.22