/[MITgcm]/MITgcm/pkg/gmredi/gmredi_calc_tensor.F
ViewVC logotype

Annotation of /MITgcm/pkg/gmredi/gmredi_calc_tensor.F

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


Revision 1.29 - (hide annotations) (download)
Sat Jun 30 14:09:57 2007 UTC (16 years, 10 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint59e, checkpoint59f
Changes since 1.28: +11 -10 lines
Fix some store directives and keys.

1 heimbach 1.29 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/gmredi_calc_tensor.F,v 1.28 2007/06/26 15:34:15 heimbach Exp $
2 heimbach 1.13 C $Name: $
3 adcroft 1.1
4     #include "GMREDI_OPTIONS.h"
5 jmc 1.27 #ifdef ALLOW_KPP
6     # include "KPP_OPTIONS.h"
7     #endif
8 jmc 1.26 #undef OLD_VISBECK_CALC
9 adcroft 1.1
10 jmc 1.27 CBOP
11     C !ROUTINE: GMREDI_CALC_TENSOR
12     C !INTERFACE:
13 adcroft 1.1 SUBROUTINE GMREDI_CALC_TENSOR(
14 jmc 1.27 I iMin, iMax, jMin, jMax,
15 adcroft 1.1 I sigmaX, sigmaY, sigmaR,
16 jmc 1.27 I bi, bj, myTime, myIter, myThid )
17    
18     C !DESCRIPTION: \bv
19     C *==========================================================*
20     C | SUBROUTINE GMREDI_CALC_TENSOR
21     C | o Calculate tensor elements for GM/Redi tensor.
22     C *==========================================================*
23     C *==========================================================*
24     C \ev
25    
26     C !USES:
27 adcroft 1.1 IMPLICIT NONE
28    
29     C == Global variables ==
30     #include "SIZE.h"
31     #include "GRID.h"
32     #include "DYNVARS.h"
33     #include "EEPARAMS.h"
34     #include "PARAMS.h"
35     #include "GMREDI.h"
36 jmc 1.20 #include "GMREDI_TAVE.h"
37 jmc 1.27 #ifdef ALLOW_KPP
38     # include "KPP.h"
39     #endif
40 adcroft 1.1
41 heimbach 1.10 #ifdef ALLOW_AUTODIFF_TAMC
42     #include "tamc.h"
43     #include "tamc_keys.h"
44     #endif /* ALLOW_AUTODIFF_TAMC */
45    
46 jmc 1.27 C !INPUT/OUTPUT PARAMETERS:
47 adcroft 1.1 C == Routine arguments ==
48 jmc 1.27 C bi, bj :: tile indices
49     C myTime :: Current time in simulation
50     C myIter :: Current iteration number in simulation
51     C myThid :: My Thread Id. number
52 adcroft 1.1 C
53 jmc 1.27 INTEGER iMin,iMax,jMin,jMax
54 adcroft 1.1 _RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
55     _RL sigmaY(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
56     _RL sigmaR(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
57 jmc 1.27 INTEGER bi, bj
58     _RL myTime
59     INTEGER myIter
60 adcroft 1.1 INTEGER myThid
61 jmc 1.27 CEOP
62 adcroft 1.1
63     #ifdef ALLOW_GMREDI
64    
65 jmc 1.27 C !LOCAL VARIABLES:
66 adcroft 1.1 C == Local variables ==
67 jmc 1.15 INTEGER i,j,k,kp1
68 adcroft 1.1 _RL SlopeX(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
69     _RL SlopeY(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
70 heimbach 1.12 _RL dSigmaDx(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
71     _RL dSigmaDy(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
72 jmc 1.19 _RL dSigmaDr(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
73 jmc 1.8 _RL SlopeSqr(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
74     _RL taperFct(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
75 jmc 1.15 _RL maskp1, Kgm_tmp
76 jmc 1.19 _RL ldd97_LrhoC(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
77     _RL ldd97_LrhoW(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
78     _RL ldd97_LrhoS(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
79     _RL Cspd, LrhoInf, LrhoSup, fCoriLoc
80 adcroft 1.1
81 jmc 1.27 INTEGER kLow_W (1-Olx:sNx+Olx,1-Oly:sNy+Oly)
82     INTEGER kLow_S (1-Olx:sNx+Olx,1-Oly:sNy+Oly)
83     _RL locMixLayer(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
84     _RL baseSlope (1-Olx:sNx+Olx,1-Oly:sNy+Oly)
85     _RL hTransLay (1-Olx:sNx+Olx,1-Oly:sNy+Oly)
86     _RL recipLambda(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
87    
88 adcroft 1.1 #ifdef GM_VISBECK_VARIABLE_K
89 jmc 1.26 #ifdef OLD_VISBECK_CALC
90 heimbach 1.14 _RL deltaH,zero_rs
91     PARAMETER(zero_rs=0.D0)
92 adcroft 1.1 _RL N2,SN
93 heimbach 1.10 _RL Ssq(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
94 jmc 1.26 #else
95     _RL dSigmaH
96     _RL deltaH, integrDepth
97     _RL Sloc, M2loc, SNloc
98     #endif
99 adcroft 1.1 #endif
100    
101 jmc 1.22 #ifdef ALLOW_DIAGNOSTICS
102     LOGICAL doDiagRediFlx
103     LOGICAL DIAGNOSTICS_IS_ON
104     EXTERNAL DIAGNOSTICS_IS_ON
105     INTEGER km1
106     _RL dTdz
107     _RL tmp1k(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
108     #endif
109    
110 jmc 1.19 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
111    
112 heimbach 1.10 #ifdef ALLOW_AUTODIFF_TAMC
113     act1 = bi - myBxLo(myThid)
114     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
115     act2 = bj - myByLo(myThid)
116     max2 = myByHi(myThid) - myByLo(myThid) + 1
117     act3 = myThid - 1
118     max3 = nTx*nTy
119     act4 = ikey_dynamics - 1
120 heimbach 1.12 igmkey = (act1 + 1) + act2*max1
121 heimbach 1.10 & + act3*max1*max2
122     & + act4*max1*max2*max3
123     #endif /* ALLOW_AUTODIFF_TAMC */
124    
125 jmc 1.22 #ifdef ALLOW_DIAGNOSTICS
126     doDiagRediFlx = .FALSE.
127     IF ( useDiagnostics ) THEN
128     doDiagRediFlx = DIAGNOSTICS_IS_ON('GM_KuzTz', myThid )
129 jmc 1.26 doDiagRediFlx = doDiagRediFlx .OR.
130 jmc 1.22 & DIAGNOSTICS_IS_ON('GM_KvzTz', myThid )
131     ENDIF
132     #endif
133 jmc 1.26
134 heimbach 1.12 #ifdef GM_VISBECK_VARIABLE_K
135     DO j=1-Oly,sNy+Oly
136     DO i=1-Olx,sNx+Olx
137     VisbeckK(i,j,bi,bj) = 0. _d 0
138     ENDDO
139     ENDDO
140     #endif
141    
142 jmc 1.19 C-- set ldd97_Lrho (for tapering scheme ldd97):
143 jmc 1.27 IF ( GM_taper_scheme.EQ.'ldd97' .OR.
144     & GM_taper_scheme.EQ.'fm07' ) THEN
145 jmc 1.19 Cspd = 2. _d 0
146     LrhoInf = 15. _d 3
147     LrhoSup = 100. _d 3
148     C- Tracer point location (center):
149     DO j=1-Oly,sNy+Oly
150     DO i=1-Olx,sNx+Olx
151     IF (fCori(i,j,bi,bj).NE.0.) THEN
152     ldd97_LrhoC(i,j) = Cspd/ABS(fCori(i,j,bi,bj))
153     ELSE
154     ldd97_LrhoC(i,j) = LrhoSup
155     ENDIF
156     ldd97_LrhoC(i,j) = MAX(LrhoInf,MIN(ldd97_LrhoC(i,j),LrhoSup))
157     ENDDO
158     ENDDO
159     C- U point location (West):
160     DO j=1-Oly,sNy+Oly
161 jmc 1.27 kLow_W(1-Olx,j) = 0
162 jmc 1.19 ldd97_LrhoW(1-Olx,j) = LrhoSup
163     DO i=1-Olx+1,sNx+Olx
164 jmc 1.27 kLow_W(i,j) = MIN(kLowC(i-1,j,bi,bj),kLowC(i,j,bi,bj))
165 jmc 1.19 fCoriLoc = op5*(fCori(i-1,j,bi,bj)+fCori(i,j,bi,bj))
166     IF (fCoriLoc.NE.0.) THEN
167     ldd97_LrhoW(i,j) = Cspd/ABS(fCoriLoc)
168     ELSE
169     ldd97_LrhoW(i,j) = LrhoSup
170     ENDIF
171     ldd97_LrhoW(i,j) = MAX(LrhoInf,MIN(ldd97_LrhoW(i,j),LrhoSup))
172     ENDDO
173     ENDDO
174     C- V point location (South):
175     DO i=1-Olx+1,sNx+Olx
176 jmc 1.27 kLow_S(i,1-Oly) = 0
177 jmc 1.19 ldd97_LrhoS(i,1-Oly) = LrhoSup
178     ENDDO
179     DO j=1-Oly+1,sNy+Oly
180     DO i=1-Olx,sNx+Olx
181 jmc 1.27 kLow_S(i,j) = MIN(kLowC(i,j-1,bi,bj),kLowC(i,j,bi,bj))
182 jmc 1.19 fCoriLoc = op5*(fCori(i,j-1,bi,bj)+fCori(i,j,bi,bj))
183     IF (fCoriLoc.NE.0.) THEN
184     ldd97_LrhoS(i,j) = Cspd/ABS(fCoriLoc)
185     ELSE
186     ldd97_LrhoS(i,j) = LrhoSup
187     ENDIF
188     ldd97_LrhoS(i,j) = MAX(LrhoInf,MIN(ldd97_LrhoS(i,j),LrhoSup))
189     ENDDO
190     ENDDO
191     ELSE
192     C- Just initialize to zero (not use anyway)
193     DO j=1-Oly,sNy+Oly
194     DO i=1-Olx,sNx+Olx
195     ldd97_LrhoC(i,j) = 0. _d 0
196     ldd97_LrhoW(i,j) = 0. _d 0
197     ldd97_LrhoS(i,j) = 0. _d 0
198     ENDDO
199     ENDDO
200     ENDIF
201 jmc 1.27
202 jmc 1.19 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
203 jmc 1.27 C-- 1rst loop on k : compute Tensor Coeff. at W points.
204    
205 heimbach 1.28 DO j=1-Oly,sNy+Oly
206     DO i=1-Olx,sNx+Olx
207     hTransLay(i,j) = R_low(i,j,bi,bj)
208     baseSlope(i,j) = 0. _d 0
209     recipLambda(i,j) = 0. _d 0
210     locMixLayer(i,j) = 0. _d 0
211     ENDDO
212     ENDDO
213 jmc 1.27 #ifdef ALLOW_KPP
214     IF ( useKPP ) THEN
215     DO j=1-Oly,sNy+Oly
216     DO i=1-Olx,sNx+Olx
217     locMixLayer(i,j) = KPPhbl(i,j,bi,bj)
218     ENDDO
219     ENDDO
220     ELSE
221     #else
222     IF ( .TRUE. ) THEN
223     #endif
224     DO j=1-Oly,sNy+Oly
225     DO i=1-Olx,sNx+Olx
226     locMixLayer(i,j) = hMixLayer(i,j,bi,bj)
227     ENDDO
228     ENDDO
229     ENDIF
230 jmc 1.19
231 jmc 1.27 DO k=Nr,2,-1
232 adcroft 1.1
233     #ifdef ALLOW_AUTODIFF_TAMC
234 heimbach 1.12 kkey = (igmkey-1)*Nr + k
235 heimbach 1.10 DO j=1-Oly,sNy+Oly
236     DO i=1-Olx,sNx+Olx
237     SlopeX(i,j) = 0. _d 0
238     SlopeY(i,j) = 0. _d 0
239 heimbach 1.12 dSigmaDx(i,j) = 0. _d 0
240     dSigmaDy(i,j) = 0. _d 0
241 jmc 1.19 dSigmaDr(i,j) = 0. _d 0
242 heimbach 1.10 SlopeSqr(i,j) = 0. _d 0
243     taperFct(i,j) = 0. _d 0
244     Kwx(i,j,k,bi,bj) = 0. _d 0
245     Kwy(i,j,k,bi,bj) = 0. _d 0
246     Kwz(i,j,k,bi,bj) = 0. _d 0
247 heimbach 1.12 # ifdef GM_NON_UNITY_DIAGONAL
248     Kux(i,j,k,bi,bj) = 0. _d 0
249     Kvy(i,j,k,bi,bj) = 0. _d 0
250     # endif
251     # ifdef GM_EXTRA_DIAGONAL
252     Kuz(i,j,k,bi,bj) = 0. _d 0
253     Kvz(i,j,k,bi,bj) = 0. _d 0
254     # endif
255     # ifdef GM_BOLUS_ADVEC
256     GM_PsiX(i,j,k,bi,bj) = 0. _d 0
257     GM_PsiY(i,j,k,bi,bj) = 0. _d 0
258     # endif
259 heimbach 1.10 ENDDO
260     ENDDO
261 adcroft 1.1 #endif
262 heimbach 1.10
263 jmc 1.26 DO j=1-Oly+1,sNy+Oly-1
264     DO i=1-Olx+1,sNx+Olx-1
265 adcroft 1.1 C Gradient of Sigma at rVel points
266 jmc 1.26 dSigmaDx(i,j)=op25*( sigmaX(i+1,j,k-1)+sigmaX(i,j,k-1)
267     & +sigmaX(i+1,j, k )+sigmaX(i,j, k )
268     & )*maskC(i,j,k,bi,bj)
269     dSigmaDy(i,j)=op25*( sigmaY(i,j+1,k-1)+sigmaY(i,j,k-1)
270     & +sigmaY(i,j+1, k )+sigmaY(i,j, k )
271     & )*maskC(i,j,k,bi,bj)
272     dSigmaDr(i,j)=sigmaR(i,j,k)
273     ENDDO
274 adcroft 1.1 ENDDO
275    
276 heimbach 1.10 #ifdef ALLOW_AUTODIFF_TAMC
277 heimbach 1.12 CADJ STORE dSigmaDx(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
278     CADJ STORE dSigmaDy(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
279 jmc 1.19 CADJ STORE dSigmaDr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
280 heimbach 1.28 CADJ STORE baseSlope(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
281     CADJ STORE hTransLay(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
282     CADJ STORE recipLambda(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
283 heimbach 1.10 #endif /* ALLOW_AUTODIFF_TAMC */
284    
285 jmc 1.26 #ifdef GM_VISBECK_VARIABLE_K
286     #ifndef OLD_VISBECK_CALC
287     IF ( GM_Visbeck_alpha.GT.0. .AND.
288     & -rC(k-1).LT.GM_Visbeck_depth ) THEN
289    
290     C-- Depth average of f/sqrt(Ri) = M^2/N^2 * N
291     C M^2 and N^2 are horizontal & vertical gradient of buoyancy.
292    
293     C Calculate terms for mean Richardson number which is used
294     C in the "variable K" parameterisaton:
295     C compute depth average from surface down to the bottom or
296     C GM_Visbeck_depth, whatever is the shallower.
297    
298     DO j=1-Oly+1,sNy+Oly-1
299     DO i=1-Olx+1,sNx+Olx-1
300     IF ( maskC(i,j,k,bi,bj).NE.0. ) THEN
301     integrDepth = -rC( kLowC(i,j,bi,bj) )
302     C- in 2 steps to avoid mix of RS & RL type in min fct. arguments
303     integrDepth = MIN( integrDepth, GM_Visbeck_depth )
304     C Distance between level center above and the integration depth
305     deltaH = integrDepth + rC(k-1)
306     C If negative then we are below the integration level
307     C (cannot be the case with 2 conditions on maskC & -rC(k-1))
308     C If positive we limit this to the distance from center above
309     deltaH = MIN( deltaH, drC(k) )
310     C Now we convert deltaH to a non-dimensional fraction
311     deltaH = deltaH/( integrDepth+rC(1) )
312    
313     C-- compute: ( M^2 * S )^1/2 (= M^2 / N since S=M^2/N^2 )
314     dSigmaH = dSigmaDx(i,j)*dSigmaDx(i,j)
315     & + dSigmaDy(i,j)*dSigmaDy(i,j)
316     IF ( dSigmaH .GT. 0. _d 0 ) THEN
317     dSigmaH = SQRT( dSigmaH )
318     C- compute slope, limited by GM_maxSlope:
319     IF ( -dSigmaDr(i,j).GT.dSigmaH*GM_rMaxSlope ) THEN
320     Sloc = dSigmaH / ( -dSigmaDr(i,j) )
321     ELSE
322     Sloc = GM_maxSlope
323     ENDIF
324     M2loc = Gravity*recip_RhoConst*dSigmaH
325     SNloc = SQRT( Sloc*M2loc )
326     ELSE
327     SNloc = 0. _d 0
328     ENDIF
329     VisbeckK(i,j,bi,bj) = VisbeckK(i,j,bi,bj)
330     & +deltaH*GM_Visbeck_alpha
331     & *GM_Visbeck_length*GM_Visbeck_length*SNloc
332     ENDIF
333     ENDDO
334     ENDDO
335     ENDIF
336     #endif /* ndef OLD_VISBECK_CALC */
337     #endif /* GM_VISBECK_VARIABLE_K */
338    
339 adcroft 1.1 C Calculate slopes for use in tensor, taper and/or clip
340 jmc 1.26 CALL GMREDI_SLOPE_LIMIT(
341 jmc 1.19 O SlopeX, SlopeY,
342 jmc 1.8 O SlopeSqr, taperFct,
343 jmc 1.27 U hTransLay, baseSlope, recipLambda,
344 jmc 1.19 U dSigmaDr,
345     I dSigmaDx, dSigmaDy,
346 jmc 1.27 I ldd97_LrhoC, locMixLayer, rF,
347     I kLowC(1-Olx,1-Oly,bi,bj),
348     I k, bi, bj, myTime, myIter, myThid )
349 adcroft 1.1
350 jmc 1.26 DO j=1-Oly+1,sNy+Oly-1
351     DO i=1-Olx+1,sNx+Olx-1
352     C Mask Iso-neutral slopes
353     SlopeX(i,j)=SlopeX(i,j)*maskC(i,j,k,bi,bj)
354     SlopeY(i,j)=SlopeY(i,j)*maskC(i,j,k,bi,bj)
355     SlopeSqr(i,j)=SlopeSqr(i,j)*maskC(i,j,k,bi,bj)
356     ENDDO
357 heimbach 1.10 ENDDO
358    
359     #ifdef ALLOW_AUTODIFF_TAMC
360 heimbach 1.16 CADJ STORE SlopeX(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
361     CADJ STORE SlopeY(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
362 heimbach 1.14 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
363 jmc 1.19 CADJ STORE dSigmaDr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
364     CADJ STORE taperFct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
365 heimbach 1.10 #endif /* ALLOW_AUTODIFF_TAMC */
366    
367 jmc 1.27 C Components of Redi/GM tensor
368 jmc 1.26 DO j=1-Oly+1,sNy+Oly-1
369     DO i=1-Olx+1,sNx+Olx-1
370 jmc 1.27 Kwx(i,j,k,bi,bj)= SlopeX(i,j)*taperFct(i,j)
371     Kwy(i,j,k,bi,bj)= SlopeY(i,j)*taperFct(i,j)
372     Kwz(i,j,k,bi,bj)= SlopeSqr(i,j)*taperFct(i,j)
373     ENDDO
374     ENDDO
375 adcroft 1.1
376     #ifdef GM_VISBECK_VARIABLE_K
377 jmc 1.26 #ifdef OLD_VISBECK_CALC
378 jmc 1.27 DO j=1-Oly+1,sNy+Oly-1
379     DO i=1-Olx+1,sNx+Olx-1
380 jmc 1.8
381 jmc 1.27 C- note (jmc) : moved here since only used in VISBECK_VARIABLE_K
382     C but do not know if *taperFct (or **2 ?) is necessary
383 heimbach 1.10 Ssq(i,j)=SlopeSqr(i,j)*taperFct(i,j)
384 jmc 1.8
385 adcroft 1.1 C-- Depth average of M^2/N^2 * N
386    
387     C Calculate terms for mean Richardson number
388     C which is used in the "variable K" parameterisaton.
389     C Distance between interface above layer and the integration depth
390     deltaH=abs(GM_Visbeck_depth)-abs(rF(k))
391     C If positive we limit this to the layer thickness
392     deltaH=min(deltaH,drF(k))
393     C If negative then we are below the integration level
394     deltaH=max(deltaH,zero_rs)
395     C Now we convert deltaH to a non-dimensional fraction
396     deltaH=deltaH/GM_Visbeck_depth
397    
398 jmc 1.8 IF (K.eq.2) VisbeckK(i,j,bi,bj)=0.
399 jmc 1.19 IF ( Ssq(i,j).NE.0. .AND. dSigmaDr(i,j).NE.0. ) THEN
400     N2= -Gravity*recip_RhoConst*dSigmaDr(i,j)
401 heimbach 1.10 SN=sqrt(Ssq(i,j)*N2)
402 heimbach 1.3 VisbeckK(i,j,bi,bj)=VisbeckK(i,j,bi,bj)+deltaH
403 adcroft 1.1 & *GM_Visbeck_alpha*GM_Visbeck_length*GM_Visbeck_length*SN
404 jmc 1.8 ENDIF
405 adcroft 1.1
406 jmc 1.27 ENDDO
407     ENDDO
408 jmc 1.26 #endif /* OLD_VISBECK_CALC */
409 jmc 1.9 #endif /* GM_VISBECK_VARIABLE_K */
410    
411     C-- end 1rst loop on vertical level index k
412     ENDDO
413    
414 adcroft 1.1
415 jmc 1.9 #ifdef GM_VISBECK_VARIABLE_K
416 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
417     CADJ STORE VisbeckK(:,:,bi,bj) = comlev1_bibj, key=igmkey, byte=isbyte
418     #endif
419 jmc 1.27 IF ( GM_Visbeck_alpha.GT.0. ) THEN
420 jmc 1.9 C- Limit range that KapGM can take
421     DO j=1-Oly+1,sNy+Oly-1
422     DO i=1-Olx+1,sNx+Olx-1
423     VisbeckK(i,j,bi,bj)=
424     & MIN(VisbeckK(i,j,bi,bj),GM_Visbeck_maxval_K)
425     ENDDO
426     ENDDO
427     ENDIF
428 heimbach 1.16 cph( NEW
429     #ifdef ALLOW_AUTODIFF_TAMC
430     CADJ STORE VisbeckK(:,:,bi,bj) = comlev1_bibj, key=igmkey, byte=isbyte
431     #endif
432     cph)
433 adcroft 1.1 #endif /* GM_VISBECK_VARIABLE_K */
434    
435 heimbach 1.29 C- express the Tensor in term of Diffusivity (= m**2 / s )
436     DO k=1,Nr
437 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
438     kkey = (igmkey-1)*Nr + k
439 heimbach 1.29 # if (defined (GM_NON_UNITY_DIAGONAL) || \
440 heimbach 1.16 defined (GM_VISBECK_VARIABLE_K))
441 heimbach 1.14 CADJ STORE Kwx(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
442     CADJ STORE Kwy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
443     CADJ STORE Kwz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
444 heimbach 1.29 # endif
445 heimbach 1.12 #endif
446 jmc 1.26 DO j=1-Oly+1,sNy+Oly-1
447     DO i=1-Olx+1,sNx+Olx-1
448 heimbach 1.25 #ifdef ALLOW_KAPGM_CONTROL
449 jmc 1.26 Kgm_tmp = GM_isopycK + GM_skewflx*kapgm(i,j,k,bi,bj)
450 heimbach 1.25 #else
451 jmc 1.26 Kgm_tmp = GM_isopycK + GM_skewflx*GM_background_K
452 heimbach 1.25 #endif
453 jmc 1.9 #ifdef GM_VISBECK_VARIABLE_K
454 jmc 1.26 & + VisbeckK(i,j,bi,bj)*(1. _d 0 + GM_skewflx)
455 jmc 1.9 #endif
456 jmc 1.26 Kwx(i,j,k,bi,bj)= Kgm_tmp*Kwx(i,j,k,bi,bj)
457     Kwy(i,j,k,bi,bj)= Kgm_tmp*Kwy(i,j,k,bi,bj)
458     Kwz(i,j,k,bi,bj)= ( GM_isopycK
459 adcroft 1.1 #ifdef GM_VISBECK_VARIABLE_K
460 jmc 1.26 & + VisbeckK(i,j,bi,bj)
461 adcroft 1.1 #endif
462 jmc 1.26 & )*Kwz(i,j,k,bi,bj)
463     ENDDO
464 adcroft 1.1 ENDDO
465 jmc 1.27 ENDDO
466    
467     #ifdef ALLOW_DIAGNOSTICS
468     IF ( useDiagnostics .AND. GM_taper_scheme.EQ.'fm07' ) THEN
469     CALL DIAGNOSTICS_FILL( hTransLay, 'GM_hTrsL', 0,1,2,bi,bj,myThid)
470     CALL DIAGNOSTICS_FILL( baseSlope, 'GM_baseS', 0,1,2,bi,bj,myThid)
471     CALL DIAGNOSTICS_FILL(recipLambda,'GM_rLamb', 0,1,2,bi,bj,myThid)
472     ENDIF
473     #endif /* ALLOW_DIAGNOSTICS */
474    
475 adcroft 1.4
476 jmc 1.9 #if ( defined (GM_NON_UNITY_DIAGONAL) || defined (GM_EXTRA_DIAGONAL) )
477 jmc 1.27 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
478     C-- 2nd k loop : compute Tensor Coeff. at U point
479    
480     #ifdef ALLOW_KPP
481     IF ( useKPP ) THEN
482     DO j=1-Oly,sNy+Oly
483     DO i=2-Olx,sNx+Olx
484     locMixLayer(i,j) = ( KPPhbl(i-1,j,bi,bj)
485     & + KPPhbl( i ,j,bi,bj) )*op5
486     ENDDO
487     ENDDO
488     ELSE
489     #else
490     IF ( .TRUE. ) THEN
491     #endif
492     DO j=1-Oly,sNy+Oly
493     DO i=2-Olx,sNx+Olx
494     locMixLayer(i,j) = ( hMixLayer(i-1,j,bi,bj)
495     & + hMixLayer( i ,j,bi,bj) )*op5
496     ENDDO
497     ENDDO
498     ENDIF
499     DO j=1-Oly,sNy+Oly
500     DO i=1-Olx,sNx+Olx
501     hTransLay(i,j) = 0.
502     baseSlope(i,j) = 0.
503     recipLambda(i,j)= 0.
504     ENDDO
505     DO i=2-Olx,sNx+Olx
506     hTransLay(i,j) = MAX( R_low(i-1,j,bi,bj), R_low(i,j,bi,bj) )
507     ENDDO
508     ENDDO
509    
510     DO k=Nr,1,-1
511     kp1 = MIN(Nr,k+1)
512     maskp1 = 1. _d 0
513     IF (k.GE.Nr) maskp1 = 0. _d 0
514 heimbach 1.29 #ifdef ALLOW_AUTODIFF_TAMC
515     kkey = (igmkey-1)*Nr + k
516     #endif
517 adcroft 1.1
518     C Gradient of Sigma at U points
519 jmc 1.26 DO j=1-Oly+1,sNy+Oly-1
520     DO i=1-Olx+1,sNx+Olx-1
521     dSigmaDx(i,j)=sigmaX(i,j,k)
522     & *_maskW(i,j,k,bi,bj)
523     dSigmaDy(i,j)=op25*( sigmaY(i-1,j+1,k)+sigmaY(i,j+1,k)
524     & +sigmaY(i-1, j ,k)+sigmaY(i, j ,k)
525     & )*_maskW(i,j,k,bi,bj)
526     dSigmaDr(i,j)=op25*( sigmaR(i-1,j, k )+sigmaR(i,j, k )
527     & +(sigmaR(i-1,j,kp1)+sigmaR(i,j,kp1))*maskp1
528     & )*_maskW(i,j,k,bi,bj)
529     ENDDO
530 adcroft 1.1 ENDDO
531    
532 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
533 heimbach 1.17 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
534 heimbach 1.12 CADJ STORE dSigmaDx(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
535     CADJ STORE dSigmaDy(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
536 heimbach 1.28 CADJ STORE dSigmaDr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
537     CADJ STORE locMixLayer(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
538     CADJ STORE baseSlope(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
539     CADJ STORE hTransLay(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
540     CADJ STORE recipLambda(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
541 heimbach 1.12 #endif /* ALLOW_AUTODIFF_TAMC */
542    
543 adcroft 1.1 C Calculate slopes for use in tensor, taper and/or clip
544 jmc 1.26 CALL GMREDI_SLOPE_LIMIT(
545 jmc 1.19 O SlopeX, SlopeY,
546 jmc 1.8 O SlopeSqr, taperFct,
547 jmc 1.27 U hTransLay, baseSlope, recipLambda,
548 jmc 1.19 U dSigmaDr,
549     I dSigmaDx, dSigmaDy,
550 jmc 1.27 I ldd97_LrhoW, locMixLayer, rC,
551     I kLow_W,
552     I k, bi, bj, myTime, myIter, myThid )
553 adcroft 1.1
554 heimbach 1.16 #ifdef ALLOW_AUTODIFF_TAMC
555 heimbach 1.17 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
556 jmc 1.19 CADJ STORE taperFct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
557 heimbach 1.16 #endif /* ALLOW_AUTODIFF_TAMC */
558    
559 jmc 1.9 #ifdef GM_NON_UNITY_DIAGONAL
560 jmc 1.26 c IF ( GM_nonUnitDiag ) THEN
561 jmc 1.9 DO j=1-Oly+1,sNy+Oly-1
562     DO i=1-Olx+1,sNx+Olx-1
563     Kux(i,j,k,bi,bj) =
564     & ( GM_isopycK
565     #ifdef GM_VISBECK_VARIABLE_K
566 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))
567 jmc 1.9 #endif
568 jmc 1.27 & )*taperFct(i,j)
569 heimbach 1.10 ENDDO
570     ENDDO
571 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
572 heimbach 1.16 # ifdef GM_EXCLUDE_CLIPPING
573 heimbach 1.12 CADJ STORE Kux(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
574     # endif
575     #endif
576 heimbach 1.10 DO j=1-Oly+1,sNy+Oly-1
577     DO i=1-Olx+1,sNx+Olx-1
578 jmc 1.9 Kux(i,j,k,bi,bj) = MAX( Kux(i,j,k,bi,bj), GM_Kmin_horiz )
579     ENDDO
580     ENDDO
581 jmc 1.26 c ENDIF
582 jmc 1.9 #endif /* GM_NON_UNITY_DIAGONAL */
583    
584     #ifdef GM_EXTRA_DIAGONAL
585 heimbach 1.12
586     #ifdef ALLOW_AUTODIFF_TAMC
587     CADJ STORE SlopeX(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
588     CADJ STORE taperFct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
589     #endif /* ALLOW_AUTODIFF_TAMC */
590 jmc 1.27 IF ( GM_ExtraDiag ) THEN
591 jmc 1.9 DO j=1-Oly+1,sNy+Oly-1
592     DO i=1-Olx+1,sNx+Olx-1
593     Kuz(i,j,k,bi,bj) =
594 heimbach 1.25 #ifdef ALLOW_KAPGM_CONTROL
595     & ( GM_isopycK - GM_skewflx*kapgm(i,j,k,bi,bj)
596     #else
597 jmc 1.9 & ( GM_isopycK - GM_skewflx*GM_background_K
598 heimbach 1.25 #endif
599 jmc 1.9 #ifdef GM_VISBECK_VARIABLE_K
600 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*GM_advect
601 jmc 1.9 #endif
602     & )*SlopeX(i,j)*taperFct(i,j)
603     ENDDO
604     ENDDO
605 jmc 1.26 ENDIF
606 jmc 1.9 #endif /* GM_EXTRA_DIAGONAL */
607 adcroft 1.1
608 jmc 1.22 #ifdef ALLOW_DIAGNOSTICS
609 jmc 1.26 IF (doDiagRediFlx) THEN
610 jmc 1.22 km1 = MAX(k-1,1)
611     DO j=1,sNy
612     DO i=1,sNx+1
613     C store in tmp1k Kuz_Redi
614     tmp1k(i,j) = ( GM_isopycK
615     #ifdef GM_VISBECK_VARIABLE_K
616     & +(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*0.5 _d 0
617     #endif
618     & )*SlopeX(i,j)*taperFct(i,j)
619     ENDDO
620     ENDDO
621     DO j=1,sNy
622     DO i=1,sNx+1
623     C- Vertical gradients interpolated to U points
624     dTdz = (
625     & +recip_drC(k)*
626     & ( maskC(i-1,j,k,bi,bj)*
627     & (theta(i-1,j,km1,bi,bj)-theta(i-1,j,k,bi,bj))
628     & +maskC( i ,j,k,bi,bj)*
629     & (theta( i ,j,km1,bi,bj)-theta( i ,j,k,bi,bj))
630     & )
631     & +recip_drC(kp1)*
632     & ( maskC(i-1,j,kp1,bi,bj)*
633     & (theta(i-1,j,k,bi,bj)-theta(i-1,j,kp1,bi,bj))
634     & +maskC( i ,j,kp1,bi,bj)*
635     & (theta( i ,j,k,bi,bj)-theta( i ,j,kp1,bi,bj))
636     & ) ) * 0.25 _d 0
637 heimbach 1.23 tmp1k(i,j) = dyG(i,j,bi,bj)*drF(k)
638     & * _hFacW(i,j,k,bi,bj)
639 jmc 1.22 & * tmp1k(i,j) * dTdz
640     ENDDO
641     ENDDO
642     CALL DIAGNOSTICS_FILL(tmp1k, 'GM_KuzTz', k,1,2,bi,bj,myThid)
643 jmc 1.26 ENDIF
644 jmc 1.22 #endif /* ALLOW_DIAGNOSTICS */
645    
646 jmc 1.27 C-- end 2nd loop on vertical level index k
647     ENDDO
648    
649     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
650     C-- 3rd k loop : compute Tensor Coeff. at V point
651    
652     #ifdef ALLOW_KPP
653     IF ( useKPP ) THEN
654     DO j=2-Oly,sNy+Oly
655     DO i=1-Olx,sNx+Olx
656     locMixLayer(i,j) = ( KPPhbl(i,j-1,bi,bj)
657     & + KPPhbl(i, j ,bi,bj) )*op5
658     ENDDO
659     ENDDO
660     ELSE
661     #else
662     IF ( .TRUE. ) THEN
663     #endif
664     DO j=2-Oly,sNy+Oly
665     DO i=1-Olx,sNx+Olx
666     locMixLayer(i,j) = ( hMixLayer(i,j-1,bi,bj)
667     & + hMixLayer(i, j ,bi,bj) )*op5
668     ENDDO
669     ENDDO
670     ENDIF
671     DO j=1-Oly,sNy+Oly
672     DO i=1-Olx,sNx+Olx
673     hTransLay(i,j) = 0.
674     baseSlope(i,j) = 0.
675     recipLambda(i,j)= 0.
676     ENDDO
677     ENDDO
678     DO j=2-Oly,sNy+Oly
679     DO i=1-Olx,sNx+Olx
680     hTransLay(i,j) = MAX( R_low(i,j-1,bi,bj), R_low(i,j,bi,bj) )
681     ENDDO
682     ENDDO
683    
684 adcroft 1.1 C Gradient of Sigma at V points
685 jmc 1.27 DO k=Nr,1,-1
686     kp1 = MIN(Nr,k+1)
687     maskp1 = 1. _d 0
688     IF (k.GE.Nr) maskp1 = 0. _d 0
689 heimbach 1.29 #ifdef ALLOW_AUTODIFF_TAMC
690     kkey = (igmkey-1)*Nr + k
691     #endif
692 jmc 1.27
693 jmc 1.26 DO j=1-Oly+1,sNy+Oly-1
694     DO i=1-Olx+1,sNx+Olx-1
695     dSigmaDx(i,j)=op25*( sigmaX(i, j ,k) +sigmaX(i+1, j ,k)
696     & +sigmaX(i,j-1,k) +sigmaX(i+1,j-1,k)
697     & )*_maskS(i,j,k,bi,bj)
698     dSigmaDy(i,j)=sigmaY(i,j,k)
699     & *_maskS(i,j,k,bi,bj)
700     dSigmaDr(i,j)=op25*( sigmaR(i,j-1, k )+sigmaR(i,j, k )
701     & +(sigmaR(i,j-1,kp1)+sigmaR(i,j,kp1))*maskp1
702     & )*_maskS(i,j,k,bi,bj)
703     ENDDO
704 adcroft 1.1 ENDDO
705    
706 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
707     CADJ STORE dSigmaDx(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
708     CADJ STORE dSigmaDy(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
709 heimbach 1.28 CADJ STORE dSigmaDr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
710     CADJ STORE baseSlope(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
711     CADJ STORE hTransLay(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
712     CADJ STORE recipLambda(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
713 heimbach 1.12 #endif /* ALLOW_AUTODIFF_TAMC */
714    
715 adcroft 1.1 C Calculate slopes for use in tensor, taper and/or clip
716 jmc 1.26 CALL GMREDI_SLOPE_LIMIT(
717 jmc 1.19 O SlopeX, SlopeY,
718 jmc 1.8 O SlopeSqr, taperFct,
719 jmc 1.27 U hTransLay, baseSlope, recipLambda,
720 jmc 1.19 U dSigmaDr,
721     I dSigmaDx, dSigmaDy,
722 jmc 1.27 I ldd97_LrhoS, locMixLayer, rC,
723     I kLow_S,
724     I k, bi, bj, myTime, myIter, myThid )
725 adcroft 1.1
726 heimbach 1.16 cph(
727     #ifdef ALLOW_AUTODIFF_TAMC
728     cph(
729     CADJ STORE taperfct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
730     cph)
731     #endif /* ALLOW_AUTODIFF_TAMC */
732     cph)
733    
734 jmc 1.9 #ifdef GM_NON_UNITY_DIAGONAL
735 jmc 1.26 c IF ( GM_nonUnitDiag ) THEN
736 jmc 1.9 DO j=1-Oly+1,sNy+Oly-1
737     DO i=1-Olx+1,sNx+Olx-1
738     Kvy(i,j,k,bi,bj) =
739     & ( GM_isopycK
740     #ifdef GM_VISBECK_VARIABLE_K
741 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))
742 jmc 1.9 #endif
743 jmc 1.27 & )*taperFct(i,j)
744 heimbach 1.10 ENDDO
745     ENDDO
746 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
747 heimbach 1.16 # ifdef GM_EXCLUDE_CLIPPING
748 heimbach 1.12 CADJ STORE Kvy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
749     # endif
750     #endif
751 heimbach 1.10 DO j=1-Oly+1,sNy+Oly-1
752     DO i=1-Olx+1,sNx+Olx-1
753 jmc 1.9 Kvy(i,j,k,bi,bj) = MAX( Kvy(i,j,k,bi,bj), GM_Kmin_horiz )
754     ENDDO
755     ENDDO
756 jmc 1.26 c ENDIF
757 jmc 1.9 #endif /* GM_NON_UNITY_DIAGONAL */
758    
759     #ifdef GM_EXTRA_DIAGONAL
760 heimbach 1.12
761     #ifdef ALLOW_AUTODIFF_TAMC
762     CADJ STORE SlopeY(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
763     CADJ STORE taperFct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
764     #endif /* ALLOW_AUTODIFF_TAMC */
765 jmc 1.27 IF ( GM_ExtraDiag ) THEN
766 jmc 1.9 DO j=1-Oly+1,sNy+Oly-1
767     DO i=1-Olx+1,sNx+Olx-1
768     Kvz(i,j,k,bi,bj) =
769 heimbach 1.25 #ifdef ALLOW_KAPGM_CONTROL
770     & ( GM_isopycK - GM_skewflx*kapgm(i,j,k,bi,bj)
771     #else
772 jmc 1.9 & ( GM_isopycK - GM_skewflx*GM_background_K
773 heimbach 1.25 #endif
774 jmc 1.9 #ifdef GM_VISBECK_VARIABLE_K
775 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*GM_advect
776 jmc 1.9 #endif
777     & )*SlopeY(i,j)*taperFct(i,j)
778     ENDDO
779     ENDDO
780 jmc 1.26 ENDIF
781 jmc 1.9 #endif /* GM_EXTRA_DIAGONAL */
782    
783 jmc 1.22 #ifdef ALLOW_DIAGNOSTICS
784 jmc 1.26 IF (doDiagRediFlx) THEN
785 jmc 1.22 c km1 = MAX(k-1,1)
786     DO j=1,sNy+1
787     DO i=1,sNx
788     C store in tmp1k Kvz_Redi
789     tmp1k(i,j) = ( GM_isopycK
790     #ifdef GM_VISBECK_VARIABLE_K
791     & +(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*0.5 _d 0
792     #endif
793     & )*SlopeY(i,j)*taperFct(i,j)
794     ENDDO
795     ENDDO
796     DO j=1,sNy+1
797     DO i=1,sNx
798     C- Vertical gradients interpolated to U points
799     dTdz = (
800     & +recip_drC(k)*
801     & ( maskC(i,j-1,k,bi,bj)*
802     & (theta(i,j-1,km1,bi,bj)-theta(i,j-1,k,bi,bj))
803     & +maskC(i, j ,k,bi,bj)*
804     & (theta(i, j ,km1,bi,bj)-theta(i, j ,k,bi,bj))
805     & )
806     & +recip_drC(kp1)*
807     & ( maskC(i,j-1,kp1,bi,bj)*
808     & (theta(i,j-1,k,bi,bj)-theta(i,j-1,kp1,bi,bj))
809     & +maskC(i, j ,kp1,bi,bj)*
810     & (theta(i, j ,k,bi,bj)-theta(i, j ,kp1,bi,bj))
811     & ) ) * 0.25 _d 0
812 heimbach 1.23 tmp1k(i,j) = dxG(i,j,bi,bj)*drF(k)
813     & * _hFacS(i,j,k,bi,bj)
814 jmc 1.22 & * tmp1k(i,j) * dTdz
815     ENDDO
816     ENDDO
817     CALL DIAGNOSTICS_FILL(tmp1k, 'GM_KvzTz', k,1,2,bi,bj,myThid)
818 jmc 1.26 ENDIF
819 jmc 1.22 #endif /* ALLOW_DIAGNOSTICS */
820    
821 jmc 1.27 C-- end 3rd loop on vertical level index k
822     ENDDO
823    
824 jmc 1.9 #endif /* GM_NON_UNITY_DIAGONAL || GM_EXTRA_DIAGONAL */
825    
826 adcroft 1.1
827 jmc 1.9 #ifdef GM_BOLUS_ADVEC
828     IF (GM_AdvForm) THEN
829 jmc 1.26 CALL GMREDI_CALC_PSI_B(
830 jmc 1.9 I bi, bj, iMin, iMax, jMin, jMax,
831     I sigmaX, sigmaY, sigmaR,
832 jmc 1.19 I ldd97_LrhoW, ldd97_LrhoS,
833 jmc 1.26 I myThid )
834 jmc 1.9 ENDIF
835     #endif
836 adcroft 1.1
837 jmc 1.19 #ifdef ALLOW_TIMEAVE
838     C-- Time-average
839     IF ( taveFreq.GT.0. ) THEN
840    
841     CALL TIMEAVE_CUMULATE( GM_Kwx_T, Kwx, Nr,
842     & deltaTclock, bi, bj, myThid )
843     CALL TIMEAVE_CUMULATE( GM_Kwy_T, Kwy, Nr,
844     & deltaTclock, bi, bj, myThid )
845     CALL TIMEAVE_CUMULATE( GM_Kwz_T, Kwz, Nr,
846     & deltaTclock, bi, bj, myThid )
847     #ifdef GM_VISBECK_VARIABLE_K
848     IF ( GM_Visbeck_alpha.NE.0. ) THEN
849     CALL TIMEAVE_CUMULATE( Visbeck_K_T, VisbeckK, 1,
850     & deltaTclock, bi, bj, myThid )
851     ENDIF
852     #endif
853     #ifdef GM_BOLUS_ADVEC
854     IF ( GM_AdvForm ) THEN
855     CALL TIMEAVE_CUMULATE( GM_PsiXtave, GM_PsiX, Nr,
856     & deltaTclock, bi, bj, myThid )
857     CALL TIMEAVE_CUMULATE( GM_PsiYtave, GM_PsiY, Nr,
858     & deltaTclock, bi, bj, myThid )
859     ENDIF
860     #endif
861     DO k=1,Nr
862     GM_TimeAve(k,bi,bj)=GM_TimeAve(k,bi,bj)+deltaTclock
863     ENDDO
864    
865     ENDIF
866     #endif /* ALLOW_TIMEAVE */
867    
868 jmc 1.20 #ifdef ALLOW_DIAGNOSTICS
869     IF ( useDiagnostics ) THEN
870 jmc 1.24 CALL GMREDI_DIAGNOSTICS_FILL(bi,bj,myThid)
871 jmc 1.20 ENDIF
872     #endif /* ALLOW_DIAGNOSTICS */
873    
874 adcroft 1.1 #endif /* ALLOW_GMREDI */
875    
876     RETURN
877     END
878 heimbach 1.2
879    
880     SUBROUTINE GMREDI_CALC_TENSOR_DUMMY(
881 jmc 1.27 I iMin, iMax, jMin, jMax,
882 heimbach 1.2 I sigmaX, sigmaY, sigmaR,
883 jmc 1.27 I bi, bj, myTime, myIter, myThid )
884 heimbach 1.2 C /==========================================================\
885     C | SUBROUTINE GMREDI_CALC_TENSOR |
886     C | o Calculate tensor elements for GM/Redi tensor. |
887     C |==========================================================|
888     C \==========================================================/
889     IMPLICIT NONE
890    
891     C == Global variables ==
892     #include "SIZE.h"
893     #include "EEPARAMS.h"
894     #include "GMREDI.h"
895    
896     C == Routine arguments ==
897     C
898     _RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
899     _RL sigmaY(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
900     _RL sigmaR(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
901 jmc 1.27 INTEGER iMin,iMax,jMin,jMax
902     INTEGER bi, bj
903     _RL myTime
904     INTEGER myIter
905 heimbach 1.2 INTEGER myThid
906     CEndOfInterface
907    
908 jmc 1.27 #ifdef ALLOW_GMREDI
909    
910 jmc 1.9 INTEGER i, j, k
911 heimbach 1.2
912 jmc 1.9 DO k=1,Nr
913     DO j=1-Oly+1,sNy+Oly-1
914     DO i=1-Olx+1,sNx+Olx-1
915     Kwx(i,j,k,bi,bj) = 0.0
916     Kwy(i,j,k,bi,bj) = 0.0
917     Kwz(i,j,k,bi,bj) = 0.0
918     ENDDO
919 heimbach 1.2 ENDDO
920     ENDDO
921     #endif /* ALLOW_GMREDI */
922    
923 jmc 1.9 RETURN
924     END

  ViewVC Help
Powered by ViewVC 1.1.22