SUBROUTINE GetDXCoils
! SUBROUTINE INFORMATION:
! AUTHOR Fred Buhl
! DATE WRITTEN May 2000
! MODIFIED Don Shirey, Aug/Sept 2000, Feb/Oct 2001, Sept 2003, Jan/July 2004
! Feb 2005 M. J. Witte, GARD Analytics, Inc.
! Add new coil type COIL:DX:MultiMode:CoolingEmpirical:
! May 2005, Rich Raustad, FSEC, Added COIL:DX:HeatPumpWaterHeater
! June 2007 L. Gu, FSEC
! Added new coil type COIL:DX:MULTISPEED:COOLING and COIL:DX:MULTISPEED:HEATING
! April 2010, Chandan Sharma, FSEC, added basin heater inputs
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Obtains input data for DX coils and stores it in DX coil data structure
! METHODOLOGY EMPLOYED:
! Uses "Get" routines to read in data.
! REFERENCES:
! na
! USE STATEMENTS:
USE InputProcessor, ONLY: GetNumObjectsFound, GetObjectItem, GetObjectItemNum, VerifyName, SameString,GetObjectDefMaxArgs
USE CurveManager, ONLY: GetCurveIndex, GetCurveType, CurveValue, SetCurveOutputMinMaxValues
USE BranchNodeConnections, ONLY: TestCompSet
USE NodeInputManager, ONLY: GetOnlySingleNode
USE DataSizing, ONLY: AutoSize
USE General, ONLY: TrimSigDigits
USE WaterManager, ONLY: SetupTankDemandComponent, SetupTankSupplyComponent
USE OutAirNodeManager, ONLY: CheckOutAirNodeNumber
USE ScheduleManager, ONLY: GetScheduleIndex
USE DataGlobals, ONLY: AnyEnergyManagementSystemInModel, emsCallFromComponentGetInput
USE EMSManager, ONLY: ManageEMS
USE GlobalNames, ONLY: VerifyUniqueCoilName
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
! na
! SUBROUTINE PARAMETER DEFINITIONS:
CHARACTER(len=*), PARAMETER :: Blank = ' '
CHARACTER(len=*), PARAMETER :: RoutineName='GetDXCoils: ' ! include trailing blank space
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: DXCoilIndex ! loop index
INTEGER :: DXCoilNum ! current DX coil number
INTEGER :: NumAlphas ! Number of alphas in input
INTEGER :: NumNumbers ! Number of numeric items in input
CHARACTER(Len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: Alphas2 ! Alpha input items for object
REAL(r64), ALLOCATABLE, DIMENSION(:) :: Numbers2 ! Numeric input items for object
CHARACTER(Len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cAlphaFields2 ! Alpha field names
CHARACTER(Len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cNumericFields2 ! Numeric field names
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lAlphaBlanks2 ! Logical array, alpha field input BLANK = .true.
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lNumericBlanks2 ! Logical array, numeric field input BLANK = .true.
INTEGER :: NumAlphas2 ! Number of alphas in input for performance object
INTEGER :: NumNumbers2 ! Number of numeric items in input for performance object
INTEGER :: IOStatus ! Input status returned from GetObjectItem
LOGICAL :: IsNotOK ! Flag to verify name
LOGICAL :: IsBlank ! Flag for blank name
LOGICAL :: ErrorsFound=.false. ! Set to true if errors in input, fatal at end of routine
INTEGER :: DXHPWaterHeaterCoilNum ! Loop index for 1,NumDXHeatPumpWaterHeaterCoils
INTEGER :: CapacityStageNum ! Loop index for 1,Number of capacity stages
INTEGER :: DehumidModeNum ! Loop index for 1,Number of enhanced dehumidification modes
INTEGER :: PerfModeNum ! Performance mode index
INTEGER :: PerfObjectNum ! Item number for performance object
INTEGER :: AlphaIndex ! Index for current alpha field
CHARACTER(len=MaxNameLength) :: CurrentModuleObject ! Object type for getting and error messages
CHARACTER(len=MaxNameLength) :: PerfObjectType ! Performance object type for getting and error messages
CHARACTER(len=MaxNameLength) :: PerfObjectName ! Performance object name for getting and error messages
REAL(r64) :: InletAirTemp ! Used to pass proper inlet air temp to HPWH DX coil performance curves
REAL(r64) :: InletWaterTemp ! Used to pass proper inlet water temp to HPWH DX coil performance curves
REAL(r64) :: HeatCapFTemp ! Used to verify HPWH DX coil heating capacity (function of temp) performance curve
REAL(r64) :: HeatCOPFTemp ! Used to verify HPWH DX coil heating COP (function of temp) performance curve
REAL(r64) :: HeatCapFAirFlow ! Used to verify HPWH DX coil heating capacity (function of air flow) performance curve
REAL(r64) :: HeatCOPFAirFlow ! Used to verify HPWH DX coil heating COP (function of air flow) performance curve
REAL(r64) :: HeatCapFWaterFlow ! Used to verify HPWH DX coil heating capacity (function of water flow) performance curve
REAL(r64) :: HeatCOPFWaterFlow ! Used to verify HPWH DX coil heating COP (function of water flow) performance curve
INTEGER :: I ! Index of speeds
REAL(r64) :: CurveVal ! Used to verify modifier curves equal 1 at rated conditions
CHARACTER(Len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: Alphas ! Alpha input items for object
CHARACTER(Len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cAlphaFields ! Alpha field names
CHARACTER(Len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cNumericFields ! Numeric field names
REAL(r64), ALLOCATABLE, DIMENSION(:) :: Numbers ! Numeric input items for object
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lAlphaBlanks ! Logical array, alpha field input BLANK = .true.
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lNumericBlanks ! Logical array, numeric field input BLANK = .true.
INTEGER :: MaxNumbers=0 ! Maximum number of numeric input fields
INTEGER :: MaxAlphas=0 ! Maximum number of alpha input fields
INTEGER :: TotalArgs=0 ! Total number of alpha and numeric arguments (max) for a
! certain object in the input file
REAL(r64) :: MinCurveVal ! used for testing PLF curve output
REAL(r64) :: MinCurvePLR ! used for testing PLF curve output
REAL(r64) :: MaxCurveVal ! used for testing PLF curve output
REAL(r64) :: MaxCurvePLR ! used for testing PLF curve output
REAL(r64) :: CurveInput ! index used for testing PLF curve output
LOGICAL :: errflag
! find number of each type of DX coil and calculate the total number
NumDoe2DXCoils = GetNumObjectsFound('Coil:Cooling:DX:SingleSpeed')
NumDXHeatingCoils = GetNumObjectsFound('Coil:Heating:DX:SingleSpeed')
NumDXMulSpeedCoils = GetNumObjectsFound('Coil:Cooling:DX:TwoSpeed')
NumDXMulModeCoils = GetNumObjectsFound('Coil:Cooling:DX:TwoStageWithHumidityControlMode')
NumDXHeatPumpWaterHeaterCoils = GetNumObjectsFound('Coil:WaterHeating:AirToWaterHeatPump')
NumDXMulSpeedCoolCoils = GetNumObjectsFound('Coil:Cooling:DX:MultiSpeed')
NumDXMulSpeedHeatCoils = GetNumObjectsFound('Coil:Heating:DX:MultiSpeed')
NumVRFCoolingCoils = GetNumObjectsFound(cAllCoilTypes(CoilVRF_Cooling))
NumVRFHeatingCoils = GetNumObjectsFound(cAllCoilTypes(CoilVRF_Heating))
NumDXCoils = NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils &
+ NumDXMulSpeedCoolCoils + NumDXMulSpeedHeatCoils + NumVRFCoolingCoils + NumVRFHeatingCoils
! Determine max number of alpha and numeric arguments for all objects being read, in order to allocate local arrays
CALL GetObjectDefMaxArgs('Coil:Cooling:DX:SingleSpeed',TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=NumNumbers
MaxAlphas=NumAlphas
CALL GetObjectDefMaxArgs('Coil:Heating:DX:SingleSpeed',TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
CALL GetObjectDefMaxArgs('Coil:Cooling:DX:TwoSpeed',TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
CALL GetObjectDefMaxArgs('Coil:Cooling:DX:TwoStageWithHumidityControlMode',TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
CALL GetObjectDefMaxArgs('Coil:WaterHeating:AirToWaterHeatPump',TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
CALL GetObjectDefMaxArgs('Coil:Cooling:DX:MultiSpeed',TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
CALL GetObjectDefMaxArgs('Coil:Heating:DX:MultiSpeed',TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
CALL GetObjectDefMaxArgs(cAllCoilTypes(CoilVRF_Cooling),TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
CALL GetObjectDefMaxArgs(cAllCoilTypes(CoilVRF_Heating),TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
CALL GetObjectDefMaxArgs('CoilPerformance:DX:Cooling',TotalArgs,NumAlphas,NumNumbers)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
ALLOCATE(Alphas(MaxAlphas))
Alphas=' '
ALLOCATE(cAlphaFields(MaxAlphas))
cAlphaFields=' '
ALLOCATE(cNumericFields(MaxNumbers))
cNumericFields=' '
ALLOCATE(Numbers(MaxNumbers))
Numbers=0.0d0
ALLOCATE(lAlphaBlanks(MaxAlphas))
lAlphaBlanks=.TRUE.
ALLOCATE(lNumericBlanks(MaxNumbers))
lNumericBlanks=.TRUE.
ALLOCATE(Alphas2(MaxAlphas))
Alphas2=' '
ALLOCATE(cAlphaFields2(MaxAlphas))
cAlphaFields2=' '
ALLOCATE(cNumericFields2(MaxNumbers))
cNumericFields2=' '
ALLOCATE(Numbers2(MaxNumbers))
Numbers2=0.0d0
ALLOCATE(lAlphaBlanks2(MaxAlphas))
lAlphaBlanks2=.TRUE.
ALLOCATE(lNumericBlanks2(MaxNumbers))
lNumericBlanks2=.TRUE.
! allocate the data structure
! Derived types
ALLOCATE(DXCoil(NumDXCoils))
ALLOCATE(HeatReclaimDXCoil(NumDXCoils))
ALLOCATE(CheckEquipName(NumDXCoils))
CheckEquipName=.true.
! Module level variable arrays
ALLOCATE(DXCoilOutletTemp(NumDXCoils))
ALLOCATE(DXCoilOutletHumRat(NumDXCoils))
ALLOCATE(DXCoilPartLoadRatio(NumDXCoils))
ALLOCATE(DXCoilFanOpMode(NumDXCoils))
ALLOCATE(DXCoilFullLoadOutAirTemp(NumDXCoils))
ALLOCATE(DXCoilFullLoadOutAirHumRat(NumDXCoils))
ALLOCATE(DXCoilTotalCooling(NumDXCoils))
ALLOCATE(DXCoilTotalHeating(NumDXCoils))
ALLOCATE(DXCoilCoolInletAirWBTemp(NumDXCoils))
ALLOCATE(DXCoilHeatInletAirDBTemp(NumDXCoils))
ALLOCATE(DXCoilHeatInletAirWBTemp(NumDXCoils))
!
! initialize the module level arrays
!
DXCoilOutletTemp = 0.0d0
DXCoilOutletHumRat = 0.0d0
DXCoilPartLoadRatio = 0.0d0
DXCoilFanOpMode = 0
DXCoilFullLoadOutAirTemp = 0.0d0
DXCoilFullLoadOutAirHumRat = 0.0d0
MaxRatedVolFlowPerRatedTotCap(1) = MaxRatedVolFlowPerRatedTotCap1
MinRatedVolFlowPerRatedTotCap(1) = MinRatedVolFlowPerRatedTotCap1
MaxHeatVolFlowPerRatedTotCap(1) = MaxHeatVolFlowPerRatedTotCap1
MaxCoolVolFlowPerRatedTotCap(1) = MaxCoolVolFlowPerRatedTotCap1
MinOperVolFlowPerRatedTotCap(1) = MinOperVolFlowPerRatedTotCap1
MaxRatedVolFlowPerRatedTotCap(2) = MaxRatedVolFlowPerRatedTotCap2
MinRatedVolFlowPerRatedTotCap(2) = MinRatedVolFlowPerRatedTotCap2
MaxHeatVolFlowPerRatedTotCap(2) = MaxHeatVolFlowPerRatedTotCap2
MaxCoolVolFlowPerRatedTotCap(2) = MaxCoolVolFlowPerRatedTotCap2
MinOperVolFlowPerRatedTotCap(2) = MinOperVolFlowPerRatedTotCap2
! initialize the coil counter
DXCoilNum = 0
! Loop over the Doe2 DX Coils and get & load the data
CurrentModuleObject='Coil:Cooling:DX:SingleSpeed'
DO DXCoilIndex = 1, NumDoe2DXCoils
CALL GetObjectItem(CurrentModuleObject,DXCoilIndex,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
DXCoilNum = DXCoilNum+1
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
! Initialize DataHeatBalance heat reclaim variable name for use by heat reclaim coils
HeatReclaimDXCoil(DXCoilNum)%Name = DXCoil(DXCoilNum)%Name
HeatReclaimDXCoil(DXCoilNum)%SourceType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilDX_CoolingSingleSpeed
DXCoil(DXCoilNum)%Schedule = Alphas(2)
IF (lAlphaBlanks(2)) THEN
DXCoil(DXCoilNum)%SchedPtr = ScheduleAlwaysOn
ELSE
DXCoil(DXCoilNum)%SchedPtr = GetScheduleIndex(Alphas(2)) ! convert schedule name to pointer
IF (DXCoil(DXCoilNum)%SchedPtr .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(2))//'="'//TRIM(Alphas(2))//'".')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%RatedTotCap(1) = Numbers(1)
DXCoil(DXCoilNum)%RatedSHR(1) = Numbers(2)
DXCoil(DXCoilNum)%RatedCOP(1) = Numbers(3)
IF (DXCoil(DXCoilNum)%RatedCOP(1) .LE. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(3))//' must be > 0.0,'// &
' entered value=['//trim(TrimSigDigits(Numbers(3),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) = Numbers(4)
DXCoil(DXCoilNum)%FanPowerPerEvapAirFlowRate(1) = Numbers(5)
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(3),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(4),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(3),Alphas(4),'Air Nodes')
DXCoil(DXCoilNum)%CCapFTemp(1) = GetCurveIndex(Alphas(5)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFTemp(1) .EQ. 0) THEN
IF (lAlphaBlanks(5)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(5))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(5))//'="'//TRIM(Alphas(5))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(5))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1))))
CALL ShowContinueError('Curve type must be Biquadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%CCapFFlow(1) = GetCurveIndex(Alphas(6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFFlow(1) .EQ. 0) THEN
IF (lAlphaBlanks(6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(6))//'="'//TRIM(Alphas(6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFTemp(1) = GetCurveIndex(Alphas(7)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFTemp(1) .EQ. 0) THEN
IF (lAlphaBlanks(7)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(7))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(7))//'="'//TRIM(Alphas(7))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp(1)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%EIRTempModFacCurveType(1)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(7))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp(1))))
CALL ShowContinueError('Curve type must be Biquadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFFlow(1) = GetCurveIndex(Alphas(8)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFFlow(1) .EQ. 0) THEN
IF (lAlphaBlanks(8)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(8))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(8))//'="'//TRIM(Alphas(8))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFFlow(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(8))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFFlow(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%PLFFPLR(1) = GetCurveIndex(Alphas(9)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%PLFFPLR(1) .EQ. 0) THEN
IF (lAlphaBlanks(9)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(9))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(9))//'="'//TRIM(Alphas(9))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Quadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(9))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
IF(.NOT. ErrorsFound)THEN
! Test PLF curve minimum and maximum. Cap if less than 0.7 or greater than 1.0.
MinCurveVal = 999.0d0
MaxCurveVal = -999.0d0
CurveInput = 0.0d0
DO WHILE (CurveInput <= 1.0d0)
CurveVal = CurveValue(DXCoil(DXCoilNum)%PLFFPLR(1),CurveInput)
IF(CurveVal .LT. MinCurveVal)THEN
MinCurveVal = CurveVal
MinCurvePLR = CurveInput
END IF
IF(CurveVal .GT. MaxCurveVal)THEN
MaxCurveVal = CurveVal
MaxCurvePLR = CurveInput
END IF
CurveInput=CurveInput+0.01d0
END DO
IF(MinCurveVal .LT. 0.7d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(9))//'="'//TRIM(Alphas(9))//'" has out of range values.')
CALL ShowContinueError('...Curve minimum must be >= 0.7, '// &
'curve min at PLR = '//TRIM(TrimSigDigits(MinCurvePLR,2))//' is '//TRIM(TrimSigDigits(MinCurveVal,3)))
CALL ShowContinueError('...Setting curve minimum to 0.7 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMin=0.7d0)
END IF
IF(MaxCurveVal .GT. 1.0d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(9))//' = '//TRIM(Alphas(9))//' has out of range value.')
CALL ShowContinueError('...Curve maximum must be <= 1.0, '// &
'curve max at PLR = '//TRIM(TrimSigDigits(MaxCurvePLR,2))//' is '//TRIM(TrimSigDigits(MaxCurveVal,3)))
CALL ShowContinueError('...Setting curve maximum to 1.0 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMax=1.0d0)
END IF
END IF
END IF
DXCoil(DXCoilNum)%Twet_Rated(1) = Numbers(6)
DXCoil(DXCoilNum)%Gamma_Rated(1) = Numbers(7)
DXCoil(DXCoilNum)%MaxONOFFCyclesperHour(1) = Numbers(8)
DXCoil(DXCoilNum)%LatentCapacityTimeConstant(1) = Numbers(9)
! Numbers (6) through (9) must all be greater than zero to use the latent capacity degradation model
IF ((Numbers(6) .GT. 0.0d0 .OR. Numbers (7) .GT. 0.0d0 .OR. Numbers (8) .GT. 0.0d0 .OR. Numbers (9) .GT. 0.0d0) &
.AND. (Numbers(6) .LE. 0.0d0 .OR. Numbers (7) .LE. 0.0d0 .OR. Numbers (8) .LE. 0.0d0 .OR. Numbers (9) .LE. 0.0d0)) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
CALL ShowContinueError('...At least one of the four input parameters for the latent capacity degradation model')
CALL ShowContinueError('...is set to zero. Therefore, the latent degradation model will not be used for this simulation.')
END IF
! outdoor condenser node
IF (lAlphaBlanks(10)) THEN
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = 0
ELSE
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = &
GetOnlySingleNode(Alphas(10),ErrorsFound,TRIM(CurrentModuleObject),DXCoil(DXCoilNum)%Name, &
NodeType_Air,NodeConnectionType_OutsideAirReference,1,ObjectIsNotParent)
IF (.not. CheckOutAirNodeNumber(DXCoil(DXCoilNum)%CondenserInletNodeNum(1))) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", may be invalid')
CALL ShowContinueError(TRIM(cAlphaFields(10))//'="'//TRIM(Alphas(10))// &
'", node does not appear in an OutdoorAir:NodeList or as an OutdoorAir:Node.')
CALL ShowContinueError('This node needs to be included in an air system or the coil model will not be valid' &
//', and the simulation continues')
END IF
ENDIF
IF ((SameString(Alphas(11),'AirCooled')) .OR. lAlphaBlanks(11)) THEN
DXCoil(DXCoilNum)%CondenserType(1) = AirCooled
ELSEIF (SameString(Alphas(11),'EvaporativelyCooled')) THEN
DXCoil(DXCoilNum)%CondenserType(1) = EvapCooled
DXCoil(DXCoilNum)%ReportEvapCondVars = .TRUE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(11))//'="'//TRIM(Alphas(11))//'":')
CALL ShowContinueError('...must be AirCooled or EvaporativelyCooled.')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondEffect(1) = Numbers(10)
IF (DXCoil(DXCoilNum)%EvapCondEffect(1) .LT. 0.0d0 .OR. DXCoil(DXCoilNum)%EvapCondEffect(1) .GT. 1.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(10))//' cannot be < 0.0 or > 1.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(10),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondAirFlow(1) = Numbers(11)
IF (DXCoil(DXCoilNum)%EvapCondAirFlow(1) .LT. 0.0d0 .AND. DXCoil(DXCoilNum)%EvapCondAirFlow(1) /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(11))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(11),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(1) = Numbers(12)
IF (DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(1) .LT. 0.0d0 .AND. DXCoil(DXCoilNum)%EvapCondAirFlow(1) /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(12))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(12),2))//'].')
ErrorsFound = .TRUE.
END IF
!Set crankcase heater capacity
DXCoil(DXCoilNum)%CrankcaseHeaterCapacity = Numbers(13)
IF (DXCoil(DXCoilNum)%CrankcaseHeaterCapacity .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(13))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(13),2))//'].')
ErrorsFound = .TRUE.
END IF
!Set crankcase heater cutout temperature
DXCoil(DXCoilNum)%MaxOATCrankcaseHeater = Numbers(14)
IF (DXCoil(DXCoilNum)%RatedCOP(1) .GT. 0.0d0) THEN
DXCoil(DXCoilNum)%RatedEIR(1) = 1.d0 / DXCoil(DXCoilNum)%RatedCOP(1)
END IF
! Get Water System tank connections
! A12, \field Name of Water Storage Tank for Supply
DXCoil(DXCoilNum)%EvapWaterSupplyName = Alphas(12)
IF (lAlphaBlanks(12)) THEN
DXCoil(DXCoilNum)%EvapWaterSupplyMode = WaterSupplyFromMains
ELSE
DXCoil(DXCoilNum)%EvapWaterSupplyMode = WaterSupplyFromTank
CALL SetupTankDemandComponent(DXCoil(DXCoilNum)%Name,TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%EvapWaterSupplyName, ErrorsFound, DXCoil(DXCoilNum)%EvapWaterSupTankID, &
DXCoil(DXCoilNum)%EvapWaterTankDemandARRID )
ENDIF
!A13; \field Name of Water Storage Tank for Condensate Collection
DXCoil(DXCoilNum)%CondensateCollectName = Alphas(13)
IF (lAlphaBlanks(13)) THEN
DXCoil(DXCoilNum)%CondensateCollectMode = CondensateDiscarded
ELSE
DXCoil(DxCoilNum)%CondensateCollectMode = CondensateToTank
CALL SetupTankSupplyComponent(DXCoil(DXCoilNum)%Name,TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%CondensateCollectName, ErrorsFound, DXCoil(DXCoilNum)%CondensateTankID, &
DXCoil(DXCoilNum)%CondensateTankSupplyARRID )
END IF
! Basin heater power as a function of temperature must be greater than or equal to 0
DXCoil(DxCoilNum)%BasinHeaterPowerFTempDiff = Numbers(15)
IF(Numbers(15) .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(15))//' must be >= 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(15),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DxCoilNum)%BasinHeaterSetPointTemp = Numbers(16)
IF(DXCoil(DxCoilNum)%BasinHeaterPowerFTempDiff .GT. 0.0d0) THEN
IF(NumNumbers .LT. 16) THEN
DXCoil(DxCoilNum)%BasinHeaterSetPointTemp = 2.0d0
ENDIF
IF(DXCoil(DxCoilNum)%BasinHeaterSetPointTemp < 2.0d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", freeze possible')
CALL ShowContinueError('...'//trim(cNumericFields(16))//' is < 2 {C}. Freezing could occur.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(16),2))//'].')
END IF
END IF
IF(.NOT. lAlphaBlanks(14))THEN
DXCoil(DxCoilNum)%BasinHeaterSchedulePtr = GetScheduleIndex(Alphas(14))
IF(DXCoil(DxCoilNum)%BasinHeaterSchedulePtr .EQ. 0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(14))//'="'//TRIM(Alphas(14))//'".')
CALL ShowContinueError('Basin heater will be available to operate throughout the simulation.')
END IF
END IF
IF (.NOT. lAlphaBlanks(15) .AND. NumAlphas > 14) THEN
DXCoil(DXCoilNum)%SHRFTemp(1) = GetCurveIndex(Alphas(15)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%SHRFTemp(1) .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(15))//'="'//TRIM(Alphas(15))//'".')
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%SHRFTemp(1)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%SHRFTempCurveType(1)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(15))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%SHRFTemp(1))))
CALL ShowContinueError('Curve type must be Biquadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (.NOT. lAlphaBlanks(16) .AND. NumAlphas > 15) THEN
DXCoil(DXCoilNum)%SHRFFlow(1) = GetCurveIndex(Alphas(16)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%SHRFTemp(1) .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(16))//'="'//TRIM(Alphas(16))//'".')
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%SHRFFlow(1)))
CASE('QUADRATIC', 'CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(16))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%SHRFFlow(1))))
CALL ShowContinueError('Curve type must be quadratic or cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (DXCoil(DXCoilNum)%SHRFTemp(1) > 0 .AND. DXCoil(DXCoilNum)%SHRFFlow(1) > 0) THEN
DXCoil(DXCoilNum)%UserSHRCurveExists = .TRUE.
ENDIF
END DO ! end of the Doe2 DX coil loop
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting '//TRIM(CurrentModuleObject)//' input. '//&
'Preceding condition(s) causes termination.')
END IF
! Loop over the Multimode DX Coils and get & load the data
CurrentModuleObject='Coil:Cooling:DX:TwoStageWithHumidityControlMode'
DO DXCoilIndex = 1, NumDXMulModeCoils
CALL GetObjectItem(CurrentModuleObject,DXCoilIndex,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
DXCoilNum = DXCoilNum+1
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
! Initialize DataHeatBalance heat reclaim variable name for use by heat reclaim coils
HeatReclaimDXCoil(DXCoilNum)%Name = DXCoil(DXCoilNum)%Name
HeatReclaimDXCoil(DXCoilNum)%SourceType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilDX_CoolingTwoStageWHumControl
DXCoil(DXCoilNum)%Schedule = Alphas(2)
IF (lAlphaBlanks(2)) THEN
DXCoil(DXCoilNum)%SchedPtr = ScheduleAlwaysOn
ELSE
DXCoil(DXCoilNum)%SchedPtr = GetScheduleIndex(Alphas(2)) ! convert schedule name to pointer
IF (DXCoil(DXCoilNum)%SchedPtr .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(2))//'="'//TRIM(Alphas(2))//'".')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(3),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(4),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(3),Alphas(4),'Air Nodes')
!Set crankcase heater capacity
DXCoil(DXCoilNum)%CrankcaseHeaterCapacity = Numbers(1)
IF (DXCoil(DXCoilNum)%CrankcaseHeaterCapacity .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(1))//' must be >= 0.0,'// &
' entered value=['//trim(TrimSigDigits(Numbers(1),2))//'].')
ErrorsFound = .TRUE.
END IF
!Set crankcase heater cutout temperature
DXCoil(DXCoilNum)%MaxOATCrankcaseHeater = Numbers(2)
! Number of capacity stages
DXCoil(DXCoilNum)%NumCapacityStages = Numbers(3)
! Check if requested number of capacity stages exceeds limits
IF ((DXCoil(DXCoilNum)%NumCapacityStages .GT. MaxCapacityStages) .OR. (DXCoil(DXCoilNum)%NumCapacityStages .LT. 1)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cNumericFields(3))//' = '//TRIM(TrimSigDigits(DXCoil(DXCoilNum)%NumCapacityStages)))
CALL ShowContinueError('...Valid range is 1 to '//TRIM(TrimSigDigits(MaxCapacityStages)))
ErrorsFound=.TRUE.
END IF
! Number of enhanced dehumidification modes
DXCoil(DXCoilNum)%NumDehumidModes = Numbers(4)
! Check if requested number of enhanced dehumidification modes exceeds limits
IF ((DXCoil(DXCoilNum)%NumDehumidModes .GT. MaxDehumidModes) .OR. (DXCoil(DXCoilNum)%NumDehumidModes .LT. 0)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cNumericFields(4))//' = '//TRIM(TrimSigDigits(DXCoil(DXCoilNum)%NumDehumidModes)))
CALL ShowContinueError('...Valid range is 0 to '//TRIM(TrimSigDigits(MaxDehumidModes)))
ErrorsFound=.TRUE.
END IF
! Set starting alpha index for coil performance inputs
AlphaIndex = 5
! Loop through capacity stages and dehumidification modes
DO DehumidModeNum = 0, DXCoil(DXCoilNum)%NumDehumidModes
DO CapacityStageNum = 1, DXCoil(DXCoilNum)%NumCapacityStages
! Check if sufficient number of fields entered
IF ((AlphaIndex+1) .GT. NumAlphas) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not enough remaining fields for specified Number of Operating Modes.')
CALL ShowContinueError('...Need additional Coil Performance Object Type and Coil Performance Object Name fields.')
ErrorsFound=.TRUE.
ELSE
PerfObjectType = TRIM(Alphas(AlphaIndex))
PerfObjectName = Alphas(AlphaIndex+1)
PerfModeNum = DehumidModeNum*2 + CapacityStageNum
DXCoil(DXCoilNum)%CoilPerformanceType(PerfModeNum) = PerfObjectType
IF (SameString(PerfObjectType,'CoilPerformance:DX:Cooling')) THEN
DXCoil(DXCoilNum)%CoilPerformanceType_Num(PerfModeNum) = CoilPerfDX_CoolByPassEmpirical
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(AlphaIndex))//'="'//TRIM(PerfObjectType)//'".')
CALL ShowContinueError('Must be "CoilPerformance:DX:Cooling".')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%CoilPerformanceName(PerfModeNum) = PerfObjectName
! Get for CoilPerformance object
PerfObjectNum = GetObjectItemNum(PerfObjectType,PerfObjectName)
IF (PerfObjectNum > 0) THEN
CALL GetObjectItem(PerfObjectType,PerfObjectNum, &
Alphas2,NumAlphas2,Numbers2,NumNumbers2,IOStatus, &
NumBlank=lNumericBlanks2,AlphaBlank=lAlphaBlanks2, &
AlphaFieldNames=cAlphaFields2,NumericFieldNames=cNumericFields2)
DXCoil(DXCoilNum)%RatedTotCap(PerfModeNum) = Numbers2(1)
DXCoil(DXCoilNum)%RatedSHR(PerfModeNum) = Numbers2(2)
DXCoil(DXCoilNum)%RatedCOP(PerfModeNum) = Numbers2(3)
! Rated flow is immediately adjusted for bypass fraction if not autosized
DXCoil(DXCoilNum)%BypassedFlowFrac(PerfModeNum) = Numbers2(5)
DXCoil(DXCoilNum)%RatedAirVolFlowRate(PerfModeNum) = Numbers2(4)
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRate(PerfModeNum) /= Autosize) THEN
DXCoil(DXCoilNum)%RatedAirVolFlowRate(PerfModeNum)= &
DXCoil(DXCoilNum)%RatedAirVolFlowRate(PerfModeNum) * (1.d0-DXCoil(DXCoilNum)%BypassedFlowFrac(PerfModeNum))
ENDIF
DXCoil(DXCoilNum)%CCapFTemp(PerfModeNum) = GetCurveIndex(Alphas2(2)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFTemp(PerfModeNum) .EQ. 0) THEN
IF (lAlphaBlanks2(2)) THEN
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...required '//trim(cAlphaFields2(2))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields2(2))//'="'//TRIM(Alphas2(2))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(PerfModeNum)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(PerfModeNum)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields2(2))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(PerfModeNum))))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%CCapFFlow(PerfModeNum) = GetCurveIndex(Alphas2(3)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFFlow(PerfModeNum) .EQ. 0) THEN
IF (lAlphaBlanks2(3)) THEN
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...required '//trim(cAlphaFields2(3))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields2(3))//'="'//TRIM(Alphas2(3))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(PerfModeNum)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields2(3))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(PerfModeNum))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFTemp(PerfModeNum) = GetCurveIndex(Alphas2(4)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFTemp(PerfModeNum) .EQ. 0) THEN
IF (lAlphaBlanks2(4)) THEN
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...required '//trim(cAlphaFields2(4))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields2(4))//'="'//TRIM(Alphas2(4))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp(PerfModeNum)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%EIRTempModFacCurveType(PerfModeNum)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields2(4))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp(PerfModeNum))))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFFlow(PerfModeNum) = GetCurveIndex(Alphas2(5)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFFlow(PerfModeNum) .EQ. 0) THEN
IF (lAlphaBlanks2(5)) THEN
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...required '//trim(cAlphaFields2(5))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields2(5))//'="'//TRIM(Alphas2(5))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFFlow(PerfModeNum)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields2(5))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFFlow(PerfModeNum))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%PLFFPLR(PerfModeNum) = GetCurveIndex(Alphas2(6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%PLFFPLR(PerfModeNum) .EQ. 0) THEN
IF (lAlphaBlanks2(6)) THEN
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...required '//trim(cAlphaFields2(6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields2(6))//'="'//TRIM(Alphas2(6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Quadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(PerfModeNum)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields2(6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(PerfModeNum))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
IF(.NOT. ErrorsFound)THEN
! Test PLF curve minimum and maximum. Cap if less than 0.7 or greater than 1.0.
MinCurveVal = 999.0d0
MaxCurveVal = -999.0d0
CurveInput = 0.0d0
DO WHILE (CurveInput <= 1.0d0)
CurveVal = CurveValue(DXCoil(DXCoilNum)%PLFFPLR(PerfModeNum),CurveInput)
IF(CurveVal .LT. MinCurveVal)THEN
MinCurveVal = CurveVal
MinCurvePLR = CurveInput
END IF
IF(CurveVal .GT. MaxCurveVal)THEN
MaxCurveVal = CurveVal
MaxCurvePLR = CurveInput
END IF
CurveInput=CurveInput+0.01d0
END DO
IF(MinCurveVal .LT. 0.7d0)THEN
CALL ShowWarningError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields2(6))//' = '//TRIM(Alphas2(6))//' has out of range value.')
CALL ShowContinueError('...Curve minimum must be >= 0.7, '// &
'curve min at PLR = '//TRIM(TrimSigDigits(MinCurvePLR,2))//' is '//TRIM(TrimSigDigits(MinCurveVal,3)))
CALL ShowContinueError('...Setting curve minimum to 0.7 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(PerfModeNum),ErrorsFound,CurveMin=0.7d0)
END IF
IF(MaxCurveVal .GT. 1.0d0)THEN
CALL ShowWarningError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields2(6))//' = '//TRIM(Alphas2(6))//' has out of range value.')
CALL ShowContinueError('...Curve maximum must be <= 1.0, '// &
'curve max at PLR = '//TRIM(TrimSigDigits(MaxCurvePLR,2))//' is '//TRIM(TrimSigDigits(MaxCurveVal,3)))
CALL ShowContinueError('...Setting curve maximum to 1.0 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(PerfModeNum),ErrorsFound,CurveMax=1.0d0)
END IF
END IF
END IF
DXCoil(DXCoilNum)%Twet_Rated(PerfModeNum) = Numbers2(6)
DXCoil(DXCoilNum)%Gamma_Rated(PerfModeNum) = Numbers2(7)
DXCoil(DXCoilNum)%MaxONOFFCyclesperHour(PerfModeNum) = Numbers2(8)
DXCoil(DXCoilNum)%LatentCapacityTimeConstant(PerfModeNum) = Numbers2(9)
! Numbers2 (6) through (9) must all be greater than zero to use the latent capacity degradation model
IF ((Numbers2(6) .GT. 0.0d0 .OR. Numbers2(7) .GT. 0.0d0 .OR. Numbers2(8) .GT. 0.0d0 .OR. Numbers2(9) .GT. 0.0d0) .and. &
(Numbers2(6) .LE. 0.0d0 .OR. Numbers2(7) .LE. 0.0d0 .OR. Numbers2(8) .LE. 0.0d0 .OR. Numbers2(9) .LE. 0.0d0)) THEN
CALL ShowWarningError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'":')
CALL ShowContinueError('...At least one of the four input parameters for the latent capacity degradation model')
CALL ShowContinueError('...is set to zero. Therefore, the latent degradation model will not be used '// &
'for this simulation.')
END IF
! outdoor condenser node
IF (lAlphaBlanks2(7)) THEN
DXCoil(DXCoilNum)%CondenserInletNodeNum(PerfModeNum) = 0
ELSE
DXCoil(DXCoilNum)%CondenserInletNodeNum(PerfModeNum) = &
GetOnlySingleNode(Alphas2(7),ErrorsFound,PerfObjectType,PerfObjectName, &
NodeType_Air,NodeConnectionType_OutsideAirReference,1,ObjectIsNotParent)
IF (.not. CheckOutAirNodeNumber(DXCoil(DXCoilNum)%CondenserInletNodeNum(PerfModeNum))) THEN
CALL ShowWarningError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'":')
CALL ShowContinueError('may not be valid '//TRIM(cAlphaFields2(7))//'="'//TRIM(Alphas2(7))//'".')
CALL ShowContinueError('node does not appear in an OutdoorAir:NodeList or as an OutdoorAir:Node.')
CALL ShowContinueError('This node needs to be included in an air system or the coil model will not be valid' &
//', and the simulation continues')
END IF
ENDIF
IF ((SameString(Alphas2(8),'AirCooled')) .OR. lAlphaBlanks2(8)) THEN
DXCoil(DXCoilNum)%CondenserType(PerfModeNum) = AirCooled
ELSEIF (SameString(Alphas2(8),'EvaporativelyCooled')) THEN
DXCoil(DXCoilNum)%CondenserType(PerfModeNum) = EvapCooled
DXCoil(DXCoilNum)%ReportEvapCondVars = .true.
ELSE
CALL ShowSevereError(RoutineName//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields2(8))//'="'//TRIM(Alphas2(8))//'":')
CALL ShowContinueError('...must be AirCooled or EvaporativelyCooled.')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondEffect(PerfModeNum) = Numbers2(10)
IF (DXCoil(DXCoilNum)%EvapCondEffect(PerfModeNum) .LT. 0.0d0 .OR. &
DXCoil(DXCoilNum)%EvapCondEffect(PerfModeNum) .GT. 1.0d0) THEN
CALL ShowSevereError(RoutineName//trim(PerfObjectType)//'="'//trim(PerfObjectName)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields2(10))//' cannot be < 0.0 or > 1.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers2(10),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondAirFlow(PerfModeNum) = Numbers2(11)
IF (DXCoil(DXCoilNum)%EvapCondAirFlow(PerfModeNum) .LT. 0.0d0 .AND. &
DXCoil(DXCoilNum)%EvapCondAirFlow(PerfModeNum) /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(PerfObjectType)//'="'//trim(PerfObjectName)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields2(11))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers2(11),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(PerfModeNum) = Numbers2(12)
IF (DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(PerfModeNum) .LT. 0.0d0 .AND. &
DXCoil(DXCoilNum)%EvapCondAirFlow(PerfModeNum) /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(PerfObjectType)//'="'//trim(PerfObjectName)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields2(12))//' cannot be less than zero.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers2(12),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%RatedEIR(PerfModeNum) = 1.0d0 / DXCoil(DXCoilNum)%RatedCOP(PerfModeNum)
! read in user specified SHR modifer curves
IF (.NOT. lAlphaBlanks2(9) .AND. NumAlphas2 > 8) THEN
DXCoil(DXCoilNum)%SHRFTemp(PerfModeNum) = GetCurveIndex(Alphas2(9)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%SHRFTemp(PerfModeNum) .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields2(9))//'="'//TRIM(Alphas2(9))//'".')
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%SHRFTemp(PerfModeNum)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%SHRFTempCurveType(PerfModeNum)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields2(9))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%SHRFTemp(PerfModeNum))))
CALL ShowContinueError('Curve type must be Biquadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (.NOT. lAlphaBlanks2(10) .AND. NumAlphas2 > 9) THEN
DXCoil(DXCoilNum)%SHRFFlow(PerfModeNum) = GetCurveIndex(Alphas2(10)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%SHRFTemp(PerfModeNum) .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields2(10))//'="'//TRIM(Alphas2(10))//'".')
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%SHRFFlow(PerfModeNum)))
CASE('QUADRATIC', 'CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields2(10))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%SHRFFlow(PerfModeNum))))
CALL ShowContinueError('Curve type must be quadratic or cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (DXCoil(DXCoilNum)%SHRFTemp(PerfModeNum) > 0 .AND. DXCoil(DXCoilNum)%SHRFFlow(PerfModeNum) > 0) THEN
DXCoil(DXCoilNum)%UserSHRCurveExists = .TRUE.
ELSE
DXCoil(DXCoilNum)%UserSHRCurveExists = .FALSE.
ENDIF
ELSE ! invalid performance object
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('... not found '//TRIM(PerfObjectType)//'="'//TRIM(PerfObjectName)//'".')
ErrorsFound=.TRUE.
END IF ! end of valid performance object check
AlphaIndex = AlphaIndex + 2
END IF ! end of sufficient number of fields entered check
END DO ! End of multimode DX capacity stages loop
! Warn if inputs entered for unused capacity stages
DO CapacityStageNum = (DXCoil(DXCoilNum)%NumCapacityStages+1), MaxCapacityStages
IF ((AlphaIndex .LE. NumAlphas) .AND. &
((Alphas(AlphaIndex) .NE. Blank) .OR. (Alphas(AlphaIndex+1) .NE. Blank))) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
CALL ShowContinueError('...Capacity Stage '//TRIM(TrimSigDigits(CapacityStageNum))//' not active. Therefore,'// &
trim(cAlphaFields(AlphaIndex)))
CALL ShowContinueError('... and '//trim(cAlphaFields(AlphaIndex+1))//' fields will be ignored.')
END IF
AlphaIndex = AlphaIndex + 2
END DO ! End of unused capacity stages loop
END DO ! End of multimode DX dehumidification modes loop
! ! Warn if excess fields entered
! IF (NumAlphas .GE. AlphaIndex .and. ANY(Alphas(AlphaIndex:) /= Blank)) THEN
! CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
! CALL ShowContinueError('...too many remaining fields for specified Capacity Stages and Dehumidification Modes.')
! CALL ShowContinueError('...Excess Coil Performance Object Type and Coil Performance Object Name fields will be ignored.')
! ENDIF
! Get Water System tank connections
! A13, \field Name of Water Storage Tank for Supply
DXCoil(DXCoilNum)%EvapWaterSupplyName = Alphas(13)
IF (lAlphaBlanks(13)) THEN
DXCoil(DXCoilNum)%EvapWaterSupplyMode = WaterSupplyFromMains
ELSE
DXCoil(DXCoilNum)%EvapWaterSupplyMode = WaterSupplyFromTank
CALL SetupTankDemandComponent(DXCoil(DXCoilNum)%Name, TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%EvapWaterSupplyName, ErrorsFound, DXCoil(DXCoilNum)%EvapWaterSupTankID, &
DXCoil(DXCoilNum)%EvapWaterTankDemandARRID )
ENDIF
!A14; \field Name of Water Storage Tank for Condensate Collection
DXCoil(DXCoilNum)%CondensateCollectName = Alphas(14)
IF (lAlphaBlanks(14)) THEN
DXCoil(DXCoilNum)%CondensateCollectMode = CondensateDiscarded
ELSE
DXCoil(DxCoilNum)%CondensateCollectMode = CondensateToTank
CALL SetupTankSupplyComponent(DXCoil(DXCoilNum)%Name, TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%CondensateCollectName, ErrorsFound, DXCoil(DXCoilNum)%CondensateTankID, &
DXCoil(DXCoilNum)%CondensateTankSupplyARRID )
ENDIF
!Basin heater power as a function of temperature must be greater than or equal to 0
DXCoil(DxCoilNum)%BasinHeaterPowerFTempDiff = Numbers(5)
IF(Numbers(5) .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(5))//' must be >= 0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(5),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DxCoilNum)%BasinHeaterSetPointTemp = Numbers(6)
IF(DXCoil(DxCoilNum)%BasinHeaterPowerFTempDiff .GT. 0.0d0) THEN
IF(NumNumbers .LT. 6) THEN
DXCoil(DxCoilNum)%BasinHeaterSetPointTemp = 2.0d0
ENDIF
IF(DXCoil(DxCoilNum)%BasinHeaterSetPointTemp < 2.0d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", freeze possible')
CALL ShowContinueError('...'//trim(cNumericFields(6))//' is < 2 {C}. Freezing could occur.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(6),2))//'].')
END IF
END IF
IF(.NOT. lAlphaBlanks(15))THEN
DXCoil(DxCoilNum)%BasinHeaterSchedulePtr = GetScheduleIndex(Alphas(15))
IF(DXCoil(DxCoilNum)%BasinHeaterSchedulePtr .EQ. 0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(15))//'="'//TRIM(Alphas(15))//'".')
CALL ShowContinueError('Basin heater will be available to operate throughout the simulation.')
END IF
END IF
END DO ! end of the Multimode DX coil loop
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting '//TRIM(CurrentModuleObject)//' input. '//&
'Preceding condition(s) causes termination.')
END IF
!************* Read Heat Pump (DX Heating Coil) Input **********
CurrentModuleObject='Coil:Heating:DX:SingleSpeed'
DO DXCoilIndex = 1,NumDXHeatingCoils
DXCoilNum = DXCoilNum+1
CALL GetObjectItem(CurrentModuleObject,DXCoilIndex,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilDX_HeatingEmpirical
DXCoil(DXCoilNum)%Schedule = Alphas(2)
IF (lAlphaBlanks(2)) THEN
DXCoil(DXCoilNum)%SchedPtr = ScheduleAlwaysOn
ELSE
DXCoil(DXCoilNum)%SchedPtr = GetScheduleIndex(Alphas(2)) ! convert schedule name to pointer
IF (DXCoil(DXCoilNum)%SchedPtr .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(2))//'="'//TRIM(Alphas(2))//'".')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(3),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(4),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(3),Alphas(4),'Air Nodes')
DXCoil(DXCoilNum)%CCapFTemp(1) = GetCurveIndex(Alphas(5)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFTemp(1) .EQ. 0) THEN
IF (lAlphaBlanks(5)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(5))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(5))//'="'//TRIM(Alphas(5))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! only legal types are Quadratic, Biquadratic and Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1)))
CASE('QUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1)=Quadratic
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1)=Biquadratic
CASE('CUBIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1)=Cubic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(5))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1))))
CALL ShowContinueError('Curve type must be Biquadratic, Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%CCapFFlow(1) = GetCurveIndex(Alphas(6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFFlow(1) .EQ. 0) THEN
IF (lAlphaBlanks(6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(6))//'="'//TRIM(Alphas(6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFTemp(1) = GetCurveIndex(Alphas(7)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFTemp(1) .EQ. 0) THEN
IF (lAlphaBlanks(7)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(7))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(7))//'="'//TRIM(Alphas(7))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! only legal types are Quadratic, Biquadratic and Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp(1)))
CASE('QUADRATIC')
DXCoil(DXCoilNum)%EIRTempModFacCurveType(1)=Quadratic
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%EIRTempModFacCurveType(1)=Biquadratic
CASE('CUBIC')
DXCoil(DXCoilNum)%EIRTempModFacCurveType(1)=Cubic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(7))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp(1))))
CALL ShowContinueError('Curve type must be Biquadratic, Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFFlow(1) = GetCurveIndex(Alphas(8)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFFlow(1) .EQ. 0) THEN
IF (lAlphaBlanks(8)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(8))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(8))//'="'//TRIM(Alphas(8))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFFlow(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(8))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFFlow(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%PLFFPLR(1) = GetCurveIndex(Alphas(9)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%PLFFPLR(1) .EQ. 0) THEN
IF (lAlphaBlanks(9)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(9))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(9))//'="'//TRIM(Alphas(9))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Quadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(9))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
IF(.NOT. ErrorsFound)THEN
! Test PLF curve minimum and maximum. Cap if less than 0.7 or greater than 1.0.
MinCurveVal = 999.0d0
MaxCurveVal = -999.0d0
CurveInput = 0.0d0
DO WHILE (CurveInput <= 1.0d0)
CurveVal = CurveValue(DXCoil(DXCoilNum)%PLFFPLR(1),CurveInput)
IF(CurveVal .LT. MinCurveVal)THEN
MinCurveVal = CurveVal
MinCurvePLR = CurveInput
END IF
IF(CurveVal .GT. MaxCurveVal)THEN
MaxCurveVal = CurveVal
MaxCurvePLR = CurveInput
END IF
CurveInput=CurveInput+0.01d0
END DO
IF(MinCurveVal .LT. 0.7d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(9))//' = '//TRIM(Alphas(9))//' has out of range value.')
CALL ShowContinueError('...Curve minimum must be >= 0.7, '// &
'curve min at PLR = '//TRIM(TrimSigDigits(MinCurvePLR,2))//' is '//TRIM(TrimSigDigits(MinCurveVal,3)))
CALL ShowContinueError('...Setting curve minimum to 0.7 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMin=0.7d0)
END IF
IF(MaxCurveVal .GT. 1.0d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(9))//' = '//TRIM(Alphas(9))//' has out of range value.')
CALL ShowContinueError('...Curve maximum must be <= 1.0, '// &
'curve max at PLR = '//TRIM(TrimSigDigits(MaxCurvePLR,2))//' is '//TRIM(TrimSigDigits(MaxCurveVal,3)))
CALL ShowContinueError('...Setting curve maximum to 1.0 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMax=1.0d0)
END IF
END IF
END IF
! Only required for reverse cycle heat pumps
DXCoil(DXCoilNum)%DefrostEIRFT = GetCurveIndex(Alphas(10)) ! convert curve name to number
IF (SameString(Alphas(11),'ReverseCycle')) THEN
IF (DXCoil(DXCoilNum)%DefrostEIRFT .EQ. 0) THEN
IF (lAlphaBlanks(10)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(10))//' is blank.')
CALL ShowContinueError('...field is required because '//trim(cAlphaFields(11))//' is "ReverseCycle".')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(10))//'="'//TRIM(Alphas(10))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%DefrostEIRFT))
CASE('BIQUADRATIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(10))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%DefrostEIRFT)))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (SameString(Alphas(11),'ReverseCycle')) DXCoil(DXCoilNum)%DefrostStrategy = ReverseCycle
IF (SameString(Alphas(11),'Resistive')) DXCoil(DXCoilNum)%DefrostStrategy = Resistive
IF (DXCoil(DXCoilNum)%DefrostStrategy .EQ.0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(11))//'="'//TRIM(Alphas(11))//'".')
CALL ShowContinueError('...valid values for this field are ReverseCycle or Resistive.')
ErrorsFound = .TRUE.
END IF
IF (SameString(Alphas(12),'Timed')) DXCoil(DXCoilNum)%DefrostControl = Timed
IF (SameString(Alphas(12),'OnDemand')) DXCoil(DXCoilNum)%DefrostControl = OnDemand
IF (DXCoil(DXCoilNum)%DefrostControl .EQ.0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(12))//'="'//TRIM(Alphas(12))//'".')
CALL ShowContinueError('...valid values for this field are Timed or OnDemand.')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%RatedSHR(1) = 1.0d0
DXCoil(DXCoilNum)%RatedTotCap(1) = Numbers(1)
DXCoil(DXCoilNum)%RatedCOP(1) = Numbers(2)
DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) = Numbers(3)
DXCoil(DXCoilNum)%FanPowerPerEvapAirFlowRate(1) = Numbers(4)
!Set minimum OAT for heat pump compressor operation
DXCoil(DXCoilNum)%MinOATCompressor = Numbers(5)
DXCoil(DXCoilNum)%OATempCompressorOn = Numbers(6)
IF ( lNumericBlanks(6) .OR. lNumericBlanks(5)) THEN
DXCoil(DXCoilNum)%OATempCompressorOnOffBlank = .TRUE.
ELSE
DXCoil(DXCoilNum)%OATempCompressorOnOffBlank = .FALSE.
ENDIF
IF (DXCoil(DXCoilNum)%OATempCompressorOn .LT. DXCoil(DXCoilNum)%MinOATCompressor) &
DXCoil(DXCoilNum)%OATempCompressorOn = DXCoil(DXCoilNum)%MinOATCompressor
!Set maximum outdoor temp for defrost to occur
DXCoil(DXCoilNum)%MaxOATDefrost = Numbers(7)
!Set crankcase heater capacity
DXCoil(DXCoilNum)%CrankcaseHeaterCapacity = Numbers(8)
IF (DXCoil(DXCoilNum)%CrankcaseHeaterCapacity .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(8))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(8),2))//'].')
ErrorsFound = .TRUE.
END IF
!Set crankcase heater cutout temperature
DXCoil(DXCoilNum)%MaxOATCrankcaseHeater = Numbers(9)
!Set defrost time period
DXCoil(DXCoilNum)%DefrostTime = Numbers(10)
IF(DXCoil(DXCoilNum)%DefrostTime .EQ. 0.0d0 .AND. DXCoil(DXCoilNum)%DefrostControl .EQ. 1) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", ')
CALL ShowContinueError('...'//TRIM(cNumericFields(10))//' = 0.0 for defrost control = TIMED.')
END IF
!Set defrost capacity (for resistive defrost)
DXCoil(DXCoilNum)%DefrostCapacity = Numbers(11)
IF(DXCoil(DXCoilNum)%DefrostCapacity .EQ. 0.0d0 .AND. DXCoil(DXCoilNum)%DefrostStrategy .EQ. 2) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", ')
CALL ShowContinueError('...'//TRIM(cNumericFields(11))//' = 0.0 for defrost strategy = RESISTIVE.')
END IF
!Set Region number for calculating HSPF
DXCoil(DXCoilNum)%RegionNum = Numbers(12)
IF ( lNumericBlanks(12)) THEN
DXCoil(DXCoilNum)%RegionNum = 4
ENDIF
DXCoil(DXCoilNum)%RatedEIR(1) = 1.d0 / DXCoil(DXCoilNum)%RatedCOP(1)
!A13 is optional evaporator node name
IF ( lAlphaBlanks(13) ) THEN
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = 0
ELSE
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = &
GetOnlySingleNode(Alphas(13),ErrorsFound,TRIM(CurrentModuleObject),DXCoil(DXCoilNum)%Name, &
NodeType_Air,NodeConnectionType_OutsideAirReference,1,ObjectIsNotParent)
! warn if not an outdoor node, but allow
IF (.not. CheckOutAirNodeNumber(DXCoil(DXCoilNum)%CondenserInletNodeNum(1))) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", may be invalid')
CALL ShowContinueError(TRIM(cAlphaFields(13))//'="'//TRIM(Alphas(13))//&
'", node does not appear in an OutdoorAir:NodeList or as an OutdoorAir:Node.')
CALL ShowContinueError('This node needs to be included in an air system or the coil model will not be valid' &
//', and the simulation continues')
END IF
ENDIF
END DO ! end of the DX heating coil loop
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting '//TRIM(CurrentModuleObject)//' input. '//&
'Preceding condition(s) causes termination.')
END IF
CurrentModuleObject='Coil:Cooling:DX:TwoSpeed'
DO DXCoilIndex = 1,NumDXMulSpeedCoils
DXCoilNum = DXCoilNum+1
CALL GetObjectItem(CurrentModuleObject,DXCoilIndex,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
! Initialize DataHeatBalance heat reclaim variable name for use by heat reclaim coils
HeatReclaimDXCoil(DXCoilNum)%Name = DXCoil(DXCoilNum)%Name
HeatReclaimDXCoil(DXCoilNum)%SourceType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilDX_CoolingTwoSpeed
DXCoil(DXCoilNum)%Schedule = Alphas(2)
IF (lAlphaBlanks(2)) THEN
DXCoil(DXCoilNum)%SchedPtr = ScheduleAlwaysOn
ELSE
DXCoil(DXCoilNum)%SchedPtr = GetScheduleIndex(Alphas(2)) ! convert schedule name to pointer
IF (DXCoil(DXCoilNum)%SchedPtr .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(2))//'="'//TRIM(Alphas(2))//'".')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%RatedTotCap(1) = Numbers(1)
DXCoil(DXCoilNum)%RatedSHR(1) = Numbers(2)
DXCoil(DXCoilNum)%RatedCOP(1) = Numbers(3)
DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) = Numbers(4)
IF (.NOT. lNumericBlanks(5)) THEN
DXCoil(DXCoilNum)%InternalStaticPressureDrop = Numbers(5)
DXCoil(DXCoilNum)%RateWithInternalStaticAndFanObject = .TRUE.
ELSE
DXCoil(DXCoilNum)%InternalStaticPressureDrop = -999.d0
DXCoil(DXCoilNum)%RateWithInternalStaticAndFanObject = .FALSE.
ENDIF
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(3),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(4),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(3),Alphas(4),'Air Nodes')
DXCoil(DXCoilNum)%CCapFTemp(1) = GetCurveIndex(Alphas(5)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFTemp(1) .EQ. 0) THEN
IF (lAlphaBlanks(5)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(5))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(5))//'="'//TRIM(Alphas(5))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(5))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1))))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.true.
END SELECT
END IF
DXCoil(DXCoilNum)%CCapFFlow(1) = GetCurveIndex(Alphas(6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFFlow(1) .EQ. 0) THEN
IF (lAlphaBlanks(6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(6))//'="'//TRIM(Alphas(6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFTemp(1) = GetCurveIndex(Alphas(7)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFTemp(1) .EQ. 0) THEN
IF (lAlphaBlanks(7)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(7))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(7))//'="'//TRIM(Alphas(7))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp(1)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%EIRTempModFacCurveType(1)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(7))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp(1))))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFFlow(1) = GetCurveIndex(Alphas(8)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFFlow(1) .EQ. 0) THEN
IF (lAlphaBlanks(8)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(8))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(8))//'="'//TRIM(Alphas(8))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFFlow(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(8))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFFlow(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%PLFFPLR(1) = GetCurveIndex(Alphas(9)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%PLFFPLR(1) .EQ. 0) THEN
IF (lAlphaBlanks(9)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(9))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(9))//'="'//TRIM(Alphas(9))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Quadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(1)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(9))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
IF(.NOT. ErrorsFound)THEN
! Test PLF curve minimum and maximum. Cap if less than 0.7 or greater than 1.0.
MinCurveVal = 999.0d0
MaxCurveVal = -999.0d0
CurveInput = 0.0d0
DO WHILE (CurveInput <= 1.0d0)
CurveVal = CurveValue(DXCoil(DXCoilNum)%PLFFPLR(1),CurveInput)
IF(CurveVal .LT. MinCurveVal)THEN
MinCurveVal = CurveVal
MinCurvePLR = CurveInput
END IF
IF(CurveVal .GT. MaxCurveVal)THEN
MaxCurveVal = CurveVal
MaxCurvePLR = CurveInput
END IF
CurveInput=CurveInput+0.01d0
END DO
IF(MinCurveVal .LT. 0.7d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(9))//' = '//TRIM(Alphas(9))//' has out of range value.')
CALL ShowContinueError('...Curve minimum must be >= 0.7, '// &
'curve min at PLR = '//TRIM(TrimSigDigits(MinCurvePLR,2))//' is '//TRIM(TrimSigDigits(MinCurveVal,3)))
CALL ShowContinueError('...Setting curve minimum to 0.7 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMin=0.7d0)
END IF
IF(MaxCurveVal .GT. 1.0d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(9))//' = '//TRIM(Alphas(9))//' has out of range value.')
CALL ShowContinueError('...Curve maximum must be <= 1.0, '// &
'curve max at PLR = '//TRIM(TrimSigDigits(MaxCurvePLR,2))//' is '//TRIM(TrimSigDigits(MaxCurveVal,3)))
CALL ShowContinueError('...Setting curve maximum to 1.0 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMax=1.0d0)
END IF
END IF
END IF
DXCoil(DXCoilNum)%RatedEIR(1) = 1.d0 / DXCoil(DXCoilNum)%RatedCOP(1)
DXCoil(DXCoilNum)%RatedTotCap2 = Numbers(6)
DXCoil(DXCoilNum)%RatedSHR2 = Numbers(7)
DXCoil(DXCoilNum)%RatedCOP2 = Numbers(8)
DXCoil(DXCoilNum)%RatedAirVolFlowRate2 = Numbers(9)
DXCoil(DXCoilNum)%CCapFTemp2 = GetCurveIndex(Alphas(10)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFTemp2 .EQ. 0) THEN
IF (lAlphaBlanks(10)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(10))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(10))//'="'//TRIM(Alphas(10))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp2))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(2)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(10))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp2)))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%EIRFTemp2 = GetCurveIndex(Alphas(11)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%EIRFTemp2 .EQ. 0) THEN
IF (lAlphaBlanks(11)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(11))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(11))//'="'//TRIM(Alphas(11))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp2))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%EIRTempModFacCurveType(2)=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(11))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%EIRFTemp2)))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
! outdoor condenser node
IF (lAlphaBlanks(12)) THEN
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = 0
ELSE
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = &
GetOnlySingleNode(Alphas(12),ErrorsFound,TRIM(CurrentModuleObject),DXCoil(DXCoilNum)%Name, &
NodeType_Air,NodeConnectionType_OutsideAirReference,1,ObjectIsNotParent)
IF (.not. CheckOutAirNodeNumber(DXCoil(DXCoilNum)%CondenserInletNodeNum(1))) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", may be invalid')
CALL ShowContinueError(TRIM(cAlphaFields(12))//'="'//TRIM(Alphas(12))//&
'", node does not appear in an OutdoorAir:NodeList or as an OutdoorAir:Node.')
CALL ShowContinueError('This node needs to be included in an air system or the coil model will not be valid' &
//', and the simulation continues')
END IF
ENDIF
IF ((SameString(Alphas(13),'AirCooled')) .OR. lAlphaBlanks(13))THEN
DXCoil(DXCoilNum)%CondenserType(1) = AirCooled
ELSEIF (SameString(Alphas(13),'EvaporativelyCooled')) THEN
DXCoil(DXCoilNum)%CondenserType(1) = EvapCooled
DXCoil(DXCoilNum)%ReportEvapCondVars = .TRUE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(13))//'="'//TRIM(Alphas(13))//'":')
CALL ShowContinueError('...must be AirCooled or EvaporativelyCooled.')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondEffect(1) = Numbers(10)
IF (DXCoil(DXCoilNum)%EvapCondEffect(1) .LT. 0.0d0 .OR. DXCoil(DXCoilNum)%EvapCondEffect(1) .GT. 1.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(9))//' cannot be < 0.0 or > 1.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(10),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondAirFlow(1) = Numbers(11)
IF (DXCoil(DXCoilNum)%EvapCondAirFlow(1) .LT. 0.0d0 .AND. DXCoil(DXCoilNum)%EvapCondAirFlow(1) /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(10))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(11),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(1) = Numbers(12)
IF (DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(1) .LT. 0.0d0 .AND. &
DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(1) /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(11))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(12),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondEffect2 = Numbers(13)
IF (DXCoil(DXCoilNum)%EvapCondEffect2 .LT. 0.0d0 .OR. DXCoil(DXCoilNum)%EvapCondEffect2 .GT. 1.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(12))//' cannot be cannot be < 0.0 or > 1.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(13),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondAirFlow2 = Numbers(14)
IF (DXCoil(DXCoilNum)%EvapCondAirFlow2 .LT. 0.0d0 .AND. DXCoil(DXCoilNum)%EvapCondAirFlow2 /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(13))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(14),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2 = Numbers(15)
IF (DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2 .LT. 0.0d0 .AND. DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2 /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(14))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(15),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%RatedEIR2 = 1.d0 / DXCoil(DXCoilNum)%RatedCOP2
! Get Water System tank connections
! A14, \field Name of Water Storage Tank for Supply
DXCoil(DXCoilNum)%EvapWaterSupplyName = Alphas(14)
IF (lAlphaBlanks(14)) THEN
DXCoil(DXCoilNum)%EvapWaterSupplyMode = WaterSupplyFromMains
ELSE
DXCoil(DXCoilNum)%EvapWaterSupplyMode = WaterSupplyFromTank
CALL SetupTankDemandComponent(DXCoil(DXCoilNum)%Name, TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%EvapWaterSupplyName, ErrorsFound, DXCoil(DXCoilNum)%EvapWaterSupTankID, &
DXCoil(DXCoilNum)%EvapWaterTankDemandARRID )
ENDIF
!A15; \field Name of Water Storage Tank for Condensate Collection
DXCoil(DXCoilNum)%CondensateCollectName = Alphas(15)
IF (lAlphaBlanks(15)) THEN
DXCoil(DXCoilNum)%CondensateCollectMode = CondensateDiscarded
ELSE
DXCoil(DxCoilNum)%CondensateCollectMode = CondensateToTank
CALL SetupTankSupplyComponent(DXCoil(DXCoilNum)%Name, TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%CondensateCollectName, ErrorsFound, DXCoil(DXCoilNum)%CondensateTankID, &
DXCoil(DXCoilNum)%CondensateTankSupplyARRID )
ENDIF
! Basin heater power as a function of temperature must be greater than or equal to 0
DXCoil(DxCoilNum)%BasinHeaterPowerFTempDiff = Numbers(16)
IF(Numbers(16) .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(15))//' must be >= 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(16),2))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DxCoilNum)%BasinHeaterSetPointTemp = Numbers(17)
IF(DXCoil(DxCoilNum)%BasinHeaterPowerFTempDiff .GT. 0.0d0) THEN
IF(NumNumbers .LT. 17) THEN
DXCoil(DxCoilNum)%BasinHeaterSetPointTemp = 2.0d0
ENDIF
IF(DXCoil(DxCoilNum)%BasinHeaterSetPointTemp < 2.0d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", freeze possible')
CALL ShowContinueError('...'//trim(cNumericFields(16))//' is < 2 {C}. Freezing could occur.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(17),2))//'].')
END IF
END IF
IF(.NOT. lAlphaBlanks(16))THEN
DXCoil(DxCoilNum)%BasinHeaterSchedulePtr = GetScheduleIndex(Alphas(16))
IF(DXCoil(DxCoilNum)%BasinHeaterSchedulePtr .EQ. 0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(16))//'="'//TRIM(Alphas(16))//'".')
CALL ShowContinueError('Basin heater will be available to operate throughout the simulation.')
END IF
END IF
IF (.NOT. lAlphaBlanks(17) .AND. NumAlphas > 16) THEN
DXCoil(DXCoilNum)%SHRFTemp(1) = GetCurveIndex(Alphas(17)) ! convert curve name to number
!DXCoil(DXCoilNum)%SHRFTemp2 = DXCoil(DXCoilNum)%SHRFTemp(1)
IF (DXCoil(DXCoilNum)%SHRFTemp(1) .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(17))//'="'//TRIM(Alphas(17))//'".')
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%SHRFTemp(1)))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%SHRFTempCurveType(1)=Biquadratic
DXCoil(DXCoilNum)%SHRFTempCurveType2 = DXCoil(DXCoilNum)%SHRFTempCurveType(1)
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(17))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%SHRFTemp(1))))
CALL ShowContinueError('Curve type must be Biquadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (.NOT. lAlphaBlanks(18) .AND. NumAlphas > 17) THEN
DXCoil(DXCoilNum)%SHRFFlow(1) = GetCurveIndex(Alphas(18)) ! convert curve name to number
!DXCoil(DXCoilNum)%SHRFFlow2 = DXCoil(DXCoilNum)%SHRFFlow(1)
IF (DXCoil(DXCoilNum)%SHRFTemp(1) .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(18))//'="'//TRIM(Alphas(18))//'".')
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%SHRFFlow(1)))
CASE('QUADRATIC', 'CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(18))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%SHRFFlow(1))))
CALL ShowContinueError('Curve type must be quadratic or cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (.NOT. lAlphaBlanks(19) .AND. NumAlphas > 18) THEN
DXCoil(DXCoilNum)%SHRFTemp2 = GetCurveIndex(Alphas(19)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%SHRFTemp2 .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(19))//'="'//TRIM(Alphas(19))//'".')
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%SHRFTemp2))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%SHRFTempCurveType2=Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(19))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%SHRFTemp2)))
CALL ShowContinueError('Curve type must be Biquadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (.NOT. lAlphaBlanks(20) .AND. NumAlphas > 19) THEN
DXCoil(DXCoilNum)%SHRFFlow2 = GetCurveIndex(Alphas(20)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%SHRFTemp2 .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(20))//'="'//TRIM(Alphas(20))//'".')
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%SHRFFlow2))
CASE('QUADRATIC', 'CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(20))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%SHRFFlow2)))
CALL ShowContinueError('Curve type must be quadratic or cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (DXCoil(DXCoilNum)%SHRFTemp(1) > 0 .and. DXCoil(DXCoilNum)%SHRFFlow(1) > 0 .and. &
DXCoil(DXCoilNum)%SHRFTemp2 > 0 .and. DXCoil(DXCoilNum)%SHRFFlow2 > 0 ) THEN
DXCoil(DXCoilNum)%UserSHRCurveExists = .TRUE.
ELSE
DXCoil(DXCoilNum)%UserSHRCurveExists = .FALSE.
ENDIF
END DO
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting '//TRIM(CurrentModuleObject)//' input. '//&
'Preceding condition(s) causes termination.')
END IF
! Loop over the DX Water Heater Coils and get & load the data
CurrentModuleObject='Coil:WaterHeating:AirToWaterHeatPump'
DO DXHPWaterHeaterCoilNum = 1, NumDXHeatPumpWaterHeaterCoils
CALL GetObjectItem(CurrentModuleObject,DXHPWaterHeaterCoilNum,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
DXCoilNum = DXCoilNum+1
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilDX_HeatPumpWaterHeater
DXCoil(DXCoilNum)%SchedPtr = 0 ! heat pump water heater DX coil has no schedule
! Store the HPWH DX coil heating capacity in RatedTotCap2. After backing off pump and fan heat,
! move to RatedTotCap() for use by DX coil
DXCoil(DXCoilNum)%RatedTotCap2 = Numbers(1)
IF(DXCoil(DXCoilNum)%RatedTotCap2 .LE. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(1))//' must be > 0.0,'// &
' entered value=['//trim(TrimSigDigits(Numbers(1),2))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%RatedCOP(1) = Numbers(2)
IF(DXCoil(DXCoilNum)%RatedCOP(1) .LE. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(2))//' must be > 0.0,'// &
' entered value=['//trim(TrimSigDigits(Numbers(2),2))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%RatedSHR(1) = Numbers(3)
IF(DXCoil(DXCoilNum)%RatedSHR(1) .LE. 0.0d0 .OR. DXCoil(DXCoilNum)%RatedSHR(1) .GT. 1.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(3))//' must be > 0 and <= 1. '// &
' entered value=['//trim(TrimSigDigits(Numbers(3),3))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%RatedInletDBTemp = Numbers(4)
IF(DXCoil(DXCoilNum)%RatedInletDBTemp .LE. 5.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(4))//' must be > 5 {C}. '// &
' entered value=['//trim(TrimSigDigits(Numbers(4),1))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%RatedInletWBTemp = Numbers(5)
IF(DXCoil(DXCoilNum)%RatedInletWBTemp .LE. 5.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(5))//' must be > 5 {C}. '// &
' entered value=['//trim(TrimSigDigits(Numbers(5),1))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%RatedInletWaterTemp = Numbers(6)
IF(DXCoil(DXCoilNum)%RatedInletWaterTemp .LE. 25.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(6))//' must be > 25 {C}. '// &
' entered value=['//trim(TrimSigDigits(Numbers(6),1))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) = Numbers(7)
IF(DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) /= AutoCalculate) THEN
IF(DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) .LE. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(7))//' must be > 0.0. '// &
' entered value=['//trim(TrimSigDigits(Numbers(7),3))//'].')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow = Numbers(8)
! move to init
IF(DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow /= AutoCalculate) THEN
IF(DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow .LE. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(8))//' must be > 0.0 '// &
' entered value=['//trim(TrimSigDigits(Numbers(8),3))//'].')
ErrorsFound=.TRUE.
END IF
! check the range of flow rate to be >= 1 gpm/ton and <= 5 gpm/ton
IF(DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow/DXCoil(DXCoilNum)%RatedTotCap2 .LT. 1.79405d-8 .OR. &
DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow/DXCoil(DXCoilNum)%RatedTotCap2 .GT. 8.97024d-8)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", outside range')
CALL ShowContinueError('...'//TRIM(cNumericFields(8))//' per watt of '//TRIM(cNumericFields(1))// &
' is outside the recommended range of >= 1.79405E-8 m3/s/W (0.083 gpm/MBH) and <= 8.97024E-8 m3/s/W (0.417 gpm/MBH).')
CALL ShowContinueError('...Entered Flow rate per watt = ['// &
TRIM(TrimSigDigits((DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow/DXCoil(DXCoilNum)%RatedTotCap2),10))//'].')
END IF
END IF
IF(SameString(Alphas(2),'Yes') .OR. SameString(Alphas(2),'No')) THEN
! initialized to TRUE on allocate
IF(SameString(Alphas(2),'No'))DXCoil(DXCoilNum)%FanPowerIncludedInCOP = .FALSE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError(',,,invalid choice for '//TRIM(cAlphaFields(2))//'. Entered choice = '//TRIM(Alphas(2)))
CALL ShowContinueError('Valid choices are Yes or No.')
ErrorsFound=.TRUE.
END IF
IF(SameString(Alphas(3),'Yes') .OR. SameString(Alphas(3),'No')) THEN
! initialized to FALSE on allocate
IF(SameString(Alphas(3),'Yes'))DXCoil(DXCoilNum)%CondPumpPowerInCOP = .TRUE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError(',,,invalid choice for '//TRIM(cAlphaFields(3))//'. Entered choice = '//TRIM(Alphas(3)))
CALL ShowContinueError('Valid choices are Yes or No.')
ErrorsFound=.TRUE.
END IF
IF(SameString(Alphas(4),'Yes') .OR. SameString(Alphas(4),'No')) THEN
! initialized to FALSE on allocate
IF(SameString(Alphas(4),'Yes'))DXCoil(DXCoilNum)%CondPumpHeatInCapacity = .TRUE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError(',,,invalid choice for '//TRIM(cAlphaFields(4))//'. Entered choice = '//TRIM(Alphas(4)))
CALL ShowContinueError('Valid choices are Yes or No.')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%HPWHCondPumpElecNomPower = Numbers(9)
IF(DXCoil(DXCoilNum)%HPWHCondPumpElecNomPower .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(9))//' must be >= 0.0 '// &
' entered value=['//trim(TrimSigDigits(Numbers(9),3))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%HPWHCondPumpFracToWater = Numbers(10)
IF(DXCoil(DXCoilNum)%HPWHCondPumpFracToWater .LE. 0.0d0 .OR. DXCoil(DXCoilNum)%HPWHCondPumpFracToWater .GT. 1.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(10))//' must be >= 0 and <= 1. '// &
' entered value=['//trim(TrimSigDigits(Numbers(10),3))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(5),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(6),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(5),Alphas(6),'Air Nodes')
DXCoil(DXCoilNum)%WaterInNode = &
GetOnlySingleNode(Alphas(7),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Inlet,2,ObjectIsNotParent)
DXCoil(DXCoilNum)%WaterOutNode = &
GetOnlySingleNode(Alphas(8),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Outlet,2,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(7),Alphas(8),'Water Nodes')
DXCoil(DXCoilNum)%CrankcaseHeaterCapacity = Numbers(11)
IF(DXCoil(DXCoilNum)%CrankcaseHeaterCapacity .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(11))//' must be >= 0.0 '// &
' entered value=['//trim(TrimSigDigits(Numbers(11),1))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%MaxOATCrankcaseHeater = Numbers(12)
IF(DXCoil(DXCoilNum)%MaxOATCrankcaseHeater .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(12))//' must be >= 0 {C}. '// &
' entered value=['//trim(TrimSigDigits(Numbers(12),1))//'].')
ErrorsFound=.TRUE.
END IF
IF(SameString(Alphas(9),'DryBulbTemperature'))THEN
DXCoil(DXCoilNum)%InletAirTemperatureType = DryBulbIndicator
ELSEIF(SameString(Alphas(9),'WetBulbTemperature'))THEN
DXCoil(DXCoilNum)%InletAirTemperatureType = WetBulbIndicator
ELSE
! wrong temperature type selection
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(9))//' must be DryBulbTemperature or WetBulbTemperature.')
CALL ShowContinueError('...entered value="'//trim(Alphas(9))//'".')
ErrorsFound = .TRUE.
END IF
! set rated inlet air temperature for curve object verification
IF(DXCoil(DXCoilNum)%InletAirTemperatureType .EQ. WetBulbIndicator) THEN
InletAirTemp = DXCoil(DXCoilNum)%RatedInletWBTemp
ELSE
InletAirTemp = DXCoil(DXCoilNum)%RatedInletDBTemp
END IF
! set rated water temperature for curve object verification
InletWaterTemp = DXCoil(DXCoilNum)%RatedInletWaterTemp
IF (.NOT. lAlphaBlanks(10)) THEN
DXCoil(DXCoilNum)%HCapFTemp = GetCurveIndex(Alphas(10))
IF (DXCoil(DXCoilNum)%HCapFTemp .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(10))//'="'//TRIM(Alphas(10))//'".')
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are BiQuadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%HCapFTemp))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%HCapFTempCurveType = Biquadratic
HeatCapFTemp = CurveValue(DXCoil(DXCoilNum)%HCapFTemp,InletAirTemp,InletWaterTemp)
CASE('CUBIC')
DXCoil(DXCoilNum)%HCapFTempCurveType = Cubic
HeatCapFTemp = CurveValue(DXCoil(DXCoilNum)%HCapFTemp,InletAirTemp)
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(10))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%HCapFTemp)))
CALL ShowContinueError('Curve type must be BiQuadratic or Cubic.')
ErrorsFound=.TRUE.
HeatCapFTemp = 1.0d0
END SELECT
IF(ABS(HeatCapFTemp - 1.0d0) .GT. 0.05d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
! could remove name from the field for output
CALL ShowContinueError('...The '//TRIM(cAlphaFields(10))//' should be normalized to 1.0 at the rating point.')
CALL ShowContinueError('...Curve output at the rating point = '//TrimSigDigits(HeatCapFTemp,3))
CALL ShowContinueError('...The simulation continues using the user-specified curve.')
END IF
END IF
END IF
IF (.NOT. lAlphaBlanks(11)) THEN
DXCoil(DXCoilNum)%HCapFAirFlow = GetCurveIndex(Alphas(11))
IF (DXCoil(DXCoilNum)%HCapFAirFlow .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(11))//'="'//TRIM(Alphas(11))//'".')
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Cubic or Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%HCapFAirFlow))
CASE('CUBIC')
HeatCapFAirFlow = CurveValue(DXCoil(DXCoilNum)%HCapFAirFlow,1.0d0)
CASE('QUADRATIC')
HeatCapFAirFlow = CurveValue(DXCoil(DXCoilNum)%HCapFAirFlow,1.0d0)
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(11))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%HCapFAirFlow)))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
HeatCapFAirFlow = 1.0d0
END SELECT
IF(ABS(HeatCapFAirFlow - 1.0d0) .GT. 0.05d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
! could remove name from the field for output
CALL ShowContinueError('...The '//TRIM(cAlphaFields(11))//' should be normalized to 1.0 at the rating point.')
CALL ShowContinueError('...Curve output at an air flow fraction of 1 = ' &
//TrimSigDigits(HeatCapFAirFlow,3))
CALL ShowContinueError('...The simulation continues using the user-specified curve.')
END IF
END IF
END IF
IF (.NOT. lAlphaBlanks(12)) THEN
DXCoil(DXCoilNum)%HCapFWaterFlow = GetCurveIndex(Alphas(12))
IF (DXCoil(DXCoilNum)%HCapFWaterFlow .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(12))//'="'//TRIM(Alphas(12))//'".')
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Cubic or Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%HCapFWaterFlow))
CASE('CUBIC')
HeatCapFWaterFlow = CurveValue(DXCoil(DXCoilNum)%HCapFWaterFlow,1.0d0)
CASE('QUADRATIC')
HeatCapFWaterFlow = CurveValue(DXCoil(DXCoilNum)%HCapFWaterFlow,1.0d0)
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(12))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%HCapFWaterFlow)))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
HeatCapFWaterFlow = 1.0d0
END SELECT
IF(ABS(HeatCapFWaterFlow - 1.0d0) .GT. 0.05d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
! could remove name from the field for output
CALL ShowContinueError('...The '//TRIM(cAlphaFields(11))//' should be normalized to 1.0 at the rating point.')
CALL ShowContinueError('...Curve output at an air flow fraction of 1 = ' &
//TrimSigDigits(HeatCapFWaterFlow,3))
CALL ShowContinueError('...The simulation continues using the user-specified curve.')
END IF
END IF
END IF
IF (.NOT. lAlphaBlanks(13)) THEN
DXCoil(DXCoilNum)%HCOPFTemp = GetCurveIndex(Alphas(13))
IF (DXCoil(DXCoilNum)%HCOPFTemp .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(13))//'="'//TRIM(Alphas(13))//'".')
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are BiQuadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%HCOPFTemp))
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%HCOPFTempCurveType = Biquadratic
HeatCOPFTemp = CurveValue(DXCoil(DXCoilNum)%HCOPFTemp,InletAirTemp,InletWaterTemp)
CASE('CUBIC')
DXCoil(DXCoilNum)%HCOPFTempCurveType = Cubic
HeatCOPFTemp = CurveValue(DXCoil(DXCoilNum)%HCOPFTemp,InletAirTemp)
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(13))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%HCOPFTemp)))
CALL ShowContinueError('Curve type must be BiQuadratic or Cubic.')
ErrorsFound=.TRUE.
HeatCOPFTemp = 1.0d0
END SELECT
IF(ABS(HeatCOPFTemp - 1.0d0) .GT. 0.05d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
! could remove name from the field for output
CALL ShowContinueError('...The '//TRIM(cAlphaFields(13))//' should be normalized to 1.0 at the rating point.')
CALL ShowContinueError('...Curve output at an air flow fraction of 1 = ' &
//TrimSigDigits(HeatCOPFTemp,3))
CALL ShowContinueError('...The simulation continues using the user-specified curve.')
END IF
END IF
END IF
IF (.NOT. lAlphaBlanks(14)) THEN
DXCoil(DXCoilNum)%HCOPFAirFlow = GetCurveIndex(Alphas(14))
IF (DXCoil(DXCoilNum)%HCOPFAirFlow .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(14))//'="'//TRIM(Alphas(14))//'".')
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Cubic or Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%HCOPFAirFlow))
CASE('CUBIC')
HeatCOPFAirFlow = CurveValue(DXCoil(DXCoilNum)%HCOPFAirFlow,1.0d0)
CASE('QUADRATIC')
HeatCOPFAirFlow = CurveValue(DXCoil(DXCoilNum)%HCOPFAirFlow,1.0d0)
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(14))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%HCOPFAirFlow)))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
HeatCOPFAirFlow = 1.0d0
END SELECT
IF(ABS(HeatCOPFAirFlow - 1.0d0) .GT. 0.05d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
! could remove name from the field for output
CALL ShowContinueError('...The '//TRIM(cAlphaFields(14))//' should be normalized to 1.0 at the rating point.')
CALL ShowContinueError('...Curve output at an air flow fraction of 1 = ' &
//TrimSigDigits(HeatCOPFAirFlow,3))
CALL ShowContinueError('...The simulation continues using the user-specified curve.')
END IF
END IF
END IF
IF (.NOT. lAlphaBlanks(15)) THEN
DXCoil(DXCoilNum)%HCOPFWaterFlow = GetCurveIndex(Alphas(15))
IF (DXCoil(DXCoilNum)%HCOPFWaterFlow .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(15))//'="'//TRIM(Alphas(15))//'".')
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Cubic or Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%HCOPFWaterFlow))
CASE('CUBIC')
HeatCOPFWaterFlow = CurveValue(DXCoil(DXCoilNum)%HCOPFWaterFlow,1.0d0)
CASE('QUADRATIC')
HeatCOPFWaterFlow = CurveValue(DXCoil(DXCoilNum)%HCOPFWaterFlow,1.0d0)
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(15))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%HCOPFWaterFlow)))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
HeatCOPFWaterFlow = 1.0d0
END SELECT
IF(ABS(HeatCOPFWaterFlow - 1.0d0) .GT. 0.05d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'":')
! could remove name from the field for output
CALL ShowContinueError('...The '//TRIM(cAlphaFields(15))//' should be normalized to 1.0 at the rating point.')
CALL ShowContinueError('...Curve output at a water flow fraction of 1 = ' &
//TrimSigDigits(HeatCOPFWaterFlow,3))
CALL ShowContinueError('...The simulation continues using the user-specified curve.')
END IF
END IF
END IF
IF (.NOT. lAlphaBlanks(16)) THEN
DXCoil(DXCoilNum)%PLFFPLR(1) = GetCurveIndex(Alphas(16))
IF (DXCoil(DXCoilNum)%PLFFPLR(1) .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(16))//'="'//TRIM(Alphas(16))//'".')
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Cubic or Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(1)))
CASE('CUBIC')
CASE('QUADRATIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(16))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%PLFFPLR(1))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.true.
END SELECT
IF(.NOT. ErrorsFound)THEN
! Test PLF curve minimum and maximum. Cap if less than 0.7 or greater than 1.0.
MinCurveVal = 999.0d0
MaxCurveVal = -999.0d0
CurveInput = 0.0d0
DO WHILE (CurveInput <= 1.0d0)
CurveVal = CurveValue(DXCoil(DXCoilNum)%PLFFPLR(1),CurveInput)
IF(CurveVal .LT. MinCurveVal)THEN
MinCurveVal = CurveVal
MinCurvePLR = CurveInput
END IF
IF(CurveVal .GT. MaxCurveVal)THEN
MaxCurveVal = CurveVal
MaxCurvePLR = CurveInput
END IF
CurveInput=CurveInput+0.01d0
END DO
IF(MinCurveVal .LT. 0.7d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(16))//' = '//TRIM(Alphas(16))//' has out of range value.')
CALL ShowContinueError('...Curve minimum must be >= 0.7, '// &
'curve min at PLR = '//TRIM(TrimSigDigits(MinCurvePLR,2))//' is '//TRIM(TrimSigDigits(MinCurveVal,3)))
CALL ShowContinueError('...Setting curve minimum to 0.7 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMin=0.7d0)
END IF
IF(MaxCurveVal .GT. 1.0d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(16))//' = '//TRIM(Alphas(16))//' has out of range value.')
CALL ShowContinueError('...Curve maximum must be <= 1.0, '// &
'curve max at PLR = '//TRIM(TrimSigDigits(MaxCurvePLR,2))//' is '//TRIM(TrimSigDigits(MaxCurveVal,3)))
CALL ShowContinueError('...Setting curve maximum to 1.0 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMax=1.0d0)
END IF
END IF
END IF
END IF
! assume compressor resides at the inlet to the DX Coil
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = DXCoil(DXCoilNum)%AirInNode
! set condenser type as HPWH
DXCoil(DXCoilNum)%CondenserType(1) = WaterHeater
END DO ! end of the DX water heater coil loop
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting '//TRIM(CurrentModuleObject)//' input. '// &
'Preceding condition(s) causes termination.')
END IF
! DX Multispeed cooling coil
CurrentModuleObject='Coil:Cooling:DX:MultiSpeed'
DO DXCoilIndex = 1,NumDXMulSpeedCoolCoils
DXCoilNum = DXCoilNum+1
CALL GetObjectItem(CurrentModuleObject,DXCoilIndex,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
! Initialize DataHeatBalance heat reclaim variable name for use by heat reclaim coils
HeatReclaimDXCoil(DXCoilNum)%Name = DXCoil(DXCoilNum)%Name
HeatReclaimDXCoil(DXCoilNum)%SourceType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilDX_MultiSpeedCooling
DXCoil(DXCoilNum)%Schedule = Alphas(2)
IF (lAlphaBlanks(2)) THEN
DXCoil(DXCoilNum)%SchedPtr = ScheduleAlwaysOn
ELSE
DXCoil(DXCoilNum)%SchedPtr = GetScheduleIndex(Alphas(2)) ! convert schedule name to pointer
IF (DXCoil(DXCoilNum)%SchedPtr .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(2))//'="'//TRIM(Alphas(2))//'".')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(3),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(4),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(3),Alphas(4),'Air Nodes')
! outdoor condenser node
IF (lAlphaBlanks(5)) THEN
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = 0
ELSE
DXCoil(DXCoilNum)%CondenserInletNodeNum(1) = &
GetOnlySingleNode(Alphas(5),ErrorsFound,TRIM(CurrentModuleObject),DXCoil(DXCoilNum)%Name, &
NodeType_Air,NodeConnectionType_OutsideAirReference,1,ObjectIsNotParent)
IF (.not. CheckOutAirNodeNumber(DXCoil(DXCoilNum)%CondenserInletNodeNum(1))) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", may be invalid')
CALL ShowContinueError(TRIM(cAlphaFields(5))//'="'//TRIM(Alphas(5))//&
'", node does not appear in an OutdoorAir:NodeList or as an OutdoorAir:Node.')
CALL ShowContinueError('This node needs to be included in an air system or the coil model will not be valid' &
//', and the simulation continues')
END IF
ENDIF
IF ((SameString(Alphas(6),'AirCooled')) .OR. lAlphaBlanks(6))THEN
DXCoil(DXCoilNum)%CondenserType(1) = AirCooled
ELSEIF (SameString(Alphas(6),'EvaporativelyCooled')) THEN
DXCoil(DXCoilNum)%CondenserType(1) = EvapCooled
DXCoil(DXCoilNum)%ReportEvapCondVars = .TRUE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(6))//'="'//TRIM(Alphas(6))//'":')
CALL ShowContinueError('...must be AirCooled or EvaporativelyCooled.')
ErrorsFound = .TRUE.
END IF
! Get Water System tank connections
! A8, \field Name of Water Storage Tank for Supply
DXCoil(DXCoilNum)%EvapWaterSupplyName = Alphas(7)
IF (lAlphaBlanks(7)) THEN
DXCoil(DXCoilNum)%EvapWaterSupplyMode = WaterSupplyFromMains
ELSE
DXCoil(DXCoilNum)%EvapWaterSupplyMode = WaterSupplyFromTank
CALL SetupTankDemandComponent(DXCoil(DXCoilNum)%Name,TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%EvapWaterSupplyName, ErrorsFound, DXCoil(DXCoilNum)%EvapWaterSupTankID, &
DXCoil(DXCoilNum)%EvapWaterTankDemandARRID )
END IF
!A9; \field Name of Water Storage Tank for Condensate Collection
DXCoil(DXCoilNum)%CondensateCollectName = Alphas(8)
IF (lAlphaBlanks(8)) THEN
DXCoil(DXCoilNum)%CondensateCollectMode = CondensateDiscarded
ELSE
DXCoil(DxCoilNum)%CondensateCollectMode = CondensateToTank
CALL SetupTankSupplyComponent(DXCoil(DXCoilNum)%Name, TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%CondensateCollectName, ErrorsFound, DXCoil(DXCoilNum)%CondensateTankID, &
DXCoil(DXCoilNum)%CondensateTankSupplyARRID )
END IF
!Set crankcase heater capacity
DXCoil(DXCoilNum)%CrankcaseHeaterCapacity = Numbers(1)
IF (DXCoil(DXCoilNum)%CrankcaseHeaterCapacity .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//trim(cNumericFields(1))//' cannot be < 0.0.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(1),2))//'].')
ErrorsFound = .TRUE.
END IF
!Set crankcase heater cutout temperature
DXCoil(DXCoilNum)%MaxOATCrankcaseHeater = Numbers(2)
IF (SameString(Alphas(9),'Yes')) THEN
DXCoil(DXCoilNum)%PLRImpact = .TRUE.
ELSE IF (SameString(Alphas(9),'No')) THEN
DXCoil(DXCoilNum)%PLRImpact = .FALSE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError(',,,invalid choice for '//TRIM(cAlphaFields(9))//'. Entered choice = '//TRIM(Alphas(9)))
CALL ShowContinueError('The allowed choices are Yes or No.')
ErrorsFound=.TRUE.
END IF
IF (SameString(Alphas(10),'Yes')) THEN
DXCoil(DXCoilNum)%LatentImpact = .TRUE.
ELSE IF (SameString(Alphas(10),'No')) THEN
DXCoil(DXCoilNum)%LatentImpact = .FALSE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError(',,,invalid choice for '//TRIM(cAlphaFields(10))//'. Entered choice = '//TRIM(Alphas(10)))
CALL ShowContinueError('The allowed choices are Yes or No.')
ErrorsFound=.TRUE.
END IF
! Basin heater power as a function of temperature must be greater than or equal to 0
DXCoil(DxCoilNum)%BasinHeaterPowerFTempDiff = Numbers(3)
IF(Numbers(3) .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(3))//' must be >= 0.0, '// &
' entered value=['//trim(TrimSigDigits(Numbers(3),3))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DxCoilNum)%BasinHeaterSetPointTemp = Numbers(4)
IF(DXCoil(DxCoilNum)%BasinHeaterPowerFTempDiff .GT. 0.0d0) THEN
IF(NumNumbers .LT. 4) THEN
DXCoil(DxCoilNum)%BasinHeaterSetPointTemp = 2.0d0
ENDIF
IF(DXCoil(DxCoilNum)%BasinHeaterSetPointTemp < 2.0d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", freeze possible')
CALL ShowContinueError('...'//trim(cNumericFields(4))//' is less than 2 {C}. Freezing could occur.')
CALL ShowContinueError('...entered value=['//trim(TrimSigDigits(Numbers(4),2))//'].')
END IF
END IF
IF(.NOT. lAlphaBlanks(11))THEN
DXCoil(DxCoilNum)%BasinHeaterSchedulePtr = GetScheduleIndex(Alphas(11))
IF(DXCoil(DxCoilNum)%BasinHeaterSchedulePtr .EQ. 0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(11))//'="'//TRIM(Alphas(11))//'".')
CALL ShowContinueError('Basin heater will be available to operate throughout the simulation.')
END IF
END IF
!A12; \field Fuel type
IF (SameString(Alphas(12),'Electricity')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeElectricity
ELSE IF (SameString(Alphas(12),'NaturalGas')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeNaturalGas
ELSE IF (SameString(Alphas(12),'PropaneGas')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypePropaneGas
ELSE IF (SameString(Alphas(12),'Diesel')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeDiesel
ELSE IF (SameString(Alphas(12),'Gasoline')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeGasoline
ELSE IF (SameString(Alphas(12),'FuelOil#1')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeFuelOil1
ELSE IF (SameString(Alphas(12),'FuelOil#2')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeFuelOil2
ELSE IF (SameString(Alphas(12),'OtherFuel1')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeOtherFuel1
ELSE IF (SameString(Alphas(12),'OtherFuel2')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeOtherFuel2
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError(',,,invalid choice for '//TRIM(cAlphaFields(12))//'. Entered choice = '//TRIM(Alphas(12)))
CALL ShowContinueError('Valid choices are Electricity, NaturalGas, PropaneGas, Diesel, Gasoline, FuelOil#1, FuelOil#2,'// &
'OtherFuel1 or OtherFuel2')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%NumOfSpeeds = Numbers(5) ! Number of speeds
If (DXCoil(DXCoilNum)%NumOfSpeeds .LT. 2) Then
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(5))//' must be >= 2.'// &
' entered number is '//TRIM(TrimSigDigits(Numbers(5),0)))
ErrorsFound=.TRUE.
End If
! Allocate arrays based on the number of speeds
ALLOCATE(DXCoil(DXCoilNum)%MSErrIndex(DXCoil(DXCoilNum)%NumOfSpeeds))
DXCoil(DXCoilNum)%MSErrIndex=0
ALLOCATE(DXCoil(DXCoilNum)%MSRatedTotCap(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedSHR(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedCOP(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedAirMassFlowRate(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSCCapFTemp(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSCCapFFlow(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSEIRFTemp(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSEIRFFlow(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSWasteHeat(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSEvapCondEffect(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSEvapCondAirFlow(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedCBF(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSWasteHeatFrac(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSPLFFPLR(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSTwet_Rated(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSGamma_Rated(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSMaxONOFFCyclesperHour(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSLatentCapacityTimeConstant(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSFanPowerPerEvapAirFlowRate(DXCoil(DXCoilNum)%NumOfSpeeds))
Do I=1,DXCoil(DXCoilNum)%NumOfSpeeds
DXCoil(DXCoilNum)%MSRatedTotCap(I) = Numbers(6+(I-1)*13)
DXCoil(DXCoilNum)%MSRatedSHR(I) = Numbers(7+(I-1)*13)
DXCoil(DXCoilNum)%MSRatedCOP(I) = Numbers(8+(I-1)*13)
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(I) = Numbers(9+(I-1)*13)
DXCoil(DXCoilNum)%MSFanPowerPerEvapAirFlowRate(I) = Numbers(10+(I-1)*13)
DXCoil(DXCoilNum)%MSCCapFTemp(I) = GetCurveIndex(Alphas(13+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSCCapFTemp(I) .EQ. 0) THEN
IF (lAlphaBlanks(13+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(13+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(13+(I-1)*6))//'="'//TRIM(Alphas(13+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSCCapFTemp(I)))
CASE('BIQUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSCCapFTemp(I),RatedInletWetbulbTemp,RatedOutdoorAirTemp)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(13+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(13+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSCCapFTemp(I))))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSCCapFFlow(I) = GetCurveIndex(Alphas(14+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSCCapFFlow(I) .EQ. 0) THEN
IF (lAlphaBlanks(14+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(14+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(14+(I-1)*6))//'="'//TRIM(Alphas(14+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSCCapFFlow(I)))
CASE('QUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSCCapFFlow(I),1.0d0)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(14+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE('CUBIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSCCapFFlow(I),1.0d0)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(14+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(14+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSCCapFFlow(I))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSEIRFTemp(I) = GetCurveIndex(Alphas(15+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSEIRFTemp(I) .EQ. 0) THEN
IF (lAlphaBlanks(15+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(15+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(15+(I-1)*6))//'="'//TRIM(Alphas(15+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Biquadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSEIRFTemp(I)))
CASE('BIQUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSEIRFTemp(I),RatedInletWetbulbTemp,RatedOutdoorAirTemp)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(15+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(15+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSEIRFTemp(1))))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSEIRFFlow(I) = GetCurveIndex(Alphas(16+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSEIRFFlow(I) .EQ. 0) THEN
IF (lAlphaBlanks(16+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(16+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(16+(I-1)*6))//'="'//TRIM(Alphas(16+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSEIRFFlow(I)))
CASE('QUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSEIRFFlow(I),1.0d0)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(16+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE('CUBIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSEIRFFlow(I),1.0d0)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(16+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(16+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSEIRFFlow(I))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSPLFFPLR(I) = GetCurveIndex(Alphas(17+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSPLFFPLR(I) .EQ. 0) THEN
IF (lAlphaBlanks(17+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(17+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(17+(I-1)*6))//'="'//TRIM(Alphas(16+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Quadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSPLFFPLR(I)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(17+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSPLFFPLR(I))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
IF(.NOT. ErrorsFound)THEN
! Test PLF curve minimum and maximum. Cap if less than 0.7 or greater than 1.0.
MinCurveVal = 999.0d0
MaxCurveVal = -999.0d0
CurveInput = 0.0d0
DO WHILE (CurveInput <= 1.0d0)
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSPLFFPLR(I),CurveInput)
IF(CurveVal .LT. MinCurveVal)THEN
MinCurveVal = CurveVal
MinCurvePLR = CurveInput
END IF
IF(CurveVal .GT. MaxCurveVal)THEN
MaxCurveVal = CurveVal
MaxCurvePLR = CurveInput
END IF
CurveInput=CurveInput+0.01d0
END DO
IF(MinCurveVal .LT. 0.7d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields2(17+(I-1)*6))//' = '//TRIM(Alphas2(17+(I-1)*6))// &
' has out of range value.')
CALL ShowContinueError('...Curve minimum must be >= 0.7, '// &
'curve min at PLR = '//TRIM(TrimSigDigits(MinCurvePLR,2))//' is '//TRIM(TrimSigDigits(MinCurveVal,3)))
CALL ShowContinueError('...Setting curve minimum to 0.7 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(PerfModeNum),ErrorsFound,CurveMin=0.7d0)
END IF
IF(MaxCurveVal .GT. 1.0d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields2(17+(I-1)*6))//' = '//TRIM(Alphas2(17+(I-1)*6))// &
' has out of range value.')
CALL ShowContinueError('...Curve maximum must be <= 1.0, '// &
'curve max at PLR = '//TRIM(TrimSigDigits(MaxCurvePLR,2))//' is '//TRIM(TrimSigDigits(MaxCurveVal,3)))
CALL ShowContinueError('...Setting curve maximum to 1.0 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%MSPLFFPLR(I),ErrorsFound,CurveMax=1.0d0)
END IF
END IF
END IF
! read data for latent degradation
DXCoil(DXCoilNum)%MSTwet_Rated(I) = Numbers(11+(I-1)*13)
IF (DXCoil(DXCoilNum)%MSTwet_Rated(I) .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(11+(I-1)*13))//' cannot be < 0.0, '// &
'entered value=['//trim(TrimSigDigits(DXCoil(DXCoilNum)%MSTwet_Rated(I),4))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%MSGamma_Rated(I) = Numbers(12+(I-1)*13)
IF (DXCoil(DXCoilNum)%MSGamma_Rated(I) .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(12+(I-1)*13))//' cannot be < 0.0, '// &
'entered value=['//trim(TrimSigDigits(DXCoil(DXCoilNum)%MSGamma_Rated(I),4))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%MSMaxONOFFCyclesperHour(I) = Numbers(13+(I-1)*13)
IF (DXCoil(DXCoilNum)%Gamma_Rated(I) .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(13+(I-1)*13))//' cannot be < 0.0, '// &
'entered value=['//trim(TrimSigDigits(DXCoil(DXCoilNum)%MSMaxONOFFCyclesperHour(I),2))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%MSLatentCapacityTimeConstant(I) = Numbers(14+(I-1)*13)
IF (DXCoil(DXCoilNum)%Gamma_Rated(I) .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(14+(I-1)*13))//' cannot be < 0.0, '// &
'entered value=['//trim(TrimSigDigits(DXCoil(DXCoilNum)%MSLatentCapacityTimeConstant(I),2))//'].')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%MSWasteHeatFrac(I) = Numbers(15+(I-1)*13)
! Read waste heat modifier curve name
DXCoil(DXCoilNum)%MSWasteHeat(I) = GetCurveIndex(Alphas(18+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSWasteHeat(I) .EQ. 0) THEN
IF (lAlphaBlanks(18+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(18+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(18+(I-1)*6))//'="'//TRIM(Alphas(18+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSWasteHeat(I)))
CASE('BIQUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSWasteHeat(I),RatedOutdoorAirTemp,RatedInletAirTemp)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(18+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(18+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSWasteHeat(I))))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSEvapCondEffect(I) = Numbers(16+(I-1)*13)
IF (DXCoil(DXCoilNum)%MSEvapCondEffect(I) .LT. 0.0d0 .OR. DXCoil(DXCoilNum)%MSEvapCondEffect(I) .GT. 1.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(16+(I-1)*13))//' cannot be < 0.0 or > 1.0, '// &
'entered value=['//trim(TrimSigDigits(Numbers(16+(I-1)*13),3))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%MSEvapCondAirFlow(I) = Numbers(17+(I-1)*13)
IF (DXCoil(DXCoilNum)%MSEvapCondAirFlow(I) .LT. 0.0 .AND. DXCoil(DXCoilNum)%MSEvapCondAirFlow(I) /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(17+(I-1)*13))//' cannot be < 0.0, '// &
'entered value=['//trim(TrimSigDigits(Numbers(17+(I-1)*13),3))//'].')
ErrorsFound = .TRUE.
END IF
DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(I) = Numbers(18+(I-1)*13)
IF (DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(I) .LT. 0.0 .AND. &
DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(I) /= AutoSize) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(18+(I-1)*13))//' cannot be < 0.0, '// &
'entered value=['//trim(TrimSigDigits(Numbers(18+(I-1)*13),3))//'].')
ErrorsFound = .TRUE.
END IF
END DO
END DO
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting '//TRIM(CurrentModuleObject)//' input. '//&
'Preceding condition(s) causes termination.')
END IF
! DX multispeed heating coil
CurrentModuleObject='Coil:Heating:DX:MultiSpeed'
DO DXCoilIndex = 1,NumDXMulSpeedHeatCoils
DXCoilNum = DXCoilNum+1
CALL GetObjectItem(CurrentModuleObject,DXCoilIndex,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
! Initialize DataHeatBalance heat reclaim variable name for use by heat reclaim coils
HeatReclaimDXCoil(DXCoilNum)%Name = DXCoil(DXCoilNum)%Name
HeatReclaimDXCoil(DXCoilNum)%SourceType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilDX_MultiSpeedHeating
DXCoil(DXCoilNum)%Schedule = Alphas(2)
IF (lAlphaBlanks(2)) THEN
DXCoil(DXCoilNum)%SchedPtr = ScheduleAlwaysOn
ELSE
DXCoil(DXCoilNum)%SchedPtr = GetScheduleIndex(Alphas(2)) ! convert schedule name to pointer
IF (DXCoil(DXCoilNum)%SchedPtr .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(2))//'="'//TRIM(Alphas(2))//'".')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(3),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(4),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(3),Alphas(4),'Air Nodes')
!Set minimum OAT for heat pump compressor operation
DXCoil(DXCoilNum)%MinOATCompressor = Numbers(1)
! set Minimum Outdoor Dry-Bulb Temperature for Compressor Operation
DXCoil(DXCoilNum)%OATempCompressorOn = Numbers(2)
!
!Set crankcase heater capacity
DXCoil(DXCoilNum)%CrankcaseHeaterCapacity = Numbers(3)
IF (DXCoil(DXCoilNum)%CrankcaseHeaterCapacity .LT. 0.0d0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(3))//' cannot be < 0.0,'// &
' entered value=['//trim(TrimSigDigits(Numbers(3),2))//'].')
ErrorsFound = .TRUE.
END IF
!Set crankcase heater cutout temperature
DXCoil(DXCoilNum)%MaxOATCrankcaseHeater = Numbers(4)
! Only required for reverse cycle heat pumps
DXCoil(DXCoilNum)%DefrostEIRFT = GetCurveIndex(Alphas(5)) ! convert curve name to number
IF (SameString(Alphas(6),'ReverseCycle')) THEN
IF (DXCoil(DXCoilNum)%DefrostEIRFT .EQ. 0) THEN
IF (lAlphaBlanks(5)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(5))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(5))//'="'//TRIM(Alphas(5))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%DefrostEIRFT))
CASE('BIQUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%DefrostEIRFT,RatedInletWetbulbTempHeat,RatedOutdoorAirTempHeat)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(5))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(5))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%DefrostEIRFT)))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END IF
IF (SameString(Alphas(6),'ReverseCycle')) DXCoil(DXCoilNum)%DefrostStrategy = ReverseCycle
IF (SameString(Alphas(6),'Resistive')) DXCoil(DXCoilNum)%DefrostStrategy = Resistive
IF (DXCoil(DXCoilNum)%DefrostStrategy .EQ.0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(6))//'="'//TRIM(Alphas(6))//'".')
CALL ShowContinueError('...valid values for this field are ReverseCycle or Resistive.')
ErrorsFound = .TRUE.
END IF
IF (SameString(Alphas(7),'Timed')) DXCoil(DXCoilNum)%DefrostControl = Timed
IF (SameString(Alphas(7),'OnDemand')) DXCoil(DXCoilNum)%DefrostControl = OnDemand
IF (DXCoil(DXCoilNum)%DefrostControl .EQ.0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(7))//'="'//TRIM(Alphas(7))//'".')
CALL ShowContinueError('...valid values for this field are Timed or OnDemand.')
ErrorsFound = .TRUE.
END IF
!Set maximum outdoor temp for defrost to occur
DXCoil(DXCoilNum)%MaxOATDefrost = Numbers(5)
!Set defrost time period
DXCoil(DXCoilNum)%DefrostTime = Numbers(6)
IF(DXCoil(DXCoilNum)%DefrostTime .EQ. 0.0d0 .AND. DXCoil(DXCoilNum)%DefrostControl .EQ. 1) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", ')
CALL ShowContinueError('...'//TRIM(cNumericFields(5))//' = 0.0 for defrost control = TIMED.')
END IF
!Set defrost capacity (for resistive defrost)
DXCoil(DXCoilNum)%DefrostCapacity = Numbers(7)
IF(DXCoil(DXCoilNum)%DefrostCapacity .EQ. 0.0d0 .AND. DXCoil(DXCoilNum)%DefrostStrategy .EQ. 2) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", ')
CALL ShowContinueError('...'//TRIM(cNumericFields(7))//' = 0.0 for defrost strategy = RESISTIVE.')
END IF
IF (SameString(Alphas(8),'Yes')) THEN
DXCoil(DXCoilNum)%PLRImpact = .TRUE.
ELSE IF (SameString(Alphas(8),'No')) THEN
DXCoil(DXCoilNum)%PLRImpact = .FALSE.
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError(',,,invalid choice for '//TRIM(cAlphaFields(8))//'. Entered choice = '//TRIM(Alphas(8)))
CALL ShowContinueError('The allowed choices are Yes or No.')
ErrorsFound=.TRUE.
END IF
!A10; \field Fuel type
IF (SameString(Alphas(9),'Electricity')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeElectricity
ELSE IF (SameString(Alphas(9),'NaturalGas')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeNaturalGas
ELSE IF (SameString(Alphas(9),'PropaneGas')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypePropaneGas
ELSE IF (SameString(Alphas(9),'Diesel')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeDiesel
ELSE IF (SameString(Alphas(9),'Gasoline')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeGasoline
ELSE IF (SameString(Alphas(9),'FuelOil#1')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeFuelOil1
ELSE IF (SameString(Alphas(9),'FuelOil#2')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeFuelOil2
ELSE IF (SameString(Alphas(9),'OtherFuel1')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeOtherFuel1
ELSE IF (SameString(Alphas(9),'OtherFuel2')) THEN
DXCoil(DXCoilNum)%FuelType = FuelTypeOtherFuel2
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError(',,,invalid choice for '//TRIM(cAlphaFields(9))//'. Entered choice = '//TRIM(Alphas(9)))
CALL ShowContinueError('Valid choices are Electricity, NaturalGas, PropaneGas, Diesel, Gasoline, FuelOil#1, FuelOil#2,'// &
'OtherFuel1 or OtherFuel2')
ErrorsFound=.TRUE.
END IF
DXCoil(DXCoilNum)%RegionNum = Numbers(8) ! Region Number for HSPF Calc
DXCoil(DXCoilNum)%NumOfSpeeds = Numbers(9) ! Number of speeds
IF (DXCoil(DXCoilNum)%NumOfSpeeds .LT. 2) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cNumericFields(9))//' must be >= 2.'// &
' entered number is '//TRIM(TrimSigDigits(Numbers(9),0)))
ErrorsFound=.TRUE.
END IF
! Allocate arrays based on the number of speeds
ALLOCATE(DXCoil(DXCoilNum)%MSErrIndex(DXCoil(DXCoilNum)%NumOfSpeeds))
DXCoil(DXCoilNum)%MSErrIndex=0
ALLOCATE(DXCoil(DXCoilNum)%MSRatedTotCap(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedCOP(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedAirMassFlowRate(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSCCapFTemp(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSCCapFFlow(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSEIRFTemp(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSEIRFFlow(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSWasteHeat(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSPLFFPLR(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSRatedCBF(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSWasteHeatFrac(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSTotCapTempModFacCurveType(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSEIRTempModFacCurveType(DXCoil(DXCoilNum)%NumOfSpeeds))
ALLOCATE(DXCoil(DXCoilNum)%MSFanPowerPerEvapAirFlowRate(DXCoil(DXCoilNum)%NumOfSpeeds))
DXCoil(DXCoilNum)%RatedSHR(1) = 1.0d0
DO I=1,DXCoil(DXCoilNum)%NumOfSpeeds
DXCoil(DXCoilNum)%MSRatedTotCap(I) = Numbers(10+(I-1)*5)
DXCoil(DXCoilNum)%MSRatedCOP(I) = Numbers(11+(I-1)*5)
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(I) = Numbers(12+(I-1)*5)
DXCoil(DXCoilNum)%MSFanPowerPerEvapAirFlowRate(I) = Numbers(13+(I-1)*5)
DXCoil(DXCoilNum)%MSWasteHeatFrac(I) = Numbers(14+(I-1)*5)
DXCoil(DXCoilNum)%MSCCapFTemp(I) = GetCurveIndex(Alphas(10+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSCCapFTemp(I) .EQ. 0) THEN
CALL ShowSevereError(TRIM(CurrentModuleObject)//', "'//TRIM(DXCoil(DXCoilNum)%Name)//&
'" '//TRIM(cAlphaFields(10+(I-1)*6))//' not found:'//TRIM(Alphas(10+(I-1)*6)))
ErrorsFound = .TRUE.
ELSE
! only legal types are Quadratic, Biquadratic and Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSCCapFTemp(I)))
CASE('QUADRATIC')
DXCoil(DXCoilNum)%MSTotCapTempModFacCurveType(I) = Quadratic
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSCCapFTemp(I),RatedOutdoorAirTempHeat)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(10+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%MSTotCapTempModFacCurveType(I) = Biquadratic
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSCCapFTemp(I),RatedInletAirTempHeat,RatedOutdoorAirTempHeat)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(10+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE('CUBIC')
DXCoil(DXCoilNum)%MSTotCapTempModFacCurveType(I) = Cubic
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSCCapFTemp(I),RatedOutdoorAirTempHeat)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(10+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(10+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSCCapFTemp(I))))
CALL ShowContinueError('Curve type must be BiQuadratic, Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSCCapFFlow(I) = GetCurveIndex(Alphas(11+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSCCapFFlow(I) .EQ. 0) THEN
IF (lAlphaBlanks(11+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(11+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(11+(I-1)*6))//'="'//TRIM(Alphas(11+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSCCapFFlow(I)))
CASE('QUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSCCapFFlow(I),1.0d0)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(11+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE('CUBIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSCCapFFlow(I),1.0d0)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(11+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(11+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSCCapFFlow(I))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSEIRFTemp(I) = GetCurveIndex(Alphas(12+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSEIRFTemp(I) .EQ. 0) THEN
IF (lAlphaBlanks(12+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(12+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(12+(I-1)*6))//'="'//TRIM(Alphas(15+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! only legal types are Quadratic, Biquadratic and Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSEIRFTemp(I)))
CASE('QUADRATIC')
DXCoil(DXCoilNum)%MSEIRTempModFacCurveType(I) = Quadratic
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSEIRFTemp(I),RatedOutdoorAirTempHeat)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(12+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%MSEIRTempModFacCurveType(I) = BiQuadratic
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSEIRFTemp(I),RatedInletAirTempHeat,RatedOutdoorAirTempHeat)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(12+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE('CUBIC')
DXCoil(DXCoilNum)%MSEIRTempModFacCurveType(I) = Cubic
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSEIRFTemp(I),RatedOutdoorAirTempHeat)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(12+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(12+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSEIRFTemp(I))))
CALL ShowContinueError('Curve type must be BiQuadratic, Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSEIRFFlow(I) = GetCurveIndex(Alphas(13+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSEIRFFlow(I) .EQ. 0) THEN
IF (lAlphaBlanks(13+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(13+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(13+(I-1)*6))//'="'//TRIM(Alphas(13+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSEIRFFlow(I)))
CASE('QUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSEIRFFlow(I),1.0d0)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(13+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE('CUBIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSEIRFFlow(I),1.0d0)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(13+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(13+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSEIRFFlow(I))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%MSPLFFPLR(I) = GetCurveIndex(Alphas(14+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSPLFFPLR(I) .EQ. 0) THEN
IF (lAlphaBlanks(14+(I-1)*6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(14+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(14+(I-1)*6))//'="'//TRIM(Alphas(14+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are Quadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSPLFFPLR(I)))
CASE('QUADRATIC')
CASE('CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(14+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSPLFFPLR(I))))
CALL ShowContinueError('Curve type must be Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
IF(.NOT. ErrorsFound)THEN
! Test PLF curve minimum and maximum. Cap if less than 0.7 or greater than 1.0.
MinCurveVal = 999.0d0
MaxCurveVal = -999.0d0
CurveInput = 0.0d0
DO WHILE (CurveInput <= 1.0d0)
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSPLFFPLR(I),CurveInput)
IF(CurveVal .LT. MinCurveVal)THEN
MinCurveVal = CurveVal
MinCurvePLR = CurveInput
END IF
IF(CurveVal .GT. MaxCurveVal)THEN
MaxCurveVal = CurveVal
MaxCurvePLR = CurveInput
END IF
CurveInput=CurveInput+0.01d0
END DO
IF(MinCurveVal .LT. 0.7d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(14+(I-1)*6))//' = '//TRIM(Alphas(14+(I-1)*6))//' has out of range value.')
CALL ShowContinueError('...Curve minimum must be >= 0.7, '// &
'curve min at PLR = '//TRIM(TrimSigDigits(MinCurvePLR,2))//' is '//TRIM(TrimSigDigits(MinCurveVal,3)))
CALL ShowContinueError('...Setting curve minimum to 0.7 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%PLFFPLR(1),ErrorsFound,CurveMin=0.7d0)
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%MSPLFFPLR(I),ErrorsFound,CurveMin=0.7d0)
END IF
IF(MaxCurveVal .GT. 1.0d0)THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(14+(I-1)*6))//' = '//TRIM(Alphas(14+(I-1)*6))//' has out of range value.')
CALL ShowContinueError('...Curve maximum must be <= 1.0, '// &
'curve max at PLR = '//TRIM(TrimSigDigits(MaxCurvePLR,2))//' is '//TRIM(TrimSigDigits(MaxCurveVal,3)))
CALL ShowContinueError('...Setting curve maximum to 1.0 and simulation continues.')
CALL SetCurveOutputMinMaxValues(DXCoil(DXCoilNum)%MSPLFFPLR(I),ErrorsFound,CurveMax=1.0d0)
END IF
END IF
END IF
! Read waste heat modifier curve name
DXCoil(DXCoilNum)%MSWasteHeat(I) = GetCurveIndex(Alphas(15+(I-1)*6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%MSWasteHeat(I) .EQ. 0) THEN
IF (lAlphaBlanks(11)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(15+(I-1)*6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(15+(I-1)*6))//'="'//TRIM(Alphas(15+(I-1)*6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal types are BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%MSWasteHeat(I)))
CASE('BIQUADRATIC')
CurveVal = CurveValue(DXCoil(DXCoilNum)%MSWasteHeat(I),RatedOutdoorAirTempHeat,RatedInletAirTempHeat)
IF(CurveVal .GT. 1.10d0 .OR. CurveVal .LT. 0.90d0) THEN
CALL ShowWarningError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", curve values')
CALL ShowContinueError('...'//TRIM(cAlphaFields(15+(I-1)*6))//' output is not equal to 1.0 '// &
'(+ or - 10%) at rated conditions.')
CALL ShowContinueError('...Curve output at rated conditions = '//TRIM(TrimSigDigits(CurveVal,3)))
END IF
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(15+(I-1)*6))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%MSWasteHeat(I))))
CALL ShowContinueError('Curve type must be BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END DO
END DO
! Loop over the VRF Cooling Coils and get & load the data
CurrentModuleObject=cAllCoilTypes(CoilVRF_Cooling)
DO DXCoilIndex = 1, NumVRFCoolingCoils
CALL GetObjectItem(CurrentModuleObject,DXCoilIndex,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
DXCoilNum = DXCoilNum+1
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilVRF_Cooling
DXCoil(DXCoilNum)%Schedule = Alphas(2)
IF (lAlphaBlanks(2)) THEN
DXCoil(DXCoilNum)%SchedPtr = ScheduleAlwaysOn
ELSE
DXCoil(DXCoilNum)%SchedPtr = GetScheduleIndex(Alphas(2)) ! convert schedule name to pointer
IF (DXCoil(DXCoilNum)%SchedPtr .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(2))//'="'//TRIM(Alphas(2))//'".')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%RatedTotCap(1) = Numbers(1)
DXCoil(DXCoilNum)%RatedSHR(1) = Numbers(2)
DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) = Numbers(3)
DXCoil(DXCoilNum)%CCapFTemp(1) = GetCurveIndex(Alphas(3))
! Verify Curve Object, only legal type is Linear, Quadratic, Cubic, or BiQuadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1)))
CASE('LINEAR')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1) = Linear
CASE('QUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1) = Quadratic
CASE('CUBIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1) = Cubic
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1) = BiQuadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(3))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1))))
CALL ShowContinueError('... Curve type must be Linear, Quadratic, Cubic, or BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
DXCoil(DXCoilNum)%CCapFFlow(1) = GetCurveIndex(Alphas(4)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFFlow(1) .EQ. 0) THEN
IF (lAlphaBlanks(4)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(4))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(4))//'="'//TRIM(Alphas(4))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Linear, Quadratic or Cubic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1)))
CASE('LINEAR', 'QUADRATIC', 'CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(4))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1))))
CALL ShowContinueError('... Curve type must be Linear, Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(5),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(6),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(5),Alphas(6),'Air Nodes')
DXCoil(DXCoilNum)%CondensateCollectName = Alphas(7)
IF (lAlphaBlanks(7)) THEN
DXCoil(DXCoilNum)%CondensateCollectMode = CondensateDiscarded
ELSE
DXCoil(DxCoilNum)%CondensateCollectMode = CondensateToTank
CALL SetupTankSupplyComponent(DXCoil(DXCoilNum)%Name, TRIM(CurrentModuleObject), &
DXCoil(DXCoilNum)%CondensateCollectName, ErrorsFound, DXCoil(DXCoilNum)%CondensateTankID, &
DXCoil(DXCoilNum)%CondensateTankSupplyARRID )
END IF
END DO
! Loop over the VRF Heating Coils and get & load the data
CurrentModuleObject='COIL:Heating:DX:VariableRefrigerantFlow'
DO DXCoilIndex = 1, NumVRFHeatingCoils
CALL GetObjectItem(CurrentModuleObject,DXCoilIndex,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
DXCoilNum = DXCoilNum+1
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),DXCoil%Name,DXCoilNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
CALL VerifyUniqueCoilName(CurrentModuleObject,Alphas(1),errflag,TRIM(CurrentModuleObject)//' Name')
IF (errflag) THEN
ErrorsFound=.true.
ENDIF
DXCoil(DXCoilNum)%Name = Alphas(1)
DXCoil(DXCoilNum)%DXCoilType = TRIM(CurrentModuleObject)
DXCoil(DXCoilNum)%DXCoilType_Num = CoilVRF_Heating
DXCoil(DXCoilNum)%Schedule = Alphas(2)
IF (lAlphaBlanks(2)) THEN
DXCoil(DXCoilNum)%SchedPtr = ScheduleAlwaysOn
ELSE
DXCoil(DXCoilNum)%SchedPtr = GetScheduleIndex(Alphas(2)) ! convert schedule name to pointer
IF (DXCoil(DXCoilNum)%SchedPtr .EQ. 0) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...'//TRIM(cAlphaFields(2))//'="'//TRIM(Alphas(2))//'".')
ErrorsFound=.TRUE.
END IF
END IF
DXCoil(DXCoilNum)%RatedTotCap(1) = Numbers(1)
DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) = Numbers(2)
DXCoil(DXCoilNum)%AirInNode = &
GetOnlySingleNode(Alphas(3),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
DXCoil(DXCoilNum)%AirOutNode = &
GetOnlySingleNode(Alphas(4),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(3),Alphas(4),'Air Nodes')
DXCoil(DXCoilNum)%CCapFTemp = GetCurveIndex(Alphas(5))
IF (DXCoil(DXCoilNum)%CCapFTemp(1) .EQ. 0) THEN
IF (lAlphaBlanks(5)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(5))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(5))//'="'//TRIM(Alphas(5))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1)))
CASE('LINEAR')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1) = Linear
CASE('QUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1) = Quadratic
CASE('CUBIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1) = Cubic
CASE('BIQUADRATIC')
DXCoil(DXCoilNum)%TotCapTempModFacCurveType(1) = Biquadratic
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(5))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFTemp(1))))
CALL ShowContinueError('... Curve type must be Linear, Quadratic, Cubic or BiQuadratic.')
ErrorsFound=.TRUE.
END SELECT
END IF
DXCoil(DXCoilNum)%CCapFFlow(1) = GetCurveIndex(Alphas(6)) ! convert curve name to number
IF (DXCoil(DXCoilNum)%CCapFFlow(1) .EQ. 0) THEN
IF (lAlphaBlanks(6)) THEN
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", missing')
CALL ShowContinueError('...required '//trim(cAlphaFields(6))//' is blank.')
ELSE
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...not found '//TRIM(cAlphaFields(6))//'="'//TRIM(Alphas(6))//'".')
END IF
ErrorsFound = .TRUE.
ELSE
! Verify Curve Object, only legal type is Quadratic
SELECT CASE(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1)))
CASE('LINEAR', 'QUADRATIC', 'CUBIC')
CASE DEFAULT
CALL ShowSevereError(RoutineName//trim(CurrentModuleObject)//'="'//trim(DXCoil(DXCoilNum)%Name)//'", invalid')
CALL ShowContinueError('...illegal '//TRIM(cAlphaFields(5))//' type for this object = '// &
TRIM(GetCurveType(DXCoil(DXCoilNum)%CCapFFlow(1))))
CALL ShowContinueError('... Curve type must be linear, Quadratic or Cubic.')
ErrorsFound=.TRUE.
END SELECT
END IF
END DO
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting '//TRIM(CurrentModuleObject)//' input. '//&
'Preceding condition(s) causes termination.')
END IF
DO DXCoilNum=1,NumDOE2DXCoils+NumDXMulModeCoils
! Setup Report Variables for Cooling Equipment
! CurrentModuleObject='Coil:Cooling:DX:SingleSpeed/Coil:Cooling:DX:TwoStageWithHumidityControlMode'
CALL SetupOutputVariable('Cooling Coil Total Cooling Rate [W]',DXCoil(DXCoilNum)%TotalCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Total Cooling Energy [J]',DXCoil(DXCoilNum)%TotalCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='COOLINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Rate [W]',DXCoil(DXCoilNum)%SensCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Energy [J]',DXCoil(DXCoilNum)%SensCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Rate [W]',DXCoil(DXCoilNum)%LatCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Energy [J]',DXCoil(DXCoilNum)%LatCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Electric Power [W]',DXCoil(DXCoilNum)%ElecCoolingPower,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Electric Energy [J]',DXCoil(DXCoilNum)%ElecCoolingConsumption,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Runtime Fraction []',DXCoil(DXCoilNum)%CoolingCoilRuntimeFraction,'System','Average',&
DXCoil(DXCoilNum)%Name)
! do we report these even if no storage tank?
IF (DXCoil(DXCoilNum)%CondensateCollectMode == CondensateToTank) THEN
CALL SetupOutputVariable('Cooling Coil Condensate Volume Flow Rate [m3/s]',DXCoil(DXCoilNum)%CondensateVdot,&
'System','Average', DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Condensate Volume [m3]',DXCoil(DXCoilNum)%CondensateVol,&
'System','Sum', DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='OnSiteWater', &
EndUseKey='Condensate', GroupKey='System')
ENDIF
! Moved to Init
! IF (DXCoil(DXCoilNum)%ReportCoolingCoilCrankcasePower) THEN
! CALL SetupOutputVariable('DX Cooling Coil Crankcase Heater Power [W]',DXCoil(DXCoilNum)%CrankcaseHeaterPower,'System',&
! 'Average',DXCoil(DXCoilNum)%Name)
! CALL SetupOutputVariable('Cooling Coil Crankcase Heater Electric Energy [J]',DXCoil(DXCoilNum)%CrankcaseHeaterConsumption,&
! 'System','Sum',DXCoil(DXCoilNum)%Name, &
! ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
! END IF
IF (DXCoil(DXCoilNum)%ReportEvapCondVars) THEN
CALL SetupOutputVariable('Cooling Coil Condenser Inlet Temperature [C]', &
DXCoil(DXCoilNum)%CondInletTemp,'System','Average', DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Water Volume [m3]',DXCoil(DXCoilNum)%EvapWaterConsump, &
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Water',EndUseKey='Cooling',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Mains Supply Water Volume [m3]', &
DXCoil(DXCoilNum)%EvapWaterConsump, &
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='MainsWater',EndUseKey='Cooling',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Pump Electric Power [W]',DXCoil(DXCoilNum)%EvapCondPumpElecPower, &
'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Pump Electric Energy [J]', &
DXCoil(DXCoilNum)%EvapCondPumpElecConsumption,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
IF(DXCoil(DXCoilNum)%BasinHeaterPowerFTempDiff .GT. 0.0d0)THEN
CALL SetupOutputVariable('Cooling Coil Basin Heater Electric Power [W]', &
DXCoil(DXCoilNum)%BasinHeaterPower,'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Basin Heater Electric Energy [J]', &
DXCoil(DXCoilNum)%BasinHeaterConsumption,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
END IF
END IF
END DO
DO DXCoilNum=NumDOE2DXCoils+1,NumDOE2DXCoils+NumDXMulModeCoils
! Setup Report Variables for Cooling Equipment
! CurrentModuleObject='Cooling:DX:TwoStageWithHumidityControlMode'
CALL SetupOutputVariable('Cooling Coil Stage 2 Runtime Fraction []',DXCoil(DXCoilNum)%CoolingCoilStg2RuntimeFrac,&
'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Dehumidification Mode []',DXCoil(DXCoilNum)%DehumidificationMode,&
'System','Average',DXCoil(DXCoilNum)%Name)
END DO
DO DXCoilNum=NumDOE2DXCoils+NumDXMulModeCoils+1,NumDXHeatingCoils+NumDOE2DXCoils+NumDXMulModeCoils
! Setup Report Variables for Heating Equipment
! CurrentModuleObject='Coil:Heating:DX:SingleSpeed'
CALL SetupOutputVariable('Heating Coil Total Heating Rate [W]',DXCoil(DXCoilNum)%TotalHeatingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Total Heating Energy [J]',DXCoil(DXCoilNum)%TotalHeatingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='HEATINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Heating Coil Electric Power [W]',DXCoil(DXCoilNum)%ElecHeatingPower,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Electric Energy [J]',DXCoil(DXCoilNum)%ElecHeatingConsumption,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='HEATING',GroupKey='System')
CALL SetupOutputVariable('Heating Coil Defrost Electric Power [W]',DXCoil(DXCoilNum)%DefrostPower,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Defrost Electric Energy [J]',DXCoil(DXCoilNum)%DefrostConsumption,'System',&
'Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='HEATING',GroupKey='System')
CALL SetupOutputVariable('Heating Coil Crankcase Heater Electric Power [W]',DXCoil(DXCoilNum)%CrankcaseHeaterPower,'System',&
'Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Crankcase Heater Electric Energy [J]',DXCoil(DXCoilNum)%CrankcaseHeaterConsumption,&
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='HEATING',GroupKey='System')
CALL SetupOutputVariable('Heating Coil Runtime Fraction []',DXCoil(DXCoilNum)%HeatingCoilRuntimeFraction,'System','Average',&
DXCoil(DXCoilNum)%Name)
END DO
DO DXCoilNum=NumDOE2DXCoils+NumDXMulModeCoils+NumDXHeatingCoils+1, &
NumDOE2DXCoils+NumDXMulModeCoils+NumDXHeatingCoils+NumDXMulSpeedCoils
! Setup Report Variables for Cooling Equipment
! CurrentModuleObject='Coil:Cooling:DX:TwoSpeed'
CALL SetupOutputVariable('Cooling Coil Total Cooling Rate [W]',DXCoil(DXCoilNum)%TotalCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Total Cooling Energy [J]',DXCoil(DXCoilNum)%TotalCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='COOLINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Rate [W]',DXCoil(DXCoilNum)%SensCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Energy [J]',DXCoil(DXCoilNum)%SensCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Rate [W]',DXCoil(DXCoilNum)%LatCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Energy [J]',DXCoil(DXCoilNum)%LatCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Electric Power [W]',DXCoil(DXCoilNum)%ElecCoolingPower,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Electric Energy [J]',DXCoil(DXCoilNum)%ElecCoolingConsumption,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Runtime Fraction []',DXCoil(DXCoilNum)%CoolingCoilRuntimeFraction,'System','Average',&
DXCoil(DXCoilNum)%Name)
IF (DXCoil(DXCoilNum)%ReportEvapCondVars) THEN
CALL SetupOutputVariable('Cooling Coil Condenser Inlet Temperature [C]', &
DXCoil(DXCoilNum)%CondInletTemp,'System','Average', DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Water Volume [m3]',DXCoil(DXCoilNum)%EvapWaterConsump, &
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Water',EndUseKey='Cooling',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Mains Supply Water Volume [m3]', &
DXCoil(DXCoilNum)%EvapWaterConsump, &
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='MainsWater',EndUseKey='Cooling',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Pump Electric Power [W]',DXCoil(DXCoilNum)%EvapCondPumpElecPower, &
'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Pump Electric Energy [J]', &
DXCoil(DXCoilNum)%EvapCondPumpElecConsumption,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
IF(DXCoil(DXCoilNum)%BasinHeaterPowerFTempDiff .GT. 0.0d0)THEN
CALL SetupOutputVariable('Cooling Coil Basin Heater Electric Power [W]', &
DXCoil(DXCoilNum)%BasinHeaterPower,'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Basin Heater Electric Energy [J]', &
DXCoil(DXCoilNum)%BasinHeaterConsumption,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
END IF
END IF
END DO
DO DXCoilNum=NumDOE2DXCoils+NumDXMulModeCoils+NumDXHeatingCoils+NumDXMulSpeedCoils+1, &
NumDOE2DXCoils+NumDXMulModeCoils+NumDXHeatingCoils+NumDXMulSpeedCoils+NumDXHeatPumpWaterHeaterCoils
! Setup Report Variables for Cooling Equipment
! CurrentModuleObject='Coil:WaterHeating:AirToWaterHeatPump'
CALL SetupOutputVariable('Cooling Coil Total Cooling Rate [W]',DXCoil(DXCoilNum)%TotalCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Total Cooling Energy [J]',DXCoil(DXCoilNum)%TotalCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name) !, &
! ResourceTypeKey='ENERGYTRANSFER',EndUseKey='COOLING',GroupKey='Plant')
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Rate [W]',DXCoil(DXCoilNum)%SensCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Energy [J]',DXCoil(DXCoilNum)%SensCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Rate [W]',DXCoil(DXCoilNum)%LatCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Energy [J]',DXCoil(DXCoilNum)%LatCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Runtime Fraction []',DXCoil(DXCoilNum)%CoolingCoilRuntimeFraction,'System','Average',&
DXCoil(DXCoilNum)%Name)
IF (DXCoil(DXCoilNum)%ReportCoolingCoilCrankcasePower) THEN
CALL SetupOutputVariable('Cooling Coil Crankcase Heater Electric Power [W]',DXCoil(DXCoilNum)%CrankcaseHeaterPower,'System',&
'Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Crankcase Heater Electric Energy [J]',DXCoil(DXCoilNum)%CrankcaseHeaterConsumption,&
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='DHW',GroupKey='Plant')
END IF
! new report variables for a HP water heater DX coil
CALL SetupOutputVariable('Cooling Coil Total Water Heating Rate [W]',DXCoil(DXCoilNum)%TotalHeatingEnergyRate,'System', &
'Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Total Water Heating Energy [J]',DXCoil(DXCoilNum)%TotalHeatingEnergy,'System', &
'Sum',DXCoil(DXCoilNum)%Name) !, &
! ResourceTypeKey='ENERGYTRANSFER',EndUseKey='HEATING',GroupKey='Plant')
CALL SetupOutputVariable('Cooling Coil Water Heating Electric Power [W]', &
DXCoil(DXCoilNum)%ElecWaterHeatingPower,'System', &
'Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Water Heating Electric Energy [J]', &
DXCoil(DXCoilNum)%ElecWaterHeatingConsumption,'System', &
'Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='DHW',GroupKey='Plant')
END DO
DO DXCoilNum=NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils+1, &
NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils &
+ NumDXMulSpeedCoolCoils
! Setup Report Variables for Cooling Equipment:
! CurrentModuleObject='Coil:Cooling:DX:MultiSpeed'
CALL SetupOutputVariable('Cooling Coil Total Cooling Rate [W]',DXCoil(DXCoilNum)%TotalCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Total Cooling Energy [J]',DXCoil(DXCoilNum)%TotalCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='COOLINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Rate [W]',DXCoil(DXCoilNum)%SensCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Energy [J]',DXCoil(DXCoilNum)%SensCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Rate [W]',DXCoil(DXCoilNum)%LatCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Energy [J]',DXCoil(DXCoilNum)%LatCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Electric Power [W]',DXCoil(DXCoilNum)%ElecCoolingPower,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Electric Energy [J]',DXCoil(DXCoilNum)%ElecCoolingConsumption,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
IF (DXCoil(DXCoilNum)%FuelType .NE. FuelTypeElectricity) THEN
CALL SetupOutputVariable('Cooling Coil '//TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType))//' Rate [W]', &
DXCoil(DXCoilNum)%FuelUsed,'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil '//TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType))//' Energy [J]', &
DXCoil(DXCoilNum)%FuelConsumed,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey=TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType)),EndUseKey='COOLING',GroupKey='System')
END IF
CALL SetupOutputVariable('Cooling Coil Runtime Fraction []',DXCoil(DXCoilNum)%CoolingCoilRuntimeFraction,'System','Average',&
DXCoil(DXCoilNum)%Name)
IF (DXCoil(DXCoilNum)%ReportEvapCondVars) THEN
CALL SetupOutputVariable('Cooling Coil Condenser Inlet Temperature [C]', &
DXCoil(DXCoilNum)%CondInletTemp,'System','Average', &
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Water Volume [m3]', &
DXCoil(DXCoilNum)%EvapWaterConsump, &
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Water',EndUseKey='Cooling',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Mains Supply Water Volume [m3]', &
DXCoil(DXCoilNum)%EvapWaterConsump, &
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='MainsWater',EndUseKey='Cooling',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Pump Electric Power [W]',DXCoil(DXCoilNum)%EvapCondPumpElecPower, &
'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Evaporative Condenser Pump Electric Energy [J]', &
DXCoil(DXCoilNum)%EvapCondPumpElecConsumption,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
IF(DXCoil(DXCoilNum)%BasinHeaterPowerFTempDiff .GT. 0.0d0)THEN
CALL SetupOutputVariable('Cooling Coil Basin Heater Electric Power [W]', &
DXCoil(DXCoilNum)%BasinHeaterPower,'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Basin Heater Electric Energy [J]', &
DXCoil(DXCoilNum)%BasinHeaterConsumption,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='COOLING',GroupKey='System')
END IF
END IF
END DO
DO DXCoilNum=NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils+ &
NumDXMulSpeedCoolCoils+1, &
NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils &
+ NumDXMulSpeedCoolCoils + NumDXMulSpeedHeatCoils
! Setup Report Variables for Heating Equipment:
! CurrentModuleObject='Coil:Heating:DX:MultiSpeed'
CALL SetupOutputVariable('Heating Coil Total Heating Rate [W]',DXCoil(DXCoilNum)%TotalHeatingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Total Heating Energy [J]',DXCoil(DXCoilNum)%TotalHeatingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='HEATINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Heating Coil Electric Power [W]',DXCoil(DXCoilNum)%ElecHeatingPower,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Electric Energy [J]',DXCoil(DXCoilNum)%ElecHeatingConsumption,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='HEATING',GroupKey='System')
IF (DXCoil(DXCoilNum)%FuelType .NE. FuelTypeElectricity) THEN
CALL SetupOutputVariable('Heating Coil '//TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType))//' Rate [W]', &
DXCoil(DXCoilNum)%FuelUsed,'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil '//TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType))//' Energy [J]', &
DXCoil(DXCoilNum)%FuelConsumed,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey=TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType)),EndUseKey='HEATING',GroupKey='System')
END IF
IF (DXCoil(DXCoilNum)%FuelType .NE. FuelTypeElectricity .AND. DXCoil(DXCoilNum)%DefrostStrategy .EQ. ReverseCycle) THEN
CALL SetupOutputVariable('Heating Coil Defrost '//TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType))//' Rate [W]', &
DXCoil(DXCoilNum)%DefrostPower,'System','Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Defrost '//TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType))//' Energy [J]', &
DXCoil(DXCoilNum)%DefrostConsumption,'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey=TRIM(cValidOutputFuelTypes(DXCoil(DXCoilNum)%FuelType)),EndUseKey='HEATING',GroupKey='System')
ELSE
CALL SetupOutputVariable('Heating Coil Defrost Electric Power [W]',DXCoil(DXCoilNum)%DefrostPower,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Defrost Electric Energy [J]',DXCoil(DXCoilNum)%DefrostConsumption,'System',&
'Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='HEATING',GroupKey='System')
END IF
CALL SetupOutputVariable('Heating Coil Crankcase Heater Electric Power [W]',DXCoil(DXCoilNum)%CrankcaseHeaterPower,'System',&
'Average',DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Crankcase Heater Electric Energy [J]',DXCoil(DXCoilNum)%CrankcaseHeaterConsumption,&
'System','Sum',DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='HEATING',GroupKey='System')
CALL SetupOutputVariable('Heating Coil Runtime Fraction []',DXCoil(DXCoilNum)%HeatingCoilRuntimeFraction,'System','Average',&
DXCoil(DXCoilNum)%Name)
END DO
! VRF cooling coil report variables
DO DXCoilNum=NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils+ &
NumDXMulSpeedCoolCoils + NumDXMulSpeedHeatCoils + 1, &
NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils &
+ NumDXMulSpeedCoolCoils + NumDXMulSpeedHeatCoils + NumVRFCoolingCoils
! Setup Report Variables for Cooling Equipment:
! CurrentModuleObject='Coil:Cooling:DX:VariableRefrigerantFlow
CALL SetupOutputVariable('Cooling Coil Total Cooling Rate [W]',DXCoil(DXCoilNum)%TotalCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Total Cooling Energy [J]',DXCoil(DXCoilNum)%TotalCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='COOLINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Rate [W]',DXCoil(DXCoilNum)%SensCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Sensible Cooling Energy [J]',DXCoil(DXCoilNum)%SensCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Rate [W]',DXCoil(DXCoilNum)%LatCoolingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Latent Cooling Energy [J]',DXCoil(DXCoilNum)%LatCoolingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Runtime Fraction []',DXCoil(DXCoilNum)%CoolingCoilRuntimeFraction,'System','Average',&
DXCoil(DXCoilNum)%Name)
IF (DXCoil(DXCoilNum)%CondensateCollectMode == CondensateToTank) THEN
CALL SetupOutputVariable('Cooling Coil Condensate Volume Flow Rate [m3/s]',DXCoil(DXCoilNum)%CondensateVdot,&
'System','Average', DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Cooling Coil Condensate Volume [m3]',DXCoil(DXCoilNum)%CondensateVol,&
'System','Sum', DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='OnSiteWater', &
EndUseKey='Condensate', GroupKey='System')
ENDIF
END DO
! VRF heating coil report variables
DO DXCoilNum=NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils+ &
NumDXMulSpeedCoolCoils + NumDXMulSpeedHeatCoils + NumVRFCoolingCoils + 1, &
NumDoe2DXCoils + NumDXHeatingCoils + NumDXMulSpeedCoils + NumDXMulModeCoils + NumDXHeatPumpWaterHeaterCoils &
+ NumDXMulSpeedCoolCoils + NumDXMulSpeedHeatCoils + NumVRFCoolingCoils + NumVRFHeatingCoils
! Setup Report Variables for Heating Equipment:
! CurrentModuleObject='Coil:Heating:DX:VariableRefrigerantFlow
CALL SetupOutputVariable('Heating Coil Total Heating Rate [W]',DXCoil(DXCoilNum)%TotalHeatingEnergyRate,'System','Average',&
DXCoil(DXCoilNum)%Name)
CALL SetupOutputVariable('Heating Coil Total Heating Energy [J]',DXCoil(DXCoilNum)%TotalHeatingEnergy,'System','Sum',&
DXCoil(DXCoilNum)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='HEATINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Heating Coil Runtime Fraction []',DXCoil(DXCoilNum)%HeatingCoilRuntimeFraction,'System','Average',&
DXCoil(DXCoilNum)%Name)
END DO
IF (AnyEnergyManagementSystemInModel) THEN
! setup EMS sizing actuators for single speed DX
DO DXCoilNum=1,NumDOE2DXCoils
CALL SetupEMSActuator('Coil:Cooling:DX:SingleSpeed', DXCoil(DXCoilNum)%Name, &
'Autosized Rated Air Flow Rate' , '[m3/s]', &
DXCoil(DXCoilNum)%RatedAirVolFlowRateEMSOverrideON(1), &
DXCoil(DXCoilNum)%RatedAirVolFlowRateEMSOverrideValue(1) )
CALL SetupEMSActuator('Coil:Cooling:DX:SingleSpeed', DXCoil(DXCoilNum)%Name, &
'Autosized Rated Sensible Heat Ratio' , '[W/W]', &
DXCoil(DXCoilNum)%RatedSHREMSOverrideOn(1), &
DXCoil(DXCoilNum)%RatedSHREMSOverrideValue(1) )
CALL SetupEMSActuator('Coil:Cooling:DX:SingleSpeed', DXCoil(DXCoilNum)%Name, &
'Autosized Rated Total Cooling Capacity' , '[W]', &
DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(1), &
DXCoil(DXCoilNum)%RatedTotCapEMSOverrideValue(1) )
ENDDO
ENDIF
DEALLOCATE(Alphas)
DEALLOCATE(cAlphaFields)
DEALLOCATE(cNumericFields)
DEALLOCATE(Numbers)
DEALLOCATE(lAlphaBlanks)
DEALLOCATE(lNumericBlanks)
DEALLOCATE(Alphas2)
DEALLOCATE(cAlphaFields2)
DEALLOCATE(cNumericFields2)
DEALLOCATE(Numbers2)
DEALLOCATE(lAlphaBlanks2)
DEALLOCATE(lNumericBlanks2)
CALL ManageEMS(emsCallFromComponentGetInput)
RETURN
END SUBROUTINE GetDXCoils