/[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.14 - (hide annotations) (download)
Fri Jan 10 00:48:39 2003 UTC (21 years, 4 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint47g_post, checkpoint47h_post
Changes since 1.13: +20 -32 lines
Here they are, before they get changed/lost/stolen.
Mostly modif.'s to fix numerical sensitivities.
Gradient checks OK for
- GM_taper_scheme:
  * clipping
  * ac02
  * linear
  * glw91
  * dm95
  * ldd97
- GMREDI_OPTIONS:
  * GM_VISBECK_VARIABLE_K
  * GM_NON_UNITY_DIAGONAL
  * GM_EXTRA_DIAGONAL
  * GM_BOLUS_ADVEC
in conjunction with data.gmredi parameters to be checked in
in a few minutes under verification/carbon/code/

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

  ViewVC Help
Powered by ViewVC 1.1.22