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) | :: | SetPtMgrNum |
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 CalcWarmestSetPoint(SetPtMgrNum)
! SUBROUTINE INFORMATION:
! AUTHOR Fred Buhl
! DATE WRITTEN May 2002
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Calculate the "warmest" supply air setpoint temperature that will satisfy the cooling
! requirements of all the zones served by a central air system.
! METHODOLOGY EMPLOYED:
! Zone sensible heat balance
! REFERENCES:
! na
! USE STATEMENTS:
USE DataZoneEquipment, ONLY: ZoneEquipConfig
USE DataZoneEnergyDemands, ONLY: ZoneSysEnergyDemand
USE DataHVACGlobals, ONLY: SmallMassFlow, SmallLoad
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT (IN) :: SetPtMgrNum ! number of the current setpoint manager being simulated
! SUBROUTINE PARAMETER DEFINITIONS:
! INTERFACE BLOCK SPECIFICATIONS
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: ZoneLoad ! required zone load [W]
REAL(r64) :: ZoneMassFlowMax ! zone inlet maximum mass flow rate [kg/s]
REAL(r64) :: CpAir ! inlet air specific heat [J/kg-C]
INTEGER :: AirLoopNum ! the index of the air loop served by this setpoint manager
REAL(r64) :: TotCoolLoad ! sum of the zone cooling loads for this air loop [W]
INTEGER :: ZonesCooledIndex ! DO loop index for zones cooled by the air loop
INTEGER :: CtrlZoneNum ! the controlled zone index
INTEGER :: ZoneInletNode ! the zone inlet node number
REAL(r64) :: ZoneTemp ! zone temperature [C]
REAL(r64) :: ZoneSetPointTemp ! zone supply air temperature [C]
REAL(r64) :: SetPointTemp ! the system setpoint temperature [C]
INTEGER :: ZoneNode ! the zone node number of the current zone
INTEGER :: ZoneNum ! the actual zone number
AirLoopNum = WarmestSetPtMgr(SetPtMgrNum)%AirLoopNum
TotCoolLoad = 0.0d0
SetPointTemp = WarmestSetPtMgr(SetPtMgrNum)%MaxSetTemp
DO ZonesCooledIndex=1,AirToZoneNodeInfo(AirLoopNum)%NumZonesCooled
CtrlZoneNum = AirToZoneNodeInfo(AirLoopNum)%CoolCtrlZoneNums(ZonesCooledIndex)
ZoneInletNode = AirToZoneNodeInfo(AirLoopNum)%CoolZoneInletNodes(ZonesCooledIndex)
ZoneNode = ZoneEquipConfig(CtrlZoneNum)%ZoneNode
ZoneNum = ZoneEquipConfig(CtrlZoneNum)%ActualZoneNum
ZoneMassFlowMax = Node(ZoneInletNode)%MassFlowRateMax
ZoneLoad = ZoneSysEnergyDemand(ZoneNum)%TotalOutputRequired
ZoneTemp = Node(ZoneNode)%Temp
ZoneSetPointTemp = WarmestSetPtMgr(SetPtMgrNum)%MaxSetTemp
IF (ZoneLoad < 0.0d0) THEN
TotCoolLoad = TotCoolLoad + ABS(ZoneLoad)
CpAir = PsyCpAirFnWTdb(Node(ZoneInletNode)%HumRat,Node(ZoneInletNode)%Temp)
IF (ZoneMassFlowMax > SmallMassFlow) THEN
ZoneSetPointTemp = ZoneTemp + ZoneLoad/(CpAir*ZoneMassFlowMax)
END IF
END IF
SetPointTemp = MIN(SetPointTemp,ZoneSetPointTemp)
END DO
SetPointTemp = MAX(WarmestSetPtMgr(SetPtMgrNum)%MinSetTemp,MIN(SetPointTemp,WarmestSetPtMgr(SetPtMgrNum)%MaxSetTemp))
IF (TotCoolLoad < SmallLoad) THEN
SetPointTemp = WarmestSetPtMgr(SetPtMgrNum)%MaxSetTemp
END IF
WarmestSetPtMgr(SetPtMgrNum)%SetPt = SetPointTemp
RETURN
END SUBROUTINE CalcWarmestSetPoint