20 |
#include "GRID.h" |
#include "GRID.h" |
21 |
#include "DYNVARS.h" |
#include "DYNVARS.h" |
22 |
#include "CG2D.h" |
#include "CG2D.h" |
23 |
|
#ifdef ALLOW_OBCS |
24 |
#include "OBCS.h" |
#include "OBCS.h" |
25 |
|
#endif |
26 |
|
|
27 |
C === Routine arguments === |
C === Routine arguments === |
28 |
C myThid - Thread no. that called this routine. |
C myThid - Thread no. that called this routine. |
70 |
ENDDO |
ENDDO |
71 |
ENDDO |
ENDDO |
72 |
ENDDO |
ENDDO |
73 |
IF (openBoundaries) THEN |
#ifdef ALLOW_OBCS |
74 |
|
IF (useOBCS) THEN |
75 |
DO I=1,sNx |
DO I=1,sNx |
76 |
IF (OB_Jn(I,bi,bj).NE.0) aS2d(I,OB_Jn(I,bi,bj),bi,bj)=0. |
IF (OB_Jn(I,bi,bj).NE.0) aS2d(I,OB_Jn(I,bi,bj),bi,bj)=0. |
77 |
IF (OB_Jn(I,bi,bj).NE.0) aS2d(I,OB_Jn(I,bi,bj)+1,bi,bj)=0. |
IF (OB_Jn(I,bi,bj).NE.0) aS2d(I,OB_Jn(I,bi,bj)+1,bi,bj)=0. |
85 |
IF (OB_Iw(J,bi,bj).NE.0) aW2d(OB_Iw(J,bi,bj),J,bi,bj)=0. |
IF (OB_Iw(J,bi,bj).NE.0) aW2d(OB_Iw(J,bi,bj),J,bi,bj)=0. |
86 |
ENDDO |
ENDDO |
87 |
ENDIF |
ENDIF |
88 |
|
#endif |
89 |
DO J=1,sNy |
DO J=1,sNy |
90 |
DO I=1,sNx |
DO I=1,sNx |
91 |
myNorm = MAX(ABS(aW2d(I,J,bi,bj)),myNorm) |
myNorm = MAX(ABS(aW2d(I,J,bi,bj)),myNorm) |
94 |
ENDDO |
ENDDO |
95 |
ENDDO |
ENDDO |
96 |
ENDDO |
ENDDO |
97 |
cg2dNbuf(1,myThid) = myNorm |
_GLOBAL_MAX_R4( myNorm, myThid ) |
98 |
_GLOBAL_MAX_R4( cg2dNbuf, myNorm, myThid ) |
IF ( myNorm .NE. 0. _d 0 ) THEN |
99 |
IF ( cg2dNbuf(1,1) .NE. 0. _d 0 ) THEN |
myNorm = 1. _d 0/myNorm |
|
myNorm = 1. _d 0/cg2dNbuf(1,1) |
|
100 |
ELSE |
ELSE |
101 |
myNorm = 1. _d 0 |
myNorm = 1. _d 0 |
102 |
ENDIF |
ENDIF |
129 |
_EXCH_XY_R4(aW2d, myThid) |
_EXCH_XY_R4(aW2d, myThid) |
130 |
_EXCH_XY_R4(aS2d, myThid) |
_EXCH_XY_R4(aS2d, myThid) |
131 |
CcnhDebugStarts |
CcnhDebugStarts |
132 |
CALL PLOT_FIELD_XYRS( aW2d, 'AW2D INI_CG2D.2' , 1, myThid ) |
C CALL PLOT_FIELD_XYRS( aW2d, 'AW2D INI_CG2D.2' , 1, myThid ) |
133 |
CALL PLOT_FIELD_XYRS( aS2d, 'AS2D INI_CG2D.2' , 1, myThid ) |
C CALL PLOT_FIELD_XYRS( aS2d, 'AS2D INI_CG2D.2' , 1, myThid ) |
134 |
CcnhDebugEnds |
CcnhDebugEnds |
135 |
|
|
136 |
C-- Initialise preconditioner |
C-- Initialise preconditioner |
154 |
pC(I,J,bi,bj) = 1. _d 0 |
pC(I,J,bi,bj) = 1. _d 0 |
155 |
aC = -( |
aC = -( |
156 |
& aW2d(I,J,bi,bj) + aW2d(I+1,J ,bi,bj) |
& aW2d(I,J,bi,bj) + aW2d(I+1,J ,bi,bj) |
157 |
& +aS2d(I,J,bi,bj) + aS2D(I ,J+1,bi,bj) |
& +aS2d(I,J,bi,bj) + aS2d(I ,J+1,bi,bj) |
158 |
& +freeSurfFac*myNorm* horiVertRatio* |
& +freeSurfFac*myNorm* horiVertRatio* |
159 |
& rA(I,J,bi,bj)/deltaTMom/deltaTMom |
& rA(I,J,bi,bj)/deltaTMom/deltaTMom |
160 |
& ) |
& ) |
171 |
& rA(I-1,J,bi,bj)/deltaTMom/deltaTMom |
& rA(I-1,J,bi,bj)/deltaTMom/deltaTMom |
172 |
& ) |
& ) |
173 |
IF ( aC .EQ. 0. ) THEN |
IF ( aC .EQ. 0. ) THEN |
174 |
pC(I,J,bi,bj) = 0. _d 0 |
pC(I,J,bi,bj) = 1. _d 0 |
175 |
ELSE |
ELSE |
176 |
pC(I,J,bi,bj) = 1. _d 0 / aC |
pC(I,J,bi,bj) = 1. _d 0 / aC |
177 |
ENDIF |
ENDIF |
199 |
_EXCH_XY_R4(pW, myThid) |
_EXCH_XY_R4(pW, myThid) |
200 |
_EXCH_XY_R4(pS, myThid) |
_EXCH_XY_R4(pS, myThid) |
201 |
CcnhDebugStarts |
CcnhDebugStarts |
202 |
CALL PLOT_FIELD_XYRS( pC, 'pC INI_CG2D.2' , 1, myThid ) |
C CALL PLOT_FIELD_XYRS( pC, 'pC INI_CG2D.2' , 1, myThid ) |
203 |
CALL PLOT_FIELD_XYRS( pW, 'pW INI_CG2D.2' , 1, myThid ) |
C CALL PLOT_FIELD_XYRS( pW, 'pW INI_CG2D.2' , 1, myThid ) |
204 |
CALL PLOT_FIELD_XYRS( pS, 'pS INI_CG2D.2' , 1, myThid ) |
C CALL PLOT_FIELD_XYRS( pS, 'pS INI_CG2D.2' , 1, myThid ) |
205 |
CcnhDebugEnds |
CcnhDebugEnds |
206 |
|
|
207 |
C-- Set default values for initial guess and RHS |
C-- Set default values for initial guess and RHS |