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

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

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


Revision 1.38 - (show annotations) (download)
Wed Jan 12 16:02:37 2011 UTC (13 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62r
Changes since 1.37: +21 -13 lines
fix previous modif for Kwz and Redi diagnostics

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

  ViewVC Help
Powered by ViewVC 1.1.22