Buildings.Media.PerfectGases.MoistAir

Information


This is a medium model that is similar to Modelica.Media.Air.MoistAir but it has a constant specific heat capacity.

In particular, the medium is thermally perfect, i.e.,

In addition, the gas is calorically perfect, i.e., the specific heat capacities at constant pressure and constant volume are both constant (Bower 1998).

References

Bower, William B. A primer in fluid mechanics: Dynamics of flows in one space dimension. CRC Press. 1998.

Package Content

NameDescription
Water=1Index of water (in substanceNames, massFractions X, etc.)
Air=2Index of air (in substanceNames, massFractions X, etc.)
k_mair=steam.MM/dryair.MMratio of molar weights
dryair=Buildings.Media.PerfectGases.Common.SingleGasData.Air 
steam=Buildings.Media.PerfectGases.Common.SingleGasData.H2O 
Buildings.Media.PerfectGases.MoistAir.BaseProperties BaseProperties  
Buildings.Media.PerfectGases.MoistAir.Xsaturation Xsaturation  
Buildings.Media.PerfectGases.MoistAir.setState_pTX setState_pTX  
Buildings.Media.PerfectGases.MoistAir.setState_phX setState_phX  
Buildings.Media.PerfectGases.MoistAir.setState_dTX setState_dTX  
Buildings.Media.PerfectGases.MoistAir.gasConstant gasConstant  
Buildings.Media.PerfectGases.MoistAir.saturationPressureLiquid saturationPressureLiquid  
Buildings.Media.PerfectGases.MoistAir.sublimationPressureIce sublimationPressureIce  
Buildings.Media.PerfectGases.MoistAir.saturationPressure saturationPressure saturation curve valid for 223.16 <= T <= 373.16 (and slightly outside with less accuracy)
Buildings.Media.PerfectGases.MoistAir.pressure pressure  
Buildings.Media.PerfectGases.MoistAir.temperature temperature  
Buildings.Media.PerfectGases.MoistAir.density density  
Buildings.Media.PerfectGases.MoistAir.specificEntropy specificEntropy  
Buildings.Media.PerfectGases.MoistAir.enthalpyOfVaporization enthalpyOfVaporization enthalpy of vaporization of water
Buildings.Media.PerfectGases.MoistAir.HeatCapacityOfWater HeatCapacityOfWater specific heat capacity of water (liquid only)
Buildings.Media.PerfectGases.MoistAir.enthalpyOfLiquid enthalpyOfLiquid  
Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfLiquid der_enthalpyOfLiquid temperature derivative of enthalpy of liquid per unit mass of steam
Buildings.Media.PerfectGases.MoistAir.enthalpyOfCondensingGas enthalpyOfCondensingGas enthalpy of steam per unit mass of steam
Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfCondensingGas der_enthalpyOfCondensingGas derivative of enthalpy of steam per unit mass of steam
Buildings.Media.PerfectGases.MoistAir.enthalpyOfGas enthalpyOfGas  
Buildings.Media.PerfectGases.MoistAir.enthalpyOfDryAir enthalpyOfDryAir  
Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfDryAir der_enthalpyOfDryAir  
Buildings.Media.PerfectGases.MoistAir.specificHeatCapacityCp specificHeatCapacityCp Return specific heat capacity at constant pressure
Buildings.Media.PerfectGases.MoistAir.specificHeatCapacityCv specificHeatCapacityCv Return specific heat capacity at constant volume
Buildings.Media.PerfectGases.MoistAir.dynamicViscosity dynamicViscosity  
Buildings.Media.PerfectGases.MoistAir.thermalConductivity thermalConductivity  
Buildings.Media.PerfectGases.MoistAir.h_pTX h_pTX Compute specific enthalpy from pressure, temperature and mass fraction
Buildings.Media.PerfectGases.MoistAir.specificEnthalpy specificEnthalpy specific enthalpy
Buildings.Media.PerfectGases.MoistAir.specificInternalEnergy specificInternalEnergy Return specific internal energy
Buildings.Media.PerfectGases.MoistAir.specificGibbsEnergy specificGibbsEnergy  
Buildings.Media.PerfectGases.MoistAir.specificHelmholtzEnergy specificHelmholtzEnergy  
Buildings.Media.PerfectGases.MoistAir.T_phX T_phX Compute temperature from specific enthalpy and mass fraction
Buildings.Media.PerfectGases.MoistAir.Utilities Utilities utility functions

