/[MITgcm]/MITgcm/pkg/mom_vecinv/mom_vi_hdissip.F
ViewVC logotype

Annotation of /MITgcm/pkg/mom_vecinv/mom_vi_hdissip.F

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


Revision 1.27 - (hide annotations) (download)
Tue Sep 20 19:43:39 2005 UTC (18 years, 9 months ago) by baylor
Branch: MAIN
Changes since 1.26: +2 -2 lines
Passing hfacZ to mom_calc_visc.

1 baylor 1.27 C $Header: /u/gcmpack/MITgcm/pkg/mom_vecinv/mom_vi_hdissip.F,v 1.26 2005/09/16 19:32:20 baylor Exp $
2 jmc 1.3 C $Name: $
3 adcroft 1.2
4 adcroft 1.8 #include "MOM_VECINV_OPTIONS.h"
5 adcroft 1.2
6     SUBROUTINE MOM_VI_HDISSIP(
7     I bi,bj,k,
8 baylor 1.26 I hDiv,vort3,tension,strain,KE,
9     I hFacZ,dStar,zStar,
10 adcroft 1.2 O uDissip,vDissip,
11     I myThid)
12 heimbach 1.14
13     cph(
14 jmc 1.15 cph The following line was commented in the argument list
15 heimbach 1.14 cph TAMC cannot digest commented lines within continuing lines
16     c I viscAh_Z,viscAh_D,viscA4_Z,viscA4_D,
17     cph)
18    
19 adcroft 1.2 IMPLICIT NONE
20     C
21     C Calculate horizontal dissipation terms
22     C [del^2 - del^4] (u,v)
23     C
24    
25     C == Global variables ==
26     #include "SIZE.h"
27     #include "GRID.h"
28     #include "EEPARAMS.h"
29     #include "PARAMS.h"
30    
31     C == Routine arguments ==
32     INTEGER bi,bj,k
33     _RL hDiv(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
34     _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
35 baylor 1.26 _RL tension(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
36     _RL strain(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
37     _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
38 adcroft 1.2 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
39     _RL dStar(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
40     _RL zStar(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
41     _RL uDissip(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
42     _RL vDissip(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
43     INTEGER myThid
44    
45     C == Local variables ==
46 baylor 1.26 INTEGER I,J
47     _RL Zip,Zij,Zpj,Dim,Dij,Dmj,uD2,vD2,uD4,vD4
48 jmc 1.18 _RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
49     _RL viscAh_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
50     _RL viscA4_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
51     _RL viscA4_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
52 baylor 1.26 LOGICAL harmonic, biharmonic, useVariableViscosity
53 adcroft 1.6
54 baylor 1.26 CALL MOM_CALC_VISC(
55     I bi,bj,k,
56     O viscAh_Z,viscAh_D,viscA4_Z,viscA4_D,
57     O harmonic,biharmonic,useVariableViscosity,
58 baylor 1.27 I hDiv,vort3,tension,strain,KE,hfacZ,
59 baylor 1.26 I myThid)
60 adcroft 1.2
61 jmc 1.12 C - Laplacian terms
62 baylor 1.26 IF (harmonic) THEN
63 jmc 1.12 DO j=2-Oly,sNy+Oly-1
64     DO i=2-Olx,sNx+Olx-1
65    
66     Dim=hDiv( i ,j-1)
67     Dij=hDiv( i , j )
68     Dmj=hDiv(i-1, j )
69     Zip=hFacZ( i ,j+1)*vort3( i ,j+1)
70     Zij=hFacZ( i , j )*vort3( i , j )
71     Zpj=hFacZ(i+1, j )*vort3(i+1, j )
72 adcroft 1.2
73 adcroft 1.4 C This bit scales the harmonic dissipation operator to be proportional
74     C to the grid-cell area over the time-step. viscAh is then non-dimensional
75     C and should be less than 1/8, for example viscAh=0.01
76 jmc 1.12 IF (useVariableViscosity) THEN
77 adcroft 1.6 Dij=Dij*viscAh_D(i,j)
78     Dim=Dim*viscAh_D(i,j-1)
79     Dmj=Dmj*viscAh_D(i-1,j)
80     Zij=Zij*viscAh_Z(i,j)
81     Zip=Zip*viscAh_Z(i,j+1)
82     Zpj=Zpj*viscAh_Z(i+1,j)
83 adcroft 1.4 uD2 = (
84     & cosFacU(j,bi,bj)*( Dij-Dmj )*recip_DXC(i,j,bi,bj)
85     & -recip_hFacW(i,j,k,bi,bj)*( Zip-Zij )*recip_DYG(i,j,bi,bj) )
86     vD2 = (
87     & recip_hFacS(i,j,k,bi,bj)*( Zpj-Zij )*recip_DXG(i,j,bi,bj)
88     & *cosFacV(j,bi,bj)
89     & +( Dij-Dim )*recip_DYC(i,j,bi,bj) )
90 jmc 1.12 ELSE
91     uD2 = viscAhD*
92 adcroft 1.2 & cosFacU(j,bi,bj)*( Dij-Dmj )*recip_DXC(i,j,bi,bj)
93 jmc 1.12 & - viscAhZ*recip_hFacW(i,j,k,bi,bj)*
94     & ( Zip-Zij )*recip_DYG(i,j,bi,bj)
95     vD2 = viscAhZ*recip_hFacS(i,j,k,bi,bj)*
96     & cosFacV(j,bi,bj)*( Zpj-Zij )*recip_DXG(i,j,bi,bj)
97     & + viscAhD* ( Dij-Dim )*recip_DYC(i,j,bi,bj)
98     ENDIF
99    
100     uDissip(i,j) = uD2
101     vDissip(i,j) = vD2
102    
103     ENDDO
104     ENDDO
105     ELSE
106     DO j=2-Oly,sNy+Oly-1
107     DO i=2-Olx,sNx+Olx-1
108     uDissip(i,j) = 0.
109     vDissip(i,j) = 0.
110     ENDDO
111     ENDDO
112     ENDIF
113    
114     C - Bi-harmonic terms
115 baylor 1.26 IF (biharmonic) THEN
116 jmc 1.12 DO j=2-Oly,sNy+Oly-1
117     DO i=2-Olx,sNx+Olx-1
118 adcroft 1.2
119 jmc 1.11 #ifdef MOM_VI_ORIGINAL_VISCA4
120 jmc 1.12 Dim=dyF( i ,j-1,bi,bj)*dStar( i ,j-1)
121     Dij=dyF( i , j ,bi,bj)*dStar( i , j )
122     Dmj=dyF(i-1, j ,bi,bj)*dStar(i-1, j )
123    
124     Zip=dxV( i ,j+1,bi,bj)*hFacZ( i ,j+1)*zStar( i ,j+1)
125     Zij=dxV( i , j ,bi,bj)*hFacZ( i , j )*zStar( i , j )
126     Zpj=dxV(i+1, j ,bi,bj)*hFacZ(i+1, j )*zStar(i+1, j )
127 jmc 1.11 #else
128 jmc 1.12 Dim=dStar( i ,j-1)
129     Dij=dStar( i , j )
130     Dmj=dStar(i-1, j )
131    
132     Zip=hFacZ( i ,j+1)*zStar( i ,j+1)
133     Zij=hFacZ( i , j )*zStar( i , j )
134     Zpj=hFacZ(i+1, j )*zStar(i+1, j )
135 jmc 1.11 #endif
136    
137 adcroft 1.4 C This bit scales the harmonic dissipation operator to be proportional
138     C to the grid-cell area over the time-step. viscAh is then non-dimensional
139     C and should be less than 1/8, for example viscAh=0.01
140 jmc 1.12 IF (useVariableViscosity) THEN
141 adcroft 1.6 Dij=Dij*viscA4_D(i,j)
142     Dim=Dim*viscA4_D(i,j-1)
143     Dmj=Dmj*viscA4_D(i-1,j)
144     Zij=Zij*viscA4_Z(i,j)
145     Zip=Zip*viscA4_Z(i,j+1)
146     Zpj=Zpj*viscA4_Z(i+1,j)
147 jmc 1.11
148     #ifdef MOM_VI_ORIGINAL_VISCA4
149 adcroft 1.4 uD4 = recip_rAw(i,j,bi,bj)*(
150     & ( (Dij-Dmj)*cosFacU(j,bi,bj) )
151     & -recip_hFacW(i,j,k,bi,bj)*( Zip-Zij ) )
152     vD4 = recip_rAs(i,j,bi,bj)*(
153     & recip_hFacS(i,j,k,bi,bj)*( (Zpj-Zij)*cosFacV(j,bi,bj) )
154     & + ( Dij-Dim ) )
155 jmc 1.12 ELSE
156 adcroft 1.4 uD4 = recip_rAw(i,j,bi,bj)*(
157 adcroft 1.2 & viscA4*( (Dij-Dmj)*cosFacU(j,bi,bj) )
158     & -recip_hFacW(i,j,k,bi,bj)*viscA4*( Zip-Zij ) )
159 adcroft 1.4 vD4 = recip_rAs(i,j,bi,bj)*(
160 adcroft 1.2 & recip_hFacS(i,j,k,bi,bj)*viscA4*( (Zpj-Zij)*cosFacV(j,bi,bj) )
161     & + viscA4*( Dij-Dim ) )
162 jmc 1.11 #else /* MOM_VI_ORIGINAL_VISCA4 */
163     uD4 = (
164     & cosFacU(j,bi,bj)*( Dij-Dmj )*recip_DXC(i,j,bi,bj)
165     & -recip_hFacW(i,j,k,bi,bj)*( Zip-Zij )*recip_DYG(i,j,bi,bj) )
166     vD4 = (
167     & recip_hFacS(i,j,k,bi,bj)*( Zpj-Zij )*recip_DXG(i,j,bi,bj)
168     & *cosFacV(j,bi,bj)
169     & +( Dij-Dim )*recip_DYC(i,j,bi,bj) )
170 jmc 1.12 ELSE
171 jmc 1.18 uD4 = viscA4D*
172 jmc 1.11 & cosFacU(j,bi,bj)*( Dij-Dmj )*recip_DXC(i,j,bi,bj)
173 jmc 1.12 & - viscA4Z*recip_hFacW(i,j,k,bi,bj)*
174     & ( Zip-Zij )*recip_DYG(i,j,bi,bj)
175     vD4 = viscA4Z*recip_hFacS(i,j,k,bi,bj)*
176     & cosFacV(j,bi,bj)*( Zpj-Zij )*recip_DXG(i,j,bi,bj)
177     & + viscA4D* ( Dij-Dim )*recip_DYC(i,j,bi,bj)
178 jmc 1.11 #endif /* MOM_VI_ORIGINAL_VISCA4 */
179 jmc 1.12 ENDIF
180 adcroft 1.2
181 jmc 1.12 uDissip(i,j) = uDissip(i,j) - uD4
182     vDissip(i,j) = vDissip(i,j) - vD4
183 adcroft 1.2
184 jmc 1.12 ENDDO
185 adcroft 1.2 ENDDO
186 jmc 1.12 ENDIF
187 molod 1.7
188 adcroft 1.2 RETURN
189     END

  ViewVC Help
Powered by ViewVC 1.1.22