packageAir

Package with moist air model that decouples pressure and temperature

Extends from Modelica.Media.Interfaces.PartialCondensingGases (Base class for mixtures of condensing and non-condensing gases), Modelica.Icons.Package (Icon for standard packages).

Information

This medium package models moist air using a gas law in which pressure and temperature are independent, which often leads to significantly faster and more robust computations. The specific heat capacities at constant pressure and at constant volume are constant. The air is assumed to be not saturated.

This medium uses the gas law

ρ/ρstp = p/pstp,

where pstd and ρstp are constant reference temperature and density, rathern than the ideal gas law

ρ = p ⁄(R T),

where R is the gas constant and T is the temperature.

This formulation often leads to smaller systems of nonlinear equations because equations for pressure and temperature are decoupled. Therefore, if air inside a control volume such as room air is heated, it does not increase its specific volume. Consequently, merely heating or cooling a control volume does not affect the air flow calculations in a duct network that may be connected to that volume. Note that multizone air exchange simulation in which buoyancy drives the air flow is still possible as the models in Buildings.Airflow.Multizone compute the mass density using the function Buildings.Utilities.Psychrometrics.Functions.density_pTX in which density is a function of temperature.

Note that models in this package implement the equation for the internal energy as

u = h - pstp ⁄ ρstp,

where u is the internal energy per unit mass, h is the enthalpy per unit mass, pstp is the static pressure and ρstp is the mass density at standard pressure and temperature. The reason for this implementation is that in general,

h = u + p v,

from which follows that

u = h - p v = h - p ⁄ ρ = h - pstp ⁄ ρstd,

because p ⁄ ρ = pstp ⁄ ρstp in this medium model.

The enthalpy is computed using the convention that h=0 if T=0 °C and no water vapor is present.

Parameters

TypeNameDefaultDescription
Modelica.Media.Interfaces.Choices.IndependentVariablesThermoStates (from PartialMedium)Enumeration type for independent variables
StringmediumName (from PartialMedium)"unusablePartialMedium"Name of the medium
String[:]substanceNames (from PartialMedium){mediumName}Names of the mixture substances. Set substanceNames={mediumName} if only one substance.
String[:]extraPropertiesNames (from PartialMedium)fill("", 0)Names of the additional (extra) transported properties. Set extraPropertiesNames=fill("",0) if unused
BooleansingleState (from PartialMedium)= true, if u and d are not a function of pressure
BooleanreducedX (from PartialMedium)true= true, if medium contains the equation sum(X) = 1.0; set reducedX=true, if only one substance (see docu for details)
BooleanfixedX (from PartialMedium)false= true, if medium contains the equation X = reference_X
AbsolutePressurereference_p (from PartialMedium)101325Reference pressure of Medium: default 1 atmosphere
Temperaturereference_T (from PartialMedium)298.15Reference temperature of Medium: default 25 deg Celsius
MassFraction[nX]reference_X (from PartialMedium)fill(1/nX, nX)Default mass fractions of medium
AbsolutePressurep_default (from PartialMedium)101325Default value for pressure of medium (for initialization)
TemperatureT_default (from PartialMedium)Modelica.Units.Conversions.from_degC(20)Default value for temperature of medium (for initialization)
SpecificEnthalpyh_default (from PartialMedium)specificEnthalpy_pTX(p_default, T_default, X_default)Default value for specific enthalpy of medium (for initialization)
MassFraction[nX]X_default (from PartialMedium)reference_XDefault value for mass fractions of medium (for initialization)
ExtraProperty[nC]C_default (from PartialMedium)fill(0, nC)Default value for trace substances of medium (for initialization)
IntegernS (from PartialMedium)size(substanceNames, 1)Number of substances
IntegernX (from PartialMedium)nSNumber of mass fractions
IntegernXi (from PartialMedium)if fixedX then 0 else if reducedX then nS - 1 else nSNumber of structurally independent mass fractions (see docu for details)
IntegernC (from PartialMedium)size(extraPropertiesNames, 1)Number of extra (outside of standard mass-balance) transported properties
Real[nC]C_nominal (from PartialMedium)1.0e-6*ones(nC)Default for the nominal values for the extra properties
FluidConstantsfluidConstants (from PartialMixtureMedium)Constant data for the fluid
IntegerWater1Index of water (in substanceNames, massFractions X, etc.)
IntegerAir2Index of air (in substanceNames, massFractions X, etc.)
GasPropertiesdryairDry air properties
GasPropertiessteamSteam properties
Realk_mairsteam.MM/dryair.MMRatio of molar weights
Modelica.Units.SI.MolarMassMMX{steam.MM, dryair.MM}Molar masses of components
AbsolutePressurepStpreference_pPressure for which fluid density is defined
DensitydStp1.2Fluid density at pressure pStp

