modelExponential
Air damper with exponential opening characteristics
Extends from Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential (Partial model for air dampers with exponential opening characteristics).
Information
Model of two flow resistances in series:
- one resistance has a fixed flow coefficient;
- the other resistance represents a damper whose flow coefficient is an exponential function of the opening angle.
The lumped flow coefficient k(y) (function of the fractional opening y) is used to compute the mass flow rate versus pressure drop relation as:
ṁ = sign(Δp) k(y) √ Δp
with regularization near the origin.
For a description of the damper opening characteristics and typical parameter values, see the partial model Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.
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 |
| 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) |
Revisions
-
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 #1498. -
April 12, 2021, by Michael Wetter:
Guarded against division by zero if the pressure equation is removed. This then leads to a more meaningful error message.
This is for IBPSA, #1243. -
December 23, 2019, by Antoine Gautier:
Added the pressure drop calculation as it is no longer in the base class.
This is for IBPSA, #1188. -
March 22, 2017, by Michael Wetter:
Updated documentation. -
April 14, 2014 by Michael Wetter:
Improved documentation. -
September 26, 2013 by Michael Wetter:
Moved assignment ofkDam_defaultandkThetaSqRt_defaultfrominitial algorithmto the variable declaration, to avoid a division by zero in OpenModelica. -
December 14, 2012 by Michael Wetter:
Renamed protected parameters for consistency with the naming conventions. -
June 22, 2008 by Michael Wetter:
Extended range of control signal from 0 to 1 by implementing the function Buildings.Fluid.Actuators.BaseClasses.exponentialDamper. -
June 10, 2008 by Michael Wetter:
Introduced new partial base class, PartialDamperExponential. -
June 30, 2007 by Michael Wetter:
Introduced new partial base class, PartialActuator. -
July 27, 2007 by Michael Wetter:
Introduced partial base class. -
July 20, 2007 by Michael Wetter:
First implementation.