modelPressureIndependent
Extends from Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential (Partial model for air dampers with exponential opening characteristics).
Information
Model for an air damper whose airflow is proportional to the input signal, assuming
that at y = 1, m_flow = m_flow_nominal. This is unless the pressure difference
dp is too low,
in which case a kDam = m_flow_nominal/sqrt(dp_nominal) characteristic is used.
The model is similar to Buildings.Fluid.Actuators.Valves.TwoWayPressureIndependent, except for adaptations for damper parameters. Please see that documentation for more information.
Computation of the damper opening
The fractional opening of the damper is computed by
- inverting the quadratic flow function to compute the flow coefficient from the flow rate and the pressure drop values (under the assumption of a turbulent flow regime);
- inverting the exponential characteristics to compute the fractional opening from the loss coefficient value (directly derived from the flow coefficient).
The quadratic interpolation used outside the exponential domain in the function Buildings.Fluid.Actuators.BaseClasses.exponentialDamper yields a local extremum. Therefore, the formal inversion of the function is not possible. A cubic spline is used instead to fit the inverse of the damper characteristics. The central domain of the characteritics having a monotonous exponential profile, its inverse can be properly approximated with three equidistant support points. However, the quadratic functions used outside of the exponential domain can have various profiles depending on the damper coefficients. Therefore, five linearly distributed support points are used on each side domain to ensure a good fit of the inverse.
Note that below a threshold value of the input control signal (fixed at 0.02), the fractional opening is forced to zero and no more related to the actual flow coefficient of the damper. This avoids steep transients of the computed opening while transitioning from reverse flow. This is to be considered as a modeling workaround (avoiding the introduction of an additional state variable) to prevent control chattering during shut off operation where the pressure difference at the damper boundaries can vary between slightly positive and negative values due to outdoor pressure variations.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | homotopyInitialization (from PartialResistance) | true | = true, use homotopy method |
| Modelica.Units.SI.MassFlowRate | m_flow_turbulent (from PartialResistance) | Turbulent flow if |m_flow| >= m_flow_turbulent | |
| Boolean | use_deltaM (from PartialDamperExponential) | true | Set to true to use deltaM for turbulent transition, else ReC is used |
| Real | deltaM (from PartialDamperExponential) | 0.3 | Fraction of nominal mass flow rate where transition to turbulent occurs |
| Modelica.Units.SI.Velocity | v_nominal (from PartialDamperExponential) | (2/rho_default/k1*dpDamper_nominal)^0.5 | Nominal face velocity |
| Modelica.Units.SI.Area | A (from PartialDamperExponential) | m_flow_nominal/rho_default/v_nominal | Face area |
| Boolean | roundDuct (from PartialDamperExponential) | false | Set to true for round duct, false for square cross section |
| Real | ReC (from PartialDamperExponential) | 4000 | Reynolds number where transition to turbulence starts |
| Real | kFixed (from PartialDamperExponential) | if dpFixed_nominal > Modelica.Constants.eps then m_flow_nominal/sqrt(dpFixed_nominal) else Modelica.Constants.inf | Flow coefficient of fixed resistance that may be in series with damper, k=m_flow/sqrt(dp), with unit=(kg.m)^(1/2). |
| Assumptions | |||
| Boolean | allowFlowReversal (from PartialTwoPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m_flow_nominal (from PartialTwoPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dp_nominal (from PartialResistance) | Pressure drop at nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dpDamper_nominal (from PartialDamperExponential) | Pressure drop of fully open damper at nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dpFixed_nominal (from PartialDamperExponential) | 0 | Pressure drop of duct and resistances other than the damper in series, at nominal mass flow rate |
| Advanced | |||
| Modelica.Units.SI.MassFlowRate | m_flow_small (from PartialTwoPortInterface) | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Boolean | from_dp (from PartialResistance) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Real | n (from PartialResistance) | 2 | Flow exponent, n=1 for laminar, n=2 for turbulent |
| Boolean | linearized (from PartialResistance) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Boolean | use_constant_density (from PartialDamperExponential) | true | Set to true to use constant density for flow friction |
| Real | l2 | 0.01 | Gain for mass flow increase if pressure is above nominal pressure |
| Real | deltax | 0.02 | Transition interval for flow rate |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialTwoPortInterface) | false | = true, if actual temperature at port is computed |
| Dynamics › Actuator position | |||
| Boolean | use_strokeTime (from ActuatorSignal) | true | Set to true to continuously open and close valve using strokeTime |
| Modelica.Units.SI.Time | strokeTime (from ActuatorSignal) | 120 | Time needed to fully open or close actuator |
| Modelica.Blocks.Types.Init | init (from ActuatorSignal) | Modelica.Blocks.Types.Init.InitialOutput | Type of initialization (no init/steady state/initial state/initial output) |
| Real | y_start (from ActuatorSignal) | 1 | Initial position of actuator |
| Damper coefficients | |||
| Real | a (from PartialDamperExponential) | -1.51 | Coefficient a for damper characteristics |
| Real | b (from PartialDamperExponential) | 0.105*90 | Coefficient b for damper characteristics |
| Real | yL (from PartialDamperExponential) | 15/90 | Lower value for damper curve |
| Real | yU (from PartialDamperExponential) | 55/90 | Upper value for damper curve |
| Real | k0 (from PartialDamperExponential) | 2*rho_default*(A/kDamMin)^2 | Loss coefficient for y=0 (pressure drop divided by dynamic pressure) |
| Real | k1 (from PartialDamperExponential) | 0.45 | Loss coefficient for y=1 (pressure drop divided by dynamic pressure) |
| Real | l (from PartialDamperExponential) | 0.0001 | Damper leakage, ratio of flow coefficients k(y=0)/k(y=1) |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a (from PartialTwoPort) | Fluid connector a (positive design flow direction is from port_a to port_b) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b (from PartialTwoPort) | Fluid connector b (positive design flow direction is from port_a to port_b) | |
| Modelica.Blocks.Interfaces.RealInput | y (from ActuatorSignal) | Actuator position (0: closed, 1: open) | |
| Modelica.Blocks.Interfaces.RealOutput | y_actual (from ActuatorSignal) | Actual actuator position |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Units.SI.MassFlowRate | m_flow (from PartialTwoPortInterface) | 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 PartialTwoPortInterface) | port_a.p - port_b.p | Pressure difference between port_a and port_b |
| Medium.ThermodynamicState | sta_a (from PartialTwoPortInterface) | if allowFlowReversal then Medium.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) else Medium.setState_phX(port_a.p, noEvent(inStream(port_a.h_outflow)), noEvent(inStream(port_a.Xi_outflow))) | Medium properties in port_a |
| Medium.ThermodynamicState | sta_b (from PartialTwoPortInterface) | if allowFlowReversal then Medium.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) else Medium.setState_phX(port_b.p, noEvent(port_b.h_outflow), noEvent(port_b.Xi_outflow)) | Medium properties in port_b |
| Medium.Density | rho (from PartialDamperExponential) | Medium density | |
| Real | kDam (from PartialDamperExponential) | Flow coefficient of damper, k=m_flow/sqrt(dp), with unit=(kg.m)^(1/2) | |
| Real | k (from PartialDamperExponential) | Flow coefficient of damper plus fixed resistance, k=m_flow/sqrt(dp), with unit=(kg.m)^(1/2) | |
| Real | phi | l + y_internal*(1 - l) | Ratio actual to nominal mass flow rate of damper, phi=kDam(y)/kDam(y=1) |
Contents
| Name | Description |
|---|---|
| Inverse of flow function that computes that computes the square inverse of flow coefficient | |
| Inverse function of the exponential damper characteristics |
Revisions
-
July 30, 2026, by Michael Wetter:
Corrected argument for computing spline derivatives. Note that older models without this correction will fail to simulate due to an assertion in the spline derivative calculations.
This is for IBPSA #2130. -
August 11, 2021, by Michael Wetter:
Reformulated initial equation section to avoid warning in OPTIMICA about variable array index.
This is for IBPSA #1513. -
June 10, 2021, by Michael Wetter:
Changed implementation of the filter and changed the parameterorderto a constant as most users need not change this value.
This is for IBPSA #1498. -
April 6, 2020, by Antoine Gautier:
Added the computation of the damper opening. -
December 23, 2019 by Antoine Gautier:
Refactored as the model can now extend directly Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.
This is for IBPSA #1188. -
March 21, 2017 by David Blum:
First implementation.