Back to home page

MITgcm

 
 

    


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

view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
1d478690dc Patr*0001 #include "KPP_OPTIONS.h"
                0002 
c9c3d7103f Ed H*0003 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 CBOP 0
                0005 C     !ROUTINE: KPP_READPARMS
                0006 
                0007 C     !INTERFACE:
1d478690dc Patr*0008       SUBROUTINE KPP_READPARMS( myThid )
                0009 
c9c3d7103f Ed H*0010 C     !DESCRIPTION:
                0011 C     Routine to read in file data.kpp
                0012 
                0013 C     !USES:
                0014       IMPLICIT NONE
1d478690dc Patr*0015 #include "SIZE.h"
                0016 #include "EEPARAMS.h"
                0017 #include "PARAMS.h"
                0018 #include "KPP_PARAMS.h"
                0019 
c9c3d7103f Ed H*0020 C     !INPUT PARAMETERS:
1d478690dc Patr*0021       INTEGER myThid
c9c3d7103f Ed H*0022 CEOP
1d478690dc Patr*0023 
c9c3d7103f Ed H*0024 C     !LOCAL VARIABLES:
1d478690dc Patr*0025 #ifdef ALLOW_KPP
8ce97507dd Jean*0026 C     msgBuf     :: Informational/error message buffer
                0027 C     errIO      :: IO error flag
                0028 C     iUnit      :: Work variable for IO unit number
1d478690dc Patr*0029       CHARACTER*(MAX_LEN_MBUF) msgBuf
cee16b76ae Dimi*0030       INTEGER errIO, iUnit
8ce97507dd Jean*0031 C-    retired parameters:
                0032 C     nRetired   :: Count number of "retired" parameters found in namelist.
                0033       INTEGER nRetired
                0034       LOGICAL KPPmixingMaps
                0035       INTEGER num_v_smooth_BV, num_z_smooth_sh, num_m_smooth_sh
b7411f1a84 Jean*0036       _RL kpp_taveFreq
1d478690dc Patr*0037 
                0038 C--   KPP vertical mixing parameters
                0039       NAMELIST /KPP_PARM01/
                0040      & kpp_freq, kpp_dumpFreq, kpp_taveFreq,
8ce97507dd Jean*0041      & KPPwriteState, KPP_ghatUseTotalDiffus,
00c7090dc0 Mart*0042      & KPPuseDoubleDiff, LimitHblStable, KPPuseSWfrac3D,
1d478690dc Patr*0043      & minKPPhbl,
                0044      & epsln, phepsi, epsilon, vonk, dB_dz,
                0045      & conc1, conam, concm, conc2, zetam,
                0046      & conas, concs, conc3, zetas,
                0047      & Ricr, cekman, cmonob, concv, hbf,
d6f292d8c0 Jean*0048      & zmin, zmax, umin, umax,
8ce97507dd Jean*0049      & num_v_smooth_Ri,
1d478690dc Patr*0050      & Riinfty, BVSQcon, difm0, difs0, dift0,
                0051      & difmcon, difscon, diftcon,
ae4c29e0db Jean*0052      & Rrho0, dsfmax,
8ce97507dd Jean*0053      & cstar,
                0054      & KPPmixingMaps,
                0055      & num_v_smooth_BV, num_z_smooth_sh, num_m_smooth_sh
1d478690dc Patr*0056 
ae4c29e0db Jean*0057 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0058 
                0059       IF ( .NOT.useKPP ) THEN
                0060 C-    pkg KPP is not used
                0061         _BEGIN_MASTER(myThid)
                0062 C-    Track pkg activation status:
                0063 C     print a (weak) warning if data.kpp is found
                0064          CALL PACKAGES_UNUSED_MSG( 'useKPP', ' ', ' ' )
                0065         _END_MASTER(myThid)
                0066         RETURN
                0067       ENDIF
                0068 
1d478690dc Patr*0069       _BEGIN_MASTER(myThid)
                0070 
8ce97507dd Jean*0071       WRITE(msgBuf,'(A)') ' KPP_READPARMS: opening data.kpp'
1d478690dc Patr*0072       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
8ce97507dd Jean*0073      &                    SQUEEZE_RIGHT, myThid )
93abbf4908 Jean*0074       errIO = 0
1d478690dc Patr*0075       CALL OPEN_COPY_DATA_FILE(
8ce97507dd Jean*0076      I                          'data.kpp', 'KPP_READPARMS',
1d478690dc Patr*0077      O                          iUnit,
                0078      I                          myThid )
                0079 
                0080 C--   set default KPP vertical mixing parameters
