Back to home page

MITgcm

 
 

    


File indexing completed on 2025-11-07 06:08:36 UTC

view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
2a09713997 Patr*0001 #include "GMREDI_OPTIONS.h"
f5509be190 Mart*0002 #ifdef ALLOW_CTRL
                0003 # include "CTRL_OPTIONS.h"
                0004 #endif
2a09713997 Patr*0005 
f7ab21c55e Jean*0006 CBOP
                0007 C     !ROUTINE: GMREDI_READPARMS
                0008 C     !INTERFACE:
2a09713997 Patr*0009       SUBROUTINE GMREDI_READPARMS( myThid )
f7ab21c55e Jean*0010 
                0011 C     !DESCRIPTION: \bv
                0012 C     *==========================================================*
                0013 C     | SUBROUTINE GMREDI_READPARMS
                0014 C     | o Routine to initialize GM/Redi variables and constants.
                0015 C     *==========================================================*
                0016 C     | Initialize GM/Redi parameters, read in data.gmredi
                0017 C     *==========================================================*
                0018 C     \ev
                0019 
                0020 C     !USES:
2a09713997 Patr*0021       IMPLICIT NONE
                0022 
                0023 C     === Global variables ===
                0024 #include "SIZE.h"
                0025 #include "EEPARAMS.h"
                0026 #include "PARAMS.h"
                0027 #include "GRID.h"
                0028 #include "GMREDI.h"
                0029 
f7ab21c55e Jean*0030 C     !INPUT/OUTPUT PARAMETERS:
2a09713997 Patr*0031 C     === Routine arguments ===
                0032       INTEGER myThid
                0033 
                0034 #ifdef ALLOW_GMREDI
f7ab21c55e Jean*0035 C     !LOCAL VARIABLES:
                0036 C     === Local variables ===
f6de204bec Jean*0037 C     msgBuf     :: Informational/error message buffer
                0038 C     iUnit      :: Work variable for IO unit number
94a8024bbe Jean*0039 C     nRetired   :: Counter used to trap "retired" parameters in namelist.
                0040 C     GM_isopycK3dFile      :: input file for 3.D GM_isopycK
                0041 C     GM_background_K3dFile :: input file for 3.D GM_background_K
f7ab21c55e Jean*0042       CHARACTER*(MAX_LEN_MBUF) msgBuf
                0043       INTEGER iUnit
94a8024bbe Jean*0044       INTEGER nRetired
                0045       CHARACTER*(MAX_LEN_FNAM) GM_isopycK3dFile
                0046       CHARACTER*(MAX_LEN_FNAM) GM_background_K3dFile
f7ab21c55e Jean*0047 CEOP
2a09713997 Patr*0048 
                0049 C--   GM/Redi parameter
f6de204bec Jean*0050 C     GM_Small_Number  :: epsilon used in computing the slope
9b8b001637 Jean*0051 C     GM_slopeSqCutoff :: slope^2 cut-off value
2a09713997 Patr*0052       NAMELIST /GM_PARM01/
ed71a1a16f Jean*0053      &          GM_AdvForm, GM_AdvSeparate,
43af9695da Gael*0054      &          GM_InMomAsStress,
f42e64b3e7 Jean*0055      &          GM_isopycK,
9b8b001637 Jean*0056      &          GM_background_K,
f6de204bec Jean*0057      &          GM_iso2dFile, GM_iso1dFile,
                0058      &          GM_bol2dFile, GM_bol1dFile,
94a8024bbe Jean*0059      &          GM_K3dRediFile, GM_K3dGMFile,
                0060      &          GM_background_K3dFile, GM_isopycK3dFile,
2a09713997 Patr*0061      &          GM_taper_scheme,
                0062      &          GM_maxSlope,
f42e64b3e7 Jean*0063      &          GM_Kmin_horiz,
bd3f833a36 Jean*0064      &          GM_Small_Number, GM_slopeSqCutoff,
05118ac017 Jean*0065      &          GM_Scrit, GM_Sd,
f5509be190 Mart*0066      &          GM_isoFac_calcK,
05118ac017 Jean*0067      &          GM_facTrL2dz, GM_facTrL2ML, GM_maxTransLay,
                0068      &          GM_UseBVP, GM_BVP_cMin, GM_BVP_ModeNumber,
                0069      &          GM_useSubMeso, subMeso_Ceff, subMeso_invTau,
                0070      &          subMeso_LfMin, subMeso_Lmax,
