Back to home page

MITgcm

 
 

    


File indexing completed on 2025-09-19 05:08:07 UTC

view on githubraw file Latest commit c3be0435 on 2025-09-18 18:40:16 UTC
c3be04357d Jean*0001 #define EXACT_CONSERV
6d54cf9ca1 Ed H*0002 #include "PACKAGES_CONFIG.h"
5cd64f209f Jean*0003 #include "CPP_OPTIONS.h"
dc3adfb09b Jean*0004 #ifdef ALLOW_MOM_COMMON
                0005 # include "MOM_COMMON_OPTIONS.h"
                0006 #endif
aecc8b0f47 Mart*0007 #ifdef ALLOW_CTRL
                0008 # include "CTRL_OPTIONS.h"
                0009 #endif
5cd64f209f Jean*0010 
                0011 CBOP
                0012 C     !ROUTINE: CONFIG_CHECK
                0013 C     !INTERFACE:
                0014       SUBROUTINE CONFIG_CHECK( myThid )
                0015 C     !DESCRIPTION: \bv
                0016 C     *=========================================================*
                0017 C     | SUBROUTINE CONFIG_CHECK
                0018 C     | o Check model parameter settings.
                0019 C     *=========================================================*
                0020 C     | This routine help to prevent the use of parameters
                0021 C     | that are not compatible with the model configuration.
                0022 C     *=========================================================*
46979d29da Jean*0023 C     \ev
5cd64f209f Jean*0024 
                0025 C     !USES:
                0026       IMPLICIT NONE
                0027 C     === Global variables ===
                0028 #include "SIZE.h"
                0029 #include "EEPARAMS.h"
                0030 #include "PARAMS.h"
7bb5a8a109 Jean*0031 #ifdef ALLOW_MOM_COMMON
                0032 # include "MOM_VISC.h"
                0033 #endif
5cd64f209f Jean*0034 
                0035 C     !INPUT/OUTPUT PARAMETERS:
79b5d5775c Jean*0036 C     myThid   ::  my Thread Id number
5cd64f209f Jean*0037       INTEGER myThid
                0038 
                0039 C     !LOCAL VARIABLES:
79b5d5775c Jean*0040 C     msgBuf   :: Informational/error message buffer
                0041 C     errCount :: error counter (inconsitent params and other errors)
5cd64f209f Jean*0042       CHARACTER*(MAX_LEN_MBUF) msgBuf
fbf4b71a66 Jean*0043       INTEGER errCount
5cd64f209f Jean*0044 CEOP
                0045 
51a413ac3c Jean*0046       _BEGIN_MASTER(myThid)
                0047       WRITE(msgBuf,'(A)')
                0048      &'// ======================================================='
                0049       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0050      &                    SQUEEZE_RIGHT, myThid )
                0051       WRITE(msgBuf,'(A)') '// Check Model config. (CONFIG_CHECK):'
                0052       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0053      &                    SQUEEZE_RIGHT, myThid )
                0054       _END_MASTER(myThid)
                0055 
fbf4b71a66 Jean*0056 C--   MPI + multi-threads: seems to be OK to let master-thread check & stop
                0057 C      (as long as all procs finish cleanly by calling ALL_PROC_DIE)
                0058       _BEGIN_MASTER(myThid)
                0059       errCount = 0
                0060 
5cd64f209f Jean*0061 C-  check that CPP option is "defined" when running-flag parameter is on:
                0062 
51575f66de Mart*0063 #ifndef INCLUDE_CONVECT_CALL
                0064 C     o Check that Convective-adjustment code is compiled If cAdjFreq <> 0
                0065       IF ( cAdjFreq .NE. 0. ) THEN
                0066 #ifdef INCLUDE_CONVECT_INI_CALL
                0067         WRITE(msgBuf,'(2A)') '** Warning ** CONFIG_CHECK: ',
                0068      &  'Convective-Adjustment (cAdjFreq) turned off (except INI)'
                0069         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0070      &                      SQUEEZE_RIGHT, myThid )
                0071         WRITE(msgBuf,'(2A)') '** Warning ** CONFIG_CHECK: ',
                0072      &  ' without "#define INCLUDE_CONVECT_CALL" in CPP_OPTIONS.h'
                0073         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0074      &                      SQUEEZE_RIGHT, myThid )
                0075 #else
                0076         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0077      &  'Cannot use Convective-Adjustment (cAdjFreq) without'
                0078         CALL PRINT_ERROR( msgBuf, myThid )
                0079         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0080      &  ' defining INCLUDE_CONVECT_(CALL/INI_CALL) in CPP_OPTIONS.h'
                0081         CALL PRINT_ERROR( msgBuf, myThid )
                0082         errCount = errCount + 1
                0083 #endif
                0084       ENDIF
                0085 #endif /* ndef INCLUDE_CONVECT_CALL */
                0086 
53176ebafb Dimi*0087 C     o If diffKrFile is set, then we should make sure the corresponing
                0088 C       code is being compiled
6c944fd806 Jean*0089 #ifndef ALLOW_3D_DIFFKR
53176ebafb Dimi*0090       IF (diffKrFile.NE.' ') THEN
                0091         WRITE(msgBuf,'(A)')
                0092      &  'CONFIG_CHECK: diffKrFile is set but never used.'
3c3b37da6e Jean*0093         CALL PRINT_ERROR( msgBuf, myThid )
db8d49beca Jean*0094         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0095      &  'Re-compile with: "#define ALLOW_3D_DIFFKR"'
3c3b37da6e Jean*0096         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0097         errCount = errCount + 1
53176ebafb Dimi*0098       ENDIF
                0099 #endif
                0100 
bb2fd3f1ad Jean*0101 #ifdef EXCLUDE_PCELL_MIX_CODE
                0102       IF ( interDiffKr_pCell .OR. interViscAr_pCell
                0103      &                       .OR. pCellMix_select.NE.0 ) THEN
                0104         IF ( interDiffKr_pCell ) THEN
                0105           WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0106      &    'Cannot use interDiffKr_pCell=.TRUE.'
                0107           CALL PRINT_ERROR( msgBuf, myThid )
                0108         ENDIF
                0109         IF ( interViscAr_pCell ) THEN
                0110           WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0111      &    'Cannot use interViscAr_pCell=.TRUE.'
                0112           CALL PRINT_ERROR( msgBuf, myThid )
                0113         ENDIF
                0114         IF ( pCellMix_select.NE.0 ) THEN
                0115           WRITE(msgBuf,'(2A,I6)') 'CONFIG_CHECK: ',
                0116      &    'Cannot use pCellMix_select=', pCellMix_select
                0117           CALL PRINT_ERROR( msgBuf, myThid )
                0118         ENDIF
                0119         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: when compiled ',
                0120      &  'with "#define EXCLUDE_PCELL_MIX_CODE" in CPP_OPTIONS.h'
                0121         CALL PRINT_ERROR( msgBuf, myThid )
                0122         errCount = errCount + 1
                0123       ENDIF
                0124 #endif
                0125 
9dd0c3e7d6 Jean*0126 #ifndef ALLOW_LEITH_QG
                0127 C     Check that Leith QG viscosity coefficeint is zero if the
                0128 C     QGLeith code has not been compiled.
                0129       IF ( viscC2LeithQG.NE.zeroRL )  THEN
                0130         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0131      &  'must #define ALLOW_LEITH_QG in MOM_COMMON_OPTIONS.h'
                0132         CALL PRINT_ERROR( msgBuf, myThid )
                0133         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0134      &  ' in order to use QG-Leith (viscC2LeithQG > 0)'
                0135         CALL PRINT_ERROR( msgBuf, myThid )
                0136         errCount = errCount + 1
                0137       ENDIF
                0138 #endif /* ALLOW_LEITH_QG */
                0139 
dc3adfb09b Jean*0140 #ifndef ALLOW_SMAG_3D
                0141       IF ( useSmag3D ) THEN
                0142         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0143      &  'Cannot set useSmag3D=TRUE when compiled with'
                0144         CALL PRINT_ERROR( msgBuf, myThid )
                0145         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0146      &  '"#undef ALLOW_SMAG_3D" in MOM_COMMON_OPTIONS.h'
                0147         CALL PRINT_ERROR( msgBuf, myThid )
                0148         errCount = errCount + 1
                0149       ENDIF
                0150 #endif
2d5bb917cc Jean*0151 #ifndef ALLOW_SMAG_3D_DIFFUSIVITY
                0152       IF ( smag3D_diffCoeff.NE.zeroRL ) THEN
                0153         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0154      &  'Cannot use smag3D_diffCoeff > 0 when compiled with'
                0155         CALL PRINT_ERROR( msgBuf, myThid )
                0156         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0157      &  '"#undef ALLOW_SMAG_3D_DIFFUSIVITY" in CPP_OPTIONS.h'
                0158         CALL PRINT_ERROR( msgBuf, myThid )
                0159         errCount = errCount + 1
                0160       ENDIF
                0161 #endif
