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

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

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

revision 1.4 by cnh, Thu May 21 18:26:36 1998 UTC revision 1.15 by cnh, Thu Jun 25 20:43:23 1998 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2    
3  #include "CPP_EEOPTIONS.h"  #include "CPP_OPTIONS.h"
4    
5  CStartOfInterface  CStartOfInterface
6        SUBROUTINE INI_CG2D( myThid )        SUBROUTINE INI_CG2D( myThid )
# Line 17  C     === Global variables === Line 17  C     === Global variables ===
17  #include "EEPARAMS.h"  #include "EEPARAMS.h"
18  #include "PARAMS.h"  #include "PARAMS.h"
19  #include "GRID.h"  #include "GRID.h"
20    #include "DYNVARS.h"
21  #include "CG2D.h"  #include "CG2D.h"
22    
23  C     === Routine arguments ===  C     === Routine arguments ===
# Line 35  C     myNorm - Work variable used in clc Line 36  C     myNorm - Work variable used in clc
36        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
37        INTEGER bi, bj        INTEGER bi, bj
38        INTEGER I,  J, K        INTEGER I,  J, K
39        real    faceArea        _RL     faceArea
40        _RL     myNorm        _RS     myNorm
41        _RL     aC, aCw, aCs        _RL     aC, aCw, aCs
42    
43  C--   Initialise laplace operator  C--   Initialise laplace operator
# Line 54  C     aS2d: integral in Z Ay/dY Line 55  C     aS2d: integral in Z Ay/dY
55          DO K=1,Nz          DO K=1,Nz
56           DO J=1,sNy           DO J=1,sNy
57            DO I=1,sNx            DO I=1,sNx
58             faceArea = dyG(I,J,bi,bj)*dzF(K)*HFacW(I,J,K,bi,bj)             faceArea = _dyG(I,J,bi,bj)*dzF(K)*_hFacW(I,J,K,bi,bj)
59             aW2d(I,J,bi,bj) = aW2d(I,J,bi,bj) +             aW2d(I,J,bi,bj) = aW2d(I,J,bi,bj) +
60       &      gravity*faceArea*rDxC(I,J,bi,bj)       &      gBaro*faceArea*_rdxC(I,J,bi,bj)
61             faceArea = dxG(I,J,bi,bj)*dzF(K)*HFacS(I,J,K,bi,bj)             faceArea = _dxG(I,J,bi,bj)*dzF(K)*_hFacS(I,J,K,bi,bj)
62             aS2d(I,J,bi,bj) = aS2d(I,J,bi,bj) +             aS2d(I,J,bi,bj) = aS2d(I,J,bi,bj) +
63       &      gravity*faceArea*rDyC(I,J,bi,bj)       &      gBaro*faceArea*_rdyC(I,J,bi,bj)
64            ENDDO            ENDDO
65           ENDDO           ENDDO
66          ENDDO          ENDDO
# Line 78  C     aS2d: integral in Z Ay/dY Line 79  C     aS2d: integral in Z Ay/dY
79        ELSE        ELSE
80         myNorm = 1. _d 0         myNorm = 1. _d 0
81        ENDIF        ENDIF
       _BEGIN_MASTER( myThid )  
