C $Header: /u/gcmpack/MITgcm/pkg/kpp/kpp_readparms.F,v 1.25 2017/10/19 13:17:17 jmc Exp $ C $Name: $ #include "KPP_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP 0 C !ROUTINE: KPP_READPARMS C !INTERFACE: SUBROUTINE KPP_READPARMS( myThid ) C !DESCRIPTION: C Routine to read in file data.kpp C !USES: IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "KPP_PARAMS.h" C !INPUT PARAMETERS: INTEGER myThid CEOP C !LOCAL VARIABLES: #ifdef ALLOW_KPP C msgBuf :: Informational/error message buffer C errIO :: IO error flag C iUnit :: Work variable for IO unit number CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER errIO, iUnit C- retired parameters: C nRetired :: Count number of "retired" parameters found in namelist. INTEGER nRetired LOGICAL KPPmixingMaps INTEGER num_v_smooth_BV, num_z_smooth_sh, num_m_smooth_sh C-- KPP vertical mixing parameters NAMELIST //KPP_PARM01 & kpp_freq, kpp_dumpFreq, kpp_taveFreq, & KPPwriteState, KPP_ghatUseTotalDiffus, & KPPuseDoubleDiff, LimitHblStable, & minKPPhbl, & epsln, phepsi, epsilon, vonk, dB_dz, & conc1, conam, concm, conc2, zetam, & conas, concs, conc3, zetas, & Ricr, cekman, cmonob, concv, hbf, & zmin, zmax, umin, umax, & num_v_smooth_Ri, & Riinfty, BVSQcon, difm0, difs0, dift0, & difmcon, difscon, diftcon, & Rrho0, dsfmax, & cstar, & KPPmixingMaps, & num_v_smooth_BV, num_z_smooth_sh, num_m_smooth_sh C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| IF ( .NOT.useKPP ) THEN C- pkg KPP is not used _BEGIN_MASTER(myThid) C- Track pkg activation status: C print a (weak) warning if data.kpp is found CALL PACKAGES_UNUSED_MSG( 'useKPP', ' ', ' ' ) _END_MASTER(myThid) RETURN ENDIF _BEGIN_MASTER(myThid) WRITE(msgBuf,'(A)') ' KPP_READPARMS: opening data.kpp' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) errIO = 0 CALL OPEN_COPY_DATA_FILE( I 'data.kpp', 'KPP_READPARMS', O iUnit, I myThid ) C-- set default KPP vertical mixing parameters kpp_freq = deltaTClock kpp_dumpFreq = dumpFreq kpp_taveFreq = taveFreq KPPwriteState = .FALSE. KPPuseDoubleDiff = .FALSE. LimitHblStable = .TRUE. KPP_ghatUseTotalDiffus = .FALSE. minKPPhbl = UNSET_RL C----------------------------------------------------------------------- C define some non-dimensional constants and C the vertical mixing coefficients in m-k-s units C----------------------------------------------------------------------- epsln = 1. _d -20 phepsi = 1. _d -10 epsilon = 1. _d -1 vonk = 0.4 _d 0 dB_dz = 5.2 _d -5 conc1 = 5. _d 0 conam = 1.257 _d 0 concm = 8.380 _d 0 conc2 = 16. _d 0 zetam = -0.2 _d 0 conas = -28.86 _d 0 concs = 98.96 _d 0 conc3 = 16. _d 0 zetas = -1. _d 0 C parameters for subroutine "bldepth" Ricr = 0.3 _d 0 cekman = 0.7 _d 0 cmonob = 1. _d 0 concv = 1.8 _d 0 hbf = 1. _d 0 C parameters and common arrays for subroutines C "kmixinit" and "wscale" zmin = -4. _d -7 zmax = 0. _d 0 umin = 0. _d 0 umax = 4. _d -2 C parameters for subroutine "Ri_iwmix" num_v_smooth_Ri = 0 Riinfty = 0.7 _d 0 BVSQcon = -0.2 _d -4 difm0 = 5. _d -3 difs0 = 5. _d -3 dift0 = 5. _d -3 difmcon = 0.1 _d 0 difscon = 0.1 _d 0 diftcon = 0.1 _d 0 C parameters for double diffusion routine "KPP_DOUBLEDIFF" Rrho0 = 1.9 _d 0 dsfmax = 10. _d -3 C parameters for subroutine "blmix" cstar = 10. C- Retired parameters: initialised to unlikely value: nRetired = 0 KPPmixingMaps = .FALSE. num_v_smooth_BV = UNSET_I num_z_smooth_sh = UNSET_I num_m_smooth_sh = UNSET_I C----------------------------------------------------------------------- C-- Read settings from model parameter file "data.kpp". WRITE(msgBuf,'(A)') ' KPP_READPARMS ; starts to read KPP_PARM01' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) READ( UNIT=iUnit, NML=KPP_PARM01 ) c READ( UNIT=iUnit, NML=KPP_PARM01, IOSTAT=errIO ) c WRITE(msgBuf,'(A,I6,A)') c & ' KPP_READPARMS ; read KPP_PARM01 (', errIO, ' )' c CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, c & SQUEEZE_RIGHT, myThid ) IF ( errIO .LT. 0 ) THEN WRITE(msgBuf,'(A)') & 'S/R KPP_READPARMS: Error reading parameter file "data.kpp"' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(A)') & 'S/R KPP_READPARMS: Problem in namelist KPP_PARM01' CALL PRINT_ERROR( msgBuf, myThid ) STOP 'ABNORMAL END: S/R KPP_READPARMS' ELSE WRITE(msgBuf,'(A)') ' KPP_READPARMS ; read KPP_PARM01 : OK' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) ENDIF #ifdef SINGLE_DISK_IO CLOSE(iUnit) #else CLOSE(iUnit,STATUS='DELETE') #endif /* SINGLE_DISK_IO */ WRITE(msgBuf,'(A)') ' KPP_READPARMS: finished reading data.kpp' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) C-- Print message and stop when retired parameters were found in namelist IF ( KPPmixingMaps ) THEN nRetired = nRetired + 1 WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "KPPmixingMaps"', & ' no longer allowed in file "data.kpp"' CALL PRINT_ERROR( msgBuf, myThid ) ENDIF IF ( num_v_smooth_BV .NE. UNSET_I ) THEN nRetired = nRetired + 1 WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_v_smooth_BV"', & ' no longer allowed in file "data.kpp"' CALL PRINT_ERROR( msgBuf, myThid ) ENDIF IF ( num_z_smooth_sh .NE. UNSET_I ) THEN nRetired = nRetired + 1 WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_z_smooth_sh"', & ' no longer allowed in file "data.kpp"' CALL PRINT_ERROR( msgBuf, myThid ) ENDIF IF ( num_m_smooth_sh .NE. UNSET_I ) THEN nRetired = nRetired + 1 WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: "num_m_smooth_sh"', & ' no longer allowed in file "data.kpp"' CALL PRINT_ERROR( msgBuf, myThid ) ENDIF IF ( nRetired .GT. 0 ) THEN WRITE(msgBuf,'(2A)') 'S/R KPP_READPARMS: ', & 'Error reading file "data.kpp":' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(I4,A)') nRetired, & ' out-of-date parameters were found in the namelist(s)' CALL PRINT_ERROR( msgBuf, myThid ) c errCount = errCount + 1 CALL ALL_PROC_DIE( 0 ) STOP 'ABNORMAL END: S/R KPP_READPARMS' ENDIF _END_MASTER(myThid) C-- Everyone else must wait for the parameters to be loaded _BARRIER #endif /* ALLOW_KPP */ RETURN END