| Name | Description |
|---|---|
| Collection of models that illustrate model use and test models | |
| 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.
Extends from Buildings.Fluids.Interfaces.PartialStaticTwoPortInterface (Partial element transporting fluid between two ports without storing mass or energy).
| Type | Name | Default | Description |
|---|---|---|---|
| replaceable package Medium | Modelica.Media.Interfaces.Pa... | 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) |
| Nominal condition | |||
| MassFlowRate | m0_flow | Nominal mass flow rate [kg/s] | |
| Initialization | |||
| MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s] |
| Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa] |
| Assumptions | |||
| Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
| Advanced | |||
| MassFlowRate | m_flow_small | 1E-4*m0_flow | Small mass flow rate for regularization of zero flow [kg/s] |
| Diagnostics | |||
| Boolean | show_V_flow | true | = true, if volume flow rate at inflowing port is computed |
| Initialization | |||
| AbsolutePressure | p_a_start | system.p_start | Guess value for inlet pressure [Pa] |
| AbsolutePressure | p_b_start | p_a_start | Guess value for outlet pressure [Pa] |
| 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.PartialStaticTwoPortInterface;
Modelica.Blocks.Interfaces.RealInput N_in "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";
Medium.Density den "Medium density";
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
den = Medium.density(sta_a);
-dp = scaDp * pNor * den * D*D * N_in * N_in;
m_flow = scaM_flow * mNor_flow * den * 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));
etaSha * PSha = -dp * m_flow / den; // dp<0 and m_flow>0 for normal operation
// Energy balance (no storage, no heat loss/gain)
PSha = -m_flow*(port_a.h_outflow-inStream(port_b.h_outflow));
PSha = m_flow*(port_b.h_outflow-inStream(port_a.h_outflow));
// Mass balance (no storage)
port_a.m_flow + port_b.m_flow = 0;
// Transport of substances
port_a.Xi_outflow = inStream(port_b.Xi_outflow);
port_b.Xi_outflow = inStream(port_a.Xi_outflow);
port_a.C_outflow = inStream(port_b.C_outflow);
port_b.C_outflow = inStream(port_a.C_outflow);
end FlowMachinePolynomial;