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) | :: | UnitNum | |||
integer, | intent(in) | :: | ZoneNum | |||
real(kind=r64), | intent(out) | :: | SensibleOutputProvided | |||
real(kind=r64), | intent(out) | :: | LatentOutputProvided |
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 CalcZoneEvaporativeCoolerUnit(UnitNum, ZoneNum, SensibleOutputProvided, LatentOutputProvided )
! SUBROUTINE INFORMATION:
! AUTHOR B. Griffith
! DATE WRITTEN July 2013
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! <description>
! METHODOLOGY EMPLOYED:
! <description>
! REFERENCES:
! na
! USE STATEMENTS:
USE DataHVACGlobals, ONLY: SmallLoad
USE DataZoneEnergyDemands, ONLY: ZoneSysEnergyDemand
USE DataHVACGlobals, ONLY: ZoneCompTurnFansOn, ZoneCompTurnFansOff
USE Fans, ONLY: SimulateFanComponents
USE DataHeatBalFanSys, ONLY: ZoneThermostatSetPointHi
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT (IN) :: UnitNum ! unit number
INTEGER, INTENT (IN) :: ZoneNum ! number of zone being served
REAL(r64), INTENT (OUT) :: SensibleOutputProvided ! sensible capacity delivered to zone
REAL(r64), INTENT (OUT) :: LatentOutputProvided ! Latent add/removal (kg/s), dehumid = negative
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: ZoneCoolingLoad
REAL(r64) :: MinHumRat
REAL(r64) :: CoolingLoadThreashold
REAL(r64) :: ZoneTemp
REAL(r64) :: CoolSetLowThrottle
REAL(r64) :: CoolSetHiThrottle
SELECT CASE (ZoneEvapUnit(UnitNum)%ControlSchemeType)
CASE (ZoneTemperatureDeadbandOnOffCycling)
ZoneTemp = Node(ZoneEvapUnit(UnitNum)%ZoneNodeNum)%Temp
CoolSetLowThrottle = ZoneThermostatSetPointHi(ZoneNum) - (0.5d0 * ZoneEvapUnit(UnitNum)%ThrottlingRange)
CoolSetHiThrottle = ZoneThermostatSetPointHi(ZoneNum) + (0.5d0 * ZoneEvapUnit(UnitNum)%ThrottlingRange)
IF ((ZoneTemp < CoolSetLowThrottle) .OR. .NOT. ZoneEvapUnit(UnitNum)%UnitIsAvailable) THEN
ZoneEvapUnit(UnitNum)%IsOnThisTimestep = .FALSE.
ELSEIF (ZoneTemp > CoolSetHiThrottle) THEN
ZoneEvapUnit(UnitNum)%IsOnThisTimestep = .TRUE.
ELSE
IF (ZoneEvapUnit(UnitNum)%WasOnLastTimestep) THEN
ZoneEvapUnit(UnitNum)%IsOnThisTimestep = .TRUE.
ELSE
ZoneEvapUnit(UnitNum)%IsOnThisTimestep = .FALSE.
ENDIF
ENDIF
IF (ZoneEvapUnit(UnitNum)%IsOnThisTimestep) THEN
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate = ZoneEvapUnit(UnitNum)%DesignAirMassFlowRate &
* ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRateMaxAvail = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate
IF (ZoneEvapUnit(UnitNum)%UnitReliefNodeNum > 0) THEN
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == BlowThruFan) THEN
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex,&
ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
IF (ZoneEvapUnit(UnitNum)%EvapCooler_1_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_1_Name , ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)
ENDIF
IF ((ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) .AND. ZoneEvapUnit(UnitNum)%EvapCooler_2_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_2_Name , ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == DrawThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex,&
ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
ELSE ! not running
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanInletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanInletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%InletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%InletNode)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%OutletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%OutletNode)%MassFlowRateMaxAvail = 0.d0
IF (ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) THEN
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%InletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%InletNode)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%OutletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%OutletNode)%MassFlowRateMaxAvail = 0.d0
ENDIF
IF (ZoneEvapUnit(UnitNum)%UnitReliefNodeNum > 0) THEN
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRateMaxAvail = 0.d0
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == BlowThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex, &
ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
IF (ZoneEvapUnit(UnitNum)%EvapCooler_1_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_1_Name , ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)
ENDIF
IF ((ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) .AND. ZoneEvapUnit(UnitNum)%EvapCooler_2_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_2_Name , ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == DrawThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex, &
ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
ENDIF
CASE (ZoneCoolingLoadOnOffCycling)
! get zone loads
ZoneCoolingLoad = ZoneSysEnergyDemand(ZoneNum)%RemainingOutputReqToCoolSP
CoolingLoadThreashold = -1.0d0 * ZoneEvapUnit(UnitNum)%ThresholdCoolingLoad
IF ((ZoneCoolingLoad < CoolingLoadThreashold) .AND. ZoneEvapUnit(UnitNum)%UnitIsAvailable) THEN
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate = ZoneEvapUnit(UnitNum)%DesignAirMassFlowRate &
* ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRateMaxAvail = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate
IF (ZoneEvapUnit(UnitNum)%UnitReliefNodeNum > 0) THEN
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == BlowThruFan) THEN
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex, &
ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
IF (ZoneEvapUnit(UnitNum)%EvapCooler_1_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_1_Name , ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)
ENDIF
IF ((ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) .AND. ZoneEvapUnit(UnitNum)%EvapCooler_2_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_2_Name , ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == DrawThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex, &
ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
ELSE
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanInletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanInletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%InletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%InletNode)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%OutletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%OutletNode)%MassFlowRateMaxAvail = 0.d0
IF (ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) THEN
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%InletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%InletNode)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%OutletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%OutletNode)%MassFlowRateMaxAvail = 0.d0
ENDIF
IF (ZoneEvapUnit(UnitNum)%UnitReliefNodeNum > 0) THEN
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRateMaxAvail = 0.d0
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == BlowThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex, &
ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
IF (ZoneEvapUnit(UnitNum)%EvapCooler_1_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_1_Name , ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)
ENDIF
IF ((ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) .AND. ZoneEvapUnit(UnitNum)%EvapCooler_2_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_2_Name , ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == DrawThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex, &
ZoneEvapUnit(UnitNum)%DesignFanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
ENDIF
CASE (ZoneCoolingLoadVariableSpeedFan)
! get zone loads
ZoneCoolingLoad = ZoneSysEnergyDemand(ZoneNum)%RemainingOutputReqToCoolSP
CoolingLoadThreashold = -1.0d0 * ZoneEvapUnit(UnitNum)%ThresholdCoolingLoad
IF ((ZoneCoolingLoad < CoolingLoadThreashold) .AND. ZoneEvapUnit(UnitNum)%UnitIsAvailable) THEN
!determine fan speed to meet load
CALL ControlVSEvapUnitToMeetLoad(UnitNum, ZoneNum, ZoneCoolingLoad)
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate = ZoneEvapUnit(UnitNum)%DesignAirMassFlowRate &
* ZoneEvapUnit(UnitNum)%FanSpeedRatio
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRateMaxAvail = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate
IF (ZoneEvapUnit(UnitNum)%UnitReliefNodeNum > 0) THEN
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == BlowThruFan) THEN
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRate = Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRateMaxAvail = &
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex,&
ZoneEvapUnit(UnitNum)%FanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
IF (ZoneEvapUnit(UnitNum)%EvapCooler_1_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_1_Name , ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)
ENDIF
IF ((ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) .AND. ZoneEvapUnit(UnitNum)%EvapCooler_2_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_2_Name , ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == DrawThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex,&
ZoneEvapUnit(UnitNum)%FanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
ELSE
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%OAInletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanInletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanInletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%FanOutletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%InletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%InletNode)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%OutletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)%OutletNode)%MassFlowRateMaxAvail = 0.d0
IF (ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) THEN
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%InletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%InletNode)%MassFlowRateMaxAvail = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%OutletNode)%MassFlowRate = 0.d0
Node(EvapCond(ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)%OutletNode)%MassFlowRateMaxAvail = 0.d0
ENDIF
IF (ZoneEvapUnit(UnitNum)%UnitReliefNodeNum > 0) THEN
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRate = 0.d0
Node(ZoneEvapUnit(UnitNum)%UnitReliefNodeNum)%MassFlowRateMaxAvail = 0.d0
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == BlowThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex, &
ZoneEvapUnit(UnitNum)%FanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
IF (ZoneEvapUnit(UnitNum)%EvapCooler_1_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_1_Name , ZoneEvapUnit(UnitNum)%EvapCooler_1_Index)
ENDIF
IF ((ZoneEvapUnit(UnitNum)%EvapCooler_2_Index > 0) .AND. ZoneEvapUnit(UnitNum)%EvapCooler_2_AvailStatus) THEN
CALL SimEvapCooler(ZoneEvapUnit(UnitNum)%EvapCooler_2_Name , ZoneEvapUnit(UnitNum)%EvapCooler_2_Index)
ENDIF
IF (ZoneEvapUnit(UnitNum)%FanLocation == DrawThruFan) THEN
CALL SimulateFanComponents(ZoneEvapUnit(UnitNum)%FanName,.FALSE.,ZoneEvapUnit(UnitNum)%FanIndex, &
ZoneEvapUnit(UnitNum)%FanSpeedRatio,&
ZoneCompTurnFansOn,ZoneCompTurnFansOff)
ENDIF
ENDIF
END SELECT
! calculate sensible load met (unit serving Zone) using delta enthalpy at a constant (minimum) humidity ratio)
MinHumRat = MIN(Node(ZoneEvapUnit(UnitNum)%ZoneNodeNum )%HumRat,Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%HumRat)
SensibleOutputProvided = Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate &
* (PsyHFnTdbW(Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%Temp,MinHumRat) &
- PsyHFnTdbW(Node(ZoneEvapUnit(UnitNum)%ZoneNodeNum)%Temp,MinHumRat))
LatentOutputProvided = Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%MassFlowRate * &
(Node(ZoneEvapUnit(UnitNum)%UnitOutletNodeNum)%HumRat &
- Node(ZoneEvapUnit(UnitNum)%ZoneNodeNum)%HumRat)
RETURN
END SUBROUTINE CalcZoneEvaporativeCoolerUnit