File indexing completed on 2025-11-15 13:24:05 UTC
view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
887dcb13f8 Patr*0001 #include "KPP_OPTIONS.h"
0002
0003 SUBROUTINE KPP_CHECK( myThid )
3560db2fad Jean*0004
0005
0006
0007
0008
0009
0010
887dcb13f8 Patr*0011 IMPLICIT NONE
0012
0013
0014 #include "SIZE.h"
0015 #include "EEPARAMS.h"
0016 #include "PARAMS.h"
77317392b9 Jean*0017 #include "KPP_PARAMS.h"
887dcb13f8 Patr*0018
0019
3560db2fad Jean*0020
887dcb13f8 Patr*0021 INTEGER myThid
0022
0023 #ifdef ALLOW_KPP
0024
3560db2fad Jean*0025
887dcb13f8 Patr*0026 CHARACTER*(MAX_LEN_MBUF) msgBuf
0027
3560db2fad Jean*0028 _BEGIN_MASTER(myThid)
0029
887dcb13f8 Patr*0030 WRITE(msgBuf,'(A)') 'KPP_CHECK: #define ALLOW_KPP'
0031 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
ce6d0964b8 Jean*0032 & SQUEEZE_RIGHT, myThid )
0033
0034
0035 CALL WRITE_0D_RL( kpp_freq, INDEX_NONE, ' kpp_freq =',
0036 & ' /* frequency of KPP calculation */')
0037
0038 CALL WRITE_0D_L( KPP_ghatUseTotalDiffus, INDEX_NONE,
0039 & 'KPP_ghatUseTotalDiffus=',
0040 & ' /* non-local term fct of total diffus */')
0041 CALL WRITE_0D_L( KPPuseDoubleDiff, INDEX_NONE,
0042 & 'KPPuseDoubleDiff =', ' /* include double diffusive contrib */')
00c7090dc0 Mart*0043 CALL WRITE_0D_L( KPPuseSWfrac3D, INDEX_NONE,
0044 & 'KPPuseSWfrac3D =', ' /* for light attenuation use SWfrac3D */')
ce6d0964b8 Jean*0045 CALL WRITE_0D_L( LimitHblStable, INDEX_NONE,
0046 & 'LimitHblStable =', ' /* limits depth of hbl if stable cond.*/')
0047 CALL WRITE_0D_RL( minKPPhbl, INDEX_NONE, ' minKPPhbl =',
0048 & ' /* minimum KPPhbl value [m] */')
0049 CALL WRITE_0D_RL( epsln, INDEX_NONE, ' epsln =',
0050 & ' /* constant [-] */')
0051 CALL WRITE_0D_RL( phepsi, INDEX_NONE, ' phepsi =',
0052 & ' /* constant [-] */')
0053 CALL WRITE_0D_RL( epsilon, INDEX_NONE, ' epsilon =',
0054 & ' /* constant [-] */')
0055 CALL WRITE_0D_RL( vonk, INDEX_NONE, ' vonk =',
0056 & ' /* Von Karmans constant [-] */')
0057 CALL WRITE_0D_RL( dB_dz, INDEX_NONE, ' dB_dz =',
0058 & ' /* maximum N^2 in mixed layer [s^-2] */')
0059 CALL WRITE_0D_RL( conc1, INDEX_NONE, ' conc1 =',
0060 & ' /* scalar constant [-] */')
0061 CALL WRITE_0D_RL( conam, INDEX_NONE, ' conam =',
0062 & ' /* scalar constant [-] */')
0063 CALL WRITE_0D_RL( concm, INDEX_NONE, ' concm =',
0064 & ' /* scalar constant [-] */')
0065 CALL WRITE_0D_RL( conc2, INDEX_NONE, ' conc2 =',
0066 & ' /* scalar constant [-] */')
0067 CALL WRITE_0D_RL( conas, INDEX_NONE, ' conas =',
0068 & ' /* scalar constant [-] */')
0069 CALL WRITE_0D_RL( concs, INDEX_NONE, ' concs =',
0070 & ' /* scalar constant [-] */')
0071 CALL WRITE_0D_RL( conc3, INDEX_NONE, ' conc3 =',
0072 & ' /* scalar constant [-] */')
0073 CALL WRITE_0D_RL( zetam, INDEX_NONE, ' zetam =',
0074 & ' /* scalar constant [-] */')
0075 CALL WRITE_0D_RL( zetas, INDEX_NONE, ' zetas =',
0076 & ' /* scalar constant [-] */')
0077 CALL WRITE_0D_RL( Ricr, INDEX_NONE, ' Ricr =',
0078 & ' /* critical bulk Richardson Number [-] */')
0079 CALL WRITE_0D_RL( cekman, INDEX_NONE, ' cekman =',
0080 & ' /* coeff for Ekman depth [-] */')
0081 CALL WRITE_0D_RL( cmonob, INDEX_NONE, ' cmonob =',
0082 & ' /* coeff for Monin-Obukhov depth [-] */')
0083 CALL WRITE_0D_RL( concv, INDEX_NONE, ' concv =',
0084 & ' /* buoyancy freq ratio [-] */')
0085 CALL WRITE_0D_RL( hbf, INDEX_NONE, ' hbf =',
0086 & ' /* solar radiation depth ratio [-] */')
0087 CALL WRITE_0D_RL( zmin, INDEX_NONE, ' zmin =',
0088 & ' /* minimum for zehat in table [m3/s3] */')
0089 CALL WRITE_0D_RL( zmax, INDEX_NONE, ' zmax =',
0090 & ' /* maximum for zehat in table [m3/s3] */')
0091 CALL WRITE_0D_RL( umin, INDEX_NONE, ' umin =',
0092 & ' /* minimum for ustar in table [m/s] */')
0093 CALL WRITE_0D_RL( umax, INDEX_NONE, ' umax =',
0094 & ' /* maximum for ustar in table [m/s] */')
0095 CALL WRITE_0D_I( num_v_smooth_Ri, INDEX_NONE,
0096 & 'num_v_smooth_Ri =', ' /* number of vertical smoothing */')
0097 CALL WRITE_0D_RL( Riinfty, INDEX_NONE, ' Riinfty =',
0098 & ' /* shear instability Ri number limit [-] */')
0099 CALL WRITE_0D_RL( BVSQcon, INDEX_NONE, ' BVSQcon =',
0100 & ' /* Brunt-Vaisala squared (=N^2) [s^-2] */')
0101 CALL WRITE_0D_RL( difm0, INDEX_NONE, ' difm0 =',
0102 & ' /* max viscosity from shear instab. [m2/s] */')
0103 CALL WRITE_0D_RL( difs0, INDEX_NONE, ' difs0 =',
0104 & ' /* max diffusiv. from shear instab. [m2/s] */')
0105 CALL WRITE_0D_RL( dift0, INDEX_NONE, ' dift0 =',
0106 & ' /* max diffusiv. from shear instab. [m2/s] */')
0107 CALL WRITE_0D_RL( difmcon, INDEX_NONE, ' difmcon =',
0108 & ' /* convective viscosity [m2/s] */')
0109 CALL WRITE_0D_RL( difscon, INDEX_NONE, ' difscon =',
0110 & ' /* convective diffusiv. [m2/s] */')
0111 CALL WRITE_0D_RL( diftcon, INDEX_NONE, ' diftcon =',
0112 & ' /* convective diffusiv. [m2/s] */')
0113 CALL WRITE_0D_RL( Rrho0, INDEX_NONE, ' Rrho0 =',
0114 & ' /* double diffusion density ratio [-] */')
0115 CALL WRITE_0D_RL( dsfmax, INDEX_NONE, ' dsfmax =',
0116 & ' /* max diffusiv. for salt fingering [m2/s] */')
0117 CALL WRITE_0D_RL( cstar, INDEX_NONE, ' cstar =',
0118 & ' /* coeff for non-locak transport [-] */')
0119
0120 CALL WRITE_0D_L( KPPwriteState, INDEX_NONE,
0121 & 'KPPwriteState =', ' /* write KPP fields to file */')
0122 CALL WRITE_0D_RL( kpp_dumpFreq, INDEX_NONE, ' kpp_dumpFreq =',
0123 & ' /* dump freq of KPP output */')
0124
0125
887dcb13f8 Patr*0126
0127
0128 IF (cAdjFreq.NE.0. .OR.
0129 & ivdc_kappa.NE.0.) THEN
0130 WRITE(msgBuf,'(A)') 'Some form of convection has been enabled'
77317392b9 Jean*0131 CALL PRINT_ERROR( msgBuf , myThid )
887dcb13f8 Patr*0132 STOP 'ABNORMAL END: S/R KPP_CHECK'
0133 ENDIF
0134
0135
0136 IF (.NOT.implicitDiffusion ) THEN
0137 WRITE(msgBuf,'(A)') 'KPP needs implicitDiffusion to be enabled'
77317392b9 Jean*0138 CALL PRINT_ERROR( msgBuf , myThid )
887dcb13f8 Patr*0139 STOP 'ABNORMAL END: S/R KPP_CHECK'
0140 ENDIF
4ede532ddb Step*0141 IF ( .NOT.implicitViscosity .AND. momStepping ) THEN
887dcb13f8 Patr*0142 WRITE(msgBuf,'(A)') 'KPP needs implicitViscosity to be enabled'
77317392b9 Jean*0143 CALL PRINT_ERROR( msgBuf , myThid )
887dcb13f8 Patr*0144 STOP 'ABNORMAL END: S/R KPP_CHECK'
0145 ENDIF
0146
956c0a5824 Patr*0147
0148
0149
0150
f2d9fbc2ed Jean*0151
956c0a5824 Patr*0152
0153
4fa51dc730 Dimi*0154 #if defined(KPP_SMOOTH_SHSQ) || defined(KPP_SMOOTH_DVSQ)
0155 # define KPP_NEEDS_OVERLAP_4
0156 #endif
0157 #if defined(KPP_SMOOTH_DBLOC) || defined(KPP_SMOOTH_DENS)
0158 # define KPP_NEEDS_OVERLAP_4
0159 #endif
0160 #ifdef KPP_NEEDS_OVERLAP_4
8164aa1823 Patr*0161 #ifdef KPP_REACTIVATE_OL4
956c0a5824 Patr*0162 IF (OLx.LT.4 .OR. OLy.LT.4) THEN
0163 WRITE(msgBuf,'(A)') 'KPP horizontal smoothing requires OLx=OLy=4'
77317392b9 Jean*0164 CALL PRINT_ERROR( msgBuf , myThid )
956c0a5824 Patr*0165 STOP 'ABNORMAL END: S/R KPP_CHECK'
0166 ENDIF
8164aa1823 Patr*0167 #endif
956c0a5824 Patr*0168 #endif
0169
e750a5e49e Mart*0170 #ifdef EXCLUDE_KPP_DOUBLEDIFF
0171 IF ( KPPuseDoubleDiff ) THEN
0172 WRITE(msgBuf,'(A,A)') 'KPPuseDoubleDiff=.TRUE. requires ',
0173 & 'that EXCLUDE_KPP_DOUBLEDIFF is undefined'
0174 CALL PRINT_ERROR( msgBuf , myThid )
0175 STOP 'ABNORMAL END: S/R KPP_CHECK'
0176 ENDIF
0177 #endif /* EXCLUDE_KPP_DOUBLEDIFF */
0178
ce6d0964b8 Jean*0179 WRITE(msgBuf,'(A)') ' '
0180 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0181 & SQUEEZE_RIGHT, myThid )
0182
3560db2fad Jean*0183 _END_MASTER(myThid)
887dcb13f8 Patr*0184
3560db2fad Jean*0185 #endif /* ALLOW_KPP */
77317392b9 Jean*0186 RETURN
0187 END