modelPartialElectric

Partial model for electric chiller based on the model in DOE-2, CoolTools and EnergyPlus

Extends from Buildings.Fluid.Interfaces.FourPortHeatMassExchanger (Model transporting two fluid streams between four ports with storing mass or energy).

Information

Base class for model of an electric chiller, based on the DOE-2.1 chiller model and the CoolTools chiller model that are implemented in EnergyPlus as the models Chiller:Electric:EIR and Chiller:Electric:ReformulatedEIR.

The model takes as an input the set point for the leaving chilled water temperature, which is met if the chiller has sufficient capacity. Thus, the model has a built-in, ideal temperature control. The model has three tests on the part load ratio and the cycling ratio:

  1. The test
      PLR1 =min(QEva_flow_set/QEva_flow_ava, PLRMax)
    
    ensures that the chiller capacity does not exceed the chiller capacity specified by the parameter PLRMax.
  2. The test
      CR = min(PLR1/per.PRLMin, 1.0)
    
    computes a cycling ratio. This ratio expresses the fraction of time that a chiller would run if it were to cycle because its load is smaller than the minimal load at which it can operature. Notice that this model does continuously operature even if the part load ratio is below the minimum part load ratio. Its leaving evaporator and condenser temperature can therefore be considered as an average temperature between the modes where the compressor is off and on.
  3. The test
      PLR2 = max(PLRMinUnl, PLR1)
    
    computes the part load ratio of the compressor. The assumption is that for a part load ratio below PLRMinUnl, the chiller uses hot gas bypass to reduce the capacity, while the compressor power draw does not change.

The electric power only contains the power for the compressor, but not any power for pumps or fans.

Optionally, the model can be configured to represent heat recovery chillers with a switchover option by setting the parameter have_switchover to true. In that case an additional Boolean input connector coo is used. The chiller is tracking a chilled water supply temperature setpoint at the outlet of the evaporator barrel if coo is true. Otherwise, if coo is false, the chiller is tracking a hot water supply temperature setpoint at the outlet of the condenser barrel. See Buildings.Fluid.Chillers.Examples.ElectricEIR_HeatRecovery for an example with a chiller operating in heating mode.

Implementation

This implementation computes the chiller capacity and power consumption the same way as documented in EnergyPlus v22.1.0 Engineering Reference section 14.3.9.2. Especially see equations 14.234 and 14.240 in the referenced document.

The available chiller capacity QEva_flow_ava is adjusted from its nominal capacity QEva_flow_nominal by factor capFunT as

  QEva_flow_ava = QEva_flow_nominal*capFunT

and the compressor power consumption is computed as

  P = -QEva_flow_ava*(1/COP_nominal)*EIRFunT*EIRFunPLR*CR.

The models that extend from this base class implement the functions used above in ways that are shown in the table below.

Function Description Formulation
ElectricEIR ElectricReformulatedEIR
capFunT Adjusts cooling capacity for current fluid temperatures Biquadratic on TConEnt and TEvaLvg Biquadratic on TConLvg and TEvaLvg
EIRFunPLR Adjusts EIR for the current PLR Quadratic on PLR Bicubic on TConLvg and PLR
EIRFunT Adjusts EIR for current fluid temperatures Biquadratic on TConEnt and TEvaLvg Biquadratic on TConLvg and TEvaLvg

where TConEnt is the condenser entering temperature, TEvaLvg is the evaporator leaving temperature, TConLvg is the condenser leaving temperatore, and PLR is the part load ratio.

References

Parameters

