| Name | Description | 
|---|---|
| Collection of models that illustrate model use and test models | |
| Pump or fan with head and efficiency declared by a non-dimensional polynomial | 
Buildings.Fluid.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.Fluid.Interfaces.PartialStaticTwoPortInterface (Partial model transporting fluid between two ports without storing mass or energy).
| 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) | 
| Nominal condition | |||
| MassFlowRate | m_flow_nominal | 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*m_flow_nominal | 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 or fan with head and efficiency declared by a non-dimensional polynomial"
  extends Buildings.Fluid.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.Fluid.Utilities.extendedPolynomial(
                                        c=a, x=mNorMin_flow/2, xMin=mNorMin_flow, xMax=mNorMax_flow);
 pNorMin2 = Buildings.Fluid.Utilities.extendedPolynomial(
                                        c=a, x=mNorMin_flow, xMin=mNorMin_flow, xMax=mNorMax_flow);
 pNorMax1 = Buildings.Fluid.Utilities.extendedPolynomial(
                                        c=a, x=mNorMax_flow, xMin=mNorMin_flow, xMax=mNorMax_flow);
 pNorMax2 = Buildings.Fluid.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.Fluid.Utilities.extendedPolynomial(
                                        c=a, x=mNor_flow, xMin=mNorMin_flow, xMax=mNorMax_flow);
  etaSha = max(0.1, Buildings.Fluid.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;