dc3adfb09b Jean*0162 
5cd64f209f Jean*0163 #ifndef ALLOW_NONHYDROSTATIC
8dc8e44fac Jean*0164       IF (use3Dsolver) THEN
                0165         WRITE(msgBuf,'(A)')
5cd64f209f Jean*0166      &   'CONFIG_CHECK: #undef ALLOW_NONHYDROSTATIC and'
3c3b37da6e Jean*0167         CALL PRINT_ERROR( msgBuf, myThid )
f9fd562f68 Jean*0168        IF ( implicitIntGravWave ) WRITE(msgBuf,'(A)')
                0169      &   'CONFIG_CHECK: implicitIntGravWave is TRUE'
                0170        IF ( nonHydrostatic ) WRITE(msgBuf,'(A)')
5cd64f209f Jean*0171      &   'CONFIG_CHECK: nonHydrostatic is TRUE'
3c3b37da6e Jean*0172         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0173         errCount = errCount + 1
5cd64f209f Jean*0174       ENDIF
                0175 #endif
                0176 
fdf5fb6af0 Jean*0177 #ifndef ALLOW_QHYD_STAGGER_TS
                0178       IF ( quasiHydrostatic .AND. staggerTimeStep ) THEN
                0179         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0180      &    'Cannot use quasiHydrostatic with staggerTimeStep'
                0181         CALL PRINT_ERROR( msgBuf, myThid )
                0182         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: when compiled ',
                0183      &  'with "#undef ALLOW_QHYD_STAGGER_TS" in CPP_OPTIONS.h'
                0184         CALL PRINT_ERROR( msgBuf, myThid )
                0185         errCount = errCount + 1
                0186       ENDIF
                0187 #endif
                0188 
92aa7be6ff Jean*0189 #ifndef ALLOW_ADAMSBASHFORTH_3
                0190       IF ( alph_AB.NE.UNSET_RL .OR. beta_AB.NE.UNSET_RL ) THEN
                0191         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0192      &   '#undef ALLOW_ADAMSBASHFORTH_3 but alph_AB,beta_AB'
3c3b37da6e Jean*0193         CALL PRINT_ERROR( msgBuf, myThid )
92aa7be6ff Jean*0194         WRITE(msgBuf,'(A,1P2E20.7)')
                0195      &   'CONFIG_CHECK: are set to:',alph_AB,beta_AB
3c3b37da6e Jean*0196         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0197         errCount = errCount + 1
92aa7be6ff Jean*0198       ENDIF
                0199 #endif
                0200 
b9d351b225 Jean*0201 #ifndef INCLUDE_IMPLVERTADV_CODE
8dc8e44fac Jean*0202       IF ( momImplVertAdv ) THEN
                0203         WRITE(msgBuf,'(A)')
b9d351b225 Jean*0204      &   'CONFIG_CHECK: #undef INCLUDE_IMPLVERTADV_CODE'
3c3b37da6e Jean*0205         CALL PRINT_ERROR( msgBuf, myThid )
b9d351b225 Jean*0206         WRITE(msgBuf,'(A)')
                0207      &   'CONFIG_CHECK: but momImplVertAdv is TRUE'
3c3b37da6e Jean*0208         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0209         errCount = errCount + 1
b9d351b225 Jean*0210       ENDIF
8dc8e44fac Jean*0211       IF ( tempImplVertAdv ) THEN
                0212         WRITE(msgBuf,'(A)')
b9d351b225 Jean*0213      &   'CONFIG_CHECK: #undef INCLUDE_IMPLVERTADV_CODE'
3c3b37da6e Jean*0214         CALL PRINT_ERROR( msgBuf, myThid )
b9d351b225 Jean*0215         WRITE(msgBuf,'(A)')
                0216      &   'CONFIG_CHECK: but tempImplVertAdv is TRUE'
3c3b37da6e Jean*0217         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0218         errCount = errCount + 1
b9d351b225 Jean*0219       ENDIF
8dc8e44fac Jean*0220       IF ( saltImplVertAdv ) THEN
                0221         WRITE(msgBuf,'(A)')
b9d351b225 Jean*0222      &   'CONFIG_CHECK: #undef INCLUDE_IMPLVERTADV_CODE'
3c3b37da6e Jean*0223         CALL PRINT_ERROR( msgBuf, myThid )
b9d351b225 Jean*0224         WRITE(msgBuf,'(A)')
                0225      &   'CONFIG_CHECK: but saltImplVertAdv is TRUE'
3c3b37da6e Jean*0226         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0227         errCount = errCount + 1
b9d351b225 Jean*0228       ENDIF
1883875e84 Jean*0229       IF ( dTtracerLev(1).NE.dTtracerLev(Nr) .AND. implicitDiffusion
8dc8e44fac Jean*0230      &     .AND. ( saltStepping .OR. tempStepping .OR. usePTRACERS )
1883875e84 Jean*0231      &   ) THEN
8dc8e44fac Jean*0232         WRITE(msgBuf,'(A)')
1883875e84 Jean*0233      &   'CONFIG_CHECK: #undef INCLUDE_IMPLVERTADV_CODE'
3c3b37da6e Jean*0234         CALL PRINT_ERROR( msgBuf, myThid )
1883875e84 Jean*0235         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0236      &   'but implicitDiffusion=T with non-uniform dTtracerLev'
3c3b37da6e Jean*0237         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0238         errCount = errCount + 1
1883875e84 Jean*0239       ENDIF
9e44938df7 Jean*0240       IF ( selectImplicitDrag.GT.0 ) THEN
                0241         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0242      &   'Needs to compile with #define INCLUDE_IMPLVERTADV_CODE'
                0243         CALL PRINT_ERROR( msgBuf, myThid )
                0244         WRITE(msgBuf,'(A)')
                0245      &   'CONFIG_CHECK:  to use selectImplicitDrag > 0 ==> STOP here'
                0246         CALL PRINT_ERROR( msgBuf, myThid )
                0247         errCount = errCount + 1
                0248       ENDIF
                0249 #endif
                0250 
                0251 #ifndef ALLOW_SOLVE4_PS_AND_DRAG
                0252       IF ( selectImplicitDrag.EQ.2 ) THEN
                0253         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0254      &   'Needs to compile with #define ALLOW_SOLVE4_PS_AND_DRAG'
                0255         CALL PRINT_ERROR( msgBuf, myThid )
                0256         WRITE(msgBuf,'(A)')
                0257      &   'CONFIG_CHECK:  to use selectImplicitDrag = 2 ==> STOP here'
                0258         CALL PRINT_ERROR( msgBuf, myThid )
                0259         errCount = errCount + 1
                0260       ENDIF
b9d351b225 Jean*0261 #endif
                0262 
02d90fb24c Jean*0263 #ifdef ALLOW_AUTODIFF
d666da8b50 Gael*0264       IF ( momImplVertAdv ) THEN
                0265         WRITE(msgBuf,'(A)')
                0266      &   'CONFIG_CHECK: momImplVertAdv is not yet'
                0267         CALL PRINT_ERROR( msgBuf, myThid )
                0268         WRITE(msgBuf,'(A)')
                0269      &   'CONFIG_CHECK: supported in adjoint mode'
                0270         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0271         errCount = errCount + 1
d666da8b50 Gael*0272       ENDIF
9e44938df7 Jean*0273       IF ( selectImplicitDrag.GT.0 ) THEN
                0274         WRITE(msgBuf,'(A)')
                0275      &   'CONFIG_CHECK: selectImplicitDrag is not yet'
                0276         CALL PRINT_ERROR( msgBuf, myThid )
                0277         WRITE(msgBuf,'(A)')
                0278      &   'CONFIG_CHECK: supported in adjoint mode'
                0279         CALL PRINT_ERROR( msgBuf, myThid )
                0280         errCount = errCount + 1
                0281       ENDIF
d666da8b50 Gael*0282 #endif
                0283 
88bca52623 Jean*0284 #ifdef ALLOW_DEPTH_CONTROL
                0285       IF ( useOBCS ) THEN
                0286         WRITE(msgBuf,'(A)')
                0287      &   'CONFIG_CHECK: DEPTH_CONTROL code not compatible with OBCS'
                0288         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0289         errCount = errCount + 1
88bca52623 Jean*0290       ENDIF
                0291 #endif
                0292 
5cd64f209f Jean*0293 #ifndef EXACT_CONSERV
c3be04357d Jean*0294 c     IF ( exactConserv ) THEN
                0295         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0296      &   '#undef EXACT_CONSERV not allowed in CPP_OPTIONS.h'
3c3b37da6e Jean*0297         CALL PRINT_ERROR( msgBuf, myThid )
c3be04357d Jean*0298         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0299      &   ' since CPP option EXACT_CONSERV has been retired'
3c3b37da6e Jean*0300         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0301         errCount = errCount + 1
c3be04357d Jean*0302 c     ENDIF
5cd64f209f Jean*0303 #endif
                0304 
                0305 #ifndef NONLIN_FRSURF
