1 |
C $Header$ |
C $Header$ |
2 |
C $Name$ |
C $Name$ |
3 |
|
|
|
#include "PACKAGES_CONFIG.h" |
|
4 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
5 |
|
|
|
#define VERBOSE |
|
|
|
|
6 |
CBOP |
CBOP |
7 |
C !ROUTINE: CG3D |
C !ROUTINE: CG3D |
8 |
C !INTERFACE: |
C !INTERFACE: |
95 |
_RL sumRHS, sumRHStile |
_RL sumRHS, sumRHStile |
96 |
_RL rhsMax |
_RL rhsMax |
97 |
_RL rhsNorm |
_RL rhsNorm |
98 |
|
_RL topLevTerm |
|
INTEGER OLw |
|
|
INTEGER OLe |
|
|
INTEGER OLn |
|
|
INTEGER OLs |
|
|
INTEGER exchWidthX |
|
|
INTEGER exchWidthY |
|
|
INTEGER myNz |
|
|
_RL topLevTerm |
|
99 |
CEOP |
CEOP |
100 |
|
|
|
ceh3 needs an IF ( useNONHYDROSTATIC ) THEN |
|
|
|
|
101 |
|
|
102 |
C-- Initialise inverter |
C-- Initialise inverter |
103 |
eta_qrNM1 = 1. D0 |
eta_qrNM1 = 1. D0 |
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) |
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) |
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 |
err = err + errTile |
184 |
sumRHS = sumRHS + sumRHStile |
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, 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, 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 |
IF ( debugLevel .GE. debLevZero ) THEN |
IF ( debugLevel .GE. debLevZero ) THEN |
195 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
196 |
write(*,'(A,1P2E22.14)') |
write(standardmessageunit,'(A,1P2E22.14)') |
197 |
& ' cg3d: Sum(rhs),rhsMax = ',sumRHS,rhsMax |
& ' cg3d: Sum(rhs),rhsMax = ',sumRHS,rhsMax |
198 |
_END_MASTER( myThid ) |
_END_MASTER( myThid ) |
199 |
ENDIF |
ENDIF |
211 |
DO 10 it3d=1, cg3dMaxIters |
DO 10 it3d=1, cg3dMaxIters |
212 |
|
|
213 |
CcnhDebugStarts |
CcnhDebugStarts |
|
#ifdef VERBOSE |
|
214 |
c IF ( mod(it3d-1,10).EQ.0) |
c IF ( mod(it3d-1,10).EQ.0) |
215 |
c & WRITE(*,*) ' CG3D: Iteration ',it3d-1, |
c & WRITE(*,*) ' CG3D: Iteration ',it3d-1, |
216 |
c & ' residual = ',actualResidual |
c & ' 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 |
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, myNz, |
|
|
I exchWidthX, exchWidthY, |
|
|
I FORWARD_SIMULATION, EXCH_IGNORE_CORNERS, myThid ) |
|
452 |
|
|
453 |
10 CONTINUE |
10 CONTINUE |
454 |
11 CONTINUE |
11 CONTINUE |