C $Header: /u/gcmpack/MITgcm/pkg/shelfice/shelfice_readparms.F,v 1.28 2017/12/15 19:37:08 jmc Exp $
C $Name: $
#include "SHELFICE_OPTIONS.h"
CBOP
C !ROUTINE: SHELFICE_READPARMS
C !INTERFACE: ==========================================================
SUBROUTINE SHELFICE_READPARMS( myThid )
C !DESCRIPTION:
C Initialize SHELFICE parameters, read in data.shelfice
C !USES: ===============================================================
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "SHELFICE.h"
#ifdef ALLOW_COST
# include "SHELFICE_COST.h"
#endif /* ALLOW_COST */
#ifdef ALLOW_MNC
# include "MNC_PARAMS.h"
#endif
C !INPUT PARAMETERS: ===================================================
C myThid :: thread number
INTEGER myThid
C !OUTPUT PARAMETERS: ==================================================
C none
#ifdef ALLOW_SHELFICE
C !LOCAL VARIABLES: ====================================================
C iUnit :: unit number for I/O
C msgBuf :: message buffer
INTEGER iUnit
CHARACTER*(MAX_LEN_MBUF) msgBuf
CEOP
NAMELIST //SHELFICE_PARM01
& SHELFICEheatTransCoeff,
& SHELFICEsaltTransCoeff,
& SHELFICEMassStepping,
& rhoShelfice, SHELFICEkappa,
& SHELFICElatentHeat, SHELFICEHeatCapacity_Cp,
& no_slip_shelfice, SHELFICEDragLinear,
& SHELFICEDragQuadratic, SHELFICEselectDragQuadr,
& SHELFICEthetaSurface,
& useISOMIPTD,
& SHELFICEconserve, SHELFICEboundaryLayer,
& SHELFICEwriteState,
& SHELFICE_dumpFreq,
& SHELFICE_taveFreq,
& SHELFICE_tave_mnc,
& SHELFICE_dump_mnc,
& SHELFICEtopoFile,
& SHELFICEmassFile, SHELFICEloadAnomalyFile,
& SHELFICEMassDynTendFile, SHELFICETransCoeffTFile,
& SHELFICEDynMassOnly,
& SHELFICEadvDiffHeatFlux,
& SHELFICEuseGammaFrict, SHELFICE_oldCalcUStar,
& shiCdrag, shiZetaN, shiRc,
& shiPrandtl, shiSchmidt, shiKinVisc
#ifdef ALLOW_COST
& , mult_shelfice
& , mult_shifwflx, wshifwflx0, shifwflx_errfile
#endif
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
IF ( .NOT.useShelfIce ) THEN
C- pkg SHELFICE is not used
_BEGIN_MASTER(myThid)
C- Track pkg activation status:
SHELFICEisOn = .FALSE.
C print a (weak) warning if data.shelfice is found
CALL PACKAGES_UNUSED_MSG( 'useShelfIce', ' ', ' ' )
_END_MASTER(myThid)
RETURN
ENDIF
_BEGIN_MASTER(myThid)
C This routine has been called by the main model so we set our
C internal flag to indicate we are in business
SHELFICEisOn = .TRUE.
C Set defaults values for parameters in SHELFICE.h
useISOMIPTD = .FALSE.
SHELFICEconserve = .FALSE.
SHELFICEboundaryLayer = .FALSE.
SHELFICEMassStepping = .FALSE.
SHELFICEDynMassOnly = .FALSE.
SHELFICEtopoFile = ' '
SHELFICEmassFile = ' '
SHELFICEloadAnomalyFile = ' '
SHELFICEMassDynTendFile = ' '
SHELFICETransCoeffTFile = ' '
SHELFICElatentHeat = 334.0 _d 3
SHELFICEHeatCapacity_Cp = 2000.0 _d 0
rhoShelfIce = 917.0 _d 0
SHELFICEheatTransCoeff = 1.0 _d -04
SHELFICEsaltTransCoeff = UNSET_RL
SHELFICEkappa = 1.54 _d -06
SHELFICEthetaSurface = - 20.0 _d 0
no_slip_shelfice = no_slip_bottom
SHELFICEDragLinear = bottomDragLinear
SHELFICEDragQuadratic = UNSET_RL
SHELFICEselectDragQuadr = -1
SHELFICEwriteState = .FALSE.
SHELFICE_dumpFreq = dumpFreq
SHELFICE_taveFreq = taveFreq
SHELFICEadvDiffHeatFlux = .FALSE.
SHELFICEuseGammaFrict = .FALSE.
SHELFICE_oldCalcUStar = .FALSE.
C these params. are default of Holland and Jenkins (1999)
shiCdrag = 0.0015 _d 0
shiZetaN = 0.052 _d 0
shiRc = 0.2 _d 0
shiPrandtl = 13.8 _d 0
shiSchmidt = 2432.0 _d 0
shiKinVisc = 1.95 _d -6
#ifdef ALLOW_COST
mult_shelfice = 0. _d 0
mult_shifwflx = 0. _d 0
wshifwflx0 = 0. _d 0
shifwflx_errfile = ' '
#endif
#ifdef ALLOW_MNC
SHELFICE_tave_mnc = timeave_mnc
SHELFICE_dump_mnc = snapshot_mnc
#else
SHELFICE_tave_mnc = .FALSE.
SHELFICE_dump_mnc = .FALSE.
#endif
C Open and read the data.shelfice file
WRITE(msgBuf,'(A)') ' SHELFICE_READPARMS: opening data.shelfice'
CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
CALL OPEN_COPY_DATA_FILE(
I 'data.shelfice', 'SHELFICE_READPARMS',
O iUnit,
I myThid )
READ(UNIT=iUnit,NML=SHELFICE_PARM01)
WRITE(msgBuf,'(A)')
& ' SHELFICE_READPARMS: finished reading data.shelfice'
CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
C Close the open data file
#ifdef SINGLE_DISK_IO
CLOSE(iUnit)
#else
CLOSE(iUnit,STATUS='DELETE')
#endif /* SINGLE_DISK_IO */
C Now set-up any remaining parameters that result from the input parameters
IF ( SHELFICEsaltTransCoeff .EQ. UNSET_RL )
& SHELFICEsaltTransCoeff =
& 5.05 _d -3 *SHELFICEheatTransCoeff
C New calcUstar expression not available with SHELFICEboundaryLayer:
IF ( SHELFICEboundaryLayer ) SHELFICE_oldCalcUStar = .TRUE.
C Set quadratic bottom drag depending on choices:
IF ( SHELFICEDragQuadratic .EQ. UNSET_RL) THEN
IF ( SHELFICEuseGammaFrict ) THEN
SHELFICEDragQuadratic = shiCdrag
ELSE
SHELFICEDragQuadratic = bottomDragQuadratic
ENDIF
ENDIF
IF ( SHELFICEDragQuadratic.EQ.0. _d 0 ) THEN
SHELFICEselectDragQuadr = -1
ELSEIF ( SHELFICEselectDragQuadr.EQ.-1 ) THEN
SHELFICEselectDragQuadr = MAX( 0, selectBotDragQuadr )
ENDIF
C- Set Output type flags :
SHELFICE_tave_mdsio = .TRUE.
SHELFICE_dump_mdsio = .TRUE.
#ifdef ALLOW_MNC
IF (useMNC) THEN
IF ( .NOT.outputTypesInclusive
& .AND. SHELFICE_tave_mnc ) SHELFICE_tave_mdsio = .FALSE.
IF ( .NOT.outputTypesInclusive
& .AND. SHELFICE_dump_mnc ) SHELFICE_dump_mdsio = .FALSE.
ENDIF
#endif
_END_MASTER(myThid)
C Everyone else must wait for the parameters to be loaded
_BARRIER
#endif /* ALLOW_SHELFICE */
RETURN
END