/[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.18 - (hide 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 edhill 1.18 C $Header: /u/u3/gcmpack/MITgcm/pkg/gmredi/gmredi_calc_tensor.F,v 1.17 2003/03/07 23:51:02 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 edhill 1.18 C but do not 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