TypeNameDefaultDescription
BooleanhomotopyInitialization (from FourPortHeatMassExchanger)true= true, use homotopy method
Booleanhave_switchoverfalseSet to true for heat recovery chiller with built-in switchover
Assumptions
BooleanallowFlowReversal1 (from PartialFourPort)true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
BooleanallowFlowReversal2 (from PartialFourPort)true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2
Nominal condition
Modelica.Units.SI.MassFlowRatem1_flow_nominal (from PartialFourPortInterface)Nominal mass flow rate
Modelica.Units.SI.MassFlowRatem2_flow_nominal (from PartialFourPortInterface)Nominal mass flow rate
Modelica.Units.SI.PressureDifferencedp1_nominal (from FourPortFlowResistanceParameters)Pressure difference
Modelica.Units.SI.PressureDifferencedp2_nominal (from FourPortFlowResistanceParameters)Pressure difference
Advanced
Medium1.MassFlowRatem1_flow_small (from PartialFourPortInterface)1E-4*abs(m1_flow_nominal)Small mass flow rate for regularization of zero flow
Medium2.MassFlowRatem2_flow_small (from PartialFourPortInterface)1E-4*abs(m2_flow_nominal)Small mass flow rate for regularization of zero flow
Advanced › Diagnostics
Booleanshow_T (from PartialFourPortInterface)false= true, if actual temperature at port is computed
Flow resistance › Medium 1
BooleancomputeFlowResistance1 (from FourPortFlowResistanceParameters)true=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dp1 (from FourPortFlowResistanceParameters)false= true, use m_flow = f(dp) else dp = f(m_flow)
Realn1 (from FourPortFlowResistanceParameters)2Flow exponent for side 1, n=1 for laminar, n=2 for turbulent
BooleanlinearizeFlowResistance1 (from FourPortFlowResistanceParameters)false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM1 (from FourPortFlowResistanceParameters)0.1Fraction of nominal flow rate where flow transitions to laminar
Flow resistance › Medium 2
BooleancomputeFlowResistance2 (from FourPortFlowResistanceParameters)true=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dp2 (from FourPortFlowResistanceParameters)false= true, use m_flow = f(dp) else dp = f(m_flow)
Realn2 (from FourPortFlowResistanceParameters)2Flow exponent for side 2, n=1 for laminar, n=2 for turbulent
BooleanlinearizeFlowResistance2 (from FourPortFlowResistanceParameters)false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM2 (from FourPortFlowResistanceParameters)0.1Fraction of nominal flow rate where flow transitions to laminar
Dynamics › Nominal condition
Modelica.Units.SI.Timetau1 (from FourPortHeatMassExchanger)30Time constant at nominal flow
Modelica.Units.SI.Timetau2 (from FourPortHeatMassExchanger)30Time constant at nominal flow
Dynamics › Conservation equations
Modelica.Fluid.Types.DynamicsenergyDynamics (from FourPortHeatMassExchanger)Modelica.Fluid.Types.Dynamics.DynamicFreeInitialType of energy balance: dynamic (3 initialization options) or steady state
Initialization › Medium 1
Medium1.AbsolutePressurep1_start (from FourPortHeatMassExchanger)Medium1.p_defaultStart value of pressure
Medium1.TemperatureT1_start (from FourPortHeatMassExchanger)Medium1.T_defaultStart value of temperature
Medium1.MassFraction[Medium1.nX]X1_start (from FourPortHeatMassExchanger)Medium1.X_defaultStart value of mass fractions m_i/m
Medium1.ExtraProperty[Medium1.nC]C1_start (from FourPortHeatMassExchanger)fill(0, Medium1.nC)Start value of trace substances
Medium1.ExtraProperty[Medium1.nC]C1_nominal (from FourPortHeatMassExchanger)fill(1E-2, Medium1.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Initialization › Medium 2
Medium2.AbsolutePressurep2_start (from FourPortHeatMassExchanger)Medium2.p_defaultStart value of pressure
Medium2.TemperatureT2_start (from FourPortHeatMassExchanger)Medium2.T_defaultStart value of temperature
Medium2.MassFraction[Medium2.nX]X2_start (from FourPortHeatMassExchanger)Medium2.X_defaultStart value of mass fractions m_i/m
Medium2.ExtraProperty[Medium2.nC]C2_start (from FourPortHeatMassExchanger)fill(0, Medium2.nC)Start value of trace substances
Medium2.ExtraProperty[Medium2.nC]C2_nominal (from FourPortHeatMassExchanger)fill(1E-2, Medium2.nC)Nominal value of trace substances. (Set to typical order of magnitude.)

Connectors

TypeNameDefaultDescription
Modelica.Fluid.Interfaces.FluidPort_aport_a1 (from PartialFourPort)Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)
Modelica.Fluid.Interfaces.FluidPort_bport_b1 (from PartialFourPort)Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)
Modelica.Fluid.Interfaces.FluidPort_aport_a2 (from PartialFourPort)Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)
Modelica.Fluid.Interfaces.FluidPort_bport_b2 (from PartialFourPort)Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)
Modelica.Blocks.Interfaces.BooleanInputonSet to true to enable compressor, or false to disable compressor
Modelica.Blocks.Interfaces.RealInputTSetSet point for leaving chilled water temperature (condenser water if have_switchover=true and coo=false)
Modelica.Blocks.Interfaces.RealOutputPElectric power consumed by compressor
Modelica.Blocks.Interfaces.RealOutputCOP_hCoefficient of performance of heating
Controls.OBC.CDL.Interfaces.BooleanInputcooSwitchover signal: true for cooling, false for heating

Components