8dc8e44fac Jean*0306       IF (nonlinFreeSurf.NE.0) THEN
                0307         WRITE(msgBuf,'(A)')
5cd64f209f Jean*0308      &   'CONFIG_CHECK: #undef NONLIN_FRSURF and'
3c3b37da6e Jean*0309         CALL PRINT_ERROR( msgBuf, myThid )
5cd64f209f Jean*0310         WRITE(msgBuf,'(A)')
                0311      &   'CONFIG_CHECK: nonlinFreeSurf is non-zero'
3c3b37da6e Jean*0312         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0313         errCount = errCount + 1
5cd64f209f Jean*0314       ENDIF
                0315 #endif
                0316 
a97467b673 Jean*0317 #ifndef NONLIN_FRSURF
                0318       IF (select_rStar .NE. 0) THEN
8dc8e44fac Jean*0319         WRITE(msgBuf,'(A)')
a97467b673 Jean*0320      &   'CONFIG_CHECK: rStar is part of NonLin-FS '
3c3b37da6e Jean*0321         CALL PRINT_ERROR( msgBuf, myThid )
a97467b673 Jean*0322         WRITE(msgBuf,'(A)')
f15994caab Jean*0323      &   'CONFIG_CHECK: ==> set #define NONLIN_FRSURF to use it'
3c3b37da6e Jean*0324         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0325         errCount = errCount + 1
a97467b673 Jean*0326       ENDIF
                0327 #endif /* NONLIN_FRSURF */
                0328 
f15994caab Jean*0329 #ifdef DISABLE_RSTAR_CODE
                0330       IF ( select_rStar.NE.0 ) THEN
                0331         WRITE(msgBuf,'(A)')
                0332      &   'CONFIG_CHECK: rStar code disable (DISABLE_RSTAR_CODE defined)'
                0333         CALL PRINT_ERROR( msgBuf, myThid )
                0334         WRITE(msgBuf,'(A)')
                0335      &   'CONFIG_CHECK: ==> set #undef DISABLE_RSTAR_CODE to use it'
                0336         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0337         errCount = errCount + 1
f15994caab Jean*0338       ENDIF
                0339 #endif /* DISABLE_RSTAR_CODE */
                0340 
                0341 #ifdef DISABLE_SIGMA_CODE
                0342       IF ( selectSigmaCoord.NE.0 ) THEN
                0343         WRITE(msgBuf,'(A)')
                0344      &   'CONFIG_CHECK: Sigma code disable (DISABLE_SIGMA_CODE defined)'
                0345         CALL PRINT_ERROR( msgBuf, myThid )
                0346         WRITE(msgBuf,'(A)')
                0347      &   'CONFIG_CHECK: ==> set #undef DISABLE_SIGMA_CODE to use it'
                0348         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0349         errCount = errCount + 1
f15994caab Jean*0350       ENDIF
                0351 #endif /* DISABLE_SIGMA_CODE */
                0352 
5cd64f209f Jean*0353 #ifdef USE_NATURAL_BCS
8dc8e44fac Jean*0354         WRITE(msgBuf,'(A)')
745a0098ab Jean*0355      &   'CONFIG_CHECK: USE_NATURAL_BCS option has been replaced'
3c3b37da6e Jean*0356         CALL PRINT_ERROR( msgBuf, myThid )
5cd64f209f Jean*0357         WRITE(msgBuf,'(A)')
745a0098ab Jean*0358      &   'CONFIG_CHECK: by useRealFreshWaterFlux=TRUE in data file'
3c3b37da6e Jean*0359         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0360         errCount = errCount + 1
745a0098ab Jean*0361 #endif
                0362 
6c944fd806 Jean*0363 #ifndef ALLOW_ADDFLUID
                0364       IF ( selectAddFluid.NE.0 ) THEN
                0365         WRITE(msgBuf,'(A)')
db8d49beca Jean*0366      &   'CONFIG_CHECK: #undef ALLOW_ADDFLUID (CPP_OPTIONS.h) and'
6c944fd806 Jean*0367         CALL PRINT_ERROR( msgBuf, myThid )
                0368         WRITE(msgBuf,'(A,I4,A)') 'CONFIG_CHECK: selectAddFluid=',
                0369      &                           selectAddFluid, ' is not zero'
                0370         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0371         errCount = errCount + 1
6c944fd806 Jean*0372       ENDIF
                0373 #endif /* ALLOW_ADDFLUID */
                0374 
463053c692 Jean*0375 C     o If pLoadFile is set, then we should make sure the corresponing
                0376 C       code is being compiled
                0377 #ifndef ATMOSPHERIC_LOADING
                0378       IF (pLoadFile.NE.' ') THEN
                0379         WRITE(msgBuf,'(A)')
                0380      &  'CONFIG_CHECK: pLoadFile is set but you have not'
3c3b37da6e Jean*0381         CALL PRINT_ERROR( msgBuf, myThid )
463053c692 Jean*0382         WRITE(msgBuf,'(A)')
db8d49beca Jean*0383      &  ' compiled the model with the pressure loading code.'
3c3b37da6e Jean*0384         CALL PRINT_ERROR( msgBuf, myThid )
f4db9965d8 Jean*0385         WRITE(msgBuf,'(A)')
db8d49beca Jean*0386      &  ' Re-compile with: "#define ATMOSPHERIC_LOADING"'
3c3b37da6e Jean*0387         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0388         errCount = errCount + 1
f4db9965d8 Jean*0389       ENDIF
                0390       IF ( useRealFreshWaterFlux .AND. useThSIce ) THEN
                0391         WRITE(msgBuf,'(A)')
                0392      &  'CONFIG_CHECK: sIceLoad is computed but'
3c3b37da6e Jean*0393         CALL PRINT_ERROR( msgBuf, myThid )
f4db9965d8 Jean*0394         WRITE(msgBuf,'(A)')
db8d49beca Jean*0395      &  ' pressure loading code is not compiled.'
3c3b37da6e Jean*0396         CALL PRINT_ERROR( msgBuf, myThid )
f4db9965d8 Jean*0397         WRITE(msgBuf,'(A)')
db8d49beca Jean*0398      &  ' Re-compile with: "#define ATMOSPHERIC_LOADING"'
                0399         CALL PRINT_ERROR( msgBuf, myThid )
                0400         errCount = errCount + 1
                0401       ENDIF
                0402 #endif
                0403 
59b35dd864 Jean*0404       IF ( geothermalFile.NE.' ' ) THEN
                0405 C     o Need to use S/R APPLY_FORCING_T to get Geothermal forcing
                0406 #ifdef USE_OLD_EXTERNAL_FORCING
                0407         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0408      &  'geothermalFile is set but Geothermal-Flux code'
                0409         CALL PRINT_ERROR( msgBuf, myThid )
                0410         WRITE(msgBuf,'(2A)')' is missing.',
                0411      &  ' Re-compile with "#undef USE_OLD_EXTERNAL_FORCING"'
                0412         CALL PRINT_ERROR( msgBuf, myThid )
                0413         errCount = errCount + 1
                0414 #endif /* USE_OLD_EXTERNAL_FORCING */
aaea5aaeec Jean*0415 C     o Need to define ALLOW_GEOTHERMAL_FLUX to use geothermalFile forcing
                0416 #ifndef ALLOW_GEOTHERMAL_FLUX
                0417         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0418      &  'geothermalFile is set but Geothermal-Flux code'
                0419         CALL PRINT_ERROR( msgBuf, myThid )
                0420         WRITE(msgBuf,'(2A)')' is not compiled.',
                0421      &  ' Re-compile with "#define ALLOW_GEOTHERMAL_FLUX"'
                0422         CALL PRINT_ERROR( msgBuf, myThid )
                0423         errCount = errCount + 1
                0424 #endif /* ALLOW_GEOTHERMAL_FLUX */
59b35dd864 Jean*0425       ENDIF
                0426 
                0427 C     o Need to use S/R APPLY_FORCING_U,V to get Tidal forcing
                0428 #ifdef USE_OLD_EXTERNAL_FORCING
                0429       IF ( momTidalForcing ) THEN
                0430         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0431      &  'momTidalForcing is set but Tidal forcing code'
                0432         CALL PRINT_ERROR( msgBuf, myThid )
                0433         WRITE(msgBuf,'(2A)')' is missing.',
                0434      &  ' Re-compile with "#undef USE_OLD_EXTERNAL_FORCING"'
                0435         CALL PRINT_ERROR( msgBuf, myThid )
                0436         errCount = errCount + 1
                0437       ENDIF
                0438 #endif /* USE_OLD_EXTERNAL_FORCING */
aaea5aaeec Jean*0439 
db8d49beca Jean*0440 #ifndef ALLOW_FRICTION_HEATING
                0441       IF ( addFrictionHeating ) THEN
                0442         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: addFrictionHeating=T',
c3be04357d Jean*0443      &   ' but FRICTIONAL_HEATING code is not compiled.'
db8d49beca Jean*0444         CALL PRINT_ERROR( msgBuf, myThid )
                0445         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: Re-compile with:',
                0446      &   ' "#define ALLOW_FRICTION_HEATING" (CPP_OPTIONS.h)'
