SUBROUTINE GetLowTempRadiantSystem
! SUBROUTINE INFORMATION:
! AUTHOR Rick Strand
! DATE WRITTEN November 2000
! MODIFIED August 2003 (added constant flow system, made input extensible)
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine reads the input for low temperature radiant systems
! from the user input file. This will contain all of the information
! needed to simulate a low temperature radiant system.
! METHODOLOGY EMPLOYED:
! Standard EnergyPlus methodology.
! REFERENCES:
! na
! USE STATEMENTS:
USE BranchNodeConnections, ONLY : TestCompSet
USE DataGlobals, ONLY : NumOfZones, AnyEnergyManagementSystemInModel, ScheduleAlwaysOn
USE DataInterfaces, ONLY : SetupEMSInternalVariable,SetupEMSActuator
USE DataHeatBalance, ONLY : Zone, Construct
USE DataSizing, ONLY : AutoSize
USE FluidProperties, ONLY : FindGlycol
USE InputProcessor, ONLY : GetNumObjectsFound, GetObjectItem, FindItemInList, SameString, GetObjectDefMaxArgs, VerifyName
USE NodeInputManager, ONLY : GetOnlySingleNode
USE ScheduleManager, ONLY : GetScheduleIndex
USE DataLoopNode
USE DataSurfaceLists
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
! na
! SUBROUTINE PARAMETER DEFINITIONS:
! REAL(r64), PARAMETER :: FlowFractionTolerance = 0.0001 ! Smallest deviation from unity for the sum of all fractions
REAL(r64), PARAMETER :: MinThrottlingRange = 0.5d0 ! Smallest throttling range allowed in degrees Celsius
CHARACTER(len=*), PARAMETER :: MeanAirTemperature = 'MeanAirTemperature'
CHARACTER(len=*), PARAMETER :: MeanRadiantTemperature = 'MeanRadiantTemperature'
CHARACTER(len=*), PARAMETER :: OperativeTemperature = 'OperativeTemperature'
CHARACTER(len=*), PARAMETER :: OutsideAirDryBulbTemperature = 'OutdoorDryBulbTemperature'
CHARACTER(len=*), PARAMETER :: OutsideAirWetBulbTemperature = 'OutdoorWetBulbTemperature'
CHARACTER(len=*), PARAMETER :: RoutineName='GetLowTempRadiantSystem: ' ! include trailing blank space
CHARACTER(len=*), PARAMETER :: Off = 'Off'
CHARACTER(len=*), PARAMETER :: SimpleOff = 'SimpleOff'
CHARACTER(len=*), PARAMETER :: VariableOff = 'VariableOff'
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
CHARACTER(len=MaxNameLength) :: CurrentModuleObject ! for ease in getting objects
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: Alphas ! Alpha items for object
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cAlphaFields ! Alpha field names
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cNumericFields ! Numeric field names
LOGICAL, ALLOCATABLE, &
DIMENSION(:) :: AssignedAsRadiantSurface ! Set to true when a surface is part of a radiant system
INTEGER :: CheckSurfNum ! Surface number to check to see if it has already been used by a radiant system
LOGICAL :: ErrorsFound=.false. ! Set to true if errors in input, fatal at end of routine
INTEGER :: GlycolIndex ! Index of 'Water' in glycol data structure
INTEGER :: IOStatus ! Used in GetObjectItem
INTEGER :: Item ! Item to be "gotten"
INTEGER :: MaxAlphas ! Maximum number of alphas for these input keywords
INTEGER :: MaxNumbers ! Maximum number of numbers for these input keywords
!unused1208 INTEGER :: NameConflict ! Used to see if a surface name matches the name of a surface list (not allowed)
REAL(r64), ALLOCATABLE, DIMENSION(:) :: Numbers ! Numeric items for object
INTEGER :: NumAlphas ! Number of Alphas for each GetObjectItem call
INTEGER :: NumArgs ! Unused variable that is part of a subroutine call
INTEGER :: NumNumbers ! Number of Numbers for each GetObjectItem call
!unused1208 REAL(r64) :: SumOfAllFractions ! Summation of all of the fractions for splitting flow (must sum to 1)
INTEGER :: SurfListNum ! Index within the SurfList derived type for a surface list name
INTEGER :: SurfNum ! DO loop counter for surfaces
!unused1208 INTEGER :: ZoneForSurface ! Zone number that a particular surface is attached to
INTEGER :: BaseNum ! Temporary number for creating RadiantSystemTypes structure
LOGICAL :: IsNotOK ! Flag to verify name
LOGICAL :: IsBlank ! Flag for blank name
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lAlphaBlanks ! Logical array, alpha field input BLANK = .true.
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lNumericBlanks ! Logical array, numeric field input BLANK = .true.
! FLOW:
! Initializations and allocations
MaxAlphas=0
MaxNumbers=0
CALL GetObjectDefMaxArgs('ZoneHVAC:LowTemperatureRadiant:VariableFlow',NumArgs,NumAlphas,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
CALL GetObjectDefMaxArgs('ZoneHVAC:LowTemperatureRadiant:ConstantFlow',NumArgs,NumAlphas,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
CALL GetObjectDefMaxArgs('ZoneHVAC:LowTemperatureRadiant:Electric',NumArgs,NumAlphas,NumNumbers)
MaxAlphas=MAX(MaxAlphas,NumAlphas)
MaxNumbers=MAX(MaxNumbers,NumNumbers)
ALLOCATE(Alphas(MaxAlphas))
Alphas=' '
ALLOCATE(Numbers(MaxNumbers))
Numbers=0.0d0
ALLOCATE(cAlphaFields(MaxAlphas))
cAlphaFields=' '
ALLOCATE(cNumericFields(MaxNumbers))
cNumericFields=' '
ALLOCATE(lAlphaBlanks(MaxAlphas))
lAlphaBlanks=.TRUE.
ALLOCATE(lNumericBlanks(MaxNumbers))
lNumericBlanks=.TRUE.
NumOfHydrLowTempRadSys = GetNumObjectsFound('ZoneHVAC:LowTemperatureRadiant:VariableFlow')
NumOfCFloLowTempRadSys = GetNumObjectsFound('ZoneHVAC:LowTemperatureRadiant:ConstantFlow')
NumOfElecLowTempRadSys = GetNumObjectsFound('ZoneHVAC:LowTemperatureRadiant:Electric')
TotalNumOfRadSystems=NumOfHydrLowTempRadSys+NumOfElecLowTempRadSys+NumOfCFloLowTempRadSys
ALLOCATE(RadSysTypes(TotalNumOfRadSystems))
ALLOCATE(CheckEquipName(TotalNumOfRadSystems))
CheckEquipName=.true.
ALLOCATE(HydrRadSys(NumOfHydrLowTempRadSys))
IF (NumOfHydrLowTempRadSys > 0) THEN
GlycolIndex = FindGlycol('WATER')
HydrRadSys%GlycolIndex = GlycolIndex
IF (GlycolIndex == 0) THEN
CALL ShowSevereError('Hydronic radiant systems: no water property data found in input')
ErrorsFound=.true.
END IF
ELSE
HydrRadSys%GlycolIndex = 0
ENDIF
ALLOCATE(CFloRadSys(NumOfCFloLowTempRadSys))
IF (NumOfCFloLowTempRadSys > 0) THEN
GlycolIndex = FindGlycol('WATER')
CFloRadSys%GlycolIndex = GlycolIndex
IF (GlycolIndex == 0) THEN
CALL ShowSevereError('Constant flow radiant systems: no water property data found in input')
ErrorsFound = .TRUE.
END IF
ELSE
CFloRadSys%GlycolIndex = 0
ENDIF
ALLOCATE(ElecRadSys(NumOfElecLowTempRadSys))
! make sure data is gotten for surface lists
BaseNum=GetNumberOfSurfaceLists()
! Obtain all of the user data related to hydronic low temperature radiant systems...
BaseNum=0
CurrentModuleObject = 'ZoneHVAC:LowTemperatureRadiant:VariableFlow'
DO Item = 1, NumOfHydrLowTempRadSys
CALL GetObjectItem(CurrentModuleObject,Item,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),RadSysTypes%Name,BaseNum,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
BaseNum=BaseNum+1
RadSysTypes(BaseNum)%Name=Alphas(1)
RadSysTypes(BaseNum)%SystemType=HydronicSystem
! General user input data
HydrRadSys(Item)%Name = Alphas(1)
HydrRadSys(Item)%SchedName = Alphas(2)
IF (lAlphaBlanks(2)) THEN
HydrRadSys(Item)%SchedPtr = ScheduleAlwaysOn
ELSE
HydrRadSys(Item)%SchedPtr = GetScheduleIndex(Alphas(2))
IF (HydrRadSys(Item)%SchedPtr == 0) THEN
CALL ShowSevereError(TRIM(cAlphaFields(2))//' not found for '//TRIM(Alphas(1)))
CALL ShowContinueError('Missing '//TRIM(cAlphaFields(2))//' is '//TRIM(Alphas(2)))
ErrorsFound=.true.
END IF
END IF
HydrRadSys(Item)%ZoneName = Alphas(3)
HydrRadSys(Item)%ZonePtr = FindIteminList(Alphas(3),Zone%Name,NumOfZones)
IF (HydrRadSys(Item)%ZonePtr == 0) THEN
CALL ShowSevereError(RoutineName//'Invalid '//TRIM(cAlphaFields(3))//' = '//TRIM(Alphas(3)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
! ELSEIF (Zone(HydrRadSys(Item)%ZonePtr)%Multiplier > 1 .or. Zone(HydrRadSys(Item)%ZonePtr)%ListMultiplier > 1) THEN
! CALL ShowSevereError(RoutineName//'Zone Multiplier or Zone List Multipliers cannot be used (i.e., >1)')
! CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
! CALL ShowContinueError('Duplicate the zone or make it larger rather than using multipliers. Zone Referenced='// &
! TRIM(HydrRadSys(Item)%ZoneName))
! ErrorsFound=.true.
END IF
HydrRadSys(Item)%SurfListName = Alphas(4)
SurfListNum = 0
IF (NumOfSurfaceLists > 0) SurfListNum = FindItemInList(HydrRadSys(Item)%SurfListName,SurfList%Name,NumOfSurfaceLists)
IF (SurfListNum > 0) THEN ! Found a valid surface list
HydrRadSys(Item)%NumOfSurfaces = SurfList(SurfListNum)%NumOfSurfaces
ALLOCATE (HydrRadSys(Item)%SurfacePtr(HydrRadSys(Item)%NumOfSurfaces))
ALLOCATE (HydrRadSys(Item)%SurfaceName(HydrRadSys(Item)%NumOfSurfaces))
ALLOCATE (HydrRadSys(Item)%SurfaceFlowFrac(HydrRadSys(Item)%NumOfSurfaces))
ALLOCATE (HydrRadSys(Item)%NumCircuits(HydrRadSys(Item)%NumOfSurfaces))
DO SurfNum = 1, SurfList(SurfListNum)%NumOfSurfaces
HydrRadSys(Item)%SurfacePtr(SurfNum) = SurfList(SurfListNum)%SurfPtr(SurfNum)
HydrRadSys(Item)%SurfaceName(SurfNum) = SurfList(SurfListNum)%SurfName(SurfNum)
HydrRadSys(Item)%SurfaceFlowFrac(SurfNum) = SurfList(SurfListNum)%SurfFlowFrac(SurfNum)
IF (HydrRadSys(Item)%SurfacePtr(SurfNum) > 0)THEN
Surface( HydrRadSys(Item)%SurfacePtr(SurfNum) )%IntConvSurfHasActiveInIt = .TRUE.
ENDIF
END DO
ELSE ! User entered a single surface name rather than a surface list
HydrRadSys(Item)%NumOfSurfaces = 1
ALLOCATE (HydrRadSys(Item)%SurfacePtr(HydrRadSys(Item)%NumOfSurfaces))
ALLOCATE (HydrRadSys(Item)%SurfaceName(HydrRadSys(Item)%NumOfSurfaces))
ALLOCATE (HydrRadSys(Item)%SurfaceFlowFrac(HydrRadSys(Item)%NumOfSurfaces))
ALLOCATE (HydrRadSys(Item)%NumCircuits(HydrRadSys(Item)%NumOfSurfaces))
HydrRadSys(Item)%SurfaceName(1) = HydrRadSys(Item)%SurfListName
HydrRadSys(Item)%SurfacePtr(1) = FindIteminList(HydrRadSys(Item)%SurfaceName(1),Surface%Name,TotSurfaces)
HydrRadSys(Item)%SurfaceFlowFrac(1) = 1.0d0
HydrRadSys(Item)%NumCircuits(1) = 0.0d0
! Error checking for single surfaces
IF (HydrRadSys(Item)%SurfacePtr(1) == 0) THEN
CALL ShowSevereError(RoutineName//'Invalid '//TRIM(cAlphaFields(4))//' = '//TRIM(Alphas(4)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
ELSEIF (Surface(HydrRadSys(Item)%SurfacePtr(1))%PartOfVentSlabOrRadiantSurface) THEN
CALL ShowSevereError(RoutineName//TRIM(CurrentModuleObject)//'="'//TRIM(Alphas(1))//'", Invalid Surface')
CALL ShowContinueError(trim(cAlphaFields(4))//'="'//TRIM(Alphas(4))// &
'" has been used in another radiant system or ventilated slab.')
ErrorsFound=.true.
END IF
IF (HydrRadSys(Item)%SurfacePtr(1) /= 0) THEN
Surface( HydrRadSys(Item)%SurfacePtr(1) )%IntConvSurfHasActiveInIt = .TRUE.
Surface( HydrRadSys(Item)%SurfacePtr(1) )%PartOfVentSlabOrRadiantSurface = .true.
ENDIF
END IF
! Error checking for zones and construction information
DO SurfNum = 1, HydrRadSys(Item)%NumOfSurfaces
IF (HydrRadSys(Item)%SurfacePtr(SurfNum) == 0) CYCLE ! invalid surface -- detected earlier
IF (Surface(HydrRadSys(Item)%SurfacePtr(SurfNum))%Zone /= HydrRadSys(Item)%ZonePtr) THEN
CALL ShowSevereError('Surface referenced in '//TRIM(CurrentModuleObject)// &
' not in same zone as Radiant System, surface='// &
TRIM(Surface(HydrRadSys(Item)%SurfacePtr(SurfNum))%Name))
CALL ShowContinueError('Surface in Zone='//TRIM(Zone(Surface(HydrRadSys(Item)%SurfacePtr(SurfNum))%Zone)%Name)//' '// &
'Hydronic Radiant System in '//TRIM(cAlphaFields(3))//' = '//TRIM(Alphas(3)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
IF (Surface(HydrRadSys(Item)%SurfacePtr(SurfNum))%Construction == 0) CYCLE ! Invalid construction -- detected earlier
IF (.NOT. Construct(Surface(HydrRadSys(Item)%SurfacePtr(SurfNum))%Construction)%SourceSinkPresent) THEN
CALL ShowSevereError('Construction referenced in Hydronic Radiant System Surface does not have a source/sink present')
CALL ShowContinueError('Surface name= '//TRIM(Surface(HydrRadSys(Item)%SurfacePtr(SurfNum))%Name)// &
' Construction name = '// &
TRIM(Construct(Surface(HydrRadSys(Item)%SurfacePtr(SurfNum))%Construction)%Name))
CALL ShowContinueError('Construction needs to be defined with a "Construction:InternalSource" object.')
ErrorsFound=.true.
END IF
END DO
HydrRadSys(Item)%TubeDiameter = Numbers(1)
HydrRadSys(Item)%TubeLength = Numbers(2)
! Process the temperature control type
IF (SameString(Alphas(5),MeanAirTemperature)) THEN
HydrRadSys(Item)%ControlType = MATControl
ELSE IF (SameString(Alphas(5),MeanRadiantTemperature)) THEN
HydrRadSys(Item)%ControlType = MRTControl
ELSE IF (SameString(Alphas(5),OperativeTemperature)) THEN
HydrRadSys(Item)%ControlType = OperativeControl
ELSE IF (SameString(Alphas(5),OutsideAirDryBulbTemperature)) THEN
HydrRadSys(Item)%ControlType = ODBControl
ELSE IF (SameString(Alphas(5),OutsideAirWetBulbTemperature)) THEN
HydrRadSys(Item)%ControlType = OWBControl
ELSE
CALL ShowWarningError('Invalid '//TRIM(cAlphaFields(5))//' ='//TRIM(Alphas(5)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
CALL ShowContinueError('Control reset to MAT control for this Hydronic Radiant System.')
HydrRadSys(Item)%ControlType = MATControl
END IF
! Heating user input data
HydrRadSys(Item)%WaterVolFlowMaxHeat = Numbers(3)
HydrRadSys(Item)%HotWaterInNode = &
GetOnlySingleNode(Alphas(6),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Inlet, 1, ObjectIsNotParent)
HydrRadSys(Item)%HotWaterOutNode = &
GetOnlySingleNode(Alphas(7),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Outlet, 1, ObjectIsNotParent)
IF ((.NOT. lAlphaBlanks(6)) .OR. (.NOT. lAlphaBlanks(7))) THEN
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(6),Alphas(7),'Hot Water Nodes')
ENDIF
HydrRadSys(Item)%HotThrottlRange = Numbers(4)
IF (HydrRadSys(Item)%HotThrottlRange < MinThrottlingRange) THEN
CALL ShowWarningError('ZoneHVAC:LowTemperatureRadiant:VariableFlow: Heating throttling range too small, reset to 0.5')
CALL ShowContinueError('Occurs in Radiant System='//TRIM(HydrRadSys(Item)%Name))
HydrRadSys(Item)%HotThrottlRange = MinThrottlingRange
END IF
HydrRadSys(Item)%HotSetptSched = Alphas(8)
HydrRadSys(Item)%HotSetptSchedPtr = GetScheduleIndex(Alphas(8))
IF ((HydrRadSys(Item)%HotSetptSchedPtr == 0).AND.(.NOT. lAlphaBlanks(8))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(8))//' not found: '//TRIM(Alphas(8)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
IF ( (HydrRadSys(Item)%WaterVolFlowMaxHeat == AutoSize) .AND. &
( lAlphaBlanks(6) .OR. lAlphaBlanks(7) .OR. lAlphaBlanks(8) .OR. &
(HydrRadSys(Item)%HotWaterInNode <= 0) .OR. (HydrRadSys(Item)%HotWaterOutNode <= 0) .OR. &
(HydrRadSys(Item)%HotSetptSchedPtr == 0) ) ) THEN
CALL ShowSevereError('Hydronic radiant systems may not be autosized without specification of nodes or schedules.')
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' (heating input) = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
! Cooling user input data
HydrRadSys(Item)%WaterVolFlowMaxCool = Numbers(5)
HydrRadSys(Item)%ColdWaterInNode = &
GetOnlySingleNode(Alphas(9),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Inlet, 2, ObjectIsNotParent)
HydrRadSys(Item)%ColdWaterOutNode = &
GetOnlySingleNode(Alphas(10),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Outlet, 2, ObjectIsNotParent)
IF ((.NOT. lAlphaBlanks(9)) .OR. (.NOT. lAlphaBlanks(10))) THEN
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(9),Alphas(10),'Chilled Water Nodes')
ENDIF
HydrRadSys(Item)%ColdThrottlRange = Numbers(6)
IF (HydrRadSys(Item)%ColdThrottlRange < MinThrottlingRange) THEN
CALL ShowWarningError('ZoneHVAC:LowTemperatureRadiant:VariableFlow: Cooling throttling range too small, reset to 0.5')
CALL ShowContinueError('Occurs in Radiant System='//TRIM(HydrRadSys(Item)%Name))
HydrRadSys(Item)%ColdThrottlRange = MinThrottlingRange
END IF
HydrRadSys(Item)%ColdSetptSched = Alphas(11)
HydrRadSys(Item)%ColdSetptSchedPtr = GetScheduleIndex(Alphas(11))
IF ((HydrRadSys(Item)%ColdSetptSchedPtr == 0).AND.(.NOT. lAlphaBlanks(11))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(11))//' not found: '//TRIM(Alphas(11)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
IF (SameString(Alphas(12),Off)) THEN
HydrRadSys(Item)%CondCtrlType = CondCtrlNone
ELSE IF (SameString(Alphas(12),SimpleOff)) THEN
HydrRadSys(Item)%CondCtrlType = CondCtrlSimpleOff
ELSE IF (SameString(Alphas(12),VariableOff)) THEN
HydrRadSys(Item)%CondCtrlType = CondCtrlVariedOff
ELSE
HydrRadSys(Item)%CondCtrlType = CondCtrlSimpleOff
END IF
HydrRadSys(Item)%CondDewPtDeltaT = Numbers(7)
IF (SameString(Alphas(13),OnePerSurf)) THEN
HydrRadSys(Item)%NumCircCalcMethod = OneCircuit
ELSE IF (SameString(Alphas(13),CalcFromLength)) THEN
HydrRadSys(Item)%NumCircCalcMethod = CalculateFromLength
ELSE
HydrRadSys(Item)%NumCircCalcMethod = OneCircuit
END IF
HydrRadSys(Item)%CircLength = Numbers(8)
IF ( (HydrRadSys(Item)%WaterVolFlowMaxCool == AutoSize) .AND. &
( lAlphaBlanks(9) .OR. lAlphaBlanks(10) .OR. lAlphaBlanks(11) .OR. &
(HydrRadSys(Item)%ColdWaterInNode <= 0) .OR. (HydrRadSys(Item)%ColdWaterOutNode <= 0) .OR. &
(HydrRadSys(Item)%ColdSetptSchedPtr == 0) ) ) THEN
CALL ShowSevereError('Hydronic radiant systems may not be autosized without specification of nodes or schedules')
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' (cooling input) ='//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
END DO
! Obtain all of the user data related to constant flow (hydronic) low temperature radiant systems...
CurrentModuleObject = 'ZoneHVAC:LowTemperatureRadiant:ConstantFlow'
DO Item = 1, NumOfCFloLowTempRadSys
CALL GetObjectItem(CurrentModuleObject,Item,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),RadSysTypes%Name,BaseNum,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
BaseNum=BaseNum+1
RadSysTypes(BaseNum)%Name=Alphas(1)
RadSysTypes(BaseNum)%SystemType=ConstantFlowSystem
! General user input data
CFloRadSys(Item)%Name = Alphas(1)
CFloRadSys(Item)%SchedName = Alphas(2)
IF (lAlphaBlanks(2)) THEN
CFloRadSys(Item)%SchedPtr = ScheduleAlwaysOn
ELSE
CFloRadSys(Item)%SchedPtr = GetScheduleIndex(Alphas(2))
IF (CFloRadSys(Item)%SchedPtr == 0) THEN
CALL ShowSevereError(TRIM(cAlphaFields(2))//' not found for '//TRIM(Alphas(1)))
CALL ShowContinueError('Missing '//TRIM(cAlphaFields(2))//' is '//TRIM(Alphas(2)))
ErrorsFound=.true.
END IF
END IF
CFloRadSys(Item)%ZoneName = Alphas(3)
CFloRadSys(Item)%ZonePtr = FindIteminList(Alphas(3),Zone%Name,NumOfZones)
IF (CFloRadSys(Item)%ZonePtr == 0) THEN
CALL ShowSevereError(RoutineName//'Invalid '//TRIM(cAlphaFields(3))//' = '//TRIM(Alphas(3)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
! ELSEIF (Zone(CFloRadSys(Item)%ZonePtr)%Multiplier > 1 .or. Zone(CFloRadSys(Item)%ZonePtr)%ListMultiplier > 1) THEN
! CALL ShowSevereError(RoutineName//'Zone Multiplier or Zone List Multipliers cannot be used (i.e., >1)')
! CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
! CALL ShowContinueError('Duplicate the zone or make it larger rather than using multipliers. Zone Referenced='// &
! TRIM(CFloRadSys(Item)%ZoneName))
! ErrorsFound=.true.
END IF
CFloRadSys(Item)%SurfListName = Alphas(4)
SurfListNum = 0
IF (NumOfSurfaceLists > 0) SurfListNum = FindItemInList(CFloRadSys(Item)%SurfListName,SurfList%Name,NumOfSurfaceLists)
IF (SurfListNum > 0) THEN ! Found a valid surface list
CFloRadSys(Item)%NumOfSurfaces = SurfList(SurfListNum)%NumOfSurfaces
ALLOCATE (CFloRadSys(Item)%SurfacePtr(CFloRadSys(Item)%NumOfSurfaces))
ALLOCATE (CFloRadSys(Item)%SurfaceName(CFloRadSys(Item)%NumOfSurfaces))
ALLOCATE (CFloRadSys(Item)%SurfaceFlowFrac(CFloRadSys(Item)%NumOfSurfaces))
ALLOCATE (CFloRadSys(Item)%NumCircuits(CFloRadSys(Item)%NumOfSurfaces))
MaxCloNumOfSurfaces=Max(MaxCloNumOfSurfaces,CFloRadSys(Item)%NumOfSurfaces)
DO SurfNum = 1, SurfList(SurfListNum)%NumOfSurfaces
CFloRadSys(Item)%SurfacePtr(SurfNum) = SurfList(SurfListNum)%SurfPtr(SurfNum)
CFloRadSys(Item)%SurfaceName(SurfNum) = SurfList(SurfListNum)%SurfName(SurfNum)
CFloRadSys(Item)%SurfaceFlowFrac(SurfNum) = SurfList(SurfListNum)%SurfFlowFrac(SurfNum)
CFloRadSys(Item)%NumCircuits(SurfNum) = 0.0d0
IF (CFloRadSys(Item)%SurfacePtr(SurfNum) /= 0) THEN
Surface( CFloRadSys(Item)%SurfacePtr(SurfNum) )%IntConvSurfHasActiveInIt = .TRUE.
ENDIF
END DO
ELSE ! User entered a single surface name rather than a surface list
CFloRadSys(Item)%NumOfSurfaces = 1
ALLOCATE (CFloRadSys(Item)%SurfacePtr(CFloRadSys(Item)%NumOfSurfaces))
ALLOCATE (CFloRadSys(Item)%SurfaceName(CFloRadSys(Item)%NumOfSurfaces))
ALLOCATE (CFloRadSys(Item)%SurfaceFlowFrac(CFloRadSys(Item)%NumOfSurfaces))
ALLOCATE (CFloRadSys(Item)%NumCircuits(CFloRadSys(Item)%NumOfSurfaces))
MaxCloNumOfSurfaces=Max(MaxCloNumOfSurfaces,CFloRadSys(Item)%NumOfSurfaces)
CFloRadSys(Item)%SurfaceName(1) = CFloRadSys(Item)%SurfListName
CFloRadSys(Item)%SurfacePtr(1) = FindIteminList(CFloRadSys(Item)%SurfaceName(1),Surface%Name,TotSurfaces)
CFloRadSys(Item)%SurfaceFlowFrac(1) = 1.0d0
CFloRadSys(Item)%NumCircuits(1) = 0.0d0
! Error checking for single surfaces
IF (CFloRadSys(Item)%SurfacePtr(1) == 0) THEN
CALL ShowSevereError(RoutineName//'Invalid '//TRIM(cAlphaFields(4))//' = '//TRIM(Alphas(4)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
ELSEIF (Surface(CFloRadSys(Item)%SurfacePtr(1))%PartOfVentSlabOrRadiantSurface) THEN
CALL ShowSevereError(RoutineName//TRIM(CurrentModuleObject)//'="'//TRIM(Alphas(1))//'", Invalid Surface')
CALL ShowContinueError(trim(cAlphaFields(4))//'="'//TRIM(Alphas(4))// &
'" has been used in another radiant system or ventilated slab.')
ErrorsFound=.true.
END IF
IF (CFloRadSys(Item)%SurfacePtr(1) /= 0) THEN
Surface( CFloRadSys(Item)%SurfacePtr(1) )%IntConvSurfHasActiveInIt = .TRUE.
Surface( CFloRadSys(Item)%SurfacePtr(1) )%PartOfVentSlabOrRadiantSurface = .true.
ENDIF
END IF
! Error checking for zones and construction information
DO SurfNum = 1, CFloRadSys(Item)%NumOfSurfaces
IF (CFloRadSys(Item)%SurfacePtr(SurfNum) == 0) CYCLE ! invalid surface -- detected earlier
IF (Surface(CFloRadSys(Item)%SurfacePtr(SurfNum))%Zone /= CFloRadSys(Item)%ZonePtr) THEN
CALL ShowSevereError('Surface referenced in '//TRIM(CurrentModuleObject)//' not in same zone as Radiant System, '// &
'surface='//TRIM(Surface(CFloRadSys(Item)%SurfacePtr(SurfNum))%Name))
CALL ShowContinueError('Surface in Zone='//TRIM(Zone(Surface(CFloRadSys(Item)%SurfacePtr(SurfNum))%Zone)%Name)//' '// &
'Constant Flow Radiant System in '//TRIM(cAlphaFields(3))//' = '//TRIM(Alphas(3)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
IF (Surface(CFloRadSys(Item)%SurfacePtr(SurfNum))%Construction == 0) CYCLE ! invalid construction, detected earlier
IF (.NOT. Construct(Surface(CFloRadSys(Item)%SurfacePtr(SurfNum))%Construction)%SourceSinkPresent) THEN
CALL ShowSevereError('Construction referenced in Constant Flow Radiant System Surface does not have a source/sink')
CALL ShowContinueError('Surface name= '//TRIM(Surface(CFloRadSys(Item)%SurfacePtr(SurfNum))%Name)// &
' Construction name = '// &
TRIM(Construct(Surface(CFloRadSys(Item)%SurfacePtr(SurfNum))%Construction)%Name))
CALL ShowContinueError('Construction needs to be defined with a "Construction:InternalSource" object.')
ErrorsFound=.true.
END IF
END DO
CFloRadSys(Item)%TubeDiameter = Numbers(1)
CFloRadSys(Item)%TubeLength = Numbers(2)
! Process the temperature control type
IF (SameString(Alphas(5),MeanAirTemperature)) THEN
CFloRadSys(Item)%ControlType = MATControl
ELSE IF (SameString(Alphas(5),MeanRadiantTemperature)) THEN
CFloRadSys(Item)%ControlType = MRTControl
ELSE IF (SameString(Alphas(5),OperativeTemperature)) THEN
CFloRadSys(Item)%ControlType = OperativeControl
ELSE IF (SameString(Alphas(5),OutsideAirDryBulbTemperature)) THEN
CFloRadSys(Item)%ControlType = ODBControl
ELSE IF (SameString(Alphas(5),OutsideAirWetBulbTemperature)) THEN
CFloRadSys(Item)%ControlType = OWBControl
ELSE
CALL ShowWarningError('Invalid '//TRIM(cAlphaFields(5))//' ='//TRIM(Alphas(5)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
CALL ShowContinueError('Control reset to MAT control for this Constant Flow Radiant System.')
CFloRadSys(Item)%ControlType = MATControl
END IF
! Process pump input for constant flow (hydronic) radiant system
CFloRadSys(Item)%WaterVolFlowMax = Numbers(3)
CFloRadSys(Item)%VolFlowSched = Alphas(6)
CFloRadSys(Item)%VolFlowSchedPtr = GetScheduleIndex(Alphas(6))
IF ((CFloRadSys(Item)%VolFlowSchedPtr == 0).AND.(.NOT. lAlphaBlanks(6))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(6))//' not found: '//TRIM(Alphas(6)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
CFloRadSys(Item)%NomPumpHead = Numbers(4)
CFloRadSys(Item)%NomPowerUse = Numbers(5)
CFloRadSys(Item)%MotorEffic = Numbers(6)
CFloRadSys(Item)%FracMotorLossToFluid = Numbers(7)
! Heating user input data
CFloRadSys(Item)%HotWaterInNode = &
GetOnlySingleNode(Alphas(7),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Inlet, 1, ObjectIsNotParent)
CFloRadSys(Item)%HotWaterOutNode = &
GetOnlySingleNode(Alphas(8),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Outlet, 1, ObjectIsNotParent)
IF ((.NOT. lAlphaBlanks(7)) .OR. (.NOT. lAlphaBlanks(8))) THEN
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(7),Alphas(8),'Hot Water Nodes')
ENDIF
CFloRadSys(Item)%HotWaterHiTempSched = Alphas(9)
CFloRadSys(Item)%HotWaterHiTempSchedPtr = GetScheduleIndex(Alphas(9))
IF ((CFloRadSys(Item)%HotWaterHiTempSchedPtr == 0).AND.(.NOT. lAlphaBlanks(9))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(9))//' not found: '//TRIM(Alphas(9)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
CFloRadSys(Item)%HotWaterLoTempSched = Alphas(10)
CFloRadSys(Item)%HotWaterLoTempSchedPtr = GetScheduleIndex(Alphas(10))
IF ((CFloRadSys(Item)%HotWaterLoTempSchedPtr == 0).AND.(.NOT. lAlphaBlanks(10))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(10))//' not found: '//TRIM(Alphas(10)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
CFloRadSys(Item)%HotCtrlHiTempSched = Alphas(11)
CFloRadSys(Item)%HotCtrlHiTempSchedPtr = GetScheduleIndex(Alphas(11))
IF ((CFloRadSys(Item)%HotCtrlHiTempSchedPtr == 0).AND.(.NOT. lAlphaBlanks(11))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(11))//' not found: '//TRIM(Alphas(11)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
CFloRadSys(Item)%HotCtrlLoTempSched = Alphas(12)
CFloRadSys(Item)%HotCtrlLoTempSchedPtr = GetScheduleIndex(Alphas(12))
IF ((CFloRadSys(Item)%HotCtrlLoTempSchedPtr == 0).AND.(.NOT. lAlphaBlanks(12))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(12))//' not found: '//TRIM(Alphas(12)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
! Cooling user input data
CFloRadSys(Item)%ColdWaterInNode = &
GetOnlySingleNode(Alphas(13),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Inlet, 2, ObjectIsNotParent)
CFloRadSys(Item)%ColdWaterOutNode = &
GetOnlySingleNode(Alphas(14),ErrorsFound,TRIM(CurrentModuleObject),Alphas(1), &
NodeType_Water,NodeConnectionType_Outlet, 2, ObjectIsNotParent)
IF ((.NOT. lAlphaBlanks(13)) .OR. (.NOT. lAlphaBlanks(14))) THEN
CALL TestCompSet(TRIM(CurrentModuleObject),Alphas(1),Alphas(13),Alphas(14),'Chilled Water Nodes')
ENDIF
CFloRadSys(Item)%ColdWaterHiTempSched = Alphas(15)
CFloRadSys(Item)%ColdWaterHiTempSchedPtr = GetScheduleIndex(Alphas(15))
IF ((CFloRadSys(Item)%ColdWaterHiTempSchedPtr == 0).AND.(.NOT. lAlphaBlanks(15))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(15))//' not found: '//TRIM(Alphas(15)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
CFloRadSys(Item)%ColdWaterLoTempSched = Alphas(16)
CFloRadSys(Item)%ColdWaterLoTempSchedPtr = GetScheduleIndex(Alphas(16))
IF ((CFloRadSys(Item)%ColdWaterLoTempSchedPtr == 0).AND.(.NOT. lAlphaBlanks(16))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(16))//' not found: '//TRIM(Alphas(16)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
CFloRadSys(Item)%ColdCtrlHiTempSched = Alphas(17)
CFloRadSys(Item)%ColdCtrlHiTempSchedPtr = GetScheduleIndex(Alphas(17))
IF ((CFloRadSys(Item)%ColdCtrlHiTempSchedPtr == 0).AND.(.NOT. lAlphaBlanks(17))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(17))//' not found: '//TRIM(Alphas(17)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
CFloRadSys(Item)%ColdCtrlLoTempSched = Alphas(18)
CFloRadSys(Item)%ColdCtrlLoTempSchedPtr = GetScheduleIndex(Alphas(18))
IF ((CFloRadSys(Item)%ColdCtrlLoTempSchedPtr == 0).AND.(.NOT. lAlphaBlanks(18))) THEN
CALL ShowSevereError(TRIM(cAlphaFields(18))//' not found: '//TRIM(Alphas(18)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
IF (SameString(Alphas(19),Off)) THEN
CFloRadSys(Item)%CondCtrlType = CondCtrlNone
ELSE IF (SameString(Alphas(19),SimpleOff)) THEN
CFloRadSys(Item)%CondCtrlType = CondCtrlSimpleOff
ELSE IF (SameString(Alphas(19),VariableOff)) THEN
CFloRadSys(Item)%CondCtrlType = CondCtrlVariedOff
ELSE
CFloRadSys(Item)%CondCtrlType = CondCtrlSimpleOff
END IF
CFloRadSys(Item)%CondDewPtDeltaT = Numbers(8)
IF (SameString(Alphas(20),OnePerSurf)) THEN
CFloRadSys(Item)%NumCircCalcMethod = OneCircuit
ELSE IF (SameString(Alphas(20),CalcFromLength)) THEN
CFloRadSys(Item)%NumCircCalcMethod = CalculateFromLength
ELSE
CFloRadSys(Item)%NumCircCalcMethod = OneCircuit
END IF
CFloRadSys(Item)%CircLength = Numbers(9)
END DO
! Obtain all of the user data related to electric low temperature radiant systems...
CurrentModuleObject = 'ZoneHVAC:LowTemperatureRadiant:Electric'
DO Item = 1, NumOfElecLowTempRadSys
CALL GetObjectItem(CurrentModuleObject,Item,Alphas,NumAlphas,Numbers,NumNumbers,IOStatus, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.FALSE.
IsBlank=.FALSE.
CALL VerifyName(Alphas(1),RadSysTypes%Name,BaseNum,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) Alphas(1)='xxxxx'
ENDIF
BaseNum=BaseNum+1
RadSysTypes(BaseNum)%Name=Alphas(1)
RadSysTypes(BaseNum)%SystemType=ElectricSystem
! General user input data
ElecRadSys(Item)%Name = Alphas(1)
ElecRadSys(Item)%SchedName = Alphas(2)
IF (lAlphaBlanks(2)) THEN
ElecRadSys(Item)%SchedPtr = ScheduleAlwaysOn
ELSE
ElecRadSys(Item)%SchedPtr = GetScheduleIndex(Alphas(2))
IF (ElecRadSys(Item)%SchedPtr == 0) THEN
CALL ShowSevereError(TRIM(cAlphaFields(2))//' not found for'//TRIM(Alphas(1)))
CALL ShowContinueError('Incorrect '//TRIM(cAlphaFields(2))//' = '//TRIM(Alphas(2)))
ErrorsFound=.true.
END IF
END IF
ElecRadSys(Item)%ZoneName = Alphas(3)
ElecRadSys(Item)%ZonePtr = FindIteminList(Alphas(3),Zone%Name,NumOfZones)
IF (ElecRadSys(Item)%ZonePtr == 0) THEN
CALL ShowSevereError(RoutineName//'Invalid '//TRIM(cAlphaFields(3))//' = '//TRIM(Alphas(3)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
! ELSEIF (Zone(ElecRadSys(Item)%ZonePtr)%Multiplier > 1 .or. Zone(ElecRadSys(Item)%ZonePtr)%ListMultiplier > 1) THEN
! CALL ShowSevereError(RoutineName//'Zone Multiplier or Zone List Multipliers cannot be used (i.e., >1)')
! CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
! CALL ShowContinueError('Duplicate the zone or make it larger rather than using multipliers. Zone Referenced='// &
! TRIM(ElecRadSys(Item)%ZoneName))
! ErrorsFound=.true.
END IF
ElecRadSys(Item)%SurfListName = Alphas(4)
SurfListNum = 0
IF (NumOfSurfaceLists > 0) SurfListNum = FindItemInList(ElecRadSys(Item)%SurfListName,SurfList%Name,NumOfSurfaceLists)
IF (SurfListNum > 0) THEN ! Found a valid surface list
ElecRadSys(Item)%NumOfSurfaces = SurfList(SurfListNum)%NumOfSurfaces
ALLOCATE (ElecRadSys(Item)%SurfacePtr(ElecRadSys(Item)%NumOfSurfaces))
ALLOCATE (ElecRadSys(Item)%SurfaceName(ElecRadSys(Item)%NumOfSurfaces))
ALLOCATE (ElecRadSys(Item)%SurfacePowerFrac(ElecRadSys(Item)%NumOfSurfaces))
DO SurfNum = 1, ElecRadSys(SurfListNum)%NumOfSurfaces
ElecRadSys(Item)%SurfacePtr(SurfNum) = SurfList(SurfListNum)%SurfPtr(SurfNum)
ElecRadSys(Item)%SurfaceName(SurfNum) = SurfList(SurfListNum)%SurfName(SurfNum)
ElecRadSys(Item)%SurfacePowerFrac(SurfNum) = SurfList(SurfListNum)%SurfFlowFrac(SurfNum)
END DO
ELSE ! User entered a single surface name rather than a surface list
ElecRadSys(Item)%NumOfSurfaces = 1
ALLOCATE (ElecRadSys(Item)%SurfacePtr(ElecRadSys(Item)%NumOfSurfaces))
ALLOCATE (ElecRadSys(Item)%SurfaceName(ElecRadSys(Item)%NumOfSurfaces))
ALLOCATE (ElecRadSys(Item)%SurfacePowerFrac(ElecRadSys(Item)%NumOfSurfaces))
ElecRadSys(Item)%SurfaceName(1) = ElecRadSys(Item)%SurfListName
ElecRadSys(Item)%SurfacePtr(1) = FindIteminList(ElecRadSys(Item)%SurfaceName(1),Surface%Name,TotSurfaces)
ElecRadSys(Item)%SurfacePowerFrac(1) = 1.0d0
! Error checking for single surfaces
IF (ElecRadSys(Item)%SurfacePtr(1) == 0) THEN
CALL ShowSevereError(RoutineName//'Invalid '//TRIM(cAlphaFields(4))//' = '//TRIM(Alphas(4)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
ELSEIF (Surface(ElecRadSys(Item)%SurfacePtr(1))%PartOfVentSlabOrRadiantSurface) THEN
CALL ShowSevereError(RoutineName//TRIM(CurrentModuleObject)//'="'//TRIM(Alphas(1))//'", Invalid Surface')
CALL ShowContinueError(trim(cAlphaFields(4))//'="'//TRIM(Alphas(4))// &
'" has been used in another radiant system or ventilated slab.')
ErrorsFound=.true.
END IF
IF (ElecRadSys(Item)%SurfacePtr(1) /= 0) THEN
Surface( ElecRadSys(Item)%SurfacePtr(1) )%PartOfVentSlabOrRadiantSurface = .true.
ENDIF
END IF
! Error checking for zones and construction information
DO SurfNum = 1, ElecRadSys(Item)%NumOfSurfaces
IF (ElecRadSys(Item)%SurfacePtr(SurfNum) == 0) CYCLE ! Invalid surface -- detected earlier
IF (Surface(ElecRadSys(Item)%SurfacePtr(SurfNum))%Zone /= ElecRadSys(Item)%ZonePtr) THEN
CALL ShowSevereError('Surface referenced in '//TRIM(CurrentModuleObject)//' not in same zone as Radiant System,'// &
' surface='//TRIM(Surface(ElecRadSys(Item)%SurfacePtr(SurfNum))%Name))
CALL ShowContinueError('Surface in Zone='//TRIM(Zone(Surface(ElecRadSys(Item)%SurfacePtr(SurfNum))%Zone)%Name)//' '// &
'Electric Radiant System in '//TRIM(cAlphaFields(3))//' = '//TRIM(Alphas(3)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ErrorsFound=.true.
END IF
IF (Surface(ElecRadSys(Item)%SurfacePtr(SurfNum))%Construction == 0) CYCLE ! invalid construction -- detected earlier
IF (.NOT. Construct(Surface(ElecRadSys(Item)%SurfacePtr(SurfNum))%Construction)%SourceSinkPresent) THEN
CALL ShowSevereError('Construction referenced in Electric Radiant System Surface does not have a source/sink present')
CALL ShowContinueError('Surface name= '//TRIM(Surface(ElecRadSys(Item)%SurfacePtr(SurfNum))%Name)// &
' Construction name = '// &
TRIM(Construct(Surface(ElecRadSys(Item)%SurfacePtr(SurfNum))%Construction)%Name))
CALL ShowContinueError('Construction needs to be defined with a "Construction:InternalSource" object.')
ErrorsFound=.true.
END IF
END DO
! Heating user input data
ElecRadSys(Item)%MaxElecPower = Numbers(1)
! Process the temperature control type
IF (SameString(Alphas(5),MeanAirTemperature)) THEN
ElecRadSys(Item)%ControlType = MATControl
ELSE IF (SameString(Alphas(5),MeanRadiantTemperature)) THEN
ElecRadSys(Item)%ControlType = MRTControl
ELSE IF (SameString(Alphas(5),OperativeTemperature)) THEN
ElecRadSys(Item)%ControlType = OperativeControl
ELSE IF (SameString(Alphas(5),OutsideAirDryBulbTemperature)) THEN
ElecRadSys(Item)%ControlType = ODBControl
ELSE IF (SameString(Alphas(5),OutsideAirWetBulbTemperature)) THEN
ElecRadSys(Item)%ControlType = OWBControl
ELSE
CALL ShowWarningError('Invalid '//TRIM(cAlphaFields(5))//' = '//TRIM(Alphas(5)))
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
CALL ShowContinueError('Control reset to MAT control for this Electric Radiant System.')
ElecRadSys(Item)%ControlType = MATControl
END IF
ElecRadSys(Item)%ThrottlRange = Numbers(2)
IF (ElecRadSys(Item)%ThrottlRange < MinThrottlingRange) THEN
CALL ShowWarningError(TRIM(cNumericFields(2))//' out of range, reset to 0.5')
CALL ShowContinueError('Occurs in '//TRIM(CurrentModuleObject)//' = '//TRIM(Alphas(1)))
ElecRadSys(Item)%ThrottlRange = MinThrottlingRange
END IF
ElecRadSys(Item)%SetptSched = Alphas(6)
ElecRadSys(Item)%SetptSchedPtr = GetScheduleIndex(Alphas(6))
IF (ElecRadSys(Item)%SetptSchedPtr == 0) THEN
IF (lAlphaBlanks(6)) THEN
CALL ShowSevereError(TRIM(cAlphaFields(6))//' must be input, missing for '//TRIM(Alphas(1)))
ELSE
CALL ShowSevereError(TRIM(cAlphaFields(6))//' not found for '//TRIM(Alphas(1)))
CALL ShowContinueError('Incorrect '//TRIM(cAlphaFields(6))//' = '//TRIM(Alphas(6)))
END IF
ErrorsFound=.true.
END IF
END DO
! Check to see if any surface is included in more than one radiant system. This is not allowed
! and thus indicative that there is an error in the input file. This is to make sure that two
! different radiant systems are competing for the same surface. Allowing this to happen would
! result in lost energy somewhere and the situation really is not physically possible anyway.
ALLOCATE (AssignedAsRadiantSurface(TotSurfaces))
AssignedAsRadiantSurface = .FALSE.
DO Item = 1, NumOfHydrLowTempRadSys
DO SurfNum = 1, HydrRadSys(Item)%NumOfSurfaces
CheckSurfNum = HydrRadSys(Item)%SurfacePtr(SurfNum)
IF (CheckSurfNum == 0) CYCLE
IF (AssignedAsRadiantSurface(CheckSurfNum)) THEN
CALL ShowSevereError('Surface '//TRIM(Surface(CheckSurfNum)%Name)//' is referenced by more than one '// &
'radiant system--this is not allowed')
ErrorsFound = .TRUE.
ELSE
AssignedAsRadiantSurface(CheckSurfNum) = .TRUE.
END IF
! Also check the other side of interzone partitions
IF ( (Surface(CheckSurfNum)%ExtBoundCond > 0) .AND. &
(Surface(CheckSurfNum)%ExtBoundCond /= CheckSurfNum) ) THEN
IF (AssignedAsRadiantSurface(Surface(CheckSurfNum)%ExtBoundCond)) THEN
CALL ShowSevereError('Interzone surface '//TRIM(Surface(Surface(CheckSurfNum)%ExtBoundCond)%Name)// &
' is referenced by more than one radiant system--this is not allowed')
ErrorsFound = .TRUE.
ELSE
AssignedAsRadiantSurface(Surface(CheckSurfNum)%ExtBoundCond) = .TRUE.
END IF
END IF
END DO
END DO
DO Item = 1, NumOfCFloLowTempRadSys
DO SurfNum = 1, CFloRadSys(Item)%NumOfSurfaces
CheckSurfNum = CFloRadSys(Item)%SurfacePtr(SurfNum)
IF (CheckSurfNum == 0) CYCLE
IF (AssignedAsRadiantSurface(CheckSurfNum)) THEN
CALL ShowSevereError('Surface '//TRIM(Surface(CheckSurfNum)%Name)//' is referenced by more than one '// &
'radiant system--this is not allowed')
ErrorsFound = .TRUE.
ELSE
AssignedAsRadiantSurface(CheckSurfNum) = .TRUE.
END IF
! Also check the other side of interzone partitions
IF ( (Surface(CheckSurfNum)%ExtBoundCond > 0) .AND. &
(Surface(CheckSurfNum)%ExtBoundCond /= CheckSurfNum) ) THEN
IF (AssignedAsRadiantSurface(Surface(CheckSurfNum)%ExtBoundCond)) THEN
CALL ShowSevereError('Interzone surface '//TRIM(Surface(Surface(CheckSurfNum)%ExtBoundCond)%Name)// &
' is referenced by more than one radiant system--this is not allowed')
ErrorsFound = .TRUE.
ELSE
AssignedAsRadiantSurface(Surface(CheckSurfNum)%ExtBoundCond) = .TRUE.
END IF
END IF
END DO
END DO
DO Item = 1, NumOfElecLowTempRadSys
DO SurfNum = 1, ElecRadSys(Item)%NumOfSurfaces
CheckSurfNum = ElecRadSys(Item)%SurfacePtr(SurfNum)
IF (CheckSurfNum == 0) CYCLE
IF (AssignedAsRadiantSurface(CheckSurfNum)) THEN
CALL ShowSevereError('Surface '//TRIM(Surface(CheckSurfNum)%Name)//' is referenced by more than one '// &
'radiant system--this is not allowed')
ErrorsFound = .TRUE.
ELSE
AssignedAsRadiantSurface(CheckSurfNum) = .TRUE.
END IF
! Also check the other side of interzone partitions
IF ( (Surface(CheckSurfNum)%ExtBoundCond > 0) .AND. &
(Surface(CheckSurfNum)%ExtBoundCond /= CheckSurfNum) ) THEN
IF (AssignedAsRadiantSurface(Surface(CheckSurfNum)%ExtBoundCond)) THEN
CALL ShowSevereError('Interzone surface '//TRIM(Surface(Surface(CheckSurfNum)%ExtBoundCond)%Name)// &
' is referenced by more than one radiant system--this is not allowed')
ErrorsFound = .TRUE.
ELSE
AssignedAsRadiantSurface(Surface(CheckSurfNum)%ExtBoundCond) = .TRUE.
END IF
END IF
END DO
END DO
DEALLOCATE(AssignedAsRadiantSurface)
! DEALLOCATE(SurfList)
DEALLOCATE(Alphas)
DEALLOCATE(Numbers)
DEALLOCATE(cAlphaFields)
DEALLOCATE(cNumericFields)
DEALLOCATE(lAlphaBlanks)
DEALLOCATE(lNumericBlanks)
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in input. Preceding conditions cause termination.')
END IF
! Set up the output variables for low temperature radiant systems
DO Item = 1, NumOfHydrLowTempRadSys
CALL SetupOutputVariable('Zone Radiant HVAC Heating Rate [W]', &
HydrRadSys(Item)%HeatPower,'System','Average', &
HydrRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Heating Energy [J]', &
HydrRadSys(Item)%HeatEnergy,'System','Sum',HydrRadSys(Item)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='HEATINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Heating Fluid Energy [J]', &
HydrRadSys(Item)%HeatEnergy,'System','Sum',HydrRadSys(Item)%Name, &
ResourceTypeKey='PLANTLOOPHEATINGDEMAND',EndUseKey='HEATINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Cooling Rate [W]', &
HydrRadSys(Item)%CoolPower,'System','Average', &
HydrRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Cooling Energy [J]', &
HydrRadSys(Item)%CoolEnergy,'System','Sum',HydrRadSys(Item)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='COOLINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Cooling Fluid Energy [J]', &
HydrRadSys(Item)%CoolEnergy,'System','Sum',HydrRadSys(Item)%Name, &
ResourceTypeKey='PLANTLOOPCOOLINGDEMAND',EndUseKey='COOLINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Mass Flow Rate [kg/s]', &
HydrRadSys(Item)%WaterMassFlowRate,'System','Average', &
HydrRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Inlet Temperature [C]', &
HydrRadSys(Item)%WaterInletTemp,'System','Average', &
HydrRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Outlet Temperature [C]', &
HydrRadSys(Item)%WaterOutletTemp,'System','Average', &
HydrRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Moisture Condensation Time [s]', &
HydrRadSys(Item)%CondCausedTimeOff,'System','Sum',HydrRadSys(Item)%Name)
IF (AnyEnergyManagementSystemInModel) THEN
CALL SetupEMSInternalVariable('Hydronic Low Temp Radiant Design Water Volume Flow Rate for Heating', &
HydrRadSys(Item)%Name, '[m3/s]', HydrRadSys(Item)%WaterVolFlowMaxHeat )
CALL SetupEMSInternalVariable('Hydronic Low Temp Radiant Design Water Volume Flow Rate for Cooling', &
HydrRadSys(Item)%Name, '[m3/s]', HydrRadSys(Item)%WaterVolFlowMaxCool )
CALL SetupEMSActuator('Hydronic Low Temp Radiant', HydrRadSys(Item)%Name, 'Water Mass Flow Rate', '[kg/s]', &
HydrRadSys(Item)%EMSOverrideOnWaterMdot, HydrRadSys(Item)%EMSWaterMdotOverrideValue )
ENDIF
END DO
DO Item = 1, NumOfCFloLowTempRadSys
CALL SetupOutputVariable('Zone Radiant HVAC Heating Rate [W]', &
CFloRadSys(Item)%HeatPower,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Heating Energy [J]', &
CFloRadSys(Item)%HeatEnergy,'System','Sum',CFloRadSys(Item)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='HEATINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Heating Fluid Heat Transfer Energy [J]', &
CFloRadSys(Item)%HeatEnergy,'System','Sum',CFloRadSys(Item)%Name, &
ResourceTypeKey='PLANTLOOPHEATINGDEMAND',EndUseKey='HEATINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Cooling Rate [W]', &
CFloRadSys(Item)%CoolPower,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Cooling Energy [J]', &
CFloRadSys(Item)%CoolEnergy,'System','Sum',CFloRadSys(Item)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='COOLINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Cooling Fluid Heat Transfer Energy [J]', &
CFloRadSys(Item)%CoolEnergy,'System','Sum',CFloRadSys(Item)%Name, &
ResourceTypeKey='PLANTLOOPCOOLINGDEMAND',EndUseKey='COOLINGCOILS',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Mass Flow Rate [kg/s]', &
CFloRadSys(Item)%WaterMassFlowRate,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Injection Mass Flow Rate [kg/s]', &
CFloRadSys(Item)%WaterInjectionRate,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Recirculation Mass Flow Rate [kg/s]', &
CFloRadSys(Item)%WaterRecircRate,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Inlet Temperature [C]', &
CFloRadSys(Item)%WaterInletTemp,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Outlet Temperature [C]', &
CFloRadSys(Item)%WaterOutletTemp,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Pump Inlet Temperature [C]', &
CFloRadSys(Item)%PumpInletTemp,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Pump Electric Power [W]', &
CFloRadSys(Item)%PumpPower,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Pump Electric Energy [J]', &
CFloRadSys(Item)%PumpEnergy,'System','Sum',CFloRadSys(Item)%Name, &
ResourceTypeKey='Electric',EndUseKey='Pumps',GroupKey='Plant')
CALL SetupOutputVariable('Zone Radiant HVAC Pump Mass Flow Rate [kg/s]', &
CFloRadSys(Item)%PumpMassFlowRate,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Pump Fluid Heat Gain Rate [W]', &
CFloRadSys(Item)%PumpHeattoFluid,'System','Average',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Pump Fluid Heat Gain Energy [J]', &
CFloRadSys(Item)%PumpHeattoFluidEnergy,'System','Sum',CFloRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Moisture Condensation Time [s]', &
CFloRadSys(Item)%CondCausedTimeOff,'System','Sum',CFloRadSys(Item)%Name)
IF (AnyEnergyManagementSystemInModel) THEN
CALL SetupEMSInternalVariable('Constant Flow Low Temp Radiant Design Water Mass Flow Rate', &
CFloRadSys(Item)%Name, '[m3/s]', CFloRadSys(Item)%WaterVolFlowMax )
CALL SetupEMSActuator('Constant Flow Low Temp Radiant', CFloRadSys(Item)%Name, 'Water Mass Flow Rate', '[kg/s]', &
CFloRadSys(Item)%EMSOverrideOnWaterMdot, CFloRadSys(Item)%EMSWaterMdotOverrideValue )
ENDIF
END DO
DO Item = 1, NumOfElecLowTempRadSys
CALL SetupOutputVariable('Zone Radiant HVAC Electric Power [W]', &
ElecRadSys(Item)%ElecPower,'System','Average', &
ElecRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Electric Energy [J]', &
ElecRadSys(Item)%ElecEnergy,'System','Sum',ElecRadSys(Item)%Name, &
ResourceTypeKey='ELECTRICITY',EndUseKey='Heating',GroupKey='System')
CALL SetupOutputVariable('Zone Radiant HVAC Heating Rate [W]', &
ElecRadSys(Item)%HeatPower,'System','Average',ElecRadSys(Item)%Name)
CALL SetupOutputVariable('Zone Radiant HVAC Heating Energy [J]', &
ElecRadSys(Item)%HeatEnergy,'System','Sum',ElecRadSys(Item)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey='HEATINGCOILS',GroupKey='System')
END DO
RETURN
END SUBROUTINE GetLowTempRadiantSystem