modelAbsorptionIndirectSteam

Indirect steam heated absorption chiller based on performance curves

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

Information

Model for an indirect steam heated absorption chiller based on performance curves. The model uses performance curves similar to the EnergyPlus model Chiller:Absorption:Indirect.

The model uses six functions to predict the chiller cooling capacity, power consumption for the chiller pump and the generator heat flow rate and the condenser heat flow. These functions use the performance data stored in the record per. The computations are as follows:

The capacity function of the evaporator is

capFuneva = A1 + A2 Teva,lvg + A3 T2eva,lvg + A4 T3eva,lvg.

The capacity function of the condenser is

capFuncon = B1 + B2 Tcon,ent + B3 T2con,ent + B4 T3con,ent.

These capacity functions are used to compute the available cooling capacity of the evaporator as

eva,ava = capFuneva   capFuncon   Q̇eva,0,

where eva,0 is obtained from the performance data per.QEva_flow_nominal. Let eva,set denote the heat required to meet the set point TSet. Then, the model computes the part load ratio as

PLR =min(Q̇eva,set/Q̇eva,ava, PLRmax).

Hence, the model ensures that the chiller capacity does not exceed the chiller capacity specified by the parameter per.PLRMax. The cycling ratio is computed as

CR = min(PLR/PLRmin, 1.0),

where PRLmin is obtained from the performance record per.PLRMin. 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 operate. Note that this model continuously operates 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 when the compressor is off and on.

Using the part load ratio, the energy input ratio of the chiller pump is

EIRP = C1 + C2PLR+C3PLR2.

The generator heat input ratio is

genHIR = D1 + D2PLR+D3PLR2+D4PLR3.

Two additional curves modify the heat input requirement based on the condenser inlet water temperature and the evaporator outlet water temperature. Specifically, the generator heat modifier based on the condenser inlet water temperature is

genTcon = E1 + E2 Tcon,ent + E3 T2con,ent + E4 T3con,ent,

and the generator heat modifier based on the evaporator inlet water temperature is

genTeva= F1 + F2 Teva,lvg + F3 T2eva,lvg + F4 T3eva,lvg.

The main outputs of the model that are to be used in energy analysis are the required generator heat QGen_flow and the electric power consumption of the chiller pump P. For example, if the chiller were to be regenerated with steam, then QGen_flow is the heat that must be provided by a steam loop. This model computes the required generator heat as

gen = -Q̇eva,ava genHIR genTcon genTeva CR.

The pump power consumption is

P = EIRP CR P0,

where P0 is the pump nominal power obtained from the performance data per.P_nominal. The heat balance of the chiller is

con = -Q̇eva + Q̇gen + P.

Performance data

The equipment performance data is obtained from the record per, which is an instance of Buildings.Fluid.Chillers.Data.AbsorptionIndirectSteam. Additional performance curves can be developed using two available techniques (Hydeman and Gillespie, 2002). The first technique is called the Least-squares Linear Regression method and is used when sufficient performance data exist to employ standard least-square linear regression techniques. The second technique is called Reference Curve Method and is used when insufficient performance data exist to apply linear regression techniques. A detailed description of both techniques can be found in Hydeman and Gillespie (2002).

References

  • Hydeman, M. and K.L. Gillespie. 2002. Tools and Techniques to Calibrate Electric Chiller Component Models. ASHRAE Transactions, AC-02-9-1.

Parameters

TypeNameDefaultDescription
BooleanhomotopyInitialization (from FourPortHeatMassExchanger)true= true, use homotopy method
Buildings.Fluid.Chillers.Data.AbsorptionIndirectSteam.GenericperPerformance data
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
Modelica.Units.SI.HeatFlowRateQ_flow_small-per.QEva_flow_nominal*1E-6Small value for heat flow rate or power, used to avoid division by zero
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 the absorption chiller
Modelica.Blocks.Interfaces.RealInputTSetEvaporator setpoint leaving water temperature
Modelica.Blocks.Interfaces.RealOutputPChiller pump power
Modelica.Blocks.Interfaces.RealOutputQGen_flowRequired generator heat flow rate in the form of steam
Modelica.Blocks.Interfaces.RealOutputQEva_flowEvaporator heat flow rate
Modelica.Blocks.Interfaces.RealOutputQCon_flowCondenser heat flow rate

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
RealPLRperMod.PLRPart load ratio
RealCRperMod.CRCycling ratio

Revisions

  • November 26, 2019, by Michael Wetter:
    Revised implementation and documentation.
  • July 3, 2019, by Hagar Elarga:
    First implementation.