Fluid libraries usually have balance volume components with one fluid connector port that fulfill the mass and energy balance and on a different grid components that fulfill the momentum balance. A balance volume component, called junction volume below, should be primarily implemented in the following way (see also the implementation in Modelica.Media.Examples.Utilities.PortVolume):

modelJunctionVolumeimportModelica.Units.SI;importModelica.Media.Examples.Utilities.FluidPort_a;parameterSI.Volume V = 1e-6 "Fixed size of junction volume";replaceable packageMedium = Modelica.Media.Interfaces.PartialMedium "Medium model"annotation(choicesAllMatching =true); FluidPort_a port(redeclare packageMedium = Medium); Medium.BaseProperties medium(preferredMediumStates =true); SI.Energy U "Internal energy of junction volume"; SI.Mass M "Mass of junction volume"; SI.Mass MX[Medium.nXi] "Independent substance masses of junction volume";equationmedium.p = port.p; medium.h = port.h; medium.Xi = port.Xi; M = V*medium.d; // mass of JunctionVolume MX = M*medium.Xi; // mass fractions in JunctionVolume U = M*medium.u; // internal energy in JunctionVolumeder(M) = port.m_flow; // mass balanceder(MX) = port.mX_flow; // substance mass balanceder(U) = port.H_flow; // energy balanceendJunctionVolume;

Assume the Modelica.Media.Air.SimpleAir medium model is used with
the JunctionVolume model above. This medium model uses pressure p
and temperature T as independent variables. If the flag
"preferredMediumStates" is set to **true** in the declaration
of "medium", then the independent variables of this medium model
get the attribute "stateSelect = StateSelect.prefer", i.e., the
Modelica translator should use these variables as states, if this
is possible. Basically, this means that
constraints between the
potential states p,T and the potential states U,M are present.
A Modelica tool will therefore **automatically**
differentiate medium equations and will use the following
equations for code generation (note the equations related to X are
removed, because SimpleAir consists of a single substance only):

M = V*medium.d; U = M*medium.u; // balance equationsder(M) = port.m_flow;der(U) = port.H_flow; // abbreviations introduced to get simpler terms p = medium.p; T = medium.T; d = medium.d; u = medium.u; h = medium.h; // medium equations d = fd(p,T); h = fh(p,T); u = h - p/d; // equations derivedautomaticallyby a Modelica tool due to index reductionder(U) =der(M)*u + M*der(u);der(M) = V*der(d);der(u) =der(h) -der(p)/d - p/der(d);der(d) =der(fd,p)*der(p) +der(fd,T)*der(T);der(h) =der(fh,p)*der(p) +der(fd,T)*der(T);

Note, that "der(y,x)" is an operator that characterizes
in the example above the partial derivative of y with respect to x
(this operator will be included in one of the next Modelica language
releases).
All media models in this library are written in such a way that
at least the partial derivatives of the medium variables with
respect to the independent variables are provided, either because
the equations are directly given (= symbolic differentiation is possible)
or because the derivative of the corresponding function (such as fd above)
is provided. A Modelica tool will transform the equations above
in differential equations with p and T as states, i.e., will
generate equations to compute **der**(p) and **der**(T) as function of p and T.

Note, when preferredMediumStates = **false**, no differentiation
will take place and the Modelica translator will use the variables
appearing differentiated as states, i.e., M and U. This has the
disadvantage that for many media non-linear systems of equations are
present to compute the intrinsic properties p, d, T, u, h from
M and U.

Generated at 2023-09-21T00:33:23Z by OpenModelicaOpenModelica 1.22.0~dev-51-ge506fbc using GenerateDoc.mos