File indexing completed on 2024-02-29 06:10:24 UTC
view on githubraw file Latest commit a4576c7c on 2024-02-28 22:55:11 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
0178
a4576c7cde Juli*0179 #ifdef GM_GEOM_VARIABLE_K
0180 IF ( GM_useGEOM ) THEN
0181 CALL WRITE_0D_RL( GEOM_alpha, INDEX_NONE,
0182 & 'GEOM_alpha =', ' /* GEOM alpha coeff. [-] */')
0183 CALL WRITE_0D_RL( GEOM_lmbda, INDEX_NONE,
0184 & 'GEOM_lmbda =', ' /* GEOM ene diss rate [/s] */')
0185 CALL WRITE_0D_RL( GEOM_diffKh_EKE, INDEX_NONE,
0186 & 'GEOM_diffKh_EKE =', ' /* GEOM Eke diffusion coeff [m2/s] */')
0187 CALL WRITE_0D_L( GEOM_vert_struc, INDEX_NONE,
0188 & 'GEOM_vert_struc =', ' /* GEOM vertical structure function */')
0189 CALL WRITE_0D_RL( GEOM_vert_struc_min, INDEX_NONE,
0190 & 'GEOM_vert_struc_min =', ' /* vert struc min [-] */')
0191 CALL WRITE_0D_RL( GEOM_vert_struc_max, INDEX_NONE,
0192 & 'GEOM_vert_struc_min =', ' /* vert struc min [-] */')
0193 CALL WRITE_0D_RL( GEOM_minVal_K, INDEX_NONE,
0194 & 'GEOM_minVal_K =', ' /* GEOM_K3d lower bound [m2/s] */')
0195 CALL WRITE_0D_RL( GEOM_maxVal_K, INDEX_NONE,
0196 & 'GEOM_maxVal_K =', ' /* GEOM_K3d upper bound [m2/s] */')
0197 IF (usingPcoords) THEN
0198 WRITE(msgBuf,'(3A)') 'GMREDI_CHECK:',
0199 & ' p-coords not yet implemented with GM_useGEOM'
0200 CALL PRINT_ERROR( msgBuf, myThid )
0201 errCount = errCount + 1
0202 ENDIF
0203 ENDIF
0204 #else /* GM_GEOM_VARIABLE_K */
0205
0206 IF ( GM_useGEOM ) THEN
0207 WRITE(msgBuf,'(A)')
0208 & ' GMREDI_CHECK: GEOM variables used in data.gmredi'
0209 CALL PRINT_ERROR( msgBuf, myThid )
0210 WRITE(msgBuf,'(A)')
0211 & ' GMREDI_CHECK: without #define GM_GEOM_VARIABLE_K'
0212 CALL PRINT_ERROR( msgBuf, myThid )
0213 errCount = errCount + 1
0214 ENDIF
0215 #endif /* GM_GEOM_VARIABLE_K */
0216
b8a35fd4d2 Jean*0217 #ifndef GM_BOLUS_ADVEC
0218
7185da56c9 Jean*0219 IF ( GM_AdvForm ) THEN
b8a35fd4d2 Jean*0220 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0221 & 'GMREDI_CHECK: GM Advection form used in data.gmredi'
7185da56c9 Jean*0222 CALL PRINT_ERROR( msgBuf, myThid )
b8a35fd4d2 Jean*0223 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0224 & 'GMREDI_CHECK: without #define GM_BOLUS_ADVEC'
7185da56c9 Jean*0225 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0226 errCount = errCount + 1
2a09713997 Patr*0227 ENDIF
b8a35fd4d2 Jean*0228 #endif
2a09713997 Patr*0229
05118ac017 Jean*0230 #ifdef GM_BATES_K3D
dc60433548 Mich*0231 # ifndef HAVE_LAPACK
05118ac017 Jean*0232
0233 WRITE(msgBuf, '(A)')
0234 & 'Must use CPP option HAVE_LAPACK when using BatesK3d'
0235 CALL PRINT_ERROR( msgBuf, myThid )
0236 errCount = errCount + 1
0237
5a6ef5c2b4 Mich*0238 # endif
05118ac017 Jean*0239 IF ( GM_useBatesK3d ) THEN
0240 CALL WRITE_0D_L( GM_useBatesK3d, INDEX_NONE,
0241 & 'GM_useBatesK3d =',
0242 & ' /* if TRUE => use BatesK3d for GM diffusivity */')
0243 IF ( GM_Bates_use_constK ) THEN
0244 CALL WRITE_0D_L( GM_Bates_use_constK, INDEX_NONE,
0245 & 'GM_Bates_use_constK =',
0246 & ' /* if TRUE => Uses a constant K for'//
c8602656d9 Davi*0247 & ' the eddy transport closure */')
05118ac017 Jean*0248 CALL WRITE_0D_L( GM_Bates_smooth, INDEX_NONE,
0249 & 'GM_Bates_smooth =',
5a6ef5c2b4 Mich*0250 & ' /* if TRUE => Expands in terms of baroclinic modes */')
05118ac017 Jean*0251 IF ( GM_Bates_smooth ) THEN
0252 CALL WRITE_0D_I( GM_Bates_NModes, INDEX_NONE,
0253 & 'GM_Bates_NModes =',
5a6ef5c2b4 Mich*0254 & ' /* Number of modes for expansion */')
0255 ENDIF
0256 ELSE
05118ac017 Jean*0257 CALL WRITE_0D_I( GM_Bates_NModes, INDEX_NONE,
0258 & 'GM_Bates_NModes =',
5a6ef5c2b4 Mich*0259 & ' /* Number of modes for expansion */')
0260 ENDIF
0261 ENDIF
0262
05118ac017 Jean*0263
0d1e4b948d Mich*0264
05118ac017 Jean*0265 IF ( GM_useBatesK3d .AND. .NOT.GM_AdvForm ) THEN
0266 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
0267 & 'GM_useBatesK3d=.TRUE. but GM_AdvForm=.FALSE.'
0d1e4b948d Mich*0268 CALL PRINT_ERROR( msgBuf, myThid )
0269 WRITE(msgBuf,'(A)')
05118ac017 Jean*0270 & 'GMREDI_CHECK: To use BatesK3d set GM_AdvForm=.TRUE.'
0d1e4b948d Mich*0271 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0272 errCount = errCount + 1
4e65b6d0de Mich*0273 ENDIF
a67797e4f0 Jean*0274 IF ( GM_useBatesK3d .AND. deepAtmosphere ) THEN
0275 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useBatesK3d',
0276 & ' not yet fixed for deep geometry (deepAtmosphere=T)'
0277 CALL PRINT_ERROR( msgBuf, myThid )
0278 errCount = errCount + 1
0279 ENDIF
4e65b6d0de Mich*0280
a67797e4f0 Jean*0281 #else /* GM_BATES_K3D */
0282
0283 IF ( GM_useBatesK3d ) THEN
0284 WRITE(msgBuf,'(A)')
0285 & 'GMREDI_CHECK: GM_useBatesK3d is set to True in data.gmredi'
0286 CALL PRINT_ERROR( msgBuf, myThid )
0287 WRITE(msgBuf,'(A)')
0288 & 'GMREDI_CHECK: without #define GM_BATES_K3D'
0289 CALL PRINT_ERROR( msgBuf, myThid )
0290 errCount = errCount + 1
0291 ENDIF
05118ac017 Jean*0292 #endif /* GM_BATES_K3D */
0d1e4b948d Mich*0293
b8a35fd4d2 Jean*0294 #ifndef GM_EXTRA_DIAGONAL
0295
7185da56c9 Jean*0296 IF ( GM_ExtraDiag ) THEN
b8a35fd4d2 Jean*0297 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0298 & 'GMREDI_CHECK: GM_skew_Flux_K & GM_isopycK not equal'
7185da56c9 Jean*0299 CALL PRINT_ERROR( msgBuf, myThid )
b8a35fd4d2 Jean*0300 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0301 & 'GMREDI_CHECK: without #define GM_EXTRA_DIAGONAL'
7185da56c9 Jean*0302 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0303 errCount = errCount + 1
b8a35fd4d2 Jean*0304 ENDIF
2a09713997 Patr*0305 #endif
b8a35fd4d2 Jean*0306
f6de204bec Jean*0307 #ifndef GM_NON_UNITY_DIAGONAL
0308 IF ( GM_iso2dFile .NE. ' ' .OR.
0309 & GM_iso1dFile .NE. ' ' ) THEN
0310 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0311 & 'GMREDI_CHECK: needs #define GM_NON_UNITY_DIAGONAL'
f6de204bec Jean*0312 CALL PRINT_ERROR( msgBuf, myThid )
0313 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0314 & 'GMREDI_CHECK: to use GM_iso2dFile or GM_iso1dFile'
f6de204bec Jean*0315 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0316 errCount = errCount + 1
f6de204bec Jean*0317 ENDIF
f5509be190 Mart*0318 IF ( GM_isoFac_calcK .NE. zeroRL .AND.
0319 & ( GM_Visbeck_alpha.NE.zeroRL .OR.
0320 & GM_useBatesK3d .OR. GM_useLeithQG ) ) THEN
f59d76b0dd Ed D*0321 WRITE(msgBuf,'(A)')
f5509be190 Mart*0322 & 'GMREDI_CHECK: needs #define GM_NON_UNITY_DIAGONAL'
f59d76b0dd Ed D*0323 CALL PRINT_ERROR( msgBuf, myThid )
f5509be190 Mart*0324 IF ( GM_Visbeck_alpha.NE.zeroRL ) THEN
0325 WRITE(msgBuf,'(A)')
0326 & 'GMREDI_CHECK: to use Visbeck computed K'
0327 CALL PRINT_ERROR( msgBuf, myThid )
0328 ENDIF
0329 IF ( GM_useBatesK3d .OR. GM_useLeithQG ) THEN
0330 WRITE(msgBuf,'(A)')
0331 & 'GMREDI_CHECK: to use GM_useBatesK3d or GM_useLeithQG'
0332 CALL PRINT_ERROR( msgBuf, myThid )
0333 ENDIF
e25acdb1f2 Jean*0334 errCount = errCount + 1
f59d76b0dd Ed D*0335 ENDIF
f5509be190 Mart*0336 IF ( errCount .EQ. 0 ) THEN
0337 WRITE(msgBuf,'(2A)') '** WARNING ** GMREDI_CHECK: ',
0338 & '#undef GM_NON_UNITY_DIAGONAL not recommended'
0339 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0340 & SQUEEZE_RIGHT, myThid )
0341 ENDIF
f59d76b0dd Ed D*0342 #endif
0343
0344 #ifndef ALLOW_GM_LEITH_QG
0345 IF ( GM_useLeithQG ) THEN
0346 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0347 & 'GMREDI_CHECK: GM_useLeithQG used in data.gmredi without'
f59d76b0dd Ed D*0348 CALL PRINT_ERROR( msgBuf, myThid )
0349 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0350 & 'GMREDI_CHECK: #define ALLOW_GM_LEITH_QG'
f59d76b0dd Ed D*0351 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0352 errCount = errCount + 1
f59d76b0dd Ed D*0353 ENDIF
f6de204bec Jean*0354 #endif
e25acdb1f2 Jean*0355 IF ( GM_useLeithQG .AND. .NOT.momStepping ) THEN
0356 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
0357 & 'cannot use GM_useLeithQG with "momStepping= FALSE"'
0358 CALL PRINT_ERROR( msgBuf, myThid )
0359 errCount = errCount + 1
0360 ENDIF
f6de204bec Jean*0361
050b4366e6 Jean*0362 #ifdef GM_EXCLUDE_SUBMESO
0363 IF ( GM_useSubMeso ) THEN
e25acdb1f2 Jean*0364 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
050b4366e6 Jean*0365 & 'cannot use Sub-Meso (GM_useSubMeso=T)'
0366 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0367 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
050b4366e6 Jean*0368 & 'when compiled with #define GM_EXCLUDE_SUBMESO'
0369 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0370 errCount = errCount + 1
050b4366e6 Jean*0371 ENDIF
0372 #endif /* GM_EXCLUDE_SUBMESO */
0373
0374 IF ( GM_useSubMeso .AND. .NOT.GM_AdvForm ) THEN
e25acdb1f2 Jean*0375 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: ',
050b4366e6 Jean*0376 & 'Sub-Meso only implemented within GM_AdvForm'
0377 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0378 errCount = errCount + 1
050b4366e6 Jean*0379 ENDIF
0380
879138fdca Jean*0381 IF ( GM_InMomAsStress ) THEN
441caf5dcc Jean*0382 #ifdef ALLOW_EDDYPSI
05118ac017 Jean*0383 IF ( .NOT.GM_useBatesK3d ) THEN
0384 WRITE(msgBuf,'(3A)') 'GMREDI_CHECK: ',
0385 & 'Using GM_InMomAsStress and not GM_useBatesK3d. ',
0386 & 'GM_InMomAsStress=T has only been tested with BatesK3d'
0387 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0388 & SQUEEZE_RIGHT, myThid )
5853335f7f Mich*0389 ENDIF
879138fdca Jean*0390 #else /* ALLOW_EDDYPSI */
0391 WRITE(msgBuf,'(2A)')
e25acdb1f2 Jean*0392 & 'GMREDI_CHECK: need to define ALLOW_EDDYPSI in CPP_OPTIONS.h',
879138fdca Jean*0393 & ' to use GM_InMomAsStress'
0394 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0395 errCount = errCount + 1
879138fdca Jean*0396 #endif /* ALLOW_EDDYPSI */
0397 ENDIF
0398 IF ( GM_InMomAsStress .AND. .NOT.GM_AdvForm ) THEN
0399 WRITE(msgBuf,'(A)')
e25acdb1f2 Jean*0400 & 'GMREDI_CHECK: need GM_AdvForm=T to use GM_InMomAsStress'
879138fdca Jean*0401 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0402 errCount = errCount + 1
879138fdca Jean*0403 ENDIF
441caf5dcc Jean*0404
5b172de0d2 Jean*0405 IF ( usingPcoords ) THEN
0406
0407 IF ( GM_taper_scheme.EQ.'fm07' .OR.
0408 & GM_taper_scheme.EQ.'stableGmAdjTap' ) THEN
0409 iL = ILNBLNK(GM_taper_scheme)
0410 WRITE(msgBuf,'(3A)') 'GMREDI_CHECK: GM_taper_scheme "',
0411 & GM_taper_scheme(1:iL), '" not yet fixed for P-Coordinate'
0412 CALL PRINT_ERROR( msgBuf, myThid )
0413 errCount = errCount + 1
0414 ENDIF
0415 IF ( GM_useBVP ) THEN
0416 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useBVP',
0417 & ' code not yet fixed for P-Coordinate'
0418 CALL PRINT_ERROR( msgBuf, myThid )
0419 errCount = errCount + 1
0420 ENDIF
0421 IF ( GM_Visbeck_alpha.NE.zeroRL ) THEN
0422 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: Visbeck',
0423 & 'scheme not yet fixed for P-Coordinate'
0424 CALL PRINT_ERROR( msgBuf, myThid )
0425 errCount = errCount + 1
0426 ENDIF
0427 IF ( GM_useBatesK3d ) THEN
0428 WRITE(msgBuf,'(2A,I3)') '** WARNING ** GMREDI_CHECK: ',
0429 & 'GM_useBatesK3d potentially unsafe with P-Coordinate'
0430 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0431 & SQUEEZE_RIGHT, myThid )
0432 ENDIF
0433 IF ( GM_useLeithQG ) THEN
0434 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useLeithQG',
0435 & ' code not yet fixed for P-Coordinate'
0436 CALL PRINT_ERROR( msgBuf, myThid )
0437 errCount = errCount + 1
0438 ENDIF
0439 IF ( GM_useSubMeso ) THEN
0440 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useSubMeso',
0441 & ' not yet fixed for P-Coordinate'
0442 CALL PRINT_ERROR( msgBuf, myThid )
0443 errCount = errCount + 1
0444 ENDIF
0445 ENDIF
0446
8233d0ceb9 Jean*0447 IF ( useShelfIce .OR. topoFile.NE.' ' ) THEN
0448
0449
0450
0451
0452 IF ( GM_taper_scheme.EQ.'ldd97' .OR.
0453 & GM_taper_scheme.EQ.'fm07' ) THEN
0454 iL = ILNBLNK(GM_taper_scheme)
0455 WRITE(msgBuf,'(3A)') 'GMREDI_CHECK: GM_taper_scheme "',
0456 & GM_taper_scheme(1:iL), '" not yet fixed for dry cell @ top'
0457 CALL PRINT_ERROR( msgBuf, myThid )
0458 errCount = errCount + 1
0459 ENDIF
0460 IF ( GM_useSubMeso ) THEN
0461 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK: GM_useSubMeso',
0462 & ' not yet fixed for dry cell @ top'
0463 CALL PRINT_ERROR( msgBuf, myThid )
0464 errCount = errCount + 1
0465 ENDIF
0466 IF ( GM_useBatesK3d ) THEN
0467 WRITE(msgBuf,'(2A,I3)') '** WARNING ** GMREDI_CHECK: ',
0468 & 'GM_useBatesK3d potentially unsafe with dry cell @ top'
0469 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0470 & SQUEEZE_RIGHT, myThid )
0471 ENDIF
0472 IF ( GM_Visbeck_alpha.NE.zeroRL ) THEN
0473 WRITE(msgBuf,'(2A,I3)') '** Warning ** GMREDI_CHECK: ',
0474 & 'Visbeck scheme not fully tested with dry cell @ top'
0475 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0476 & SQUEEZE_RIGHT, myThid )
0477 ENDIF
0478 IF ( GM_useLeithQG ) THEN
0479 WRITE(msgBuf,'(2A,I3)') '** Warning ** GMREDI_CHECK: ',
0480 & 'GM_useLeithQG not fully tested with dry cell @ top'
0481 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0482 & SQUEEZE_RIGHT, myThid )
0483 ENDIF
0484
0485 ENDIF
0486
dfc9956354 Jean*0487 #ifdef ALLOW_PTRACERS
0488 IF ( GM_AdvForm .AND. .NOT.GM_AdvSeparate
0489 & .AND. usePTRACERS ) THEN
0490 redFlag = .FALSE.
0491 DO iTr=1,PTRACERS_numInUse
0492 IF ( .NOT.PTRACERS_useGMRedi(iTr) ) THEN
0493 redFlag = .TRUE.
e25acdb1f2 Jean*0494 WRITE(msgBuf,'(2A,I3,A,L5)') 'GMREDI_CHECK:',
dfc9956354 Jean*0495 & ' pTracers_useGMRedi(',iTr,' )=', PTRACERS_useGMRedi(iTr)
0496 CALL PRINT_ERROR( msgBuf, myThid )
0497 ENDIF
0498 ENDDO
0499 IF ( redFlag ) THEN
e25acdb1f2 Jean*0500 WRITE(msgBuf,'(2A)') 'GMREDI_CHECK:',
dfc9956354 Jean*0501 & ' but GM Advective Form applies to all tracers !'
0502 CALL PRINT_ERROR( msgBuf, myThid )
e25acdb1f2 Jean*0503 errCount = errCount + 1
dfc9956354 Jean*0504 ENDIF
0505 ENDIF
0506 #endif /* ALLOW_PTRACERS */
0507
725ef7d279 Jean*0508 #ifdef ALLOW_GENERIC_ADVDIFF
c1c6d46ee2 Jean*0509
b8a35fd4d2 Jean*0510 IF ( GM_AdvForm .AND. .NOT.GM_AdvSeparate
c1c6d46ee2 Jean*0511 & .AND. GM_Visbeck_alpha.NE.0.
37549204de Jean*0512 & .AND. useMultiDimAdvec ) THEN
c1c6d46ee2 Jean*0513
e25acdb1f2 Jean*0514
c1c6d46ee2 Jean*0515
0516
0517
37549204de Jean*0518 GAD_OlMinSize(2) = MAX( GAD_OlMinSize(2), 1)
0519 WRITE(msgBuf,'(A,9I3)')
0520 & 'GMREDI_CHECK: GAD_OlMinSize=', GAD_OlMinSize
0521 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0522 & SQUEEZE_RIGHT , myThid )
b8a35fd4d2 Jean*0523 ENDIF
725ef7d279 Jean*0524 #endif /* ALLOW_GENERIC_ADVDIFF */
b8a35fd4d2 Jean*0525
e25acdb1f2 Jean*0526 IF ( errCount.GE.1 ) THEN
0527 WRITE(msgBuf,'(A,I3,A)')
0528 & 'GMREDI_CHECK: detected', errCount,' fatal error(s)'
0529 CALL PRINT_ERROR( msgBuf, myThid )
0530 CALL ALL_PROC_DIE( 0 )
0531 STOP 'ABNORMAL END: S/R GMREDI_CHECK'
0532 ENDIF
b8a35fd4d2 Jean*0533 _END_MASTER(myThid)
0534
0535 #endif /* ALLOW_GMREDI */
42c525bfb4 Alis*0536 RETURN
0537 END