This is an interface that implements the functions to compute the head, power draw and efficiency of fans and pumps.
The nominal hydraulic characteristic (volume flow rate versus total pressure)
is given by a set of data points
using the data record per
, which is an instance of
Annex60.Fluid.Movers.Data.Generic.
A cubic hermite spline with linear extrapolation is used to compute
the performance at other operating points.
The fan or pump energy balance can be specified in two alternative ways:
per.use_powerCharacteristic = false
, then the data points for
normalized volume flow rate versus efficiency is used to determine the efficiency,
and then the power consumption. The default is a constant efficiency of 0.7.
per.use_powerCharacteristic = true
, then the data points for
normalized volume flow rate versus power consumption
is used to determine the power consumption, and then the efficiency
is computed based on the actual power consumption and the flow work.
For exceptions to this general rule, check the User's Guide for more information.
For numerical reasons, the user-provided data points for volume flow rate versus pressure rise are modified to add a fan internal flow resistance. Because this flow resistance is subtracted during the simulation when computing the fan pressure rise, the model reproduces the exact points that were provided by the user.
Also for numerical reasons, the pressure rise at zero flow rate and
the flow rate at zero pressure rise is added to the user-provided data,
unless the user already provides these data points.
Since Modelica 3.2 does not allow dynamic memory allocation, this
implementation required the use of three different arrays for the
situation where no additional point is added, where one additional
point is added and where two additional points are added.
The parameter curve
causes the correct data record
to be used during the simulation.
min
attribute as otherwise numerical noise can cause
the assertion on the limit to fail.etaMot = cha.efficiency(per=per.motorEfficiency, V_flow=V_flow, d=motDer, r_N=r_N, delta=1E-4)
which previously used V_flow_max
instead of V_flow
.
N_actual
and N_filtered
the max
attribute to
avoid a translation warning.
per=if (curve == 1) then pCur1 elseif (curve == 2) then pCur2 else pCur3
by moving the computation into the idividual logical branches because OpenModelica generates an
error when assign the statement to data
as pCur1
, pCur2
and pCur3
have different dimensions.
each
keyword in declaration of parameters
that are an array.
pCur?.V_flow
as
these parameters have the attribute fixed=false
set.
WFlo = eta * P
with
guard against division by zero.
Changed implementation of etaMot=sqrt(eta)
to
etaHyd = 1
to avoid infinite derivative as eta
converges to zero.
V_flow
.
homotopy
operator.