Example: TwoPhaseWater

The TwoPhaseWater package demonstrates how to extend the parsimonious BaseProperties with a minimal set of properties from the standard water package with most properties that are needed in two-phase situations. The model also demonstrates how to compute additional  properties for the medium model. In this scenario, that builds a new medium model with many more properties than the default, the standard BaseProperties is used as a basis. For additional properties, a user has to:
  1. Declare a new variable of the wanted type, e.g., "DynamicViscosity eta".
  2. Compute that variable by calling the function form the package, e.g., eta = dynamicViscosity(state). Note that the instance of ThermodynamicState is used as an input to the function. This instance "state" is declared in PartialMedium and thus available in every medium model. A user does not have to know what actual variables are required to compute the dynamic viscosity, because the state instance is guaranteed to contain what is needed.
  3. Attention: Many properties are not well defined in the two phase region and the functions might return undesired values if called there. It is the user's responsibility  to take care of such situations. The example uses one of several possible models to compute an averaged viscosity for two-phase flows.
In two phase models, properties are often needed on the phase boundary just outside the two phase dome, right on the border.. To compute the thermodynamic state there, two auxiliary functions are provided: setDewState(sat) and setBubbleState(sat). They take an instance of SaturationProperties as input. By default they are in one-phase, but with the optional phase argument set to 2, the output is forced to be just inside the phase boundary. This is only needed when derivatives like cv are computed with are different on both sides of the boundaries. The usual steps to compute properties on the phase boundary are:
  1. Declare an instance of ThermodynamicState, e.g., "ThermodynamicState  dew".
  2. Compute the state, using an instance of SaturationProperties, e.g., dew = setDewState(sat)
  3. Compute properties on the phase boundary to your full desire, e.g., "cp_d = specificHeatCapacityCp(dew)".

The sample model TestTwoPhaseStates test the extended properties

The same procedure can be used to compute properties at other state points, e.g., when an isentropic reference state is computed.


BasePropertiesMake StandardWater.BaseProperties non replaceable in order that inheritance is possible in model ExtendedProperties
ExtendedPropertiesPlenty of two-phase properties
TestTwoPhaseStatesTest the TwoPhaseWater model

Generated at 2024-05-28T18:15:54Z by OpenModelicaOpenModelica 1.22.4 using GenerateDoc.mos