File indexing completed on 2024-06-06 05:11:00 UTC
view on githubraw file Latest commit af61e5eb on 2024-06-06 03:30:35 UTC
42c525bfb4 Alis*0001 #include "OBCS_OPTIONS.h"
0002
c34c2efdb0 Jean*0003
0004
0005
42c525bfb4 Alis*0006 SUBROUTINE OBCS_CHECK( myThid )
c34c2efdb0 Jean*0007
0008
2d12bccb16 Jean*0009
0010
c34c2efdb0 Jean*0011
2d12bccb16 Jean*0012
42c525bfb4 Alis*0013
c34c2efdb0 Jean*0014
0015 IMPLICIT NONE
42c525bfb4 Alis*0016
0017 #include "SIZE.h"
0018 #include "EEPARAMS.h"
63e7cf8192 Jean*0019 #include "PARAMS.h"
fb919e1dd2 Jean*0020 #include "GRID.h"
9b4f2a04e2 Jean*0021 #include "OBCS_PARAMS.h"
0022 #include "OBCS_GRID.h"
c7c4b57180 Dimi*0023 #include "OBCS_SEAICE.h"
00cd44357b Jean*0024 #ifdef ALLOW_PTRACERS
0025 # include "PTRACERS_SIZE.h"
0026 # include "PTRACERS_PARAMS.h"
0027 # include "OBCS_PTRACERS.h"
0028 #endif /* ALLOW_PTRACERS */
42c525bfb4 Alis*0029
c34c2efdb0 Jean*0030
42c525bfb4 Alis*0031
2d12bccb16 Jean*0032
42c525bfb4 Alis*0033 INTEGER myThid
c34c2efdb0 Jean*0034
42c525bfb4 Alis*0035
0036 #ifdef ALLOW_OBCS
0037
fb919e1dd2 Jean*0038
0039 INTEGER ILNBLNK
0040 EXTERNAL ILNBLNK
0041
c34c2efdb0 Jean*0042
fb919e1dd2 Jean*0043
0044
0045
42c525bfb4 Alis*0046 CHARACTER*(MAX_LEN_MBUF) msgBuf
fb919e1dd2 Jean*0047 INTEGER bi, bj
0048 INTEGER i, j
0049 INTEGER ln
f4098ccf3f Jean*0050 INTEGER ioUnit
7f7a43158f Jean*0051 INTEGER errCount
abfe198bce Mart*0052 #ifdef ALLOW_OBCS_BALANCE
0053
0054 INTEGER nTileWithActiveOB
0055 #endif
f4098ccf3f Jean*0056
0057 ioUnit = standardMessageUnit
42c525bfb4 Alis*0058
f4098ccf3f Jean*0059
0060
0061
0062 _BEGIN_MASTER(myThid)
7f7a43158f Jean*0063
0064 WRITE(msgBuf,'(A)') 'OBCS_CHECK: #define ALLOW_OBCS'
0065 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0066
abfe198bce Mart*0067 #ifdef ALLOW_OBCS_BALANCE
0068 IF ( OBCSbalanceSurf .AND. .NOT. useRealFreshWaterFlux ) THEN
0069 WRITE(msgBuf,'(2A)') '** WARNING ** OBCS_CHECK: ',
0070 & 'OBCSbalanceSurf requires useRealFreshWaterFlux=T'
0071 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0072 & SQUEEZE_RIGHT, myThid )
0073 WRITE(msgBuf,'(2A)') '** WARNING ** OBCS_CHECK: ',
0074 & 'resetting OBCSbalanceSurf to False'
0075 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0076 & SQUEEZE_RIGHT, myThid )
0077 OBCSbalanceSurf = .FALSE.
0078 ENDIF
0079 #endif /* ALLOW_OBCS_BALANCE */
0080
e99fa9b078 Mart*0081 WRITE(msgBuf,'(A)')
0082 &'// ======================================================='
f4098ccf3f Jean*0083 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
e99fa9b078 Mart*0084 WRITE(msgBuf,'(A)') '// OBCS_CHECK: OBCS configuration summary'
0085 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0086 WRITE(msgBuf,'(A)')
0087 &'// ======================================================='
0088 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0089 WRITE(msgBuf,'(A)') ' '
0090 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0091
4fb81a5efb Jean*0092 CALL WRITE_0D_L( useOBCSprescribe, INDEX_NONE,
0093 & 'useOBCSprescribe =', ' /* prescribe OB values */')
f4098ccf3f Jean*0094 CALL WRITE_0D_L( useOBCSbalance, INDEX_NONE,
0095 & 'useOBCSbalance =', ' /* balance the flow through OB */')
0096 IF ( useOBCSbalance ) THEN
abfe198bce Mart*0097 CALL WRITE_0D_L( OBCSbalanceSurf, INDEX_NONE,
0098 & 'OBCSbalanceSurf =', ' /* include surf. flux in balance */')
f4098ccf3f Jean*0099 CALL WRITE_0D_RL( OBCS_balanceFacN, INDEX_NONE,
0100 & 'OBCS_balanceFacN =',
0101 & ' /* Northern OB Factor for balancing OB flow [-] */')
0102 CALL WRITE_0D_RL( OBCS_balanceFacS, INDEX_NONE,
0103 & 'OBCS_balanceFacS =',
0104 & ' /* Southern OB Factor for balancing OB flow [-] */')
0105 CALL WRITE_0D_RL( OBCS_balanceFacE, INDEX_NONE,
0106 & 'OBCS_balanceFacE =',
0107 & ' /* Eastern OB Factor for balancing OB flow [-] */')
0108 CALL WRITE_0D_RL( OBCS_balanceFacW, INDEX_NONE,
0109 & 'OBCS_balanceFacW =',
0110 & ' /* Western OB Factor for balancing OB flow [-] */')
0111 ENDIF
e99fa9b078 Mart*0112
0113 CALL WRITE_0D_L( OBCSfixTopo, INDEX_NONE,
0114 & 'OBCSfixTopo =',
0115 & ' /* mod. topo to have zero gradient across boundaries. */')
52fba54157 Jean*0116 CALL WRITE_0D_RL( OBCS_uvApplyFac, INDEX_NONE,
0117 & 'OBCS_uvApplyFac =',
0118 & ' /* Factor to apply to U,V 2nd column/row */')
4fb81a5efb Jean*0119 CALL WRITE_0D_I( OBCS_u1_adv_T, INDEX_NONE,
0120 & 'OBCS_u1_adv_T =', ' /* Temp uses upwind adv-scheme @ OB */')
0121 CALL WRITE_0D_I( OBCS_u1_adv_S, INDEX_NONE,
0122 & 'OBCS_u1_adv_S =', ' /* Salt uses upwind adv-scheme @ OB */')
00cd44357b Jean*0123 #ifdef ALLOW_PTRACERS
0124 IF ( usePTRACERS ) THEN
0125 CALL WRITE_1D_I( OBCS_u1_adv_Tr, PTRACERS_numInUse, INDEX_NONE,
0126 & 'OBCS_u1_adv_Tr =', ' /* pTr uses upwind adv-scheme @ OB */')
0127 ENDIF
0128 #endif /* ALLOW_PTRACERS */
f4098ccf3f Jean*0129 CALL WRITE_0D_RL( OBCS_monitorFreq, INDEX_NONE,
0130 & 'OBCS_monitorFreq =', ' /* monitor output frequency [s] */')
0131 CALL WRITE_0D_I( OBCS_monSelect, INDEX_NONE, 'OBCS_monSelect =',
0132 & ' /* select group of variables to monitor */')
e99fa9b078 Mart*0133 CALL WRITE_0D_L( OBCSprintDiags, INDEX_NONE,
672b822630 Jean*0134 & 'OBCSprintDiags =', ' /* print some OBCS diagnostics. */')
e99fa9b078 Mart*0135
6f4cf52d27 Dimi*0136 CALL WRITE_0D_L( useOBCStides, INDEX_NONE,
0137 & 'useOBCStides =', ' /* apply tidal forcing through OB */')
672b822630 Jean*0138 IF ( useOBCStides ) THEN
0139 CALL WRITE_0D_I( OBCS_nTidalComp, INDEX_NONE,
0140 & 'OBCS_nTidalComp =', ' /* number of tidal-Comp to use */')
0141 CALL WRITE_1D_RL( OBCS_tidalPeriod, OBCS_tideCompSize, INDEX_K,
0142 & 'OBCS_tidalPeriod = ', ' /* (s) */')
0143 ENDIF
e99fa9b078 Mart*0144
0145 CALL WRITE_0D_L( useOrlanskiNorth, INDEX_NONE,
0146 & 'useOrlanskiNorth =', ' /* use Orlanski for northern bound. */')
0147 CALL WRITE_0D_L( useOrlanskiSouth, INDEX_NONE,
0148 & 'useOrlanskiSouth =', ' /* use Orlanski for southern bound. */')
0149 CALL WRITE_0D_L( useOrlanskiEast, INDEX_NONE,
0150 & 'useOrlanskiEast =', ' /* use Orlanski for eastern bound. */')
0151 CALL WRITE_0D_L( useOrlanskiWest, INDEX_NONE,
0152 & 'useOrlanskiWest =', ' /* use Orlanski for western bound. */')
0153
0154 CALL WRITE_0D_L( useStevensNorth, INDEX_NONE,
0155 & 'useStevensNorth =', ' /* use Stevens for northern bound. */')
0156 CALL WRITE_0D_L( useStevensSouth, INDEX_NONE,
0157 & 'useStevensSouth =', ' /* use Stevens for southern bound. */')
0158 CALL WRITE_0D_L( useStevensEast, INDEX_NONE,
0159 & 'useStevensEast =', ' /* use Stevens for eastern bound. */')
0160 CALL WRITE_0D_L( useStevensWest, INDEX_NONE,
0161 & 'useStevensWest =', ' /* use Stevens for western bound. */')
0162 CALL WRITE_0D_L( useStevensPhaseVel, INDEX_NONE,
0163 & 'useStevensPhaseVel =', ' /* include phase vel. term. */')
0164 CALL WRITE_0D_L( useStevensAdvection, INDEX_NONE,
0165 & 'useStevensAdvection =', ' /* include advection term. */')
42f1782a7e Jean*0166 CALL WRITE_0D_RS( TrelaxStevens, INDEX_NONE,
e99fa9b078 Mart*0167 & 'TrelaxStevens =',
0168 & ' /* relaxation time scale for theta ( s ). */')
42f1782a7e Jean*0169 CALL WRITE_0D_RS( SrelaxStevens, INDEX_NONE,
e99fa9b078 Mart*0170 & 'SrelaxStevens =',
0171 & ' /* relaxation time scale for salinity ( s ). */')
0172
0173 CALL WRITE_0D_L( useOBCSsponge, INDEX_NONE,
0174 & 'useOBCSSponge =', ' /* use sponge along boundaries */')
0175 IF ( useOBCSSponge ) THEN
0176 CALL WRITE_0D_L( OBCSsponge_N, INDEX_NONE,
0177 & 'OBCSSponge_N =', ' /* use sponge for northern boundary */')
0178 CALL WRITE_0D_L( OBCSsponge_S, INDEX_NONE,
0179 & 'OBCSSponge_S =', ' /* use sponge for southern boundary */')
0180 CALL WRITE_0D_L( OBCSsponge_E, INDEX_NONE,
0181 & 'OBCSSponge_E =', ' /* use sponge for eastern boundary */')
0182 CALL WRITE_0D_L( OBCSsponge_W, INDEX_NONE,
0183 & 'OBCSSponge_W =', ' /* use sponge for western boundary */')
0184 CALL WRITE_0D_L( OBCSsponge_UatNS, INDEX_NONE,
0185 & 'OBCSSponge_UatNS =', ' /* use u-vel. sponge at N/S bound. */')
0186 CALL WRITE_0D_L( OBCSsponge_UatEW, INDEX_NONE,
0187 & 'OBCSSponge_UatEW =', ' /* use u-vel. sponge at E/W bound. */')
0188 CALL WRITE_0D_L( OBCSsponge_VatNS, INDEX_NONE,
0189 & 'OBCSSponge_VatNS =', ' /* use v-vel. sponge at N/S bound. */')
0190 CALL WRITE_0D_L( OBCSsponge_UatEW, INDEX_NONE,
0191 & 'OBCSSponge_VatEW =', ' /* use v-vel. sponge at E/W bound. */')
0192 CALL WRITE_0D_L( OBCSsponge_Theta, INDEX_NONE,
0193 & 'OBCSSponge_Theta =', ' /* use sponge for Theta. */')
0194 CALL WRITE_0D_L( OBCSsponge_Salt, INDEX_NONE,
0195 & 'OBCSSponge_Salt =', ' /* use sponge for salinity. */')
0196 CALL WRITE_0D_L( useLinearSponge, INDEX_NONE,
0197 & 'useLinearSponge =', ' /* use linear sponge. */')
0198 CALL WRITE_0D_I( spongeThickness, INDEX_NONE,
0199 & 'spongeThickness =',
0200 & ' /* number grid points in sponge */')
42f1782a7e Jean*0201 CALL WRITE_0D_RS( Urelaxobcsinner, INDEX_NONE,
e99fa9b078 Mart*0202 & 'Urelaxobcsinner =',
0203 & ' /* innermost relaxation time scale, u-velocity ( s ). */')
42f1782a7e Jean*0204 CALL WRITE_0D_RS( Urelaxobcsbound, INDEX_NONE,
e99fa9b078 Mart*0205 & 'Urelaxobcsbound =',
0206 & ' /* boudnary relaxation time scale, u-velocity ( s ). */')
42f1782a7e Jean*0207 CALL WRITE_0D_RS( Vrelaxobcsinner, INDEX_NONE,
e99fa9b078 Mart*0208 & 'Vrelaxobcsinner =',
0209 & ' /* innermost relaxation time scale, v-velocity ( s ). */')
42f1782a7e Jean*0210 CALL WRITE_0D_RS( Vrelaxobcsbound, INDEX_NONE,
e99fa9b078 Mart*0211 & 'Vrelaxobcsbound =',
0212 & ' /* boundary relaxation time scale, v-velocity ( s ). */')
0213 ENDIF
af61e5eb16 Mart*0214 CALL WRITE_0D_L( useSeaiceSponge, INDEX_NONE,
0215 & 'useSeaiceSponge =', ' /* use sponge for sea ice variables */')
0216 CALL WRITE_0D_L( useSeaiceNeumann, INDEX_NONE,
0217 & 'useSeaiceNeumann =',
0218 & ' /* use Neumann conditions for sea ice variables */')
e99fa9b078 Mart*0219
fb919e1dd2 Jean*0220 ln = ILNBLNK(insideOBmaskFile)
0221 IF ( ln.GT.0 ) THEN
0222 CALL WRITE_0D_C( insideOBmaskFile, ln, INDEX_NONE,
0223 & 'insideOBmaskFile =',
0224 & ' /* used to specify Inside OB region mask */')
0225 ENDIF
c816a80284 Jean*0226 CALL WRITE_0D_I( OB_indexNone, INDEX_NONE, 'OB_indexNone =',
0227 & ' /* null value for OB index (i.e. no OB) */')
c34c2efdb0 Jean*0228
f7adb5bd83 Jean*0229 IF ( debugLevel.GE.debLevA ) THEN
c34c2efdb0 Jean*0230 DO bj = 1,nSy
0231 DO bi = 1,nSx
f7adb5bd83 Jean*0232 WRITE(msgBuf,'(A,2(I4,A))')
0233 & '======== Tile bi=', bi, ' , bj=', bj, ' ========'
f4098ccf3f Jean*0234 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
f7adb5bd83 Jean*0235 WRITE(msgBuf,'(A)') ' OB_Jn = /* Northern OB local indices */'
f4098ccf3f Jean*0236 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
4fb81a5efb Jean*0237 CALL PRINT_LIST_I( OB_Jn(1-OLx,bi,bj), 1-OLx, sNx+OLx, INDEX_I,
f4098ccf3f Jean*0238 & .FALSE., .TRUE., ioUnit )
f7adb5bd83 Jean*0239 WRITE(msgBuf,'(A)') ' OB_Js = /* Southern OB local indices */'
f4098ccf3f Jean*0240 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
4fb81a5efb Jean*0241 CALL PRINT_LIST_I( OB_Js(1-OLx,bi,bj), 1-OLx, sNx+OLx, INDEX_I,
f4098ccf3f Jean*0242 & .FALSE., .TRUE., ioUnit )
f7adb5bd83 Jean*0243 WRITE(msgBuf,'(A)') ' OB_Ie = /* Eastern OB local indices */'
f4098ccf3f Jean*0244 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
4fb81a5efb Jean*0245 CALL PRINT_LIST_I( OB_Ie(1-OLy,bi,bj), 1-OLy, sNy+OLy, INDEX_J,
f4098ccf3f Jean*0246 & .FALSE., .TRUE., ioUnit )
f7adb5bd83 Jean*0247 WRITE(msgBuf,'(A)') ' OB_Iw = /* Western OB local indices */'
f4098ccf3f Jean*0248 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
4fb81a5efb Jean*0249 CALL PRINT_LIST_I( OB_Iw(1-OLy,bi,bj), 1-OLy, sNy+OLy, INDEX_J,
f4098ccf3f Jean*0250 & .FALSE., .TRUE., ioUnit )
c34c2efdb0 Jean*0251 ENDDO
0252 ENDDO
0253 ENDIF
0254
e99fa9b078 Mart*0255 WRITE(msgBuf,'(A)')
0256 &'// ======================================================='
0257 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0258 WRITE(msgBuf,'(A)') '// End of OBCS config. summary'
0259 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0260 WRITE(msgBuf,'(A)')
0261 &'// ======================================================='
0262 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0263 WRITE(msgBuf,'(A)') ' '
f4098ccf3f Jean*0264 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0265
0266 _END_MASTER(myThid)
0267
0268
0269
0270
7f7a43158f Jean*0271
0272 errCount = 0
c34c2efdb0 Jean*0273 _BEGIN_MASTER( myThid )
7f7a43158f Jean*0274 DO bj = 1,nSy
0275 DO bi = 1,nSx
c34c2efdb0 Jean*0276 #ifndef ALLOW_OBCS_NORTH
0277 IF ( tileHasOBN(bi,bj) ) THEN
0278 WRITE(msgBuf,'(A)')
0279 & 'OBCS_CHECK: #undef ALLOW_OBCS_NORTH and'
0280 CALL PRINT_ERROR( msgBuf, myThid )
0281 WRITE(msgBuf,'(A,2I4,A)')
0282 & 'OBCS_CHECK: tile bi,bj=',bi,bj, ' has Northern OB'
0283 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0284 errCount = errCount + 1
c34c2efdb0 Jean*0285 ENDIF
0286 #endif
0287 #ifndef ALLOW_OBCS_SOUTH
0288 IF ( tileHasOBS(bi,bj) ) THEN
0289 WRITE(msgBuf,'(A)')
0290 & 'OBCS_CHECK: #undef ALLOW_OBCS_SOUTH and'
0291 CALL PRINT_ERROR( msgBuf, myThid )
0292 WRITE(msgBuf,'(A,2I4,A)')
0293 & 'OBCS_CHECK: tile bi,bj=',bi,bj, ' has Southern OB'
0294 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0295 errCount = errCount + 1
c34c2efdb0 Jean*0296 ENDIF
0297 #endif
0298 #ifndef ALLOW_OBCS_EAST
0299 IF ( tileHasOBE(bi,bj) ) THEN
0300 WRITE(msgBuf,'(A)')
0301 & 'OBCS_CHECK: #undef ALLOW_OBCS_EAST and'
0302 CALL PRINT_ERROR( msgBuf, myThid )
0303 WRITE(msgBuf,'(A,2I4,A)')
0304 & 'OBCS_CHECK: tile bi,bj=',bi,bj, ' has Eastern OB'
0305 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0306 errCount = errCount + 1
c34c2efdb0 Jean*0307 ENDIF
0308 #endif
0309 #ifndef ALLOW_OBCS_WEST
0310 IF ( tileHasOBW(bi,bj) ) THEN
0311 WRITE(msgBuf,'(A)')
0312 & 'OBCS_CHECK: #undef ALLOW_OBCS_WEST and'
0313 CALL PRINT_ERROR( msgBuf, myThid )
0314 WRITE(msgBuf,'(A,2I4,A)')
0315 & 'OBCS_CHECK: tile bi,bj=',bi,bj, ' has Western OB'
0316 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0317 errCount = errCount + 1
c34c2efdb0 Jean*0318 ENDIF
0319 #endif
0320 ENDDO
7f7a43158f Jean*0321 ENDDO
c34c2efdb0 Jean*0322 _END_MASTER(myThid)
7f7a43158f Jean*0323 CALL GLOBAL_SUM_INT( errCount, myThid )
0324 IF ( errCount.GE.1 ) THEN
0325 WRITE(msgBuf,'(A,I6,A)')
0326 & 'OBCS_CHECK:', errCount,' errors in tile OB set-up'
0327 CALL PRINT_ERROR( msgBuf, myThid )
0328 CALL ALL_PROC_DIE( myThid )
0329 STOP 'ABNORMAL END: S/R OBCS_CHECK'
0330 ENDIF
0331
abfe198bce Mart*0332 #ifdef ALLOW_OBCS_BALANCE
0333 IF ( OBCSbalanceSurf ) THEN
0334
0335 nTileWithActiveOB = 0
0336 DO bj = myByLo(myThid), myByHi(myThid)
0337 DO bi = myBxLo(myThid), myBxHi(myThid)
0338
0339 IF ( tileHasOBE(bi,bj) .AND. OBCS_balanceFacE .GT. 0. _d 0 )
0340 & nTileWithActiveOB = nTileWithActiveOB + 1
0341
0342 IF ( tileHasOBW(bi,bj) .AND. OBCS_balanceFacW .GT. 0. _d 0 )
0343 & nTileWithActiveOB = nTileWithActiveOB + 1
0344
0345 IF ( tileHasOBN(bi,bj) .AND. OBCS_balanceFacN .GT. 0. _d 0 )
0346 & nTileWithActiveOB = nTileWithActiveOB + 1
0347
0348 IF ( tileHasOBS(bi,bj) .AND. OBCS_balanceFacS .GT. 0. _d 0 )
0349 & nTileWithActiveOB = nTileWithActiveOB + 1
0350 ENDDO
0351 ENDDO
0352 CALL GLOBAL_SUM_INT( nTileWithActiveOB, myThid )
0353 ENDIF
0354 #endif /* ALLOW_OBCS_BALANCE */
0355
7f7a43158f Jean*0356
0357
0358 _BEGIN_MASTER( myThid )
0359 errCount = 0
42c525bfb4 Alis*0360
fc187b9c6d Mart*0361 #ifdef ALLOW_CD_CODE
0362 IF ( useCDscheme ) THEN
7f7a43158f Jean*0363 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
509b3e039c Jean*0364 & 'OBCS not yet implemented in CD-Scheme (useCDscheme=T)'
7f7a43158f Jean*0365 CALL PRINT_ERROR( msgBuf, myThid )
0366 errCount = errCount + 1
fc187b9c6d Mart*0367 ENDIF
0368 #endif /* ALLOW_CD_CODE */
0369
42c525bfb4 Alis*0370 #ifdef ALLOW_ORLANSKI
0371 WRITE(msgBuf,'(A)') 'OBCS_CHECK: #define ALLOW_ORLANSKI'
f4098ccf3f Jean*0372 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
42c525bfb4 Alis*0373 #else
0374 IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR.
0375 & useOrlanskiEast.OR.useOrlanskiWest) THEN
0376 WRITE(msgBuf,'(A)')
509b3e039c Jean*0377 & 'OBCS_CHECK: #undef ALLOW_ORLANSKI and'
2d12bccb16 Jean*0378 CALL PRINT_ERROR( msgBuf, myThid )
42c525bfb4 Alis*0379 WRITE(msgBuf,'(A)')
509b3e039c Jean*0380 & 'OBCS_CHECK: one of useOrlanski* logicals is true'
2d12bccb16 Jean*0381 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0382 errCount = errCount + 1
614077ca71 Jean*0383 ENDIF
42c525bfb4 Alis*0384 #endif /* ALLOW_ORLANSKI */
0385
63e7cf8192 Jean*0386 IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR.
0387 & useOrlanskiEast.OR.useOrlanskiWest) THEN
0388 IF (nonlinFreeSurf.GT.0) THEN
509b3e039c Jean*0389 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0390 & 'nonlinFreeSurf not yet implemented in Orlanski OBC'
2d12bccb16 Jean*0391 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0392 errCount = errCount + 1
63e7cf8192 Jean*0393 ENDIF
ee1c912a22 Mart*0394 IF (usePTracers) THEN
509b3e039c Jean*0395 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0396 & ' useOrlanski* OBC not yet implemented for pTracers'
2d12bccb16 Jean*0397 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0398 errCount = errCount + 1
ee1c912a22 Mart*0399 ENDIF
869a19390a Dimi*0400 IF (useSEAICE) THEN
509b3e039c Jean*0401 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0402 & ' useOrlanski* OBC not yet implemented for SEAICE'
2d12bccb16 Jean*0403 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0404 errCount = errCount + 1
869a19390a Dimi*0405 ENDIF
0406 ENDIF
0407
b2cb1ccb9a Mart*0408 #ifdef ALLOW_OBCS_STEVENS
0409 WRITE(msgBuf,'(A)') 'OBCS_CHECK: #define ALLOW_OBCS_STEVENS'
f4098ccf3f Jean*0410 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
b2cb1ccb9a Mart*0411
0412 IF ( ( useStevensNorth.AND.useOrlanskiNorth )
0413 & .OR. ( useStevensSouth.AND.useOrlanskiSouth )
0414 & .OR. ( useStevensEast.AND.useOrlanskiEast )
0415 & .OR. ( useStevensWest.AND.useOrlanskiWest ) ) THEN
7f7a43158f Jean*0416 WRITE(msgBuf,'(A)')
0417 & 'OBCS_CHECK: both useOrlanski* and useStevens* logicals'
0418 CALL PRINT_ERROR( msgBuf, myThid )
0419 WRITE(msgBuf,'(A)')
509b3e039c Jean*0420 & 'OBCS_CHECK: are true for at least one boundary'
7f7a43158f Jean*0421 CALL PRINT_ERROR( msgBuf, myThid )
0422 errCount = errCount + 1
b2cb1ccb9a Mart*0423 ENDIF
0424 IF (useStevensNorth.OR.useStevensSouth.OR.
0425 & useStevensEast.OR.useStevensWest) THEN
0426 IF (nonlinFreeSurf.GT.0) THEN
509b3e039c Jean*0427 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0428 & 'useStevens OBC with nonlinFreeSurf not yet implemented'
f7adb5bd83 Jean*0429 CALL PRINT_ERROR( msgBuf, myThid )
b2cb1ccb9a Mart*0430 ENDIF
0431 IF (usePTracers) THEN
509b3e039c Jean*0432 WRITE(msgBuf,'(2A)') '** WARNING ** OBCS_CHECK: ',
0433 & 'useStevens OBC with pTracers not yet implemented'
0434 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0435 & SQUEEZE_RIGHT, myThid )
0436 WRITE(msgBuf,'(2A)') '** WARNING ** OBCS_CHECK: ',
0437 & 'therefore expect the unexpected'
0438 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0439 & SQUEEZE_RIGHT, myThid )
b2cb1ccb9a Mart*0440 ENDIF
0441 IF (useSEAICE) THEN
509b3e039c Jean*0442 WRITE(msgBuf,'(2A)') '** WARNING ** OBCS_CHECK: ',
0443 & 'useStevens OBC with SEAICE not yet implemented'
0444 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0445 & SQUEEZE_RIGHT, myThid )
0446 WRITE(msgBuf,'(2A)') '** WARNING ** OBCS_CHECK: ',
0447 & 'therefore expect the unexpected'
0448 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0449 & SQUEEZE_RIGHT, myThid )
b2cb1ccb9a Mart*0450 ENDIF
0451
509b3e039c Jean*0452
0453
f7adb5bd83 Jean*0454
7f7a43158f Jean*0455
b2cb1ccb9a Mart*0456
0457
509b3e039c Jean*0458
0459
0460
7f7a43158f Jean*0461
b2cb1ccb9a Mart*0462
0463 ENDIF
0464 #else
0465 IF (useStevensNorth.OR.useStevensSouth.OR.
0466 & useStevensEast.OR.useStevensWest) THEN
0467 WRITE(msgBuf,'(A)')
509b3e039c Jean*0468 & 'OBCS_CHECK: #undef OBCS_ALLOW_STEVENS and'
f7adb5bd83 Jean*0469 CALL PRINT_ERROR( msgBuf, myThid )
b2cb1ccb9a Mart*0470 WRITE(msgBuf,'(A)')
509b3e039c Jean*0471 & 'OBCS_CHECK: one of useStevens* logicals is true'
f7adb5bd83 Jean*0472 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0473 errCount = errCount + 1
f7adb5bd83 Jean*0474 ENDIF
b2cb1ccb9a Mart*0475 #endif /* ALLOW_OBCS_STEVENS */
0476
869a19390a Dimi*0477 #ifndef ALLOW_OBCS_PRESCRIBE
0478 IF (useOBCSprescribe) THEN
7f7a43158f Jean*0479 WRITE(msgBuf,'(A)')
0480 & 'OBCS_CHECK: useOBCSprescribe = .TRUE. for'
0481 CALL PRINT_ERROR( msgBuf, myThid )
0482 WRITE(msgBuf,'(A)')
0483 & 'OBCS_CHECK: undef ALLOW_OBCS_PRESCRIBE'
0484 CALL PRINT_ERROR( msgBuf, myThid )
0485 errCount = errCount + 1
255732ba09 Jean*0486 ENDIF
0487 #endif /* ALLOW_OBCS_PRESCRIBE */
0488
f7adb5bd83 Jean*0489 #ifndef ALLOW_OBCS_SPONGE
0490 IF (useOBCSsponge) THEN
7f7a43158f Jean*0491 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0492 & 'Cannot set useOBCSsponge=.TRUE. (data.obcs)'
0493 CALL PRINT_ERROR( msgBuf, myThid )
0494 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0495 & 'with #undef ALLOW_OBCS_SPONGE (OBCS_OPTIONS.h)'
0496 CALL PRINT_ERROR( msgBuf, myThid )
0497 errCount = errCount + 1
f7adb5bd83 Jean*0498 ENDIF
0499 #endif /* ALLOW_OBCS_SPONGE */
0500
c7c4b57180 Dimi*0501 #ifndef ALLOW_OBCS_SEAICE_SPONGE
0502 IF (useSeaiceSponge) THEN
0503 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0504 & 'Cannot set useSeaiceSponge=.TRUE. (data.obcs)'
0505 CALL PRINT_ERROR( msgBuf, myThid )
0506 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0507 & 'with #undef ALLOW_OBCS_SEAICE_SPONGE (OBCS_OPTIONS.h)'
0508 CALL PRINT_ERROR( msgBuf, myThid )
0509 errCount = errCount + 1
0510 ENDIF
0511 #endif /* ALLOW_OBCS_SEAICE_SPONGE */
0512
abfe198bce Mart*0513 #ifdef ALLOW_OBCS_BALANCE
0514 IF ( OBCSbalanceSurf ) THEN
0515
0516
0517 IF ( nTileWithActiveOB .EQ. 0 ) THEN
0518 WRITE(msgBuf,'(A)')
0519 & 'OBCS_CHECK: OBCSbalanceSurf=T requires to have at least'
0520 CALL PRINT_ERROR( msgBuf, myThid )
0521 WRITE(msgBuf,'(2A)')
0522 & 'OBCS_CHECK: one of OBCS_balanceFac[E,W,N,S] > 0',
0523 & ' on an active boundary to work.'
0524 CALL PRINT_ERROR( msgBuf, myThid )
0525 errCount = errCount + 1
0526 ENDIF
0527 ENDIF
0528 #else /* ALLOW_OBCS_BALANCE */
255732ba09 Jean*0529 IF ( useOBCSbalance ) THEN
7f7a43158f Jean*0530 WRITE(msgBuf,'(A)')
255732ba09 Jean*0531 & 'OBCS_CHECK: useOBCSbalance requires to define'
7f7a43158f Jean*0532 CALL PRINT_ERROR( msgBuf, myThid )
0533 WRITE(msgBuf,'(A)')
255732ba09 Jean*0534 & 'OBCS_CHECK: ALLOW_OBCS_BALANCE in "OBCS_OPTIONS.h"'
7f7a43158f Jean*0535 CALL PRINT_ERROR( msgBuf, myThid )
0536 errCount = errCount + 1
869a19390a Dimi*0537 ENDIF
255732ba09 Jean*0538 #endif /* ALLOW_OBCS_BALANCE */
38224ac59a Patr*0539
6f4cf52d27 Dimi*0540 #ifndef ALLOW_OBCS_TIDES
0541 IF ( useOBCStides ) THEN
0542 WRITE(msgBuf,'(A)')
0543 & 'OBCS_CHECK: useOBCStides requires to define'
0544 CALL PRINT_ERROR( msgBuf, myThid )
0545 WRITE(msgBuf,'(A)')
0546 & 'OBCS_CHECK: ALLOW_OBCS_TIDES in "OBCS_OPTIONS.h"'
0547 CALL PRINT_ERROR( msgBuf, myThid )
0548 errCount = errCount + 1
0549 ENDIF
0550 #endif /* ALLOW_OBCS_TIDES */
0551
2d12bccb16 Jean*0552 IF ( .NOT.nonHydrostatic .AND.
0553 & ( OBNwFile.NE.' ' .OR. OBSwFile.NE.' ' .OR.
0554 & OBEwFile.NE.' ' .OR. OBWwFile.NE.' ' )
0555 & ) THEN
0556 WRITE(msgBuf,'(2A)')
0557 & 'OBCS_CHECK: OB*wFile only allowed with nonHydrostatic'
0558 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0559 errCount = errCount + 1
2d12bccb16 Jean*0560 ENDIF
0561 IF ( nonlinFreeSurf.EQ.0 .AND.
0562 & ( OBNetaFile.NE.' ' .OR. OBSetaFile.NE.' ' .OR.
0563 & OBEetaFile.NE.' ' .OR. OBWetaFile.NE.' ' )
0564 & ) THEN
0565 WRITE(msgBuf,'(2A)')
0566 & 'OBCS_CHECK: OB*etaFile(s) only allowed with nonlinFreeSurf'
0567 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0568 errCount = errCount + 1
2d12bccb16 Jean*0569 ENDIF
0570
869a19390a Dimi*0571 IF (useSEAICE .AND. .NOT. useEXF) THEN
7f7a43158f Jean*0572 WRITE(msgBuf,'(A)')
0573 & 'OBCS_CHECK: for SEAICE OBCS, use'
0574 CALL PRINT_ERROR( msgBuf, myThid )
0575 WRITE(msgBuf,'(A)')
0576 & 'OBCS_CHECK: pkg/exf to read input files'
0577 CALL PRINT_ERROR( msgBuf, myThid )
0578 errCount = errCount + 1
869a19390a Dimi*0579 ENDIF
a53202d9cb Jean*0580 #ifndef OBCS_UVICE_OLD
0581
0582 IF ( useSEAICE ) THEN
0583 #if ( defined (OBCS_SEAICE_COMPUTE_UVICE) || \
0584 defined (OBCS_SEAICE_AVOID_CONVERGENCE) || \
0585 defined (OBCS_SEAICE_SMOOTH_UVICE_PERP) || \
0586 defined (OBCS_SEAICE_SMOOTH_UVICE_PAR) )
7f7a43158f Jean*0587 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0588 & 'needs to define OBCS_UVICE_OLD in OBCS_OPTIONS.h'
0589 CALL PRINT_ERROR( msgBuf, myThid )
0590 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0591 & 'to activate such OBCS_SEAICE_[] option'
0592 CALL PRINT_ERROR( msgBuf, myThid )
0593 errCount = errCount + 1
a53202d9cb Jean*0594 #endif
0595 ENDIF
0596 #endif /* ndef OBCS_UVICE_OLD */
869a19390a Dimi*0597
7f7a43158f Jean*0598 IF ( errCount.GE.1 ) THEN
0599 WRITE(msgBuf,'(A,I3,A)')
0600 & 'OBCS_CHECK: detected', errCount,' fatal error(s)'
0601 CALL PRINT_ERROR( msgBuf, myThid )
0602 CALL ALL_PROC_DIE( 0 )
0603 STOP 'ABNORMAL END: S/R OBCS_CHECK'
0604 ENDIF
0605
fb919e1dd2 Jean*0606 WRITE(msgBuf,'(A)') 'OBCS_CHECK: set-up OK'
f4098ccf3f Jean*0607 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
42c525bfb4 Alis*0608
7f7a43158f Jean*0609 _END_MASTER(myThid)
0610
fb919e1dd2 Jean*0611
0612
0613
7f7a43158f Jean*0614 errCount = 0
fb919e1dd2 Jean*0615 WRITE(msgBuf,'(2A)') 'S/R OBCS_CHECK: ',
0616 & 'Inside Mask and OB locations disagree :'
0617 DO bj = myByLo(myThid), myByHi(myThid)
0618 DO bi = myBxLo(myThid), myBxHi(myThid)
0619
0620 DO j=1,sNy
0621
0622 i = OB_Ie(j,bi,bj)
78c7c1d8ad Jean*0623 IF ( i.NE.OB_indexNone ) THEN
0624 IF ( maskInC(i,j,bi,bj).NE.0. ) THEN
7f7a43158f Jean*0625 IF ( errCount.EQ.0 ) CALL PRINT_ERROR( msgBuf, myThid )
fb919e1dd2 Jean*0626 WRITE(msgBuf,'(2(A,I3),2(A,I5))')
0627 & ' from OB_Ie (bi,bj=', bi, ',', bj,
0628 & ') expects Mask=0 @ i,j=', i, ',', j
0629 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0630 errCount = errCount + 1
78c7c1d8ad Jean*0631 ENDIF
fb919e1dd2 Jean*0632 ENDIF
0633 DO i=1,sNx+1
0634 IF ( maskInC(i-1,j,bi,bj).GT.maskInC(i,j,bi,bj)
00cd44357b Jean*0635 & .AND.kSurfW(i,j,bi,bj).LE.Nr
fb919e1dd2 Jean*0636 & .AND. i.NE.OB_Ie(j,bi,bj) ) THEN
7f7a43158f Jean*0637 IF ( errCount.EQ.0 ) CALL PRINT_ERROR( msgBuf, myThid )
fb919e1dd2 Jean*0638 WRITE(msgBuf,'(2(A,I3),2(A,I5))')
0639 & ' from insideMask (bi,bj=', bi, ',', bj,
0640 & ') expects OBE=', i, ' @ j=', j
0641 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0642 errCount = errCount + 1
fb919e1dd2 Jean*0643 ENDIF
0644 ENDDO
0645
0646 i = OB_Iw(j,bi,bj)
78c7c1d8ad Jean*0647 IF ( i.NE.OB_indexNone ) THEN
0648 IF ( maskInC(i,j,bi,bj).NE.0. ) THEN
7f7a43158f Jean*0649 IF ( errCount.EQ.0 ) CALL PRINT_ERROR( msgBuf, myThid )
fb919e1dd2 Jean*0650 WRITE(msgBuf,'(2(A,I3),2(A,I5))')
0651 & ' from OB_Iw (bi,bj=', bi, ',', bj,
0652 & ') expects Mask=0 @ i,j=', i, ',', j
0653 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0654 errCount = errCount + 1
78c7c1d8ad Jean*0655 ENDIF
fb919e1dd2 Jean*0656 ENDIF
0657 DO i=1,sNx+1
0658 IF ( maskInC(i-1,j,bi,bj).LT.maskInC(i,j,bi,bj)
00cd44357b Jean*0659 & .AND.kSurfW(i,j,bi,bj).LE.Nr
fb919e1dd2 Jean*0660 & .AND. i.NE.OB_Iw(j,bi,bj)+1 ) THEN
7f7a43158f Jean*0661 IF ( errCount.EQ.0 ) CALL PRINT_ERROR( msgBuf, myThid )
fb919e1dd2 Jean*0662 WRITE(msgBuf,'(2(A,I3),2(A,I5))')
0663 & ' from insideMask (bi,bj=', bi, ',', bj,
0664 & ') expects OBW=', i-1, ' @ j=', j
0665 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0666 errCount = errCount + 1
fb919e1dd2 Jean*0667 ENDIF
0668 ENDDO
0669 ENDDO
0670
0671 DO i=1,sNx
0672
0673 j = OB_Jn(i,bi,bj)
78c7c1d8ad Jean*0674 IF ( j.NE.OB_indexNone ) THEN
0675 IF ( maskInC(i,j,bi,bj).NE.0. ) THEN
7f7a43158f Jean*0676 IF ( errCount.EQ.0 ) CALL PRINT_ERROR( msgBuf, myThid )
fb919e1dd2 Jean*0677 WRITE(msgBuf,'(2(A,I3),2(A,I5))')
0678 & ' from OB_Jn (bi,bj=', bi, ',', bj,
0679 & ') expects Mask=0 @ i,j=', i, ',', j
0680 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0681 errCount = errCount + 1
78c7c1d8ad Jean*0682 ENDIF
fb919e1dd2 Jean*0683 ENDIF
0684 DO j=1,sNy+1
0685 IF ( maskInC(i,j-1,bi,bj).GT.maskInC(i,j,bi,bj)
00cd44357b Jean*0686 & .AND.kSurfS(i,j,bi,bj).LE.Nr
fb919e1dd2 Jean*0687 & .AND. j.NE.OB_Jn(i,bi,bj) ) THEN
7f7a43158f Jean*0688 IF ( errCount.EQ.0 ) CALL PRINT_ERROR( msgBuf, myThid )
fb919e1dd2 Jean*0689 WRITE(msgBuf,'(2(A,I3),2(A,I5))')
0690 & ' from insideMask (bi,bj=', bi, ',', bj,
0691 & ') expects OBN=', j, ' @ i=', i
0692 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0693 errCount = errCount + 1
fb919e1dd2 Jean*0694 ENDIF
0695 ENDDO
0696
c816a80284 Jean*0697 j = OB_Js(i,bi,bj)
78c7c1d8ad Jean*0698 IF ( j.NE.OB_indexNone ) THEN
0699 IF ( maskInC(i,j,bi,bj).NE.0. ) THEN
c816a80284 Jean*0700 IF ( errCount.EQ.0 ) CALL PRINT_ERROR( msgBuf, myThid )
0701 WRITE(msgBuf,'(2(A,I3),2(A,I5))')
0702 & ' from OB_Js (bi,bj=', bi, ',', bj,
0703 & ') expects Mask=0 @ i,j=', i, ',', j
0704 CALL PRINT_ERROR( msgBuf, myThid )
0705 errCount = errCount + 1
78c7c1d8ad Jean*0706 ENDIF
c816a80284 Jean*0707 ENDIF
fb919e1dd2 Jean*0708 DO j=1,sNy+1
0709 IF ( maskInC(i,j-1,bi,bj).LT.maskInC(i,j,bi,bj)
00cd44357b Jean*0710 & .AND.kSurfS(i,j,bi,bj).LE.Nr
fb919e1dd2 Jean*0711 & .AND. j.NE.OB_Js(i,bi,bj)+1 ) THEN
7f7a43158f Jean*0712 IF ( errCount.EQ.0 ) CALL PRINT_ERROR( msgBuf, myThid )
fb919e1dd2 Jean*0713 WRITE(msgBuf,'(2(A,I3),2(A,I5))')
0714 & ' from insideMask (bi,bj=', bi, ',', bj,
0715 & ') expects OBS=', j-1, ' @ i=', i
0716 CALL PRINT_ERROR( msgBuf, myThid )
7f7a43158f Jean*0717 errCount = errCount + 1
fb919e1dd2 Jean*0718 ENDIF
0719 ENDDO
0720 ENDDO
0721
0722 ENDDO
0723 ENDDO
7f7a43158f Jean*0724 CALL GLOBAL_SUM_INT( errCount, myThid )
0725 IF ( errCount.GE.1 ) THEN
0726 WRITE(msgBuf,'(A,I6,A)')
0727 & 'OBCS_CHECK:', errCount,' errors in OB location vs Mask'
0728 CALL PRINT_ERROR( msgBuf, myThid )
0729 CALL ALL_PROC_DIE( myThid )
0730 STOP 'ABNORMAL END: S/R OBCS_CHECK'
0731 ELSE
0732 _BEGIN_MASTER(myThid)
fb919e1dd2 Jean*0733 WRITE(msgBuf,'(2A)') 'OBCS_CHECK: ',
0734 & 'check Inside Mask and OB locations: OK'
0735 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
672b822630 Jean*0736 WRITE(msgBuf,'(A)') ' '
0737 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
7f7a43158f Jean*0738 _END_MASTER(myThid)
fb919e1dd2 Jean*0739 ENDIF
0740
0741
42c525bfb4 Alis*0742 #endif /* ALLOW_OBCS */
41c3b782a2 Jean*0743 RETURN
0744 END