e750a5e49e Mart*0081       kpp_freq               = deltaTClock
                0082       kpp_dumpFreq           = dumpFreq
                0083       KPPwriteState          = .FALSE.
                0084       KPPuseDoubleDiff       = .FALSE.
                0085       LimitHblStable         = .TRUE.
08300bd1e7 Jean*0086       KPP_ghatUseTotalDiffus = .FALSE.
00c7090dc0 Mart*0087       KPPuseSWfrac3D         = .FALSE.
ee7edf0613 Davi*0088       minKPPhbl = UNSET_RL
1d478690dc Patr*0089 
                0090 C-----------------------------------------------------------------------
                0091 C define some non-dimensional constants and
                0092 C the vertical mixing coefficients in m-k-s units
                0093 C-----------------------------------------------------------------------
d6f292d8c0 Jean*0094 
                0095       epsln   =   1. _d -20
                0096       phepsi  =   1. _d -10
                0097       epsilon =   1. _d -1
                0098       vonk    =   0.4 _d 0
                0099       dB_dz   =   5.2 _d -5
                0100       conc1   =   5. _d 0
                0101       conam   =   1.257 _d 0
                0102       concm   =   8.380 _d 0
                0103       conc2   =  16. _d 0
                0104       zetam   =  -0.2 _d 0
                0105       conas   = -28.86 _d 0
                0106       concs   =  98.96 _d 0
                0107       conc3   =  16. _d 0
                0108       zetas   =  -1. _d 0
                0109 
                0110 C     parameters for subroutine "bldepth"
                0111 
                0112       Ricr    = 0.3 _d 0
                0113       cekman  = 0.7 _d 0
                0114       cmonob  = 1.  _d 0
                0115       concv   = 1.8 _d 0
                0116       hbf     = 1.  _d 0
                0117 
                0118 C     parameters and common arrays for subroutines
                0119 C     "kmixinit" and "wscale"
                0120 
                0121       zmin    = -4. _d -7
                0122       zmax    =  0. _d 0
                0123       umin    =  0. _d 0
                0124       umax    =  4. _d -2
                0125 
                0126 C     parameters for subroutine "Ri_iwmix"
1d478690dc Patr*0127 
                0128       num_v_smooth_Ri = 0
d6f292d8c0 Jean*0129       Riinfty =  0.7 _d 0
                0130       BVSQcon = -0.2 _d -4
1d478690dc Patr*0131 
d6f292d8c0 Jean*0132       difm0   = 5. _d -3
                0133       difs0   = 5. _d -3
                0134       dift0   = 5. _d -3
1d478690dc Patr*0135 
d6f292d8c0 Jean*0136       difmcon = 0.1 _d 0
                0137       difscon = 0.1 _d 0
                0138       diftcon = 0.1 _d 0
1d478690dc Patr*0139 
e750a5e49e Mart*0140 C     parameters for double diffusion routine "KPP_DOUBLEDIFF"
                0141 
                0142       Rrho0   = 1.9 _d 0
                0143       dsfmax  = 10. _d -3
                0144 
1d478690dc Patr*0145 C     parameters for subroutine "blmix"
                0146 
                0147       cstar   = 10.
                0148 
8ce97507dd Jean*0149 C-    Retired parameters: initialised to unlikely value:
                0150       nRetired = 0
                0151       KPPmixingMaps   = .FALSE.
                0152       num_v_smooth_BV = UNSET_I
                0153       num_z_smooth_sh = UNSET_I
                0154       num_m_smooth_sh = UNSET_I
b7411f1a84 Jean*0155       kpp_taveFreq    = UNSET_RL
8ce97507dd Jean*0156 
1d478690dc Patr*0157 C-----------------------------------------------------------------------
                0158 
                0159 C--   Read settings from model parameter file "data.kpp".
8ce97507dd Jean*0160       WRITE(msgBuf,'(A)') ' KPP_READPARMS ; starts to read KPP_PARM01'
                0161       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0162      &                    SQUEEZE_RIGHT, myThid )
                0163       READ( UNIT=iUnit, NML=KPP_PARM01 )
                0164 c     READ( UNIT=iUnit, NML=KPP_PARM01, IOSTAT=errIO )
                0165 c     WRITE(msgBuf,'(A,I6,A)')
                0166 c    & ' KPP_READPARMS ; read KPP_PARM01 (', errIO, ' )'
                0167 c     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0168 c    &                    SQUEEZE_RIGHT, myThid )
1d478690dc Patr*0169       IF ( errIO .LT. 0 ) THEN
                0170        WRITE(msgBuf,'(A)')
