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

Annotation of /MITgcm/pkg/mom_common/mom_calc_visc.F

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


Revision 1.16 - (hide annotations) (download)
Tue Oct 4 02:49:13 2005 UTC (18 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpint57u_post
Changes since 1.15: +53 -25 lines
make divergence part of Leith scheme usable on CS-grid.

1 jmc 1.16 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_calc_visc.F,v 1.15 2005/10/03 21:43:03 jmc Exp $
2 jmc 1.14 C $Name: $
3 baylor 1.1
4     #include "MOM_COMMON_OPTIONS.h"
5    
6 baylor 1.5
7 baylor 1.1 SUBROUTINE MOM_CALC_VISC(
8     I bi,bj,k,
9     O viscAh_Z,viscAh_D,viscA4_Z,viscA4_D,
10     O harmonic,biharmonic,useVariableViscosity,
11 jmc 1.12 I hDiv,vort3,tension,strain,KE,hFacZ,
12 baylor 1.1 I myThid)
13    
14     IMPLICIT NONE
15 baylor 1.5 C
16     C Calculate horizontal viscosities (L is typical grid width)
17     C harmonic viscosity=
18     C viscAh (or viscAhD on div pts and viscAhZ on zeta pts)
19     C +0.25*L**2*viscAhGrid/deltaT
20     C +sqrt(viscC2leith**2*grad(Vort3)**2
21     C +viscC2leithD**2*grad(hDiv)**2)*L**3
22     C +(viscC2smag/pi)**2*L**2*sqrt(Tension**2+Strain**2)
23     C
24     C biharmonic viscosity=
25     C viscA4 (or viscA4D on div pts and viscA4Z on zeta pts)
26     C +0.25*0.125*L**4*viscA4Grid/deltaT (approx)
27     C +0.125*L**5*sqrt(viscC4leith**2*grad(Vort3)**2
28     C +viscC4leithD**2*grad(hDiv)**2)
29     C +0.125*L**4*(viscC4smag/pi)**2*sqrt(Tension**2+Strain**2)
30     C
31     C Note that often 0.125*L**2 is the scale between harmonic and
32     C biharmonic (see Griffies and Hallberg (2000))
33     C This allows the same value of the coefficient to be used
34     C for roughly similar results with biharmonic and harmonic
35     C
36     C LIMITERS -- limit min and max values of viscosities
37     C viscAhRemax is min value for grid point harmonic Reynolds num
38 baylor 1.9 C harmonic viscosity>sqrt(2*KE)*L/viscAhRemax
39 baylor 1.5 C
40     C viscA4Remax is min value for grid point biharmonic Reynolds num
41 baylor 1.9 C biharmonic viscosity>sqrt(2*KE)*L**3/8/viscA4Remax
42 baylor 1.5 C
43     C viscAhgridmax is CFL stability limiter for harmonic viscosity
44     C harmonic viscosity<0.25*viscAhgridmax*L**2/deltaT
45     C
46     C viscA4gridmax is CFL stability limiter for biharmonic viscosity
47     C biharmonic viscosity<viscA4gridmax*L**4/32/deltaT (approx)
48     C
49     C viscAhgridmin and viscA4gridmin are lower limits for viscosity:
50     C harmonic viscosity>0.25*viscAhgridmax*L**2/deltaT
51     C biharmonic viscosity>viscA4gridmax*L**4/32/deltaT (approx)
52     C
53     C RECOMMENDED VALUES
54     C viscC2Leith=?
55     C viscC2LeithD=?
56     C viscC4Leith=?
57     C viscC4LeithD=?
58     C viscC2smag=2.2-4 (Griffies and Hallberg,2000)
59     C 0.2-0.9 (Smagorinsky,1993)
60     C viscC4smag=2.2-4 (Griffies and Hallberg,2000)
61 baylor 1.9 C viscAhRemax>=1, (<2 suppresses a computational mode)
62     C viscA4Remax>=1, (<2 suppresses a computational mode)
63 baylor 1.5 C viscAhgridmax=1
64     C viscA4gridmax=1
65     C viscAhgrid<1
66     C viscA4grid<1
67     C viscAhgridmin<<1
68     C viscA4gridmin<<1
69 baylor 1.1
70     C == Global variables ==
71     #include "SIZE.h"
72     #include "GRID.h"
73     #include "EEPARAMS.h"
74     #include "PARAMS.h"
75    
76     C == Routine arguments ==
77     INTEGER bi,bj,k
78     _RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
79     _RL viscAh_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
80     _RL viscA4_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
81     _RL viscA4_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
82     _RL hDiv(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
83     _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
84     _RL tension(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
85     _RL strain(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
86     _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
87     _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
88     INTEGER myThid
89     LOGICAL harmonic,biharmonic,useVariableViscosity
90    
91     C == Local variables ==
92     INTEGER I,J
93 baylor 1.5 _RL smag2fac, smag4fac
94 baylor 1.6 _RL viscAhRe_max, viscA4Re_max
95 jmc 1.15 _RL Alin,grdVrt,grdDiv, keZpt
96 baylor 1.1 _RL recip_dt,L2,L3,L4,L5,L2rdt,L4rdt
97 baylor 1.5 _RL Uscl,U4scl
98 jmc 1.16 _RL divDx(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
99     _RL divDy(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
100 baylor 1.5 _RL viscAh_ZMax(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
101     _RL viscAh_DMax(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
102     _RL viscA4_ZMax(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
103     _RL viscA4_DMax(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
104     _RL viscAh_ZMin(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
105     _RL viscAh_DMin(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
106     _RL viscA4_ZMin(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
107     _RL viscA4_DMin(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
108     _RL viscAh_ZLth(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
109     _RL viscAh_DLth(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
110     _RL viscA4_ZLth(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
111     _RL viscA4_DLth(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
112     _RL viscAh_ZLthD(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
113     _RL viscAh_DLthD(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
114     _RL viscA4_ZLthD(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
115     _RL viscA4_DLthD(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
116     _RL viscAh_ZSmg(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
117     _RL viscAh_DSmg(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
118     _RL viscA4_ZSmg(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
119     _RL viscA4_DSmg(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
120     LOGICAL calcLeith,calcSmag
121 baylor 1.1
122     useVariableViscosity=
123     & (viscAhGrid.NE.0.)
124     & .OR.(viscA4Grid.NE.0.)
125     & .OR.(viscC2leith.NE.0.)
126     & .OR.(viscC2leithD.NE.0.)
127     & .OR.(viscC4leith.NE.0.)
128     & .OR.(viscC4leithD.NE.0.)
129     & .OR.(viscC2smag.NE.0.)
130     & .OR.(viscC4smag.NE.0.)
131    
132     harmonic=
133     & (viscAh.NE.0.)
134     & .OR.(viscAhD.NE.0.)
135     & .OR.(viscAhZ.NE.0.)
136     & .OR.(viscAhGrid.NE.0.)
137     & .OR.(viscC2leith.NE.0.)
138     & .OR.(viscC2leithD.NE.0.)
139     & .OR.(viscC2smag.NE.0.)
140    
141 baylor 1.9 IF ((harmonic).and.(viscAhremax.ne.0.)) THEN
142 jmc 1.10 viscAhre_max=sqrt(2. _d 0)/viscAhRemax
143 baylor 1.9 ELSE
144 jmc 1.10 viscAhre_max=0. _d 0
145 baylor 1.9 ENDIF
146 baylor 1.5
147 baylor 1.1 biharmonic=
148     & (viscA4.NE.0.)
149     & .OR.(viscA4D.NE.0.)
150     & .OR.(viscA4Z.NE.0.)
151     & .OR.(viscA4Grid.NE.0.)
152     & .OR.(viscC4leith.NE.0.)
153     & .OR.(viscC4leithD.NE.0.)
154     & .OR.(viscC4smag.NE.0.)
155    
156 baylor 1.9 IF ((biharmonic).and.(viscA4remax.ne.0.)) THEN
157 jmc 1.10 viscA4re_max=0.125 _d 0*sqrt(2. _d 0)/viscA4Remax
158 baylor 1.9 ELSE
159 jmc 1.10 viscA4re_max=0. _d 0
160 baylor 1.9 ENDIF
161 baylor 1.5
162     calcleith=
163     & (viscC2leith.NE.0.)
164     & .OR.(viscC2leithD.NE.0.)
165     & .OR.(viscC4leith.NE.0.)
166     & .OR.(viscC4leithD.NE.0.)
167    
168     calcsmag=
169     & (viscC2smag.NE.0.)
170     & .OR.(viscC4smag.NE.0.)
171    
172 baylor 1.1 IF (deltaTmom.NE.0.) THEN
173 jmc 1.10 recip_dt=1. _d 0/deltaTmom
174 baylor 1.1 ELSE
175 jmc 1.10 recip_dt=0. _d 0
176 baylor 1.1 ENDIF
177    
178 baylor 1.5 IF (calcsmag) THEN
179     smag2fac=(viscC2smag/pi)**2
180 jmc 1.10 smag4fac=0.125 _d 0*(viscC4smag/pi)**2
181 baylor 1.9 ELSE
182 jmc 1.10 smag2fac=0. _d 0
183     smag4fac=0. _d 0
184 baylor 1.5 ENDIF
185 baylor 1.1
186     C - Viscosity
187     IF (useVariableViscosity) THEN
188 jmc 1.16
189     C horizontal gradient of horizontal divergence:
190     DO j=1-Oly,sNy+Oly
191     DO i=1-Olx,sNx+Olx
192     divDx(i,j) = 0.
193     divDy(i,j) = 0.
194     ENDDO
195     ENDDO
196     IF (calcleith) THEN
197     C- gradient in x direction:
198     #ifndef ALLOW_AUTODIFF_TAMC
199     IF (useCubedSphereExchange) THEN
200     C to compute d/dx(hDiv), fill corners with appropriate values:
201     CALL FILL_CS_CORNER_TR_RL( .TRUE., hDiv, bi,bj, myThid )
202     ENDIF
203     #endif
204     DO j=2-Oly,sNy+Oly-1
205     DO i=2-Olx,sNx+Olx-1
206     divDx(i,j) = (hDiv(i,j)-hDiv(i-1,j))*recip_DXC(i,j,bi,bj)
207     ENDDO
208     ENDDO
209    
210     C- gradient in y direction:
211     #ifndef ALLOW_AUTODIFF_TAMC
212     IF (useCubedSphereExchange) THEN
213     C to compute d/dy(hDiv), fill corners with appropriate values:
214     CALL FILL_CS_CORNER_TR_RL(.FALSE., hDiv, bi,bj, myThid )
215     ENDIF
216     #endif
217     DO j=2-Oly,sNy+Oly-1
218     DO i=2-Olx,sNx+Olx-1
219     divDy(i,j) = (hDiv(i,j)-hDiv(i,j-1))*recip_DYC(i,j,bi,bj)
220     ENDDO
221     ENDDO
222     ENDIF
223    
224 baylor 1.1 DO j=2-Oly,sNy+Oly-1
225     DO i=2-Olx,sNx+Olx-1
226     CCCCCCCCCCCCCCC Divergence Point CalculationsCCCCCCCCCCCCCCCCCCCC
227 baylor 1.5
228 baylor 1.1 C These are (powers of) length scales
229 baylor 1.11 IF (useAreaViscLength) THEN
230 jmc 1.12 L2=rA(i,j,bi,bj)
231 baylor 1.11 ELSE
232     L2=2. _d 0/((recip_DXF(I,J,bi,bj)**2+recip_DYF(I,J,bi,bj)**2))
233     ENDIF
234 baylor 1.1 L3=(L2**1.5)
235     L4=(L2**2)
236 baylor 1.5 L5=(L2**2.5)
237    
238 jmc 1.10 L2rdt=0.25 _d 0*recip_dt*L2
239 baylor 1.5
240 baylor 1.11 IF (useAreaViscLength) THEN
241 jmc 1.12 L4rdt=0.125 _d 0*recip_dt*rA(i,j,bi,bj)**2
242 baylor 1.11 ELSE
243     L4rdt=recip_dt/( 6. _d 0*(recip_DXF(I,J,bi,bj)**4
244 jmc 1.10 & +recip_DYF(I,J,bi,bj)**4)
245     & +8. _d 0*((recip_DXF(I,J,bi,bj)
246     & *recip_DYF(I,J,bi,bj))**2) )
247 baylor 1.11 ENDIF
248 baylor 1.1
249 baylor 1.5 C Velocity Reynolds Scale
250 jmc 1.15 IF ( viscAhRe_max.GT.0. .AND. KE(i,j).GT.0. ) THEN
251     Uscl=sqrt(KE(i,j)*L2)*viscAhRe_max
252     ELSE
253     Uscl=0.
254     ENDIF
255     IF ( viscA4Re_max.GT.0. .AND. KE(i,j).GT.0. ) THEN
256     U4scl=sqrt(KE(i,j))*L3*viscA4Re_max
257     ELSE
258     U4scl=0.
259     ENDIF
260 baylor 1.5
261     IF (useFullLeith.and.calcleith) THEN
262 baylor 1.1 C This is the vector magnitude of the vorticity gradient squared
263 jmc 1.10 grdVrt=0.25 _d 0*(
264 baylor 1.1 & ((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj))**2
265     & +((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))**2
266 baylor 1.8 & +((vort3(i+1,j+1)-vort3(i,j+1))
267     & *recip_DXG(i,j+1,bi,bj))**2
268     & +((vort3(i+1,j+1)-vort3(i+1,j))
269     & *recip_DYG(i+1,j,bi,bj))**2)
270 baylor 1.1
271     C This is the vector magnitude of grad (div.v) squared
272     C Using it in Leith serves to damp instabilities in w.
273 jmc 1.16 grdDiv=0.25 _d 0*( (divDx(i+1,j)*divDx(i+1,j)
274     & + divDx(i,j)*divDx(i,j) )
275     & + (divDy(i,j+1)*divDy(i,j+1)
276     & + divDy(i,j)*divDy(i,j) ) )
277 baylor 1.5
278     viscAh_DLth(i,j)=
279     & sqrt(viscC2leith**2*grdVrt+viscC2leithD**2*grdDiv)*L3
280 jmc 1.10 viscA4_DLth(i,j)=0.125 _d 0*
281 baylor 1.5 & sqrt(viscC4leith**2*grdVrt+viscC4leithD**2*grdDiv)*L5
282     viscAh_DLthd(i,j)=
283     & sqrt(viscC2leithD**2*grdDiv)*L3
284 jmc 1.10 viscA4_DLthd(i,j)=0.125 _d 0*
285 baylor 1.5 & sqrt(viscC4leithD**2*grdDiv)*L5
286     ELSEIF (calcleith) THEN
287 baylor 1.1 C but this approximation will work on cube
288     c (and differs by as much as 4X)
289 baylor 1.5 grdVrt=abs((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj))
290     grdVrt=max(grdVrt,
291     & abs((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj)))
292     grdVrt=max(grdVrt,
293     & abs((vort3(i+1,j+1)-vort3(i,j+1))*recip_DXG(i,j+1,bi,bj)))
294     grdVrt=max(grdVrt,
295     & abs((vort3(i+1,j+1)-vort3(i+1,j))*recip_DYG(i+1,j,bi,bj)))
296    
297 jmc 1.16 grdDiv=max( abs(divDx(i+1,j)), abs(divDx(i,j)) )
298     grdDiv=max( grdDiv, abs(divDy(i,j+1)) )
299     grdDiv=max( grdDiv, abs(divDy(i,j)) )
300 baylor 1.1
301     c This approximation is good to the same order as above...
302 baylor 1.5 viscAh_Dlth(i,j)=
303     & (viscC2leith*grdVrt+(viscC2leithD*grdDiv))*L3
304 jmc 1.10 viscA4_Dlth(i,j)=0.125 _d 0*
305 baylor 1.5 & (viscC4leith*grdVrt+(viscC4leithD*grdDiv))*L5
306     viscAh_DlthD(i,j)=
307     & ((viscC2leithD*grdDiv))*L3
308 jmc 1.10 viscA4_DlthD(i,j)=0.125 _d 0*
309 baylor 1.5 & ((viscC4leithD*grdDiv))*L5
310 baylor 1.1 ELSE
311 jmc 1.10 viscAh_Dlth(i,j)=0. _d 0
312     viscA4_Dlth(i,j)=0. _d 0
313     viscAh_DlthD(i,j)=0. _d 0
314     viscA4_DlthD(i,j)=0. _d 0
315 baylor 1.1 ENDIF
316    
317 baylor 1.5 IF (calcsmag) THEN
318     viscAh_DSmg(i,j)=L2
319     & *sqrt(tension(i,j)**2
320 jmc 1.10 & +0.25 _d 0*(strain(i+1, j )**2+strain( i ,j+1)**2
321     & +strain(i , j )**2+strain(i+1,j+1)**2))
322 baylor 1.5 viscA4_DSmg(i,j)=smag4fac*L2*viscAh_DSmg(i,j)
323     viscAh_DSmg(i,j)=smag2fac*viscAh_DSmg(i,j)
324 baylor 1.1 ELSE
325 jmc 1.10 viscAh_DSmg(i,j)=0. _d 0
326     viscA4_DSmg(i,j)=0. _d 0
327 baylor 1.1 ENDIF
328    
329     C Harmonic on Div.u points
330 baylor 1.5 Alin=viscAhD+viscAhGrid*L2rdt
331     & +viscAh_DLth(i,j)+viscAh_DSmg(i,j)
332     viscAh_DMin(i,j)=max(viscAhGridMin*L2rdt,Uscl)
333     viscAh_D(i,j)=max(viscAh_DMin(i,j),Alin)
334     viscAh_DMax(i,j)=min(viscAhGridMax*L2rdt,viscAhMax)
335     viscAh_D(i,j)=min(viscAh_DMax(i,j),viscAh_D(i,j))
336 baylor 1.1
337     C BiHarmonic on Div.u points
338 baylor 1.5 Alin=viscA4D+viscA4Grid*L4rdt
339     & +viscA4_DLth(i,j)+viscA4_DSmg(i,j)
340     viscA4_DMin(i,j)=max(viscA4GridMin*L4rdt,U4scl)
341     viscA4_D(i,j)=max(viscA4_DMin(i,j),Alin)
342     viscA4_DMax(i,j)=min(viscA4GridMax*L4rdt,viscA4Max)
343     viscA4_D(i,j)=min(viscA4_DMax(i,j),viscA4_D(i,j))
344 baylor 1.1
345     CCCCCCCCCCCCC Vorticity Point CalculationsCCCCCCCCCCCCCCCCCC
346     C These are (powers of) length scales
347 baylor 1.11 IF (useAreaViscLength) THEN
348 jmc 1.12 L2=rAz(i,j,bi,bj)
349 baylor 1.11 ELSE
350 jmc 1.12 L2=2. _d 0/((recip_DXV(I,J,bi,bj)**2+recip_DYU(I,J,bi,bj)**2))
351 baylor 1.11 ENDIF
352    
353 baylor 1.1 L3=(L2**1.5)
354     L4=(L2**2)
355 baylor 1.5 L5=(L2**2.5)
356    
357 jmc 1.10 L2rdt=0.25 _d 0*recip_dt*L2
358 baylor 1.11 IF (useAreaViscLength) THEN
359 jmc 1.14 L4rdt=0.125 _d 0*recip_dt*rAz(i,j,bi,bj)**2
360 baylor 1.11 ELSE
361     L4rdt=recip_dt/
362     & ( 6. _d 0*(recip_DXV(I,J,bi,bj)**4+recip_DYU(I,J,bi,bj)**4)
363     & +8. _d 0*((recip_DXV(I,J,bi,bj)*recip_DYU(I,J,bi,bj))**2))
364     ENDIF
365 baylor 1.5
366 jmc 1.15 C Velocity Reynolds Scale (Pb here at CS-grid corners !)
367     IF ( viscAhRe_max.GT.0. .OR. viscA4Re_max.GT.0. ) THEN
368     keZpt=0.25 _d 0*( (KE(i,j)+KE(i-1,j-1))
369     & +(KE(i-1,j)+KE(i,j-1)) )
370     IF ( keZpt.GT.0. ) THEN
371     Uscl = sqrt(keZpt*L2)*viscAhRe_max
372     U4scl= sqrt(keZpt)*L3*viscA4Re_max
373     ELSE
374     Uscl =0.
375     U4scl=0.
376     ENDIF
377     ELSE
378     Uscl =0.
379     U4scl=0.
380     ENDIF
381 baylor 1.1
382     C This is the vector magnitude of the vorticity gradient squared
383 baylor 1.5 IF (useFullLeith.and.calcleith) THEN
384 jmc 1.10 grdVrt=0.25 _d 0*(
385 baylor 1.5 & ((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj))**2
386     & +((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))**2
387     & +((vort3(i-1,j)-vort3(i,j))*recip_DXG(i-1,j,bi,bj))**2
388     & +((vort3(i,j-1)-vort3(i,j))*recip_DYG(i,j-1,bi,bj))**2)
389 baylor 1.1
390     C This is the vector magnitude of grad(div.v) squared
391 jmc 1.16 grdDiv=0.25 _d 0*( (divDx(i,j-1)*divDx(i,j-1)
392     & + divDx(i,j)*divDx(i,j) )
393     & + (divDy(i-1,j)*divDy(i-1,j)
394     & + divDy(i,j)*divDy(i,j) ) )
395 baylor 1.5
396     viscAh_ZLth(i,j)=
397     & sqrt(viscC2leith**2*grdVrt+viscC2leithD**2*grdDiv)*L3
398 jmc 1.10 viscA4_ZLth(i,j)=0.125 _d 0*
399 baylor 1.5 & sqrt(viscC4leith**2*grdVrt+viscC4leithD**2*grdDiv)*L5
400     viscAh_ZLthD(i,j)=
401     & sqrt(viscC2leithD**2*grdDiv)*L3
402 jmc 1.10 viscA4_ZLthD(i,j)=0.125 _d 0*
403 baylor 1.5 & sqrt(viscC4leithD**2*grdDiv)*L5
404    
405     ELSEIF (calcleith) THEN
406 baylor 1.1 C but this approximation will work on cube (and differs by 4X)
407 baylor 1.5 grdVrt=abs((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj))
408     grdVrt=max(grdVrt,
409     & abs((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj)))
410     grdVrt=max(grdVrt,
411     & abs((vort3(i-1,j)-vort3(i,j))*recip_DXG(i-1,j,bi,bj)))
412     grdVrt=max(grdVrt,
413     & abs((vort3(i,j-1)-vort3(i,j))*recip_DYG(i,j-1,bi,bj)))
414    
415 jmc 1.16 grdDiv=max( abs(divDx(i,j)), abs(divDx(i,j-1)) )
416     grdDiv=max( grdDiv, abs(divDy(i,j)) )
417     grdDiv=max( grdDiv, abs(divDy(i-1,j)) )
418 baylor 1.5
419     viscAh_ZLth(i,j)=(viscC2leith*grdVrt
420     & +(viscC2leithD*grdDiv))*L3
421 jmc 1.10 viscA4_ZLth(i,j)=0.125 _d 0*(viscC4leith*grdVrt
422 baylor 1.5 & +(viscC4leithD*grdDiv))*L5
423     viscAh_ZLthD(i,j)=((viscC2leithD*grdDiv))*L3
424 jmc 1.10 viscA4_ZLthD(i,j)=0.125 _d 0*((viscC4leithD*grdDiv))*L5
425 baylor 1.1 ELSE
426 jmc 1.10 viscAh_ZLth(i,j)=0. _d 0
427     viscA4_ZLth(i,j)=0. _d 0
428     viscAh_ZLthD(i,j)=0. _d 0
429     viscA4_ZLthD(i,j)=0. _d 0
430 baylor 1.1 ENDIF
431    
432 baylor 1.5 IF (calcsmag) THEN
433     viscAh_ZSmg(i,j)=L2
434     & *sqrt(strain(i,j)**2
435 jmc 1.10 & +0.25 _d 0*(tension( i , j )**2+tension( i ,j-1)**2
436     & +tension(i-1, j )**2+tension(i-1,j-1)**2))
437 baylor 1.5 viscA4_ZSmg(i,j)=smag4fac*L2*viscAh_ZSmg(i,j)
438     viscAh_ZSmg(i,j)=smag2fac*viscAh_ZSmg(i,j)
439 baylor 1.1 ENDIF
440    
441     C Harmonic on Zeta points
442 baylor 1.5 Alin=viscAhZ+viscAhGrid*L2rdt
443     & +viscAh_ZLth(i,j)+viscAh_ZSmg(i,j)
444     viscAh_ZMin(i,j)=max(viscAhGridMin*L2rdt,Uscl)
445     viscAh_Z(i,j)=max(viscAh_ZMin(i,j),Alin)
446     viscAh_ZMax(i,j)=min(viscAhGridMax*L2rdt,viscAhMax)
447     viscAh_Z(i,j)=min(viscAh_ZMax(i,j),viscAh_Z(i,j))
448    
449     C BiHarmonic on Zeta points
450     Alin=viscA4Z+viscA4Grid*L4rdt
451     & +viscA4_ZLth(i,j)+viscA4_ZSmg(i,j)
452     viscA4_ZMin(i,j)=max(viscA4GridMin*L4rdt,U4scl)
453     viscA4_Z(i,j)=max(viscA4_ZMin(i,j),Alin)
454     viscA4_ZMax(i,j)=min(viscA4GridMax*L4rdt,viscA4Max)
455     viscA4_Z(i,j)=min(viscA4_ZMax(i,j),viscA4_Z(i,j))
456 baylor 1.1 ENDDO
457     ENDDO
458     ELSE
459     DO j=1-Oly,sNy+Oly
460     DO i=1-Olx,sNx+Olx
461     viscAh_D(i,j)=viscAhD
462     viscAh_Z(i,j)=viscAhZ
463     viscA4_D(i,j)=viscA4D
464     viscA4_Z(i,j)=viscA4Z
465     ENDDO
466     ENDDO
467     ENDIF
468    
469     #ifdef ALLOW_DIAGNOSTICS
470     IF (useDiagnostics) THEN
471     CALL DIAGNOSTICS_FILL(viscAh_D,'VISCAHD ',k,1,2,bi,bj,myThid)
472     CALL DIAGNOSTICS_FILL(viscA4_D,'VISCA4D ',k,1,2,bi,bj,myThid)
473     CALL DIAGNOSTICS_FILL(viscAh_Z,'VISCAHZ ',k,1,2,bi,bj,myThid)
474     CALL DIAGNOSTICS_FILL(viscA4_Z,'VISCA4Z ',k,1,2,bi,bj,myThid)
475 baylor 1.5
476     CALL DIAGNOSTICS_FILL(viscAh_DMax,'VAHDMAX ',k,1,2,bi,bj,myThid)
477     CALL DIAGNOSTICS_FILL(viscA4_DMax,'VA4DMAX ',k,1,2,bi,bj,myThid)
478     CALL DIAGNOSTICS_FILL(viscAh_ZMax,'VAHZMAX ',k,1,2,bi,bj,myThid)
479     CALL DIAGNOSTICS_FILL(viscA4_ZMax,'VA4ZMAX ',k,1,2,bi,bj,myThid)
480    
481     CALL DIAGNOSTICS_FILL(viscAh_DMin,'VAHDMIN ',k,1,2,bi,bj,myThid)
482     CALL DIAGNOSTICS_FILL(viscA4_DMin,'VA4DMIN ',k,1,2,bi,bj,myThid)
483     CALL DIAGNOSTICS_FILL(viscAh_ZMin,'VAHZMIN ',k,1,2,bi,bj,myThid)
484     CALL DIAGNOSTICS_FILL(viscA4_ZMin,'VA4ZMIN ',k,1,2,bi,bj,myThid)
485    
486     CALL DIAGNOSTICS_FILL(viscAh_DLth,'VAHDLTH ',k,1,2,bi,bj,myThid)
487     CALL DIAGNOSTICS_FILL(viscA4_DLth,'VA4DLTH ',k,1,2,bi,bj,myThid)
488     CALL DIAGNOSTICS_FILL(viscAh_ZLth,'VAHZLTH ',k,1,2,bi,bj,myThid)
489     CALL DIAGNOSTICS_FILL(viscA4_ZLth,'VA4ZLTH ',k,1,2,bi,bj,myThid)
490    
491 baylor 1.7 CALL DIAGNOSTICS_FILL(viscAh_DLthD,'VAHDLTHD'
492 baylor 1.8 & ,k,1,2,bi,bj,myThid)
493 baylor 1.7 CALL DIAGNOSTICS_FILL(viscA4_DLthD,'VA4DLTHD'
494 baylor 1.8 & ,k,1,2,bi,bj,myThid)
495 baylor 1.7 CALL DIAGNOSTICS_FILL(viscAh_ZLthD,'VAHZLTHD'
496 baylor 1.8 & ,k,1,2,bi,bj,myThid)
497 baylor 1.7 CALL DIAGNOSTICS_FILL(viscA4_ZLthD,'VA4ZLTHD'
498 baylor 1.8 & ,k,1,2,bi,bj,myThid)
499 baylor 1.5
500     CALL DIAGNOSTICS_FILL(viscAh_DSmg,'VAHDSMAG',k,1,2,bi,bj,myThid)
501     CALL DIAGNOSTICS_FILL(viscA4_DSmg,'VA4DSMAG',k,1,2,bi,bj,myThid)
502     CALL DIAGNOSTICS_FILL(viscAh_ZSmg,'VAHZSMAG',k,1,2,bi,bj,myThid)
503     CALL DIAGNOSTICS_FILL(viscA4_ZSmg,'VA4ZSMAG',k,1,2,bi,bj,myThid)
504 baylor 1.1 ENDIF
505     #endif
506    
507     RETURN
508     END
509 baylor 1.5

  ViewVC Help
Powered by ViewVC 1.1.22