File indexing completed on 2025-04-19 05:07:56 UTC
view on githubraw file Latest commit 79b5d577 on 2025-04-18 19:55:23 UTC
6d54cf9ca1 Ed H*0001 #include "PACKAGES_CONFIG.h"
73470161ee Alis*0002 #include "CPP_OPTIONS.h"
924557e60a Chri*0003
9366854e02 Chri*0004
0005
0006
401025b3aa Jean*0007 SUBROUTINE SOLVE_FOR_PRESSURE( myTime, myIter, myThid )
924557e60a Chri*0008
9366854e02 Chri*0009
0010
4606c28752 Jean*0011
0012
0013
9366854e02 Chri*0014
0015
0016
0017
0018 IMPLICIT NONE
b05b067368 Chri*0019
0020 #include "SIZE.h"
0021 #include "EEPARAMS.h"
0022 #include "PARAMS.h"
9bec0e0933 Alis*0023 #include "GRID.h"
e4c980e777 Jean*0024 #include "SURFACE.h"
a10e105619 Jean*0025 #include "FFIELDS.h"
d1b81ea0bc Jean*0026 #include "DYNVARS.h"
88830be691 Alis*0027 #ifdef ALLOW_NONHYDROSTATIC
e6e223b277 Jean*0028 # include "NH_VARS.h"
d1b81ea0bc Jean*0029 #endif
0030 #ifdef ALLOW_CD_CODE
e6e223b277 Jean*0031 # include "CD_CODE_VARS.h"
9bec0e0933 Alis*0032 #endif
aecc8b0f47 Mart*0033 #ifdef ALLOW_AUTODIFF
0034 # include "AUTODIFF_PARAMS.h"
0035 #endif
b05b067368 Chri*0036
9366854e02 Chri*0037
4606c28752 Jean*0038
0039
0040
a10e105619 Jean*0041 _RL myTime
0042 INTEGER myIter
fa41ecc867 Jean*0043 INTEGER myThid
924557e60a Chri*0044
e6e223b277 Jean*0045
0046 LOGICAL DIFFERENT_MULTIPLE
0047 EXTERNAL DIFFERENT_MULTIPLE
0048 #ifdef ALLOW_DIAGNOSTICS
0049 LOGICAL DIAGNOSTICS_IS_ON
0050 EXTERNAL DIAGNOSTICS_IS_ON
0051 #endif /* ALLOW_DIAGNOSTICS */
0052
9366854e02 Chri*0053
46dc4f419b Chri*0054 INTEGER i,j,k,bi,bj
8991be1c08 Jean*0055 INTEGER ks
709f82ee4f Jean*0056 INTEGER numIters, nIterMin
0057 _RL firstResidual, minResidualSq, lastResidual
9800a0be87 Jean*0058 _RL tmpFac
4b77dcea5e Jean*0059 _RL sumEmP, tileEmP(nSx,nSy)
580d26b749 Jean*0060 LOGICAL putPmEinXvector
8991be1c08 Jean*0061 INTEGER ioUnit
ffc25bb3ad Alis*0062 CHARACTER*(MAX_LEN_MBUF) msgBuf
e6e223b277 Jean*0063
0064
0065
0066 _RL cg2d_x(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0067 _RL cg2d_b(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
3eba3ad632 Jean*0068 #ifdef ALLOW_NONHYDROSTATIC
e6e223b277 Jean*0069
0070
0071
0072
0073
0074 _RL cg3d_b(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0075 LOGICAL oldFreeSurfTerm
0076 #else /* ALLOW_NONHYDROSTATIC */
97c1a61dc2 Jean*0077 _RL cg3d_b(1)
e6e223b277 Jean*0078 #endif /* ALLOW_NONHYDROSTATIC */
c82bf29e7d Jean*0079 #ifdef ALLOW_DIAGNOSTICS
0080 CHARACTER*8 diagName
0081 _RL tmpVar (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0082 #endif /* ALLOW_DIAGNOSTICS */
9366854e02 Chri*0083
e4c980e777 Jean*0084
3eba3ad632 Jean*0085 #ifdef ALLOW_NONHYDROSTATIC
b05fbe36cb Jean*0086 oldFreeSurfTerm = use3Dsolver .AND. .NOT.exactConserv
97c1a61dc2 Jean*0087 #else
0088 cg3d_b(1) = 0.
3eba3ad632 Jean*0089 #endif
0090
4606c28752 Jean*0091
0092
0093
0094
0095
0096
0097
0098
0099
580d26b749 Jean*0100
0101
0102
0103 putPmEinXvector = .FALSE.
1db85ef88d Jean*0104
580d26b749 Jean*0105
401025b3aa Jean*0106 IF ( myIter.EQ.1+nIter0 .AND. debugLevel .GE. debLevA ) THEN
0107 _BEGIN_MASTER( myThid )
0108 ioUnit = standardMessageUnit
0109 WRITE(msgBuf,'(2A,L5)') 'SOLVE_FOR_PRESSURE:',
0110 & ' putPmEinXvector =', putPmEinXvector
0111 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0112 #ifdef ALLOW_NONHYDROSTATIC
0113 WRITE(msgBuf,'(2A,L5)') 'SOLVE_FOR_PRESSURE:',
0114 & ' oldFreeSurfTerm =', oldFreeSurfTerm
0115 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0116 #endif
0117 _END_MASTER( myThid )
0118 ENDIF
0119
e4c980e777 Jean*0120
580d26b749 Jean*0121 sumEmP = 0.
e4c980e777 Jean*0122 DO bj=myByLo(myThid),myByHi(myThid)
0123 DO bi=myBxLo(myThid),myBxHi(myThid)
0124 DO j=1-OLy,sNy+OLy
0125 DO i=1-OLx,sNx+OLx
138482fdf6 Ed H*0126 #ifdef ALLOW_CD_CODE
e4c980e777 Jean*0127 etaNm1(i,j,bi,bj) = etaN(i,j,bi,bj)
9fdcce8056 Jean*0128 #endif
5a1d0a13bb Jean*0129 cg2d_x(i,j,bi,bj) = Bo_surf(i,j,bi,bj)*etaN(i,j,bi,bj)
e6e223b277 Jean*0130 cg2d_b(i,j,bi,bj) = 0. _d 0
e4c980e777 Jean*0131 ENDDO
0132 ENDDO
e6e223b277 Jean*0133 #ifdef ALLOW_NONHYDROSTATIC
0134 DO k=1,Nr
0135 DO j=1-OLy,sNy+OLy
0136 DO i=1-OLx,sNx+OLx
0137 cg3d_b(i,j,k,bi,bj) = 0. _d 0
0138 ENDDO
0139 ENDDO
0140 ENDDO
0141 #endif /* ALLOW_NONHYDROSTATIC */
1db85ef88d Jean*0142 IF (useRealFreshWaterFlux.AND.fluidIsWater) THEN
bf53796fe2 Jean*0143 tmpFac = freeSurfFac*mass2rUnit*implicDiv2DFlow
fa41ecc867 Jean*0144 DO j=1,sNy
0145 DO i=1,sNx
4606c28752 Jean*0146 cg2d_b(i,j,bi,bj) =
fa41ecc867 Jean*0147 & tmpFac*_rA(i,j,bi,bj)*EmPmR(i,j,bi,bj)/deltaTMom
0148 ENDDO
0149 ENDDO
0150 ENDIF
580d26b749 Jean*0151 IF ( putPmEinXvector ) THEN
4b77dcea5e Jean*0152 tileEmP(bi,bj) = 0.
580d26b749 Jean*0153 DO j=1,sNy
0154 DO i=1,sNx
e9144dffd8 Jean*0155 tileEmP(bi,bj) = tileEmP(bi,bj)
4b77dcea5e Jean*0156 & + rA(i,j,bi,bj)*EmPmR(i,j,bi,bj)
064113f03d Jean*0157 & *maskInC(i,j,bi,bj)
580d26b749 Jean*0158 ENDDO
0159 ENDDO
0160 ENDIF
e4c980e777 Jean*0161 ENDDO
0162 ENDDO
580d26b749 Jean*0163 IF ( putPmEinXvector ) THEN
4b77dcea5e Jean*0164 CALL GLOBAL_SUM_TILE_RL( tileEmP, sumEmP, myThid )
580d26b749 Jean*0165 ENDIF
9bec0e0933 Alis*0166
0167 DO bj=myByLo(myThid),myByHi(myThid)
0168 DO bi=myBxLo(myThid),myBxHi(myThid)
580d26b749 Jean*0169 IF ( putPmEinXvector ) THEN
0170 tmpFac = 0.
62fd6ae4e5 Jean*0171 IF (globalArea.GT.0.) tmpFac =
b46f9da188 Jean*0172 & freeSurfFac*deltaTFreeSurf*mass2rUnit*sumEmP/globalArea
580d26b749 Jean*0173 DO j=1,sNy
0174 DO i=1,sNx
0175 cg2d_x(i,j,bi,bj) = cg2d_x(i,j,bi,bj)
0176 & - tmpFac*Bo_surf(i,j,bi,bj)
0177 ENDDO
0178 ENDDO
0179 ENDIF
4606c28752 Jean*0180
0181
97c1a61dc2 Jean*0182 DO k=Nr,1,-1
9bec0e0933 Alis*0183 CALL CALC_DIV_GHAT(
97c1a61dc2 Jean*0184 I bi,bj,k,
0185 U cg2d_b, cg3d_b,
0186 I myThid )
9bec0e0933 Alis*0187 ENDDO
0188 ENDDO
0189 ENDDO
b05b067368 Chri*0190
9bec0e0933 Alis*0191 DO bj=myByLo(myThid),myByHi(myThid)
0192 DO bi=myBxLo(myThid),myBxHi(myThid)
ca01a53d2c Alis*0193 #ifdef ALLOW_NONHYDROSTATIC
401025b3aa Jean*0194 IF ( oldFreeSurfTerm ) THEN
8991be1c08 Jean*0195
a10e105619 Jean*0196 DO j=1,sNy
0197 DO i=1,sNx
23d1f65433 Jean*0198 ks = kSurfC(i,j,bi,bj)
e4f5a8bbfa Jean*0199 IF ( ks.LE.Nr ) THEN
0200 cg2d_b(i,j,bi,bj) = cg2d_b(i,j,bi,bj)
4606c28752 Jean*0201 & -freeSurfFac*_rA(i,j,bi,bj)*deepFac2F(ks)
b46f9da188 Jean*0202 & /deltaTMom/deltaTFreeSurf
a10e105619 Jean*0203 & *( etaN(i,j,bi,bj)
62df886516 Jean*0204 & +phi_nh(i,j,ks,bi,bj)*recip_Bo(i,j,bi,bj) )
e4f5a8bbfa Jean*0205 cg3d_b(i,j,ks,bi,bj) = cg3d_b(i,j,ks,bi,bj)
4606c28752 Jean*0206 & -freeSurfFac*_rA(i,j,bi,bj)*deepFac2F(ks)
b46f9da188 Jean*0207 & /deltaTMom/deltaTFreeSurf
a10e105619 Jean*0208 & *( etaN(i,j,bi,bj)
62df886516 Jean*0209 & +phi_nh(i,j,ks,bi,bj)*recip_Bo(i,j,bi,bj) )
e4f5a8bbfa Jean*0210 ENDIF
a10e105619 Jean*0211 ENDDO
9bec0e0933 Alis*0212 ENDDO
a10e105619 Jean*0213 ELSEIF ( exactConserv ) THEN
ca01a53d2c Alis*0214 #else
8991be1c08 Jean*0215
9fdcce8056 Jean*0216 IF ( exactConserv ) THEN
6d54cf9ca1 Ed H*0217 #endif /* ALLOW_NONHYDROSTATIC */
9fdcce8056 Jean*0218 DO j=1,sNy
0219 DO i=1,sNx
23d1f65433 Jean*0220 ks = kSurfC(i,j,bi,bj)
9fdcce8056 Jean*0221 cg2d_b(i,j,bi,bj) = cg2d_b(i,j,bi,bj)
4606c28752 Jean*0222 & -freeSurfFac*_rA(i,j,bi,bj)*deepFac2F(ks)
b46f9da188 Jean*0223 & /deltaTMom/deltaTFreeSurf
9fdcce8056 Jean*0224 & * etaH(i,j,bi,bj)
0225 ENDDO
9bec0e0933 Alis*0226 ENDDO
9fdcce8056 Jean*0227 ELSE
0228 DO j=1,sNy
0229 DO i=1,sNx
23d1f65433 Jean*0230 ks = kSurfC(i,j,bi,bj)
9fdcce8056 Jean*0231 cg2d_b(i,j,bi,bj) = cg2d_b(i,j,bi,bj)
4606c28752 Jean*0232 & -freeSurfFac*_rA(i,j,bi,bj)*deepFac2F(ks)
b46f9da188 Jean*0233 & /deltaTMom/deltaTFreeSurf
9fdcce8056 Jean*0234 & * etaN(i,j,bi,bj)
0235 ENDDO
0236 ENDDO
0237 ENDIF
9bec0e0933 Alis*0238
0239 #ifdef ALLOW_OBCS
fc5959006e Jean*0240
0241
0242
0243
0244
0245
0246
0247
0248
fb481a83c2 Alis*0249 IF (useOBCS) THEN
9bec0e0933 Alis*0250 DO j=1,sNy
fc5959006e Jean*0251 DO i=1,sNx
0252 cg2d_b(i,j,bi,bj) = cg2d_b(i,j,bi,bj)*maskInC(i,j,bi,bj)
0253 cg2d_x(i,j,bi,bj) = cg2d_x(i,j,bi,bj)*maskInC(i,j,bi,bj)
0254 ENDDO
9bec0e0933 Alis*0255 ENDDO
0256 ENDIF
3eba3ad632 Jean*0257 #endif /* ALLOW_OBCS */
0258
9bec0e0933 Alis*0259 ENDDO
0260 ENDDO
0261
49e3578e36 Ed H*0262 #ifdef ALLOW_DEBUG
23d1f65433 Jean*0263 IF ( debugLevel .GE. debLevD ) THEN
f1ad9ab213 Alis*0264 CALL DEBUG_STATS_RL(1,cg2d_b,'cg2d_b (SOLVE_FOR_PRESSURE)',
0265 & myThid)
edc5b80aef Alis*0266 ENDIF
f1ad9ab213 Alis*0267 #endif
d7c506f5d1 Jean*0268 IF ( DIFFERENT_MULTIPLE(diagFreq, myTime, deltaTClock) ) THEN
d10cd93843 Jean*0269 CALL WRITE_FLD_XY_RL( 'cg2d_b', 'I10', cg2d_b, myIter, myThid )
d7c506f5d1 Jean*0270 ENDIF
9bec0e0933 Alis*0271
924557e60a Chri*0272
b46f9da188 Jean*0273
0274
0275
0276
709f82ee4f Jean*0277 numIters = cg2dMaxIters
b46f9da188 Jean*0278 nIterMin = cg2dUseMinResSol - 1
5c538761b9 Jean*0279
015c19607c Jean*0280 #ifdef DISCONNECTED_TILES
aecc8b0f47 Mart*0281
015c19607c Jean*0282 CALL CG2D_EX0(
0283 U cg2d_b, cg2d_x,
0284 O firstResidual, minResidualSq, lastResidual,
0285 U numIters, nIterMin,
0286 I myThid )
0287 #else /* not DISCONNECTED_TILES = default */
aecc8b0f47 Mart*0288 IF ( useSRCGSolver ) THEN
0289
0290 #ifdef ALLOW_SRCG
0291 CALL CG2D_SR(
709f82ee4f Jean*0292 U cg2d_b, cg2d_x,
0293 O firstResidual, minResidualSq, lastResidual,
0294 U numIters, nIterMin,
616600b8d2 Patr*0295 I myThid )
aecc8b0f47 Mart*0296 #endif /* ALLOW_SRCG */
0297 #ifdef ALLOW_CG2D_NSA
0298 ELSEIF ( useNSACGSolver ) THEN
0299
0300 CALL CG2D_NSA(
709f82ee4f Jean*0301 U cg2d_b, cg2d_x,
0302 O firstResidual, minResidualSq, lastResidual,
0303 U numIters, nIterMin,
924557e60a Chri*0304 I myThid )
aecc8b0f47 Mart*0305 #endif
23bce0bbb8 Mart*0306 ELSE
0307
0308 CALL CG2D(
709f82ee4f Jean*0309 U cg2d_b, cg2d_x,
0310 O firstResidual, minResidualSq, lastResidual,
0311 U numIters, nIterMin,
23bce0bbb8 Mart*0312 I myThid )
0313 ENDIF
015c19607c Jean*0314 #endif /* DISCONNECTED_TILES */
e9144dffd8 Jean*0315 _EXCH_XY_RL( cg2d_x, myThid )
aecc8b0f47 Mart*0316 #ifdef ALLOW_AUTODIFF
b4daa24319 Shre*0317 #ifndef ALLOW_TAPENADE
aecc8b0f47 Mart*0318 IF ( .NOT. useNSACGSolver .AND. cg2dFullAdjoint )
0319 & CALL CG2D_STORE( cg2d_x, .TRUE., myThid )
b4daa24319 Shre*0320 #endif /* ALLOW_TAPENADE */
aecc8b0f47 Mart*0321 #endif
5c538761b9 Jean*0322
623d24f8de Alis*0323
49e3578e36 Ed H*0324 #ifdef ALLOW_DEBUG
23d1f65433 Jean*0325 IF ( debugLevel .GE. debLevD ) THEN
f1ad9ab213 Alis*0326 CALL DEBUG_STATS_RL(1,cg2d_x,'cg2d_x (SOLVE_FOR_PRESSURE)',
0327 & myThid)
edc5b80aef Alis*0328 ENDIF
f1ad9ab213 Alis*0329 #endif
0330
b3cb6e4882 Jean*0331
0fa2023ba5 Jean*0332 IF ( DIFFERENT_MULTIPLE(monitorFreq,myTime,deltaTClock)
51d88069bf Jean*0333 & ) THEN
494ad43bae Patr*0334 IF ( debugLevel .GE. debLevA ) THEN
0335 _BEGIN_MASTER( myThid )
709f82ee4f Jean*0336 WRITE(msgBuf,'(A20,1PE23.14)') 'cg2d_init_res =',firstResidual
494ad43bae Patr*0337 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
709f82ee4f Jean*0338 WRITE(msgBuf,'(A27,2I8)')
0339 & 'cg2d_iters(min,last) =', nIterMin, numIters
494ad43bae Patr*0340 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
709f82ee4f Jean*0341 IF ( minResidualSq.GE.0. ) THEN
0342 minResidualSq = SQRT(minResidualSq)
0343 WRITE(msgBuf,'(A20,1PE23.14)') 'cg2d_min_res =',minResidualSq
0344 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0345 ENDIF
0346 WRITE(msgBuf,'(A20,1PE23.14)') 'cg2d_last_res =',lastResidual
494ad43bae Patr*0347 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
ea6e02f692 Ed H*0348 _END_MASTER( myThid )
494ad43bae Patr*0349 ENDIF
b3cb6e4882 Jean*0350 ENDIF
030bea3287 Alis*0351
c82bf29e7d Jean*0352 #ifdef ALLOW_DIAGNOSTICS
0353
0354 IF ( useDiagnostics .AND. implicSurfPress.NE.oneRL ) THEN
0355 diagName = 'PHI_SURF'
0356 IF ( DIAGNOSTICS_IS_ON(diagName,myThid) ) THEN
0357 DO bj=myByLo(myThid),myByHi(myThid)
0358 DO bi=myBxLo(myThid),myBxHi(myThid)
0359 DO j=1-OLy,sNy+OLy
0360 DO i=1-OLx,sNx+OLx
0361 tmpVar(i,j) = implicSurfPress * cg2d_x(i,j,bi,bj)
0362 & + (oneRL - implicSurfPress)* Bo_surf(i,j,bi,bj)
0363 & * etaN(i,j,bi,bj)
0364 ENDDO
0365 ENDDO
0366 CALL DIAGNOSTICS_FILL( tmpVar,diagName,1,1,2,bi,bj,myThid )
0367 ENDDO
0368 ENDDO
0369 ENDIF
0370 ELSEIF ( useDiagnostics ) THEN
0371 CALL DIAGNOSTICS_FILL( cg2d_x,'PHI_SURF', 0,1, 0,1,1, myThid )
0372 ENDIF
0373 #endif /* ALLOW_DIAGNOSTICS */
0374
e4c980e777 Jean*0375
0376 DO bj=myByLo(myThid),myByHi(myThid)
0377 DO bi=myBxLo(myThid),myBxHi(myThid)
0378 DO j=1-OLy,sNy+OLy
0379 DO i=1-OLx,sNx+OLx
5a1d0a13bb Jean*0380 etaN(i,j,bi,bj) = recip_Bo(i,j,bi,bj)*cg2d_x(i,j,bi,bj)
e4c980e777 Jean*0381 ENDDO
0382 ENDDO
0383 ENDDO
0384 ENDDO
0385
88830be691 Alis*0386 #ifdef ALLOW_NONHYDROSTATIC
cb7fa97db9 Jean*0387 IF ( use3Dsolver ) THEN
e9144dffd8 Jean*0388 IF ( DIFFERENT_MULTIPLE(diagFreq, myTime, deltaTClock) ) THEN
d10cd93843 Jean*0389 CALL WRITE_FLD_XY_RL( 'cg2d_x','I10', cg2d_x, myIter, myThid )
e9144dffd8 Jean*0390 ENDIF
88830be691 Alis*0391
0392
0393
401025b3aa Jean*0394
8991be1c08 Jean*0395
0396
0397
0398
0399 CALL PRE_CG3D(
0400 I oldFreeSurfTerm,
0401 I cg2d_x,
0402 U cg3d_b,
0403 I myTime, myIter, myThid )
88830be691 Alis*0404
e9144dffd8 Jean*0405 #ifdef ALLOW_DEBUG
23d1f65433 Jean*0406 IF ( debugLevel .GE. debLevD ) THEN
8991be1c08 Jean*0407 CALL DEBUG_STATS_RL(Nr,cg3d_b,'cg3d_b (SOLVE_FOR_PRESSURE)',
0408 & myThid)
494ad43bae Patr*0409 ENDIF
8991be1c08 Jean*0410 #endif
e9144dffd8 Jean*0411 IF ( DIFFERENT_MULTIPLE( diagFreq, myTime, deltaTClock) ) THEN
d10cd93843 Jean*0412 CALL WRITE_FLD_XYZ_RL('cg3d_b','I10', cg3d_b, myIter,myThid )
e9144dffd8 Jean*0413 ENDIF
3eba3ad632 Jean*0414
8991be1c08 Jean*0415 firstResidual=0.
0416 lastResidual=0.
0417 numIters=cg3dMaxIters
0418 CALL TIMER_START('CG3D [SOLVE_FOR_PRESSURE]',myThid)
015c19607c Jean*0419 #ifdef DISCONNECTED_TILES
0420 CALL CG3D_EX0(
0421 U cg3d_b, phi_nh,
0422 O firstResidual, lastResidual,
0423 U numIters,
0424 I myIter, myThid )
0425 #else /* not DISCONNECTED_TILES = default */
8991be1c08 Jean*0426 CALL CG3D(
709f82ee4f Jean*0427 U cg3d_b, phi_nh,
0428 O firstResidual, lastResidual,
8991be1c08 Jean*0429 U numIters,
0430 I myIter, myThid )
015c19607c Jean*0431 #endif /* DISCONNECTED_TILES */
8991be1c08 Jean*0432 _EXCH_XYZ_RL( phi_nh, myThid )
0433 CALL TIMER_STOP ('CG3D [SOLVE_FOR_PRESSURE]',myThid)
0434
0435 IF ( DIFFERENT_MULTIPLE(monitorFreq,myTime,deltaTClock)
0436 & ) THEN
0437 IF ( debugLevel .GE. debLevA ) THEN
0438 _BEGIN_MASTER( myThid )
709f82ee4f Jean*0439 WRITE(msgBuf,'(A20,1PE23.14)') 'cg3d_init_res =',firstResidual
8991be1c08 Jean*0440 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
709f82ee4f Jean*0441 WRITE(msgBuf,'(A27,I16)') 'cg3d_iters (last) = ',numIters
8991be1c08 Jean*0442 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
709f82ee4f Jean*0443 WRITE(msgBuf,'(A20,1PE23.14)') 'cg3d_last_res =',lastResidual
8991be1c08 Jean*0444 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0445 _END_MASTER( myThid )
0446 ENDIF
0447 ENDIF
3eba3ad632 Jean*0448
8991be1c08 Jean*0449
0450
0451 IF ( nonHydrostatic .AND. exactConserv ) THEN
0452 IF ( DIFFERENT_MULTIPLE( diagFreq, myTime, deltaTClock) ) THEN
d10cd93843 Jean*0453 CALL WRITE_FLD_XYZ_RL('cg3d_x','I10', phi_nh, myIter,myThid )
8991be1c08 Jean*0454 ENDIF
0455 CALL POST_CG3D(
0456 I myTime, myIter, myThid )
0457 ENDIF
3eba3ad632 Jean*0458
0459 ENDIF
0460 #endif /* ALLOW_NONHYDROSTATIC */
924557e60a Chri*0461
ded033bbc1 Patr*0462 #ifdef ALLOW_SHOWFLOPS
0463 CALL SHOWFLOPS_INSOLVE( myThid)
008ba3ca0d Cons*0464 #endif
c62d15f21c Cons*0465
ded033bbc1 Patr*0466 RETURN
ce86d9b87b Cons*0467 END