/[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.17 - (hide annotations) (download)
Fri Mar 7 23:51:02 2003 UTC (21 years, 2 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint50c_post, checkpoint50c_pre, checkpoint51, checkpoint50, checkpoint50d_post, checkpoint50b_pre, checkpoint51d_post, checkpoint51b_pre, checkpoint50f_post, checkpoint50a_post, checkpoint50f_pre, branchpoint-genmake2, checkpoint51b_post, checkpoint51c_post, checkpoint50g_post, checkpoint50h_post, checkpoint50e_pre, checkpoint50i_post, checkpoint50e_post, checkpoint50d_pre, checkpoint51e_post, checkpoint51f_pre, checkpoint50b_post, checkpoint51a_post
Branch point for: branch-genmake2
Changes since 1.16: +3 -1 lines
Added more storing to avoid more recomp. in
kpp_routines.F, gmredi_calc_tensor.F

1 heimbach 1.17 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/gmredi_calc_tensor.F,v 1.7.4.4 2003/03/07 03:57:33 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.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 heimbach 1.17 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
284 heimbach 1.12 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 adcroft 1.1 C Calculate slopes for use in tensor, taper and/or clip
290     CALL GMREDI_SLOPE_LIMIT(
291 jmc 1.9 U dSigmadRReal,
292 heimbach 1.12 I rF(K),K,
293 adcroft 1.1 U SlopeX, SlopeY,
294 heimbach 1.12 U dSigmaDx, dSigmaDy,
295 jmc 1.8 O SlopeSqr, taperFct,
296 adcroft 1.1 I bi, bj, myThid )
297    
298 heimbach 1.16 cph( NEW
299     #ifdef ALLOW_AUTODIFF_TAMC
300     cph(
301 heimbach 1.17 CADJ STORE SlopeSqr(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
302 heimbach 1.16 CADJ STORE taperfct(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
303     cph)
304     #endif /* ALLOW_AUTODIFF_TAMC */
305     cph)
306    
307 jmc 1.9 #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 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))
314 jmc 1.9 #endif
315 heimbach 1.10 & )
316     & *taperFct(i,j)
317     ENDDO
318     ENDDO
319 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
320 heimbach 1.16 # ifdef GM_EXCLUDE_CLIPPING
321 heimbach 1.12 CADJ STORE Kux(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
322     # endif
323     #endif
324 heimbach 1.10 DO j=1-Oly+1,sNy+Oly-1
325     DO i=1-Olx+1,sNx+Olx-1
326 jmc 1.9 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 heimbach 1.12
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 jmc 1.9 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 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*GM_advect
344 jmc 1.9 #endif
345     & )*SlopeX(i,j)*taperFct(i,j)
346     ENDDO
347     ENDDO
348     ENDIF
349     #endif /* GM_EXTRA_DIAGONAL */
350 adcroft 1.1
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 heimbach 1.14 dSigmaDx(i,j)=op25*( sigmaX(i, j ,k) +sigmaX(i+1, j ,k)
355 adcroft 1.1 & +sigmaX(i,j-1,k) +sigmaX(i+1,j-1,k) )
356     & *_maskS(i,j,k,bi,bj)
357 heimbach 1.12 dSigmaDy(i,j)=sigmaY(i,j,k)
358 adcroft 1.1 & *_maskS(i,j,k,bi,bj)
359 heimbach 1.14 dSigmaDrReal(i,j)=op25*( sigmaR(i,j-1, k ) +sigmaR(i,j, k )
360 jmc 1.9 & +maskp1*(sigmaR(i,j-1,kp1) +sigmaR(i,j,kp1)) )
361 jmc 1.15 & *_maskS(i,j,k,bi,bj)
362 adcroft 1.1 ENDDO
363     ENDDO
364    
365 heimbach 1.12 #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 adcroft 1.1 C Calculate slopes for use in tensor, taper and/or clip
372     CALL GMREDI_SLOPE_LIMIT(
373 jmc 1.9 U dSigmadRReal,
374 heimbach 1.12 I rF(K),K,
375 adcroft 1.1 U SlopeX, SlopeY,
376 heimbach 1.12 U dSigmaDx, dSigmaDy,
377 jmc 1.8 O SlopeSqr, taperFct,
378 adcroft 1.1 I bi, bj, myThid )
379    
380 heimbach 1.16 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 jmc 1.9 #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 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))
395 jmc 1.9 #endif
396 heimbach 1.10 & )
397     & *taperFct(i,j)
398     ENDDO
399     ENDDO
400 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
401 heimbach 1.16 # ifdef GM_EXCLUDE_CLIPPING
402 heimbach 1.12 CADJ STORE Kvy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
403     # endif
404     #endif
405 heimbach 1.10 DO j=1-Oly+1,sNy+Oly-1
406     DO i=1-Olx+1,sNx+Olx-1
407 jmc 1.9 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 heimbach 1.12
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 jmc 1.9 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 heimbach 1.14 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*GM_advect
425 jmc 1.9 #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 adcroft 1.1 DO j=1-Oly+1,sNy+Oly-1
437     DO i=1-Olx+1,sNx+Olx-1
438 jmc 1.9 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 adcroft 1.1 ENDDO
445     ENDDO
446 jmc 1.9 GM_TimeAve(k,bi,bj)=GM_TimeAve(k,bi,bj)+deltaTclock
447     #endif /* ALLOW_TIMEAVE */
448 adcroft 1.1
449 jmc 1.9 C-- end 2nd loop on vertical level index k
450     ENDDO
451 adcroft 1.1
452    
453 jmc 1.9 #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 adcroft 1.1
462     #endif /* ALLOW_GMREDI */
463    
464     RETURN
465     END
466 heimbach 1.2
467    
468     SUBROUTINE GMREDI_CALC_TENSOR_DUMMY(
469 jmc 1.9 I bi, bj, iMin, iMax, jMin, jMax,
470 heimbach 1.2 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 jmc 1.9 INTEGER bi,bj,iMin,iMax,jMin,jMax
493 heimbach 1.2 INTEGER myThid
494     CEndOfInterface
495    
496 jmc 1.9 INTEGER i, j, k
497 heimbach 1.2
498     #ifdef ALLOW_GMREDI
499    
500 jmc 1.9 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 heimbach 1.2 ENDDO
508     ENDDO
509     #endif /* ALLOW_GMREDI */
510    
511 jmc 1.9 RETURN
512     END

  ViewVC Help
Powered by ViewVC 1.1.22