8ce97507dd Jean*0171      &  'S/R KPP_READPARMS: Error reading parameter file "data.kpp"'
                0172        CALL PRINT_ERROR( msgBuf, myThid )
1d478690dc Patr*0173        WRITE(msgBuf,'(A)')
8ce97507dd Jean*0174      &  'S/R KPP_READPARMS: Problem in namelist KPP_PARM01'
                0175        CALL PRINT_ERROR( msgBuf, myThid )
                0176        STOP 'ABNORMAL END: S/R KPP_READPARMS'
                0177       ELSE
                0178        WRITE(msgBuf,'(A)') ' KPP_READPARMS ; read KPP_PARM01 : OK'
                0179        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0180      &                     SQUEEZE_RIGHT, myThid )
1d478690dc Patr*0181       ENDIF
                0182 
7a77863887 Mart*0183 #ifdef SINGLE_DISK_IO
1d478690dc Patr*0184       CLOSE(iUnit)
7a77863887 Mart*0185 #else
                0186       CLOSE(iUnit,STATUS='DELETE')
                0187 #endif /* SINGLE_DISK_IO */
1d478690dc Patr*0188 
8ce97507dd Jean*0189       WRITE(msgBuf,'(A)') ' KPP_READPARMS: finished reading data.kpp'
1d478690dc Patr*0190       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
8ce97507dd Jean*0191      &                    SQUEEZE_RIGHT, myThid )
                0192 
b7411f1a84 Jean*0193 C--   Check for retired parameters:
                0194 C     print message and stop when retired parameters were found in namelist
8ce97507dd Jean*0195       IF ( KPPmixingMaps ) THEN
                0196         nRetired = nRetired + 1
                0197         WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "KPPmixingMaps"',
                0198      &                       ' no longer allowed in file "data.kpp"'
                0199         CALL PRINT_ERROR( msgBuf, myThid )
                0200       ENDIF
                0201       IF ( num_v_smooth_BV .NE. UNSET_I ) THEN
                0202         nRetired = nRetired + 1
                0203         WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_v_smooth_BV"',
                0204      &                       ' no longer allowed in file "data.kpp"'
                0205         CALL PRINT_ERROR( msgBuf, myThid )
                0206       ENDIF
                0207       IF ( num_z_smooth_sh .NE. UNSET_I ) THEN
                0208         nRetired = nRetired + 1
                0209         WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_z_smooth_sh"',
                0210      &                       ' no longer allowed in file "data.kpp"'
                0211         CALL PRINT_ERROR( msgBuf, myThid )
                0212       ENDIF
                0213       IF ( num_m_smooth_sh .NE. UNSET_I ) THEN
                0214         nRetired = nRetired + 1
                0215         WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_m_smooth_sh"',
                0216      &                       ' no longer allowed in file "data.kpp"'
                0217         CALL PRINT_ERROR( msgBuf, myThid )
                0218       ENDIF
b7411f1a84 Jean*0219       IF ( kpp_taveFreq .NE. UNSET_RL ) THEN
                0220         WRITE(msgBuf,'(2A)') 'KPP_READPARMS: "kpp_taveFreq"',
                0221      &    ' is no longer allowed in file "data.kpp"'
                0222         CALL PRINT_ERROR( msgBuf, myThid )
                0223         WRITE(msgBuf,'(2A)') 'KPP_READPARMS: ',
                0224      &    ' since "pkg/timeave" has been removed.'
                0225         CALL PRINT_ERROR( msgBuf, myThid )
                0226         nRetired = nRetired + 1
                0227       ENDIF
8ce97507dd Jean*0228 
                0229       IF ( nRetired .GT. 0 ) THEN
                0230        WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: ',
                0231      &  'Error reading file "data.kpp":'
                0232        CALL PRINT_ERROR( msgBuf, myThid )
                0233        WRITE(msgBuf,'(I4,A)') nRetired,
                0234      &      ' out-of-date parameters were found in the namelist(s)'
                0235        CALL PRINT_ERROR( msgBuf, myThid )
                0236 c      errCount = errCount + 1
                0237        CALL ALL_PROC_DIE( 0 )
                0238        STOP 'ABNORMAL END: S/R KPP_READPARMS'
                0239       ENDIF
1d478690dc Patr*0240 
                0241       _END_MASTER(myThid)
                0242 
                0243 C--   Everyone else must wait for the parameters to be loaded
                0244       _BARRIER
                0245 
                0246 #endif /* ALLOW_KPP */
                0247 
d6f292d8c0 Jean*0248       RETURN
                0249       END