Description: "Model for air as a perfect gas"

- Home > Modelica

## Buildings.Media.Specialized.Air.PerfectGas

Model for air as a perfect gas

### Information

This package contains a thermally perfect model of moist air.

A medium is called thermally perfect if

- it is in thermodynamic equilibrium,
- it is chemically not reacting, and
- internal energy and enthalpy are functions of temperature only.

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

This medium uses the ideal gas law

ρ = p ⁄(R T),

where ρ is the density, p is the pressure, R is the gas constant and T is the temperature.

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

Note that for typical building simulations, the media Buildings.Media.Air should be used as it leads generally to faster simulation.

#### References

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

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

### Package Content

Name | Description
--- | ---
Water=1 | Index of water (in substanceNames, massFractions X, etc.)
Air=2 | Index of air (in substanceNames, massFractions X, etc.)
ThermodynamicState | ThermodynamicState record for moist air
BaseProperties |
Xsaturation | Steam water mass fraction of saturation boundary in kg_water/kg_moistair
setState_pTX | Thermodynamic state as function of p, T and composition X
setState_phX | Thermodynamic state as function of p, h and composition X
setState_dTX | Thermodynamic state as function of d, T and composition X
gasConstant | Gas constant
saturationPressureLiquid | Return saturation pressure of water as a function of temperature T in the range of 273.16 to 373.16 K
saturationPressureLiquid_der | Time derivative of saturationPressureLiquid
sublimationPressureIce | Saturation curve valid for 223.16 <= T <= 273.16. Outside of these limits a (less accurate) result is returned
sublimationPressureIce_der | Derivative function for 'sublimationPressureIce'
saturationPressure | Saturation curve valid for 223.16 <= T <= 373.16 (and slightly outside with less accuracy)
pressure | Gas pressure
temperature | Gas temperature
density | Gas density
specificEntropy | Specific entropy (liquid part neglected, mixing entropy included)
enthalpyOfVaporization | Enthalpy of vaporization of water
HeatCapacityOfWater | Specific heat capacity of water (liquid only) which is constant
enthalpyOfLiquid | Enthalpy of liquid (per unit mass of liquid) which is linear in the temperature
der_enthalpyOfLiquid | Temperature derivative of enthalpy of liquid per unit mass of liquid
enthalpyOfCondensingGas | Enthalpy of steam per unit mass of steam
der_enthalpyOfCondensingGas | Derivative of enthalpy of steam per unit mass of steam
enthalpyOfNonCondensingGas | Enthalpy of non-condensing gas per unit mass of steam
der_enthalpyOfNonCondensingGas | Derivative of enthalpy of non-condensing gas per unit mass of steam
enthalpyOfGas | Enthalpy of gas mixture per unit mass of gas mixture
enthalpyOfDryAir | Enthalpy of dry air per unit mass of dry air
der_enthalpyOfDryAir | Derivative of enthalpy of dry air per unit mass of dry air
specificHeatCapacityCp | Specific heat capacity of gas mixture at constant pressure
der_specificHeatCapacityCp | Derivative of specific heat capacity of gas mixture at constant pressure
specificHeatCapacityCv | Specific heat capacity of gas mixture at constant volume
der_specificHeatCapacityCv | Derivative of specific heat capacity of gas mixture at constant volume
dynamicViscosity | dynamic viscosity of dry air
thermalConductivity | Thermal conductivity of dry air as a polynomial in the temperature
specificEnthalpy | Specific enthalpy
specificEnthalpy_pTX | Specific enthalpy
specificInternalEnergy | Specific internal energy
specificGibbsEnergy | Specific Gibbs energy
specificHelmholtzEnergy | Specific Helmholtz energy
temperature_phX | Compute temperature from specific enthalpy and mass fraction
GasProperties | Coefficient data record for properties of perfect gases
dryair | Dry air properties
steam | Steam properties
k_mair=steam.MM/dryair.MM | Ratio of molar weights
h_fg=Buildings.Utilities.Psychrometrics.Constants.h_fg | Latent heat of evaporation of water
cpWatLiq=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq | Specific heat capacity of liquid water
s_pTX | Return specific entropy of moist air as a function of pressure p, temperature T and composition X (only valid for phi<1)
s_pTX_der | Return specific entropy of moist air as a function of pressure p, temperature T and composition X (only valid for phi<1)
Inherited
fluidConstants | Constant data for the fluid
moleToMassFractions | Return mass fractions X from mole fractions
massToMoleFractions | Return mole fractions from mass fractions X
ThermoStates | Enumeration type for independent variables
mediumName="unusablePartialMedium" | Name of the medium
substanceNames={mediumName} | Names of the mixture substances. Set substanceNames={mediumName} if only one substance.
extraPropertiesNames=fill("", 0) | Names of the additional (extra) transported properties. Set extraPropertiesNames=fill("",0) if unused
singleState | = true, if u and d are not a function of pressure
reducedX=true | = true if medium contains the equation sum(X) = 1.0; set reducedX=true if only one substance (see docu for details)
fixedX=false | = true if medium contains the equation X = reference_X
reference_p=101325 | Reference pressure of Medium: default 1 atmosphere
reference_T=298.15 | Reference temperature of Medium: default 25 deg Celsius
reference_X=fill(1/nX, nX) | Default mass fractions of medium
p_default=101325 | Default value for pressure of medium (for initialization)
T_default=Modelica.SIunits.Conversions.from_degC(20) | Default value for temperature of medium (for initialization)
h_default=specificEnthalpy_pTX(p_default, T_default, X_default) | Default value for specific enthalpy of medium (for initialization)
X_default=reference_X | Default value for mass fractions of medium (for initialization)
nS=size(substanceNames, 1) | Number of substances
nX=nS | Number of mass fractions
nXi=if fixedX then 0 else if reducedX then nS - 1 else nS | Number of structurally independent mass fractions (see docu for details)
nC=size(extraPropertiesNames, 1) | Number of extra (outside of standard mass-balance) transported properties
C_nominal=1.0e-6*ones(nC) | Default for the nominal values for the extra properties
FluidConstants | Critical, triple, molecular and other standard data of fluid
setState_psX | Return thermodynamic state as function of p, s and composition X or Xi
setSmoothState | Return thermodynamic state so that it smoothly approximates: if x > 0 then state_a else state_b
prandtlNumber | Return the Prandtl number
heatCapacity_cp | Alias for deprecated name
heatCapacity_cv | Alias for deprecated name
isentropicExponent | Return isentropic exponent
isentropicEnthalpy | Return isentropic enthalpy
velocityOfSound | Return velocity of sound
isobaricExpansionCoefficient | Return overall the isobaric expansion coefficient beta
beta | Alias for isobaricExpansionCoefficient for user convenience
isothermalCompressibility | Return overall the isothermal compressibility factor
kappa | Alias of isothermalCompressibility for user convenience
density_derp_h | Return density derivative w.r.t. pressure at const specific enthalpy
density_derh_p | Return density derivative w.r.t. specific enthalpy at constant pressure
density_derp_T | Return density derivative w.r.t. pressure at const temperature
density_derT_p | Return density derivative w.r.t. temperature at constant pressure
density_derX | Return density derivative w.r.t. mass fraction
molarMass | Return the molar mass of the medium
specificEntropy_pTX | Return specific enthalpy from p, T, and X or Xi
density_pTX | Return density from p, T, and X or Xi
density_phX | Return density from p, h, and X or Xi
temperature_psX | Return temperature from p,s, and X or Xi
density_psX | Return density from p, s, and X or Xi
specificEnthalpy_psX | Return specific enthalpy from p, s, and X or Xi
MassFlowRate | Type for mass flow rate with medium specific attributes
AbsolutePressure | Type for absolute pressure with medium specific attributes
Density | Type for density with medium specific attributes
DynamicViscosity | Type for dynamic viscosity with medium specific attributes
EnthalpyFlowRate | Type for enthalpy flow rate with medium specific attributes
MassFraction | Type for mass fraction with medium specific attributes
MoleFraction | Type for mole fraction with medium specific attributes
MolarMass | Type for molar mass with medium specific attributes
MolarVolume | Type for molar volume with medium specific attributes
IsentropicExponent | Type for isentropic exponent with medium specific attributes
SpecificEnergy | Type for specific energy with medium specific attributes
SpecificInternalEnergy | Type for specific internal energy with medium specific attributes
SpecificEnthalpy | Type for specific enthalpy with medium specific attributes
SpecificEntropy | Type for specific entropy with medium specific attributes
SpecificHeatCapacity | Type for specific heat capacity with medium specific attributes
SurfaceTension | Type for surface tension with medium specific attributes
Temperature | Type for temperature with medium specific attributes
ThermalConductivity | Type for thermal conductivity with medium specific attributes
PrandtlNumber | Type for Prandtl number with medium specific attributes
VelocityOfSound | Type for velocity of sound with medium specific attributes
ExtraProperty | Type for unspecified, mass-specific property transported by flow
CumulativeExtraProperty | Type for conserved integral of unspecified, mass specific property
ExtraPropertyFlowRate | Type for flow rate of unspecified, mass-specific property
IsobaricExpansionCoefficient | Type for isobaric expansion coefficient with medium specific attributes
DipoleMoment | Type for dipole moment with medium specific attributes
DerDensityByPressure | Type for partial derivative of density with respect to pressure with medium specific attributes
DerDensityByEnthalpy | Type for partial derivative of density with respect to enthalpy with medium specific attributes
DerEnthalpyByPressure | Type for partial derivative of enthalpy with respect to pressure with medium specific attributes
DerDensityByTemperature | Type for partial derivative of density with respect to temperature with medium specific attributes
DerTemperatureByPressure | Type for partial derivative of temperature with respect to pressure with medium specific attributes
SaturationProperties | Saturation properties of two phase medium
FluidLimits | Validity limits for fluid model
FixedPhase | Phase of the fluid: 1 for 1-phase, 2 for two-phase, 0 for not known, e.g., interactive use
Basic | The most basic version of a record used in several degrees of detail
IdealGas | The ideal gas version of a record used in several degrees of detail
TwoPhase | The two phase fluid version of a record used in several degrees of detail

