C $Header: /u/gcmpack/MITgcm/pkg/pp81/pp81_readparms.F,v 1.3 2010/08/24 14:59:55 jmc 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 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
CLOSE(iUnit)
_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