| Name | Description |
|---|---|
| Package with basic models for fans and pumps | |
| Pump with head and efficiency given by a non-dimensional polynomial |
Buildings.Fluids.Movers.FlowMachinePolynomial
This is a model of a flow machine (pump or fan).
The normalized pressure difference is computed using a function of the normalized mass flow rate. The function is a polynomial for which a user needs to supply the coefficients and two values that determine for what flow rate the polynomial is linearly extended.
| Type | Name | Default | Description |
|---|---|---|---|
| replaceable package Medium | PartialMedium | Medium in the component | |
| Length | D | Diameter [m] | |
| Real | a[:] | Polynomial coefficients for pressure=p(mNor_flow) | |
| Real | b[:] | Polynomial coefficients for etaSha=p(mNor_flow) | |
| Real | mNorMin_flow | Lowest valid normalized mass flow rate | |
| Real | mNorMax_flow | Highest valid normalized mass flow rate | |
| Real | scaM_flow | 1 | Factor used to scale the mass flow rate of the fan (used for quickly adjusting fan size) |
| Real | scaDp | 1 | Factor used to scale the pressure increase of the fan (used for quickly adjusting fan size) |
| Initialization | |||
| MassFlowRate | m_flow | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s] | |
| Pressure | dp | Pressure difference between port_a and port_b [Pa] | |
| Advanced | |||
| Temp | flowDirection | Modelica_Fluid.Types.FlowDir... | Unidirectional (port_a -> port_b) or bidirectional flow component |
| Type | Name | Description |
|---|---|---|
| FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
| FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
| input RealInput | N_in | Prescribed rotational speed |
model FlowMachinePolynomial
"Pump with head and efficiency given by a non-dimensional polynomial"
extends Buildings.Fluids.Interfaces.PartialStaticTwoPortTransformer;
Modelica.Blocks.Interfaces.RealInput N_in(redeclare type SignalType =
Modelica.SIunits.AngularVelocity) "Prescribed rotational speed";
parameter Modelica.SIunits.Length D "Diameter";
parameter Real[:] a "Polynomial coefficients for pressure=p(mNor_flow)";
parameter Real[:] b "Polynomial coefficients for etaSha=p(mNor_flow)";
parameter Real mNorMin_flow "Lowest valid normalized mass flow rate";
parameter Real mNorMax_flow "Highest valid normalized mass flow rate";
parameter Real scaM_flow = 1
"Factor used to scale the mass flow rate of the fan (used for quickly adjusting fan size)";
parameter Real scaDp = 1
"Factor used to scale the pressure increase of the fan (used for quickly adjusting fan size)";
Real pNor(min=0) "Normalized pressure";
Real mNor_flow(start=mNorMax_flow) "Normalized mass flow rate";
Real etaSha(min=0, max=1) "Efficiency, flow work divided by shaft power";
Modelica.SIunits.Power PSha "Power input at shaft";
protected
parameter Real pNorMin1(fixed=false)
"Normalized pressure, used to test slope of polynomial outside [xMin, xMax]";
parameter Real pNorMin2(fixed=false)
"Normalized pressure, used to test slope of polynomial outside [xMin, xMax]";
parameter Real pNorMax1(fixed=false)
"Normalized pressure, used to test slope of polynomial outside [xMin, xMax]";
parameter Real pNorMax2(fixed=false)
"Normalized pressure, used to test slope of polynomial outside [xMin, xMax]";
initial equation
// check slope of polynomial outside the domain [mNorMin_flow, mNorMax_flow]
pNorMin1 = Buildings.Fluids.Utilities.extendedPolynomial(
c=a, x=mNorMin_flow/2, xMin=mNorMin_flow, xMax=mNorMax_flow);
pNorMin2 = Buildings.Fluids.Utilities.extendedPolynomial(
c=a, x=mNorMin_flow, xMin=mNorMin_flow, xMax=mNorMax_flow);
pNorMax1 = Buildings.Fluids.Utilities.extendedPolynomial(
c=a, x=mNorMax_flow, xMin=mNorMin_flow, xMax=mNorMax_flow);
pNorMax2 = Buildings.Fluids.Utilities.extendedPolynomial(
c=a, x=mNorMax_flow*2, xMin=mNorMin_flow, xMax=mNorMax_flow);
assert(pNorMin1>pNorMin2,
"Slope of pump pressure polynomial is non-negative for mNor_flow < mNorMin_flow. Check parameter a.");
assert(pNorMax1>pNorMax2,
"Slope of pump pressure polynomial is non-negative for mNorMax_flow < mNor_flow. Check parameter a.");
equation
-dp = scaDp * pNor * medium_a.d * D*D * N_in * N_in;
m_flow = scaM_flow * mNor_flow * medium_a.d * D*D*D * N_in;
pNor = Buildings.Fluids.Utilities.extendedPolynomial(
c=a, x=mNor_flow, xMin=mNorMin_flow, xMax=mNorMax_flow);
etaSha = max(0.1, Buildings.Fluids.Utilities.polynomial(
c=b, x=mNor_flow));
// for OpenModelica 1.4.3 sum(mNor_flow^(i - 1)*b[i] for i in 1:size(b,1));
etaSha * PSha = -dp * m_flow / medium_a.d; // dp<0 and m_flow>0 for normal operation
// interface ports and state conservation equations
port_a.H_flow + port_b.H_flow + PSha = 0;
port_a.m_flow + port_b.m_flow = 0;
port_a.mXi_flow + port_b.mXi_flow = zeros(Medium.nXi);
end FlowMachinePolynomial;