a8da45f13c Jean*0071      &          GM_Visbeck_alpha, GM_Visbeck_length,
2a09713997 Patr*0072      &          GM_Visbeck_depth,
a8da45f13c Jean*0073      &          GM_Visbeck_minDepth, GM_Visbeck_maxSlope,
                0074      &          GM_Visbeck_minVal_K, GM_Visbeck_maxVal_K,
05118ac017 Jean*0075      &          GM_useBatesK3d, GM_Bates_smooth, GM_Bates_use_constK,
                0076      &          GM_Bates_beta_eq_0, GM_Bates_ThickSheet,
                0077      &          GM_Bates_surfK, GM_Bates_constRedi,
                0078      &          GM_Bates_gamma, GM_Bates_b1,
                0079      &          GM_Bates_EadyMinDepth, GM_Bates_EadyMaxDepth,
                0080      &          GM_Bates_Lambda, GM_Bates_smallK, GM_Bates_maxK,
                0081      &          GM_Bates_constK, GM_Bates_maxC,
                0082      &          GM_Bates_Rmax, GM_Bates_Rmin,
                0083      &          GM_Bates_minCori, GM_Bates_minN2,
                0084      &          GM_Bates_surfMinDepth, GM_Bates_vecFreq,
                0085      &          GM_Bates_minRenorm, GM_Bates_maxRenorm,
                0086      &          GM_useLeithQG,
a4576c7cde Juli*0087      &          GM_useGEOM,
                0088      &          GEOM_lmbda, GEOM_alpha,
                0089      &          GEOM_ini_EKE, GEOM_diffKh_EKE,
                0090      &          GEOM_vert_struc,
                0091      &          GEOM_vert_struc_min, GEOM_vert_struc_max,
                0092      &          GEOM_minval_K, GEOM_maxval_K,
05118ac017 Jean*0093      &          GM_MNC
2a09713997 Patr*0094 
ae4c29e0db Jean*0095 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0096 
                0097       IF ( .NOT.useGMRedi ) THEN
                0098 C-    pkg GMREDI is not used
                0099         _BEGIN_MASTER(myThid)
                0100 C-    Track pkg activation status:
                0101 C     print a (weak) warning if data.gmredi is found
                0102          CALL PACKAGES_UNUSED_MSG( 'useGMRedi', ' ', ' ' )
                0103         _END_MASTER(myThid)
                0104         RETURN
                0105       ENDIF
                0106 
9b8b001637 Jean*0107       _BEGIN_MASTER(myThid)
                0108 
2a09713997 Patr*0109 C--   Default values GM/Redi
f42e64b3e7 Jean*0110       GM_AdvForm          = .FALSE.
ed71a1a16f Jean*0111       GM_AdvSeparate      = .FALSE.
43af9695da Gael*0112       GM_InMomAsStress    = .FALSE.
f42e64b3e7 Jean*0113       GM_isopycK          = -999.
f7ab21c55e Jean*0114       GM_background_K     = 0. _d 0
a8da45f13c Jean*0115       GM_maxSlope         = 1. _d -2
f7ab21c55e Jean*0116       GM_Kmin_horiz       = 0. _d 0
37d7346fe2 Jean*0117       GM_Small_Number     = 1. _d -20
e2d47178e0 Ed H*0118       GM_slopeSqCutoff    = 1. _d +48
2a09713997 Patr*0119       GM_taper_scheme     = ' '
86e2f7bc1f Jean*0120       GM_facTrL2dz        = 1.
                0121       GM_facTrL2ML        = 5.
                0122       GM_maxTransLay      = 500.
f7ab21c55e Jean*0123       GM_Scrit            = 0.004 _d 0
                0124       GM_Sd               = 0.001 _d 0
