modelFlowControlled_dp
Extends from IBPSA.Fluid.Movers.BaseClasses.PartialFlowMachine (Partial model to interface fan or pump models with the medium).
Information
This model describes a fan or pump with prescribed head.
The input connector provides the difference between
outlet minus inlet pressure.
The efficiency of the device is computed based
on the efficiency and pressure curves that are defined
in record per, which is of type
IBPSA.Fluid.Movers.SpeedControlled_Nrpm.
Main equations
See the User's Guide.
Typical use and important parameters
If use_inputFilter=true, then the parameter dp_nominal is
used to normalize the filter. This is used to improve the numerics of the transient response.
The actual pressure raise of the mover at steady-state is independent
of the value of dp_nominal. It is recommended to set
dp_nominal to approximately the pressure raise that the mover has during
full speed.
Options
Parameter prescribeSystemPressure
can be used to control the mover such that the pressure
difference set point is obtained across two points
in the system, instead of across the fan.
This allows an efficient implementation of
static pressure reset controllers.
A measurement of the pressure difference between the
two points in system then needs to be connected
to RealInput dpMea.
This functionality is demonstrated in
IBPSA.Fluid.Movers.Validation.FlowControlled_dpSystem.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| IBPSA.Fluid.Movers.Data.Generic | per (from PartialFlowMachine) | ||
| Boolean | computePowerUsingSimilarityLaws (from PartialFlowMachine) | = true, compute power exactly, using similarity laws. Otherwise approximate. | |
| Boolean | addPowerToMedium (from PartialFlowMachine) | true | Set to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations) |
| Boolean | nominalValuesDefineDefaultPressureCurve (from PartialFlowMachine) | false | Set to true to avoid warning if m_flow_nominal and dp_nominal are used to construct the default pressure curve |
| Modelica.SIunits.PressureDifference | constantHead | dp_nominal | Constant pump head, used when inputType=Constant |
| Modelica.SIunits.PressureDifference | heads | dp_nominal*{(per.speeds[i]/per.speeds[end])^2 for i in 1:size(per.speeds, 1)} | Vector of head set points, used when inputType=Stages |
| Dynamics › Equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from LumpedVolumeDeclarations) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | massDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of mass balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | substanceDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of independent mass fraction balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | traceDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of trace substance balance: dynamic (3 initialization options) or steady state |
| Initialization | |||
| Medium.AbsolutePressure | p_start (from LumpedVolumeDeclarations) | Medium.p_default | Start value of pressure |
| Medium.Temperature | T_start (from LumpedVolumeDeclarations) | Medium.T_default | Start value of temperature |
| Medium.MassFraction[Medium.nX] | X_start (from LumpedVolumeDeclarations) | Medium.X_default | Start value of mass fractions m_i/m |
| Medium.ExtraProperty[Medium.nC] | C_start (from LumpedVolumeDeclarations) | fill(0, Medium.nC) | Start value of trace substances |
| Medium.ExtraProperty[Medium.nC] | C_nominal (from LumpedVolumeDeclarations) | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.) |
| Dynamics | |||
| Real | mSenFac (from LumpedVolumeDeclarations) | 1 | Factor for scaling the sensible thermal mass of the volume |
| Assumptions | |||
| Boolean | allowFlowReversal (from PartialTwoPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Nominal condition | |||
| Modelica.SIunits.MassFlowRate | m_flow_nominal (from PartialTwoPortInterface) | Nominal mass flow rate | |
| Modelica.SIunits.PressureDifference | dp_nominal | if rho_default < 500 then 500 else 10000 | Nominal pressure raise, used to normalized the filter if use_inputFilter=true, to set default values of constantHead and heads, and and for default pressure curve if not specified in record per |
| Advanced | |||
| Modelica.SIunits.MassFlowRate | m_flow_small (from PartialTwoPortInterface) | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Boolean | prescribeSystemPressure | false | =true, to control mover such that pressure difference is obtained across two remote points in system |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialTwoPortInterface) | false | = true, if actual temperature at port is computed |
| Control | |||
| IBPSA.Fluid.Types.InputType | inputType (from PartialFlowMachine) | IBPSA.Fluid.Types.InputType.Continuous | Control input type |
| Real | constInput (from PartialFlowMachine) | 0 | Constant input set point |
| Real[:] | stageInputs (from PartialFlowMachine) | Vector of input set points corresponding to stages | |
| Dynamics › Nominal condition | |||
| Modelica.SIunits.Time | tau (from PartialFlowMachine) | 1 | Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic |
| Dynamics › Filtered speed | |||
| Boolean | use_inputFilter (from PartialFlowMachine) | true | = true, if speed is filtered with a 2nd order CriticalDamping filter |
| Modelica.SIunits.Time | riseTime (from PartialFlowMachine) | 30 | Rise time of the filter (time to reach 99.6 % of the speed) |
| Modelica.Blocks.Types.Init | init (from PartialFlowMachine) | Modelica.Blocks.Types.Init.InitialOutput | Type of initialization (no init/steady state/initial state/initial output) |
| Real | y_start (from PartialFlowMachine) | 0 | Initial value of speed |
| Modelica.SIunits.PressureDifference | dp_start | 0 | Initial value of pressure raise |
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.IntegerInput | stage (from PartialFlowMachine) | Stage input signal for the pressure head | |
| Modelica.Blocks.Interfaces.RealOutput | y_actual (from PartialFlowMachine) | Actual normalised pump speed that is used for computations | |
| Modelica.Blocks.Interfaces.RealOutput | P (from PartialFlowMachine) | Electrical power consumed | |
| Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a | heatPort (from PartialFlowMachine) | Heat dissipation to environment | |
| Modelica.Blocks.Interfaces.RealInput | dpMea | gain.u | Measurement of pressure difference between two points where the set point should be obtained |
| Modelica.Blocks.Interfaces.RealInput | dp_in | Prescribed pressure rise | |
| Modelica.Blocks.Interfaces.RealOutput | dp_actual | Pressure difference between the mover inlet and outlet |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.SIunits.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.SIunits.PressureDifference | dp (from PartialTwoPortInterface) | port_a.p - port_b.p | Pressure difference between port_a and port_b |
| Medium.ThermodynamicState | sta_a (from PartialTwoPortInterface) | Medium.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) | Medium properties in port_a |
| Medium.ThermodynamicState | sta_b (from PartialTwoPortInterface) | Medium.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) | Medium properties in port_b |
| Modelica.SIunits.VolumeFlowRate | VMachine_flow (from PartialFlowMachine) | eff.V_flow | Volume flow rate |
| Modelica.SIunits.PressureDifference | dpMachine (from PartialFlowMachine) | -preSou.dp | Pressure difference |
| Real | eta (from PartialFlowMachine) | eff.eta | Global efficiency |
| Real | etaHyd (from PartialFlowMachine) | eff.etaHyd | Hydraulic efficiency |
| Real | etaMot (from PartialFlowMachine) | eff.etaMot | Motor efficiency |
Revisions
-
May 5, 2017, by Filip Jorissen:
Added parameters, documentation and functionality forprescribeSystemPressure.
This is for #770. -
March 24, 2017, by Michael Wetter:
RenamedfilteredSpeedtouse_inputFilter.
This is for #665. -
December 2, 2016, by Michael Wetter:
Removedminattribute as otherwise numerical noise can cause the assertion on the limit to fail.
This is for #606. -
November 14, 2016, by Michael Wetter:
Changed default values forheads.
This is for #583. -
March 2, 2016, by Filip Jorissen:
Refactored model such that it directly extendsPartialFlowMachine. This is for #417. -
January 22, 2016, by Michael Wetter:
Corrected type declaration of pressure difference. This is for #404. -
November 5, 2015, by Michael Wetter:
Removed the parametersuse_powerCharacteristicsandpowerfrom the performance data recordperbecause IBPSA.Fluid.Movers.FlowControlled_dp and IBPSA.Fluid.Movers.FlowControlled_m_flow fix the flow rate or head, which can give a flow work that is higher than the power consumption specified in this record. Hence, users should use the efficiency data for this model. The record has been moved to IBPSA.Fluid.Movers.Data.SpeedControlled_y as it makes sense to use it for the movers IBPSA.Fluid.Movers.FlowControlled_Nrpm and IBPSA.Fluid.Movers.FlowControlled_y.
This is for issue 457. -
April 2, 2015, by Filip Jorissen:
Added code for supporting stage input and constant input. -
January 6, 2015, by Michael Wetter:
Revised model for OpenModelica. -
February 14, 2012, by Michael Wetter:
Added filter for start-up and shut-down transient. -
May 25, 2011, by Michael Wetter:
Revised implementation of energy balance to avoid having to use conditionally removed models. -
July 27, 2010, by Michael Wetter:
Redesigned model to fix bug in medium balance. - July 5, 2010, by Michael Wetter:
Changedassert(dp_in >= 0, ...)toassert(dp_in >= -0.1, ...). The former implementation triggered the assert ifdp_inwas solved for in a nonlinear equation since the solution can be slightly negative while still being within the solver tolerance. - March 24, 2010, by Michael Wetter:
Revised implementation to allow zero flow rate. - October 1, 2009,
by Michael Wetter:
Added model to the IBPSA library.