3c3b37da6e Jean*0447         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0448         errCount = errCount + 1
463053c692 Jean*0449       ENDIF
                0450 #endif
                0451 
00c7090dc0 Mart*0452 #ifndef SHORTWAVE_HEATING
                0453       IF ( selectPenetratingSW.GT.0 ) THEN
                0454         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: selectPenetratingSW>0',
c3be04357d Jean*0455      &   ' but SHORTWAVE_HEATING code is not compiled.'
00c7090dc0 Mart*0456         CALL PRINT_ERROR( msgBuf, myThid )
                0457         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: Re-compile with:',
                0458      &   ' "#define SHORTWAVE_HEATING" (CPP_OPTIONS.h)'
                0459         CALL PRINT_ERROR( msgBuf, myThid )
                0460         errCount = errCount + 1
                0461       ENDIF
                0462 #endif
                0463 
7e00d7e8f9 Jean*0464 #ifdef ALLOW_BALANCE_FLUXES
                0465       IF ( selectBalanceEmPmR.LT.0 .OR. selectBalanceEmPmR.GT.2 ) THEN
                0466         WRITE(msgBuf,'(2A,I6,A)') 'CONFIG_CHECK: ',
                0467      &   'selectBalanceEmPmR=', selectBalanceEmPmR,' : invalid value'
                0468         CALL PRINT_ERROR( msgBuf, myThid )
                0469         errCount = errCount + 1
                0470       ENDIF
                0471 #else /* ALLOW_BALANCE_FLUXES */
                0472       IF ( selectBalanceEmPmR.NE.0 .OR. balanceQnet ) THEN
2e21c62c84 Mart*0473         WRITE(msgBuf,'(A,A)')
                0474      &  'CONFIG_CHECK: balanceEmPmR/Qnet is set but balance code ',
                0475      &  'is not compiled.'
3c3b37da6e Jean*0476         CALL PRINT_ERROR( msgBuf, myThid )
db8d49beca Jean*0477         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0478      &  'Re-compile with:  ALLOW_BALANCE_FLUXES defined'
3c3b37da6e Jean*0479         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0480         errCount = errCount + 1
fc64655a31 Dimi*0481       ENDIF
7e00d7e8f9 Jean*0482 #endif /* ALLOW_BALANCE_FLUXES */
fc64655a31 Dimi*0483 
9e3a303fa3 Gael*0484 #ifndef ALLOW_BALANCE_RELAX
                0485       IF (balanceThetaClimRelax .OR. balanceSaltClimRelax) THEN
                0486         WRITE(msgBuf,'(A,A)')
                0487      &  'CONFIG_CHECK: balanceTheta/SaltClimRelax is set ',
                0488      &  'but balance code is not compiled.'
                0489         CALL PRINT_ERROR( msgBuf, myThid )
db8d49beca Jean*0490         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
9e3a303fa3 Gael*0491      &  'Re-compile with  ALLOW_BALANCE_RELAX defined'
                0492         CALL PRINT_ERROR( msgBuf, myThid )
                0493         errCount = errCount + 1
                0494       ENDIF
                0495 #endif
                0496 
aecc8b0f47 Mart*0497 #ifndef ALLOW_CG2D_NSA
                0498       IF (useNSACGSolver) THEN
                0499         WRITE(msgBuf,'(A,A)')
                0500      &  'CONFIG_CHECK: useNSACGSolver = .TRUE., but CG2D_NSA ',
                0501      &  'code is not compiled.'
                0502         CALL PRINT_ERROR( msgBuf, myThid )
                0503         WRITE(msgBuf,'(A)')
                0504      &  'CONFIG_CHECK: Re-compile with ALLOW_CG2D_NSA defined'
                0505         CALL PRINT_ERROR( msgBuf, myThid )
                0506         errCount = errCount + 1
                0507       ENDIF
                0508 #endif /* ALLOW_CG2D_NSA */
                0509 
c26312e441 Mart*0510 #ifndef ALLOW_SRCG
                0511       IF (useSRCGSolver) THEN
                0512         WRITE(msgBuf,'(A,A)')
                0513      &  'CONFIG_CHECK: useSRCGSolver = .TRUE., but single reduction ',
                0514      &  'code is not compiled.'
3c3b37da6e Jean*0515         CALL PRINT_ERROR( msgBuf, myThid )
c26312e441 Mart*0516         WRITE(msgBuf,'(A)')
                0517      &  'CONFIG_CHECK: Re-compile with ALLOW_SRCG defined'
3c3b37da6e Jean*0518         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0519         errCount = errCount + 1
c26312e441 Mart*0520       ENDIF
                0521 #endif /* ALLOW_SRCG */
                0522 
ab47de63dc Mart*0523 #ifndef ALLOW_BOTTOMDRAG_ROUGHNESS
                0524       IF (zRoughBot .GT. 0.) THEN
                0525         WRITE(msgBuf,'(A,A)') 'CONFIG_CHECK: zRoughBot > 0.',
                0526      &  ' but bottom drag code for roughness length is not compiled'
                0527         CALL PRINT_ERROR( msgBuf, myThid )
                0528         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: Re-compile with',
                0529      &  ' #define ALLOW_BOTTOMDRAG_ROUGHNESS (MOM_COMMON_OPTIONS.h)'
                0530         CALL PRINT_ERROR( msgBuf, myThid )
                0531         errCount = errCount + 1
                0532       ENDIF
                0533 #endif /* ALLOW_BOTTOMDRAG_ROUGHNESS */
                0534 
aecc8b0f47 Mart*0535       IF ( useNSACGSolver .AND. useSRCGSolver ) THEN
                0536         WRITE(msgBuf,'(A,A)')
                0537      &      'CONFIG_CHECK: both useNSACGSolver and ',
                0538      &      'useSRCGSolver = .TRUE., this is not allowed.'
                0539         CALL PRINT_ERROR( msgBuf, myThid )
                0540         errCount = errCount + 1
                0541       ENDIF
                0542 
745a0098ab Jean*0543 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0544 
c7ad17745a Jean*0545 C--   Check parameter consistency :
745a0098ab Jean*0546 
aa6b2555c8 Jean*0547       IF ( ( OLx.LT.2 .OR. OLy.LT.2 ) .AND. momStepping ) THEN
                0548 C-    Current algorithm (solve_for_pressure, RHS) prevents to use
                0549 C     momAdvection or viscAh > 0 with OLx,y=1 ; it should still allow us
                0550 C     to use OLx,y=1 when momAdvection=F and viscAh=0 but some loop range
                0551 C     in few momentum S/R are not carefully set to support this.
                0552         WRITE(msgBuf,'(A,A)') 'CONFIG_CHECK: Cannot use momStepping',
                0553      &  ' with overlap (OLx,OLy) smaller than 2'
                0554         CALL PRINT_ERROR( msgBuf, myThid )
                0555         errCount = errCount + 1
                0556       ENDIF
7be5c07bb8 Jean*0557       IF ( ( OLx.LT.3 .OR. OLy.LT.3 ) .AND.
5f70aa61cc Jean*0558      &     ( viscC4leithD.NE.0.  .OR. viscC4leith.NE.0.
                0559      &     .OR. viscC4smag.NE.0. .OR. viscA4Grid.NE.0.
                0560      &     .OR. viscA4D.NE.0.    .OR. viscA4Z.NE.0. ) ) THEN
a67f2474bd Jean*0561         WRITE(msgBuf,'(A,A)')
                0562      &  'CONFIG_CHECK: cannot use Biharmonic Visc. (viscA4) with',
7be5c07bb8 Jean*0563      &  ' overlap (OLx,OLy) smaller than 3'
3c3b37da6e Jean*0564         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0565         errCount = errCount + 1
46979d29da Jean*0566       ENDIF
7be5c07bb8 Jean*0567       IF ( ( OLx.LT.3 .OR. OLy.LT.3 ) .AND.
f59d76b0dd Ed D*0568      &     ( viscC2leithD.NE.0. .OR. viscC4leithD.NE.0. .OR.
                0569      &       viscC2LeithQG.NE.0.)
5f70aa61cc Jean*0570      &   ) THEN
                0571         WRITE(msgBuf,'(A,A)')
f59d76b0dd Ed D*0572      &  'CONFIG_CHECK: cannot use Leith Visc.(div.part or QG) with',
7be5c07bb8 Jean*0573      &  ' overlap (OLx,OLy) smaller than 3'
3c3b37da6e Jean*0574         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0575         errCount = errCount + 1
46979d29da Jean*0576       ENDIF
2253ef4483 Jean*0577       IF ( ( OLx.LT.3 .OR. OLy.LT.3 ) .AND.
                0578      &     useSmag3D .AND. useCDscheme ) THEN
                0579         WRITE(msgBuf,'(A,A)')
                0580      &  'CONFIG_CHECK: cannot use Smag-3D + CD-scheme with',
                0581      &  ' overlap (OLx,OLy) smaller than 3'
                0582         CALL PRINT_ERROR( msgBuf, myThid )
                0583         errCount = errCount + 1
                0584       ENDIF
