modelBoilerPolynomial
Extends from Buildings.BaseClasses.BaseIconLow (Base icon with model name below the icon), Buildings.DHC.BaseClasses.Steam.PartialTwoPortTwoMedium (Partial model with two ports with two separate medium models without storing mass or energy).
Information
This model represents a steam boiler that discharges saturated steam and has an efficiency curve defined by a polynomial. The efficiency in this model represents the fuel-to-water efficiency (e.g., thermal efficiency). This model is similar to the Buildings.Fluid.Boilers.BoilerPolynomial for the efficiency and fuel mass flow rate computation with the following exceptions:
-
June 17, 2026, by Michael Wetter:
Updated implementation to allow a flow coefficientnthat is different from2. This allows use of the model for not fully turbulent flow.
This is for Buildings, #4620. -
Water enters
port_ain liquid state and exitsport_bin vapor state. - The liquid and vapor phases are at equilibrium; thus, the steam boiler is constrained to saturated states only with the volume containing a wet steam mixture.
- If the boiler is configured in steady state, several blocks involving the heat flow rate are conditionally removed to avoid overconstraining the model. This is because the discharging fluid is constrained at a saturated state. The blocks that are conditionally removed as a result are within the green region in the below figure:
Implementation
In order to improve the numerical efficiency, this model follows the split-medium approach using the Buildings.DHC.BaseClasses.Steam.PartialTwoPortTwoMedium interface model. The saturated mixing volume for an evaporation process Buildings.DHC.Plants.Steam.BaseClasses.ControlVolumeEvaporation represents the phase change process of water from liquid to vapor at equilibrium.
References
Kathryn Hinkelman, Saranya Anbarasu, Michael Wetter, Antoine Gautier, Wangda Zuo. 2022. “A Fast and Accurate Modeling Approach for Water and Steam Thermodynamics with Practical Applications in District Heating System Simulation,” Energy, 254(A), pp. 124227. 10.1016/j.energy.2022.124227
Kathryn Hinkelman, Saranya Anbarasu, Michael Wetter, Antoine Gautier, Baptiste Ravache, Wangda Zuo 2022. “Towards Open-Source Modelica Models For Steam-Based District Heating Systems.” Proc. of the 1st International Workshop On Open Source Modelling And Simulation Of Energy Systems (OSMSES 2022), Aachen, German, April 4-5, 2022. 10.1109/OSMSES54027.2022.9769121
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Units.SI.MassFlowRate | m_flow_small (from PartialTwoPortTwoMedium) | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Modelica.Units.SI.Power | Q_flow_nominal | Nominal heating power | |
| Modelica.Units.SI.Temperature | T_nominal | 373.15 | Temperature used to compute nominal efficiency (only used if efficiency curve depends on temperature) |
| Buildings.Fluid.Types.EfficiencyCurves | effCur | Buildings.Fluid.Types.EfficiencyCurves.Constant | Curve used to compute the efficiency |
| Real[:] | a | {0.9} | Coefficients for efficiency curve |
| Buildings.Fluid.Data.Fuels.Generic | fue | Fuel type | |
| Modelica.Units.SI.ThermalConductance | UA | 0.05*Q_flow_nominal/30 | Overall UA value |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m_flow_nominal (from PartialTwoPortTwoMedium) | Nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dp_nominal | Pressure drop at nominal mass flow rate | |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialTwoPortTwoMedium) | false | = true, if actual temperature at port is computed |
| Assumptions | |||
| Boolean | allowFlowReversal (from PartialTwoPortTwoMedium) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal. Used only if model has two ports. |
| Dynamics › Equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from PartialTwoPortTwoMedium) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | massDynamics (from PartialTwoPortTwoMedium) | energyDynamics | Type of mass balance: dynamic (3 initialization options) or steady state |
| Initialization | |||
| Medium_b.AbsolutePressure | p_start (from PartialTwoPortTwoMedium) | Medium_b.p_default | Start value of pressure |
| Medium_b.Temperature | T_start (from PartialTwoPortTwoMedium) | Medium_b.T_default | Start value of temperature |
| Boolean | fixed_p_start | false | Set to true if p_start is to be used as an explicit initial equation, not an initial guess |
| Advanced | |||
| Real | n | 2 | Flow exponent, n=1 for laminar, n=2 for turbulent |
| Dynamics | |||
| Modelica.Units.SI.Volume | V | 1.5E-6*Q_flow_nominal | Total internal volume of boiler |
| Modelica.Units.SI.Mass | mDry | 1.5E-3*Q_flow_nominal | Mass of boiler that will be lumped to water heat capacity |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a (from PartialTwoPortTwoMedium) | Fluid connector a (positive design flow direction is from port_a to port_b) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b (from PartialTwoPortTwoMedium) | Fluid connector b (positive design flow direction is from port_a to port_b) | |
| Modelica.Blocks.Interfaces.RealInput | y | Part load ratio | |
| Modelica.Blocks.Interfaces.RealOutput | VLiq | Output liquid water volume | |
| Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a | heatPort | Heat port, can be used to connect to ambient | |
| Modelica.Blocks.Interfaces.RealOutput | QFueFlo | Heat flow rate of the fuel |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Units.SI.MassFlowRate | m_flow (from PartialTwoPortTwoMedium) | port_a.m_flow | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp (from PartialTwoPortTwoMedium) | port_a.p - port_b.p | Pressure difference between port_a and port_b |
| Medium_a.ThermodynamicState | sta_a (from PartialTwoPortTwoMedium) | Medium_a.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) | Medium properties in port_a |
| Medium_b.ThermodynamicState | sta_b (from PartialTwoPortTwoMedium) | Medium_b.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) | Medium properties in port_b |
| Modelica.Units.SI.Efficiency | eta | if effCur == Buildings.Fluid.Types.EfficiencyCurves.Constant then a[1] elseif effCur == Buildings.Fluid.Types.EfficiencyCurves.Polynomial then Buildings.Utilities.Math.Functions.polynomial(a = a, x = y_internal) elseif effCur == Buildings.Fluid.Types.EfficiencyCurves.QuadraticLinear then Buildings.Utilities.Math.Functions.quadraticLinear(a = aQuaLin, x1 = y_internal, x2 = MediumSte.saturationTemperature(port_a.p)) else 0 | Boiler efficiency |
| Modelica.Units.SI.Power | QFue_flow | y_internal*Q_flow_nominal/eta_nominal | Heat released by fuel |
| Modelica.Units.SI.Power | QWat_flow | eta*QFue_flow | Heat transfer from gas into water |
| Modelica.Units.SI.MassFlowRate | mFue_flow | QFue_flow/fue.h | Fuel mass flow rate |
| Modelica.Units.SI.VolumeFlowRate | VFue_flow | mFue_flow/fue.d | Fuel volume flow rate |
| Modelica.Thermal.HeatTransfer.Components.HeatCapacitor | heaCapDry | Heat capacity of boiler metal | |
| Buildings.DHC.Plants.Steam.BaseClasses.ControlVolumeEvaporation | vol | Steam/water control volume | |
| Buildings.Fluid.FixedResistances.PressureDrop | res | Flow resistance |
Contents
| Name | Description |
|---|---|
| Water medium - port_a (inlet) | |
| Steam medium - port_b (oulet) |
Revisions
-
September 15, 2023, by Kathryn Hinkelman:
Updated publication references. -
February 25, 2022 by Kathryn Hinkelman:
Refactored base classes for improved extensibility and relocated models into Steam subpackages. -
July 22, 2021 by Kathryn Hinkelman:
First implementation.