Types and constants

  constant Integer Water=1 
  "Index of water (in substanceNames, massFractions X, etc.)";

  constant Integer Air=2 
  "Index of air (in substanceNames, massFractions X, etc.)";

  constant Real k_mair =  steam.MM/dryair.MM "ratio of molar weights";

  constant Buildings.Media.PerfectGases.Common.DataRecord dryair=
        Buildings.Media.PerfectGases.Common.SingleGasData.Air;

  constant Buildings.Media.PerfectGases.Common.DataRecord steam=
        Buildings.Media.PerfectGases.Common.SingleGasData.H2O;


Buildings.Media.PerfectGases.MoistAir.BaseProperties Buildings.Media.PerfectGases.MoistAir.BaseProperties

Parameters

TypeNameDefaultDescription
Advanced
BooleanpreferredMediumStatesfalse= true if StateSelect.prefer shall be used for the independent property variables of the medium

Modelica definition

redeclare replaceable model extends BaseProperties(
  T(stateSelect=if preferredMediumStates then StateSelect.prefer else StateSelect.default),
  p(stateSelect=if preferredMediumStates then StateSelect.prefer else StateSelect.default),
  Xi(stateSelect=if preferredMediumStates then StateSelect.prefer else StateSelect.default)) 
  
  /* p, T, X = X[Water] are used as preferred states, since only then all
     other quantities can be computed in a recursive sequence. 
     If other variables are selected as states, static state selection
     is no longer possible and non-linear algebraic equations occur.
      */
  MassFraction x_water "mass of total water/mass of dry air";
  Real phi "relative humidity";
  
protected 
  constant SI.MolarMass[2] MMX = {steam.MM,dryair.MM} 
    "molar masses of components";
  
  MassFraction X_liquid "mass fraction of liquid water";
  MassFraction X_steam "mass fraction of steam water";
  MassFraction X_air "mass fraction of air";
  MassFraction X_sat 
    "steam water mass fraction of saturation boundary in kg_water/kg_moistair";
  MassFraction x_sat 
    "steam water mass content of saturation boundary in kg_water/kg_dryair";
  AbsolutePressure p_steam_sat "Partial saturation pressure of steam";