TypeNameDefaultDescription
Medium1.MassFlowRatem1_flow (from PartialFourPortInterface)port_a1.m_flowMass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp1 (from PartialFourPortInterface)port_a1.p - port_b1.pPressure difference between port_a1 and port_b1
Medium2.MassFlowRatem2_flow (from PartialFourPortInterface)port_a2.m_flowMass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp2 (from PartialFourPortInterface)port_a2.p - port_b2.pPressure difference between port_a2 and port_b2
Medium1.ThermodynamicStatesta_a1 (from PartialFourPortInterface)if allowFlowReversal1 then Medium1.setState_phX(port_a1.p, noEvent(actualStream(port_a1.h_outflow)), noEvent(actualStream(port_a1.Xi_outflow))) else Medium1.setState_phX(port_a1.p, inStream(port_a1.h_outflow), inStream(port_a1.Xi_outflow))Medium properties in port_a1
Medium1.ThermodynamicStatesta_b1 (from PartialFourPortInterface)if allowFlowReversal1 then Medium1.setState_phX(port_b1.p, noEvent(actualStream(port_b1.h_outflow)), noEvent(actualStream(port_b1.Xi_outflow))) else Medium1.setState_phX(port_b1.p, port_b1.h_outflow, port_b1.Xi_outflow)Medium properties in port_b1
Medium2.ThermodynamicStatesta_a2 (from PartialFourPortInterface)if allowFlowReversal2 then Medium2.setState_phX(port_a2.p, noEvent(actualStream(port_a2.h_outflow)), noEvent(actualStream(port_a2.Xi_outflow))) else Medium2.setState_phX(port_a2.p, inStream(port_a2.h_outflow), inStream(port_a2.Xi_outflow))Medium properties in port_a2
Medium2.ThermodynamicStatesta_b2 (from PartialFourPortInterface)if allowFlowReversal2 then Medium2.setState_phX(port_b2.p, noEvent(actualStream(port_b2.h_outflow)), noEvent(actualStream(port_b2.Xi_outflow))) else Medium2.setState_phX(port_b2.p, port_b2.h_outflow, port_b2.Xi_outflow)Medium properties in port_b2
Modelica.Units.SI.HeatFlowRateQ1_flow (from FourPortHeatMassExchanger)vol1.heatPort.Q_flowHeat flow rate into medium 1
Modelica.Units.SI.HeatFlowRateQ2_flow (from FourPortHeatMassExchanger)vol2.heatPort.Q_flowHeat flow rate into medium 2
Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatPortvol1 (from FourPortHeatMassExchanger)
Buildings.Fluid.MixingVolumes.MixingVolumevol2 (from FourPortHeatMassExchanger)
Buildings.Fluid.FixedResistances.PressureDroppreDro1 (from FourPortHeatMassExchanger)Flow resistance of fluid 1
Buildings.Fluid.FixedResistances.PressureDroppreDro2 (from FourPortHeatMassExchanger)Flow resistance of fluid 2
Modelica.Units.SI.TemperatureTEvaEntEvaporator entering temperature
Modelica.Units.SI.TemperatureTEvaLvgEvaporator leaving temperature
Modelica.Units.SI.TemperatureTConEntCondenser entering temperature
Modelica.Units.SI.TemperatureTConLvgCondenser leaving temperature
Modelica.Units.SI.EfficiencyCOPCoefficient of performance
Modelica.Units.SI.HeatFlowRateQCon_flowCondenser heat input
Modelica.Units.SI.HeatFlowRateQEva_flowEvaporator heat input
RealcapFunTCooling capacity factor function of temperature curve
Modelica.Units.SI.EfficiencyEIRFunTPower input to cooling capacity ratio function of temperature curve
Modelica.Units.SI.EfficiencyEIRFunPLRPower input to cooling capacity ratio function of part load ratio
RealPLR1Part load ratio
RealPLR2Part load ratio
RealCRCycling ratio
Controls.OBC.CDL.Logical.Sources.ConstanttruConstant true signal

Revisions

  • June 4, 2024, by Antoine Gautier:
    Added load limit in heating mode.
    This is for #3815.
  • January 11, 2023, by Antoine Gautier:
    Added optional switchover mode for heat recovery chillers.
    This is for #3211.
  • November 19, 2021, by David Blum:
    Add humidity to entering condenser state calculation.
    This is for issue 2770.
  • June 28, 2019, by Michael Wetter:
    Removed start values and removed nominal=1 for performance curves.
    This is for issue 1465.
  • March 12, 2015, by Michael Wetter:
    Refactored model to make it once continuously differentiable. This is for issue 373.
  • Jan. 10, 2011, by Michael Wetter:
    Added input signal to switch chiller off, and changed base class to use a dynamic model. The change of the base class was required to improve the robustness of the model when the control is switched on again.
  • Sep. 8, 2010, by Michael Wetter:
    Revised model and included it in the Buildings library.
  • October 13, 2008, by Brandon Hencey:
    First implementation.