modelPartialElectric
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:
-
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 parameterPLRMax. -
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. -
The test
PLR2 = max(PLRMinUnl, PLR1)
computes the part load ratio of the compressor. The assumption is that for a part load ratio belowPLRMinUnl, 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
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | homotopyInitialization (from FourPortHeatMassExchanger) | true | = true, use homotopy method |
| Boolean | have_switchover | false | Set to true for heat recovery chiller with built-in switchover |
| Assumptions | |||
| Boolean | allowFlowReversal1 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1 |
| Boolean | allowFlowReversal2 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2 |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m1_flow_nominal (from PartialFourPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.MassFlowRate | m2_flow_nominal (from PartialFourPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dp1_nominal (from FourPortFlowResistanceParameters) | Pressure difference | |
| Modelica.Units.SI.PressureDifference | dp2_nominal (from FourPortFlowResistanceParameters) | Pressure difference | |
| Advanced | |||
| Medium1.MassFlowRate | m1_flow_small (from PartialFourPortInterface) | 1E-4*abs(m1_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Medium2.MassFlowRate | m2_flow_small (from PartialFourPortInterface) | 1E-4*abs(m2_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialFourPortInterface) | false | = true, if actual temperature at port is computed |
| Flow resistance › Medium 1 | |||
| Boolean | computeFlowResistance1 (from FourPortFlowResistanceParameters) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp1 (from FourPortFlowResistanceParameters) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Real | n1 (from FourPortFlowResistanceParameters) | 2 | Flow exponent for side 1, n=1 for laminar, n=2 for turbulent |
| Boolean | linearizeFlowResistance1 (from FourPortFlowResistanceParameters) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM1 (from FourPortFlowResistanceParameters) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Flow resistance › Medium 2 | |||
| Boolean | computeFlowResistance2 (from FourPortFlowResistanceParameters) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp2 (from FourPortFlowResistanceParameters) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Real | n2 (from FourPortFlowResistanceParameters) | 2 | Flow exponent for side 2, n=1 for laminar, n=2 for turbulent |
| Boolean | linearizeFlowResistance2 (from FourPortFlowResistanceParameters) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM2 (from FourPortFlowResistanceParameters) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Dynamics › Nominal condition | |||
| Modelica.Units.SI.Time | tau1 (from FourPortHeatMassExchanger) | 30 | Time constant at nominal flow |
| Modelica.Units.SI.Time | tau2 (from FourPortHeatMassExchanger) | 30 | Time constant at nominal flow |
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from FourPortHeatMassExchanger) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Initialization › Medium 1 | |||
| Medium1.AbsolutePressure | p1_start (from FourPortHeatMassExchanger) | Medium1.p_default | Start value of pressure |
| Medium1.Temperature | T1_start (from FourPortHeatMassExchanger) | Medium1.T_default | Start value of temperature |
| Medium1.MassFraction[Medium1.nX] | X1_start (from FourPortHeatMassExchanger) | Medium1.X_default | Start 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.AbsolutePressure | p2_start (from FourPortHeatMassExchanger) | Medium2.p_default | Start value of pressure |
| Medium2.Temperature | T2_start (from FourPortHeatMassExchanger) | Medium2.T_default | Start value of temperature |
| Medium2.MassFraction[Medium2.nX] | X2_start (from FourPortHeatMassExchanger) | Medium2.X_default | Start 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
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a1 (from PartialFourPort) | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b1 (from PartialFourPort) | Fluid connector b1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_a | port_a2 (from PartialFourPort) | Fluid connector a2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b2 (from PartialFourPort) | Fluid connector b2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Blocks.Interfaces.BooleanInput | on | Set to true to enable compressor, or false to disable compressor | |
| Modelica.Blocks.Interfaces.RealInput | TSet | Set point for leaving chilled water temperature (condenser water if have_switchover=true and coo=false) | |
| Modelica.Blocks.Interfaces.RealOutput | P | Electric power consumed by compressor | |
| Modelica.Blocks.Interfaces.RealOutput | COP_h | Coefficient of performance of heating | |
| Controls.OBC.CDL.Interfaces.BooleanInput | coo | Switchover signal: true for cooling, false for heating |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Medium1.MassFlowRate | m1_flow (from PartialFourPortInterface) | port_a1.m_flow | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp1 (from PartialFourPortInterface) | port_a1.p - port_b1.p | Pressure difference between port_a1 and port_b1 |
| Medium2.MassFlowRate | m2_flow (from PartialFourPortInterface) | port_a2.m_flow | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp2 (from PartialFourPortInterface) | port_a2.p - port_b2.p | Pressure difference between port_a2 and port_b2 |
| Medium1.ThermodynamicState | sta_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.ThermodynamicState | sta_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.ThermodynamicState | sta_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.ThermodynamicState | sta_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.HeatFlowRate | Q1_flow (from FourPortHeatMassExchanger) | vol1.heatPort.Q_flow | Heat flow rate into medium 1 |
| Modelica.Units.SI.HeatFlowRate | Q2_flow (from FourPortHeatMassExchanger) | vol2.heatPort.Q_flow | Heat flow rate into medium 2 |
| Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatPort | vol1 (from FourPortHeatMassExchanger) | ||
| Buildings.Fluid.MixingVolumes.MixingVolume | vol2 (from FourPortHeatMassExchanger) | ||
| Buildings.Fluid.FixedResistances.PressureDrop | preDro1 (from FourPortHeatMassExchanger) | Flow resistance of fluid 1 | |
| Buildings.Fluid.FixedResistances.PressureDrop | preDro2 (from FourPortHeatMassExchanger) | Flow resistance of fluid 2 | |
| Modelica.Units.SI.Temperature | TEvaEnt | Evaporator entering temperature | |
| Modelica.Units.SI.Temperature | TEvaLvg | Evaporator leaving temperature | |
| Modelica.Units.SI.Temperature | TConEnt | Condenser entering temperature | |
| Modelica.Units.SI.Temperature | TConLvg | Condenser leaving temperature | |
| Modelica.Units.SI.Efficiency | COP | Coefficient of performance | |
| Modelica.Units.SI.HeatFlowRate | QCon_flow | Condenser heat input | |
| Modelica.Units.SI.HeatFlowRate | QEva_flow | Evaporator heat input | |
| Real | capFunT | Cooling capacity factor function of temperature curve | |
| Modelica.Units.SI.Efficiency | EIRFunT | Power input to cooling capacity ratio function of temperature curve | |
| Modelica.Units.SI.Efficiency | EIRFunPLR | Power input to cooling capacity ratio function of part load ratio | |
| Real | PLR1 | Part load ratio | |
| Real | PLR2 | Part load ratio | |
| Real | CR | Cycling ratio | |
| Controls.OBC.CDL.Logical.Sources.Constant | tru | Constant 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:
Removedstartvalues and removednominal=1for 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.