### 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 GasProperties dryair(
        R =    Modelica.Media.IdealGases.Common.SingleGasesData.Air.R,
        MM =   Modelica.Media.IdealGases.Common.SingleGasesData.Air.MM,
        cp =   Buildings.Utilities.Psychrometrics.Constants.cpAir,
        cv =   Buildings.Utilities.Psychrometrics.Constants.cpAir
                 -Modelica.Media.IdealGases.Common.SingleGasesData.Air.R)
      "Dry air properties";

      constant GasProperties steam(
        R =    Modelica.Media.IdealGases.Common.SingleGasesData.H2O.R,
        MM =   Modelica.Media.IdealGases.Common.SingleGasesData.H2O.MM,
        cp =   Buildings.Utilities.Psychrometrics.Constants.cpSte,
        cv =   Buildings.Utilities.Psychrometrics.Constants.cpSte
                 -Modelica.Media.IdealGases.Common.SingleGasesData.H2O.R)
      "Steam properties";

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

      constant Modelica.SIunits.SpecificEnergy h_fg=
        Buildings.Utilities.Psychrometrics.Constants.h_fg
      "Latent heat of evaporation of water";

      constant Modelica.SIunits.SpecificHeatCapacity cpWatLiq=
        Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
      "Specific heat capacity of liquid water";

