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) | :: | BaseboardNum | |||
integer, | intent(in) | :: | ControlledZoneNum |
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 CalcElectricBaseboard(BaseboardNum, ControlledZoneNum)
! SUBROUTINE INFORMATION:
! AUTHOR Richard Liesen
! DATE WRITTEN Nov 2001
! MODIFIED Feb 2010 Daeho Kang for radiant component
! Sep 2011 LKL/BG - resimulate only zones needing it for Radiant systems
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine calculates the heat exchange rate in a Electric baseboard heater.
! It includes radiant heat transfer to people and surfaces in a space, and the actual convective
! system impact of a electric baseboard heater is determined after the radiant heat distribution.
!
! METHODOLOGY EMPLOYED:
! This is primarily modified from Convective Electric Baseboard. An existing algorithm of radiant
! heat transfer calculation in the High Tmeperature Radiant System module is implemented.
! REFERENCES:
! USE STATEMENTS:
USE Psychrometrics, ONLY: PsyCpAirFnWTdb
USE ScheduleManager, ONLY: GetScheduleIndex, GetCurrentScheduleValue
USE DataZoneEquipment, ONLY: ZoneEquipConfig
USE DataZoneEnergyDemands, ONLY: ZoneSysEnergyDemand, CurDeadbandOrSetback
USE DataInterfaces, ONLY: CalcHeatBalanceOutsideSurf, CalcHeatBalanceInsideSurf
USE DataHVACGlobals, ONLY: SmallLoad
IMPLICIT NONE
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: BaseboardNum
INTEGER, INTENT(IN) :: ControlledZoneNum
! SUBROUTINE PARAMETER DEFINITIONS:
REAL(r64), PARAMETER :: SimpConvAirFlowSpeed = 0.5d0 ! m/s
! na
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: ZoneNum
REAL(r64) :: AirInletTemp
REAL(r64) :: CpAir
REAL(r64) :: AirMassFlowRate
REAL(r64) :: CapacitanceAir
REAL(r64) :: Effic
REAL(r64) :: AirOutletTemp
REAL(r64) :: QBBCap
REAL(r64) :: RadHeat
REAL(r64) :: QZnReq
REAL(r64) :: LoadMet
ZoneNum = ElecBaseboard(BaseboardNum)%ZonePtr
QZnReq = ZoneSysEnergyDemand(ZoneNum)%RemainingOutputReqToHeatSP
AirInletTemp = ElecBaseboard(BaseboardNum)%AirInletTemp
AirOutletTemp = AirInletTemp
CpAir = PsyCpAirFnWTdb(ElecBaseboard(BaseboardNum)%AirInletHumRat,AirInletTemp)
AirMassFlowRate = SimpConvAirFlowSpeed
CapacitanceAir = CpAir * AirMassFlowRate
! Currently only the efficiency is used to calculate the electric consumption. There could be some
! thermal loss that could be accounted for with this efficiency input.
Effic = ElecBaseboard(BaseboardNum)%BaseBoardEfficiency
IF (QZnReq > SmallLoad &
.AND. .NOT. CurDeadBandOrSetback(ZoneNum) &
.AND. GetCurrentScheduleValue(ElecBaseboard(BaseboardNum)%SchedPtr) > 0.0d0) THEN
! If the load exceeds the capacity than the capacity is set to the BB limit.
IF(QZnReq > ElecBaseboard(BaseboardNum)%NominalCapacity) THEN
QBBCap = ElecBaseboard(BaseboardNum)%NominalCapacity
Else
QBBCap = QZnReq
End IF
RadHeat = QBBCap * ElecBaseboard(BaseboardNum)%FracRadiant
QBBElecRadSource(BaseboardNum) = RadHeat
IF (ElecBaseboard(BaseboardNum)%FracRadiant > 0.0d0) THEN ! User defines radiant heat addition
! Now, distribute the radiant energy of all systems to the appropriate surfaces, to people, and the air
CALL DistributeBBElecRadGains
! Now "simulate" the system by recalculating the heat balances
CALL CalcHeatBalanceOutsideSurf(ZoneNum)
CALL CalcHeatBalanceInsideSurf(ZoneNum)
! Here an assumption is made regarding radiant heat transfer to people.
! While the radiant heat transfer to people array will be used by the thermal comfort
! routines, the energy transfer to people would get lost from the perspective
! of the heat balance. So, to avoid this net loss of energy which clearly
! gets added to the zones, we must account for it somehow. This assumption
! that all energy radiated to people is converted to convective energy is
! not very precise, but at least it conserves energy. The system impact to heat balance
! should include this.
LoadMet = (SumHATsurf(ZoneNum) - ZeroSourceSumHATsurf(ZoneNum)) &
+ (QBBCap * ElecBaseboard(BaseboardNum)%FracConvect) &
+ (RadHeat * ElecBaseboard(BaseboardNum)%FracDistribPerson)
IF (LoadMet < 0.0d0) THEN ! No cooling output
AirOutletTemp = AirInletTemp
ElecBaseboard(BaseboardNum)%ElecUseRate = 0.0d0
ELSE
AirOutletTemp = AirInletTemp + QBBCap/CapacitanceAir
! This could be utilized somehow or even reported so the data structures are left in place
! The BaseBoard electric Load is calculated using the efficiency
ElecBaseboard(BaseboardNum)%ElecUseRate = QBBCap/Effic
END IF
ELSE ! zero radiant fraction, no need of recalculation of heat balances
LoadMet = QBBCap
ElecBaseboard(BaseboardNum)%ElecUseRate = QBBCap/Effic
END IF
ELSE ! If there is an off condition the BB does nothing.
QBBCap = 0.0d0
LoadMet = 0.0d0
RadHeat = 0.0d0
AirOutletTemp = AirInletTemp
QBBElecRadSource(BaseboardNum) = 0.0d0
ElecBaseboard(BaseboardNum)%ElecUseRate = 0.0d0
END IF
! Assign calculated ones
ElecBaseboard(BaseboardNum)%AirOutletTemp = AirOutletTemp
ElecBaseboard(BaseboardNum)%Power = QBBCap
ElecBaseboard(BaseboardNum)%TotPower = LoadMet
ElecBaseboard(BaseboardNum)%RadPower = RadHeat
ElecBaseboard(BaseboardNum)%ConvPower = QBBCap - RadHeat
RETURN
END SUBROUTINE CalcElectricBaseboard