82         cg2dNorm = myNorm         cg2dNorm = myNorm
83          _BEGIN_MASTER( myThid )
84  CcnhDebugStarts  CcnhDebugStarts
85         WRITE(msgBuf,'(A,F)') '// CG2D normalisation factor = ', cg2dNorm         WRITE(msgBuf,'(A,F)') '// CG2D normalisation factor = ', cg2dNorm
86         CALL PRINT_MESSAGE( msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)         CALL PRINT_MESSAGE( msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
# Line 100  CcnhDebugEnds Line 101  CcnhDebugEnds
101                
102  C--   Update overlap regions  C--   Update overlap regions
103  CcnhDebugStarts  CcnhDebugStarts
104  C     CALL PLOT_FIELD_XYR8( aW2d, 'AW2D INI_CG2D.1' , 1, myThid )  C     CALL PLOT_FIELD_XYRS( aW2d, 'AW2D INI_CG2D.1' , 1, myThid )
105  C     CALL PLOT_FIELD_XYR8( aS2d, 'AS2D INI_CG2D.1' , 1, myThid )  C     CALL PLOT_FIELD_XYRS( aS2d, 'AS2D INI_CG2D.1' , 1, myThid )
106  CcnhDebugEnds  CcnhDebugEnds
107        _EXCH_XY_R4(aW2d, myThid)        _EXCH_XY_R4(aW2d, myThid)
108        _EXCH_XY_R4(aS2d, myThid)        _EXCH_XY_R4(aS2d, myThid)
109  CcnhDebugStarts  CcnhDebugStarts
110  C     CALL PLOT_FIELD_XYR8( aW2d, 'AW2D INI_CG2D.2' , 1, myThid )  C     CALL PLOT_FIELD_XYRS( aW2d, 'AW2D INI_CG2D.2' , 1, myThid )
111  C     CALL PLOT_FIELD_XYR8( aS2d, 'AS2D INI_CG2D.2' , 1, myThid )  C     CALL PLOT_FIELD_XYRS( aS2d, 'AS2D INI_CG2D.2' , 1, myThid )
112  CcnhDebugEnds  CcnhDebugEnds
113    
114  C--   Initialise preconditioner  C--   Initialise preconditioner
# Line 132  C           defaults to 0.51 but can be Line 133  C           defaults to 0.51 but can be
133            aC = -(            aC = -(
134       &     aW2d(I,J,bi,bj) + aW2d(I+1,J  ,bi,bj)       &     aW2d(I,J,bi,bj) + aW2d(I+1,J  ,bi,bj)
135       &    +aS2d(I,J,bi,bj) + aS2D(I  ,J+1,bi,bj)       &    +aS2d(I,J,bi,bj) + aS2D(I  ,J+1,bi,bj)
136         &    +freeSurfFac*myNorm*
137         &     zA(I,J,bi,bj)/deltaTMom/deltaTMom
138       &    )       &    )
139            aCs = -(            aCs = -(
140       &     aW2d(I,J-1,bi,bj) + aW2d(I+1,J-1,bi,bj)       &     aW2d(I,J-1,bi,bj) + aW2d(I+1,J-1,bi,bj)
141       &    +aS2d(I,J-1,bi,bj) + aS2d(I  ,J  ,bi,bj)       &    +aS2d(I,J-1,bi,bj) + aS2d(I  ,J  ,bi,bj)
142         &    +freeSurfFac*myNorm*
143         &     zA(I,J-1,bi,bj)/deltaTMom/deltaTMom
144       &    )       &    )
145            aCw = -(            aCw = -(
146       &     aW2d(I-1,J,bi,bj) + aW2d(I  ,J  ,bi,bj)       &     aW2d(I-1,J,bi,bj) + aW2d(I  ,J  ,bi,bj)
147       &    +aS2d(I-1,J,bi,bj) + aS2d(I-1,J+1,bi,bj)       &    +aS2d(I-1,J,bi,bj) + aS2d(I-1,J+1,bi,bj)
148         &    +freeSurfFac*myNorm*
149         &     zA(I-1,J,bi,bj)/deltaTMom/deltaTMom
150       &    )       &    )
151            IF ( aC .EQ. 0. ) THEN            IF ( aC .EQ. 0. ) THEN
152              pC(I,J,bi,bj) = 0. _d 0              pC(I,J,bi,bj) = 0. _d 0
# Line 158  C           defaults to 0.51 but can be Line 165  C           defaults to 0.51 but can be
165             pS(I,J,bi,bj) =             pS(I,J,bi,bj) =
166       &     -aS2d(I  ,J  ,bi,bj)/((cg2dpcOffDFac *(aCs+aC))**2 )       &     -aS2d(I  ,J  ,bi,bj)/((cg2dpcOffDFac *(aCs+aC))**2 )
167            ENDIF            ENDIF
168    C         pC(I,J,bi,bj) = 1.
169    C         pW(I,J,bi,bj) = 0.
170    C         pS(I,J,bi,bj) = 0.
171           ENDDO           ENDDO
172          ENDDO          ENDDO
173         ENDDO         ENDDO
# Line 167  C--   Update overlap regions Line 177  C--   Update overlap regions
177        _EXCH_XY_R4(pW, myThid)        _EXCH_XY_R4(pW, myThid)
178        _EXCH_XY_R4(pS, myThid)        _EXCH_XY_R4(pS, myThid)
179    
180  C--   Set default values for initial guess  C--   Set default values for initial guess and RHS
181        IF ( startTime .EQ. 0 ) THEN        IF ( startTime .EQ. 0 ) THEN
182         DO bj=myByLo(myThid),myByHi(myThid)         DO bj=myByLo(myThid),myByHi(myThid)
183          DO bi=myBxLo(myThid),myBxHi(myThid)          DO bi=myBxLo(myThid),myBxHi(myThid)
184           DO J=1,sNy           DO J=1,sNy
185            DO I=1,sNx            DO I=1,sNx
186             cg2d_x(I,J,bi,bj) = 0. _d 0             cg2d_x(I,J,bi,bj) = 0. _d 0
187               cg2d_b(I,J,bi,bj) = 0. _d 0
188    #ifdef ALLOW_CD
189               cg2d_xNM1(I,J,bi,bj) = 0. _d 0
190    #endif
191            ENDDO            ENDDO
192           ENDDO           ENDDO
193          ENDDO          ENDDO
194         ENDDO         ENDDO
195  C--    Update overlap regions  C--    Update overlap regions
196         _EXCH_XY_R8(cg2d_x, myThid)         _EXCH_XY_R8(cg2d_x, myThid)
197           _EXCH_XY_R8(cg2d_b, myThid)
198    #ifdef ALLOW_CD
199           _EXCH_XY_R8(cg2d_xNM1, myThid)
200    #endif
201        ENDIF        ENDIF
202    
203        RETURN        RETURN

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

  ViewVC Help
Powered by ViewVC 1.1.22