File indexing completed on 2026-01-27 06:08:47 UTC
view on githubraw file Latest commit 0039480a on 2025-12-09 18:37:54 UTC
6d54cf9ca1 Ed H*0001 #include "GMREDI_OPTIONS.h"
dfc9956354 Jean*0002 #ifdef ALLOW_PTRACERS
0003 # include "PTRACERS_OPTIONS.h"
0004 #endif
2a09713997 Patr*0005
7185da56c9 Jean*0006
0007
0008
2a09713997 Patr*0009 SUBROUTINE GMREDI_CHECK( myThid )
7185da56c9 Jean*0010
0011
0012
0013
0014
0015
0016
0017
0018
2a09713997 Patr*0019 IMPLICIT NONE
0020
0021
0022 #include "SIZE.h"
0023 #include "EEPARAMS.h"
0024 #include "PARAMS.h"
0025 #include "GMREDI.h"
725ef7d279 Jean*0026 #ifdef ALLOW_GENERIC_ADVDIFF
dfc9956354 Jean*0027 # include "GAD.h"
0028 #endif
0029 #ifdef ALLOW_PTRACERS
0030 # include "PTRACERS_SIZE.h"
1f86e2e864 Jean*0031 # include "PTRACERS_PARAMS.h"
725ef7d279 Jean*0032 #endif
2a09713997 Patr*0033
7185da56c9 Jean*0034
0035
2a09713997 Patr*0036 INTEGER myThid
0037
7185da56c9 Jean*0038 #ifdef ALLOW_GMREDI
8233d0ceb9 Jean*0039
0040 INTEGER ILNBLNK
0041 EXTERNAL ILNBLNK
0042
7185da56c9 Jean*0043
37549204de Jean*0044
2a09713997 Patr*0045 CHARACTER*(MAX_LEN_MBUF) msgBuf
8233d0ceb9 Jean*0046 INTEGER iL, errCount
f5509be190 Mart*0047 _RL tmpVar
7185da56c9 Jean*0048
dfc9956354 Jean*0049 #ifdef ALLOW_PTRACERS
0050 INTEGER iTr
0051 LOGICAL redFlag
0052 #endif
2a09713997 Patr*0053
7185da56c9 Jean*0054 _BEGIN_MASTER(myThid)
e25acdb1f2 Jean*0055 errCount = 0
2a09713997 Patr*0056
42c525bfb4 Alis*0057 WRITE(msgBuf,'(A)') 'GMREDI_CHECK: #define GMREDI'
0058 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
7185da56c9 Jean*0059 & SQUEEZE_RIGHT , myThid )
42c525bfb4 Alis*0060
f5509be190 Mart*0061
f42e64b3e7 Jean*0062 CALL WRITE_0D_L( GM_AdvForm, INDEX_NONE,
86e2f7bc1f Jean*0063 & 'GM_AdvForm =', ' /* if FALSE => use SkewFlux Form */')
43af9695da Gael*0064 CALL WRITE_0D_L( GM_InMomAsStress, INDEX_NONE,
86e2f7bc1f Jean*0065 & 'GM_InMomAsStress =', ' /* if TRUE => apply as Eddy Stress */')
ed71a1a16f Jean*0066 CALL WRITE_0D_L( GM_AdvSeparate, INDEX_NONE,
7185da56c9 Jean*0067 & 'GM_AdvSeparate =',' /* Calc Bolus & Euler Adv. separately */')
f42e64b3e7 Jean*0068 CALL WRITE_0D_L( GM_ExtraDiag, INDEX_NONE,
86e2f7bc1f Jean*0069 & 'GM_ExtraDiag =',' /* Tensor Extra Diag (line 1&2) non 0 */')
4da4b49499 Jean*0070 CALL WRITE_0D_RL( GM_isopycK, INDEX_NONE, 'GM_isopycK =',
86e2f7bc1f Jean*0071 & ' /* Background Isopyc. Diffusivity [m^2/s] */')
f5509be190 Mart*0072
0073
0074
0075 tmpVar = GM_background_K*( oneRL - GM_skewflx )
0076 CALL WRITE_0D_RL( tmpVar, INDEX_NONE, 'GM_advec*K =',
0077 & ' /* Backg. GM-Advec(=Bolus) Diffusivity [m^2/s] */')
4da4b49499 Jean*0078 CALL WRITE_0D_RL( GM_background_K*GM_skewflx, INDEX_NONE,
86e2f7bc1f Jean*0079 & 'GM_skewflx*K =',
0080 & ' /* Background GM_SkewFlx Diffusivity [m^2/s] */')
f5509be190 Mart*0081 CALL WRITE_0D_RL( GM_isoFac_calcK, INDEX_NONE,
0082 & 'GM_isoFac_calcK =',
0083 & ' /* Fraction of dynamic K added to Redi tensor */')
15f5c9e77b Jean*0084 CALL WRITE_0D_RL( GM_Kmin_horiz, INDEX_NONE, 'GM_Kmin_horiz =',
86e2f7bc1f Jean*0085 & ' /* Minimum Horizontal Diffusivity [m^2/s] */')
4da4b49499 Jean*0086 CALL WRITE_0D_RL( GM_Visbeck_alpha, INDEX_NONE,
86e2f7bc1f Jean*0087 & 'GM_Visbeck_alpha =', ' /* Visbeck alpha coeff. [-] */')
4da4b49499 Jean*0088 CALL WRITE_0D_RL( GM_Small_Number, INDEX_NONE,
86e2f7bc1f Jean*0089 & 'GM_Small_Number =', ' /* epsilon used in slope calc */')
4da4b49499 Jean*0090 CALL WRITE_0D_RL( GM_slopeSqCutoff, INDEX_NONE,
86e2f7bc1f Jean*0091 & 'GM_slopeSqCutoff =', ' /* Slope^2 cut-off value */')
0092 CALL WRITE_0D_C( GM_taper_scheme, 0, INDEX_NONE,
0093 & 'GM_taper_scheme =',
0094 & ' /* Type of Tapering/Clipping scheme */')
4da4b49499 Jean*0095 CALL WRITE_0D_RL( GM_maxSlope, INDEX_NONE,
86e2f7bc1f Jean*0096 & 'GM_maxSlope =', ' /* Maximum Slope (Tapering/Clipping) */')
4da4b49499 Jean*0097 CALL WRITE_0D_RL( GM_facTrL2dz, INDEX_NONE,
86e2f7bc1f Jean*0098 & 'GM_facTrL2dz =',
0099 & ' /* Minimum Trans.Layer Thick. (factor of dz) */')
4da4b49499 Jean*0100 CALL WRITE_0D_RL( GM_facTrL2ML, INDEX_NONE,
86e2f7bc1f Jean*0101 & 'GM_facTrL2ML =',
0102 & ' /* Max.Trans.Layer Thick. (factor of MxL Depth)*/')
4da4b49499 Jean*0103 CALL WRITE_0D_RL( GM_maxTransLay, INDEX_NONE,
86e2f7bc1f Jean*0104 & 'GM_maxTransLay =',
0105 & ' /* Maximum Transition Layer Thickness [m] */')
d0035fac68 Jean*0106 CALL WRITE_0D_L( GM_UseBVP, INDEX_NONE,
0107 & 'GM_UseBVP =',
0108 & ' /* if TRUE => use bvp a la Ferrari et al. (2010) */')
0109 CALL WRITE_0D_I( GM_BVP_ModeNumber, INDEX_NONE,
0110 & 'GM_BVP_ModeNumber =',
0111 & ' /* Vertical mode number for BVP wave speed */')
0112 CALL WRITE_0D_RL( GM_BVP_cMin, INDEX_NONE,
0113 & 'GM_BVP_cMin =',
0114 & ' /* Minimum wave speed for BVP [m/s] */')
050b4366e6 Jean*0115 CALL WRITE_0D_L( GM_useSubMeso, INDEX_NONE,
0116 & 'GM_useSubMeso =',
0117 & ' /* if TRUE => use Sub-Meso param. (B.Fox-Kemper) */')
0118 CALL WRITE_0D_RL( subMeso_Ceff, INDEX_NONE,
0119 & 'subMeso_Ceff =',
0120 & ' /* efficiency coeff. of Mixed-Layer Eddies [-] */')
0121 CALL WRITE_0D_RL( subMeso_invTau, INDEX_NONE,
0122 & 'subMeso_invTau =',
0123 & ' /* inverse of Sub-Meso mixing time-scale [/s] */')
0124 CALL WRITE_0D_RL( subMeso_LfMin, INDEX_NONE,
0125 & 'subMeso_LfMin =',' /* minimum length-scale "Lf" [m] */')
0126 CALL WRITE_0D_RS( subMeso_Lmax, INDEX_NONE,
0127 & 'subMeso_Lmax =',' /* maximum grid-scale length [m] */')
f59d76b0dd Ed D*0128 CALL WRITE_0D_L( GM_useLeithQG, INDEX_NONE,
0129 & 'GM_useLeithQG =',
0130 & ' /* if TRUE => add QG Leith viscosity to GMRedi tensor */')
a4576c7cde Juli*0131 CALL WRITE_0D_L( GM_useGEOM, INDEX_NONE,
0132 & 'GM_useGEOM =', ' /* using GEOMETRIC */')
b8a35fd4d2 Jean*0133
0134
0135
0136
7185da56c9 Jean*0137 IF ( .NOT.implicitDiffusion ) THEN
b8a35fd4d2 Jean*0138 WRITE(msgBuf,'(A)') 'GM/Redi needs implicitDiffusion=.true.'
7185da56c9 Jean*0139 CALL PRINT_ERROR( msgBuf , myThid )
e25acdb1f2 Jean*0140 errCount = errCount + 1
7185da56c9 Jean*0141 ENDIF
b8a35fd4d2 Jean*0142
94a8024bbe Jean*0143 #ifndef GM_READ_K3D_REDI
0144 IF ( GM_K3dRediFile.NE.' ' ) THEN
0145 WRITE(msgBuf,'(A)')
0146 & 'GMREDI_CHECK: GM_K3dRediFile is set in data.gmredi'
0147 CALL PRINT_ERROR( msgBuf, myThid )
0148 WRITE(msgBuf,'(A)')
0149 & 'GMREDI_CHECK: without #define GM_READ_K3D_REDI'
0150 CALL PRINT_ERROR( msgBuf, myThid )
0151 errCount = errCount + 1
0152 ENDIF
0153 #endif
0154 #ifndef GM_READ_K3D_GM
0155 IF ( GM_K3dGMFile.NE.' ' ) THEN
0156 WRITE(msgBuf,'(A)')
0157 & 'GMREDI_CHECK: GM_K3dGMFile is set in data.gmredi'
0158 CALL PRINT_ERROR( msgBuf, myThid )
0159 WRITE(msgBuf,'(A)')
0160 & 'GMREDI_CHECK: without #define GM_READ_K3D_GM'
0161 CALL PRINT_ERROR( msgBuf, myThid )
0162 errCount = errCount + 1
0163 ENDIF
0164 #endif
0165
b8a35fd4d2 Jean*0166 #ifndef GM_VISBECK_VARIABLE_K
0167
7185da56c9 Jean*0168 IF ( GM_Visbeck_alpha.NE.0. ) THEN
b8a35fd4d2 Jean*0169 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0170 & 'GMREDI_CHECK: Visbeck variables used in data.gmredi'
7185da56c9 Jean*0171 CALL PRINT_ERROR( msgBuf, myThid )
b8a35fd4d2 Jean*0172 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0173 & 'GMREDI_CHECK: without #define GM_VISBECK_VARIABLE_K'
7185da56c9 Jean*0174 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0175 errCount = errCount + 1
b8a35fd4d2 Jean*0176 ENDIF
0177 #endif
0039480ad8 Jean*0178 #ifdef OLD_VISBECK_CALC
0179
0180
0181
0182 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
0183 & '#define OLD_VISBECK_CALC not allowed in GMREDI_OPTIONS.h'
0184 CALL PRINT_ERROR( msgBuf, myThid )
0185 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
0186 & ' since OLD_VISBECK_CALC code has been removed'
0187 CALL PRINT_ERROR( msgBuf, myThid )
0188 errCount = errCount + 1
0189
0190 #endif
b8a35fd4d2 Jean*0191
a4576c7cde Juli*0192 #ifdef GM_GEOM_VARIABLE_K
0193 IF ( GM_useGEOM ) THEN
0194 CALL WRITE_0D_RL( GEOM_alpha, INDEX_NONE,
0195 & 'GEOM_alpha =', ' /* GEOM alpha coeff. [-] */')
0196 CALL WRITE_0D_RL( GEOM_lmbda, INDEX_NONE,
0197 & 'GEOM_lmbda =', ' /* GEOM ene diss rate [/s] */')
0198 CALL WRITE_0D_RL( GEOM_diffKh_EKE, INDEX_NONE,
0199 & 'GEOM_diffKh_EKE =', ' /* GEOM Eke diffusion coeff [m2/s] */')
0200 CALL WRITE_0D_L( GEOM_vert_struc, INDEX_NONE,
0201 & 'GEOM_vert_struc =', ' /* GEOM vertical structure function */')
0202 CALL WRITE_0D_RL( GEOM_vert_struc_min, INDEX_NONE,
0203 & 'GEOM_vert_struc_min =', ' /* vert struc min [-] */')
0204 CALL WRITE_0D_RL( GEOM_vert_struc_max, INDEX_NONE,
0205 & 'GEOM_vert_struc_min =', ' /* vert struc min [-] */')
0206 CALL WRITE_0D_RL( GEOM_minVal_K, INDEX_NONE,
0207 & 'GEOM_minVal_K =', ' /* GEOM_K3d lower bound [m2/s] */')
0208 CALL WRITE_0D_RL( GEOM_maxVal_K, INDEX_NONE,
0209 & 'GEOM_maxVal_K =', ' /* GEOM_K3d upper bound [m2/s] */')
0210 IF (usingPcoords) THEN
0211 WRITE(msgBuf,'(3A)') 'GMREDI_CHECK:',
0212 & ' p-coords not yet implemented with GM_useGEOM'
0213 CALL PRINT_ERROR( msgBuf, myThid )
0214 errCount = errCount + 1
0215 ENDIF
0216 ENDIF
0217 #else /* GM_GEOM_VARIABLE_K */
0218
0219 IF ( GM_useGEOM ) THEN
0220 WRITE(msgBuf,'(A)')
0221 & ' GMREDI_CHECK: GEOM variables used in data.gmredi'
0222 CALL PRINT_ERROR( msgBuf, myThid )
0223 WRITE(msgBuf,'(A)')
0224 & ' GMREDI_CHECK: without #define GM_GEOM_VARIABLE_K'
0225 CALL PRINT_ERROR( msgBuf, myThid )
0226 errCount = errCount + 1
0227 ENDIF
0228 #endif /* GM_GEOM_VARIABLE_K */
0229
b8a35fd4d2 Jean*0230 #ifndef GM_BOLUS_ADVEC
0231
7185da56c9 Jean*0232 IF ( GM_AdvForm ) THEN
b8a35fd4d2 Jean*0233 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0234 & 'GMREDI_CHECK: GM Advection form used in data.gmredi'
7185da56c9 Jean*0235 CALL PRINT_ERROR( msgBuf, myThid )
b8a35fd4d2 Jean*0236 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0237 & 'GMREDI_CHECK: without #define GM_BOLUS_ADVEC'
7185da56c9 Jean*0238 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0239 errCount = errCount + 1
2a09713997 Patr*0240 ENDIF
b8a35fd4d2 Jean*0241 #endif
2a09713997 Patr*0242
05118ac017 Jean*0243 #ifdef GM_BATES_K3D
dc60433548 Mich*0244 # ifndef HAVE_LAPACK
05118ac017 Jean*0245
0246 WRITE(msgBuf, '(A)')
0247 & 'Must use CPP option HAVE_LAPACK when using BatesK3d'
0248 CALL PRINT_ERROR( msgBuf, myThid )
0249 errCount = errCount + 1
0250
5a6ef5c2b4 Mich*0251 # endif
05118ac017 Jean*0252 IF ( GM_useBatesK3d ) THEN
0253 CALL WRITE_0D_L( GM_useBatesK3d, INDEX_NONE,
0254 & 'GM_useBatesK3d =',
0255 & ' /* if TRUE => use BatesK3d for GM diffusivity */')
0256 IF ( GM_Bates_use_constK ) THEN
0257 CALL WRITE_0D_L( GM_Bates_use_constK, INDEX_NONE,
0258 & 'GM_Bates_use_constK =',
0259 & ' /* if TRUE => Uses a constant K for'//
c8602656d9 Davi*0260 & ' the eddy transport closure */')
05118ac017 Jean*0261 CALL WRITE_0D_L( GM_Bates_smooth, INDEX_NONE,
0262 & 'GM_Bates_smooth =',
5a6ef5c2b4 Mich*0263 & ' /* if TRUE => Expands in terms of baroclinic modes */')
05118ac017 Jean*0264 IF ( GM_Bates_smooth ) THEN
0265 CALL WRITE_0D_I( GM_Bates_NModes, INDEX_NONE,
0266 & 'GM_Bates_NModes =',
5a6ef5c2b4 Mich*0267 & ' /* Number of modes for expansion */')
0268 ENDIF
0269 ELSE
05118ac017 Jean*0270 CALL WRITE_0D_I( GM_Bates_NModes, INDEX_NONE,
0271 & 'GM_Bates_NModes =',
5a6ef5c2b4 Mich*0272 & ' /* Number of modes for expansion */')
0273 ENDIF
0274 ENDIF
0275
05118ac017 Jean*0276
0d1e4b948d Mich*0277
05118ac017 Jean*0278 IF ( GM_useBatesK3d .AND. .NOT.GM_AdvForm ) THEN
0279 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
0280 & 'GM_useBatesK3d=.TRUE. but GM_AdvForm=.FALSE.'
0d1e4b948d Mich*0281 CALL PRINT_ERROR( msgBuf, myThid )
0282 WRITE(msgBuf,'(A)')
05118ac017 Jean*0283 & 'GMREDI_CHECK: To use BatesK3d set GM_AdvForm=.TRUE.'
0d1e4b948d Mich*0284 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0285 errCount = errCount + 1
4e65b6d0de Mich*0286 ENDIF
a67797e4f0 Jean*0287 IF ( GM_useBatesK3d .AND. deepAtmosphere ) THEN
0288 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useBatesK3d',
0289 & ' not yet fixed for deep geometry (deepAtmosphere=T)'
0290 CALL PRINT_ERROR( msgBuf, myThid )
0291 errCount = errCount + 1
0292 ENDIF
4e65b6d0de Mich*0293
a67797e4f0 Jean*0294 #else /* GM_BATES_K3D */
0295
0296 IF ( GM_useBatesK3d ) THEN
0297 WRITE(msgBuf,'(A)')
0298 & 'GMREDI_CHECK: GM_useBatesK3d is set to True in data.gmredi'
0299 CALL PRINT_ERROR( msgBuf, myThid )
0300 WRITE(msgBuf,'(A)')
0301 & 'GMREDI_CHECK: without #define GM_BATES_K3D'
0302 CALL PRINT_ERROR( msgBuf, myThid )
0303 errCount = errCount + 1
0304 ENDIF
05118ac017 Jean*0305 #endif /* GM_BATES_K3D */
0d1e4b948d Mich*0306
b8a35fd4d2 Jean*0307 #ifndef GM_EXTRA_DIAGONAL
0308
7185da56c9 Jean*0309 IF ( GM_ExtraDiag ) THEN
b8a35fd4d2 Jean*0310 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0311 & 'GMREDI_CHECK: GM_skew_Flux_K & GM_isopycK not equal'
7185da56c9 Jean*0312 CALL PRINT_ERROR( msgBuf, myThid )
b8a35fd4d2 Jean*0313 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0314 & 'GMREDI_CHECK: without #define GM_EXTRA_DIAGONAL'
7185da56c9 Jean*0315 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0316 errCount = errCount + 1
b8a35fd4d2 Jean*0317 ENDIF
2a09713997 Patr*0318 #endif
b8a35fd4d2 Jean*0319
f6de204bec Jean*0320 #ifndef GM_NON_UNITY_DIAGONAL
0321 IF ( GM_iso2dFile .NE. ' ' .OR.
0322 & GM_iso1dFile .NE. ' ' ) THEN
0323 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0324 & 'GMREDI_CHECK: needs #define GM_NON_UNITY_DIAGONAL'
f6de204bec Jean*0325 CALL PRINT_ERROR( msgBuf, myThid )
0326 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0327 & 'GMREDI_CHECK: to use GM_iso2dFile or GM_iso1dFile'
f6de204bec Jean*0328 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0329 errCount = errCount + 1
f6de204bec Jean*0330 ENDIF
f5509be190 Mart*0331 IF ( GM_isoFac_calcK .NE. zeroRL .AND.
0332 & ( GM_Visbeck_alpha.NE.zeroRL .OR.
0333 & GM_useBatesK3d .OR. GM_useLeithQG ) ) THEN
f59d76b0dd Ed D*0334 WRITE(msgBuf,'(A)')
f5509be190 Mart*0335 & 'GMREDI_CHECK: needs #define GM_NON_UNITY_DIAGONAL'
f59d76b0dd Ed D*0336 CALL PRINT_ERROR( msgBuf, myThid )
f5509be190 Mart*0337 IF ( GM_Visbeck_alpha.NE.zeroRL ) THEN
0338 WRITE(msgBuf,'(A)')
0339 & 'GMREDI_CHECK: to use Visbeck computed K'
0340 CALL PRINT_ERROR( msgBuf, myThid )
0341 ENDIF
0342 IF ( GM_useBatesK3d .OR. GM_useLeithQG ) THEN
0343 WRITE(msgBuf,'(A)')
0344 & 'GMREDI_CHECK: to use GM_useBatesK3d or GM_useLeithQG'
0345 CALL PRINT_ERROR( msgBuf, myThid )
0346 ENDIF
e25acdb1f2 Jean*0347 errCount = errCount + 1
f59d76b0dd Ed D*0348 ENDIF
f5509be190 Mart*0349 IF ( errCount .EQ. 0 ) THEN
0350 WRITE(msgBuf,'(2A)') '** WARNING ** GMREDI_CHECK: ',
0351 & '#undef GM_NON_UNITY_DIAGONAL not recommended'
0352 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0353 & SQUEEZE_RIGHT, myThid )
0354 ENDIF
f59d76b0dd Ed D*0355 #endif
0356
0357 #ifndef ALLOW_GM_LEITH_QG
0358 IF ( GM_useLeithQG ) THEN
0359 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0360 & 'GMREDI_CHECK: GM_useLeithQG used in data.gmredi without'
f59d76b0dd Ed D*0361 CALL PRINT_ERROR( msgBuf, myThid )
0362 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0363 & 'GMREDI_CHECK: #define ALLOW_GM_LEITH_QG'
f59d76b0dd Ed D*0364 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0365 errCount = errCount + 1
f59d76b0dd Ed D*0366 ENDIF
f6de204bec Jean*0367 #endif
e25acdb1f2 Jean*0368 IF ( GM_useLeithQG .AND. .NOT.momStepping ) THEN
0369 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
0370 & 'cannot use GM_useLeithQG with "momStepping= FALSE"'
0371 CALL PRINT_ERROR( msgBuf, myThid )
0372 errCount = errCount + 1
0373 ENDIF
f6de204bec Jean*0374
050b4366e6 Jean*0375 #ifdef GM_EXCLUDE_SUBMESO
0376 IF ( GM_useSubMeso ) THEN
e25acdb1f2 Jean*0377 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
050b4366e6 Jean*0378 & 'cannot use Sub-Meso (GM_useSubMeso=T)'
0379 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0380 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
050b4366e6 Jean*0381 & 'when compiled with #define GM_EXCLUDE_SUBMESO'
0382 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0383 errCount = errCount + 1
050b4366e6 Jean*0384 ENDIF
0385 #endif /* GM_EXCLUDE_SUBMESO */
0386
0387 IF ( GM_useSubMeso .AND. .NOT.GM_AdvForm ) THEN
e25acdb1f2 Jean*0388 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
050b4366e6 Jean*0389 & 'Sub-Meso only implemented within GM_AdvForm'
0390 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0391 errCount = errCount + 1
050b4366e6 Jean*0392 ENDIF
0393
879138fdca Jean*0394 IF ( GM_InMomAsStress ) THEN
441caf5dcc Jean*0395 #ifdef ALLOW_EDDYPSI
05118ac017 Jean*0396 IF ( .NOT.GM_useBatesK3d ) THEN
0397 WRITE(msgBuf,'(3A)') 'GMREDI_CHECK: ',
0398 & 'Using GM_InMomAsStress and not GM_useBatesK3d. ',
0399 & 'GM_InMomAsStress=T has only been tested with BatesK3d'
0400 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0401 & SQUEEZE_RIGHT, myThid )
5853335f7f Mich*0402 ENDIF
879138fdca Jean*0403 #else /* ALLOW_EDDYPSI */
0404 WRITE(msgBuf,'(2A)')
e25acdb1f2 Jean*0405 & 'GMREDI_CHECK: need to define ALLOW_EDDYPSI in CPP_OPTIONS.h',
879138fdca Jean*0406 & ' to use GM_InMomAsStress'
0407 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0408 errCount = errCount + 1
879138fdca Jean*0409 #endif /* ALLOW_EDDYPSI */
0410 ENDIF
0411 IF ( GM_InMomAsStress .AND. .NOT.GM_AdvForm ) THEN
0412 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0413 & 'GMREDI_CHECK: need GM_AdvForm=T to use GM_InMomAsStress'
879138fdca Jean*0414 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0415 errCount = errCount + 1
879138fdca Jean*0416 ENDIF
441caf5dcc Jean*0417
5b172de0d2 Jean*0418 IF ( usingPcoords ) THEN
0419
0420 IF ( GM_taper_scheme.EQ.'fm07' .OR.
0421 & GM_taper_scheme.EQ.'stableGmAdjTap' ) THEN
0422 iL = ILNBLNK(GM_taper_scheme)
0423 WRITE(msgBuf,'(3A)') 'GMREDI_CHECK: GM_taper_scheme "',
0424 & GM_taper_scheme(1:iL), '" not yet fixed for P-Coordinate'
0425 CALL PRINT_ERROR( msgBuf, myThid )
0426 errCount = errCount + 1
0427 ENDIF
0428 IF ( GM_useBVP ) THEN
0429 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useBVP',
0430 & ' code not yet fixed for P-Coordinate'
0431 CALL PRINT_ERROR( msgBuf, myThid )
0432 errCount = errCount + 1
0433 ENDIF
0434 IF ( GM_Visbeck_alpha.NE.zeroRL ) THEN
0435 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: Visbeck',
0436 & 'scheme not yet fixed for P-Coordinate'
0437 CALL PRINT_ERROR( msgBuf, myThid )
0438 errCount = errCount + 1
0439 ENDIF
0440 IF ( GM_useBatesK3d ) THEN
0441 WRITE(msgBuf,'(2A,I3)') '** WARNING ** GMREDI_CHECK: ',
0442 & 'GM_useBatesK3d potentially unsafe with P-Coordinate'
0443 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0444 & SQUEEZE_RIGHT, myThid )
0445 ENDIF
0446 IF ( GM_useLeithQG ) THEN
0447 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useLeithQG',
0448 & ' code not yet fixed for P-Coordinate'
0449 CALL PRINT_ERROR( msgBuf, myThid )
0450 errCount = errCount + 1
0451 ENDIF
0452 IF ( GM_useSubMeso ) THEN
0453 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useSubMeso',
0454 & ' not yet fixed for P-Coordinate'
0455 CALL PRINT_ERROR( msgBuf, myThid )
0456 errCount = errCount + 1
0457 ENDIF
0458 ENDIF
0459
8233d0ceb9 Jean*0460 IF ( useShelfIce .OR. topoFile.NE.' ' ) THEN
0461
0462
0463
0464
0465 IF ( GM_taper_scheme.EQ.'ldd97' .OR.
0466 & GM_taper_scheme.EQ.'fm07' ) THEN
0467 iL = ILNBLNK(GM_taper_scheme)
0468 WRITE(msgBuf,'(3A)') 'GMREDI_CHECK: GM_taper_scheme "',
0469 & GM_taper_scheme(1:iL), '" not yet fixed for dry cell @ top'
0470 CALL PRINT_ERROR( msgBuf, myThid )
0471 errCount = errCount + 1
0472 ENDIF
0473 IF ( GM_useSubMeso ) THEN
0474 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useSubMeso',
0475 & ' not yet fixed for dry cell @ top'
0476 CALL PRINT_ERROR( msgBuf, myThid )
0477 errCount = errCount + 1
0478 ENDIF
0479 IF ( GM_useBatesK3d ) THEN
0480 WRITE(msgBuf,'(2A,I3)') '** WARNING ** GMREDI_CHECK: ',
0481 & 'GM_useBatesK3d potentially unsafe with dry cell @ top'
0482 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0483 & SQUEEZE_RIGHT, myThid )
0484 ENDIF
0485 IF ( GM_Visbeck_alpha.NE.zeroRL ) THEN
0486 WRITE(msgBuf,'(2A,I3)') '** Warning ** GMREDI_CHECK: ',
0487 & 'Visbeck scheme not fully tested with dry cell @ top'
0488 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0489 & SQUEEZE_RIGHT, myThid )
0490 ENDIF
0491 IF ( GM_useLeithQG ) THEN
0492 WRITE(msgBuf,'(2A,I3)') '** Warning ** GMREDI_CHECK: ',
0493 & 'GM_useLeithQG not fully tested with dry cell @ top'
0494 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0495 & SQUEEZE_RIGHT, myThid )
0496 ENDIF
0497
0498 ENDIF
0499
dfc9956354 Jean*0500 #ifdef ALLOW_PTRACERS
0501 IF ( GM_AdvForm .AND. .NOT.GM_AdvSeparate
0502 & .AND. usePTRACERS ) THEN
0503 redFlag = .FALSE.
0504 DO iTr=1,PTRACERS_numInUse
0505 IF ( .NOT.PTRACERS_useGMRedi(iTr) ) THEN
0506 redFlag = .TRUE.
e25acdb1f2 Jean*0507 WRITE(msgBuf,'(2A,I3,A,L5)') 'GMREDI_CHECK:',
dfc9956354 Jean*0508 & ' pTracers_useGMRedi(',iTr,' )=', PTRACERS_useGMRedi(iTr)
0509 CALL PRINT_ERROR( msgBuf, myThid )
0510 ENDIF
0511 ENDDO
0512 IF ( redFlag ) THEN
e25acdb1f2 Jean*0513 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK:',
dfc9956354 Jean*0514 & ' but GM Advective Form applies to all tracers !'
0515 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0516 errCount = errCount + 1
dfc9956354 Jean*0517 ENDIF
0518 ENDIF
0519 #endif /* ALLOW_PTRACERS */
0520
725ef7d279 Jean*0521 #ifdef ALLOW_GENERIC_ADVDIFF
c1c6d46ee2 Jean*0522
b8a35fd4d2 Jean*0523 IF ( GM_AdvForm .AND. .NOT.GM_AdvSeparate
c1c6d46ee2 Jean*0524 & .AND. GM_Visbeck_alpha.NE.0.
37549204de Jean*0525 & .AND. useMultiDimAdvec ) THEN
c1c6d46ee2 Jean*0526
e25acdb1f2 Jean*0527
c1c6d46ee2 Jean*0528
0529
0530
37549204de Jean*0531 GAD_OlMinSize(2) = MAX( GAD_OlMinSize(2), 1)
0532 WRITE(msgBuf,'(A,9I3)')
0533 & 'GMREDI_CHECK: GAD_OlMinSize=', GAD_OlMinSize
0534 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0535 & SQUEEZE_RIGHT , myThid )
b8a35fd4d2 Jean*0536 ENDIF
725ef7d279 Jean*0537 #endif /* ALLOW_GENERIC_ADVDIFF */
b8a35fd4d2 Jean*0538
e25acdb1f2 Jean*0539 IF ( errCount.GE.1 ) THEN
0540 WRITE(msgBuf,'(A,I3,A)')
0541 & 'GMREDI_CHECK: detected', errCount,' fatal error(s)'
0542 CALL PRINT_ERROR( msgBuf, myThid )
0543 CALL ALL_PROC_DIE( 0 )
0544 STOP 'ABNORMAL END: S/R GMREDI_CHECK'
0545 ENDIF
b8a35fd4d2 Jean*0546 _END_MASTER(myThid)
0547
0548 #endif /* ALLOW_GMREDI */
42c525bfb4 Alis*0549 RETURN
0550 END