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