f5509be190 Mart*0125       GM_isoFac_calcK     = 1. _d 0
e2d47178e0 Ed H*0126       GM_MNC              = useMNC
f6de204bec Jean*0127       GM_iso2dFile        = ' '
                0128       GM_iso1dFile        = ' '
                0129       GM_bol2dFile        = ' '
                0130       GM_bol1dFile        = ' '
94a8024bbe Jean*0131       GM_K3dRediFile      = ' '
                0132       GM_K3dGMFile        = ' '
f59d76b0dd Ed D*0133       GM_useLeithQG       = .FALSE.
9b8b001637 Jean*0134 
2a09713997 Patr*0135 C--   Default values GM/Redi I/O control
e2d47178e0 Ed H*0136 c     GM_dumpFreq         = -1.
2a09713997 Patr*0137 
d0035fac68 Jean*0138 C--   Default values BVP
                0139       GM_UseBVP           = .FALSE.
                0140       GM_BVP_ModeNumber   = 1
                0141       GM_BVP_cMin         = 1. _d -1
                0142 
050b4366e6 Jean*0143 C--   Default values Sub-Meso (corresponding tau = 5.8 days):
                0144       GM_useSubMeso = .FALSE.
                0145       subMeso_invTau =  2.0 _d -6
                0146       subMeso_LfMin  =  1.0 _d +3
                0147       subMeso_Ceff   =  7.0 _d -2
                0148       subMeso_Lmax   = 110. _d +3
d0035fac68 Jean*0149 
05118ac017 Jean*0150 C--   Default values Visbeck
                0151       GM_Visbeck_alpha    =    0. _d 0
                0152       GM_Visbeck_length   =  200. _d 3
                0153       GM_Visbeck_depth    = 1000. _d 0
                0154       GM_Visbeck_minDepth =    0. _d 0
                0155       GM_Visbeck_maxSlope = UNSET_RL
                0156       GM_Visbeck_minVal_K =    0. _d 0
                0157       GM_Visbeck_maxVal_K = 2500. _d 0
                0158 
a4576c7cde Juli*0159 C--   Default values GEOMETRIC
                0160       GM_useGEOM              = .FALSE.
                0161       GEOM_lmbda              = 2. _d -7
                0162       GEOM_alpha              = 0. _d  0
                0163       GEOM_ini_EKE            = 1. _d -3
                0164       GEOM_diffKh_EKE         = 1. _d +3
                0165       GEOM_vert_struc         = .FALSE.
                0166       GEOM_vert_struc_min     = 1. _d -1
                0167       GEOM_vert_struc_max     = 1. _d 0
                0168       GEOM_minVal_K           = 0. _d 0
                0169       GEOM_maxVal_K           = 2500. _d 0
                0170 
05118ac017 Jean*0171 C--   Default values for BatesK3d
                0172       GM_useBatesK3d     = .FALSE.
                0173       GM_Bates_smooth    = .TRUE.
                0174       GM_Bates_use_constK= .FALSE.
                0175       GM_Bates_beta_eq_0 = .TRUE.
                0176       GM_Bates_ThickSheet= .FALSE.
                0177       GM_Bates_surfK     = .FALSE.
                0178       GM_Bates_constRedi = .FALSE.
                0179       GM_Bates_gamma     = 1.0
                0180       GM_Bates_b1        = 4.0
                0181       GM_Bates_EadyMinDepth = 50.0
4578baf364 Jean*0182       GM_Bates_EadyMaxDepth = 1000.
05118ac017 Jean*0183       GM_Bates_Lambda    = 1.0
4578baf364 Jean*0184       GM_Bates_smallK    = 100.
                0185       GM_Bates_maxK      = 20. _d 3
                0186       GM_Bates_constK    = 1000.
                0187       GM_Bates_maxC      = 0.15 _d 0
                0188       GM_Bates_Rmax      = 75. _d 3
                0189       GM_Bates_Rmin      = 30. _d 3
05118ac017 Jean*0190       GM_Bates_minCori   = zeroRL
4578baf364 Jean*0191       GM_Bates_minN2     = 1. _d -8
                0192       GM_Bates_surfMinDepth = 100.
                0193       GM_Bates_vecFreq   = 2592000.
