Back to home page

MITgcm

 
 

    


File indexing completed on 2025-04-19 05:07:54 UTC

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