## Buildings.Media.Specialized.Air.PerfectGas.ThermodynamicState

ThermodynamicState record for moist air

### Information

Extends from (Thermodynamic state variables).

### Modelica definition

redeclare record extends ThermodynamicState( p(start=p_default), T(start=T_default), X(start=X_default)) "ThermodynamicState record for moist air" end ThermodynamicState;

## Buildings.Media.Specialized.Air.PerfectGas.BaseProperties

### Information

Extends from (Base properties (p, d, T, h, u, R, MM and, if applicable, X and Xi) of a medium).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
Boolean | standardOrderComponents | true | If true, and reducedX = true, the last element of X will be computed from the other ones
Advanced
Boolean | preferredMediumStates | false | = true if StateSelect.prefer shall be used for the independent property variables of the medium

### Modelica definition

redeclare replaceable model extends BaseProperties( p(stateSelect=if preferredMediumStates then StateSelect.prefer else StateSelect.default), Xi(each stateSelect=if preferredMediumStates then StateSelect.prefer else StateSelect.default), final standardOrderComponents=true) /* 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. */ protected constant Modelica.SIunits.MolarMass[2] MMX = {steam.MM,dryair.MM} "Molar masses of components"; MassFraction X_steam "Mass fraction of steam water"; MassFraction X_air "Mass fraction of air"; 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]); X_steam = Xi[Water]; X_air = 1-Xi[Water]; h = (T - reference_T)*dryair.cp * (1 - Xi[Water]) + ((T-reference_T) * steam.cp + h_fg) * Xi[Water]; R = dryair.R*(1 - X_steam) + steam.R*X_steam; // 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; end BaseProperties;

## Buildings.Media.Specialized.Air.PerfectGas.Xsaturation

Steam water mass fraction of saturation boundary in kg_water/kg_moistair

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
MassFraction | X_sat | Steam mass fraction of sat. boundary [kg/kg]

### Modelica definition

function Xsaturation = Modelica.Media.Air.MoistAir.Xsaturation "Steam water mass fraction of saturation boundary in kg_water/kg_moistair";

## Buildings.Media.Specialized.Air.PerfectGas.setState_pTX

Thermodynamic state as function of p, T and composition X

### Information

Extends from Modelica.Media.Air.MoistAir.setState_pTX (Return thermodynamic state as function of pressure p, temperature T and composition X).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
AbsolutePressure | p |  | Pressure [Pa]
Temperature | T |  | Temperature [K]
MassFraction | X[:] | reference_X | Mass fractions [kg/kg]

### Outputs