a67f2474bd Jean*0585 
f59d76b0dd Ed D*0586       IF ( ( viscC4leithD.NE.0. .OR. viscC4leith.NE.0. .OR.
                0587      &       viscC2leithD.NE.0. .OR. viscC2leith.NE.0.)
                0588      &     .AND. (viscC2LeithQG.NE.0) ) THEN
                0589         WRITE(msgBuf,'(A,A)')
                0590      &  'CONFIG_CHECK: cannot use LeithQG in conjunction with',
                0591      &  ' either standard Leith or LeithD'
                0592         CALL PRINT_ERROR( msgBuf, myThid )
                0593         errCount = errCount + 1
                0594       ENDIF
                0595 
402fba1a12 Jean*0596 #ifndef DISCONNECTED_TILES
                0597 C     Overlaps cannot be larger than interior tile except for special cases
5a05fd524d Mart*0598       IF ( sNx.LT.OLx ) THEN
                0599 #ifdef ALLOW_EXCH2
                0600        WRITE(msgBuf,'(A)')
                0601      &  'CONFIG_CHECK: sNx<OLx not allowed with ALLOW_EXCH2 defined'
                0602        CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0603         errCount = errCount + 1
5a05fd524d Mart*0604 #endif /* ALLOW_EXCH2 */
                0605        IF ( Nx.NE.1 ) THEN
                0606         WRITE(msgBuf,'(A)')
                0607      &  'CONFIG_CHECK: sNx<OLx not allowed unless Nx=1'
                0608         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0609         errCount = errCount + 1
5a05fd524d Mart*0610        ENDIF
                0611       ENDIF
                0612       IF ( sNy.LT.OLy ) THEN
                0613 #ifdef ALLOW_EXCH2
                0614        WRITE(msgBuf,'(A)')
                0615      &  'CONFIG_CHECK: sNy<OLy not allowed with ALLOW_EXCH2 defined'
                0616        CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0617         errCount = errCount + 1
5a05fd524d Mart*0618 #endif /* ALLOW_EXCH2 */
                0619        IF ( Ny.NE.1 ) THEN
                0620         WRITE(msgBuf,'(A)')
                0621      &  'CONFIG_CHECK: sNy<OLy not allowed unless Ny=1'
                0622         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0623         errCount = errCount + 1
5a05fd524d Mart*0624        ENDIF
                0625       ENDIF
402fba1a12 Jean*0626 #endif /* ndef DISCONNECTED_TILES */
5a05fd524d Mart*0627 
6ef71429db Jean*0628 C--   Gravity vertical profile limitations:
                0629       IF ( usingPCoords .AND. gravityFile .NE. ' ' ) THEN
                0630         WRITE(msgBuf,'(A,A)') 'CONFIG_CHECK: Variable gravity',
                0631      &  ' not yet implemented for P-coordinate'
                0632         CALL PRINT_ERROR( msgBuf, myThid )
                0633         errCount = errCount + 1
                0634       ENDIF
                0635       IF ( select_rStar.NE.0 .AND. gravityFile .NE. ' ' ) THEN
                0636         WRITE(msgBuf,'(A,A)') 'CONFIG_CHECK: Variable gravity',
                0637      &  ' not yet implemented with rStar'
                0638         CALL PRINT_ERROR( msgBuf, myThid )
                0639         errCount = errCount + 1
                0640       ENDIF
                0641 
c7ad17745a Jean*0642 C--   Deep-Atmosphere & Anelastic limitations:
8dc8e44fac Jean*0643       IF ( deepAtmosphere .AND.
                0644      &     useRealFreshWaterFlux .AND. usingPCoords ) THEN
                0645         WRITE(msgBuf,'(A,A)')
                0646      &  'CONFIG_CHECK: Deep-Atmosphere not yet implemented with',
                0647      &  ' real-Fresh-Water option in P-coordinate'
3c3b37da6e Jean*0648         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0649         errCount = errCount + 1
8dc8e44fac Jean*0650       ENDIF
                0651       IF ( select_rStar.NE.0 .AND.
                0652      &        ( deepAtmosphere .OR.
                0653      &          usingZCoords.AND.rhoRefFile .NE. ' ' ) ) THEN
                0654         WRITE(msgBuf,'(A,A)')
                0655      &  'CONFIG_CHECK: Deep-Atmosphere or Anelastic',
                0656      &  ' not yet implemented with rStar'
3c3b37da6e Jean*0657         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0658         errCount = errCount + 1
8dc8e44fac Jean*0659       ENDIF
                0660 
c7ad17745a Jean*0661 C--   Free-surface related limitations:
b46f9da188 Jean*0662       IF ( cg2dUseMinResSol.LT.0 .OR. cg2dUseMinResSol.GT.1 ) THEN
                0663         WRITE(msgBuf,'(A,I10,A)')
                0664      &   'CONFIG_CHECK: cg2dUseMinResSol set to unvalid value(=',
                0665      &                  cg2dUseMinResSol, ')'
                0666         CALL PRINT_ERROR( msgBuf, myThid )
                0667         errCount = errCount + 1
                0668       ENDIF
                0669 
745a0098ab Jean*0670       IF ( rigidLid .AND. implicitFreeSurface ) THEN
                0671         WRITE(msgBuf,'(A,A)')
                0672      &  'CONFIG_CHECK: Cannot select both implicitFreeSurface',
                0673      &  ' and rigidLid.'
3c3b37da6e Jean*0674         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0675         errCount = errCount + 1
46979d29da Jean*0676       ENDIF
745a0098ab Jean*0677 
79b5d5775c Jean*0678       IF ( rigidLid .AND. exactConserv ) THEN
8dc8e44fac Jean*0679         WRITE(msgBuf,'(A)')
745a0098ab Jean*0680      &   'CONFIG_CHECK: exactConserv not compatible with'
3c3b37da6e Jean*0681         CALL PRINT_ERROR( msgBuf, myThid )
5cd64f209f Jean*0682         WRITE(msgBuf,'(A)')
745a0098ab Jean*0683      &   'CONFIG_CHECK: rigidLid (meaningless in that case)'
3c3b37da6e Jean*0684         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0685         errCount = errCount + 1
5cd64f209f Jean*0686       ENDIF
                0687 
1e6181f584 Davi*0688       IF ( linFSConserveTr .AND. nonlinFreeSurf.NE.0 ) THEN
                0689         WRITE(msgBuf,'(A)')
                0690      &   'CONFIG_CHECK: Cannot select both a Nonlinear Free Surf.'
3c3b37da6e Jean*0691         CALL PRINT_ERROR( msgBuf, myThid )
1e6181f584 Davi*0692         WRITE(msgBuf,'(A)')
                0693      &   'CONFIG_CHECK: and Tracer Correction of Lin. Free Surf.'
3c3b37da6e Jean*0694         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0695         errCount = errCount + 1
1e6181f584 Davi*0696       ENDIF
                0697 
79b5d5775c Jean*0698       IF ( rigidLid .AND. useRealFreshWaterFlux ) THEN
8dc8e44fac Jean*0699         WRITE(msgBuf,'(A)')
745a0098ab Jean*0700      &   'CONFIG_CHECK: useRealFreshWaterFlux not compatible with'
3c3b37da6e Jean*0701         CALL PRINT_ERROR( msgBuf, myThid )
5cd64f209f Jean*0702         WRITE(msgBuf,'(A)')
                0703      &   'CONFIG_CHECK: rigidLid (meaningless in that case)'
3c3b37da6e Jean*0704         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0705         errCount = errCount + 1
5cd64f209f Jean*0706       ENDIF
                0707 
79b5d5775c Jean*0708       IF ( implicDiv2DFlow.NE.oneRL .AND. .NOT.exactConserv ) THEN
                0709         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: implicDiv2DFlow < 1 ',
c3be04357d Jean*0710      &   'requires exactConserv= T'
79b5d5775c Jean*0711         CALL PRINT_ERROR( msgBuf, myThid )
                0712         errCount = errCount + 1
                0713       ENDIF
                0714 
                0715       IF ( nonlinFreeSurf.NE.0 .AND. .NOT.exactConserv ) THEN
8dc8e44fac Jean*0716         WRITE(msgBuf,'(A)')
5cd64f209f Jean*0717      &   'CONFIG_CHECK: nonlinFreeSurf cannot be used'
3c3b37da6e Jean*0718         CALL PRINT_ERROR( msgBuf, myThid )
5cd64f209f Jean*0719         WRITE(msgBuf,'(A)')
                0720      &   'CONFIG_CHECK: without exactConserv'
3c3b37da6e Jean*0721         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0722         errCount = errCount + 1
5cd64f209f Jean*0723       ENDIF
                0724 
