C $Header: /u/gcmpack/MITgcm/pkg/pp81/pp81_readparms.F,v 1.5 2017/08/09 15:23:36 mlosch Exp $ C $Name: $ #include "PP81_OPTIONS.h" CBOP C !ROUTINE: PP81_READPARMS C !INTERFACE: ========================================================== SUBROUTINE PP81_READPARMS( myThid ) C !DESCRIPTION: C Initialize PP81 parameters, read in data.pp81 C !USES: =============================================================== IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PP81.h" #include "PARAMS.h" C !INPUT PARAMETERS: =================================================== C myThid :: thread number INTEGER myThid C !OUTPUT PARAMETERS: ================================================== C none #ifdef ALLOW_PP81 C !LOCAL VARIABLES: ==================================================== C iUnit :: unit number for I/O C msgBuf :: message buffer INTEGER iUnit CHARACTER*(MAX_LEN_MBUF) msgBuf CEOP NAMELIST //PP81_PARM01 & PPnRi, & PPviscMin, & PPdiffMin, & PPviscMax, & PPnu0, & PPalpha, & PPdumpFreq, & PPMixingMaps, & PPwriteState, & PPtaveFreq C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| IF ( .NOT.usePP81 ) THEN C- pkg PP81 is not used _BEGIN_MASTER(myThid) C- Track pkg activation status: PP81isON = .FALSE. C print a (weak) warning if data.pp81 is found CALL PACKAGES_UNUSED_MSG( 'usePP81', ' ', ' ' ) _END_MASTER(myThid) RETURN ENDIF C This routine has been called by the main model so we set our C internal flag to indicate we are in business PP81isON = .TRUE. C Set defaults values for parameters in PP81.h PPnRi = 2 PPviscMin = 0. _d 0 PPdiffMin = 0. _d 0 PPviscMax = 1. _d 0 PPnu0 = 1. _d -02 PPalpha = 5. _d 0 RiLimit = UNSET_RL PPdumpFreq = dumpFreq PPtaveFreq = taveFreq PPMixingMaps = .FALSE. PPwriteState = .FALSE. C Open and read the data.pp81 file _BEGIN_MASTER(myThid) WRITE(msgBuf,'(A)') ' PP81_READPARMS: opening data.pp81' CALL PRINT_MESSAGE(msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) CALL OPEN_COPY_DATA_FILE( I 'data.pp81', 'PP81_READPARMS', O iUnit, I myThid ) READ(UNIT=iUnit,NML=PP81_PARM01) WRITE(msgBuf,'(A)') & ' PP81_READPARMS: finished reading data.pp81' CALL PRINT_MESSAGE(msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) C Close the open data file #ifdef SINGLE_DISK_IO CLOSE(iUnit) #else CLOSE(iUnit,STATUS='DELETE') #endif /* SINGLE_DISK_IO */ _END_MASTER(myThid) C Everyone else must wait for the parameters to be loaded _BARRIER C Now set-up any remaining parameters that result from the input parameters IF ( PPviscMax .LE. 0. ) THEN WRITE(msgBuf,'(A)') 'PPviscMax must be greater than zero' CALL PRINT_ERROR( msgBuf , 1) STOP 'ABNORMAL END: S/R PP81_READPARMS' ENDIF IF ( PPalpha .EQ. 0. ) THEN WRITE(msgBuf,'(A)') 'PPalpha must not be zero' CALL PRINT_ERROR( msgBuf , 1) STOP 'ABNORMAL END: S/R PP81_READPARMS' ENDIF IF ( PPnRi .EQ. 0 ) THEN WRITE(msgBuf,'(A)') 'PPnRi must not be zero' CALL PRINT_ERROR( msgBuf , 1) STOP 'ABNORMAL END: S/R PP81_READPARMS' ENDIF IF ( RiLimit .EQ. UNSET_RL ) THEN RiLimit = PPnRi RiLimit = ( & ((PPnu0+viscArNr(1))/PPviscMax)**(1. _d 0/RiLimit) & -1. _d 0 & )/PPalpha ENDIF #endif /* ALLOW_PP81 */ RETURN END