/[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.18 - (show annotations) (download)
Mon Sep 29 19:24:31 2003 UTC (20 years, 7 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint51k_post, checkpoint52l_pre, hrcube4, hrcube5, checkpoint52d_pre, checkpoint52j_pre, checkpoint51o_pre, checkpoint54d_post, checkpoint54e_post, checkpoint51l_post, checkpoint52l_post, checkpoint52k_post, checkpoint55, checkpoint54, checkpoint56, checkpoint53, checkpoint52, checkpoint52f_post, checkpoint54f_post, checkpoint51f_post, checkpoint51t_post, checkpoint51n_post, checkpoint55i_post, checkpoint52i_pre, hrcube_1, hrcube_2, hrcube_3, checkpoint51s_post, checkpoint55c_post, checkpoint51j_post, checkpoint52e_pre, checkpoint52e_post, checkpoint51n_pre, checkpoint53d_post, checkpoint52b_pre, checkpoint54b_post, checkpoint51l_pre, checkpoint52m_post, checkpoint55g_post, checkpoint51q_post, checkpoint52b_post, checkpoint52c_post, checkpoint51h_pre, checkpoint52f_pre, checkpoint55d_post, checkpoint54a_pre, checkpoint53c_post, checkpoint55d_pre, checkpoint55j_post, checkpoint54a_post, checkpoint55h_post, checkpoint51r_post, checkpoint51i_post, checkpoint55b_post, checkpoint53a_post, checkpoint55f_post, checkpoint52d_post, checkpoint53g_post, checkpoint52a_pre, checkpoint52i_post, checkpoint51i_pre, checkpoint52h_pre, checkpoint53f_post, checkpoint52j_post, branch-netcdf, checkpoint52n_post, checkpoint53b_pre, checkpoint55a_post, checkpoint51o_post, checkpoint53b_post, checkpoint52a_post, checkpoint51g_post, ecco_c52_e35, checkpoint51m_post, checkpoint53d_pre, checkpoint55e_post, checkpoint54c_post, checkpoint51p_post, checkpoint51u_post
Branch point for: branch-nonh, tg2-branch, netcdf-sm0, checkpoint51n_branch
Changes since 1.17: +2 -2 lines
 o convert all comments with single quotes (such as "can't", "don't", etc.)
     to unabbreviated form (eg. "do not") since these unmatched quotes
     tend to break the Fortran parser used to generate the HTML-ified
     code browser (see: http://mitgcm.org/dev_docs/code_reference/)

1 C $Header: /u/u3/gcmpack/MITgcm/pkg/gmredi/gmredi_calc_tensor.F,v 1.17 2003/03/07 23:51:02 heimbach Exp $
2 C $Name: $
3
4 #include "GMREDI_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE GMREDI_CALC_TENSOR(
8 I bi, bj, iMin, iMax, jMin, jMax,
9 I sigmaX, sigmaY, sigmaR,
10 I myThid )
11 C /==========================================================\
12 C | SUBROUTINE GMREDI_CALC_TENSOR |
13 C | o Calculate tensor elements for GM/Redi tensor. |
14 C |==========================================================|
15 C \==========================================================/
16 IMPLICIT NONE
17
18 C == Global variables ==
19 #include "SIZE.h"
20 #include "GRID.h"
21 #include "DYNVARS.h"
22 #include "EEPARAMS.h"
23 #include "PARAMS.h"
24 #include "GMREDI.h"
25 #include "GMREDI_DIAGS.h"
26
27 #ifdef ALLOW_AUTODIFF_TAMC
28 #include "tamc.h"
29 #include "tamc_keys.h"
30 #endif /* ALLOW_AUTODIFF_TAMC */
31
32 C == Routine arguments ==
33 C
34 _RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
35 _RL sigmaY(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
36 _RL sigmaR(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
37 INTEGER bi,bj,iMin,iMax,jMin,jMax
38 INTEGER myThid
39 CEndOfInterface
40
41 #ifdef ALLOW_GMREDI
42
43 C == Local variables ==
44 INTEGER i,j,k,kp1
45 _RL SlopeX(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
46 _RL SlopeY(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
47 _RL dSigmaDx(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
48 _RL dSigmaDy(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
49 _RL dSigmaDrReal(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
50 _RL SlopeSqr(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
51 _RL taperFct(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
52 _RL maskp1, Kgm_tmp
53
54 #ifdef GM_VISBECK_VARIABLE_K
55 _RL deltaH,zero_rs
56 PARAMETER(zero_rs=0.D0)
57 _RL N2,SN
58 _RL Ssq(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
59 #endif
60
61 #ifdef ALLOW_AUTODIFF_TAMC
62 act1 = bi - myBxLo(myThid)
63 max1 = myBxHi(myThid) - myBxLo(myThid) + 1
64 act2 = bj - myByLo(myThid)
65 max2 = myByHi(myThid) - myByLo(myThid) + 1
66 act3 = myThid - 1
67 max3 = nTx*nTy
68 act4 = ikey_dynamics - 1
69 igmkey = (act1 + 1) + act2*max1
70 & + act3*max1*max2
71 & + act4*max1*max2*max3
72 #endif /* ALLOW_AUTODIFF_TAMC */
73
74 #ifdef GM_VISBECK_VARIABLE_K
75 DO j=1-Oly,sNy+Oly
76 DO i=1-Olx,sNx+Olx
77 VisbeckK(i,j,bi,bj) = 0. _d 0
78 ENDDO
79 ENDDO
80 #endif
81
82 DO k=2,Nr
83 C-- 1rst loop on k : compute Tensor Coeff. at W points.
84
85 #ifdef ALLOW_AUTODIFF_TAMC
86 kkey = (igmkey-1)*Nr + k
87 DO j=1-Oly,sNy+Oly
88 DO i=1-Olx,sNx+Olx
89 SlopeX(i,j) = 0. _d 0
90 SlopeY(i,j) = 0. _d 0
91 dSigmaDx(i,j) = 0. _d 0
92 dSigmaDy(i,j) = 0. _d 0
93 dSigmaDrReal(i,j) = 0. _d 0
94 SlopeSqr(i,j) = 0. _d 0
95 taperFct(i,j) = 0. _d 0
96 Kwx(i,j,k,bi,bj) = 0. _d 0
97 Kwy(i,j,k,bi,bj) = 0. _d 0
98 Kwz(i,j,k,bi,bj) = 0. _d 0
99 # ifdef GM_NON_UNITY_DIAGONAL
100 Kux(i,j,k,bi,bj) = 0. _d 0
101 Kvy(i,j,k,bi,bj) = 0. _d 0
102 # endif
103 # ifdef GM_EXTRA_DIAGONAL
104 Kuz(i,j,k,bi,bj) = 0. _d 0
105 Kvz(i,j,k,bi,bj) = 0. _d 0
106 # endif
107 # ifdef GM_BOLUS_ADVEC
108 GM_PsiX(i,j,k,bi,bj) = 0. _d 0
109 GM_PsiY(i,j,k,bi,bj) = 0. _d 0
110 # endif
111 ENDDO
112 ENDDO
113 #endif
114
115 DO j=1-Oly+1,sNy+Oly-1
116 DO i=1-Olx+1,sNx+Olx-1
117 C Gradient of Sigma at rVel points
118 dSigmaDx(i,j)=op25*( sigmaX(i+1, j ,k-1) +sigmaX(i,j,k-1)
119 & +sigmaX(i+1, j , k ) +sigmaX(i,j, k ) )
120 & *maskC(i,j,k,bi,bj)
121 dSigmaDy(i,j)=op25*( sigmaY( i ,j+1,k-1) +sigmaY(i,j,k-1)
122 & +sigmaY( i ,j+1, k ) +sigmaY(i,j, k ) )
123 & *maskC(i,j,k,bi,bj)
124 dSigmaDrReal(i,j)=sigmaR(i,j,k)
125 ENDDO
126 ENDDO
127
128 #ifdef ALLOW_AUTODIFF_TAMC
129 CADJ STORE dSigmaDx(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
130 CADJ STORE dSigmaDy(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
131 CADJ STORE dsigmadrreal(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
132 #endif /* ALLOW_AUTODIFF_TAMC */
133
134 C Calculate slopes for use in tensor, taper and/or clip
135 CALL GMREDI_SLOPE_LIMIT(
136 U dSigmadRReal,
137 I rF(K),K,
138 U SlopeX, SlopeY,
139 U dSigmaDx, dSigmaDy,
140 O SlopeSqr, taperFct,
141 I bi, bj, myThid )
142
143 DO j=1-Oly+1,sNy+Oly-1
144 DO i=1-Olx+1,sNx+Olx-1
145
146 C Mask Iso-neutral slopes
147 SlopeX(i,j)=SlopeX(i,j)*maskC(i,j,k,bi,bj)
148 SlopeY(i,j)=SlopeY(i,j)*maskC(i,j,k,bi,bj)
149 SlopeSqr(i,j)=SlopeSqr(i,j)*maskC(i,j,k,bi,bj)
150
151 ENDDO
152 ENDDO
153
154 #ifdef ALLOW_AUTODIFF_TAMC
155 CADJ STORE SlopeX(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
156 CADJ STORE SlopeY(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
157 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
158 CADJ STORE dsigmadrreal(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
159 CADJ STORE taperfct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
160 #endif /* ALLOW_AUTODIFF_TAMC */
161
162 DO j=1-Oly+1,sNy+Oly-1
163 DO i=1-Olx+1,sNx+Olx-1
164
165 C Components of Redi/GM tensor
166 Kwx(i,j,k,bi,bj)= SlopeX(i,j)*taperFct(i,j)
167 Kwy(i,j,k,bi,bj)= SlopeY(i,j)*taperFct(i,j)
168 Kwz(i,j,k,bi,bj)= SlopeSqr(i,j)*taperFct(i,j)
169
170 #ifdef GM_VISBECK_VARIABLE_K
171
172 C- note (jmc) : moved here since only used in VISBECK_VARIABLE_K
173 C but do not know if *taperFct (or **2 ?) is necessary
174 Ssq(i,j)=SlopeSqr(i,j)*taperFct(i,j)
175
176 C-- Depth average of M^2/N^2 * N
177
178 C Calculate terms for mean Richardson number
179 C which is used in the "variable K" parameterisaton.
180 C Distance between interface above layer and the integration depth
181 deltaH=abs(GM_Visbeck_depth)-abs(rF(k))
182 C If positive we limit this to the layer thickness
183 deltaH=min(deltaH,drF(k))
184 C If negative then we are below the integration level
185 deltaH=max(deltaH,zero_rs)
186 C Now we convert deltaH to a non-dimensional fraction
187 deltaH=deltaH/GM_Visbeck_depth
188
189 IF (K.eq.2) VisbeckK(i,j,bi,bj)=0.
190 IF ( Ssq(i,j).NE.0. .AND. dSigmaDrReal(i,j).NE.0. ) THEN
191 N2= -Gravity*recip_RhoConst*dSigmaDrReal(i,j)
192 SN=sqrt(Ssq(i,j)*N2)
193 VisbeckK(i,j,bi,bj)=VisbeckK(i,j,bi,bj)+deltaH
194 & *GM_Visbeck_alpha*GM_Visbeck_length*GM_Visbeck_length*SN
195 ENDIF
196
197 #endif /* GM_VISBECK_VARIABLE_K */
198
199 ENDDO
200 ENDDO
201
202 C-- end 1rst loop on vertical level index k
203 ENDDO
204
205
206 #ifdef GM_VISBECK_VARIABLE_K
207 #ifdef ALLOW_AUTODIFF_TAMC
208 CADJ STORE VisbeckK(:,:,bi,bj) = comlev1_bibj, key=igmkey, byte=isbyte
209 #endif
210 IF ( GM_Visbeck_alpha.NE.0. ) THEN
211 C- Limit range that KapGM can take
212 DO j=1-Oly+1,sNy+Oly-1
213 DO i=1-Olx+1,sNx+Olx-1
214 VisbeckK(i,j,bi,bj)=
215 & MIN(VisbeckK(i,j,bi,bj),GM_Visbeck_maxval_K)
216 #ifdef ALLOW_TIMEAVE
217 Visbeck_K_T(i,j,bi,bj)=Visbeck_K_T(i,j,bi,bj)
218 & +VisbeckK(i,j,bi,bj)*deltaTclock
219 #endif
220 ENDDO
221 ENDDO
222 ENDIF
223 cph( NEW
224 #ifdef ALLOW_AUTODIFF_TAMC
225 CADJ STORE VisbeckK(:,:,bi,bj) = comlev1_bibj, key=igmkey, byte=isbyte
226 #endif
227 cph)
228 #endif /* GM_VISBECK_VARIABLE_K */
229
230
231 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
232
233 C-- 2nd loop on k : compute Tensor Coeff. at U,V levels.
234 DO k=1,Nr
235 kp1 = MIN(Nr,k+1)
236 maskp1 = 1. _d 0
237 IF (k.GE.Nr) maskp1 = 0. _d 0
238
239 #ifdef ALLOW_AUTODIFF_TAMC
240 kkey = (igmkey-1)*Nr + k
241 #if (defined (GM_NON_UNITY_DIAGONAL) || \
242 defined (GM_VISBECK_VARIABLE_K))
243 CADJ STORE Kwx(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
244 CADJ STORE Kwy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
245 CADJ STORE Kwz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
246 #endif
247 #endif
248
249 C- express the Tensor in term of Diffusivity (= m**2 / s )
250 DO j=1-Oly+1,sNy+Oly-1
251 DO i=1-Olx+1,sNx+Olx-1
252 Kgm_tmp = GM_isopycK + GM_skewflx*GM_background_K
253 #ifdef GM_VISBECK_VARIABLE_K
254 & + VisbeckK(i,j,bi,bj)*(1. _d 0 + GM_skewflx)
255 #endif
256 Kwx(i,j,k,bi,bj)= Kgm_tmp*Kwx(i,j,k,bi,bj)
257 Kwy(i,j,k,bi,bj)= Kgm_tmp*Kwy(i,j,k,bi,bj)
258 Kwz(i,j,k,bi,bj)= ( GM_isopycK
259 #ifdef GM_VISBECK_VARIABLE_K
260 & + VisbeckK(i,j,bi,bj)
261 #endif
262 & )*Kwz(i,j,k,bi,bj)
263 ENDDO
264 ENDDO
265
266 #if ( defined (GM_NON_UNITY_DIAGONAL) || defined (GM_EXTRA_DIAGONAL) )
267
268 C Gradient of Sigma at U points
269 DO j=1-Oly+1,sNy+Oly-1
270 DO i=1-Olx+1,sNx+Olx-1
271 dSigmaDx(i,j)=sigmaX(i,j,k)
272 & *_maskW(i,j,k,bi,bj)
273 dSigmaDy(i,j)=op25*( sigmaY(i-1,j+1,k) +sigmaY(i,j+1,k)
274 & +sigmaY(i-1, j ,k) +sigmaY(i, j ,k) )
275 & *_maskW(i,j,k,bi,bj)
276 dSigmaDrReal(i,j)=op25*( sigmaR(i-1,j, k ) +sigmaR(i,j, k )
277 & +maskp1*(sigmaR(i-1,j,kp1) +sigmaR(i,j,kp1)) )
278 & *_maskW(i,j,k,bi,bj)
279 ENDDO
280 ENDDO
281
282 #ifdef ALLOW_AUTODIFF_TAMC
283 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
284 CADJ STORE dSigmaDx(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
285 CADJ STORE dSigmaDy(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
286 CADJ STORE dsigmadrreal(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
287 #endif /* ALLOW_AUTODIFF_TAMC */
288
289 C Calculate slopes for use in tensor, taper and/or clip
290 CALL GMREDI_SLOPE_LIMIT(
291 U dSigmadRReal,
292 I rF(K),K,
293 U SlopeX, SlopeY,
294 U dSigmaDx, dSigmaDy,
295 O SlopeSqr, taperFct,
296 I bi, bj, myThid )
297
298 cph( NEW
299 #ifdef ALLOW_AUTODIFF_TAMC
300 cph(
301 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
302 CADJ STORE taperfct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
303 cph)
304 #endif /* ALLOW_AUTODIFF_TAMC */
305 cph)
306
307 #ifdef GM_NON_UNITY_DIAGONAL
308 DO j=1-Oly+1,sNy+Oly-1
309 DO i=1-Olx+1,sNx+Olx-1
310 Kux(i,j,k,bi,bj) =
311 & ( GM_isopycK
312 #ifdef GM_VISBECK_VARIABLE_K
313 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))
314 #endif
315 & )
316 & *taperFct(i,j)
317 ENDDO
318 ENDDO
319 #ifdef ALLOW_AUTODIFF_TAMC
320 # ifdef GM_EXCLUDE_CLIPPING
321 CADJ STORE Kux(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
322 # endif
323 #endif
324 DO j=1-Oly+1,sNy+Oly-1
325 DO i=1-Olx+1,sNx+Olx-1
326 Kux(i,j,k,bi,bj) = MAX( Kux(i,j,k,bi,bj), GM_Kmin_horiz )
327 ENDDO
328 ENDDO
329 #endif /* GM_NON_UNITY_DIAGONAL */
330
331 #ifdef GM_EXTRA_DIAGONAL
332
333 #ifdef ALLOW_AUTODIFF_TAMC
334 CADJ STORE SlopeX(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
335 CADJ STORE taperFct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
336 #endif /* ALLOW_AUTODIFF_TAMC */
337 IF (GM_ExtraDiag) THEN
338 DO j=1-Oly+1,sNy+Oly-1
339 DO i=1-Olx+1,sNx+Olx-1
340 Kuz(i,j,k,bi,bj) =
341 & ( GM_isopycK - GM_skewflx*GM_background_K
342 #ifdef GM_VISBECK_VARIABLE_K
343 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*GM_advect
344 #endif
345 & )*SlopeX(i,j)*taperFct(i,j)
346 ENDDO
347 ENDDO
348 ENDIF
349 #endif /* GM_EXTRA_DIAGONAL */
350
351 C Gradient of Sigma at V points
352 DO j=1-Oly+1,sNy+Oly-1
353 DO i=1-Olx+1,sNx+Olx-1
354 dSigmaDx(i,j)=op25*( sigmaX(i, j ,k) +sigmaX(i+1, j ,k)
355 & +sigmaX(i,j-1,k) +sigmaX(i+1,j-1,k) )
356 & *_maskS(i,j,k,bi,bj)
357 dSigmaDy(i,j)=sigmaY(i,j,k)
358 & *_maskS(i,j,k,bi,bj)
359 dSigmaDrReal(i,j)=op25*( sigmaR(i,j-1, k ) +sigmaR(i,j, k )
360 & +maskp1*(sigmaR(i,j-1,kp1) +sigmaR(i,j,kp1)) )
361 & *_maskS(i,j,k,bi,bj)
362 ENDDO
363 ENDDO
364
365 #ifdef ALLOW_AUTODIFF_TAMC
366 CADJ STORE dSigmaDx(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
367 CADJ STORE dSigmaDy(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
368 CADJ STORE dsigmadrreal(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
369 #endif /* ALLOW_AUTODIFF_TAMC */
370
371 C Calculate slopes for use in tensor, taper and/or clip
372 CALL GMREDI_SLOPE_LIMIT(
373 U dSigmadRReal,
374 I rF(K),K,
375 U SlopeX, SlopeY,
376 U dSigmaDx, dSigmaDy,
377 O SlopeSqr, taperFct,
378 I bi, bj, myThid )
379
380 cph(
381 #ifdef ALLOW_AUTODIFF_TAMC
382 cph(
383 CADJ STORE taperfct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
384 cph)
385 #endif /* ALLOW_AUTODIFF_TAMC */
386 cph)
387
388 #ifdef GM_NON_UNITY_DIAGONAL
389 DO j=1-Oly+1,sNy+Oly-1
390 DO i=1-Olx+1,sNx+Olx-1
391 Kvy(i,j,k,bi,bj) =
392 & ( GM_isopycK
393 #ifdef GM_VISBECK_VARIABLE_K
394 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))
395 #endif
396 & )
397 & *taperFct(i,j)
398 ENDDO
399 ENDDO
400 #ifdef ALLOW_AUTODIFF_TAMC
401 # ifdef GM_EXCLUDE_CLIPPING
402 CADJ STORE Kvy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
403 # endif
404 #endif
405 DO j=1-Oly+1,sNy+Oly-1
406 DO i=1-Olx+1,sNx+Olx-1
407 Kvy(i,j,k,bi,bj) = MAX( Kvy(i,j,k,bi,bj), GM_Kmin_horiz )
408 ENDDO
409 ENDDO
410 #endif /* GM_NON_UNITY_DIAGONAL */
411
412 #ifdef GM_EXTRA_DIAGONAL
413
414 #ifdef ALLOW_AUTODIFF_TAMC
415 CADJ STORE SlopeY(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
416 CADJ STORE taperFct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
417 #endif /* ALLOW_AUTODIFF_TAMC */
418 IF (GM_ExtraDiag) THEN
419 DO j=1-Oly+1,sNy+Oly-1
420 DO i=1-Olx+1,sNx+Olx-1
421 Kvz(i,j,k,bi,bj) =
422 & ( GM_isopycK - GM_skewflx*GM_background_K
423 #ifdef GM_VISBECK_VARIABLE_K
424 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*GM_advect
425 #endif
426 & )*SlopeY(i,j)*taperFct(i,j)
427 ENDDO
428 ENDDO
429 ENDIF
430 #endif /* GM_EXTRA_DIAGONAL */
431
432 #endif /* GM_NON_UNITY_DIAGONAL || GM_EXTRA_DIAGONAL */
433
434 #ifdef ALLOW_TIMEAVE
435 C-- Time-average
436 DO j=1-Oly+1,sNy+Oly-1
437 DO i=1-Olx+1,sNx+Olx-1
438 GM_Kwx_T(i,j,k,bi,bj)=GM_Kwx_T(i,j,k,bi,bj)
439 & +Kwx(i,j,k,bi,bj)*deltaTclock
440 GM_Kwy_T(i,j,k,bi,bj)=GM_Kwy_T(i,j,k,bi,bj)
441 & +Kwy(i,j,k,bi,bj)*deltaTclock
442 GM_Kwz_T(i,j,k,bi,bj)=GM_Kwz_T(i,j,k,bi,bj)
443 & +Kwz(i,j,k,bi,bj)*deltaTclock
444 ENDDO
445 ENDDO
446 GM_TimeAve(k,bi,bj)=GM_TimeAve(k,bi,bj)+deltaTclock
447 #endif /* ALLOW_TIMEAVE */
448
449 C-- end 2nd loop on vertical level index k
450 ENDDO
451
452
453 #ifdef GM_BOLUS_ADVEC
454 IF (GM_AdvForm) THEN
455 CALL GMREDI_CALC_PSI_B(
456 I bi, bj, iMin, iMax, jMin, jMax,
457 I sigmaX, sigmaY, sigmaR,
458 I myThid )
459 ENDIF
460 #endif
461
462 #endif /* ALLOW_GMREDI */
463
464 RETURN
465 END
466
467
468 SUBROUTINE GMREDI_CALC_TENSOR_DUMMY(
469 I bi, bj, iMin, iMax, jMin, jMax,
470 I sigmaX, sigmaY, sigmaR,
471 I myThid )
472 C /==========================================================\
473 C | SUBROUTINE GMREDI_CALC_TENSOR |
474 C | o Calculate tensor elements for GM/Redi tensor. |
475 C |==========================================================|
476 C \==========================================================/
477 IMPLICIT NONE
478
479 C == Global variables ==
480 #include "SIZE.h"
481 #include "GRID.h"
482 #include "DYNVARS.h"
483 #include "EEPARAMS.h"
484 #include "PARAMS.h"
485 #include "GMREDI.h"
486
487 C == Routine arguments ==
488 C
489 _RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
490 _RL sigmaY(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
491 _RL sigmaR(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
492 INTEGER bi,bj,iMin,iMax,jMin,jMax
493 INTEGER myThid
494 CEndOfInterface
495
496 INTEGER i, j, k
497
498 #ifdef ALLOW_GMREDI
499
500 DO k=1,Nr
501 DO j=1-Oly+1,sNy+Oly-1
502 DO i=1-Olx+1,sNx+Olx-1
503 Kwx(i,j,k,bi,bj) = 0.0
504 Kwy(i,j,k,bi,bj) = 0.0
505 Kwz(i,j,k,bi,bj) = 0.0
506 ENDDO
507 ENDDO
508 ENDDO
509 #endif /* ALLOW_GMREDI */
510
511 RETURN
512 END

  ViewVC Help
Powered by ViewVC 1.1.22