TwoPhase

Two-phase media

Information

This information is part of the Modelica Standard Library maintained by the Modelica Association.

Models for media which can exist in one-phase or two-phase conditions inherit from Modelica.Media.Interfaces.PartialTwoPhaseMedium (which inherits from PartialMedium). The basic usage of these media models is the same as described in the previous sections. However, additional functionalities are provided, which apply only to potentially two-phase media.

The following additional medium constants are provided:

Type Name Description
Boolean smoothModel If this flag is false (default value), then events are triggered whenever the saturation boundary is crossed; otherwise, no events are generated.
Boolean onePhase If this flag is true, then the medium model assumes it will be never called in the two-phase region. This can be useful to speed up the computations in a two-phase medium, when the user is sure it will always work in the one-phase region. Default value: false.

The setState_ph(), setState_ps(), setState_dT() and setState_pT() functions have one extra input, named phase. If the phase input is not specified, or if it is given a value of zero, then the setState function will determine the phase, based on the other input values. An input phase = 1 will force the setState function to return a state vector corresponding to a one-phase state, while phase = 2 will force the setState value to return a state vector corresponding to a two-phase state, as shown in the following example;

   replaceable package Medium = Modelica.Media.Interfaces.PartialTwoPhaseMedium;
   Medium.ThermodynamicState state, state1, state2;
 equation
   // Set the state, given the pressure and the specific enthalpy
   // the phase is determined by the (p, h) values, and can be retrieved
   // from the state record
   state = Medium.setState_ph(p, h);
   phase = state1.phase;

   // Force the computation of the state with one-phase
   // equations of state, irrespective of the (p, h) values
   state1 = Medium.setState_ph(p, h, 1);

   // Force the computation of the state with 2-phase
   // equations of state, irrespective of the (p, h) values
   state2 = Medium.setState_ph(p, h, 2);

This feature can be used for the following purposes:

  • saving computational time, if one knows in advance the phase of the medium;
  • unambiguously determine the phase, when the two inputs correspond to a point on the saturation boundary (the derivative functions have substantially different values on either side);
  • get the properties of metastable states, like superheated water or subcooled vapour.

Many additional optional functions are defined to compute properties of saturated media, either liquid (bubble point) or vapour (dew point). The argument to such functions is a SaturationProperties record, which can be set starting from either the saturation pressure or the saturation temperature, as shown in the following example.

   replaceable package Medium = Modelica.Media.Interfaces.PartialTwoPhaseMedium;
   Medium.SaturationProperties sat_p;
   Medium.SaturationProperties sat_T;
 equation
   // Set sat_p to saturation properties at pressure p
   sat_p = Medium.setSat_p(p);

   // Compute saturation properties at pressure p
   saturationTemperature_p = Medium.saturationTemperature_sat(sat_p);
   bubble_density_p =        Medium.bubbleDensity(sat_p);
   dew_enthalpy_p   =        Medium.dewEnthalpy(sat_p);

   // Set sat_T to saturation properties at temperature T
   sat_T = Medium.setSat_T(T);

   // Compute saturation properties at temperature T
   saturationTemperature_T = Medium.saturationPressure_sat(sat_T);
   bubble_density_T =        Medium.bubbleDensity(sat_T);
   dew_enthalpy_T =          Medium.dewEnthalpy(sat_T);

With reference to a model defining a pressure p, a temperature T, and a SaturationProperties record sat, the following functions are provided:

Function call Unit Description
Medium.saturationPressure(T) Pa Saturation pressure at temperature T
Medium.saturationTemperature(p) K Saturation temperature at pressure p
Medium.saturationTemperature_derp(p) K/Pa Derivative of saturation temperature with respect to pressure
Medium.saturationTemperature_sat(sat) K Saturation temperature
Medium.saturationPressure_sat(sat) Pa Saturation pressure
Medium.bubbleEnthalpy(sat) J/kg Specific enthalpy at bubble point
Medium.dewEnthalpy(sat) J/kg Specific enthalpy at dew point
Medium.bubbleEntropy(sat) J/(kg.K) Specific entropy at bubble point
Medium.dewEntropy(sat) J/(kg.K) Specific entropy at dew point
Medium.bubbleDensity(sat) kg/m3 Density at bubble point
Medium.dewDensity(sat) kg/m3 Density at dew point
Medium.saturationTemperature_derp_sat(sat) K/Pa Derivative of saturation temperature with respect to pressure
Medium.dBubbleDensity_dPressure(sat) kg/(m3.Pa) Derivative of density at bubble point with respect to pressure
Medium.dDewDensity_dPressure(sat) kg/(m3.Pa) Derivative of density at dew point with respect to pressure
Medium.dBubbleEnthalpy_dPressure(sat) J/(kg.Pa) Derivative of specific enthalpy at bubble point with respect to pressure
Medium.dDewEnthalpy_dPressure(sat) J/(kg.Pa) Derivative of specific enthalpy at dew point with respect to pressure
Medium.surfaceTension(sat) N/m Surface tension between liquid and vapour phase

Sometimes it can be necessary to compute fluid properties in the thermodynamic plane, just inside or outside the saturation dome. In this case, it is possible to obtain an instance of a ThermodynamicState state vector, and then use it to call the additional functions already defined for one-phase media.

Function call Description
Medium.setBubbleState(sat, phase) Obtain the thermodynamic state vector corresponding to the bubble point. If phase==1 (default), the state is on the one-phase side; if phase==2, the state is on the two-phase side
Medium.setDewState(sat, phase) Obtain the thermodynamic state vector corresponding to the dew point. If phase==1 (default), the state is on the one-phase side; if phase==2, the state is on the two-phase side

Here are some examples:

   replaceable package Medium = Modelica.Media.Interfaces.PartialTwoPhaseMedium;
   Medium.SaturationProperties sat;
   Medium.ThermodynamicState   dew_1;    // dew point, one-phase side
   Medium.ThermodynamicState   bubble_2; // bubble point, two phase side
 equation
   // Set sat to saturation properties at pressure p
   sat = setSat_p(p);

   // Compute dew point properties, (default) one-phase side
   dew_1 = setDewState(sat);
   cpDew = Medium.specificHeatCapacityCp(dew_1);
   drho_dp_h_1 = Medium.density_derp_h(dew_1);

   // Compute bubble point properties, two-phase side
   bubble_2    = setBubbleState(sat, 2);
   drho_dp_h_2 = Medium.density_derp_h(bubble_2);