05118ac017 Jean*0194       GM_Bates_minRenorm = oneRL
4578baf364 Jean*0195       GM_Bates_maxRenorm = 20.
ae4c29e0db Jean*0196 
94a8024bbe Jean*0197 C--   Initialise retired parameters to unlikely value
                0198       nRetired = 0
                0199       GM_background_K3dFile = ' '
                0200       GM_isopycK3dFile    = ' '
                0201 
e2d47178e0 Ed H*0202       WRITE(msgBuf,'(A)') ' GM_READPARMS: opening data.gmredi'
                0203       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0204      &                    SQUEEZE_RIGHT , 1)
                0205       CALL OPEN_COPY_DATA_FILE(
                0206      I                          'data.gmredi', 'GM_READPARMS',
                0207      O                          iUnit,
                0208      I                          myThid )
2a09713997 Patr*0209 
e2d47178e0 Ed H*0210 C     Read parameters from open data file
                0211       READ(UNIT=iUnit,NML=GM_PARM01)
b8a35fd4d2 Jean*0212       WRITE(msgBuf,'(A)') ' GM_READPARMS: finished reading data.gmredi'
                0213       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0214      &                    SQUEEZE_RIGHT , 1)
e2d47178e0 Ed H*0215 C     Close the open data file
7a77863887 Mart*0216 #ifdef SINGLE_DISK_IO
b8a35fd4d2 Jean*0217       CLOSE(iUnit)
7a77863887 Mart*0218 #else
                0219       CLOSE(iUnit,STATUS='DELETE')
                0220 #endif /* SINGLE_DISK_IO */
b8a35fd4d2 Jean*0221 
f42e64b3e7 Jean*0222 C     Default value for GM_isopycK is equal to GM_background_K :
                0223       IF (GM_isopycK.EQ.-999.) GM_isopycK = GM_background_K
                0224 
a8da45f13c Jean*0225 C     Default value for GM_Visbeck_maxSlope is equal to GM_maxSlope :
                0226       IF ( GM_Visbeck_maxSlope .EQ. UNSET_RL )
                0227      &     GM_Visbeck_maxSlope = GM_maxSlope
                0228 
2a09713997 Patr*0229 C     Some constants
f5509be190 Mart*0230       GM_rMaxSlope = 0. _d 0
                0231       IF (GM_maxSlope.NE.zeroRL) GM_rMaxSlope = 1. _d 0 / GM_maxSlope
                0232 
                0233 C     Set (or reset) some switches:
                0234       IF ( GM_useLeithQG .AND. viscC2LeithQG.EQ.zeroRL ) THEN
                0235         WRITE(msgBuf,'(2A,I3)') '** WARNING ** GMREDI_READPARMS: ',
                0236      &   'switch OFF GM_useLeithQG since viscC2LeithQG = 0'
                0237         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0238      &                      SQUEEZE_RIGHT, myThid )
                0239         GM_useLeithQG = .FALSE.
                0240       ENDIF
2a09713997 Patr*0241 
f5509be190 Mart*0242       IF ( GM_AdvForm ) THEN
                0243         GM_skewflx = 0. _d 0
                0244         IF ( GM_K3dRediFile .NE. ' ' ) THEN
                0245           GM_ExtraDiag = .TRUE.
                0246         ELSE
                0247           GM_ExtraDiag = GM_isopycK.NE.zeroRL
                0248         ENDIF
                0249 #ifdef ALLOW_KAPREDI_CONTROL
                0250         IF ( useCTRL ) GM_ExtraDiag = .TRUE.
                0251 #endif
f42e64b3e7 Jean*0252       ELSE
f5509be190 Mart*0253         GM_skewflx = 1. _d 0
                0254         IF ( GM_K3dRediFile .NE. ' ' .OR.
                0255      &       GM_K3dGMFile   .NE. ' ' ) THEN
                0256           GM_ExtraDiag = GM_K3dRediFile .NE. GM_K3dGMFile
                0257         ELSEIF ( GM_iso2dFile .NE. GM_bol2dFile .OR.
                0258      &           GM_iso1dFile .NE. GM_bol1dFile ) THEN
                0259           GM_ExtraDiag = .TRUE.
                0260         ELSE
                0261           GM_ExtraDiag = GM_isopycK.NE.GM_background_K
                0262         ENDIF
                0263 #if (defined ALLOW_KAPREDI_CONTROL || defined ALLOW_KAPGM_CONTROL )
                0264         IF ( useCTRL ) GM_ExtraDiag = .TRUE.
                0265 #endif
