Back to home page

MITgcm

 
 

    


File indexing completed on 2025-07-08 05:11:09 UTC

view on githubraw file Latest commit 00c7090d on 2025-07-07 16:10:22 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
1d478690dc Patr*0036 
                0037 C--   KPP vertical mixing parameters
                0038       NAMELIST /KPP_PARM01/
                0039      & kpp_freq, kpp_dumpFreq, kpp_taveFreq,
8ce97507dd Jean*0040      & KPPwriteState, KPP_ghatUseTotalDiffus,
00c7090dc0 Mart*0041      & KPPuseDoubleDiff, LimitHblStable, KPPuseSWfrac3D,
1d478690dc Patr*0042      & minKPPhbl,
                0043      & epsln, phepsi, epsilon, vonk, dB_dz,
                0044      & conc1, conam, concm, conc2, zetam,
                0045      & conas, concs, conc3, zetas,
                0046      & Ricr, cekman, cmonob, concv, hbf,
d6f292d8c0 Jean*0047      & zmin, zmax, umin, umax,
8ce97507dd Jean*0048      & num_v_smooth_Ri,
1d478690dc Patr*0049      & Riinfty, BVSQcon, difm0, difs0, dift0,
                0050      & difmcon, difscon, diftcon,
ae4c29e0db Jean*0051      & Rrho0, dsfmax,
8ce97507dd Jean*0052      & cstar,
                0053      & KPPmixingMaps,
                0054      & num_v_smooth_BV, num_z_smooth_sh, num_m_smooth_sh
1d478690dc Patr*0055 
ae4c29e0db Jean*0056 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0057 
                0058       IF ( .NOT.useKPP ) THEN
                0059 C-    pkg KPP is not used
                0060         _BEGIN_MASTER(myThid)
                0061 C-    Track pkg activation status:
                0062 C     print a (weak) warning if data.kpp is found
                0063          CALL PACKAGES_UNUSED_MSG( 'useKPP', ' ', ' ' )
                0064         _END_MASTER(myThid)
                0065         RETURN
                0066       ENDIF
                0067 
1d478690dc Patr*0068       _BEGIN_MASTER(myThid)
                0069 
8ce97507dd Jean*0070       WRITE(msgBuf,'(A)') ' KPP_READPARMS: opening data.kpp'
1d478690dc Patr*0071       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
8ce97507dd Jean*0072      &                    SQUEEZE_RIGHT, myThid )
93abbf4908 Jean*0073       errIO = 0
1d478690dc Patr*0074       CALL OPEN_COPY_DATA_FILE(
8ce97507dd Jean*0075      I                          'data.kpp', 'KPP_READPARMS',
1d478690dc Patr*0076      O                          iUnit,
                0077      I                          myThid )
                0078 
                0079 C--   set default KPP vertical mixing parameters
e750a5e49e Mart*0080       kpp_freq               = deltaTClock
                0081       kpp_dumpFreq           = dumpFreq
                0082       kpp_taveFreq           = taveFreq
                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
                0155 
1d478690dc Patr*0156 C-----------------------------------------------------------------------
                0157 
                0158 C--   Read settings from model parameter file "data.kpp".
8ce97507dd Jean*0159       WRITE(msgBuf,'(A)') ' KPP_READPARMS ; starts to read KPP_PARM01'
                0160       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0161      &                    SQUEEZE_RIGHT, myThid )
                0162       READ( UNIT=iUnit, NML=KPP_PARM01 )
                0163 c     READ( UNIT=iUnit, NML=KPP_PARM01, IOSTAT=errIO )
                0164 c     WRITE(msgBuf,'(A,I6,A)')
                0165 c    & ' KPP_READPARMS ; read KPP_PARM01 (', errIO, ' )'
                0166 c     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0167 c    &                    SQUEEZE_RIGHT, myThid )
1d478690dc Patr*0168       IF ( errIO .LT. 0 ) THEN
                0169        WRITE(msgBuf,'(A)')
8ce97507dd Jean*0170      &  'S/R KPP_READPARMS: Error reading parameter file "data.kpp"'
                0171        CALL PRINT_ERROR( msgBuf, myThid )
1d478690dc Patr*0172        WRITE(msgBuf,'(A)')
8ce97507dd Jean*0173      &  'S/R KPP_READPARMS: Problem in namelist KPP_PARM01'
                0174        CALL PRINT_ERROR( msgBuf, myThid )
                0175        STOP 'ABNORMAL END: S/R KPP_READPARMS'
                0176       ELSE
                0177        WRITE(msgBuf,'(A)') ' KPP_READPARMS ; read KPP_PARM01 : OK'
                0178        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0179      &                     SQUEEZE_RIGHT, myThid )
1d478690dc Patr*0180       ENDIF
                0181 
7a77863887 Mart*0182 #ifdef SINGLE_DISK_IO
1d478690dc Patr*0183       CLOSE(iUnit)
7a77863887 Mart*0184 #else
                0185       CLOSE(iUnit,STATUS='DELETE')
                0186 #endif /* SINGLE_DISK_IO */
1d478690dc Patr*0187 
8ce97507dd Jean*0188       WRITE(msgBuf,'(A)') ' KPP_READPARMS: finished reading data.kpp'
1d478690dc Patr*0189       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
8ce97507dd Jean*0190      &                    SQUEEZE_RIGHT, myThid )
                0191 
                0192 C--   Print message and stop when retired parameters were found in namelist
                0193       IF ( KPPmixingMaps ) THEN
                0194         nRetired = nRetired + 1
                0195         WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "KPPmixingMaps"',
                0196      &                       ' no longer allowed in file "data.kpp"'
                0197         CALL PRINT_ERROR( msgBuf, myThid )
                0198       ENDIF
                0199       IF ( num_v_smooth_BV .NE. UNSET_I ) THEN
                0200         nRetired = nRetired + 1
                0201         WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_v_smooth_BV"',
                0202      &                       ' no longer allowed in file "data.kpp"'
                0203         CALL PRINT_ERROR( msgBuf, myThid )
                0204       ENDIF
                0205       IF ( num_z_smooth_sh .NE. UNSET_I ) THEN
                0206         nRetired = nRetired + 1
                0207         WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_z_smooth_sh"',
                0208      &                       ' no longer allowed in file "data.kpp"'
                0209         CALL PRINT_ERROR( msgBuf, myThid )
                0210       ENDIF
                0211       IF ( num_m_smooth_sh .NE. UNSET_I ) THEN
                0212         nRetired = nRetired + 1
                0213         WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_m_smooth_sh"',
                0214      &                       ' no longer allowed in file "data.kpp"'
                0215         CALL PRINT_ERROR( msgBuf, myThid )
                0216       ENDIF
                0217 
                0218       IF ( nRetired .GT. 0 ) THEN
                0219        WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: ',
                0220      &  'Error reading file "data.kpp":'
                0221        CALL PRINT_ERROR( msgBuf, myThid )
                0222        WRITE(msgBuf,'(I4,A)') nRetired,
                0223      &      ' out-of-date parameters were found in the namelist(s)'
                0224        CALL PRINT_ERROR( msgBuf, myThid )
                0225 c      errCount = errCount + 1
                0226        CALL ALL_PROC_DIE( 0 )
                0227        STOP 'ABNORMAL END: S/R KPP_READPARMS'
                0228       ENDIF
1d478690dc Patr*0229 
                0230       _END_MASTER(myThid)
                0231 
                0232 C--   Everyone else must wait for the parameters to be loaded
                0233       _BARRIER
                0234 
                0235 #endif /* ALLOW_KPP */
                0236 
d6f292d8c0 Jean*0237       RETURN
                0238       END