This medium model is similar to Modelica.Media.Air.SimpleAir, except that the gas density is constant.
The use of a constant density avoids having pressure as a state variable in mixing volumes. Hence, fast transients introduced by a change in pressure are avoided. The drawback is that the dimensionality of the coupled nonlinear equation system is typically larger for flow networks.
As in Modelica.Media.Air.SimpleAir, the specific enthalpy h and specific internal energy u are only a function of temperature T and all other provided medium quantities are constant.
Extends from Buildings.Media.Interfaces.PartialSimpleIdealGasMedium (Medium model of Ideal gas with constant cp and cv. All other quantities, e.g., transport properties, are constant.).
Name | Description |
---|---|
fluidConstants=FluidConstants(iupacName={"simple air"}, casRegistryNumber={"not a real substance"}, chemicalFormula={"N2, O2"}, structureFormula={"N2, O2"}, molarMass=Modelica.Media.IdealGases.Common.SingleGasesData.N2.MM) | constant data for the fluid |
pStp=101325 | Pressure for which dStp is defined |
dStp=1.2 | Fluid density at pressure pStp |
BaseProperties | Basic medium properties |
setState_dTX | Return thermodynamic state from d, T, and X or Xi |
density | return density of ideal gas |
specificInternalEnergy | Return specific internal energy |
specificEntropy | Return specific entropy |
enthalpyOfCondensingGas | Enthalpy of steam per unit mass of steam |
saturationPressure | Return saturation pressure of condensing fluid |
Inherited | |
cp_const | Constant specific heat capacity at constant pressure |
cv_const=cp_const - R_gas | Constant specific heat capacity at constant volume |
R_gas | medium specific gas constant |
MM_const | Molar mass |
eta_const | Constant dynamic viscosity |
lambda_const | Constant thermal conductivity |
T_min | Minimum temperature valid for medium model |
T_max | Maximum temperature valid for medium model |
T0=reference_T | Zero enthalpy temperature |
ThermodynamicState | Thermodynamic state of ideal gas |
FluidConstants | fluid constants |
setState_pTX | Return thermodynamic state from p, T, and X or Xi |
setState_phX | Return thermodynamic state from p, h, and X or Xi |
setState_psX | Return thermodynamic state from p, s, and X or Xi |
setSmoothState | Return thermodynamic state so that it smoothly approximates: if x > 0 then state_a else state_b |
pressure | Return pressure of ideal gas |
temperature | Return temperature of ideal gas |
specificEnthalpy | Return specific enthalpy |
specificGibbsEnergy | Return specific Gibbs energy |
specificHelmholtzEnergy | Return specific Helmholtz energy |
dynamicViscosity | Return dynamic viscosity |
thermalConductivity | Return thermal conductivity |
specificHeatCapacityCp | Return specific heat capacity at constant pressure |
specificHeatCapacityCv | Return specific heat capacity at constant volume |
isentropicExponent | Return isentropic exponent |
velocityOfSound | Return velocity of sound |
specificEnthalpy_pTX | Return specific enthalpy from p, T, and X or Xi |
temperature_phX | Return temperature from p, h, and X or Xi |
density_phX | Return density from p, h, and X or Xi |
isentropicEnthalpy | Return isentropic enthalpy |
isobaricExpansionCoefficient | Returns overall the isobaric expansion coefficient beta |
isothermalCompressibility | Returns overall the isothermal compressibility factor |
density_derp_T | Returns the partial derivative of density with respect to pressure at constant temperature |
density_derT_p | Returns the partial derivative of density with respect to temperature at constant pressure |
density_derX | Returns the partial derivative of density with respect to mass fractions at constant pressure and temperature |
molarMass | Returns the molar mass of the medium |
setState_pT | Return thermodynamic state from p and T |
setState_ph | Return thermodynamic state from p and h |
setState_ps | Return thermodynamic state from p and s |
setState_dT | Return thermodynamic state from d and T |
density_ph | Return density from p and h |
temperature_ph | Return temperature from p and h |
pressure_dT | Return pressure from d and T |
specificEnthalpy_dT | Return specific enthalpy from d and T |
specificEnthalpy_ps | Return specific enthalpy from p and s |
temperature_ps | Return temperature from p and s |
density_ps | Return density from p and s |
specificEnthalpy_pT | Return specific enthalpy from p and T |
density_pT | Return density from p and T |
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 |
prandtlNumber | Return the Prandtl number |
heatCapacity_cp | alias for deprecated name |
heatCapacity_cv | alias for deprecated name |
beta | alias for isobaricExpansionCoefficient for user convenience |
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 |
specificEntropy_pTX | Return specific enthalpy from p, T, and X or Xi |
density_pTX | Return density from p, T, 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 |
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 |
MassFlowRate | Type for mass 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 resect to pressure with medium specific attributes |
DerDensityByEnthalpy | Type for partial derivative of density with resect to enthalpy with medium specific attributes |
DerEnthalpyByPressure | Type for partial derivative of enthalpy with resect to pressure with medium specific attributes |
DerDensityByTemperature | Type for partial derivative of density with resect to temperature with medium specific attributes |
Choices | Types, constants to define menu choices |
constant FluidConstants[nS] fluidConstants= FluidConstants(iupacName={"simple air"}, casRegistryNumber={"not a real substance"}, chemicalFormula={"N2, O2"}, structureFormula={"N2, O2"}, molarMass=Modelica.Media.IdealGases.Common.SingleGasesData.N2.MM) "constant data for the fluid";
constant AbsolutePressure pStp = 101325 "Pressure for which dStp is defined";
constant Density dStp = 1.2 "Fluid density at pressure pStp";
Type | Name | Default | Description |
---|---|---|---|
Advanced | |||
Boolean | preferredMediumStates | false | = true if StateSelect.prefer shall be used for the independent property variables of the medium |
redeclare replaceable model BaseProperties "Basic medium properties" // declarations from Modelica.Media.Interfaces.PartialMedium InputAbsolutePressure p "Absolute pressure of medium"; InputMassFraction[nXi] Xi(start=reference_X[1:nXi]) "Structurally independent mass fractions"; InputSpecificEnthalpy h "Specific enthalpy of medium"; Density d "Density of medium"; Temperature T "Temperature of medium"; MassFraction[nX] X(start=reference_X) "Mass fractions (= (component mass)/total mass m_i/m)"; SpecificInternalEnergy u "Specific internal energy of medium"; SpecificHeatCapacity R "Gas constant (of mixture if applicable)"; MolarMass MM "Molar mass (of mixture or single fluid)"; ThermodynamicState state "thermodynamic state record for optional functions"; parameter Boolean preferredMediumStates=false "= true if StateSelect.prefer shall be used for the independent property variables of the medium"; final parameter Boolean standardOrderComponents = true "if true, and reducedX = true, the last element of X will be computed from the other ones"; SI.Conversions.NonSIunits.Temperature_degC T_degC= Modelica.SIunits.Conversions.to_degC(T) "Temperature of medium in [degC]"; SI.Conversions.NonSIunits.Pressure_bar p_bar= Modelica.SIunits.Conversions.to_bar(p) "Absolute pressure of medium in [bar]"; // Local connector definition, used for equation balancing check connector InputAbsolutePressure = input SI.AbsolutePressure "Pressure as input signal connector"; connector InputSpecificEnthalpy = input SI.SpecificEnthalpy "Specific enthalpy as input signal connector"; connector InputMassFraction = input SI.MassFraction "Mass fraction as input signal connector"; // own declarations equation if standardOrderComponents then Xi = X[1:nXi]; if fixedX then X = reference_X; end if; if reducedX and not fixedX then X[nX] = 1 - sum(Xi); end if; for i in 1:nX loop assert(X[i] >= -1.e-5 and X[i] <= 1 + 1.e-5, "Mass fraction X[" + String(i) + "] = " + String(X[i]) + "of substance " + substanceNames[i] + "\nof medium " + mediumName + " is not in the range 0..1"); end for; end if; assert(p >= 0.0, "Pressure (= " + String(p) + " Pa) of medium \"" + mediumName + "\" is negative\n(Temperature = " + String(T) + " K)"); // new medium equations h = specificEnthalpy_pTX(p,T,X); // Equation for ideal gas, from h=u+p*v and R*T=p*v, from which follows that u = h-R*T. // u = h-R*T; // However, in this medium, the gas law is d=dStp (=constant), from which follows using h=u+pv that // u= h-p*v = h-p/d = h-p/dStp u = h-p/dStp; R = R_gas; // d = p/(R*T); d = dStp;// = p/pStp; MM = MM_const; state.T = T; state.p = p;end BaseProperties;
Type | Name | Default | Description |
---|---|---|---|
Density | d | density [kg/m3] | |
Temperature | T | Temperature [K] | |
MassFraction | X[:] | fill(0, 0) | Mass fractions [kg/kg] |
Type | Name | Description |
---|---|---|
ThermodynamicState | state | Thermodynamic state |
redeclare function setState_dTX "Return thermodynamic state from d, T, and X or Xi" extends Modelica.Icons.Function; input Density d "density"; input Temperature T "Temperature"; input MassFraction X[:] = fill(0,0) "Mass fractions"; output ThermodynamicState state "Thermodynamic state"; algorithm ModelicaError("The function 'setState_dTX' must not be used in GasesConstantDensity as in this medium model, the pressure cannot be determined from the density.\n"); state :=setState_pTX(pStp, T, X); end setState_dTX;
Type | Name | Default | Description |
---|---|---|---|
ThermodynamicState | state | thermodynamic state record |
Type | Name | Description |
---|---|---|
Density | d | Density [kg/m3] |
redeclare function density "return density of ideal gas" extends Modelica.Icons.Function; input ThermodynamicState state "thermodynamic state record"; output Density d "Density"; algorithm d := dStp; end density;
Type | Name | Default | Description |
---|---|---|---|
ThermodynamicState | state | thermodynamic state record |
Type | Name | Description |
---|---|---|
SpecificEnergy | u | Specific internal energy [J/kg] |
redeclare function specificInternalEnergy "Return specific internal energy" extends Modelica.Icons.Function; input ThermodynamicState state "thermodynamic state record"; output SpecificEnergy u "Specific internal energy"; algorithm u := specificEnthalpy(state) - state.p/dStp; end specificInternalEnergy;
Type | Name | Default | Description |
---|---|---|---|
ThermodynamicState | state | thermodynamic state record |
Type | Name | Description |
---|---|---|
SpecificEntropy | s | Specific entropy [J/(kg.K)] |
redeclare replaceable function specificEntropy "Return specific entropy" extends Modelica.Icons.Function; input ThermodynamicState state "thermodynamic state record"; output SpecificEntropy s "Specific entropy"; algorithm s := cp_const*Modelica.Math.log(state.T/T0);// - R_gas*Modelica.Math.log(state.p/reference_p); end specificEntropy;
0
.
Extends from Modelica.Icons.Function (Icon for functions).
Type | Name | Default | Description |
---|---|---|---|
Temperature | T | temperature [K] |
Type | Name | Description |
---|---|---|
SpecificEnthalpy | h | steam enthalpy [J/kg] |
replaceable function enthalpyOfCondensingGas "Enthalpy of steam per unit mass of steam" extends Modelica.Icons.Function; input Temperature T "temperature"; output SpecificEnthalpy h "steam enthalpy"; algorithm h := 0;end enthalpyOfCondensingGas;
0
.
Extends from Modelica.Icons.Function (Icon for functions).
Type | Name | Default | Description |
---|---|---|---|
Temperature | Tsat | saturation temperature [K] |
Type | Name | Description |
---|---|---|
AbsolutePressure | psat | saturation pressure [Pa] |
replaceable function saturationPressure "Return saturation pressure of condensing fluid" extends Modelica.Icons.Function; input Temperature Tsat "saturation temperature"; output AbsolutePressure psat "saturation pressure"; algorithm psat := 0;end saturationPressure;
connector InputAbsolutePressure = input SI.AbsolutePressure "Pressure as input signal connector";
connector InputMassFraction = input SI.MassFraction "Mass fraction as input signal connector";
connector InputSpecificEnthalpy = input SI.SpecificEnthalpy "Specific enthalpy as input signal connector";