This is an interface that implements the functions to compute the head, power draw and efficiency of fans and pumps.
The nominal hydraulic characteristic (total pressure rise versus
volume flow rate) is given by a set of data points using the data
record per, which is an instance of BuildingSystems.Fluid.Movers.Data.Generic.
A cubic hermite spline with linear extrapolation is used to compute
the performance at other operating points.
The model computes the power and efficiency items in the list below.
See BuildingSystems.Fluid.Movers.UsersGuide for how the user can provide power and efficiency information to the model.
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.
In order to prevent the model from producing negative mover power when either the flow rate or pressure rise is forced to be negative, the flow work Ẇflo is constrained to be non-negative. The regularisation starts around 0.01% of the characteristic maximum power Ẇmax = V̇max Δpmax. See discussions and an example of this situation in IBPSA, #1621.
etaHyd and the
motor efficiency etaMot separately;eta or the hydraulic efficiency etaHyd
using the Euler number.etaMot as a function of part load ratio
y. Also allowed generic curves to be used.haveVMax here from
BuildingSystems.Fluid.Movers.BaseClasses.PartialFlowMachine.WHyd instead of etaHyd
to
BuildingSystems.Fluid.Movers.BaseClasses.PowerInterface.WFlo is bounded to be
non-negative.homotopyInitialization to a constant.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.