/[MITgcm]/MITgcm/pkg/diagnostics/diagnostics_calc_phivel.F
ViewVC logotype

Diff of /MITgcm/pkg/diagnostics/diagnostics_calc_phivel.F

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

revision 1.5 by jmc, Wed Jul 6 01:47:57 2011 UTC revision 1.6 by jmc, Fri Jul 22 19:53:40 2011 UTC
# Line 67  C     psiLoc  :: horizontal stream-funct Line 67  C     psiLoc  :: horizontal stream-funct
67        INTEGER i, j, k        INTEGER i, j, k
68    
69        INTEGER ks        INTEGER ks
70        INTEGER numIters        INTEGER numIters, nIterMin
71        LOGICAL normaliseMatrice, diagNormaliseRHS        LOGICAL normaliseMatrice, diagNormaliseRHS
72        _RL  residCriter, firstResidual, lastResidual        _RL  residCriter, firstResidual, minResidual, lastResidual
73        _RL  a2dMax, a2dNorm        _RL  a2dMax, a2dNorm
74        _RL  rhsMax, rhsNorm        _RL  rhsMax, rhsNorm
75        _RS  aW2d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RS  aW2d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
# Line 106  C-    calculate cg2d matrix: Line 106  C-    calculate cg2d matrix:
106              DO i = 1,sNx+1              DO i = 1,sNx+1
107                aW2d(i,j,bi,bj) = dyG(i,j,bi,bj)*recip_dxC(i,j,bi,bj)                aW2d(i,j,bi,bj) = dyG(i,j,bi,bj)*recip_dxC(i,j,bi,bj)
108       &                         *drF(k)*hFacW(i,j,k,bi,bj)       &                         *drF(k)*hFacW(i,j,k,bi,bj)
109       &                         *maskInW(i,j,bi,bj)       &                         *maskInC(i-1,j,bi,bj)*maskInC(i,j,bi,bj)
110                aS2d(i,j,bi,bj) = dxG(i,j,bi,bj)*recip_dyC(i,j,bi,bj)                aS2d(i,j,bi,bj) = dxG(i,j,bi,bj)*recip_dyC(i,j,bi,bj)
111       &                         *drF(k)*hFacS(i,j,k,bi,bj)       &                         *drF(k)*hFacS(i,j,k,bi,bj)
112       &                         *maskInS(i,j,bi,bj)       &                         *maskInC(i,j-1,bi,bj)*maskInC(i,j,bi,bj)
113                a2dMax = MAX(a2dMax,aW2d(i,j,bi,bj))                a2dMax = MAX(a2dMax,aW2d(i,j,bi,bj))
114                a2dMax = MAX(a2dMax,aS2d(i,j,bi,bj))                a2dMax = MAX(a2dMax,aS2d(i,j,bi,bj))
115              ENDDO              ENDDO
# Line 139  C-   end bi,bj loops Line 139  C-   end bi,bj loops
139          ENDDO          ENDDO
140    
141  C-    Normalise Matrice & RHS :  C-    Normalise Matrice & RHS :
142          diagNormaliseRHS = cg2dTargetResWunit.LE.0.          diagNormaliseRHS = diagCG_resTarget.GT.0.
143          normaliseMatrice = .TRUE.          normaliseMatrice = .TRUE.
144          diagNormaliseRHS = .TRUE.          diagNormaliseRHS = .TRUE.
145          a2dNorm = 1. _d 0          a2dNorm = 1. _d 0
# Line 151  C-    Normalise Matrice & RHS : Line 151  C-    Normalise Matrice & RHS :
151          IF ( diagNormaliseRHS ) THEN          IF ( diagNormaliseRHS ) THEN
152            _GLOBAL_MAX_RL( rhsMax, myThid )            _GLOBAL_MAX_RL( rhsMax, myThid )
153            IF ( rhsMax .GT. 0. _d 0 ) rhsNorm = 1. _d 0/(a2dNorm*rhsMax)            IF ( rhsMax .GT. 0. _d 0 ) rhsNorm = 1. _d 0/(a2dNorm*rhsMax)
154            residCriter = cg2dTargetResidual            residCriter = diagCG_resTarget
155          ELSE          ELSE
156            residCriter = a2dNorm * cg2dTargetResWunit            residCriter = a2dNorm * ABS(diagCG_resTarget)
157       &                          * globalArea / deltaTmom       &                          * globalArea / deltaTmom
158          ENDIF          ENDIF
159          IF ( normaliseMatrice .OR. diagNormaliseRHS ) THEN          IF ( normaliseMatrice .OR. diagNormaliseRHS ) THEN
# Line 179  c             x2d(i,j,bi,bj) =  x2d(i,j, Line 179  c             x2d(i,j,bi,bj) =  x2d(i,j,
179            _END_MASTER( myThid )            _END_MASTER( myThid )
180          ENDIF          ENDIF
181    
182          numIters = cg2dMaxIters          numIters = diagCG_maxIters
183          CALL DIAG_CG2D(          CALL DIAG_CG2D(
184       I                aW2d, aS2d, b2d,       I                aW2d, aS2d, b2d,
185       I                residCriter,       I                residCriter,
186       O                firstResidual, lastResidual,       O                firstResidual, minResidual, lastResidual,
187       U                x2d, numIters,       U                x2d, numIters,
188       I                myThid )       O                nIterMin,
189         I                diagCG_prtResFrq, myThid )
190    
191          IF ( debugLevel.GE.debLevA ) THEN          IF ( debugLevel.GE.debLevA ) THEN
192            _BEGIN_MASTER( myThid )            _BEGIN_MASTER( myThid )
193            WRITE(standardMessageUnit,'(A,I4,A,I6,A,1P2E17.9)')            WRITE(standardMessageUnit,'(A,I4,A,2I6,A,1P3E14.7)')
194       &     ' diag_cg2d : k=', k, ' , iters=', numIters,       &    ' diag_cg2d : k=', k, ' , it=', nIterMin, numIters,
195       &     ' ; ini,last_Res=', firstResidual, lastResidual       &    ' ; ini,min,last_Res=',firstResidual,minResidual,lastResidual
196            _END_MASTER( myThid )            _END_MASTER( myThid )
197          ENDIF          ENDIF
198    
# Line 219  C-    Compte divergence-free transport: Line 220  C-    Compte divergence-free transport:
220       &                        - ( x2d(i,j,bi,bj) - x2d(i-1,j,bi,bj) )       &                        - ( x2d(i,j,bi,bj) - x2d(i-1,j,bi,bj) )
221       &                         *recip_dxC(i,j,bi,bj)*dyG(i,j,bi,bj)       &                         *recip_dxC(i,j,bi,bj)*dyG(i,j,bi,bj)
222       &                         *drF(k)*hFacW(i,j,k,bi,bj)       &                         *drF(k)*hFacW(i,j,k,bi,bj)
223       &                         *maskInW(i,j,bi,bj)       &                         *maskInC(i-1,j,bi,bj)*maskInC(i,j,bi,bj)
224              vTrans(i,j,bi,bj) = vTrans(i,j,bi,bj)              vTrans(i,j,bi,bj) = vTrans(i,j,bi,bj)
225       &                        - ( x2d(i,j,bi,bj) - x2d(i,j-1,bi,bj) )       &                        - ( x2d(i,j,bi,bj) - x2d(i,j-1,bi,bj) )
226       &                         *recip_dyC(i,j,bi,bj)*dxG(i,j,bi,bj)       &                         *recip_dyC(i,j,bi,bj)*dxG(i,j,bi,bj)
227       &                         *drF(k)*hFacS(i,j,k,bi,bj)       &                         *drF(k)*hFacS(i,j,k,bi,bj)
228       &                         *maskInS(i,j,bi,bj)       &                         *maskInC(i,j-1,bi,bj)*maskInC(i,j,bi,bj)
229             ENDDO             ENDDO
230            ENDDO            ENDDO
231           ENDDO           ENDDO

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.22