Type | Name | Description
--- | --- | ---
ThermodynamicState | state | Thermodynamic state

### Modelica definition

redeclare function setState_pTX "Thermodynamic state as function of p, T and composition X" extends Modelica.Media.Air.MoistAir.setState_pTX; end setState_pTX;

## Buildings.Media.Specialized.Air.PerfectGas.setState_phX

Thermodynamic state as function of p, h and composition X

### Information

Function to set the state for given pressure, enthalpy and species concentration.

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
AbsolutePressure | p |  | Pressure [Pa]
SpecificEnthalpy | h |  | Specific enthalpy [J/kg]
MassFraction | X[:] |  | Mass fractions [kg/kg]

### Outputs

Type | Name | Description
--- | --- | ---
ThermodynamicState | state |

### Modelica definition

redeclare function setState_phX "Thermodynamic state as function of p, h and composition X" extends Modelica.Icons.Function; input AbsolutePressure p "Pressure"; input SpecificEnthalpy h "Specific enthalpy"; input MassFraction X[:] "Mass fractions"; output ThermodynamicState state; algorithm state := if size(X,1) == nX then ThermodynamicState(p=p,T=temperature_phX(p,h,X),X=X) else ThermodynamicState(p=p,T=temperature_phX(p,h,X), X=cat(1,X,{1-sum(X)})); end setState_phX;

## Buildings.Media.Specialized.Air.PerfectGas.setState_dTX

Thermodynamic state as function of d, T and composition X

### Information

The thermodynamic state record is computed from density d, temperature T and composition X.

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Density | d |  | Density [kg/m3]
Temperature | T |  | Temperature [K]
MassFraction | X[:] | reference_X | Mass fractions [kg/kg]

### Outputs

Type | Name | Description
--- | --- | ---
ThermodynamicState | state | Thermodynamic state

### Modelica definition

redeclare function setState_dTX "Thermodynamic state as function of d, T and composition X" extends Modelica.Icons.Function; input Density d "Density"; input Temperature T "Temperature"; input MassFraction X[:]=reference_X "Mass fractions"; output ThermodynamicState state "Thermodynamic state"; algorithm state := if size(X, 1) == nX then ThermodynamicState( p=d*({steam.R,dryair.R}*X)*T, T=T, X=X) else ThermodynamicState( p=d*({steam.R,dryair.R}*cat( 1, X, {1 - sum(X)}))*T, T=T, X=cat( 1, X, {1 - sum(X)})); end setState_dTX;

## Buildings.Media.Specialized.Air.PerfectGas.gasConstant

Gas constant

### Information

Extends from (Return the gas constant of the mixture (also for liquids)).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state

### Outputs

Type | Name | Description
--- | --- | ---
SpecificHeatCapacity | R | Mixture gas constant [J/(kg.K)]

### Modelica definition

redeclare function extends gasConstant "Gas constant" algorithm R := dryair.R*(1 - state.X[Water]) + steam.R*state.X[Water]; end gasConstant;

## Buildings.Media.Specialized.Air.PerfectGas.saturationPressureLiquid

Return saturation pressure of water as a function of temperature T in the range of 273.16 to 373.16 K

### Information

Saturation pressure of water above the triple point temperature is computed from temperature. It's range of validity is between 273.16 and 373.16 K. Outside these limits a less accurate result is returned.

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | Tsat |  | saturation temperature [K]

### Outputs

Type | Name | Description
--- | --- | ---
AbsolutePressure | psat | saturation pressure [Pa]

### Modelica definition

function saturationPressureLiquid "Return saturation pressure of water as a function of temperature T in the range of 273.16 to 373.16 K" annotation(derivative=Buildings.Media.Specialized.Air.PerfectGas.saturationPressureLiquid_der); extends Modelica.Icons.Function; input Modelica.SIunits.Temperature Tsat "saturation temperature"; output Modelica.SIunits.AbsolutePressure psat "saturation pressure"; // This function is declared here explicitly, instead of referencing the function in its // base class, since otherwise Dymola 7.3 does not find the derivative for the model // Buildings.Fluid.Sensors.Examples.MassFraction algorithm psat := 611.657*Modelica.Math.exp(17.2799 - 4102.99/(Tsat - 35.719)); end saturationPressureLiquid;

## Buildings.Media.Specialized.Air.PerfectGas.saturationPressureLiquid_der

Time derivative of saturationPressureLiquid

### Information

Derivative function of Buildings.Media.Specialized.Air.PerfectGases.saturationPressureLiquid

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | Tsat |  | Saturation temperature [K]
Real | dTsat |  | Saturation temperature derivative [K/s]

### Outputs

Type | Name | Description
--- | --- | ---
Real | psat_der | Saturation pressure [Pa/s]

### Modelica definition

