/[MITgcm]/MITgcm/model/src/cg3d.F
ViewVC logotype

Diff of /MITgcm/model/src/cg3d.F

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

revision 1.9 by heimbach, Mon May 14 21:33:30 2001 UTC revision 1.16 by jmc, Tue Nov 8 06:18:10 2005 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
5    
6  #define VERBOSE  CBOP
7    C     !ROUTINE: CG3D
8    C     !INTERFACE:
9        SUBROUTINE CG3D(          SUBROUTINE CG3D(  
10         I                cg3d_b,
11         U                cg3d_x,
12         O                firstResidual,
13         O                lastResidual,
14         U                numIters,
15       I                myThid )       I                myThid )
16  C     /==========================================================\  C     !DESCRIPTION: \bv
17  C     | SUBROUTINE CG3D                                          |  C     *==========================================================*
18  C     | o Three-dimensional grid problem conjugate-gradient      |  C     | SUBROUTINE CG3D                                          
19  C     |   inverter (with preconditioner).                        |  C     | o Three-dimensional grid problem conjugate-gradient      
20  C     |==========================================================|  C     |   inverter (with preconditioner).                        
21  C     | Con. grad is an iterative procedure for solving Ax = b.  |  C     *==========================================================*
22  C     | It requires the A be symmetric.                          |  C     | Con. grad is an iterative procedure for solving Ax = b.  
23  C     | This implementation assumes A is a five-diagonal         |  C     | It requires the A be symmetric.                          
24  C     | matrix of the form that arises in the discrete           |  C     | This implementation assumes A is a seven-diagonal          
25  C     | representation of the del^2 operator in a                |  C     | matrix of the form that arises in the discrete            
26  C     | two-dimensional space.                                   |  C     | representation of the del^2 operator in a                
27  C     | Notes:                                                   |  C     | three-dimensional space.                                    
28  C     | ======                                                   |  C     | Notes:                                                    
29  C     | This implementation can support shared-memory            |  C     | ======                                                    
30  C     | multi-threaded execution. In order to do this COMMON     |  C     | This implementation can support shared-memory              
31  C     | blocks are used for many of the arrays - even ones that  |  C     | multi-threaded execution. In order to do this COMMON      
32  C     | are only used for intermedaite results. This design is   |  C     | blocks are used for many of the arrays - even ones that    
33  C     | OK if you want to all the threads to collaborate on      |  C     | are only used for intermedaite results. This design is    
34  C     | solving the same problem. On the other hand if you want  |  C     | OK if you want to all the threads to collaborate on        
35  C     | the threads to solve several different problems          |  C     | solving the same problem. On the other hand if you want    
36  C     | concurrently this implementation will not work.          |  C     | the threads to solve several different problems            
37  C     \==========================================================/  C     | concurrently this implementation will not work.          
38        IMPLICIT NONE  C     *==========================================================*
39    C     \ev
40    
41    C     !USES:
42          IMPLICIT NONE
43  C     === Global data ===  C     === Global data ===
44  #include "SIZE.h"  #include "SIZE.h"
45  #include "EEPARAMS.h"  #include "EEPARAMS.h"
# Line 38  C     === Global data === Line 47  C     === Global data ===
47  #include "GRID.h"  #include "GRID.h"
48  #include "CG3D.h"  #include "CG3D.h"
49    
50    C     !INPUT/OUTPUT PARAMETERS:
51  C     === Routine arguments ===  C     === Routine arguments ===
52  C     myThid - Thread on which I am working.  C     myThid    - Thread on which I am working.
53    C     cg2d_b    - The source term or "right hand side"
54    C     cg2d_x    - The solution
55    C     firstResidual - the initial residual before any iterations
56    C     lastResidual  - the actual residual reached
57    C     numIters  - Entry: the maximum number of iterations allowed
58    C                 Exit:  the actual number of iterations used
59          _RL  cg3d_b(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
60          _RL  cg3d_x(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
61          _RL  firstResidual
62          _RL  lastResidual
63          INTEGER numIters
64        INTEGER myThid        INTEGER myThid
65    
66    
67  #ifdef ALLOW_NONHYDROSTATIC  #ifdef ALLOW_NONHYDROSTATIC
68    
69    C     !LOCAL VARIABLES:
70  C     === Local variables ====  C     === Local variables ====
71  C     actualIts      - Number of iterations taken  C     actualIts      - Number of iterations taken
72  C     actualResidual - residual  C     actualResidual - residual
# Line 64  C     I, J, N     - Loop counters ( N co Line 87  C     I, J, N     - Loop counters ( N co
87        INTEGER bi, bj                      INTEGER bi, bj              
88        INTEGER I, J, K, it3d        INTEGER I, J, K, it3d
89        INTEGER KM1, KP1        INTEGER KM1, KP1
90        _RL    err        _RL    err, errTile
91        _RL    eta_qrN        _RL    eta_qrN, eta_qrNtile
92        _RL    eta_qrNM1        _RL    eta_qrNM1
93        _RL    cgBeta        _RL    cgBeta
94        _RL    alpha        _RL    alpha , alphaTile
95        _RL    sumRHS        _RL    sumRHS, sumRHStile
96        _RL    rhsMax        _RL    rhsMax
97        _RL    rhsNorm        _RL    rhsNorm
98          _RL    topLevTerm
99    CEOP
100    
       INTEGER OLw  
       INTEGER OLe  
       INTEGER OLn  
       INTEGER OLs  
       INTEGER exchWidthX  
       INTEGER exchWidthY  
       INTEGER myNz  
       _RL     topLevTerm  
101    
102  C--   Initialise inverter  C--   Initialise inverter
103        eta_qrNM1 = 1. D0        eta_qrNM1 = 1. D0
# Line 116  C--   Normalise RHS Line 133  C--   Normalise RHS
133        ENDDO        ENDDO
134    
135  C--   Update overlaps  C--   Update overlaps
136        _EXCH_XYZ_R8( cg3d_b, myThid )  c     _EXCH_XYZ_R8( cg3d_b, myThid )
137        _EXCH_XYZ_R8( cg3d_x, myThid )        _EXCH_XYZ_R8( cg3d_x, myThid )
138    
139  C--   Initial residual calculation (with free-Surface term)  C--   Initial residual calculation (with free-Surface term)
# Line 124  C--   Initial residual calculation (with Line 141  C--   Initial residual calculation (with
141        sumRHS = 0. _d 0        sumRHS = 0. _d 0
142        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
143         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
144            errTile    = 0. _d 0
145            sumRHStile = 0. _d 0
146          DO K=1,Nr          DO K=1,Nr
147           KM1 = K-1           KM1 = K-1
148           IF ( K .EQ. 1 ) KM1 = 1           IF ( K .EQ. 1 ) KM1 = 1
# Line 134  C--   Initial residual calculation (with Line 153  C--   Initial residual calculation (with
153       &      (horiVertRatio/gravity)/deltaTMom/deltaTMom       &      (horiVertRatio/gravity)/deltaTMom/deltaTMom
154           DO J=1,sNy           DO J=1,sNy
155            DO I=1,sNx            DO I=1,sNx
            cg3d_s(I,J,K,bi,bj) = 0.  
156             cg3d_r(I,J,K,bi,bj) = cg3d_b(I,J,K,bi,bj) -( 0.             cg3d_r(I,J,K,bi,bj) = cg3d_b(I,J,K,bi,bj) -( 0.
157       &     +aW3d(I  ,J  ,K  ,bi,bj)*cg3d_x(I-1,J  ,K  ,bi,bj)       &     +aW3d(I  ,J  ,K  ,bi,bj)*cg3d_x(I-1,J  ,K  ,bi,bj)
158       &     +aW3d(I+1,J  ,K  ,bi,bj)*cg3d_x(I+1,J  ,K  ,bi,bj)       &     +aW3d(I+1,J  ,K  ,bi,bj)*cg3d_x(I+1,J  ,K  ,bi,bj)
# Line 150  C--   Initial residual calculation (with Line 168  C--   Initial residual calculation (with
168       &     -aV3d(I  ,J  ,KP1,bi,bj)*cg3d_x(I  ,J  ,K  ,bi,bj)       &     -aV3d(I  ,J  ,KP1,bi,bj)*cg3d_x(I  ,J  ,K  ,bi,bj)
169       &     -topLevTerm*_rA(I,J,bi,bj)*cg3d_x(I,J,K,bi,bj)       &     -topLevTerm*_rA(I,J,bi,bj)*cg3d_x(I,J,K,bi,bj)
170       &     )       &     )
171             err = err             errTile = errTile
172       &     +cg3d_r(I,J,K,bi,bj)*cg3d_r(I,J,K,bi,bj)       &     +cg3d_r(I,J,K,bi,bj)*cg3d_r(I,J,K,bi,bj)
173             sumRHS = sumRHS             sumRHStile = sumRHStile
174       &     +cg3d_b(I,J,K,bi,bj)       &     +cg3d_b(I,J,K,bi,bj)
175            ENDDO            ENDDO
176           ENDDO           ENDDO
177             DO J=1-1,sNy+1
178              DO I=1-1,sNx+1
179               cg3d_s(I,J,K,bi,bj) = 0.
180              ENDDO
181             ENDDO
182          ENDDO          ENDDO
183            err    = err    + errTile
184            sumRHS = sumRHS + sumRHStile
185         ENDDO         ENDDO
186        ENDDO        ENDDO
187  C     _EXCH_XYZ_R8( cg3d_r, myThid )  C     _EXCH_XYZ_R8( cg3d_r, myThid )
188         OLw        = 1         CALL EXCH_S3D_RL( cg3d_r, myThid )
        OLe        = 1  
        OLn        = 1  
        OLs        = 1  
        exchWidthX = 1  
        exchWidthY = 1  
        myNz       = Nr  
        CALL EXCH_RL( cg3d_r,  
      I            OLw, OLe, OLs, OLn, sNx, sNy, myNz,  
      I            exchWidthX, exchWidthY,  
      I            FORWARD_SIMULATION, EXCH_IGNORE_CORNERS, myThid )  
189  C     _EXCH_XYZ_R8( cg3d_s, myThid )  C     _EXCH_XYZ_R8( cg3d_s, myThid )
190         OLw        = 1  c      CALL EXCH_S3D_RL( cg3d_s, myThid )
        OLe        = 1  
        OLn        = 1  
        OLs        = 1  
        exchWidthX = 1  
        exchWidthY = 1  
        myNz       = Nr  
        CALL EXCH_RL( cg3d_s,  
      I            OLw, OLe, OLs, OLn, sNx, sNy, myNz,  
      I            exchWidthX, exchWidthY,  
      I            FORWARD_SIMULATION, EXCH_IGNORE_CORNERS, myThid )  
191        _GLOBAL_SUM_R8( sumRHS, myThid )        _GLOBAL_SUM_R8( sumRHS, myThid )
192        _GLOBAL_SUM_R8( err   , myThid )        _GLOBAL_SUM_R8( err   , myThid )
193                
194        _BEGIN_MASTER( myThid )        IF ( debugLevel .GE. debLevZero ) THEN
195        write(*,'(A,1PE30.14)') ' cg3d: Sum(rhs) = ',sumRHS          _BEGIN_MASTER( myThid )
196        _END_MASTER( )          write(standardmessageunit,'(A,1P2E22.14)')
197         &     ' cg3d: Sum(rhs),rhsMax = ',sumRHS,rhsMax
198            _END_MASTER( myThid )
199          ENDIF
200    
201        actualIts      = 0        actualIts      = 0
202        actualResidual = SQRT(err)        actualResidual = SQRT(err)
203  C     _BARRIER  C     _BARRIER
204        _BEGIN_MASTER( myThid )  c     _BEGIN_MASTER( myThid )
205         WRITE(*,'(A,I6,1PE30.14)') ' CG3D iters, err = ',  c      WRITE(*,'(A,I6,1PE30.14)') ' CG3D iters, err = ',
206       &  actualIts, actualResidual  c    &  actualIts, actualResidual
207        _END_MASTER( )  c     _END_MASTER( myThid )
208          firstResidual=actualResidual
209    
210  C     >>>>>>>>>>>>>>> BEGIN SOLVER <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  C     >>>>>>>>>>>>>>> BEGIN SOLVER <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
211        DO 10 it3d=1, cg3dMaxIters        DO 10 it3d=1, cg3dMaxIters
212    
213  CcnhDebugStarts  CcnhDebugStarts
214  #ifdef VERBOSE  c      IF ( mod(it3d-1,10).EQ.0)
215         IF ( mod(it3d-1,10).EQ.0)  c    &   WRITE(*,*) ' CG3D: Iteration ',it3d-1,
216       &   WRITE(*,*) ' CG3D: Iteration ',it3d-1,  c    &      ' residual = ',actualResidual
      &      ' residual = ',actualResidual  
 #endif  
217  CcnhDebugEnds  CcnhDebugEnds
218         IF ( actualResidual .LT. cg3dTargetResidual ) GOTO 11         IF ( actualResidual .LT. cg3dTargetResidual ) GOTO 11
219  C--    Solve preconditioning equation and update  C--    Solve preconditioning equation and update
# Line 218  C            want eta_qrN for the interi Line 225  C            want eta_qrN for the interi
225         eta_qrN = 0. _d 0         eta_qrN = 0. _d 0
226         DO bj=myByLo(myThid),myByHi(myThid)         DO bj=myByLo(myThid),myByHi(myThid)
227          DO bi=myBxLo(myThid),myBxHi(myThid)          DO bi=myBxLo(myThid),myBxHi(myThid)
228             eta_qrNtile = 0. _d 0
229           DO K=1,1           DO K=1,1
230            DO J=1-1,sNy+1            DO J=1-1,sNy+1
231             DO I=1-1,sNx+1             DO I=1-1,sNx+1
# Line 247  caja       ENDDO Line 255  caja       ENDDO
255  caja      ENDIF  caja      ENDIF
256            DO J=1,sNy            DO J=1,sNy
257             DO I=1,sNx             DO I=1,sNx
258              eta_qrN = eta_qrN              eta_qrNtile = eta_qrNtile
259       &      +cg3d_q(I,J,K,bi,bj)*cg3d_r(I,J,K,bi,bj)       &      +cg3d_q(I,J,K,bi,bj)*cg3d_r(I,J,K,bi,bj)
260             ENDDO             ENDDO
261            ENDDO            ENDDO
# Line 262  caja      ENDIF Line 270  caja      ENDIF
270            ENDDO            ENDDO
271            DO J=1,sNy            DO J=1,sNy
272             DO I=1,sNx             DO I=1,sNx
273              eta_qrN = eta_qrN              eta_qrNtile = eta_qrNtile
274       &      +cg3d_q(I,J,K,bi,bj)*cg3d_r(I,J,K,bi,bj)       &      +cg3d_q(I,J,K,bi,bj)*cg3d_r(I,J,K,bi,bj)
275             ENDDO             ENDDO
276            ENDDO            ENDDO
277           ENDDO           ENDDO
278             eta_qrN = eta_qrN + eta_qrNtile
279          ENDDO          ENDDO
280         ENDDO         ENDDO
281  caja  caja
# Line 315  C==    q = A.s Line 324  C==    q = A.s
324       &      (horiVertRatio/gravity)/deltaTMom/deltaTMom       &      (horiVertRatio/gravity)/deltaTMom/deltaTMom
325         DO bj=myByLo(myThid),myByHi(myThid)         DO bj=myByLo(myThid),myByHi(myThid)
326          DO bi=myBxLo(myThid),myBxHi(myThid)          DO bi=myBxLo(myThid),myBxHi(myThid)
327             alphaTile = 0. _d 0
328           IF ( Nr .GT. 1 ) THEN           IF ( Nr .GT. 1 ) THEN
329            DO K=1,1            DO K=1,1
330             DO J=1,sNy             DO J=1,sNy
# Line 331  C==    q = A.s Line 341  C==    q = A.s
341       &      -aS3d(I  ,J+1,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &      -aS3d(I  ,J+1,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
342       &      -aV3d(I  ,J  ,K+1,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &      -aV3d(I  ,J  ,K+1,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
343       &      -topLevTerm*_rA(I,J,bi,bj)*cg3d_s(I,J,K,bi,bj)       &      -topLevTerm*_rA(I,J,bi,bj)*cg3d_s(I,J,K,bi,bj)
344               alpha = alpha+cg3d_s(I,J,K,bi,bj)*cg3d_q(I,J,K,bi,bj)               alphaTile = alphaTile
345         &                 +cg3d_s(I,J,K,bi,bj)*cg3d_q(I,J,K,bi,bj)
346              ENDDO              ENDDO
347             ENDDO             ENDDO
348            ENDDO            ENDDO
# Line 349  C==    q = A.s Line 360  C==    q = A.s
360       &      -aS3d(I  ,J  ,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &      -aS3d(I  ,J  ,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
361       &      -aS3d(I  ,J+1,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &      -aS3d(I  ,J+1,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
362       &      -topLevTerm*_rA(I,J,bi,bj)*cg3d_s(I,J,K,bi,bj)       &      -topLevTerm*_rA(I,J,bi,bj)*cg3d_s(I,J,K,bi,bj)
363               alpha = alpha+cg3d_s(I,J,K,bi,bj)*cg3d_q(I,J,K,bi,bj)               alphaTile = alphaTile
364         &                 +cg3d_s(I,J,K,bi,bj)*cg3d_q(I,J,K,bi,bj)
365              ENDDO              ENDDO
366             ENDDO             ENDDO
367            ENDDO            ENDDO
# Line 370  C==    q = A.s Line 382  C==    q = A.s
382       &     -aS3d(I  ,J+1,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &     -aS3d(I  ,J+1,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
383       &     -aV3d(I  ,J  ,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &     -aV3d(I  ,J  ,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
384       &     -aV3d(I  ,J  ,K+1,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &     -aV3d(I  ,J  ,K+1,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
385              alpha = alpha+cg3d_s(I,J,K,bi,bj)*cg3d_q(I,J,K,bi,bj)              alphaTile = alphaTile
386         &                +cg3d_s(I,J,K,bi,bj)*cg3d_q(I,J,K,bi,bj)
387             ENDDO             ENDDO
388            ENDDO            ENDDO
389           ENDDO           ENDDO
# Line 389  C==    q = A.s Line 402  C==    q = A.s
402       &      -aS3d(I  ,J  ,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &      -aS3d(I  ,J  ,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
403       &      -aS3d(I  ,J+1,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &      -aS3d(I  ,J+1,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
404       &      -aV3d(I  ,J  ,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)       &      -aV3d(I  ,J  ,K  ,bi,bj)*cg3d_s(I  ,J  ,K  ,bi,bj)
405               alpha = alpha+cg3d_s(I,J,K,bi,bj)*cg3d_q(I,J,K,bi,bj)               alphaTile = alphaTile
406         &                 +cg3d_s(I,J,K,bi,bj)*cg3d_q(I,J,K,bi,bj)
407              ENDDO              ENDDO
408             ENDDO             ENDDO
409            ENDDO            ENDDO
410           ENDIF           ENDIF
411             alpha = alpha + alphaTile
412          ENDDO          ENDDO
413         ENDDO         ENDDO
414         _GLOBAL_SUM_R8(alpha,myThid)         _GLOBAL_SUM_R8(alpha,myThid)
# Line 410  C      Now compute "interior" points. Line 425  C      Now compute "interior" points.
425         err = 0. _d 0         err = 0. _d 0
426         DO bj=myByLo(myThid),myByHi(myThid)         DO bj=myByLo(myThid),myByHi(myThid)
427          DO bi=myBxLo(myThid),myBxHi(myThid)          DO bi=myBxLo(myThid),myBxHi(myThid)
428            errTile    = 0. _d 0
429           DO K=1,Nr           DO K=1,Nr
430            DO J=1,sNy            DO J=1,sNy
431             DO I=1,sNx             DO I=1,sNx
# Line 417  C      Now compute "interior" points. Line 433  C      Now compute "interior" points.
433       &            +alpha*cg3d_s(I,J,K,bi,bj)       &            +alpha*cg3d_s(I,J,K,bi,bj)
434              cg3d_r(I,J,K,bi,bj)=cg3d_r(I,J,K,bi,bj)              cg3d_r(I,J,K,bi,bj)=cg3d_r(I,J,K,bi,bj)
435       &            -alpha*cg3d_q(I,J,K,bi,bj)       &            -alpha*cg3d_q(I,J,K,bi,bj)
436              err = err+cg3d_r(I,J,K,bi,bj)*cg3d_r(I,J,K,bi,bj)             errTile = errTile
437         &             +cg3d_r(I,J,K,bi,bj)*cg3d_r(I,J,K,bi,bj)
438             ENDDO             ENDDO
439            ENDDO            ENDDO
440           ENDDO           ENDDO
441             err = err + errTile
442          ENDDO          ENDDO
443         ENDDO         ENDDO
444    
# Line 430  C      Now compute "interior" points. Line 448  C      Now compute "interior" points.
448         actualResidual = err         actualResidual = err
449         IF ( actualResidual .LT. cg3dTargetResidual ) GOTO 11         IF ( actualResidual .LT. cg3dTargetResidual ) GOTO 11
450  C      _EXCH_XYZ_R8(cg3d_r, myThid )  C      _EXCH_XYZ_R8(cg3d_r, myThid )
451         OLw        = 1         CALL EXCH_S3D_RL( cg3d_r, myThid )
        OLe        = 1  
        OLn        = 1  
        OLs        = 1  
        exchWidthX = 1  
        exchWidthY = 1  
        myNz       = Nr  
        CALL EXCH_RL( cg3d_r,  
      I             OLw, OLe, OLs, OLn, sNx, sNy, myNz,  
      I             exchWidthX, exchWidthY,  
      I             FORWARD_SIMULATION, EXCH_IGNORE_CORNERS, myThid )  
452    
453     10 CONTINUE     10 CONTINUE
454     11 CONTINUE     11 CONTINUE
# Line 459  C--   Un-normalise the answer Line 467  C--   Un-normalise the answer
467        ENDDO        ENDDO
468    
469  Cadj  _EXCH_XYZ_R8(cg3d_x, myThid )  Cadj  _EXCH_XYZ_R8(cg3d_x, myThid )
470        _BEGIN_MASTER( myThid )  c     _BEGIN_MASTER( myThid )
471         WRITE(*,'(A,I6,1PE30.14)') ' CG3D iters, err = ',  c      WRITE(*,'(A,I6,1PE30.14)') ' CG3D iters, err = ',
472       &  actualIts, actualResidual  c    &  actualIts, actualResidual
473        _END_MASTER( )  c     _END_MASTER( myThid )
474          lastResidual=actualResidual
475          numIters=actualIts
476    
477  #endif /* ALLOW_NONHYDROSTATIC */  #endif /* ALLOW_NONHYDROSTATIC */
478    

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

  ViewVC Help
Powered by ViewVC 1.1.22