Nodes of different colours represent the following:
Solid arrows point from a parent (sub)module to the submodule which is descended from it. Dashed arrows point from a module being used to the module or program unit using it. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | RadSysNum | |||
real(kind=r64), | intent(inout) | :: | LoadMet |
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE CalcLowTempElecRadiantSystem(RadSysNum,LoadMet)
! SUBROUTINE INFORMATION:
! AUTHOR Rick Strand
! DATE WRITTEN November 2000
! MODIFIED Sep 2011 LKL/BG - resimulate only zones needing it for Radiant systems
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine does all of the stuff that is necessary to simulate
! a low temperature electric radiant heating system. Calls are made to
! appropriate subroutines either in this module or outside of it.
! METHODOLOGY EMPLOYED:
! Follows the methods used by many other pieces of zone equipment except
! that we are controlling the electrical input to the building element's
! resistance heating wires. Note that cooling is not allowed for such
! a system.
! REFERENCES:
! Other EnergyPlus modules
! IBLAST-QTF research program, completed in January 1995 (unreleased)
! Strand, R.K. 1995. "Heat Source Transfer Functions and Their Application to
! Low Temperature Radiant Heating Systems", Ph.D. dissertation, University
! of Illinois at Urbana-Champaign, Department of Mechanical and Industrial
! Engineering.
! Seem, J.E. 1986. "Heat Transfer in Buildings", Ph.D. dissertation, University
! of Wisconsin-Madison.
! USE STATEMENTS:
! USE DataEnvironment, ONLY : OutDryBulbTemp, OutWetBulbTemp
USE DataHeatBalance, ONLY : MRT, Zone, ZoneData
USE DataHeatBalFanSys, ONLY : MAT
USE DataHVACGlobals, ONLY : SmallLoad
USE DataZoneEnergyDemands
USE ScheduleManager, ONLY : GetCurrentScheduleValue
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: RadSysNum ! name of the low temperature radiant system
REAL(r64), INTENT(INOUT) :: LoadMet ! load met by the radiant system, in Watts
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: ControlTemp ! Temperature of the parameter that is controlling the radiant system
REAL(r64) :: HeatFrac ! fraction of maximum electrical heat input to radiant system [dimensionless]
REAL(r64) :: OffTemp ! Temperature above which the radiant system should be completely off [C]
REAL(r64) :: OpTemp ! Operative temperature (approximately the average of MRT and MAT) [C]
REAL(r64) :: QZnReq ! heating or cooling needed by zone [Watts]
INTEGER :: RadSurfNum ! number of surface that is the radiant system
REAL(r64) :: SetPtTemp ! Setpoint temperature [C]
INTEGER :: SurfNum ! intermediate variable for surface number in Surface derived type
INTEGER :: ZoneNum ! number of zone being served
! FLOW:
! initialize local variables
ZoneNum = ElecRadSys(RadSysNum)%ZonePtr
HeatFrac = 0.0d0
IF (GetCurrentScheduleValue(ElecRadSys(RadSysNum)%SchedPtr) <= 0.0d0) THEN
! Unit is off; set the heat source terms to zero
DO RadSurfNum = 1, ElecRadSys(RadSysNum)%NumOfSurfaces
SurfNum = ElecRadSys(RadSysNum)%SurfacePtr(RadSurfNum)
QRadSysSource(SurfNum) = 0.0D0
IF (Surface(SurfNum)%ExtBoundCond > 0 .AND. Surface(SurfNum)%ExtBoundCond /= SurfNum) &
QRadSysSource(Surface(SurfNum)%ExtBoundCond) = 0.0d0 ! Also zero the other side of an interzone
END DO
ELSE ! Unit might be on-->this section is intended to determine whether the controls say
! that the unit should be on or not
! Determine the current setpoint temperature and the temperature at which the unit should be completely off
SetptTemp = GetCurrentScheduleValue(ElecRadSys(RadSysNum)%SetptSchedPtr)
OffTemp = SetptTemp + 0.5d0*ElecRadSys(RadSysNum)%ThrottlRange
! Determine the control temperature--what the setpoint/offtemp is being compared to for unit operation
SELECT CASE (ElecRadSys(RadSysNum)%ControlType)
CASE (MATControl)
ControlTemp = MAT(ZoneNum)
CASE (MRTControl)
ControlTemp = MRT(ZoneNum)
CASE (OperativeControl)
ControlTemp = (MAT(ZoneNum)+MRT(ZoneNum))/2.0d0
CASE (ODBControl)
ControlTemp = Zone(ZoneNum)%OutDryBulbTemp
CASE (OWBControl)
ControlTemp = Zone(ZoneNum)%OutWetBulbTemp
CASE DEFAULT ! Should never get here
ControlTemp = MAT(ZoneNum)
CALL ShowSevereError('Illegal control type in low temperature radiant system: '//TRIM(ElecRadSys(RadSysNum)%Name))
CALL ShowFatalError('Preceding condition causes termination.')
END SELECT
IF (ControlTemp < OffTemp) THEN ! HEATING MODE
OperatingMode = HeatingMode
HeatFrac = (OffTemp - ControlTemp)/ElecRadSys(RadSysNum)%ThrottlRange
IF (HeatFrac < 0.0d0) HeatFrac = 0.0d0
IF (HeatFrac > 1.0d0) HeatFrac = 1.0d0
! Set the heat source for the low temperature electric radiant system
DO RadSurfNum = 1, ElecRadSys(RadSysNum)%NumOfSurfaces
SurfNum = ElecRadSys(RadSysNum)%SurfacePtr(RadSurfNum)
QRadSysSource(SurfNum) = HeatFrac*ElecRadSys(RadSysNum)%MaxElecPower*ElecRadSys(RadSysNum)%SurfacePowerFrac(RadSurfNum)
IF (Surface(SurfNum)%ExtBoundCond > 0 .AND. Surface(SurfNum)%ExtBoundCond /= SurfNum) &
QRadSysSource(Surface(SurfNum)%ExtBoundCond) = QRadSysSource(SurfNum) ! Also set the other side of an interzone
END DO
! Now "simulate" the system by recalculating the heat balances
CALL CalcHeatBalanceOutsideSurf(ZoneNum)
CALL CalcHeatBalanceInsideSurf(ZoneNum)
LoadMet = SumHATsurf(ZoneNum) - ZeroSourceSumHATsurf(ZoneNum)
ELSE ! OFF or COOLING MODE (not allowed for an electric low temperature radiant system), turn it off
DO RadSurfNum = 1, ElecRadSys(RadSysNum)%NumOfSurfaces
SurfNum = ElecRadSys(RadSysNum)%SurfacePtr(RadSurfNum)
QRadSysSource(SurfNum) = 0.0D0
IF (Surface(SurfNum)%ExtBoundCond > 0 .AND. Surface(SurfNum)%ExtBoundCond /= SurfNum) &
QRadSysSource(Surface(SurfNum)%ExtBoundCond) = 0.0d0 ! Also zero the other side of an interzone
END DO
END IF
END IF
RETURN
END SUBROUTINE CalcLowTempElecRadiantSystem