function saturationPressureLiquid_der "Time derivative of saturationPressureLiquid" extends Modelica.Icons.Function; input Modelica.SIunits.Temperature Tsat "Saturation temperature"; input Real dTsat(unit="K/s") "Saturation temperature derivative"; output Real psat_der(unit="Pa/s") "Saturation pressure"; algorithm psat_der:=611.657*Modelica.Math.exp(17.2799 - 4102.99/(Tsat - 35.719))*4102.99*dTsat/(Tsat - 35.719)/(Tsat - 35.719); end saturationPressureLiquid_der;

## Buildings.Media.Specialized.Air.PerfectGas.sublimationPressureIce

Saturation curve valid for 223.16 <= T <= 273.16. Outside of these limits a (less accurate) result is returned

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | Tsat |  | Sublimation temperature [K]

### Outputs

Type | Name | Description
--- | --- | ---
AbsolutePressure | psat | Sublimation pressure [Pa]

### Modelica definition

function sublimationPressureIce = Modelica.Media.Air.MoistAir.sublimationPressureIce "Saturation curve valid for 223.16 <= T <= 273.16. Outside of these limits a (less accurate) result is returned";

## Buildings.Media.Specialized.Air.PerfectGas.sublimationPressureIce_der

Derivative function for 'sublimationPressureIce'

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | Tsat |  | Sublimation temperature [K]
Real | dTsat |  | Sublimation temperature derivative [K/s]

### Outputs

Type | Name | Description
--- | --- | ---
Real | psat_der | Sublimation pressure derivative [Pa/s]

### Modelica definition

function sublimationPressureIce_der = Modelica.Media.Air.MoistAir.sublimationPressureIce_der "Derivative function for 'sublimationPressureIce'";

## Buildings.Media.Specialized.Air.PerfectGas.saturationPressure

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

### Information

Extends from (Return saturation pressure of condensing fluid).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | Tsat |  | Saturation temperature [K]

### Outputs

Type | Name | Description
--- | --- | ---
AbsolutePressure | psat | Saturation 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 := Buildings.Utilities.Math.Functions.spliceFunction( saturationPressureLiquid(Tsat),sublimationPressureIce(Tsat),Tsat-273.16,1.0); end saturationPressure;

## Buildings.Media.Specialized.Air.PerfectGas.pressure

Gas pressure

### Information

Pressure is returned from the thermodynamic state record input as a simple assignment.

Extends from (Return pressure).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
AbsolutePressure | p | Pressure [Pa]

### Modelica definition

redeclare function extends pressure "Gas pressure" algorithm p := state.p; end pressure;

## Buildings.Media.Specialized.Air.PerfectGas.temperature

Gas temperature

### Information

Temperature is returned from the thermodynamic state record input as a simple assignment.

Extends from (Return temperature).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
Temperature | T | Temperature [K]

### Modelica definition

redeclare function extends temperature "Gas temperature" algorithm T := state.T; end temperature;

## Buildings.Media.Specialized.Air.PerfectGas.density

Gas density

### Information

Density is computed from pressure, temperature and composition in the thermodynamic state record applying the ideal gas law.

Extends from (Return density).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
Density | d | Density [kg/m3]

### Modelica definition

redeclare function extends density "Gas density" algorithm d := state.p/(gasConstant(state)*state.T); end density;

## Buildings.Media.Specialized.Air.PerfectGas.specificEntropy

Specific entropy (liquid part neglected, mixing entropy included)

### Information

Specific entropy is calculated from the thermodynamic state record, assuming ideal gas behavior and including entropy of mixing. Liquid or solid water is not taken into account, the entire water content X[1] is assumed to be in the vapor state (relative humidity below 1.0).

Extends from (Return specific entropy).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEntropy | s | Specific entropy [J/(kg.K)]

### Modelica definition

redeclare function extends specificEntropy "Specific entropy (liquid part neglected, mixing entropy included)" algorithm s := s_pTX( state.p, state.T, state.X); end specificEntropy;

## Buildings.Media.Specialized.Air.PerfectGas.enthalpyOfVaporization

Enthalpy of vaporization of water

### Information

Extends from (Return vaporization enthalpy of condensing fluid).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | Temperature [K]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnthalpy | r0 | Vaporization enthalpy [J/kg]

### Modelica definition

redeclare function extends enthalpyOfVaporization "Enthalpy of vaporization of water" algorithm r0 := h_fg; end enthalpyOfVaporization;

## Buildings.Media.Specialized.Air.PerfectGas.HeatCapacityOfWater

Specific heat capacity of water (liquid only) which is constant

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | [K]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificHeatCapacity | cp_fl | [J/(kg.K)]

### Modelica definition