79b5d5775c Jean*0725       IF ( select_rStar.NE.0 .AND. .NOT.exactConserv ) THEN
8dc8e44fac Jean*0726         WRITE(msgBuf,'(A)')
ef891516b3 Jean*0727      &   'CONFIG_CHECK: r* Coordinate cannot be used'
3c3b37da6e Jean*0728         CALL PRINT_ERROR( msgBuf, myThid )
ef891516b3 Jean*0729         WRITE(msgBuf,'(A)')
                0730      &   'CONFIG_CHECK: without exactConserv'
3c3b37da6e Jean*0731         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0732         errCount = errCount + 1
ef891516b3 Jean*0733       ENDIF
                0734 
98b6d5abd6 Jean*0735       IF ( select_rStar.GE.1 .AND. nonlinFreeSurf.LE.0 ) THEN
                0736         WRITE(msgBuf,'(2A,I3,A)') 'CONFIG_CHECK: r* Coordinate',
                0737      &   ' (select_rStar=', select_rStar, ' ) cannot be used'
                0738         CALL PRINT_ERROR( msgBuf, myThid )
                0739         WRITE(msgBuf,'(2A,I3,A)') 'CONFIG_CHECK: ',
                0740      &   ' with Linear FreeSurf (nonlinFreeSurf=', nonlinFreeSurf,' )'
                0741         CALL PRINT_ERROR( msgBuf, myThid )
                0742         errCount = errCount + 1
                0743       ENDIF
4227e4b9a3 Jean*0744       IF ( select_rStar.EQ.2 .AND. nonlinFreeSurf.NE.4 ) THEN
                0745 C-    not consistent to account for the slope of the coordinate when
                0746 C     ignoring the variations of level-thickness in PhiHyd calculation;
                0747 C     for now, issue a warning (but might change the code later on):
                0748         WRITE(msgBuf,'(2A,I3)') '** WARNING ** CONFIG_CHECK: ',
                0749      &   'select_rStar=2 not right with nonlinFreeSurf=', nonlinFreeSurf
                0750         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0751      &                      SQUEEZE_RIGHT, myThid )
                0752       ENDIF
98b6d5abd6 Jean*0753 
f15994caab Jean*0754       IF ( selectSigmaCoord.NE.0 ) THEN
                0755        IF ( fluidIsWater ) THEN
                0756         WRITE(msgBuf,'(A)')
                0757      &   'CONFIG_CHECK: Sigma-Coords not yet coded for Oceanic set-up'
                0758         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0759         errCount = errCount + 1
f15994caab Jean*0760        ENDIF
                0761        IF ( nonlinFreeSurf.LE.0 ) THEN
                0762         WRITE(msgBuf,'(A)')
                0763      &   'CONFIG_CHECK: Sigma-Coords not coded for Lin-FreeSurf'
                0764         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0765         errCount = errCount + 1
f15994caab Jean*0766        ENDIF
                0767        IF (select_rStar.NE.0 ) THEN
                0768         WRITE(msgBuf,'(A)')
                0769      &   'CONFIG_CHECK: Sigma-Coords and rStar are not compatible'
                0770         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0771         errCount = errCount + 1
f15994caab Jean*0772        ENDIF
                0773         WRITE(msgBuf,'(A)')
                0774      &   'CONFIG_CHECK: Sigma-Coords code neither complete nor tested'
                0775         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0776      &                      SQUEEZE_RIGHT, myThid )
                0777       ENDIF
                0778 
ff02675122 Jean*0779 C- note : not implemented in checkpoint48b but it is done now (since 01-28-03)
87a066093f Jean*0780 c     IF (select_rStar.GT.0 .AND. useOBCS ) THEN
                0781 c       STOP 'ABNORMAL END: S/R CONFIG_CHECK'
                0782 c     ENDIF
5cd64f209f Jean*0783 
8dc8e44fac Jean*0784       IF ( nonlinFreeSurf.NE.0 .AND.
db8d49beca Jean*0785      &     deltaTFreeSurf.NE.dTtracerLev(1) ) THEN
3c3b37da6e Jean*0786         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0787      &                       'nonlinFreeSurf might cause problems'
463053c692 Jean*0788         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
3c3b37da6e Jean*0789      &                      SQUEEZE_RIGHT, myThid )
                0790         WRITE(msgBuf,'(2A)') '** WARNING ** ',
                0791      &               'with different FreeSurf & Tracer time-steps'
463053c692 Jean*0792         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
3c3b37da6e Jean*0793      &                      SQUEEZE_RIGHT, myThid )
745a0098ab Jean*0794       ENDIF
                0795 
79b5d5775c Jean*0796       IF ( useRealFreshWaterFlux .AND. implicDiv2DFlow.EQ.zeroRL
51d88069bf Jean*0797      &     .AND. startTime.NE.baseTime .AND. usePickupBeforeC54 ) THEN
8dc8e44fac Jean*0798         WRITE(msgBuf,'(A)')
79b5d5775c Jean*0799      &   'CONFIG_CHECK: usePickupBeforeC54 restart does not work with'
3c3b37da6e Jean*0800         CALL PRINT_ERROR( msgBuf, myThid )
745a0098ab Jean*0801         WRITE(msgBuf,'(A)')
79b5d5775c Jean*0802      &   'CONFIG_CHECK:  implicDiv2DFlow=0 + useRealFreshWaterFlux'
3c3b37da6e Jean*0803         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0804         errCount = errCount + 1
745a0098ab Jean*0805       ENDIF
                0806 
79b5d5775c Jean*0807       IF ( useRealFreshWaterFlux .AND. .NOT.exactConserv
463053c692 Jean*0808      &            .AND. buoyancyRelation.EQ.'OCEANICP' ) THEN
8dc8e44fac Jean*0809         WRITE(msgBuf,'(A)')
463053c692 Jean*0810      &   'CONFIG_CHECK: RealFreshWaterFlux with OCEANICP'
3c3b37da6e Jean*0811         CALL PRINT_ERROR( msgBuf, myThid )
463053c692 Jean*0812         WRITE(msgBuf,'(A)')
                0813      &   'CONFIG_CHECK: requires exactConserv=T'
3c3b37da6e Jean*0814         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0815         errCount = errCount + 1
463053c692 Jean*0816       ENDIF
0870c568ac Jean*0817 
6c944fd806 Jean*0818       IF ( selectAddFluid.LT.-1 .OR. selectAddFluid.GT.2 ) THEN
                0819         WRITE(msgBuf,'(A,I10,A)') 'CONFIG_CHECK: selectAddFluid=',
                0820      &                             selectAddFluid, ' not allowed'
3c3b37da6e Jean*0821         CALL PRINT_ERROR( msgBuf, myThid )
6c944fd806 Jean*0822         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0823      &       'should be =0 (Off), 1,2 (Add Mass) or -1 (Virtual Flux)'
3c3b37da6e Jean*0824         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0825         errCount = errCount + 1
6c944fd806 Jean*0826       ENDIF
                0827       IF ( selectAddFluid.GE.1 .AND. rigidLid ) THEN
                0828         WRITE(msgBuf,'(A)')
                0829      &   'CONFIG_CHECK: selectAddFluid > 0 not compatible with'
3c3b37da6e Jean*0830         CALL PRINT_ERROR( msgBuf, myThid )
6c944fd806 Jean*0831         WRITE(msgBuf,'(A)')
                0832      &   'CONFIG_CHECK: rigidLid (meaningless in that case)'
3c3b37da6e Jean*0833         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0834         errCount = errCount + 1
6c944fd806 Jean*0835       ENDIF
                0836       IF ( selectAddFluid.GE.1 .AND. .NOT.staggerTimeStep ) THEN
3c3b37da6e Jean*0837         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0838      &   'synchronous time-stepping =>'
6c944fd806 Jean*0839         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
3c3b37da6e Jean*0840      &                      SQUEEZE_RIGHT, myThid )
                0841         WRITE(msgBuf,'(2A)') '** WARNING ** ',
6c944fd806 Jean*0842      &   '1 time-step mismatch in AddFluid effects on T & S'
                0843         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
3c3b37da6e Jean*0844      &                      SQUEEZE_RIGHT, myThid )
                0845       ENDIF
                0846 
898305944e Jean*0847 C--   Pressure calculation and pressure gradient:
                0848 #ifndef INCLUDE_PHIHYD_CALCULATION_CODE
6ef71429db Jean*0849       IF ( momPressureForcing .OR. storePhiHyd4Phys ) THEN
898305944e Jean*0850         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0851      &   'missing code to calculate pressure (totPhiHyd)'
                0852         CALL PRINT_ERROR( msgBuf, myThid )
                0853         errCount = errCount + 1
                0854       ENDIF
                0855 #endif /* INCLUDE_PHIHYD_CALCULATION_CODE */
6ef71429db Jean*0856       IF ( storePhiHyd4Phys .AND. .NOT.momStepping ) THEN
898305944e Jean*0857         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
6ef71429db Jean*0858      &   'storePhiHyd4Phys = TRUE but pressure is not computed'
898305944e Jean*0859         CALL PRINT_ERROR( msgBuf, myThid )
                0860         errCount = errCount + 1
                0861       ENDIF
                0862 
