C $Header: /u/gcmpack/MITgcm/pkg/opps/opps_readparms.F,v 1.4 2017/08/09 15:23:37 mlosch Exp $ C $Name: $ #include "OPPS_OPTIONS.h" CBOP C !ROUTINE: OPPS_READPARMS C !INTERFACE: ========================================================== SUBROUTINE OPPS_READPARMS( myThid ) C !DESCRIPTION: C Initialize OPPS parameters, read in data.opps C !USES: =============================================================== IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "OPPS.h" #include "PARAMS.h" C !INPUT PARAMETERS: =================================================== C myThid :: thread number INTEGER myThid C !OUTPUT PARAMETERS: ================================================== C none #ifdef ALLOW_OPPS C !LOCAL VARIABLES: ==================================================== C iUnit :: unit number for I/O C msgBuf :: message buffer INTEGER iUnit CHARACTER*(MAX_LEN_MBUF) msgBuf CEOP NAMELIST //OPPS_PARM01 & MAX_ABE_ITERATIONS, & OPPSdebugLevel, & PlumeRadius, & STABILITY_THRESHOLD, & FRACTIONAL_AREA, & MAX_FRACTIONAL_AREA, & VERTICAL_VELOCITY, & ENTRAINMENT_RATE, & useGCMwVel, & OPPSdumpFreq, & OPPStaveFreq, & OPPSwriteState C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| IF ( .NOT.useOPPS ) THEN C- pkg OPPS is not used _BEGIN_MASTER(myThid) C- Track pkg activation status: OPPSisON = .FALSE. C print a (weak) warning if data.opps is found CALL PACKAGES_UNUSED_MSG( 'useOPPS', ' ', ' ' ) _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 OPPSisON = .TRUE. C Set defaults values for parameters in OPPS.h MAX_ABE_ITERATIONS = 1 OPPSdebugLevel = 0 PlumeRadius = 100. _d 0 STABILITY_THRESHOLD = -1. _d -4 FRACTIONAL_AREA = .1 _d 0 MAX_FRACTIONAL_AREA = .8 _d 0 VERTICAL_VELOCITY = .03 _d 0 ENTRAINMENT_RATE = -.05 _d 0 OPPSdumpFreq = dumpFreq OPPStaveFreq = taveFreq OPPSwriteState = .FALSE. useGCMwVel = .FALSE. C Open and read the data.opps file _BEGIN_MASTER(myThid) WRITE(msgBuf,'(A)') ' OPPS_READPARMS: opening data.opps' CALL PRINT_MESSAGE(msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) CALL OPEN_COPY_DATA_FILE( I 'data.opps', 'OPPS_READPARMS', O iUnit, I myThid ) READ(UNIT=iUnit,NML=OPPS_PARM01) WRITE(msgBuf,'(A)') & ' OPPS_READPARMS: finished reading data.opps' 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 e2 = 2.*ENTRAINMENT_RATE #endif /* ALLOW_OPPS */ RETURN END