function HeatCapacityOfWater "Specific heat capacity of water (liquid only) which is constant" extends Modelica.Icons.Function; input Temperature T; output SpecificHeatCapacity cp_fl; algorithm cp_fl := cpWatLiq; end HeatCapacityOfWater;

## Buildings.Media.Specialized.Air.PerfectGas.enthalpyOfLiquid

Enthalpy of liquid (per unit mass of liquid) which is linear in the temperature

### Information

Extends from (Return liquid enthalpy of condensing fluid).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | Temperature [K]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnthalpy | h | Liquid enthalpy [J/kg]

### Modelica definition

redeclare replaceable function extends enthalpyOfLiquid "Enthalpy of liquid (per unit mass of liquid) which is linear in the temperature" annotation(derivative=der_enthalpyOfLiquid); algorithm h := (T - reference_T)*cpWatLiq; end enthalpyOfLiquid;

## Buildings.Media.Specialized.Air.PerfectGas.der_enthalpyOfLiquid

Temperature derivative of enthalpy of liquid per unit mass of liquid

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | temperature [K]
Real | der_T |  | temperature derivative

### Outputs

Type | Name | Description
--- | --- | ---
Real | der_h | derivative of liquid enthalpy

### Modelica definition

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

## Buildings.Media.Specialized.Air.PerfectGas.enthalpyOfCondensingGas

Enthalpy of steam per unit mass of steam

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | temperature [K]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnthalpy | h | steam 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-reference_T) * steam.cp + enthalpyOfVaporization(T); end enthalpyOfCondensingGas;

## Buildings.Media.Specialized.Air.PerfectGas.der_enthalpyOfCondensingGas

Derivative of enthalpy of steam per unit mass of steam

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | temperature [K]
Real | der_T |  | temperature derivative

### Outputs

Type | Name | Description
--- | --- | ---
Real | der_h | derivative of steam enthalpy

### 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 Real der_T "temperature derivative"; output Real der_h "derivative of steam enthalpy"; algorithm der_h := steam.cp*der_T; end der_enthalpyOfCondensingGas;

## Buildings.Media.Specialized.Air.PerfectGas.enthalpyOfNonCondensingGas

Enthalpy of non-condensing gas per unit mass of steam

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | temperature [K]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnthalpy | h | enthalpy [J/kg]

### Modelica definition

redeclare function enthalpyOfNonCondensingGas "Enthalpy of non-condensing gas per unit mass of steam" annotation(derivative=der_enthalpyOfNonCondensingGas); extends Modelica.Icons.Function; input Temperature T "temperature"; output SpecificEnthalpy h "enthalpy"; algorithm h := enthalpyOfDryAir(T); end enthalpyOfNonCondensingGas;

## Buildings.Media.Specialized.Air.PerfectGas.der_enthalpyOfNonCondensingGas

Derivative of enthalpy of non-condensing gas per unit mass of steam

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | temperature [K]
Real | der_T |  | temperature derivative

### Outputs

Type | Name | Description
--- | --- | ---
Real | der_h | derivative of steam enthalpy

### Modelica definition

replaceable function der_enthalpyOfNonCondensingGas "Derivative of enthalpy of non-condensing gas per unit mass of steam" extends Modelica.Icons.Function; input Temperature T "temperature"; input Real der_T "temperature derivative"; output Real der_h "derivative of steam enthalpy"; algorithm der_h := der_enthalpyOfDryAir(T, der_T); end der_enthalpyOfNonCondensingGas;

## Buildings.Media.Specialized.Air.PerfectGas.enthalpyOfGas

Enthalpy of gas mixture per unit mass of gas mixture

### Information

Extends from (Return enthalpy of non-condensing gas mixture).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | Temperature [K]
MassFraction | X[:] |  | Vector of mass fractions [kg/kg]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnthalpy | h | Specific enthalpy [J/kg]

### Modelica definition

redeclare replaceable function extends enthalpyOfGas "Enthalpy of gas mixture per unit mass of gas mixture" algorithm h := enthalpyOfCondensingGas(T)*X[Water] + enthalpyOfDryAir(T)*(1.0-X[Water]); end enthalpyOfGas;

## Buildings.Media.Specialized.Air.PerfectGas.enthalpyOfDryAir

Enthalpy of dry air per unit mass of dry air

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | temperature [K]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnthalpy | h | dry air enthalpy [J/kg]

### Modelica definition

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

## Buildings.Media.Specialized.Air.PerfectGas.der_enthalpyOfDryAir

Derivative of enthalpy of dry air per unit mass of dry air

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | T |  | temperature [K]
Real | der_T |  | temperature derivative

### Outputs

Type | Name | Description
--- | --- | ---
Real | der_h | derivative of dry air enthalpy

### Modelica definition

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