3c3b37da6e Jean*0863 C--   Non-hydrostatic and 3-D solver related limitations:
                0864       IF (nonlinFreeSurf.NE.0 .AND. use3Dsolver) THEN
                0865         WRITE(msgBuf,'(A)')
                0866      &   'CONFIG_CHECK: nonlinFreeSurf not yet implemented'
                0867         CALL PRINT_ERROR( msgBuf, myThid )
                0868         WRITE(msgBuf,'(A)')
                0869      &   'CONFIG_CHECK: in nonHydrostatic code'
                0870         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0871         errCount = errCount + 1
3c3b37da6e Jean*0872       ENDIF
                0873 
228881fcf1 Jean*0874       IF ( implicitNHPress*implicSurfPress*implicDiv2DFlow.NE.1.
3c3b37da6e Jean*0875      &     .AND. implicitIntGravWave ) THEN
                0876         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: implicitIntGravWave',
                0877      &    ' NOT SAFE with non-fully implicit solver'
                0878         CALL PRINT_ERROR( msgBuf, myThid )
                0879         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: To by-pass this',
                0880      &    'STOP, comment this test and re-compile config_check'
                0881         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0882         errCount = errCount + 1
3c3b37da6e Jean*0883       ENDIF
228881fcf1 Jean*0884       IF ( implicitNHPress*implicSurfPress*implicDiv2DFlow.EQ.0.
                0885      &     .AND. nonHydrostatic ) THEN
                0886         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0887      &   'Needs non-zero implicit factors (i.e., implicitNHPress,'
                0888         CALL PRINT_ERROR( msgBuf, myThid )
                0889         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0890      &   ' implicSurfPress & implicDiv2DFlow) to run nonHydrostatic'
                0891         CALL PRINT_ERROR( msgBuf, myThid )
                0892         errCount = errCount + 1
                0893       ENDIF
3c3b37da6e Jean*0894       IF ( nonHydrostatic .AND.
                0895      &     implicitNHPress.NE.implicSurfPress ) THEN
                0896         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
9e44938df7 Jean*0897      &               'nonHydrostatic might cause problems with'
3c3b37da6e Jean*0898         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0899      &                      SQUEEZE_RIGHT, myThid )
                0900         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0901      &               'different implicitNHPress & implicSurfPress'
                0902         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0903      &                      SQUEEZE_RIGHT, myThid )
                0904       ENDIF
                0905 
9e44938df7 Jean*0906       IF ( selectImplicitDrag.EQ.2 .AND. use3Dsolver ) THEN
                0907         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: selectImplicitDrag=2',
                0908      &               ' not compatible with 3-D Press. solver'
                0909         CALL PRINT_ERROR( msgBuf, myThid )
                0910         errCount = errCount + 1
                0911       ENDIF
                0912 
3c3b37da6e Jean*0913       IF ( implicitViscosity .AND. use3Dsolver ) THEN
                0914         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0915      &    'Implicit viscosity applies to provisional u,vVel'
                0916         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0917      &                      SQUEEZE_RIGHT, myThid )
                0918         WRITE(msgBuf,'(2A)') '** WARNING ** => not consistent with',
4c3e5a1532 Jean*0919      &    ' final vertical shear (after appling 3-D solver solution'
3c3b37da6e Jean*0920         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0921      &                      SQUEEZE_RIGHT, myThid )
                0922       ENDIF
                0923       IF ( implicitViscosity .AND. nonHydrostatic ) THEN
                0924         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0925      &    'Implicit viscosity not implemented in CALC_GW'
                0926         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0927      &                      SQUEEZE_RIGHT, myThid )
                0928         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0929      &    'Explicit viscosity might become unstable if too large'
                0930         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0931      &                      SQUEEZE_RIGHT, myThid )
6c944fd806 Jean*0932       ENDIF
                0933 
c7ad17745a Jean*0934 C--   Momentum related limitations:
7fe6343684 Jean*0935       IF ( vectorInvariantMomentum.AND.momStepping ) THEN
                0936        IF ( highOrderVorticity.AND.upwindVorticity ) THEN
                0937         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                0938      &   '"highOrderVorticity" conflicts with "upwindVorticity"'
3c3b37da6e Jean*0939         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0940         errCount = errCount + 1
7fe6343684 Jean*0941        ENDIF
                0942       ENDIF
7bb5a8a109 Jean*0943 #ifdef ALLOW_MOM_COMMON
                0944       IF ( vectorInvariantMomentum .AND. momViscosity .AND.
                0945      &     usingSphericalPolarGrid .AND. cosPower.NE.zeroRL ) THEN
                0946 #ifdef ISOTROPIC_COS_SCALING
                0947        IF ( no_slip_sides ) THEN
                0948         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: inconsistent ',
                0949      &    'no_slip_sides & ISOTROPIC_COS_SCALING in mom_vecinv'
                0950         CALL PRINT_ERROR( msgBuf, myThid )
                0951         errCount = errCount + 1
                0952        ELSE
                0953         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0954      &    'ISOTROPIC_COS_SCALING not implemented in mom_vecinv'
                0955         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0956      &                      SQUEEZE_RIGHT, myThid )
                0957        ENDIF
                0958 #endif /* ISOTROPIC_COS_SCALING */
                0959 #ifdef COSINEMETH_III
                0960        IF ( useBiharmonicVisc .AND. no_slip_sides ) THEN
                0961         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: inconsistent ',
                0962      &    'no_slip_sides & COSINEMETH_III in mom_vecinv'
                0963         CALL PRINT_ERROR( msgBuf, myThid )
                0964         errCount = errCount + 1
                0965        ELSEIF ( useBiharmonicVisc ) THEN
                0966         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0967      &    'COSINEMETH_III not implemented in mom_vecinv'
                0968         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0969      &                      SQUEEZE_RIGHT, myThid )
                0970        ENDIF
                0971 #endif /* COSINEMETH_III */
                0972       ENDIF
                0973 #endif /* ALLOW_MOM_COMMON */
51a413ac3c Jean*0974       IF ( .NOT.vectorInvariantMomentum .AND. momAdvection ) THEN
                0975        IF ( usingCurvilinearGrid ) THEN
                0976         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                0977      &       'missing metric-terms for CurvilinearGrid'
                0978         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0979      &                      SQUEEZE_RIGHT, myThid )
                0980        ENDIF
                0981        IF ( hasWetCSCorners ) THEN
                0982         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: momAdvection ',
                0983      &   'in flux-form is wrong on CubedSphere grid (corners)'
                0984         CALL PRINT_ERROR( msgBuf, myThid )
                0985         errCount = errCount + 1
                0986        ENDIF
                0987       ENDIF
dfc353d300 Jean*0988       IF ( selectCoriMap.LT.0 .OR. selectCoriMap.GT.3 ) THEN
                0989         WRITE(msgBuf,'(2A,I4)') 'CONFIG_CHECK: ',
                0990      &       'Invalid option: selectCoriMap=', selectCoriMap
                0991         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*0992         errCount = errCount + 1
dfc353d300 Jean*0993       ENDIF
f9ef55fa0c Jean*0994       IF ( selectBotDragQuadr.LT.-1 .OR. selectBotDragQuadr.GT.2 ) THEN
                0995         WRITE(msgBuf,'(2A,I8,A)') 'CONFIG_CHECK: ',
                0996      &       'selectBotDragQuadr=', selectBotDragQuadr,
                0997      &       ' not valid (-1,0,1,2)'
                0998         CALL PRINT_ERROR( msgBuf, myThid )
                0999         errCount = errCount + 1
                1000       ENDIF
dc3adfb09b Jean*1001       IF ( useSmag3D .AND.
                1002      &    ( usingPCoords .OR. deepAtmosphere .OR. selectSigmaCoord.NE.0
                1003      &                   .OR. rhoRefFile.NE.' ' .OR. hasWetCSCorners )
                1004      &   ) THEN
                1005         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: ',
                1006      &       'Smag-3D not yet implemented for this set-up'
                1007         CALL PRINT_ERROR( msgBuf, myThid )
                1008         errCount = errCount + 1
                1009       ENDIF
7fe6343684 Jean*1010 
2b0fbf127e Jean*1011       IF ( momStepping .AND. .NOT.useCDscheme
                1012      &                 .AND. (tauCD.NE.0. .OR. rCD.NE.-1.) ) THEN
8dc8e44fac Jean*1013 C- jmc: since useCDscheme is a new [04-13-03] flag (default=F),
                1014 C       put this WARNING to stress that even if CD-scheme parameters
                1015 C       (tauCD,rCD) are set, CD-scheme is not used without useCDscheme=T
a97467b673 Jean*1016 C-    and STOP if using mom_fluxform (following Chris advise).
                1017 C- jmc: but ultimately, this block can/will be removed.
