/[MITgcm]/MITgcm/pkg/gmredi/gmredi_calc_tensor.F
ViewVC logotype

Diff of /MITgcm/pkg/gmredi/gmredi_calc_tensor.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.9 by jmc, Sun Dec 16 18:54:49 2001 UTC revision 1.16 by heimbach, Tue Jan 21 19:34:13 2003 UTC
# Line 24  C     == Global variables == Line 24  C     == Global variables ==
24  #include "GMREDI.h"  #include "GMREDI.h"
25  #include "GMREDI_DIAGS.h"  #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 ==  C     == Routine arguments ==
33  C  C
34        _RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)        _RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
# Line 36  CEndOfInterface Line 41  CEndOfInterface
41  #ifdef ALLOW_GMREDI  #ifdef ALLOW_GMREDI
42    
43  C     == Local variables ==  C     == Local variables ==
44        INTEGER i,j,k,km1,kp1        INTEGER i,j,k,kp1
45        _RL SlopeX(1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _RL SlopeX(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
46        _RL SlopeY(1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _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)        _RL dSigmaDrReal(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
50        _RL SlopeSqr(1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _RL SlopeSqr(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
51        _RL taperFct(1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _RL taperFct(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
52        _RL maskp1, Kgm_tmp        _RL maskp1, Kgm_tmp
53    
54  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
55        _RS deltaH,zero_rs        _RL deltaH,zero_rs
56        PARAMETER(zero_rs=0.)        PARAMETER(zero_rs=0.D0)
57        _RL N2,SN        _RL N2,SN
58        _RL Ssq        _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  #endif
81    
82        DO k=2,Nr        DO k=2,Nr
83  C-- 1rst loop on k : compute Tensor Coeff. at W points.  C-- 1rst loop on k : compute Tensor Coeff. at W points.
 c      km1 = MAX(1,k-1)  
84    
85  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
86  !HPF$ INDEPENDENT         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  #endif
114    
115        DO j=1-Oly+1,sNy+Oly-1        DO j=1-Oly+1,sNy+Oly-1
 #ifdef ALLOW_AUTODIFF_TAMC  
 !HPF$ INDEPENDENT  
 #endif  
116         DO i=1-Olx+1,sNx+Olx-1         DO i=1-Olx+1,sNx+Olx-1
   
117  C      Gradient of Sigma at rVel points  C      Gradient of Sigma at rVel points
118          SlopeX(i,j)=0.25*( sigmaX(i+1, j ,k-1) +sigmaX(i,j,k-1)          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 ) )       &                    +sigmaX(i+1, j , k ) +sigmaX(i,j, k ) )
120       &                  *maskC(i,j,k,bi,bj)       &                  *maskC(i,j,k,bi,bj)
121          SlopeY(i,j)=0.25*( sigmaY( i ,j+1,k-1) +sigmaY(i,j,k-1)          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 ) )       &                    +sigmaY( i ,j+1, k ) +sigmaY(i,j, k ) )
123       &                  *maskC(i,j,k,bi,bj)       &                  *maskC(i,j,k,bi,bj)
124          dSigmaDrReal(i,j)=sigmaR(i,j,k)          dSigmaDrReal(i,j)=sigmaR(i,j,k)
   
125         ENDDO         ENDDO
126        ENDDO        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  C     Calculate slopes for use in tensor, taper and/or clip
135        CALL GMREDI_SLOPE_LIMIT(        CALL GMREDI_SLOPE_LIMIT(
136       U             dSigmadRReal,       U             dSigmadRReal,
137       I             rF(K),       I             rF(K),K,
138       U             SlopeX, SlopeY,       U             SlopeX, SlopeY,
139         U             dSigmaDx, dSigmaDy,
140       O             SlopeSqr, taperFct,       O             SlopeSqr, taperFct,
141       I             bi, bj, myThid )       I             bi, bj, myThid )
142    
# Line 91  C       Mask Iso-neutral slopes Line 147  C       Mask Iso-neutral slopes
147          SlopeX(i,j)=SlopeX(i,j)*maskC(i,j,k,bi,bj)          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)          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)          SlopeSqr(i,j)=SlopeSqr(i,j)*maskC(i,j,k,bi,bj)
150  c       Ssq=SlopeX(i,j)*SlopeX(i,j)+SlopeY(i,j)*SlopeY(i,j)  
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  C       Components of Redi/GM tensor
166          Kwx(i,j,k,bi,bj)= SlopeX(i,j)*taperFct(i,j)          Kwx(i,j,k,bi,bj)= SlopeX(i,j)*taperFct(i,j)
# Line 102  C       Components of Redi/GM tensor Line 171  C       Components of Redi/GM tensor
171    
172  C- note (jmc) : moved here since only used in VISBECK_VARIABLE_K  C- note (jmc) : moved here since only used in VISBECK_VARIABLE_K
173  C           but don't know if *taperFct (or **2 ?) is necessary  C           but don't know if *taperFct (or **2 ?) is necessary
174          Ssq=SlopeSqr(i,j)*taperFct(i,j)          Ssq(i,j)=SlopeSqr(i,j)*taperFct(i,j)
175    
176  C--     Depth average of M^2/N^2 * N  C--     Depth average of M^2/N^2 * N
177    
# Line 118  C       Now we convert deltaH to a non-d Line 187  C       Now we convert deltaH to a non-d
187          deltaH=deltaH/GM_Visbeck_depth          deltaH=deltaH/GM_Visbeck_depth
188    
189          IF (K.eq.2) VisbeckK(i,j,bi,bj)=0.          IF (K.eq.2) VisbeckK(i,j,bi,bj)=0.
190          IF (Ssq.NE.0.) THEN          IF ( Ssq(i,j).NE.0. .AND. dSigmaDrReal(i,j).NE.0. ) THEN
191           N2= -Gravity*recip_Rhonil*dSigmaDrReal(i,j)           N2= -Gravity*recip_RhoConst*dSigmaDrReal(i,j)
192           SN=sqrt(Ssq*N2)           SN=sqrt(Ssq(i,j)*N2)
193           VisbeckK(i,j,bi,bj)=VisbeckK(i,j,bi,bj)+deltaH           VisbeckK(i,j,bi,bj)=VisbeckK(i,j,bi,bj)+deltaH
194       &      *GM_Visbeck_alpha*GM_Visbeck_length*GM_Visbeck_length*SN       &      *GM_Visbeck_alpha*GM_Visbeck_length*GM_Visbeck_length*SN
195          ENDIF          ENDIF
# Line 135  C-- end 1rst loop on vertical level inde Line 204  C-- end 1rst loop on vertical level inde
204    
205    
206  #ifdef GM_VISBECK_VARIABLE_K  #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        IF ( GM_Visbeck_alpha.NE.0. ) THEN
211  C-     Limit range that KapGM can take  C-     Limit range that KapGM can take
212         DO j=1-Oly+1,sNy+Oly-1         DO j=1-Oly+1,sNy+Oly-1
# Line 148  C-     Limit range that KapGM can take Line 220  C-     Limit range that KapGM can take
220          ENDDO          ENDDO
221         ENDDO         ENDDO
222        ENDIF        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 */  #endif /* GM_VISBECK_VARIABLE_K */
229    
230    
231  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
232    
233  C-- 2nd loop on k : compute Tensor Coeff. at U,V levels.  C-- 2nd loop on k : compute Tensor Coeff. at U,V levels.
234        DO k=1,Nr        DO k=1,Nr
235         kp1 = MIN(Nr,k+1)         kp1 = MIN(Nr,k+1)
236         maskp1 = 1. _d 0         maskp1 = 1. _d 0
237         IF (k.GE.Nr) maskp1 = 0. _d 0         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 )  C-    express the Tensor in term of Diffusivity (= m**2 / s )
250        DO j=1-Oly+1,sNy+Oly-1        DO j=1-Oly+1,sNy+Oly-1
251         DO i=1-Olx+1,sNx+Olx-1         DO i=1-Olx+1,sNx+Olx-1
252          Kgm_tmp = GM_isopycK + GM_skewflx*GM_background_K          Kgm_tmp = GM_isopycK + GM_skewflx*GM_background_K
253  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
254       &          + VisbeckK(i,j,bi,bj)*(1.+GM_skewflx)           &          + VisbeckK(i,j,bi,bj)*(1. _d 0 + GM_skewflx)    
255  #endif  #endif
256          Kwx(i,j,k,bi,bj)= Kgm_tmp*Kwx(i,j,k,bi,bj)          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)          Kwy(i,j,k,bi,bj)= Kgm_tmp*Kwy(i,j,k,bi,bj)
# Line 180  C-    express the Tensor in term of Diff Line 268  C-    express the Tensor in term of Diff
268  C     Gradient of Sigma at U points  C     Gradient of Sigma at U points
269        DO j=1-Oly+1,sNy+Oly-1        DO j=1-Oly+1,sNy+Oly-1
270         DO i=1-Olx+1,sNx+Olx-1         DO i=1-Olx+1,sNx+Olx-1
271          SlopeX(i,j)=sigmaX(i,j,k)          dSigmaDx(i,j)=sigmaX(i,j,k)
272       &          *_maskW(i,j,k,bi,bj)       &          *_maskW(i,j,k,bi,bj)
273          SlopeY(i,j)=0.25*( sigmaY(i-1,j+1,k) +sigmaY(i,j+1,k)          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) )       &                      +sigmaY(i-1, j ,k) +sigmaY(i, j ,k) )
275       &          *_maskW(i,j,k,bi,bj)       &          *_maskW(i,j,k,bi,bj)
276          dSigmaDrReal(i,j)=0.25*( sigmaR(i-1,j, k ) +sigmaR(i,j, k )          dSigmaDrReal(i,j)=op25*( sigmaR(i-1,j, k ) +sigmaR(i,j, k )
277       &                  +maskp1*(sigmaR(i-1,j,kp1) +sigmaR(i,j,kp1)) )       &                  +maskp1*(sigmaR(i-1,j,kp1) +sigmaR(i,j,kp1)) )
278       &          *_maskW(i,j,k,bi,bj)       &          *_maskW(i,j,k,bi,bj)
279         ENDDO         ENDDO
280        ENDDO        ENDDO
281    
282    #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  C     Calculate slopes for use in tensor, taper and/or clip  C     Calculate slopes for use in tensor, taper and/or clip
289        CALL GMREDI_SLOPE_LIMIT(        CALL GMREDI_SLOPE_LIMIT(
290       U             dSigmadRReal,       U             dSigmadRReal,
291       I             rF(K),       I             rF(K),K,
292       U             SlopeX, SlopeY,       U             SlopeX, SlopeY,
293         U             dSigmaDx, dSigmaDy,
294       O             SlopeSqr, taperFct,       O             SlopeSqr, taperFct,
295       I             bi, bj, myThid )       I             bi, bj, myThid )
296    
297    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  #ifdef GM_NON_UNITY_DIAGONAL  #ifdef GM_NON_UNITY_DIAGONAL
306          DO j=1-Oly+1,sNy+Oly-1          DO j=1-Oly+1,sNy+Oly-1
307           DO i=1-Olx+1,sNx+Olx-1           DO i=1-Olx+1,sNx+Olx-1
308            Kux(i,j,k,bi,bj) =            Kux(i,j,k,bi,bj) =
309       &     ( GM_isopycK       &     ( GM_isopycK
310  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
311       &     +0.5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))       &     +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))
312  #endif  #endif
313       &     )*taperFct(i,j)       &     )
314         &     *taperFct(i,j)
315             ENDDO
316            ENDDO
317    #ifdef ALLOW_AUTODIFF_TAMC
318    # ifdef GM_EXCLUDE_CLIPPING
319    CADJ STORE Kux(:,:,k,bi,bj)  = comlev1_bibj_k, key=kkey, byte=isbyte
320    # endif
321    #endif
322            DO j=1-Oly+1,sNy+Oly-1
323             DO i=1-Olx+1,sNx+Olx-1
324            Kux(i,j,k,bi,bj) = MAX( Kux(i,j,k,bi,bj), GM_Kmin_horiz )            Kux(i,j,k,bi,bj) = MAX( Kux(i,j,k,bi,bj), GM_Kmin_horiz )
325           ENDDO           ENDDO
326          ENDDO          ENDDO
327  #endif /* GM_NON_UNITY_DIAGONAL */  #endif /* GM_NON_UNITY_DIAGONAL */
328    
329  #ifdef GM_EXTRA_DIAGONAL  #ifdef GM_EXTRA_DIAGONAL
330    
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        IF (GM_ExtraDiag) THEN        IF (GM_ExtraDiag) THEN
336          DO j=1-Oly+1,sNy+Oly-1          DO j=1-Oly+1,sNy+Oly-1
337           DO i=1-Olx+1,sNx+Olx-1           DO i=1-Olx+1,sNx+Olx-1
338            Kuz(i,j,k,bi,bj) =            Kuz(i,j,k,bi,bj) =
339       &     ( GM_isopycK - GM_skewflx*GM_background_K       &     ( GM_isopycK - GM_skewflx*GM_background_K
340  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
341       &     +0.5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*GM_advect       &     +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*GM_advect
342  #endif  #endif
343       &     )*SlopeX(i,j)*taperFct(i,j)       &     )*SlopeX(i,j)*taperFct(i,j)
344           ENDDO           ENDDO
# Line 231  C     Calculate slopes for use in tensor Line 349  C     Calculate slopes for use in tensor
349  C     Gradient of Sigma at V points  C     Gradient of Sigma at V points
350        DO j=1-Oly+1,sNy+Oly-1        DO j=1-Oly+1,sNy+Oly-1
351         DO i=1-Olx+1,sNx+Olx-1         DO i=1-Olx+1,sNx+Olx-1
352          SlopeX(i,j)=0.25*( sigmaX(i, j ,k) +sigmaX(i+1, j ,k)          dSigmaDx(i,j)=op25*( sigmaX(i, j ,k) +sigmaX(i+1, j ,k)
353       &                    +sigmaX(i,j-1,k) +sigmaX(i+1,j-1,k) )       &                    +sigmaX(i,j-1,k) +sigmaX(i+1,j-1,k) )
354       &          *_maskS(i,j,k,bi,bj)       &          *_maskS(i,j,k,bi,bj)
355          SlopeY(i,j)=sigmaY(i,j,k)          dSigmaDy(i,j)=sigmaY(i,j,k)
356       &          *_maskS(i,j,k,bi,bj)       &          *_maskS(i,j,k,bi,bj)
357          dSigmaDrReal(i,j)=0.25*( sigmaR(i,j-1, k ) +sigmaR(i,j, k )          dSigmaDrReal(i,j)=op25*( sigmaR(i,j-1, k ) +sigmaR(i,j, k )
358       &                  +maskp1*(sigmaR(i,j-1,kp1) +sigmaR(i,j,kp1)) )       &                  +maskp1*(sigmaR(i,j-1,kp1) +sigmaR(i,j,kp1)) )
359       &          *_maskS(i,j,k,bi,bj)       &          *_maskS(i,j,k,bi,bj)
360         ENDDO         ENDDO
361        ENDDO        ENDDO
362    
363    #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  C     Calculate slopes for use in tensor, taper and/or clip  C     Calculate slopes for use in tensor, taper and/or clip
370        CALL GMREDI_SLOPE_LIMIT(        CALL GMREDI_SLOPE_LIMIT(
371       U             dSigmadRReal,       U             dSigmadRReal,
372       I             rF(K),       I             rF(K),K,
373       U             SlopeX, SlopeY,       U             SlopeX, SlopeY,
374         U             dSigmaDx, dSigmaDy,
375       O             SlopeSqr, taperFct,       O             SlopeSqr, taperFct,
376       I             bi, bj, myThid )       I             bi, bj, myThid )
377    
378    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  #ifdef GM_NON_UNITY_DIAGONAL  #ifdef GM_NON_UNITY_DIAGONAL
387          DO j=1-Oly+1,sNy+Oly-1          DO j=1-Oly+1,sNy+Oly-1
388           DO i=1-Olx+1,sNx+Olx-1           DO i=1-Olx+1,sNx+Olx-1
389            Kvy(i,j,k,bi,bj) =            Kvy(i,j,k,bi,bj) =
390       &     ( GM_isopycK       &     ( GM_isopycK
391  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
392       &     +0.5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))       &     +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))
393    #endif
394         &     )
395         &     *taperFct(i,j)
396             ENDDO
397            ENDDO
398    #ifdef ALLOW_AUTODIFF_TAMC
399    # ifdef GM_EXCLUDE_CLIPPING
400    CADJ STORE Kvy(:,:,k,bi,bj)  = comlev1_bibj_k, key=kkey, byte=isbyte
401    # endif
402  #endif  #endif
403       &     )*taperFct(i,j)          DO j=1-Oly+1,sNy+Oly-1
404             DO i=1-Olx+1,sNx+Olx-1
405            Kvy(i,j,k,bi,bj) = MAX( Kvy(i,j,k,bi,bj), GM_Kmin_horiz )            Kvy(i,j,k,bi,bj) = MAX( Kvy(i,j,k,bi,bj), GM_Kmin_horiz )
406           ENDDO           ENDDO
407          ENDDO          ENDDO
408  #endif /* GM_NON_UNITY_DIAGONAL */  #endif /* GM_NON_UNITY_DIAGONAL */
409    
410  #ifdef GM_EXTRA_DIAGONAL  #ifdef GM_EXTRA_DIAGONAL
411    
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        IF (GM_ExtraDiag) THEN        IF (GM_ExtraDiag) THEN
417          DO j=1-Oly+1,sNy+Oly-1          DO j=1-Oly+1,sNy+Oly-1
418           DO i=1-Olx+1,sNx+Olx-1           DO i=1-Olx+1,sNx+Olx-1
419            Kvz(i,j,k,bi,bj) =            Kvz(i,j,k,bi,bj) =
420       &     ( GM_isopycK - GM_skewflx*GM_background_K       &     ( GM_isopycK - GM_skewflx*GM_background_K
421  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
422       &     +0.5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*GM_advect       &     +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*GM_advect
423  #endif  #endif
424       &     )*SlopeY(i,j)*taperFct(i,j)       &     )*SlopeY(i,j)*taperFct(i,j)
425           ENDDO           ENDDO

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.16

  ViewVC Help
Powered by ViewVC 1.1.22