## Buildings.Media.Specialized.Air.PerfectGas.specificHeatCapacityCp

Specific heat capacity of gas mixture at constant pressure

### Information

Extends from (Return specific heat capacity at constant pressure).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
SpecificHeatCapacity | cp | Specific heat capacity at constant pressure [J/(kg.K)]

### Modelica definition

redeclare replaceable function extends specificHeatCapacityCp "Specific heat capacity of gas mixture at constant pressure" annotation(derivative=der_specificHeatCapacityCp); algorithm cp := dryair.cp*(1-state.X[Water]) +steam.cp*state.X[Water]; end specificHeatCapacityCp;

## Buildings.Media.Specialized.Air.PerfectGas.der_specificHeatCapacityCp

Derivative of specific heat capacity of gas mixture at constant pressure

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  |
ThermodynamicState | der_state |  |

### Outputs

Type | Name | Description
--- | --- | ---
Real | der_cp | [J/(kg.K.s)]

### Modelica definition

replaceable function der_specificHeatCapacityCp "Derivative of specific heat capacity of gas mixture at constant pressure" input ThermodynamicState state; input ThermodynamicState der_state; output Real der_cp(unit="J/(kg.K.s)"); algorithm der_cp := (steam.cp-dryair.cp)*der_state.X[Water]; end der_specificHeatCapacityCp;

## Buildings.Media.Specialized.Air.PerfectGas.specificHeatCapacityCv

Specific heat capacity of gas mixture at constant volume

### Information

Extends from (Return specific heat capacity at constant volume).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
SpecificHeatCapacity | cv | Specific heat capacity at constant volume [J/(kg.K)]

### Modelica definition

redeclare replaceable function extends specificHeatCapacityCv "Specific heat capacity of gas mixture at constant volume" annotation(derivative=der_specificHeatCapacityCv); algorithm cv:= dryair.cv*(1-state.X[Water]) +steam.cv*state.X[Water]; end specificHeatCapacityCv;

## Buildings.Media.Specialized.Air.PerfectGas.der_specificHeatCapacityCv

Derivative of specific heat capacity of gas mixture at constant volume

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  |
ThermodynamicState | der_state |  |

### Outputs

Type | Name | Description
--- | --- | ---
Real | der_cv | [J/(kg.K.s)]

### Modelica definition

replaceable function der_specificHeatCapacityCv "Derivative of specific heat capacity of gas mixture at constant volume" input ThermodynamicState state; input ThermodynamicState der_state; output Real der_cv(unit="J/(kg.K.s)"); algorithm der_cv := (steam.cv-dryair.cv)*der_state.X[Water]; end der_specificHeatCapacityCv;

## Buildings.Media.Specialized.Air.PerfectGas.dynamicViscosity

dynamic viscosity of dry air

### Information

Extends from (Return dynamic viscosity).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
DynamicViscosity | eta | Dynamic viscosity [Pa.s]

### Modelica definition

redeclare function extends dynamicViscosity "dynamic viscosity of dry air" algorithm eta := 1.85E-5; end dynamicViscosity;

## Buildings.Media.Specialized.Air.PerfectGas.thermalConductivity

Thermal conductivity of dry air as a polynomial in the temperature

### Information

Extends from (Return thermal conductivity).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
ThermalConductivity | lambda | Thermal conductivity [W/(m.K)]

### Modelica definition

redeclare function extends thermalConductivity "Thermal conductivity of dry air as a polynomial in the temperature" algorithm lambda := Modelica.Media.Incompressible.TableBased.Polynomials_Temp.evaluate( {(-4.8737307422969E-008), 7.67803133753502E-005, 0.0241814385504202}, Modelica.SIunits.Conversions.to_degC(state.T)); end thermalConductivity;

## Buildings.Media.Specialized.Air.PerfectGas.specificEnthalpy

Specific enthalpy

### Information

Extends from (Return specific enthalpy).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnthalpy | h | Specific enthalpy [J/kg]

### Modelica definition

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

## Buildings.Media.Specialized.Air.PerfectGas.specificEnthalpy_pTX

Specific enthalpy

### Information

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Pressure | p |  | Pressure [Pa]
Temperature | T |  | Temperature [K]
MassFraction | X[:] |  | Mass fractions of moist air [1]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnthalpy | h | Specific enthalpy at p, T, X [J/kg]

### Modelica definition

redeclare replaceable function specificEnthalpy_pTX "Specific enthalpy" extends Modelica.Icons.Function; input Modelica.SIunits.Pressure p "Pressure"; input Modelica.SIunits.Temperature T "Temperature"; input Modelica.SIunits.MassFraction X[:] "Mass fractions of moist air"; output Modelica.SIunits.SpecificEnthalpy h "Specific enthalpy at p, T, X"; protected Modelica.SIunits.SpecificEnthalpy hDryAir "Enthalpy of dry air"; algorithm hDryAir := (T - reference_T)*dryair.cp; h := hDryAir * (1 - X[Water]) + ((T-reference_T) * steam.cp + h_fg) * X[Water]; end specificEnthalpy_pTX;