Contents

NameDescription
ThermodynamicStateThermodynamicState record for moist air
BasePropertiesBase properties (p, d, T, h, u, R, MM and X and Xi) of a medium
densityGas density
dynamicViscosityReturn the dynamic viscosity of dry air
enthalpyOfCondensingGasEnthalpy of steam per unit mass of steam
enthalpyOfGasEnthalpy of gas mixture per unit mass of gas mixture
enthalpyOfLiquidEnthalpy of liquid (per unit mass of liquid) which is linear in the temperature
enthalpyOfNonCondensingGasEnthalpy of non-condensing gas per unit mass of steam
enthalpyOfVaporizationEnthalpy of vaporization of water
gasConstantReturn ideal gas constant as a function from thermodynamic state, only valid for phi<1
pressureReturns pressure of ideal gas as a function of the thermodynamic state record
isobaricExpansionCoefficientIsobaric expansion coefficient beta
isothermalCompressibilityIsothermal compressibility factor
saturationPressureSaturation curve valid for 223.16 <= T <= 373.16 (and slightly outside with less accuracy)
specificEntropyReturn the specific entropy, only valid for phi<1
density_derp_TReturn the partial derivative of density with respect to pressure at constant temperature
density_derT_pReturn the partial derivative of density with respect to temperature at constant pressure
density_derXReturn the partial derivative of density with respect to mass fractions at constant pressure and temperature
specificHeatCapacityCpSpecific heat capacity of gas mixture at constant pressure
specificHeatCapacityCvSpecific heat capacity of gas mixture at constant volume
setState_dTXReturn thermodynamic state as function of density d, temperature T and composition X
setState_phXReturn thermodynamic state as function of pressure p, specific enthalpy h and composition X
setState_pTXReturn thermodynamic state as function of p, T and composition X or Xi
setState_psXReturn the thermodynamic state as function of p, s and composition X or Xi
specificEnthalpyCompute specific enthalpy from pressure, temperature and mass fraction
specificEnthalpy_pTXSpecific enthalpy
specificGibbsEnergySpecific Gibbs energy
specificHelmholtzEnergySpecific Helmholtz energy
isentropicEnthalpyReturn the isentropic enthalpy
specificInternalEnergySpecific internal energy
temperatureReturn temperature of ideal gas as a function of the thermodynamic state record
molarMassReturn the molar mass
temperature_phXCompute temperature from specific enthalpy and mass fraction
thermalConductivityThermal conductivity of dry air as a polynomial in the temperature
GasPropertiesprotectedCoefficient data record for properties of perfect gases
der_enthalpyOfLiquidprotectedTemperature derivative of enthalpy of liquid per unit mass of liquid
der_enthalpyOfCondensingGasprotectedDerivative of enthalpy of steam per unit mass of steam
enthalpyOfDryAirprotectedEnthalpy of dry air per unit mass of dry air
der_enthalpyOfDryAirprotectedDerivative of enthalpy of dry air per unit mass of dry air
der_enthalpyOfNonCondensingGasprotectedDerivative of enthalpy of non-condensing gas per unit mass of steam
der_specificHeatCapacityCpprotectedDerivative of specific heat capacity of gas mixture at constant pressure
der_specificHeatCapacityCvprotectedDerivative of specific heat capacity of gas mixture at constant volume

