This package implements performance curves for fans and pumps, and records for parameter that can be used with these performance curves.
The following performance curves are implemented:
| Independent variable | Dependent variable | Record for performance data | Function |
|---|---|---|---|
| Volume flow rate | Pressure | flowParameters | pressure |
| Relative volumetric flow rate | Efficiency | efficiencyParameters | efficiency |
| Volume flow rate | Power | powerParameters | power |
| Name | Description |
|---|---|
| Record for flow parameters | |
| Record for flow parameters with prescribed size | |
| Record for efficiency parameters | |
| Record for electrical power parameters | |
| Flow vs. head characteristics for fan or pump pressure raise | |
| Approximation for fan or pump pressure raise at origin | |
| Flow vs. electrical power characteristics for fan or pump | |
| Flow vs. efficiency characteristics for fan or pump |
Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters
Data record for performance data that describe volume flow rate versus
pressure rise.
The volume flow rate V_flow must be increasing, i.e.,
V_flow[i] < V_flow[i+1].
Both vectors, V_flow and dp
must have the same size.
Extends from Modelica.Icons.Record (Icon for records).
| Type | Name | Default | Description |
|---|---|---|---|
| VolumeFlowRate | V_flow[:] | Volume flow rate at user-selected operating points [m3/s] | |
| Pressure | dp[size(V_flow, 1)] | Fan or pump total pressure at these flow rates [Pa] |
record flowParameters "Record for flow parameters"
extends Modelica.Icons.Record;
parameter Modelica.SIunits.VolumeFlowRate V_flow[:](each min=0)
"Volume flow rate at user-selected operating points";
parameter Modelica.SIunits.Pressure dp[size(V_flow,1)](
each min=0, each displayUnit="Pa")
"Fan or pump total pressure at these flow rates";
end flowParameters;
Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal
Data record for performance data that describe volume flow rate versus
pressure rise.
The volume flow rate V_flow must be increasing, i.e.,
V_flow[i] < V_flow[i+1].
Both vectors, V_flow and dp
must have the same size.
This record is identical to
Buildings.Fluid.Movers.BaseClasses.Characteristic.flowParameters,
except that it takes the size of the array as a parameter. This is required
in Dymola 2014. Otherwise, the array size would need to be computed in
Buildings.Fluid.Movers.BaseClasses.FlowMachineInterface
in the initial algorithm section, which is not supported.
Extends from Modelica.Icons.Record (Icon for records).
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | n | Number of elements in each array | |
| VolumeFlowRate | V_flow[n] | Volume flow rate at user-selected operating points [m3/s] | |
| Pressure | dp[n] | Fan or pump total pressure at these flow rates [Pa] |
record flowParametersInternal
"Record for flow parameters with prescribed size"
extends Modelica.Icons.Record;
parameter Integer n "Number of elements in each array";
parameter Modelica.SIunits.VolumeFlowRate V_flow[n](each min=0)
"Volume flow rate at user-selected operating points";
parameter Modelica.SIunits.Pressure dp[n](
each min=0, each displayUnit="Pa")
"Fan or pump total pressure at these flow rates";
end flowParametersInternal;
Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters
Data record for performance data that describe volume flow rate versus
efficiency.
The volume flow rate r_V must be increasing, i.e.,
r_V[i] < r_V[i+1].
Both vectors, r_V and eta
must have the same size.
Extends from Modelica.Icons.Record (Icon for records).
| Type | Name | Default | Description |
|---|---|---|---|
| Real | r_V[:] | Volumetric flow rate divided by nominal flow rate at user-selected operating points | |
| Real | eta[size(r_V, 1)] | Fan or pump efficiency at these flow rates |
record efficiencyParameters "Record for efficiency parameters"
extends Modelica.Icons.Record;
parameter Real r_V[:](each min=0, each max=1, each displayUnit="1")
"Volumetric flow rate divided by nominal flow rate at user-selected operating points";
parameter Real eta[size(r_V,1)](
each min=0, each max=1, each displayUnit="1")
"Fan or pump efficiency at these flow rates";
end efficiencyParameters;
Buildings.Fluid.Movers.BaseClasses.Characteristics.powerParameters
Data record for performance data that describe volume flow rate versus
electrical power.
The volume flow rate V_flow must be increasing, i.e.,
V_flow[i] < V_flow[i+1].
Both vectors, V_flow and P
must have the same size.
Extends from Modelica.Icons.Record (Icon for records).
| Type | Name | Default | Description |
|---|---|---|---|
| VolumeFlowRate | V_flow[:] | {0} | Volume flow rate at user-selected operating points [m3/s] |
| Power | P[size(V_flow, 1)] | {0} | Fan or pump electrical power at these flow rates [W] |
record powerParameters "Record for electrical power parameters"
extends Modelica.Icons.Record;
parameter Modelica.SIunits.VolumeFlowRate V_flow[:](each min=0)= {0}
"Volume flow rate at user-selected operating points";
parameter Modelica.SIunits.Power P[size(V_flow,1)](
each min=0) = {0} "Fan or pump electrical power at these flow rates";
end powerParameters;
Buildings.Fluid.Movers.BaseClasses.Characteristics.pressure
This function computes the fan static pressure raise as a function of volume flow rate and revolution in the form
Δp = rN2 s(V/rN, d) - Δpr ,
where Δp is the pressure rise, rN is the normalized fan speed, V is the volume flow rate and d are performance data for fan or pump power consumption at rN=1. The term
Δpr = V Δpmax ⁄ Vmax δ
models the flow resistance of the fan, approximated using a linear equation. This is done for numerical reasons to avoid a singularity at rN=0. Since δ is small, the contribution of this term is small. The fan and pump models in Buildings.Fluid.Movers modify the user-supplied performance data to add the term Δpr prior to computing the performance curve. Thus, at full speed, the fan or pump can operate exactly at the user-supplied performance data.
The function s(·, ·) is a cubic hermite spline. If the data d define a monotone decreasing sequence, then s(·, d) is a monotone decreasing function.
For rN < δ, the polynomial is replaced with an other model to avoid a singularity at the origin. The composite model is once continuously differentiable in all input variables.
Extends from Modelica.Icons.Function (Icon for functions).
| Type | Name | Default | Description |
|---|---|---|---|
| flowParametersInternal | data | Pressure performance data | |
| VolumeFlowRate | V_flow | Volumetric flow rate [m3/s] | |
| Real | r_N | Relative revolution, r_N=N/N_nominal [1] | |
| VolumeFlowRate | VDelta_flow | Small volume flow rate [m3/s] | |
| Pressure | dpDelta | Small pressure [Pa] | |
| VolumeFlowRate | V_flow_max | Maximum volume flow rate at r_N=1 and dp=0 [m3/s] | |
| Pressure | dpMax | Maximum pressure at r_N=1 and V_flow=0 [Pa] | |
| Real | d[:] | Derivatives at support points for spline interpolation | |
| Real | delta | Small value used to transition to other fan curve | |
| Real | cBar[2] | Coefficients for linear approximation of pressure vs. flow rate | |
| Real | kRes | Linear coefficient for fan-internal pressure drop [kg/(s.m4)] |
| Type | Name | Description |
|---|---|---|
| Pressure | dp | Pressure raise [Pa] |
function pressure
"Flow vs. head characteristics for fan or pump pressure raise"
extends Modelica.Icons.Function;
input Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal
data
"Pressure performance data";
input Modelica.SIunits.VolumeFlowRate V_flow "Volumetric flow rate";
input Real r_N(unit="1") "Relative revolution, r_N=N/N_nominal";
input Modelica.SIunits.VolumeFlowRate VDelta_flow "Small volume flow rate";
input Modelica.SIunits.Pressure dpDelta "Small pressure";
input Modelica.SIunits.VolumeFlowRate V_flow_max
"Maximum volume flow rate at r_N=1 and dp=0";
input Modelica.SIunits.Pressure dpMax(min=0)
"Maximum pressure at r_N=1 and V_flow=0";
input Real d[:] "Derivatives at support points for spline interpolation";
input Real delta "Small value used to transition to other fan curve";
input Real cBar[2]
"Coefficients for linear approximation of pressure vs. flow rate";
input Real kRes(unit="kg/(s.m4)")
"Linear coefficient for fan-internal pressure drop";
output Modelica.SIunits.Pressure dp "Pressure raise";
protected
Integer dimD(min=2)=size(data.V_flow, 1) "Dimension of data vector";
function performanceCurve "Performance curve away from the origin"
input Modelica.SIunits.VolumeFlowRate V_flow "Volumetric flow rate";
input Real r_N(unit="1") "Relative revolution, r_N=N/N_nominal";
input Real d[dimD] "Coefficients for polynomial of pressure vs. flow rate";
input Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal
data
"Pressure performance data";
input Integer dimD "Dimension of data vector";
output Modelica.SIunits.Pressure dp "Pressure raise";
protected
Modelica.SIunits.VolumeFlowRate rat "Ratio of V_flow/r_N";
Integer i "Integer to select data interval";
algorithm
rat := V_flow/r_N;
i :=1;
// Since the coefficients for the spline were evaluated for
// rat_nominal = V_flow_nominal/r_N_nominal = V_flow_nominal/1, we use
// V_flow_nominal below
for j in 1:dimD-1 loop
if rat > data.V_flow[j] then
i := j;
end if;
end for;
// Extrapolate or interpolate the data
dp:=r_N^2*Buildings.Utilities.Math.Functions.cubicHermiteLinearExtrapolation(
x=rat,
x1=data.V_flow[i],
x2=data.V_flow[i + 1],
y1=data.dp[i],
y2=data.dp[i + 1],
y1d=d[i],
y2d=d[i+1]);
end performanceCurve ;
algorithm
if r_N >= delta then
dp := performanceCurve(V_flow=V_flow, r_N=r_N, d=d,
data=data, dimD=dimD);
elseif r_N <= delta/2 then
dp := flowApproximationAtOrigin(r_N=r_N, V_flow=V_flow,
VDelta_flow= VDelta_flow, dpDelta=dpDelta,
delta=delta, cBar=cBar);
else
dp := Modelica.Fluid.Utilities.regStep(x=r_N-0.75*delta,
y1=performanceCurve(V_flow=V_flow, r_N=r_N, d=d,
data=data, dimD=dimD),
y2=flowApproximationAtOrigin(r_N=r_N, V_flow=V_flow,
VDelta_flow=VDelta_flow, dpDelta=dpDelta,
delta=delta, cBar=cBar),
x_small=delta/4);
end if;
dp := dp - V_flow*kRes;
end pressure;
Buildings.Fluid.Movers.BaseClasses.Characteristics.flowApproximationAtOrigin
This function computes the fan static pressure raise as a function of volume flow rate and revolution near the origin. It is used to avoid a singularity in the pump or fan curve if the revolution approaches zero.
Extends from Modelica.Icons.Function (Icon for functions).
| Type | Name | Default | Description |
|---|---|---|---|
| VolumeFlowRate | V_flow | Volumetric flow rate [m3/s] | |
| Real | r_N | Relative revolution, r_N=N/N_nominal [1] | |
| VolumeFlowRate | VDelta_flow | Small volume flow rate [m3/s] | |
| Pressure | dpDelta | Small pressure [Pa] | |
| Real | delta | Small value used to transition to other fan curve | |
| Real | cBar[2] | Coefficients for linear approximation of pressure vs. flow rate |
| Type | Name | Description |
|---|---|---|
| Pressure | dp | Pressure raise [Pa] |
function flowApproximationAtOrigin
"Approximation for fan or pump pressure raise at origin"
extends Modelica.Icons.Function;
input Modelica.SIunits.VolumeFlowRate V_flow "Volumetric flow rate";
input Real r_N(unit="1") "Relative revolution, r_N=N/N_nominal";
input Modelica.SIunits.VolumeFlowRate VDelta_flow "Small volume flow rate";
input Modelica.SIunits.Pressure dpDelta "Small pressure";
input Real delta "Small value used to transition to other fan curve";
input Real cBar[2]
"Coefficients for linear approximation of pressure vs. flow rate";
output Modelica.SIunits.Pressure dp "Pressure raise";
algorithm
dp := r_N * dpDelta + r_N^2 * (cBar[1] + cBar[2]*V_flow);
end flowApproximationAtOrigin;
Buildings.Fluid.Movers.BaseClasses.Characteristics.power
This function computes the fan power consumption for given volume flow rate, speed and performance data. The power consumption is
P = rN3 s(V, d),
where P is the power consumption, rN is the normalized fan speed, V is the volume flow rate and d are performance data for fan or pump power consumption at rN=1.
The function s(·, ·) is a cubic hermite spline. If the data d define a monotone decreasing sequence, then s(·, d) is a monotone decreasing function.
Extends from Modelica.Icons.Function (Icon for functions).
| Type | Name | Default | Description |
|---|---|---|---|
| powerParameters | data | Pressure performance data | |
| VolumeFlowRate | V_flow | Volumetric flow rate [m3/s] | |
| Real | r_N | Relative revolution, r_N=N/N_nominal [1] | |
| Real | d[:] | Derivatives at support points for spline interpolation |
| Type | Name | Description |
|---|---|---|
| Power | P | Power consumption [W] |
function power
"Flow vs. electrical power characteristics for fan or pump"
extends Modelica.Icons.Function;
input Buildings.Fluid.Movers.BaseClasses.Characteristics.powerParameters data
"Pressure performance data";
input Modelica.SIunits.VolumeFlowRate V_flow "Volumetric flow rate";
input Real r_N(unit="1") "Relative revolution, r_N=N/N_nominal";
input Real d[:] "Derivatives at support points for spline interpolation";
output Modelica.SIunits.Power P "Power consumption";
protected
Integer n=size(data.V_flow, 1) "Dimension of data vector";
Modelica.SIunits.VolumeFlowRate rat "Ratio of V_flow/r_N";
Integer i "Integer to select data interval";
algorithm
if n == 1 then
P := r_N^3*data.P[1];
else
i :=1;
// Since the coefficients for the spline were evaluated for
// rat_nominal = V_flow_nominal/r_N_nominal = V_flow_nominal/1, we use
// V_flow_nominal below
for j in 1:n-1 loop
if V_flow > data.V_flow[j] then
i := j;
end if;
end for;
// Extrapolate or interpolate the data
P:=r_N^3*Buildings.Utilities.Math.Functions.cubicHermiteLinearExtrapolation(
x=V_flow,
x1=data.V_flow[i],
x2=data.V_flow[i + 1],
y1=data.P[i],
y2=data.P[i + 1],
y1d=d[i],
y2d=d[i+1]);
end if;
end power;
Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiency
This function computes the fan or pump efficiency for given normalized volume flow rate and performance data. The efficiency is
η = s(rV, d),
where η is the efficiency, rV is the normalized volume flow rate, and d are performance data for fan or pump efficiency.
The function s(·, ·) is a cubic hermite spline. If the data d define a monotone decreasing sequence, then s(·, d) is a monotone decreasing function.
Extends from Modelica.Icons.Function (Icon for functions).
| Type | Name | Default | Description |
|---|---|---|---|
| efficiencyParameters | data | Efficiency performance data | |
| Real | r_V | Volumetric flow rate divided by nominal flow rate [1] | |
| Real | d[:] | Derivatives at support points for spline interpolation |
| Type | Name | Description |
|---|---|---|
| Real | eta | Efficiency [1] |
function efficiency
"Flow vs. efficiency characteristics for fan or pump"
extends Modelica.Icons.Function;
input Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters
data "Efficiency performance data";
input Real r_V(unit="1") "Volumetric flow rate divided by nominal flow rate";
input Real d[:] "Derivatives at support points for spline interpolation";
output Real eta(min=0, unit="1") "Efficiency";
protected
Integer n = size(data.r_V, 1) "Number of data points";
Integer i "Integer to select data interval";
algorithm
if n == 1 then
eta := data.eta[1];
else
i :=1;
for j in 1:n-1 loop
if r_V > data.r_V[j] then
i := j;
end if;
end for;
// Extrapolate or interpolate the data
eta:=Buildings.Utilities.Math.Functions.cubicHermiteLinearExtrapolation(
x=r_V,
x1=data.r_V[i],
x2=data.r_V[i + 1],
y1=data.eta[i],
y2=data.eta[i + 1],
y1d=d[i],
y2d=d[i+1]);
end if;
end efficiency;