## Buildings.Media.Specialized.Air.PerfectGas.specificInternalEnergy

Specific internal energy

### Information

Extends from Modelica.Icons.Function (Icon for functions), (Return specific internal energy).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnergy | u | Specific internal energy [J/kg]

### Modelica definition

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

## Buildings.Media.Specialized.Air.PerfectGas.specificGibbsEnergy

Specific Gibbs energy

### Information

Extends from Modelica.Icons.Function (Icon for functions), (Return specific Gibbs energy).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnergy | g | Specific Gibbs energy [J/kg]

### Modelica definition

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

## Buildings.Media.Specialized.Air.PerfectGas.specificHelmholtzEnergy

Specific Helmholtz energy

### Information

Extends from Modelica.Icons.Function (Icon for functions), (Return specific Helmholtz energy).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
ThermodynamicState | state |  | Thermodynamic state record

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEnergy | f | Specific Helmholtz energy [J/kg]

### Modelica definition

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

## Buildings.Media.Specialized.Air.PerfectGas.temperature_phX

Compute temperature from specific enthalpy and mass fraction

### Information

Temperature as a function of specific enthalpy and species concentration. The pressure is input for compatibility with the medium models, but the temperature is independent of the pressure.

Extends from Modelica.Icons.Function (Icon for functions).

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
AbsolutePressure | p |  | Pressure [Pa]
SpecificEnthalpy | h |  | specific enthalpy [J/kg]
MassFraction | X[:] |  | mass fractions of composition [kg/kg]

### Outputs

Type | Name | Description
--- | --- | ---
Temperature | T | temperature [K]

### Modelica definition

redeclare replaceable function temperature_phX "Compute temperature from specific enthalpy and mass fraction" extends Modelica.Icons.Function; input AbsolutePressure p "Pressure"; input SpecificEnthalpy h "specific enthalpy"; input MassFraction[:] X "mass fractions of composition"; output Temperature T "temperature"; algorithm T := reference_T + (h - h_fg * X[Water]) /((1 - X[Water])*dryair.cp + X[Water] * steam.cp); end temperature_phX;

## Buildings.Media.Specialized.Air.PerfectGas.GasProperties

Coefficient data record for properties of perfect gases

### Information

This data record contains the coefficients for perfect gases.

Extends from Modelica.Icons.Record (Icon for records).

### Modelica definition

record GasProperties "Coefficient data record for properties of perfect gases" extends Modelica.Icons.Record; Modelica.SIunits.MolarMass MM "Molar mass"; Modelica.SIunits.SpecificHeatCapacity R "Gas constant"; Modelica.SIunits.SpecificHeatCapacity cp "Specific heat capacity at constant pressure"; Modelica.SIunits.SpecificHeatCapacity cv = cp-R "Specific heat capacity at constant volume"; end GasProperties;

## Buildings.Media.Specialized.Air.PerfectGas.s_pTX

Return specific entropy of moist air as a function of pressure p, temperature T and composition X (only valid for phi<1)

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Pressure | p |  | Pressure [Pa]
Temperature | T |  | Temperature [K]
MassFraction | X[:] |  | Mass fractions of moist air [1]

### Outputs

Type | Name | Description
--- | --- | ---
SpecificEntropy | s | Specific entropy at p, T, X [J/(kg.K)]

### Modelica definition

function s_pTX = Modelica.Media.Air.MoistAir.s_pTX "Return specific entropy of moist air as a function of pressure p, temperature T and composition X (only valid for phi<1)";

## Buildings.Media.Specialized.Air.PerfectGas.s_pTX_der

Return specific entropy of moist air as a function of pressure p, temperature T and composition X (only valid for phi<1)

### Inputs

Type | Name | Default | Description
--- | --- | --- | ---
Pressure | p |  | Pressure [Pa]
Temperature | T |  | Temperature [K]
MassFraction | X[:] |  | Mass fractions of moist air [1]
Real | dp |  | Derivative of pressure [Pa/s]
Real | dT |  | Derivative of temperature [K/s]
Real | dX[nX] |  | Derivative of mass fractions [1/s]

### Outputs

Type | Name | Description
--- | --- | ---
Real | ds | Specific entropy at p, T, X [J/(kg.K.s)]

### Modelica definition

function s_pTX_der = Modelica.Media.Air.MoistAir.s_pTX_der "Return specific entropy of moist air as a function of pressure p, temperature T and composition X (only valid for phi<1)";