/[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.16 - (hide annotations) (download)
Tue Jan 21 19:34:13 2003 UTC (21 years, 4 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint48e_post, checkpoint48i_post, checkpoint48b_post, checkpoint48c_pre, checkpoint48d_pre, checkpoint48d_post, checkpoint48f_post, checkpoint48h_post, checkpoint48a_post, checkpoint47j_post, checkpoint48c_post, checkpoint48, checkpoint49, checkpoint48g_post
Changes since 1.15: +31 -5 lines
Yet more changes:
o adgmredi_calc_tensor
  avoiding all recomputation of gmredi_slope_limit
o adgmredi_x/y/rtransport
  added flag for excessive storing to avoid recomp. of
  u/v/rtans, dTdx/y/z
  -> this is not really necessary and very memory-consuming
o adgmredi_slope_psi:
  consistency with gmredi_slope_limit in treatment of GM_slopeSqCutoff
o gmredi_slope_limit
  re-activated full calculation of taperfct for case 'ac02'

1 heimbach 1.16 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/gmredi_calc_tensor.F,v 1.15 2003/01/12 21:35:27 jmc 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.15 INTEGER i,j,k,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 jmc 1.15 _RL maskp1, 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 adcroft 1.1
85     #ifdef ALLOW_AUTODIFF_TAMC
86 heimbach 1.12 kkey = (igmkey-1)*Nr + k
87 heimbach 1.10 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 heimbach 1.12 dSigmaDx(i,j) = 0. _d 0
92     dSigmaDy(i,j) = 0. _d 0
93 heimbach 1.10 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 heimbach 1.12 # 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 heimbach 1.10 ENDDO
112     ENDDO
113 adcroft 1.1 #endif
114 heimbach 1.10
115 adcroft 1.1 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 jmc 1.15 dSigmaDx(i,j)=op25*( sigmaX(i+1, j ,k-1) +sigmaX(i,j,k-1)
119 adcroft 1.1 & +sigmaX(i+1, j , k ) +sigmaX(i,j, k ) )
120 jmc 1.15 & *maskC(i,j,k,bi,bj)
121     dSigmaDy(i,j)=op25*( sigmaY( i ,j+1,k-1) +sigmaY(i,j,k-1)
122 adcroft 1.1 & +sigmaY( i ,j+1, k ) +sigmaY(i,j, k ) )
123 jmc 1.15 & *maskC(i,j,k,bi,bj)
124     dSigmaDrReal(i,j)=sigmaR(i,j,k)
125 adcroft 1.1 ENDDO
126     ENDDO
127    
128 heimbach 1.10 #ifdef ALLOW_AUTODIFF_TAMC
129 heimbach 1.12 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 heimbach 1.10 #endif /* ALLOW_AUTODIFF_TAMC */
133    
134 adcroft 1.1 C Calculate slopes for use in tensor, taper and/or clip
135     CALL GMREDI_SLOPE_LIMIT(
136 jmc 1.9 U dSigmadRReal,
137 heimbach 1.12 I rF(K),K,
138 adcroft 1.1 U SlopeX, SlopeY,
139 heimbach 1.12 U dSigmaDx, dSigmaDy,
140 jmc 1.8 O SlopeSqr, taperFct,
141 adcroft 1.1 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 jmc 1.15 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 heimbach 1.10
151     ENDDO
152     ENDDO
153    
154     #ifdef ALLOW_AUTODIFF_TAMC
155 heimbach 1.16 CADJ STORE SlopeX(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
156     CADJ STORE SlopeY(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
157 heimbach 1.14 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
158 heimbach 1.16 CADJ STORE dsigmadrreal(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
159     CADJ STORE taperfct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
160 heimbach 1.10 #endif /* ALLOW_AUTODIFF_TAMC */
161    
162     DO j=1-Oly+1,sNy+Oly-1
163     DO i=1-Olx+1,sNx+Olx-1
164 adcroft 1.1
165 jmc 1.9 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 jmc 1.8 Kwz(i,j,k,bi,bj)= SlopeSqr(i,j)*taperFct(i,j)
169 adcroft 1.1
170     #ifdef GM_VISBECK_VARIABLE_K
171 jmc 1.8
172     C- note (jmc) : moved here since only used in VISBECK_VARIABLE_K
173     C but don't know if *taperFct (or **2 ?) is necessary
174 heimbach 1.10 Ssq(i,j)=SlopeSqr(i,j)*taperFct(i,j)
175 jmc 1.8
176 adcroft 1.1 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 jmc 1.8 IF (K.eq.2) VisbeckK(i,j,bi,bj)=0.
190 heimbach 1.13 IF ( Ssq(i,j).NE.0. .AND. dSigmaDrReal(i,j).NE.0. ) THEN
191 mlosch 1.11 N2= -Gravity*recip_RhoConst*dSigmaDrReal(i,j)
192 heimbach 1.10 SN=sqrt(Ssq(i,j)*N2)
193 heimbach 1.3 VisbeckK(i,j,bi,bj)=VisbeckK(i,j,bi,bj)+deltaH
194 adcroft 1.1 & *GM_Visbeck_alpha*GM_Visbeck_length*GM_Visbeck_length*SN
195 jmc 1.8 ENDIF
196 adcroft 1.1
197 jmc 1.9 #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 adcroft 1.1
206 jmc 1.9 #ifdef GM_VISBECK_VARIABLE_K
207 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
208     CADJ STORE VisbeckK(:,:,bi,bj) = comlev1_bibj, key=igmkey, byte=isbyte
209     #endif
210 jmc 1.9 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 heimbach 1.16 cph( NEW
224     #ifdef ALLOW_AUTODIFF_TAMC
225     CADJ STORE VisbeckK(:,:,bi,bj) = comlev1_bibj, key=igmkey, byte=isbyte
226     #endif
227     cph)
228 adcroft 1.1 #endif /* GM_VISBECK_VARIABLE_K */
229    
230    
231 jmc 1.9 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
232 heimbach 1.10
233 jmc 1.9 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 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
240     kkey = (igmkey-1)*Nr + k
241 heimbach 1.16 #if (defined (GM_NON_UNITY_DIAGONAL) || \
242     defined (GM_VISBECK_VARIABLE_K))
243 heimbach 1.14 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 heimbach 1.12 #endif
247     #endif
248    
249 jmc 1.9 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 heimbach 1.16 & + VisbeckK(i,j,bi,bj)*(1. _d 0 + GM_skewflx)
255 jmc 1.9 #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 adcroft 1.1 #ifdef GM_VISBECK_VARIABLE_K
260 jmc 1.9 & + VisbeckK(i,j,bi,bj)
261 adcroft 1.1 #endif
262 jmc 1.9 & )*Kwz(i,j,k,bi,bj)
263 adcroft 1.1 ENDDO
264     ENDDO
265 adcroft 1.4
266 jmc 1.9 #if ( defined (GM_NON_UNITY_DIAGONAL) || defined (GM_EXTRA_DIAGONAL) )
267 adcroft 1.1
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 heimbach 1.12 dSigmaDx(i,j)=sigmaX(i,j,k)
272 adcroft 1.1 & *_maskW(i,j,k,bi,bj)
273 heimbach 1.14 dSigmaDy(i,j)=op25*( sigmaY(i-1,j+1,k) +sigmaY(i,j+1,k)
274 heimbach 1.12 & +sigmaY(i-1, j ,k) +sigmaY(i, j ,k) )
275 adcroft 1.1 & *_maskW(i,j,k,bi,bj)
276 heimbach 1.14 dSigmaDrReal(i,j)=op25*( sigmaR(i-1,j, k ) +sigmaR(i,j, k )
277 jmc 1.9 & +maskp1*(sigmaR(i-1,j,kp1) +sigmaR(i,j,kp1)) )
278 jmc 1.15 & *_maskW(i,j,k,bi,bj)
279 adcroft 1.1 ENDDO
280     ENDDO
281    
282 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
283     CADJ STORE dSigmaDx(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
284     CADJ STORE dSigmaDy(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
285     CADJ STORE dsigmadrreal(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
286     #endif /* ALLOW_AUTODIFF_TAMC */
287    
288 adcroft 1.1 C Calculate slopes for use in tensor, taper and/or clip
289     CALL GMREDI_SLOPE_LIMIT(
290 jmc 1.9 U dSigmadRReal,
291 heimbach 1.12 I rF(K),K,
292 adcroft 1.1 U SlopeX, SlopeY,
293 heimbach 1.12 U dSigmaDx, dSigmaDy,
294 jmc 1.8 O SlopeSqr, taperFct,
295 adcroft 1.1 I bi, bj, myThid )
296    
297 heimbach 1.16 cph( NEW
298     #ifdef ALLOW_AUTODIFF_TAMC
299     cph(
300     CADJ STORE taperfct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
301     cph)
302     #endif /* ALLOW_AUTODIFF_TAMC */
303     cph)
304    
305 jmc 1.9 #ifdef GM_NON_UNITY_DIAGONAL
306     DO j=1-Oly+1,sNy+Oly-1
307     DO i=1-Olx+1,sNx+Olx-1
308     Kux(i,j,k,bi,bj) =
309     & ( GM_isopycK
310     #ifdef GM_VISBECK_VARIABLE_K
311 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))
312 jmc 1.9 #endif
313 heimbach 1.10 & )
314     & *taperFct(i,j)
315     ENDDO
316     ENDDO
317 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
318 heimbach 1.16 # ifdef GM_EXCLUDE_CLIPPING
319 heimbach 1.12 CADJ STORE Kux(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
320     # endif
321     #endif
322 heimbach 1.10 DO j=1-Oly+1,sNy+Oly-1
323     DO i=1-Olx+1,sNx+Olx-1
324 jmc 1.9 Kux(i,j,k,bi,bj) = MAX( Kux(i,j,k,bi,bj), GM_Kmin_horiz )
325     ENDDO
326     ENDDO
327     #endif /* GM_NON_UNITY_DIAGONAL */
328    
329     #ifdef GM_EXTRA_DIAGONAL
330 heimbach 1.12
331     #ifdef ALLOW_AUTODIFF_TAMC
332     CADJ STORE SlopeX(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
333     CADJ STORE taperFct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
334     #endif /* ALLOW_AUTODIFF_TAMC */
335 jmc 1.9 IF (GM_ExtraDiag) THEN
336     DO j=1-Oly+1,sNy+Oly-1
337     DO i=1-Olx+1,sNx+Olx-1
338     Kuz(i,j,k,bi,bj) =
339     & ( GM_isopycK - GM_skewflx*GM_background_K
340     #ifdef GM_VISBECK_VARIABLE_K
341 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*GM_advect
342 jmc 1.9 #endif
343     & )*SlopeX(i,j)*taperFct(i,j)
344     ENDDO
345     ENDDO
346     ENDIF
347     #endif /* GM_EXTRA_DIAGONAL */
348 adcroft 1.1
349     C Gradient of Sigma at V points
350     DO j=1-Oly+1,sNy+Oly-1
351     DO i=1-Olx+1,sNx+Olx-1
352 heimbach 1.14 dSigmaDx(i,j)=op25*( sigmaX(i, j ,k) +sigmaX(i+1, j ,k)
353 adcroft 1.1 & +sigmaX(i,j-1,k) +sigmaX(i+1,j-1,k) )
354     & *_maskS(i,j,k,bi,bj)
355 heimbach 1.12 dSigmaDy(i,j)=sigmaY(i,j,k)
356 adcroft 1.1 & *_maskS(i,j,k,bi,bj)
357 heimbach 1.14 dSigmaDrReal(i,j)=op25*( sigmaR(i,j-1, k ) +sigmaR(i,j, k )
358 jmc 1.9 & +maskp1*(sigmaR(i,j-1,kp1) +sigmaR(i,j,kp1)) )
359 jmc 1.15 & *_maskS(i,j,k,bi,bj)
360 adcroft 1.1 ENDDO
361     ENDDO
362    
363 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
364     CADJ STORE dSigmaDx(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
365     CADJ STORE dSigmaDy(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
366     CADJ STORE dsigmadrreal(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
367     #endif /* ALLOW_AUTODIFF_TAMC */
368    
369 adcroft 1.1 C Calculate slopes for use in tensor, taper and/or clip
370     CALL GMREDI_SLOPE_LIMIT(
371 jmc 1.9 U dSigmadRReal,
372 heimbach 1.12 I rF(K),K,
373 adcroft 1.1 U SlopeX, SlopeY,
374 heimbach 1.12 U dSigmaDx, dSigmaDy,
375 jmc 1.8 O SlopeSqr, taperFct,
376 adcroft 1.1 I bi, bj, myThid )
377    
378 heimbach 1.16 cph(
379     #ifdef ALLOW_AUTODIFF_TAMC
380     cph(
381     CADJ STORE taperfct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
382     cph)
383     #endif /* ALLOW_AUTODIFF_TAMC */
384     cph)
385    
386 jmc 1.9 #ifdef GM_NON_UNITY_DIAGONAL
387     DO j=1-Oly+1,sNy+Oly-1
388     DO i=1-Olx+1,sNx+Olx-1
389     Kvy(i,j,k,bi,bj) =
390     & ( GM_isopycK
391     #ifdef GM_VISBECK_VARIABLE_K
392 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))
393 jmc 1.9 #endif
394 heimbach 1.10 & )
395     & *taperFct(i,j)
396     ENDDO
397     ENDDO
398 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
399 heimbach 1.16 # ifdef GM_EXCLUDE_CLIPPING
400 heimbach 1.12 CADJ STORE Kvy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
401     # endif
402     #endif
403 heimbach 1.10 DO j=1-Oly+1,sNy+Oly-1
404     DO i=1-Olx+1,sNx+Olx-1
405 jmc 1.9 Kvy(i,j,k,bi,bj) = MAX( Kvy(i,j,k,bi,bj), GM_Kmin_horiz )
406     ENDDO
407     ENDDO
408     #endif /* GM_NON_UNITY_DIAGONAL */
409    
410     #ifdef GM_EXTRA_DIAGONAL
411 heimbach 1.12
412     #ifdef ALLOW_AUTODIFF_TAMC
413     CADJ STORE SlopeY(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
414     CADJ STORE taperFct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
415     #endif /* ALLOW_AUTODIFF_TAMC */
416 jmc 1.9 IF (GM_ExtraDiag) THEN
417     DO j=1-Oly+1,sNy+Oly-1
418     DO i=1-Olx+1,sNx+Olx-1
419     Kvz(i,j,k,bi,bj) =
420     & ( GM_isopycK - GM_skewflx*GM_background_K
421     #ifdef GM_VISBECK_VARIABLE_K
422 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*GM_advect
423 jmc 1.9 #endif
424     & )*SlopeY(i,j)*taperFct(i,j)
425     ENDDO
426     ENDDO
427     ENDIF
428     #endif /* GM_EXTRA_DIAGONAL */
429    
430     #endif /* GM_NON_UNITY_DIAGONAL || GM_EXTRA_DIAGONAL */
431    
432     #ifdef ALLOW_TIMEAVE
433     C-- Time-average
434 adcroft 1.1 DO j=1-Oly+1,sNy+Oly-1
435     DO i=1-Olx+1,sNx+Olx-1
436 jmc 1.9 GM_Kwx_T(i,j,k,bi,bj)=GM_Kwx_T(i,j,k,bi,bj)
437     & +Kwx(i,j,k,bi,bj)*deltaTclock
438     GM_Kwy_T(i,j,k,bi,bj)=GM_Kwy_T(i,j,k,bi,bj)
439     & +Kwy(i,j,k,bi,bj)*deltaTclock
440     GM_Kwz_T(i,j,k,bi,bj)=GM_Kwz_T(i,j,k,bi,bj)
441     & +Kwz(i,j,k,bi,bj)*deltaTclock
442 adcroft 1.1 ENDDO
443     ENDDO
444 jmc 1.9 GM_TimeAve(k,bi,bj)=GM_TimeAve(k,bi,bj)+deltaTclock
445     #endif /* ALLOW_TIMEAVE */
446 adcroft 1.1
447 jmc 1.9 C-- end 2nd loop on vertical level index k
448     ENDDO
449 adcroft 1.1
450    
451 jmc 1.9 #ifdef GM_BOLUS_ADVEC
452     IF (GM_AdvForm) THEN
453     CALL GMREDI_CALC_PSI_B(
454     I bi, bj, iMin, iMax, jMin, jMax,
455     I sigmaX, sigmaY, sigmaR,
456     I myThid )
457     ENDIF
458     #endif
459 adcroft 1.1
460     #endif /* ALLOW_GMREDI */
461    
462     RETURN
463     END
464 heimbach 1.2
465    
466     SUBROUTINE GMREDI_CALC_TENSOR_DUMMY(
467 jmc 1.9 I bi, bj, iMin, iMax, jMin, jMax,
468 heimbach 1.2 I sigmaX, sigmaY, sigmaR,
469     I myThid )
470     C /==========================================================\
471     C | SUBROUTINE GMREDI_CALC_TENSOR |
472     C | o Calculate tensor elements for GM/Redi tensor. |
473     C |==========================================================|
474     C \==========================================================/
475     IMPLICIT NONE
476    
477     C == Global variables ==
478     #include "SIZE.h"
479     #include "GRID.h"
480     #include "DYNVARS.h"
481     #include "EEPARAMS.h"
482     #include "PARAMS.h"
483     #include "GMREDI.h"
484    
485     C == Routine arguments ==
486     C
487     _RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
488     _RL sigmaY(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
489     _RL sigmaR(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
490 jmc 1.9 INTEGER bi,bj,iMin,iMax,jMin,jMax
491 heimbach 1.2 INTEGER myThid
492     CEndOfInterface
493    
494 jmc 1.9 INTEGER i, j, k
495 heimbach 1.2
496     #ifdef ALLOW_GMREDI
497    
498 jmc 1.9 DO k=1,Nr
499     DO j=1-Oly+1,sNy+Oly-1
500     DO i=1-Olx+1,sNx+Olx-1
501     Kwx(i,j,k,bi,bj) = 0.0
502     Kwy(i,j,k,bi,bj) = 0.0
503     Kwz(i,j,k,bi,bj) = 0.0
504     ENDDO
505 heimbach 1.2 ENDDO
506     ENDDO
507     #endif /* ALLOW_GMREDI */
508    
509 jmc 1.9 RETURN
510     END

  ViewVC Help
Powered by ViewVC 1.1.22