Revisions

  • June 18, 2024, by Michael Wetter:
    Added start and nominal attributes to avoid warnings in OpenModelica due to conflicting values.
    This is for IBPSA, #1890.
  • September 9, 2022, by Michael Wetter:
    Set nominal attribute for BaseProperties.Xi.
    This is for #1634.
  • September 28, 2020, by Michael Wetter:
    Reformulated BaseProperties to avoid event-triggering assertions.
    This is for #1401.
  • January 11, 2019 by Michael Wetter:
    Reforulated assignment of X_int in setState_psX.
    This is for #1079.
  • October 26, 2018, by Filip Jorissen and Michael Wetter:
    Now printing different messages if temperature is above or below its limit, and adding instance name as JModelica does not print the full instance name in the assertion. This is for #1045.
  • November 4, 2016, by Michael Wetter:
    Set default value for dT.start in base properties.
    This is for #575.
  • June 6, 2015, by Michael Wetter:
    Set AbsolutePressure(start=p_default) to avoid a translation error if Buildings.Fluid.Sources.Examples.TraceSubstancesFlowSource is translated in pedantic mode in Dymola 2016. The reason is that pressures use Medium.p_default as start values, but Modelica.Media.Interfaces.Types sets a default value of 1E-5. A similar change has been done for pressure. This fixes #266.
  • June 5, 2015, by Michael Wetter:
    Added stateSelect attribute in BaseProperties.T to allow correct use of preferredMediumState as described in Modelica.Media.Interfaces.PartialMedium. Note that the default is preferredMediumState=false and hence the same states are used as were used before. This is for #260.
  • May 11, 2015, by Michael Wetter:
    Removed p(stateSelect=if preferredMediumStates then StateSelect.prefer else StateSelect.default) in declaration of BaseProperties. Otherwise, when models that contain a fluid volume are exported as an FMU, their pressure would be differentiated with respect to time. This would require the time derivative of the inlet pressure, which is not available, causing the translation to stop with an error.
  • May 1, 2015, by Michael Wetter:
    Added Inline=true for issue 227.
  • March 20, 2015, by Michael Wetter:
    Added missing term state.p/reference_p in function specificEntropy. #193.
  • February 3, 2015, by Michael Wetter:
    Removed stateSelect.prefer for temperature. This is for #160.
  • July 24, 2014, by Michael Wetter:
    Changed implementation to use Buildings.Utilities.Psychrometrics.Constants. This was done to use consistent values throughout the library.
  • November 16, 2013, by Michael Wetter:
    Revised and simplified the implementation.
  • November 14, 2013, by Michael Wetter:
    Removed function HeatCapacityOfWater which is neither needed nor implemented in the Modelica Standard Library.
  • November 13, 2013, by Michael Wetter:
    Removed non-used computations in specificEnthalpy_pTX and in temperature_phX.
  • March 29, 2013, by Michael Wetter:
    Added final standardOrderComponents=true in the BaseProperties declaration. This avoids an error when models are checked in Dymola 2014 in the pedenatic mode.
  • April 12, 2012, by Michael Wetter:
    Added keyword each to Xi(stateSelect=...).
  • April 4, 2012, by Michael Wetter:
    Added redeclaration of ThermodynamicState to avoid a warning during model check and translation.
  • August 3, 2011, by Michael Wetter:
    Fixed bug in u=h-R*T, which is only valid for ideal gases. For this medium, the function is u=h-pStd/dStp.
  • January 27, 2010, by Michael Wetter:
    Fixed bug in else branch of function setState_phX that lead to a run-time error when the constructor of this function was called.
  • January 22, 2010, by Michael Wetter:
    Added implementation of function enthalpyOfNonCondensingGas and its derivative.
  • January 13, 2010, by Michael Wetter:
    Fixed implementation of derivative functions.
  • August 28, 2008, by Michael Wetter:
    First implementation.