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.