a4576c7cde Juli*0266         GM_ExtraDiag = GM_ExtraDiag .OR. GM_useGEOM
f42e64b3e7 Jean*0267       ENDIF
f5509be190 Mart*0268       IF ( GM_isoFac_calcK .NE. GM_skewflx .AND.
                0269      &     ( GM_Visbeck_alpha.NE.zeroRL .OR.
                0270      &       GM_useBatesK3d .OR. GM_useLeithQG ) ) THEN
f6de204bec Jean*0271         GM_ExtraDiag = .TRUE.
                0272       ENDIF
f42e64b3e7 Jean*0273 
d0035fac68 Jean*0274       IF (GM_UseBVP) THEN
                0275         GM_BVP_rModeNumber = 1. _d 0/DBLE(GM_BVP_ModeNumber)
                0276         GM_BVP_cHat2Min = GM_BVP_cMin**2*rhoConst/gravity
                0277       ENDIF
                0278 
e2d47178e0 Ed H*0279 C     Make sure that we locally honor the global MNC on/off flag
                0280       GM_MNC = GM_MNC .AND. useMNC
                0281 #ifndef ALLOW_MNC
                0282 C     Fix to avoid running without getting any output:
                0283       GM_MNC = .FALSE.
                0284 #endif
                0285       GM_MDSIO = (.NOT. GM_MNC) .OR. outputTypesInclusive
                0286 
94a8024bbe Jean*0287 C     Check for retired parameters
                0288       IF ( GM_background_K3dFile .NE. ' ' ) THEN
                0289         nRetired = nRetired+1
                0290         WRITE(msgBuf,'(2A)') 'S/R GMREDI_READPARMS: ',
                0291      &    '"GM_background_K3dFile" has been replaced by "GM_K3dGMFile"'
                0292         CALL PRINT_ERROR( msgBuf, myThid )
                0293         WRITE(msgBuf,'(2A)') 'S/R GMREDI_READPARMS: ',
                0294      &    'and is no longer allowed in file "data.gmredi"'
                0295         CALL PRINT_ERROR( msgBuf, myThid )
                0296       ENDIF
                0297       IF ( GM_isopycK3dFile .NE. ' ' ) THEN
                0298         nRetired = nRetired+1
                0299         WRITE(msgBuf,'(2A)') 'S/R GMREDI_READPARMS: ',
                0300      &    '"GM_isopycK3dFile" has been replaced by "GM_K3dRediFile"'
                0301         CALL PRINT_ERROR( msgBuf, myThid )
                0302         WRITE(msgBuf,'(2A)') 'S/R GMREDI_READPARMS: ',
                0303      &    'and is no longer allowed in file "data.gmredi"'
                0304         CALL PRINT_ERROR( msgBuf, myThid )
                0305       ENDIF
                0306 
                0307       IF ( nRetired .GT. 0 ) THEN
                0308         WRITE(msgBuf,'(2A)') 'S/R GMREDI_READPARMS: ',
                0309      &              'Error reading parameter file "data.gmredi":'
                0310         CALL PRINT_ERROR( msgBuf, myThid )
                0311         WRITE(msgBuf,'(I4,A)') nRetired,
                0312      &      ' out of date parameters were found in the namelist'
                0313         CALL PRINT_ERROR( msgBuf, myThid )
                0314         CALL ALL_PROC_DIE( 0 )
                0315         STOP 'ABNORMAL END: S/R GMREDI_READPARMS'
                0316       ENDIF
                0317 
2a09713997 Patr*0318       _END_MASTER(myThid)
                0319 
                0320 C--   Everyone else must wait for the parameters to be loaded
                0321       _BARRIER
                0322 
                0323 #endif /* ALLOW_GMREDI */
                0324 
f42e64b3e7 Jean*0325       RETURN
                0326       END