/[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.13 by heimbach, Thu Nov 28 17:30:34 2002 UTC revision 1.15 by jmc, Sun Jan 12 21:35:27 2003 UTC
# Line 41  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)        _RL dSigmaDx(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
# Line 49  C     == Local variables == Line 49  C     == Local variables ==
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, maskm1, 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(1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _RL Ssq(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
59  #endif  #endif
# Line 81  C     == Local variables == Line 81  C     == Local variables ==
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.
        km1 = MAX(1,k-1)  
        maskm1 = 1. _d 0  
        IF (k.LE.1) maskm1 = 0. _d 0  
84    
85  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
86         kkey = (igmkey-1)*Nr + k         kkey = (igmkey-1)*Nr + k
# Line 118  C-- 1rst loop on k : compute Tensor Coef Line 115  C-- 1rst loop on k : compute Tensor Coef
115        DO j=1-Oly+1,sNy+Oly-1        DO j=1-Oly+1,sNy+Oly-1
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          dSigmaDx(i,j)=0.25*( sigmaX(i+1, j ,km1) +sigmaX(i,j,km1)          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)*maskm1       &                  *maskC(i,j,k,bi,bj)
121          dSigmaDy(i,j)=0.25*( sigmaY( i ,j+1,km1) +sigmaY(i,j,km1)          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)*maskm1       &                  *maskC(i,j,k,bi,bj)
124          dSigmaDrReal(i,j)=sigmaR(i,j,k)*maskm1          dSigmaDrReal(i,j)=sigmaR(i,j,k)
125         ENDDO         ENDDO
126        ENDDO        ENDDO
127    
# Line 147  C     Calculate slopes for use in tensor Line 144  C     Calculate slopes for use in tensor
144         DO i=1-Olx+1,sNx+Olx-1         DO i=1-Olx+1,sNx+Olx-1
145    
146  C       Mask Iso-neutral slopes  C       Mask Iso-neutral slopes
147          SlopeX(i,j)=SlopeX(i,j)*maskC(i,j,k,bi,bj)*maskm1          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)*maskm1          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)*maskm1          SlopeSqr(i,j)=SlopeSqr(i,j)*maskC(i,j,k,bi,bj)
150    
151         ENDDO         ENDDO
152        ENDDO        ENDDO
153    
154  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
155  CADJ STORE SlopeX(:,:)          = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE SlopeSqr(:,:)     = comlev1_bibj_k, key=kkey, byte=isbyte
 CADJ STORE SlopeY(:,:)          = comlev1_bibj_k, key=kkey, byte=isbyte  
 CADJ STORE SlopeSqr(:,:)        = comlev1_bibj_k, key=kkey, byte=isbyte  
 CADJ STORE taperFct(:,:)        = comlev1_bibj_k, key=kkey, byte=isbyte  
 #ifdef GM_VISBECK_VARIABLE_K  
 CADJ STORE dSigmaDrReal(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  
 #endif  
156  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
157    
158        DO j=1-Oly+1,sNy+Oly-1        DO j=1-Oly+1,sNy+Oly-1
# Line 238  C-- 2nd loop on k : compute Tensor Coeff Line 229  C-- 2nd loop on k : compute Tensor Coeff
229    
230  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
231         kkey = (igmkey-1)*Nr + k         kkey = (igmkey-1)*Nr + k
232  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_NON_UNITY_DIAGONAL
233  CADJ STORE Kwx(:,:,k,bi,bj) = comlev1_bibj, key=kkey, byte=isbyte  CADJ STORE Kwx(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
234  CADJ STORE Kwy(:,:,k,bi,bj) = comlev1_bibj, key=kkey, byte=isbyte  CADJ STORE Kwy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
235  CADJ STORE Kwz(:,:,k,bi,bj) = comlev1_bibj, key=kkey, byte=isbyte  CADJ STORE Kwz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
236  #endif  #endif
237  #endif  #endif
238    
# Line 261  C-    express the Tensor in term of Diff Line 252  C-    express the Tensor in term of Diff
252       &                    )*Kwz(i,j,k,bi,bj)       &                    )*Kwz(i,j,k,bi,bj)
253         ENDDO         ENDDO
254        ENDDO        ENDDO
 #ifdef ALLOW_AUTODIFF_TAMC  
 #ifdef GM_VISBECK_VARIABLE_K  
 CADJ STORE VisbeckK(:,:,bi,bj) =  
 CADJ &     comlev1_bibj, key=kkey, byte=isbyte  
 #endif  
 #endif  
255    
256  #if ( defined (GM_NON_UNITY_DIAGONAL) || defined (GM_EXTRA_DIAGONAL) )  #if ( defined (GM_NON_UNITY_DIAGONAL) || defined (GM_EXTRA_DIAGONAL) )
257    
# Line 275  C     Gradient of Sigma at U points Line 260  C     Gradient of Sigma at U points
260         DO i=1-Olx+1,sNx+Olx-1         DO i=1-Olx+1,sNx+Olx-1
261          dSigmaDx(i,j)=sigmaX(i,j,k)          dSigmaDx(i,j)=sigmaX(i,j,k)
262       &          *_maskW(i,j,k,bi,bj)       &          *_maskW(i,j,k,bi,bj)
263          dSigmaDy(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)
264       &                      +sigmaY(i-1, j ,k) +sigmaY(i, j ,k) )       &                      +sigmaY(i-1, j ,k) +sigmaY(i, j ,k) )
265       &          *_maskW(i,j,k,bi,bj)       &          *_maskW(i,j,k,bi,bj)
266          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 )
267       &                  +maskp1*(sigmaR(i-1,j,kp1) +sigmaR(i,j,kp1)) )       &                  +maskp1*(sigmaR(i-1,j,kp1) +sigmaR(i,j,kp1)) )
268       &          *_maskW(i,j,k,bi,bj)       &          *_maskW(i,j,k,bi,bj)
269         ENDDO         ENDDO
# Line 305  C     Calculate slopes for use in tensor Line 290  C     Calculate slopes for use in tensor
290            Kux(i,j,k,bi,bj) =            Kux(i,j,k,bi,bj) =
291       &     ( GM_isopycK       &     ( GM_isopycK
292  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
293       &     +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))
294  #endif  #endif
295       &     )       &     )
296       &     *taperFct(i,j)       &     *taperFct(i,j)
# Line 335  CADJ STORE taperFct(:,:)     = comlev1_b Line 320  CADJ STORE taperFct(:,:)     = comlev1_b
320            Kuz(i,j,k,bi,bj) =            Kuz(i,j,k,bi,bj) =
321       &     ( GM_isopycK - GM_skewflx*GM_background_K       &     ( GM_isopycK - GM_skewflx*GM_background_K
322  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
323       &     +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
324  #endif  #endif
325       &     )*SlopeX(i,j)*taperFct(i,j)       &     )*SlopeX(i,j)*taperFct(i,j)
326           ENDDO           ENDDO
# Line 346  CADJ STORE taperFct(:,:)     = comlev1_b Line 331  CADJ STORE taperFct(:,:)     = comlev1_b
331  C     Gradient of Sigma at V points  C     Gradient of Sigma at V points
332        DO j=1-Oly+1,sNy+Oly-1        DO j=1-Oly+1,sNy+Oly-1
333         DO i=1-Olx+1,sNx+Olx-1         DO i=1-Olx+1,sNx+Olx-1
334          dSigmaDx(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)
335       &                    +sigmaX(i,j-1,k) +sigmaX(i+1,j-1,k) )       &                    +sigmaX(i,j-1,k) +sigmaX(i+1,j-1,k) )
336       &          *_maskS(i,j,k,bi,bj)       &          *_maskS(i,j,k,bi,bj)
337          dSigmaDy(i,j)=sigmaY(i,j,k)          dSigmaDy(i,j)=sigmaY(i,j,k)
338       &          *_maskS(i,j,k,bi,bj)       &          *_maskS(i,j,k,bi,bj)
339          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 )
340       &                  +maskp1*(sigmaR(i,j-1,kp1) +sigmaR(i,j,kp1)) )       &                  +maskp1*(sigmaR(i,j-1,kp1) +sigmaR(i,j,kp1)) )
341       &          *_maskS(i,j,k,bi,bj)       &          *_maskS(i,j,k,bi,bj)
342         ENDDO         ENDDO
# Line 378  C     Calculate slopes for use in tensor Line 363  C     Calculate slopes for use in tensor
363            Kvy(i,j,k,bi,bj) =            Kvy(i,j,k,bi,bj) =
364       &     ( GM_isopycK       &     ( GM_isopycK
365  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
366       &     +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))
367  #endif  #endif
368       &     )       &     )
369       &     *taperFct(i,j)       &     *taperFct(i,j)
# Line 408  CADJ STORE taperFct(:,:)     = comlev1_b Line 393  CADJ STORE taperFct(:,:)     = comlev1_b
393            Kvz(i,j,k,bi,bj) =            Kvz(i,j,k,bi,bj) =
394       &     ( GM_isopycK - GM_skewflx*GM_background_K       &     ( GM_isopycK - GM_skewflx*GM_background_K
395  #ifdef GM_VISBECK_VARIABLE_K  #ifdef GM_VISBECK_VARIABLE_K
396       &     +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
397  #endif  #endif
398       &     )*SlopeY(i,j)*taperFct(i,j)       &     )*SlopeY(i,j)*taperFct(i,j)
399           ENDDO           ENDDO

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.15

  ViewVC Help
Powered by ViewVC 1.1.22