2b0fbf127e Jean*1018        IF ( vectorInvariantMomentum ) THEN
                1019         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: ',
                1020      &   'CD-scheme is OFF but params(tauCD,rCD) are set'
                1021         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                1022      &                      SQUEEZE_RIGHT, myThid )
                1023         WRITE(msgBuf,'(3A)') '** WARNING ** to turn ON CD-scheme:',
                1024      &   ' => "useCDscheme=.TRUE." in "data", namelist PARM01'
                1025         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                1026      &                      SQUEEZE_RIGHT, myThid )
                1027        ELSE
8dc8e44fac Jean*1028         WRITE(msgBuf,'(A)')
a97467b673 Jean*1029      &   'CONFIG_CHECK: CD-scheme is OFF but params(tauCD,rCD) are set'
3c3b37da6e Jean*1030         CALL PRINT_ERROR( msgBuf, myThid )
a97467b673 Jean*1031         WRITE(msgBuf,'(2A)')
                1032      &   'CONFIG_CHECK: to turn ON CD-scheme: => "useCDscheme=.TRUE."',
8dc8e44fac Jean*1033      &   ' in "data", namelist PARM01'
3c3b37da6e Jean*1034         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*1035         errCount = errCount + 1
a97467b673 Jean*1036        ENDIF
0870c568ac Jean*1037       ENDIF
745a0098ab Jean*1038 
51a413ac3c Jean*1039       IF ( useCDscheme .AND. hasWetCSCorners ) THEN
a77afd21fa Jean*1040         WRITE(msgBuf,'(2A)')
                1041      &   'CONFIG_CHECK: CD-scheme not implemented on CubedSphere grid'
3c3b37da6e Jean*1042         CALL PRINT_ERROR( msgBuf, myThid )
51a413ac3c Jean*1043         errCount = errCount + 1
d964dd04ff Jean*1044       ENDIF
9e44938df7 Jean*1045       IF ( useCDscheme .AND. momImplVertAdv ) THEN
                1046         WRITE(msgBuf,'(2A)')'CONFIG_CHECK: ',
                1047      &   'Implicit Vert. Advect. not coded for CD-scheme velocity'
                1048         CALL PRINT_ERROR( msgBuf, myThid )
                1049         errCount = errCount + 1
                1050       ENDIF
                1051       IF ( useCDscheme .AND. selectImplicitDrag.GT.0 ) THEN
                1052         WRITE(msgBuf,'(2A)')'CONFIG_CHECK: ',
                1053      &   'Implicit (bottom) drag not coded for CD-scheme velocity'
                1054         CALL PRINT_ERROR( msgBuf, myThid )
                1055         errCount = errCount + 1
                1056       ENDIF
d964dd04ff Jean*1057 
c7ad17745a Jean*1058 C--   Time-stepping limitations
6d54334e28 Jean*1059       IF ( implicitIntGravWave .AND. staggerTimeStep ) THEN
                1060         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: staggerTimeStep',
                1061      &    ' incompatible with implicitIntGravWave'
                1062         CALL PRINT_ERROR( msgBuf, myThid )
                1063         errCount = errCount + 1
                1064       ENDIF
8dc8e44fac Jean*1065       IF ( momForcingOutAB.NE.0 .AND. momForcingOutAB.NE.1 ) THEN
c2b6ed6bfd Jean*1066         WRITE(msgBuf,'(A,I10,A)') 'CONFIG_CHECK: momForcingOutAB=',
                1067      &                             momForcingOutAB, ' not allowed'
3c3b37da6e Jean*1068         CALL PRINT_ERROR( msgBuf, myThid )
c2b6ed6bfd Jean*1069         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: momForcingOutAB ',
                1070      &                       'should be =1 (Out of AB) or =0 (In AB)'
3c3b37da6e Jean*1071         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*1072         errCount = errCount + 1
c2b6ed6bfd Jean*1073       ENDIF
8dc8e44fac Jean*1074       IF ( tracForcingOutAB.NE.0 .AND. tracForcingOutAB.NE.1 ) THEN
c2b6ed6bfd Jean*1075         WRITE(msgBuf,'(A,I10,A)') 'CONFIG_CHECK: tracForcingOutAB=',
                1076      &                             tracForcingOutAB, ' not allowed'
3c3b37da6e Jean*1077         CALL PRINT_ERROR( msgBuf, myThid )
c2b6ed6bfd Jean*1078         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: tracForcingOutAB ',
                1079      &                       'should be =1 (Out of AB) or =0 (In AB)'
3c3b37da6e Jean*1080         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*1081         errCount = errCount + 1
a77afd21fa Jean*1082       ENDIF
9e44938df7 Jean*1083       IF ( selectImplicitDrag.LT.0 .OR. selectImplicitDrag.GT.2 ) THEN
                1084         WRITE(msgBuf,'(2A,I4)') 'CONFIG_CHECK: ',
                1085      &    'Invalid option: selectImplicitDrag=',  selectImplicitDrag
                1086         CALL PRINT_ERROR( msgBuf, myThid )
                1087         errCount = errCount + 1
                1088       ENDIF
                1089       IF ( selectImplicitDrag.EQ.1 ) THEN
                1090         WRITE(msgBuf,'(2A)') 'CONFIG_CHECK: selectImplicitDrag=1',
                1091      &  ' not yet available'
f9ef55fa0c Jean*1092         CALL PRINT_ERROR( msgBuf, myThid )
                1093         errCount = errCount + 1
                1094       ENDIF
a77afd21fa Jean*1095 
c7ad17745a Jean*1096 C--   Grid limitations:
7514c1bd55 Mart*1097       IF ( rotateGrid ) THEN
                1098        IF ( .NOT. usingSphericalPolarGrid ) THEN
                1099         WRITE(msgBuf,'(2A)')
                1100      &       'CONFIG_CHECK: specifying Euler angles makes only ',
                1101      &       'sense with usingSphericalGrid=.TRUE.'
3c3b37da6e Jean*1102         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*1103         errCount = errCount + 1
7514c1bd55 Mart*1104        ENDIF
427e24e121 Jean*1105        IF ( useFLT .OR. useECCO ) THEN
                1106         WRITE(msgBuf,'(2A)') '** WARNING ** CONFIG_CHECK: specifying',
                1107      &       ' Euler angles may not work with pkgs FLT, ECCO'
                1108         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                1109      &                      SQUEEZE_RIGHT, myThid )
7514c1bd55 Mart*1110        ENDIF
                1111       ENDIF
                1112 
c7ad17745a Jean*1113 C--   Packages conflict
                1114       IF ( useMATRIX .AND. useGCHEM ) THEN
                1115         WRITE(msgBuf,'(2A)')
                1116      &   'CONFIG_CHECK: cannot set both: useMATRIX & useGCHEM'
3c3b37da6e Jean*1117         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*1118         errCount = errCount + 1
c7ad17745a Jean*1119       ENDIF
                1120 
                1121       IF ( useMATRIX .AND. .NOT.usePTRACERS ) THEN
                1122         WRITE(msgBuf,'(2A)')
                1123      &       'CONFIG_CHECK: cannot set useMATRIX without ',
                1124      &       'setting usePTRACERS'
3c3b37da6e Jean*1125         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*1126         errCount = errCount + 1
c7ad17745a Jean*1127       ENDIF
                1128 
6c944fd806 Jean*1129       IF ( (useSEAICE .OR. useThSIce) .AND. allowFreezing ) THEN
                1130         WRITE(msgBuf,'(2A)')
                1131      &       'CONFIG_CHECK: cannot set allowFreezing',
                1132      &       ' with pkgs SEAICE or THSICE'
3c3b37da6e Jean*1133         CALL PRINT_ERROR( msgBuf, myThid )
fbf4b71a66 Jean*1134         errCount = errCount + 1
                1135       ENDIF
                1136 
                1137       IF ( errCount.GE.1 ) THEN
                1138         WRITE(msgBuf,'(A,I3,A)')
                1139      &       'CONFIG_CHECK: detected', errCount,' fatal error(s)'
                1140         CALL PRINT_ERROR( msgBuf, myThid )
                1141         CALL ALL_PROC_DIE( 0 )
6c944fd806 Jean*1142         STOP 'ABNORMAL END: S/R CONFIG_CHECK'
                1143       ENDIF
fbf4b71a66 Jean*1144       _END_MASTER(myThid)
                1145 
                1146 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
6c944fd806 Jean*1147 
fbf4b71a66 Jean*1148       _BEGIN_MASTER(myThid)
c19461ac28 Jean*1149       WRITE(msgBuf,'(A)') '// CONFIG_CHECK : Normal End'
                1150       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                1151      &                    SQUEEZE_RIGHT, myThid )
                1152       WRITE(msgBuf,'(A)')
                1153      &'// ======================================================='
                1154       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                1155      &                    SQUEEZE_RIGHT, myThid )
                1156       WRITE(msgBuf,'(A)') ' '
                1157       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                1158      &                    SQUEEZE_RIGHT, myThid )
fbf4b71a66 Jean*1159       _END_MASTER(myThid)
5cd64f209f Jean*1160 
                1161       RETURN
                1162       END