equation 
  assert(T >= 200.0 and T <= 423.15, "
Temperature T is not in the allowed range
200.0 K <= (T ="
             + String(T) + " K) <= 423.15 K
required from medium model \""   + mediumName + "\".");
  MM = 1/(Xi[Water]/MMX[Water]+(1.0-Xi[Water])/MMX[Air]);
  
  p_steam_sat = min(saturationPressure(T),0.999*p);
  X_sat = min(p_steam_sat * k_mair/max(100*Modelica.Constants.eps, p - p_steam_sat)*(1 - Xi[Water]), 1.0) 
    "Water content at saturation with respect to actual water content";
  X_liquid = max(Xi[Water] - X_sat, 0.0);
  X_steam  = Xi[Water]-X_liquid;
  X_air    = 1-Xi[Water];
  
  h = specificEnthalpy_pTX(p,T,Xi);
  R = dryair.R*(1 - X_steam/(1 - X_liquid)) + steam.R*X_steam/(1 - X_liquid);
  //                
  u = h - R*T;
  d = p/(R*T);
  /* Note, u and d are computed under the assumption that the volume of the liquid
         water is neglible with respect to the volume of air and of steam
      */
  state.p = p;
  state.T = T;
  state.X = X;
  
  // this x_steam is water load / dry air!!!!!!!!!!!
  x_sat    = k_mair*p_steam_sat/max(100*Modelica.Constants.eps,p - p_steam_sat);
  x_water = Xi[Water]/max(X_air,100*Modelica.Constants.eps);
  phi = p/p_steam_sat*Xi[Water]/(Xi[Water] + k_mair*X_air);
end BaseProperties;

Buildings.Media.PerfectGases.MoistAir.Xsaturation

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate shermodynamic state

Outputs

TypeNameDescription
MassFractionX_satsteam mass fraction of sat. boundary [kg/kg]

Modelica definition

function Xsaturation = Modelica.Media.Air.MoistAir.Xsaturation;

Buildings.Media.PerfectGases.MoistAir.setState_pTX Buildings.Media.PerfectGases.MoistAir.setState_pTX

Inputs

TypeNameDefaultDescription
AbsolutePressurep Pressure [Pa]
TemperatureT Temperature [K]
MassFractionX[:] Mass fractions [kg/kg]

Outputs

TypeNameDescription
ThermodynamicStatestate 

Modelica definition

redeclare function setState_pTX 
    extends Modelica.Media.Air.MoistAir.setState_pTX;
end setState_pTX;

Buildings.Media.PerfectGases.MoistAir.setState_phX Buildings.Media.PerfectGases.MoistAir.setState_phX

Inputs

TypeNameDefaultDescription
AbsolutePressurep Pressure [Pa]
SpecificEnthalpyh Specific enthalpy [J/kg]
MassFractionX[:] Mass fractions [kg/kg]

Outputs

TypeNameDescription
ThermodynamicStatestate 

Modelica definition

redeclare function setState_phX 
   extends Modelica.Media.Air.MoistAir.setState_phX;
end setState_phX;

Buildings.Media.PerfectGases.MoistAir.setState_dTX Buildings.Media.PerfectGases.MoistAir.setState_dTX

Inputs

TypeNameDefaultDescription
Densityd density [kg/m3]
TemperatureT Temperature [K]
MassFractionX[:] Mass fractions [kg/kg]

Outputs

TypeNameDescription
ThermodynamicStatestate 

Modelica definition

redeclare function setState_dTX 
   extends Modelica.Media.Air.MoistAir.setState_dTX;
end setState_dTX;

Buildings.Media.PerfectGases.MoistAir.gasConstant Buildings.Media.PerfectGases.MoistAir.gasConstant

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate thermodynamic state

Outputs

TypeNameDescription
SpecificHeatCapacityRmixture gas constant [J/(kg.K)]

Modelica definition

redeclare function gasConstant 
   extends Modelica.Media.Air.MoistAir.gasConstant;
end gasConstant;

Buildings.Media.PerfectGases.MoistAir.saturationPressureLiquid Buildings.Media.PerfectGases.MoistAir.saturationPressureLiquid

Inputs

TypeNameDefaultDescription
TemperatureTsat saturation temperature [K]

Outputs

TypeNameDescription
AbsolutePressurepsatsaturation pressure [Pa]

Modelica definition

function saturationPressureLiquid = 
    Modelica.Media.Air.MoistAir.saturationPressureLiquid;

Buildings.Media.PerfectGases.MoistAir.sublimationPressureIce Buildings.Media.PerfectGases.MoistAir.sublimationPressureIce

Inputs

TypeNameDefaultDescription
TemperatureTsat sublimation temperature [K]

Outputs

TypeNameDescription
AbsolutePressurepsatsublimation pressure [Pa]

Modelica definition

function sublimationPressureIce = 
    Modelica.Media.Air.MoistAir.sublimationPressureIce;

Buildings.Media.PerfectGases.MoistAir.saturationPressure Buildings.Media.PerfectGases.MoistAir.saturationPressure

saturation curve valid for 223.16 <= T <= 373.16 (and slightly outside with less accuracy)

Inputs

TypeNameDefaultDescription
TemperatureTsat saturation temperature [K]

Outputs

TypeNameDescription
AbsolutePressurepsatsaturation pressure [Pa]

Modelica definition

redeclare function extends saturationPressure 
  "saturation curve valid for 223.16 <= T <= 373.16 (and slightly outside with less accuracy)" 
  
algorithm 
  psat := Utilities.spliceFunction(saturationPressureLiquid(Tsat),sublimationPressureIce(Tsat),Tsat-273.16,1.0);
end saturationPressure;

Buildings.Media.PerfectGases.MoistAir.pressure Buildings.Media.PerfectGases.MoistAir.pressure

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
AbsolutePressurepPressure [Pa]

Modelica definition

redeclare function pressure 
   extends Modelica.Media.Air.MoistAir.pressure;
end pressure;

Buildings.Media.PerfectGases.MoistAir.temperature Buildings.Media.PerfectGases.MoistAir.temperature

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
TemperatureTTemperature [K]

Modelica definition

redeclare function temperature 
   extends Modelica.Media.Air.MoistAir.temperature;
end temperature;

Buildings.Media.PerfectGases.MoistAir.density Buildings.Media.PerfectGases.MoistAir.density

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
DensitydDensity [kg/m3]

Modelica definition

redeclare function density 
   extends Modelica.Media.Air.MoistAir.density;
end density;

Buildings.Media.PerfectGases.MoistAir.specificEntropy Buildings.Media.PerfectGases.MoistAir.specificEntropy

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
SpecificEntropysSpecific entropy [J/(kg.K)]

Modelica definition

redeclare function specificEntropy 
   extends Modelica.Media.Air.MoistAir.specificEntropy;
end specificEntropy;

Buildings.Media.PerfectGases.MoistAir.enthalpyOfVaporization Buildings.Media.PerfectGases.MoistAir.enthalpyOfVaporization

enthalpy of vaporization of water

Inputs

TypeNameDefaultDescription
TemperatureT temperature [K]

Outputs

TypeNameDescription
SpecificEnthalpyr0vaporization enthalpy [J/kg]

Modelica definition

redeclare function extends enthalpyOfVaporization 
  "enthalpy of vaporization of water" 
algorithm 
 r0 := 2501014.5;
end enthalpyOfVaporization;

Buildings.Media.PerfectGases.MoistAir.HeatCapacityOfWater Buildings.Media.PerfectGases.MoistAir.HeatCapacityOfWater

specific heat capacity of water (liquid only)

Information

constant specific heat capacity of water

Inputs

TypeNameDefaultDescription
TemperatureT [K]

Outputs

TypeNameDescription
SpecificHeatCapacitycp_fl[J/(kg.K)]

Modelica definition

function HeatCapacityOfWater 
  "specific heat capacity of water (liquid only)" 
  extends Modelica.Icons.Function;
  input Temperature T;
  output SpecificHeatCapacity cp_fl;
algorithm 
  cp_fl := 4186;
end HeatCapacityOfWater;

Buildings.Media.PerfectGases.MoistAir.enthalpyOfLiquid Buildings.Media.PerfectGases.MoistAir.enthalpyOfLiquid

Inputs

TypeNameDefaultDescription
TemperatureT temperature [K]

Outputs

TypeNameDescription
SpecificEnthalpyhliquid enthalpy [J/kg]

Modelica definition

redeclare replaceable function extends enthalpyOfLiquid 
  annotation(derivative=der_enthalpyOfLiquid);  
  
algorithm 
  h := (T - 273.15)*4186;
end enthalpyOfLiquid;

Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfLiquid Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfLiquid

temperature derivative of enthalpy of liquid per unit mass of steam

Inputs

TypeNameDefaultDescription
TemperatureT temperature [K]
Temperatureder_T temperature derivative [K]

Outputs

TypeNameDescription
SpecificHeatCapacityder_hderivative of liquid enthalpy [J/(kg.K)]

Modelica definition

replaceable function der_enthalpyOfLiquid 
  "temperature derivative of enthalpy of liquid per unit mass of steam" 
  extends Modelica.Icons.Function;
  input Temperature T "temperature";
  input Temperature der_T "temperature derivative";
  output SpecificHeatCapacity der_h "derivative of liquid enthalpy";
algorithm 
  der_h := 4186;
end der_enthalpyOfLiquid;

Buildings.Media.PerfectGases.MoistAir.enthalpyOfCondensingGas Buildings.Media.PerfectGases.MoistAir.enthalpyOfCondensingGas

enthalpy of steam per unit mass of steam

Inputs

TypeNameDefaultDescription
TemperatureT temperature [K]

Outputs

TypeNameDescription
SpecificEnthalpyhsteam enthalpy [J/kg]

Modelica definition

redeclare function enthalpyOfCondensingGas 
  "enthalpy of steam per unit mass of steam" 
  annotation(derivative=der_enthalpyOfCondensingGas);  
  extends Modelica.Icons.Function;
  
  input Temperature T "temperature";
  output SpecificEnthalpy h "steam enthalpy";
algorithm 
  h := (T-273.15) * steam.cp + enthalpyOfVaporization(T);
end enthalpyOfCondensingGas;

Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfCondensingGas Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfCondensingGas

derivative of enthalpy of steam per unit mass of steam

Inputs

TypeNameDefaultDescription
TemperatureT temperature [K]
Temperatureder_T temperature derivative [K]

Outputs

TypeNameDescription
SpecificHeatCapacityder_hderivative of steam enthalpy [J/(kg.K)]

Modelica definition

replaceable function der_enthalpyOfCondensingGas 
  "derivative of enthalpy of steam per unit mass of steam" 
  extends Modelica.Icons.Function;
  input Temperature T "temperature";
  input Temperature der_T "temperature derivative";
  output SpecificHeatCapacity der_h "derivative of steam enthalpy";
algorithm 
  der_h := steam.cp;
end der_enthalpyOfCondensingGas;

Buildings.Media.PerfectGases.MoistAir.enthalpyOfGas Buildings.Media.PerfectGases.MoistAir.enthalpyOfGas

Inputs

TypeNameDefaultDescription
TemperatureT temperature [K]
MassFractionX[:] vector of mass fractions [kg/kg]

Outputs

TypeNameDescription
SpecificEnthalpyhliquid enthalpy [J/kg]

Modelica definition

redeclare replaceable function extends enthalpyOfGas 
algorithm 
  h := enthalpyOfCondensingGas(T)*X[Water]
       + enthalpyOfDryAir(T)*(1.0-X[Water]);
end enthalpyOfGas;

Buildings.Media.PerfectGases.MoistAir.enthalpyOfDryAir Buildings.Media.PerfectGases.MoistAir.enthalpyOfDryAir

Inputs

TypeNameDefaultDescription
TemperatureT temperature [K]

Outputs

TypeNameDescription
SpecificEnthalpyhdry air enthalpy [J/kg]

Modelica definition

replaceable function enthalpyOfDryAir 
  annotation(derivative=der_enthalpyOfDryAir);  
  extends Modelica.Icons.Function;
  input Temperature T "temperature";
  output SpecificEnthalpy h "dry air enthalpy";
algorithm 
  h := (T - 273.15)*dryair.cp;
end enthalpyOfDryAir;

Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfDryAir Buildings.Media.PerfectGases.MoistAir.der_enthalpyOfDryAir

Inputs

TypeNameDefaultDescription
TemperatureT temperature [K]
Temperatureder_T temperature derivative [K]

Outputs

TypeNameDescription
SpecificHeatCapacityder_hderivative of dry air enthalpy [J/(kg.K)]

Modelica definition

replaceable function der_enthalpyOfDryAir 
  extends Modelica.Icons.Function;
  input Temperature T "temperature";
  input Temperature der_T "temperature derivative";
  output SpecificHeatCapacity der_h "derivative of dry air enthalpy";
algorithm 
  der_h := dryair.cp;
end der_enthalpyOfDryAir;

Buildings.Media.PerfectGases.MoistAir.specificHeatCapacityCp Buildings.Media.PerfectGases.MoistAir.specificHeatCapacityCp

Return specific heat capacity at constant pressure

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
SpecificHeatCapacitycpSpecific heat capacity at constant pressure [J/(kg.K)]

Modelica definition

redeclare replaceable function extends specificHeatCapacityCp 
  "Return specific heat capacity at constant pressure" 
algorithm 
  cp := dryair.cp*(1-state.X[Water]) +steam.cp*state.X[Water];
end specificHeatCapacityCp;

Buildings.Media.PerfectGases.MoistAir.specificHeatCapacityCv Buildings.Media.PerfectGases.MoistAir.specificHeatCapacityCv

Return specific heat capacity at constant volume

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
SpecificHeatCapacitycvSpecific heat capacity at constant volume [J/(kg.K)]

Modelica definition

redeclare replaceable function extends specificHeatCapacityCv 
  "Return specific heat capacity at constant volume" 
algorithm 
  cv:= dryair.cv*(1-state.X[Water]) +steam.cv*state.X[Water];
end specificHeatCapacityCv;

Buildings.Media.PerfectGases.MoistAir.dynamicViscosity Buildings.Media.PerfectGases.MoistAir.dynamicViscosity

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
DynamicViscosityetaDynamic viscosity [Pa.s]

Modelica definition

redeclare function extends dynamicViscosity 
algorithm 
  eta := 1.85E-5;
end dynamicViscosity;

Buildings.Media.PerfectGases.MoistAir.thermalConductivity Buildings.Media.PerfectGases.MoistAir.thermalConductivity

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
ThermalConductivitylambdaThermal conductivity [W/(m.K)]

Modelica definition

redeclare function extends thermalConductivity 
algorithm 
  lambda := Polynomials_Temp.evaluate({(-4.8737307422969E-008), 7.67803133753502E-005, 0.0241814385504202},
   Cv.to_degC(state.T));
end thermalConductivity;

Buildings.Media.PerfectGases.MoistAir.h_pTX Buildings.Media.PerfectGases.MoistAir.h_pTX

Compute specific enthalpy from pressure, temperature and mass fraction

Inputs

TypeNameDefaultDescription
Pressurep Pressure [Pa]
TemperatureT Temperature [K]
MassFractionX[nX] Mass fractions of moist air [1]

Outputs

TypeNameDescription
SpecificEnthalpyhSpecific enthalpy at p, T, X [J/kg]

Modelica definition

function h_pTX 
  "Compute specific enthalpy from pressure, temperature and mass fraction" 
  extends Modelica.Icons.Function;
  input SI.Pressure p "Pressure";
  input SI.Temperature T "Temperature";
  input SI.MassFraction X[nX] "Mass fractions of moist air";
  output SI.SpecificEnthalpy h "Specific enthalpy at p, T, X";
  
protected 
  SI.AbsolutePressure p_steam_sat "Partial saturation pressure of steam";
  SI.MassFraction x_sat "steam water mass fraction of saturation boundary";
  SI.MassFraction X_liquid "mass fraction of liquid water";
  SI.MassFraction X_steam "mass fraction of steam water";
  SI.MassFraction X_air "mass fraction of air";
  SI.SpecificEnthalpy hDryAir "Enthalpy of dry air";
algorithm 
  p_steam_sat :=saturationPressure(T);
  x_sat    :=k_mair*p_steam_sat/(p - p_steam_sat);
  X_liquid :=max(X[Water] - x_sat/(1 + x_sat), 0.0);
  X_steam  :=X[Water] - X_liquid;
  X_air    :=1 - X[Water];
  
/* THIS DOES NOT WORK --------------------------    
  h := enthalpyOfDryAir(T) * X_air + 
       Modelica.Media.Air.MoistAir.enthalpyOfCondensingGas(T) * X_steam + enthalpyOfLiquid(T)*X_liquid;
--------------------------------- */
  
/* THIS WORKS!!!! +++++++++++++++++++++
  h := (T - 273.15)*dryair.cp * X_air + 
       Modelica.Media.Air.MoistAir.enthalpyOfCondensingGas(T) * X_steam + enthalpyOfLiquid(T)*X_liquid;
 +++++++++++++++++++++*/
  
  hDryAir := (T - 273.15)*dryair.cp;
  h := hDryAir * X_air +
       ((T-273.15) * steam.cp + 2501014.5) * X_steam +
       (T - 273.15)*4186*X_liquid;
end h_pTX;

Buildings.Media.PerfectGases.MoistAir.specificEnthalpy Buildings.Media.PerfectGases.MoistAir.specificEnthalpy

specific enthalpy

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
SpecificEnthalpyhSpecific enthalpy [J/kg]

Modelica definition

redeclare function extends specificEnthalpy "specific enthalpy" 
algorithm 
  h := h_pTX(state.p, state.T, state.X);
end specificEnthalpy;

Buildings.Media.PerfectGases.MoistAir.specificInternalEnergy Buildings.Media.PerfectGases.MoistAir.specificInternalEnergy

Return specific internal energy

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
SpecificEnergyuSpecific internal energy [J/kg]

Modelica definition

redeclare function extends specificInternalEnergy 
  "Return specific internal energy" 
  extends Modelica.Icons.Function;
algorithm 
  u := h_pTX(state.p,state.T,state.X) - gasConstant(state)*state.T;
end specificInternalEnergy;

Buildings.Media.PerfectGases.MoistAir.specificGibbsEnergy Buildings.Media.PerfectGases.MoistAir.specificGibbsEnergy

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
SpecificEnergygSpecific Gibbs energy [J/kg]

Modelica definition

redeclare function extends specificGibbsEnergy 
  extends Modelica.Icons.Function;
algorithm 
  g := h_pTX(state.p,state.T,state.X) - state.T*specificEntropy(state);
end specificGibbsEnergy;

Buildings.Media.PerfectGases.MoistAir.specificHelmholtzEnergy Buildings.Media.PerfectGases.MoistAir.specificHelmholtzEnergy

Inputs

TypeNameDefaultDescription
ThermodynamicStatestate  

Outputs

TypeNameDescription
SpecificEnergyfSpecific Helmholtz energy [J/kg]

Modelica definition

redeclare function extends specificHelmholtzEnergy 
  extends Modelica.Icons.Function;
algorithm 
  f := h_pTX(state.p,state.T,state.X) - gasConstant(state)*state.T - state.T*specificEntropy(state);
end specificHelmholtzEnergy;

Buildings.Media.PerfectGases.MoistAir.T_phX

Compute temperature from specific enthalpy and mass fraction

Inputs

TypeNameDefaultDescription
AbsolutePressurep Pressure [Pa]
SpecificEnthalpyh specific enthalpy [J/kg]
MassFractionX[:] mass fractions of composition [kg/kg]

Outputs

TypeNameDescription
TemperatureTtemperature [K]

Modelica definition

function T_phX 
  "Compute temperature from specific enthalpy and mass fraction" 
  input AbsolutePressure p "Pressure";
  input SpecificEnthalpy h "specific enthalpy";
  input MassFraction[:] X "mass fractions of composition";
  output Temperature T "temperature";
protected 
package Internal 
    "Solve h(data,T) for T with given h (use only indirectly via temperature_phX)" 
  extends Modelica.Media.Common.OneNonLinearEquation;
  redeclare record extends f_nonlinear_Data 
      "Data to be passed to non-linear function" 
    extends Buildings.Media.PerfectGases.Common.DataRecord;
  end f_nonlinear_Data;
    
  redeclare function extends f_nonlinear 
  algorithm 
      y := h_pTX(p,x,X);
  end f_nonlinear;
    
  // Dummy definition has to be added for current Dymola
  redeclare function extends solve 
  end solve;
end Internal;
  
algorithm 
 /* The function call below has been changed from 
      Internal.solve(h, 200, 6000, p, X[1:nXi], steam);
    to  
      Internal.solve(h, 200, 6000, p, X, steam);
    The reason is that when running the problem
       Buildings.Media.PerfectGases.Examples.MoistAirComparison
    then an assertion is triggered because the vector X had the wrong
    dimension. The above example verifies that T(h(T)) = 0.
 */
  T := Internal.solve(h, 200, 6000, p, X, steam);
end T_phX;

HTML-documentation generated by Dymola Fri Jun 20 09:58:41 2008.