atmodeller.eos package

Subpackages

Submodules

atmodeller.eos._aggregators module

Classes that aggregate EOS

Units for temperature and pressure are K and bar, respectively.

class atmodeller.eos._aggregators.CombinedRealGas(real_gases: tuple[RealGas, ...], calibrations: tuple[ExperimentalCalibration, ...])

Bases: RealGas

Combined real gas EOS with separate volume integrations for each EOS

This class computes the contribution to the volume integral separately for each EOS based on the range covered by its P-T calibration, and then combines them.

Parameters:
  • real_gases – Real gases to combine

  • calibrations – Experimental calibrations that correspond to real_gases

real_gases: tuple[RealGas, ...]

Real gases to combine

calibrations: tuple[ExperimentalCalibration, ...]

Experimental calibrations

upper_pressure_bounds: tuple[float, ...]

Upper pressure bounds

_volume_functions: tuple[Callable, ...]
_volume_integral_functions: tuple[Callable, ...]
classmethod create(real_gases: Sequence[RealGas], calibrations: Sequence[ExperimentalCalibration], extrapolate: bool = True) RealGas

Create an instance with the given real gases and calibrations

Reasonable extrapolation behaviour is required to ensure that the function is bounded to avoid throwing NaNs or infs which will crash the solver. Physically, it is reasonable to extend the lower bound using the ideal gas law and the upper bound assuming a linear pressure dependence of the compressibility factor.

There is no bounding for temperature; hence it is assumed that the extrapolation behaviour of temperature is reasonable. This is practically useful because the calibrations are often restricted to a lower temperature range than the high temperatures that are typically of interest for hot rocks and magma ocean planets.

Parameters:
  • real_gases – Real gases to combine

  • calibrations – Experimental calibrations that correspond to real_gases

  • extrapolate – Extrapolate the EOS to have reasonable behaviour below the minimum and above the maximum calibration pressure if required. Defaults to True.

Returns:

An instance

static _append_lower_bound(real_gases: list[RealGas], calibrations: list[ExperimentalCalibration]) None

Appends the lower bound, which gives ideal gas behaviour

Parameters:
  • real_gases – Real gases to combine

  • calibrations – Experimental calibrations that correspond to real_gases

static _append_upper_bound(real_gases: list[RealGas], calibrations: list[ExperimentalCalibration]) None

Appends the upper bound

Parameters:
  • real_gases – Real gases to combine

  • calibrations – Experimental calibrations that correspond to real_gases

static _get_upper_pressure_bounds(calibrations: tuple[ExperimentalCalibration, ...]) tuple[float, ...]

Gets the upper pressure bounds based on each experimental calibration.

Returns:

Upper pressure bounds

_get_index(pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Gets the index of the appropriate EOS model based on pressure.

Parameters:

pressure – Pressure in bar

Returns:

Index of the relevant EOS model

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Volume

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in units required for internal Atmodeller operations.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos._aggregators.UpperBoundRealGas(real_gas: RealGas, p_eval: Any = 1.0)

Bases: RealGas

An upper bound for an EOS

This is used to extrapolate an EOS assuming that the compressibility factor is a linear function of pressure. Importantly, this class is not intended to be used directly, but rather as a component of CombinedRealGas.

p_eval is used to evaluate the compressibility factor and its gradient, and therefore to avoid recompilation of JAX functions it is converted to a JAX array of dtype float64 within the methods, which is the expected type for the pressure argument of the EOS functions.

Parameters:
  • real_gas – Real gas to evaluate the compressibility factor at p_eval.

  • p_eval – Evaluation pressure in bar. This is usually the maximum calibration pressure of real_gas. Defaults to 1 bar.

real_gas: RealGas

Real gas to evaluate the compressibility factor at p_eval

p_eval: float = 1.0

Evaluation pressure in bar. Defaults to 1 bar.

_z0(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor of the previous EOS to blend smoothly with.

Importantly, we don’t want to trigger a recompilation of the compressibility factor, so we pass p_eval as an array.

Parameters:

temperature – Temperature in K

_dzdp0(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gradient of the compressibility factor of the previous EOS to blend smoothly with.

Importantly, we don’t want to trigger a recompilation of the compressibility factor, so we pass p_eval as an array.

Parameters:

temperature – Temperature in K

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity cannot be computed.

This method should not be used because the volume integral is only defined above p_eval, meaning that the log fugacity cannot be calculated.

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Volume

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in units required for internal Atmodeller operations.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos._aggregators.CombinedRealGasFugacity(real_gases: tuple[RealGasBase, ...], calibrations: tuple[ExperimentalCalibration, ...], min_log_fugacity_coefficient: float = -15, max_log_fugacity_coefficient: float = 15)

Bases: RealGasBase

Combined real gas EOS when only the functional form of the (log) fugacity is known.

This directly obtains the (log) fugacity at the relevant pressure by selecting the appropriate EOS model based on the pressure bounds of each calibration.

Parameters:
  • real_gases – Real gases to use

  • calibrations – Experimental calibrations that correspond to real_gases

  • min_log_fugacity_coefficient – Minimum log fugacity coefficient to avoid numerical issues. Defaults to -15.

  • max_log_fugacity_coefficient – Maximum log fugacity coefficient to avoid numerical issues. Defaults to 15.

_abc_impl = <_abc._abc_data object>
fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

real_gases: tuple[RealGasBase, ...]

Real gases to use

calibrations: tuple[ExperimentalCalibration, ...]

Experimental calibrations

upper_pressure_bounds: tuple[float, ...]

Upper pressure bounds

_log_fugacity_coefficient_functions: tuple[Callable, ...]
min_log_fugacity_coefficient: float

Minimum log fugacity coefficient to avoid numerical issues

max_log_fugacity_coefficient: float

Maximum log fugacity coefficient to avoid numerical issues

static _get_upper_pressure_bounds(calibrations: tuple[ExperimentalCalibration, ...]) tuple[float, ...]

Gets the upper pressure bounds based on each experimental calibration.

Returns:

Upper pressure bounds

_get_index(pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Gets the index of the appropriate EOS model based on pressure.

Parameters:

pressure – Pressure in bar

Returns:

Index of the relevant EOS model

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

atmodeller.eos._chabrier module

Real gas EOS from Chabrier and Debras [2021]

class atmodeller.eos._chabrier.Chabrier(log10_density_func: Callable, He_fraction: Any, H2_molar_mass_g_mol: Any, He_molar_mass_g_mol: Any, integration_steps: int)

Bases: RealGas

Chabrier EOS from Chabrier and Debras [2021]

This uses rho-T-P tables to lookup density (rho). Note that the numerical integration can be unstable at low pressures causing nans/zeros to propagate through calculations and crash simulations. Therefore, it is recommended to use the polynomial fit version if possible.

Parameters:
  • log10_density_func – Spline lookup for density from Chabrier and Debras [2021] T-P-rho tables

  • He_fraction – He fraction

  • H2_molar_mass_g_mol – Molar mass of \(\mathrm{H}_2\)

  • He_molar_mass_g_mol – Molar mass of He

  • integration_steps – Number of integration steps

CHABRIER_DIRECTORY: ClassVar[Path] = PosixPath('chabrier')

Directory of the Chabrier data within data

log10_density_func: Callable

Spline lookup for density from Chabrier and Debras [2021] T-P-rho tables

He_fraction: float

He fraction

H2_molar_mass_g_mol: float

Molar mass of \(\mathrm{H}_2\)

He_molar_mass_g_mol: float

Molar mass of He

integration_steps: int

Number of integration steps

classmethod create(filename: Path, integration_steps: int = 100) RealGas

Creates a Chabrier instance.

Parameters:
  • filename – Filename of the density-T-P data

  • integration_steps – Number of integration steps. Defaults to 100, which computes the fugacity of \(\mathrm{H}_2\) to within 4% (relative to 1000 steps, for T from 1000 to 5000 K and pressure to 10 GPa), and to within 10% (relative to 1000 steps, for T from 1000 to 5000 K and pressure to 100 GPa). Increasing the integration steps will increase the run time but provide better accuracy.

Returns:

Instance

classmethod _get_interpolator(filename: Path) Callable

Gets spline lookup for density from Chabrier and Debras [2021] T-P-rho tables.

The data tables have a slightly different organisation of the header line. But in all cases the first three columns contain the required data: log10 T [K], log10 P [GPa], and log10 rho [g/cc].

Parameters:

filename – Filename of the density-T-P data

Returns:

Interpolator

_convert_to_molar_density(log10_density_gcc: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Converts density to molar density

Parameters:

log10_density_gcc – Log10 density in g/cc

Returns:

Molar density in \(\mathrm{mol}\mathrm{m}^{-3}\)

static get_He_fraction_map() dict[str, float]

Mole fraction of He in the gas mixture, the other component being H2.

Dictionary keys should correspond to the name of the Chabrier file.

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

This performs a numerical integration to compute the fugacity, although an obvious speedup to implement is to precompute the fugacity (integral), either by calculating it during initialisation or by storing it in a lookup table that is read in.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in units required for internal Atmodeller operations.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos._chabrier.ChabrierFunction(coeffs: Any)

Bases: RealGasBase

Chabrier EOS from Chabrier and Debras [2021] using a function fit.

This provides a faster and more robust alternative to the full Chabrier EOS, which requires numerical integration and can be unstable at low pressures.

Parameters:

coeffs – Coefficients for the log fugacity coefficient function

coeffs: tuple[float, ...]
log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

_abc_impl = <_abc._abc_data object>
fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

atmodeller.eos._chabrier._H2_3000K_chabrier21: RealGasBase = ChabrierFunction(   coeffs=(     0.000791384922536, 0.538439447246127, 0.102092848927715, -0.015980196398366   ) )

Function-fit version at 3000 K for H2 Chabrier EOS between 1 bar and 1e6 bar [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_3000K_chabrier21: RealGasBase = CombinedRealGasFugacity(   real_gases=(     IdealGas(),     ChabrierFunction(       coeffs=(         0.000791384922536,         0.538439447246127,         0.102092848927715,         -0.015980196398366       )     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=3000.0,       temperature_max=3000.0,       pressure_min=1.0,       pressure_max=1000000.0     )   ),   upper_pressure_bounds=(1.0, 1000000.0),   _log_fugacity_coefficient_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   min_log_fugacity_coefficient=-15,   max_log_fugacity_coefficient=15 )

H2 Chabrier EOS at 3000 K between 1 bar and 1e6 bar [Chabrier and Debras, 2021]

atmodeller.eos._chabrier._H2_4000K_chabrier21: RealGasBase = ChabrierFunction(   coeffs=(     0.001804443584257, 0.46694548641623, 0.49686883364686, -0.048233745656908   ) )

Function-fit version at 4000 K for H2 Chabrier EOS between 1 bar and 1e6 bar [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_4000K_chabrier21: RealGasBase = CombinedRealGasFugacity(   real_gases=(     IdealGas(),     ChabrierFunction(       coeffs=(         0.001804443584257,         0.46694548641623,         0.49686883364686,         -0.048233745656908       )     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=4000.0,       temperature_max=4000.0,       pressure_min=1.0,       pressure_max=1000000.0     )   ),   upper_pressure_bounds=(1.0, 1000000.0),   _log_fugacity_coefficient_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   min_log_fugacity_coefficient=-15,   max_log_fugacity_coefficient=15 )

H2 Chabrier EOS at 4000 K between 1 bar and 1e6 bar [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.calibration_chabrier21: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=100.0, temperature_max=100000000.0, pressure_max=1e+17 )

Calibration for Chabrier and Debras [2021]

atmodeller.eos._chabrier.H2_chabrier21: RealGas = Chabrier(   log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,   He_fraction=0.0,   H2_molar_mass_g_mol=2.015882,   He_molar_mass_g_mol=4.002602,   integration_steps=100 )

\(\mathrm{H}_2\) [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_chabrier21_bounded: RealGas = CombinedRealGas(   real_gases=(     Chabrier(       log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,       He_fraction=0.0,       H2_molar_mass_g_mol=2.015882,       He_molar_mass_g_mol=4.002602,       integration_steps=100     ),     UpperBoundRealGas(       real_gas=Chabrier(         log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,         He_fraction=0.0,         H2_molar_mass_g_mol=2.015882,         He_molar_mass_g_mol=4.002602,         integration_steps=100       ),       p_eval=1e+17     )   ),   calibrations=(     ExperimentalCalibration(       temperature_min=100.0, temperature_max=100000000.0, pressure_max=1e+17     ),     ExperimentalCalibration(pressure_min=1e+17)   ),   upper_pressure_bounds=(1e+17,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

\(\mathrm{H}_2\) bounded [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.He_chabrier21: RealGas = Chabrier(   log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,   He_fraction=1.0,   H2_molar_mass_g_mol=2.015882,   He_molar_mass_g_mol=4.002602,   integration_steps=100 )

He [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.He_chabrier21_bounded: RealGas = CombinedRealGas(   real_gases=(     Chabrier(       log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,       He_fraction=1.0,       H2_molar_mass_g_mol=2.015882,       He_molar_mass_g_mol=4.002602,       integration_steps=100     ),     UpperBoundRealGas(       real_gas=Chabrier(         log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,         He_fraction=1.0,         H2_molar_mass_g_mol=2.015882,         He_molar_mass_g_mol=4.002602,         integration_steps=100       ),       p_eval=1e+17     )   ),   calibrations=(     ExperimentalCalibration(       temperature_min=100.0, temperature_max=100000000.0, pressure_max=1e+17     ),     ExperimentalCalibration(pressure_min=1e+17)   ),   upper_pressure_bounds=(1e+17,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

He bounded [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_He_Y0275_chabrier21: RealGas = Chabrier(   log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,   He_fraction=0.275,   H2_molar_mass_g_mol=2.015882,   He_molar_mass_g_mol=4.002602,   integration_steps=100 )

H2HeY0275 [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_He_Y0275_chabrier21_bounded: RealGas = CombinedRealGas(   real_gases=(     Chabrier(       log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,       He_fraction=0.275,       H2_molar_mass_g_mol=2.015882,       He_molar_mass_g_mol=4.002602,       integration_steps=100     ),     UpperBoundRealGas(       real_gas=Chabrier(         log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,         He_fraction=0.275,         H2_molar_mass_g_mol=2.015882,         He_molar_mass_g_mol=4.002602,         integration_steps=100       ),       p_eval=1e+17     )   ),   calibrations=(     ExperimentalCalibration(       temperature_min=100.0, temperature_max=100000000.0, pressure_max=1e+17     ),     ExperimentalCalibration(pressure_min=1e+17)   ),   upper_pressure_bounds=(1e+17,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2HeY0275 bounded [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_He_Y0292_chabrier21: RealGas = Chabrier(   log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,   He_fraction=0.292,   H2_molar_mass_g_mol=2.015882,   He_molar_mass_g_mol=4.002602,   integration_steps=100 )

H2HeY0292 [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_He_Y0292_chabrier21_bounded: RealGas = CombinedRealGas(   real_gases=(     Chabrier(       log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,       He_fraction=0.292,       H2_molar_mass_g_mol=2.015882,       He_molar_mass_g_mol=4.002602,       integration_steps=100     ),     UpperBoundRealGas(       real_gas=Chabrier(         log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,         He_fraction=0.292,         H2_molar_mass_g_mol=2.015882,         He_molar_mass_g_mol=4.002602,         integration_steps=100       ),       p_eval=1e+17     )   ),   calibrations=(     ExperimentalCalibration(       temperature_min=100.0, temperature_max=100000000.0, pressure_max=1e+17     ),     ExperimentalCalibration(pressure_min=1e+17)   ),   upper_pressure_bounds=(1e+17,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2HeY0292 bounded [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_He_Y0297_chabrier21: RealGas = Chabrier(   log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,   He_fraction=0.297,   H2_molar_mass_g_mol=2.015882,   He_molar_mass_g_mol=4.002602,   integration_steps=100 )

H2HeY0297 [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.H2_He_Y0297_chabrier21_bounded: RealGas = CombinedRealGas(   real_gases=(     Chabrier(       log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,       He_fraction=0.297,       H2_molar_mass_g_mol=2.015882,       He_molar_mass_g_mol=4.002602,       integration_steps=100     ),     UpperBoundRealGas(       real_gas=Chabrier(         log10_density_func=<function Chabrier._get_interpolator.<locals>.interpolator_hashable_function_wrapper>,         He_fraction=0.297,         H2_molar_mass_g_mol=2.015882,         He_molar_mass_g_mol=4.002602,         integration_steps=100       ),       p_eval=1e+17     )   ),   calibrations=(     ExperimentalCalibration(       temperature_min=100.0, temperature_max=100000000.0, pressure_max=1e+17     ),     ExperimentalCalibration(pressure_min=1e+17)   ),   upper_pressure_bounds=(1e+17,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2HeY0297 bounded [Chabrier and Debras, 2021]

atmodeller.eos._chabrier.get_chabrier_eos_models() dict[str, RealGasBase]

Gets a dictionary of EOS models

Returns:

Dictionary of EOS models

atmodeller.eos._holland_powell module

Real gas EOS from Holland and Powell [2011], Holland and Powell [1991], Holland and Powell [1998]

class atmodeller.eos._holland_powell.CorrespondingStatesUnitConverter

Bases: object

Unit converter for Holland and Powell CORK corresponding states model

This converts the coefficient units from Holland and Powell to the required units for Atmodeller. This accounts for kilo factors and converting the energy from J to SI volume and pressure in bar using:

\[1\ \mathrm{J} = 10^{-5}\ \mathrm{m}^3\ \mathrm{bar}\]
static convert_a_coefficients(a_coefficients: tuple[int | float, ...]) tuple[float, ...]

Converts the a coefficients for corresponding states.

The a coefficients (a0 and a1) have units [Holland and Powell, 1991, Equation 9]:

\[\left(\frac{\mathrm{kJ}}{\mathrm{mol}\ \mathrm{K}}\right)^2\]

Converting kJ gives rise to a unit conversion factor of \(10^{-4}\).

Parameters:

a_coefficients – a coefficients from Holland and Powell

Returns:

a coefficients with units of

\[\left(\frac{\mathrm{m}^3\ \mathrm{bar}}{\mathrm{mol}\ \mathrm{K}}\right)^2\]

static convert_b_coefficient(b_coefficient: int | float) float

Converts the b coefficient for corresponding states.

The b coefficient (b0) has units [Holland and Powell, 1991, Equation 9]:

\[\frac{\mathrm{kJ}}{\mathrm{mol}\ \mathrm{K}}\]

Converting kJ gives rise to a unit conversion factor of \(10^{-2}\).

Parameters:

b_coefficient – b coefficient from Holland and Powell

Returns:

b coefficient with units of

\[\frac{\mathrm{m}^3\ \mathrm{bar}}{\mathrm{mol}\ \mathrm{K}}\]

static convert_virial_coefficients(virial_coefficients: tuple[int | float, ...]) tuple[float, ...]

Converts the virial coefficients for corresponding states

The virial coefficients, for example associated with coefficients c and d in [Holland and Powell, 1991, Table 2], have units:

\[\frac{\mathrm{kJ}}{\mathrm{mol}\ \mathrm{K}}\]

Converting kJ gives rise to a unit conversion factor of \(10^{-2}\).

Parameters:

virial_coefficient – Virial coefficients from Holland and Powell

Returns:

virial coefficients with units of

\[\frac{\mathrm{m}^3\ \mathrm{bar}}{\mathrm{mol}\ \mathrm{K}}\]

class atmodeller.eos._holland_powell.FullUnitConverter

Bases: object

Unit converter for Holland and Powell full CORK models for H2O and CO2

This converts the coefficient units from Holland and Powell to the required units for Atmodeller. This accounts for kilo factors and converting the energy from J to SI volume and pressure in bar using:

\[1\ \mathrm{J} = 10^{-5}\ \mathrm{m}^3\ \mathrm{bar}\]
static convert_a_coefficients(a_coefficients: tuple[int | float, ...]) tuple[float, ...]

Converts the a coefficients for the full CORK models

The a parameter has units [Holland and Powell, 1991, Table 1]

\[\frac{\mathrm{kJ}^2\ \mathrm{K}^{1/2}}{\mathrm{kbar}\ \mathrm{mol}^2}\]

Each a coefficient has a different power of K, but this is dealt with during the multiplication with temperature. Here, we just need to deal with kJ and other kilo factors, which gives rise to a unit conversion factor of \(10^{-7}\).

Parameters:

a_coefficients – a coefficients from Holland and Powell

Returns:

a coefficients with units converted such that the a parameter has units of

\[\left(\frac{\mathrm{m}^3}{\mathrm{mol}}\right)^2\ \mathrm{bar}\ \mathrm{K}^{1/2}\]

static convert_b_coefficient(b_coefficient: int | float) float

Converts the b coefficient for the full CORK models

The b parameter has units [Holland and Powell, 1991, Table 1]

\[\frac{\mathrm{kJ}}{\mathrm{kbar}\ \mathrm{mol}}\]

Converting J gives rise to a unit conversion factor of \(10^{-5}\).

Parameters:

b_coefficient – b coefficient from Holland and Powell

Returns:

b coefficients with units converted such that the b parameter has units of

\[\frac{\mathrm{m}^3}{\mathrm{mol}}\]

static convert_virial_coefficients(virial_coefficients: tuple[int | float, ...], pressure_exponent) tuple[float, ...]

Converts the virial coefficients for the full CORK models

The volume correction to the MRK volume, \(\Delta V\), based on the parameter that the coefficients determine is given by:

\[\Delta V = \mathrm{parameter(coefficients)} (P-P_0)^\gamma\]

where \(\gamma\) is pressure_exponent and \(P_0\) is the pressure at which the MRK equation begins to overestimate the molar volume significantly.

Parameters:
  • virial_coefficients – Virial coefficients from Holland and Powell

  • pressure_exponent – Pressure exponent \(\gamma\), also given by Holland and Powell

Returns:

Virial coefficients with the appropriate units for Atmodeller

class atmodeller.eos._holland_powell.MRKCorrespondingStatesHP91(critical_data: CriticalData)

Bases: RedlichKwongABC

MRK corresponding states [Holland and Powell, 1991]

Universal constants from Holland and Powell [1991, Table 2]

Parameters:

critical_data – Critical data

critical_data: CriticalData
_a_coefficients: tuple[float, ...]
_b: float
property critical_pressure: float

Critical pressure in bar

property critical_temperature: float

Critical temperature in K

classmethod create(hill_formula: str, suffix: str = '') MRKCorrespondingStatesHP91

Gets an MRK corresponding states model for a given species.

Parameters:
  • hill_formula – Hill formula

  • suffix – Suffix. Defaults to an empty string.

Returns:

An MRK corresponding states model for the species

a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

MRK a parameter [Holland and Powell, 1991, Equation 9]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

MRK a parameter in \((\mathrm{m}^3\ \mathrm{mol}^{-1})^2\ \mathrm{K}^{1/2}\ \mathrm{bar}\)

b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

MRK b parameter computed from b0 [Holland and Powell, 1991, Equation 9].

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

MRK b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\).

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume-explicit equation [Holland and Powell, 1991, Equation 7]

Without complications of critical phenomena the RK equation can be simplified using the approximation:

\[V \sim \frac{RT}{P} + b\]

where \(V\) is volume, \(R\) is the gas constant, \(T\) is temperature, \(P\) is pressure, and \(b\) corrects for the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos._holland_powell.MRKImplicitHP91ABCMixin(_a_coefficients: Any, _b: Any, _Ta: Any, _Tc: Any)

Bases: Module

MRK implicit [Holland and Powell, 1991]

Universal constants from Holland and Powell [1991, Table 1].

Parameters:
  • a_coefficientsa coefficients

  • bb coefficient

  • Ta – Temperature at which the a parameter is equal for the dense fluid and gas in K

  • Tc – Critical temperature in K

_a_coefficients: tuple[float, ...]
_b: float
_Ta: float
_Tc: float
abstractmethod delta_temperature_for_a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Temperature difference for the calculation of the a parameter

Parameters:

temperature – Temperature in K

Returns:

Temperature difference in K

a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

MRK a parameter [Holland and Powell, 1991, Equation 6]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

MRK a parameter

b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray
_abc_impl = <_abc._abc_data object>
class atmodeller.eos._holland_powell.MRKImplicitGasHP91(_a_coefficients: Any, _b: Any, _Ta: Any, _Tc: Any)

Bases: MRKImplicitHP91ABCMixin, RedlichKwongImplicitGasABC

MRK for gaseous phase [Holland and Powell, 1991, Equation 6a]

delta_temperature_for_a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Temperature difference for the calculation of the a parameter

Parameters:

temperature – Temperature in K

Returns:

Temperature difference in K

A_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

A factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

A factor, which is dimensionless

B_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

B factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

B factor, which is dimensionless

_abc_impl = <_abc._abc_data object>
_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume

Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

MRK a parameter [Holland and Powell, 1991, Equation 6]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

MRK a parameter

b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the b parameter

Returns:

b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

initial_volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Initial guess volume to ensure convergence to the correct root

For the gaseous phase a suitably high value must be chosen [Holland and Powell, 1991, Appendix].

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Initial volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Solves the RK equation numerically to compute the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Equation A.2]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

_a_coefficients: tuple[float, ...]
_b: float
_Ta: float
_Tc: float
atmodeller.eos._holland_powell.Tc_H2O: int | float = 695

Critical temperature of H2O in K for the MRK/CORK model [Holland and Powell, 1991]

atmodeller.eos._holland_powell.Ta_H2O: int | float = 673

Temperature at which \(a_{\mathrm gas} = a\) for H2O by fitting [Holland and Powell, 1991]

atmodeller.eos._holland_powell.b0_H2O: float = 1.4650000000000002e-05

b parameter value which is the same across all H2O phases [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2OMrkGasHolland91: MRKImplicitGasHP91 = MRKImplicitGasHP91(   _a_coefficients=(0.00011134, 5.8487e-07, -2.137e-09, 6.8133000000000005e-12),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

H2O MRK for gas phase [Holland and Powell, 1991]

class atmodeller.eos._holland_powell.MRKImplicitLiquidHP91(_a_coefficients: Any, _b: Any, _Ta: Any, _Tc: Any)

Bases: MRKImplicitHP91ABCMixin, RedlichKwongImplicitDenseFluidABC

MRK for liquid phase :cite:p`HP91{Equation 6}`

delta_temperature_for_a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Temperature difference for the calculation of the a parameter

Parameters:

temperature – Temperature in K

Returns:

Temperature difference in K

A_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

A factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

A factor, which is dimensionless

B_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

B factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

B factor, which is dimensionless

_abc_impl = <_abc._abc_data object>
_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume

Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

MRK a parameter [Holland and Powell, 1991, Equation 6]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

MRK a parameter

b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the b parameter

Returns:

b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

initial_volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Initial guess volume to ensure convergence to the correct root

For the dense fluid phase a suitably low value must be chosen [Holland and Powell, 1991, Appendix].

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Initial volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Solves the RK equation numerically to compute the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Equation A.2]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

_a_coefficients: tuple[float, ...]
_b: float
_Ta: float
_Tc: float
atmodeller.eos._holland_powell.H2OMrkLiquidHolland91: MRKImplicitLiquidHP91 = MRKImplicitLiquidHP91(   _a_coefficients=(0.00011134, -8.8517e-08, 4.53e-10, -1.3183e-12),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

cite:p`HP91`

Type:

H2O MRK for liquid phase

class atmodeller.eos._holland_powell.MRKImplicitFluidHP91(_a_coefficients: Any, _b: Any, _Ta: Any, _Tc: Any)

Bases: MRKImplicitHP91ABCMixin, RedlichKwongImplicitDenseFluidABC

MRK for supercritical fluid [Holland and Powell, 1991, Equation 6]

delta_temperature_for_a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Temperature difference for the calculation of the a parameter

Parameters:

temperature – Temperature in K

Returns:

Temperature difference in K

initial_volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Initial guess volume to ensure convergence to the correct root

See Holland and Powell [1991, Appendix]. It appears that there is only ever a single root, even if Ta < temperature < Tc. Holland and Powell state that a single root exists if temperature > Tc, but this appears to be true if temperature > Ta. Nevertheless, the initial guess is changed accordingly.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Initial volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

A_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

A factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

A factor, which is dimensionless

B_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

B factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

B factor, which is dimensionless

_abc_impl = <_abc._abc_data object>
_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume

Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

MRK a parameter [Holland and Powell, 1991, Equation 6]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

MRK a parameter

b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the b parameter

Returns:

b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Solves the RK equation numerically to compute the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Equation A.2]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

_a_coefficients: tuple[float, ...]
_b: float
_Ta: float
_Tc: float
atmodeller.eos._holland_powell.H2OMrkFluidHolland91: MRKImplicitFluidHP91 = MRKImplicitFluidHP91(   _a_coefficients=(0.00011134, -2.2290999999999998e-08, -3.8022e-11, 1.7791e-14),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

cite:p`HP91`

Type:

H2O MRK for fluid phase

atmodeller.eos._holland_powell.CO2_critical_data: CriticalData = CriticalData(temperature=304.15, pressure=73.8659)

Alternative values from Holland and Powell [1991] are 304.2 K and 73.8 bar

atmodeller.eos._holland_powell.CO2MrkHolland91: MRKImplicitFluidHP91 = MRKImplicitFluidHP91(   _a_coefficients=(7.412e-05, -1.0891e-08, -3.4203e-11, 0.0),   _b=3.057e-05,   _Ta=0.0,   _Tc=304.15 )

CO2 MRK [Holland and Powell, 1991, Above Equation 7]

Critical behaviour is not considered for CO2 by Holland and Powell [1991], but for consistency with the formulation for H2O, the CO2 critical temperature is set.

class atmodeller.eos._holland_powell.H2OMrkGasFluid91(mrk_fluid: MRKImplicitFluidHP91 = MRKImplicitFluidHP91(_a_coefficients=(0.00011134, -2.2290999999999998e-08, -3.8022e-11, 1.7791e-14), _b=1.4650000000000002e-05, _Ta=673.0, _Tc=695.0), mrk_gas: MRKImplicitGasHP91 = MRKImplicitGasHP91(_a_coefficients=(0.00011134, 5.8487e-07, -2.137e-09, 6.8133000000000005e-12), _b=1.4650000000000002e-05, _Ta=673.0, _Tc=695.0), Ta: Any = 673, Tc: Any = 695)

Bases: RealGas

A MRK model for H2O for the gas and supercritical fluid

Parameters:
  • mrk_fluid – The MRK for the supercritical fluid

  • mrk_gas – The MRK for the subcritical gas

  • Ta – Temperature at which a_gas = a in the MRK formulation in K

  • Tc – Critical temperature in K

mrk_fluid: MRKImplicitFluidHP91 = MRKImplicitFluidHP91(   _a_coefficients=(0.00011134, -2.2290999999999998e-08, -3.8022e-11, 1.7791e-14),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

The MRK for the supercritical fluid

mrk_gas: MRKImplicitGasHP91 = MRKImplicitGasHP91(   _a_coefficients=(0.00011134, 5.8487e-07, -2.137e-09, 6.8133000000000005e-12),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

The MRK for the subcritical gas

Ta: float = 673

Temperature at which a_gas = a in the MRK formulation in K

Tc: float = 695

Critical temperature in K

_select_condition(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Selects the condition

Parameters:

temperature – Temperature in K

Returns:

Integer denoting the condition, i.e. the region of phase space

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity [Holland and Powell, 1991, Equation 8]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos._holland_powell.H2OMrkHP91(mrk_fluid: MRKImplicitFluidHP91 = MRKImplicitFluidHP91(_a_coefficients=(0.00011134, -2.2290999999999998e-08, -3.8022e-11, 1.7791e-14), _b=1.4650000000000002e-05, _Ta=673.0, _Tc=695.0), mrk_gas: MRKImplicitGasHP91 = MRKImplicitGasHP91(_a_coefficients=(0.00011134, 5.8487e-07, -2.137e-09, 6.8133000000000005e-12), _b=1.4650000000000002e-05, _Ta=673.0, _Tc=695.0), mrk_liquid: MRKImplicitLiquidHP91 = MRKImplicitLiquidHP91(_a_coefficients=(0.00011134, -8.8517e-08, 4.53e-10, -1.3183e-12), _b=1.4650000000000002e-05, _Ta=673.0, _Tc=695.0), Ta: Any = 673, Tc: Any = 695)

Bases: RealGas

A MRK model for H2O that accommodates critical behaviour

Parameters:
  • mrk_fluid – The MRK for the supercritical fluid

  • mrk_gas – The MRK for the subcritical gas

  • mrk_liquid – The MRK for the subcritical liquid

  • Ta – Temperature at which a_gas = a in the MRK formulation in K

  • Tc – Critical temperature in K

mrk_fluid: MRKImplicitFluidHP91 = MRKImplicitFluidHP91(   _a_coefficients=(0.00011134, -2.2290999999999998e-08, -3.8022e-11, 1.7791e-14),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

The MRK for the supercritical fluid

mrk_gas: MRKImplicitGasHP91 = MRKImplicitGasHP91(   _a_coefficients=(0.00011134, 5.8487e-07, -2.137e-09, 6.8133000000000005e-12),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

The MRK for the subcritical gas

mrk_liquid: MRKImplicitLiquidHP91 = MRKImplicitLiquidHP91(   _a_coefficients=(0.00011134, -8.8517e-08, 4.53e-10, -1.3183e-12),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

The MRK for the subcritical liquid

Ta: float = 673

Temperature at which a_gas = a in the MRK formulation in K

Tc: float = 695

Critical temperature in K

Psat(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Saturation curve

Compared to Holland and Powell [1991] the pressure is returned in bar, as required by Atmodeller.

Parameters:

temperature – Temperature in K

Returns:

Saturation curve pressure in bar

_select_condition(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Selects the condition

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Integer denoting the condition, i.e. the region of phase space

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity [Holland and Powell, 1991, Equation 8]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Volume

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

atmodeller.eos._holland_powell.H2OMrkHolland91: RealGas = H2OMrkHP91(Ta=673.0, Tc=695.0)

H2O MRK that includes critical behaviour (also the liquid phase)

atmodeller.eos._holland_powell.CO2_mrk_cs_holland91: RealGas = MRKCorrespondingStatesHP91(   critical_data=CriticalData(temperature=304.15, pressure=73.8659),   _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),   _b=9.183009999999999e-06 )

CO2 MRK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CH4_mrk_cs_holland91: RealGas = MRKCorrespondingStatesHP91(   critical_data=CriticalData(temperature=191.05, pressure=46.4069),   _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),   _b=9.183009999999999e-06 )

CH4 MRK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2_mrk_cs_holland91: RealGas = MRKCorrespondingStatesHP91(   critical_data=CriticalData(temperature=41.2, pressure=21.1),   _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),   _b=9.183009999999999e-06 )

H2 MRK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CO_mrk_cs_holland91: RealGas = MRKCorrespondingStatesHP91(   critical_data=CriticalData(temperature=133.15, pressure=34.9571),   _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),   _b=9.183009999999999e-06 )

CO MRK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.N2_mrk_cs_holland91: RealGas = MRKCorrespondingStatesHP91(   critical_data=CriticalData(temperature=126.2, pressure=33.9),   _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),   _b=9.183009999999999e-06 )

N2 MRK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.S2_mrk_cs_holland11: RealGas = MRKCorrespondingStatesHP91(   critical_data=CriticalData(temperature=208.15, pressure=72.954),   _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),   _b=9.183009999999999e-06 )

S2 MRK corresponding states [Holland and Powell, 2011]

atmodeller.eos._holland_powell.H2S_mrk_cs_holland11: RealGas = MRKCorrespondingStatesHP91(   critical_data=CriticalData(temperature=373.55, pressure=90.0779),   _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),   _b=9.183009999999999e-06 )

H2S MRK corresponding states [Holland and Powell, 2011]

atmodeller.eos._holland_powell.H2O_mrk_fluid_holland91: RealGas = MRKImplicitFluidHP91(   _a_coefficients=(0.00011134, -2.2290999999999998e-08, -3.8022e-11, 1.7791e-14),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

H2O MRK supercritical fluid [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2O_mrk_gas_holland91: RealGas = MRKImplicitGasHP91(   _a_coefficients=(0.00011134, 5.8487e-07, -2.137e-09, 6.8133000000000005e-12),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

H2O MRK gas [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2O_mrk_liquid_holland91: RealGas = MRKImplicitLiquidHP91(   _a_coefficients=(0.00011134, -8.8517e-08, 4.53e-10, -1.3183e-12),   _b=1.4650000000000002e-05,   _Ta=673.0,   _Tc=695.0 )

H2O MRK liquid [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2O_mrk_gas_fluid_holland91: RealGas = H2OMrkGasFluid91(Ta=673.0, Tc=695.0)

H2O MRK for the gas and supercritical fluid [Holland and Powell, 1991]

atmodeller.eos._holland_powell.virial_compensation_corresponding_states: VirialCompensation = VirialCompensation(   a_coefficients=(6.93054e-09, -8.38293e-10),   b_coefficients=(-3.30558e-07, 2.30524e-08),   c_coefficients=(0.0, 0.0),   P0=0.0 )

Virial compensation for corresponding states [Holland and Powell, 1991, Table 2]

In this case it appears P0 is always zero, even though for the full CORK equations it determines whether or not the virial contribution is added. The unit conversions to SI and pressure in bar mean that every virial coefficient has been multiplied by 1e-2 compared to the values in Holland and Powell [1991, Table 2].

atmodeller.eos._holland_powell.experimental_calibration_holland91: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=373.0,   temperature_max=1873.0,   pressure_min=1.0,   pressure_max=50000.0 )

Experimental calibration for [Holland and Powell, 2011, Holland and Powell, 1991] models

atmodeller.eos._holland_powell.experimental_calibration_holland98: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=373.0,   temperature_max=1873.0,   pressure_min=1.0,   pressure_max=120000.0 )

Experimental calibration for [Holland and Powell, 1998] models

atmodeller.eos._holland_powell.CH4_cork_cs_holland91: RealGas = CORK(   mrk=MRKCorrespondingStatesHP91(     critical_data=CriticalData(temperature=191.05, pressure=46.4069),     _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),     _b=9.183009999999999e-06   ),   virial=VirialCompensation(     a_coefficients=(6.93054e-09, -8.38293e-10),     b_coefficients=(-3.30558e-07, 2.30524e-08),     c_coefficients=(0.0, 0.0),     P0=0.0   ),   critical_data=CriticalData(temperature=191.05, pressure=46.4069) )

CH4 CORK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CH4_cork_cs_holland91_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKCorrespondingStatesHP91(         critical_data=CriticalData(temperature=191.05, pressure=46.4069),         _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),         _b=9.183009999999999e-06       ),       virial=VirialCompensation(         a_coefficients=(6.93054e-09, -8.38293e-10),         b_coefficients=(-3.30558e-07, 2.30524e-08),         c_coefficients=(0.0, 0.0),         P0=0.0       ),       critical_data=CriticalData(temperature=191.05, pressure=46.4069)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKCorrespondingStatesHP91(           critical_data=CriticalData(temperature=191.05, pressure=46.4069),           _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),           _b=9.183009999999999e-06         ),         virial=VirialCompensation(           a_coefficients=(6.93054e-09, -8.38293e-10),           b_coefficients=(-3.30558e-07, 2.30524e-08),           c_coefficients=(0.0, 0.0),           P0=0.0         ),         critical_data=CriticalData(temperature=191.05, pressure=46.4069)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CH4 CORK corresponding states bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CO_cork_cs_holland91: RealGas = CORK(   mrk=MRKCorrespondingStatesHP91(     critical_data=CriticalData(temperature=133.15, pressure=34.9571),     _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),     _b=9.183009999999999e-06   ),   virial=VirialCompensation(     a_coefficients=(6.93054e-09, -8.38293e-10),     b_coefficients=(-3.30558e-07, 2.30524e-08),     c_coefficients=(0.0, 0.0),     P0=0.0   ),   critical_data=CriticalData(temperature=133.15, pressure=34.9571) )

CO CORK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CO_cork_cs_holland91_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKCorrespondingStatesHP91(         critical_data=CriticalData(temperature=133.15, pressure=34.9571),         _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),         _b=9.183009999999999e-06       ),       virial=VirialCompensation(         a_coefficients=(6.93054e-09, -8.38293e-10),         b_coefficients=(-3.30558e-07, 2.30524e-08),         c_coefficients=(0.0, 0.0),         P0=0.0       ),       critical_data=CriticalData(temperature=133.15, pressure=34.9571)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKCorrespondingStatesHP91(           critical_data=CriticalData(temperature=133.15, pressure=34.9571),           _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),           _b=9.183009999999999e-06         ),         virial=VirialCompensation(           a_coefficients=(6.93054e-09, -8.38293e-10),           b_coefficients=(-3.30558e-07, 2.30524e-08),           c_coefficients=(0.0, 0.0),           P0=0.0         ),         critical_data=CriticalData(temperature=133.15, pressure=34.9571)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CO CORK corresponding states bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CO2_cork_cs_holland91: RealGas = CORK(   mrk=MRKCorrespondingStatesHP91(     critical_data=CriticalData(temperature=304.15, pressure=73.8659),     _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),     _b=9.183009999999999e-06   ),   virial=VirialCompensation(     a_coefficients=(6.93054e-09, -8.38293e-10),     b_coefficients=(-3.30558e-07, 2.30524e-08),     c_coefficients=(0.0, 0.0),     P0=0.0   ),   critical_data=CriticalData(temperature=304.15, pressure=73.8659) )

CO2 CORK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CO2_cork_cs_holland91_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKCorrespondingStatesHP91(         critical_data=CriticalData(temperature=304.15, pressure=73.8659),         _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),         _b=9.183009999999999e-06       ),       virial=VirialCompensation(         a_coefficients=(6.93054e-09, -8.38293e-10),         b_coefficients=(-3.30558e-07, 2.30524e-08),         c_coefficients=(0.0, 0.0),         P0=0.0       ),       critical_data=CriticalData(temperature=304.15, pressure=73.8659)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKCorrespondingStatesHP91(           critical_data=CriticalData(temperature=304.15, pressure=73.8659),           _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),           _b=9.183009999999999e-06         ),         virial=VirialCompensation(           a_coefficients=(6.93054e-09, -8.38293e-10),           b_coefficients=(-3.30558e-07, 2.30524e-08),           c_coefficients=(0.0, 0.0),           P0=0.0         ),         critical_data=CriticalData(temperature=304.15, pressure=73.8659)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CO2 CORK corresponding states bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2_cork_cs_holland91: RealGas = CORK(   mrk=MRKCorrespondingStatesHP91(     critical_data=CriticalData(temperature=41.2, pressure=21.1),     _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),     _b=9.183009999999999e-06   ),   virial=VirialCompensation(     a_coefficients=(6.93054e-09, -8.38293e-10),     b_coefficients=(-3.30558e-07, 2.30524e-08),     c_coefficients=(0.0, 0.0),     P0=0.0   ),   critical_data=CriticalData(temperature=41.2, pressure=21.1) )

H2 CORK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2_cork_cs_holland91_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKCorrespondingStatesHP91(         critical_data=CriticalData(temperature=41.2, pressure=21.1),         _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),         _b=9.183009999999999e-06       ),       virial=VirialCompensation(         a_coefficients=(6.93054e-09, -8.38293e-10),         b_coefficients=(-3.30558e-07, 2.30524e-08),         c_coefficients=(0.0, 0.0),         P0=0.0       ),       critical_data=CriticalData(temperature=41.2, pressure=21.1)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKCorrespondingStatesHP91(           critical_data=CriticalData(temperature=41.2, pressure=21.1),           _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),           _b=9.183009999999999e-06         ),         virial=VirialCompensation(           a_coefficients=(6.93054e-09, -8.38293e-10),           b_coefficients=(-3.30558e-07, 2.30524e-08),           c_coefficients=(0.0, 0.0),           P0=0.0         ),         critical_data=CriticalData(temperature=41.2, pressure=21.1)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2 CORK corresponding states bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2S_cork_cs_holland11: RealGas = CORK(   mrk=MRKCorrespondingStatesHP91(     critical_data=CriticalData(temperature=373.55, pressure=90.0779),     _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),     _b=9.183009999999999e-06   ),   virial=VirialCompensation(     a_coefficients=(6.93054e-09, -8.38293e-10),     b_coefficients=(-3.30558e-07, 2.30524e-08),     c_coefficients=(0.0, 0.0),     P0=0.0   ),   critical_data=CriticalData(temperature=373.55, pressure=90.0779) )

H2S CORK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2S_cork_cs_holland11_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKCorrespondingStatesHP91(         critical_data=CriticalData(temperature=373.55, pressure=90.0779),         _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),         _b=9.183009999999999e-06       ),       virial=VirialCompensation(         a_coefficients=(6.93054e-09, -8.38293e-10),         b_coefficients=(-3.30558e-07, 2.30524e-08),         c_coefficients=(0.0, 0.0),         P0=0.0       ),       critical_data=CriticalData(temperature=373.55, pressure=90.0779)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKCorrespondingStatesHP91(           critical_data=CriticalData(temperature=373.55, pressure=90.0779),           _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),           _b=9.183009999999999e-06         ),         virial=VirialCompensation(           a_coefficients=(6.93054e-09, -8.38293e-10),           b_coefficients=(-3.30558e-07, 2.30524e-08),           c_coefficients=(0.0, 0.0),           P0=0.0         ),         critical_data=CriticalData(temperature=373.55, pressure=90.0779)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2S CORK corresponding states bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.N2_cork_cs_holland91: RealGas = CORK(   mrk=MRKCorrespondingStatesHP91(     critical_data=CriticalData(temperature=126.2, pressure=33.9),     _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),     _b=9.183009999999999e-06   ),   virial=VirialCompensation(     a_coefficients=(6.93054e-09, -8.38293e-10),     b_coefficients=(-3.30558e-07, 2.30524e-08),     c_coefficients=(0.0, 0.0),     P0=0.0   ),   critical_data=CriticalData(temperature=126.2, pressure=33.9) )

N2 CORK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.N2_cork_cs_holland91_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKCorrespondingStatesHP91(         critical_data=CriticalData(temperature=126.2, pressure=33.9),         _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),         _b=9.183009999999999e-06       ),       virial=VirialCompensation(         a_coefficients=(6.93054e-09, -8.38293e-10),         b_coefficients=(-3.30558e-07, 2.30524e-08),         c_coefficients=(0.0, 0.0),         P0=0.0       ),       critical_data=CriticalData(temperature=126.2, pressure=33.9)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKCorrespondingStatesHP91(           critical_data=CriticalData(temperature=126.2, pressure=33.9),           _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),           _b=9.183009999999999e-06         ),         virial=VirialCompensation(           a_coefficients=(6.93054e-09, -8.38293e-10),           b_coefficients=(-3.30558e-07, 2.30524e-08),           c_coefficients=(0.0, 0.0),           P0=0.0         ),         critical_data=CriticalData(temperature=126.2, pressure=33.9)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

N2 CORK corresponding states bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.S2_cork_cs_holland11: RealGas = CORK(   mrk=MRKCorrespondingStatesHP91(     critical_data=CriticalData(temperature=208.15, pressure=72.954),     _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),     _b=9.183009999999999e-06   ),   virial=VirialCompensation(     a_coefficients=(6.93054e-09, -8.38293e-10),     b_coefficients=(-3.30558e-07, 2.30524e-08),     c_coefficients=(0.0, 0.0),     P0=0.0   ),   critical_data=CriticalData(temperature=208.15, pressure=72.954) )

S2 CORK corresponding states [Holland and Powell, 1991]

atmodeller.eos._holland_powell.S2_cork_cs_holland11_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKCorrespondingStatesHP91(         critical_data=CriticalData(temperature=208.15, pressure=72.954),         _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),         _b=9.183009999999999e-06       ),       virial=VirialCompensation(         a_coefficients=(6.93054e-09, -8.38293e-10),         b_coefficients=(-3.30558e-07, 2.30524e-08),         c_coefficients=(0.0, 0.0),         P0=0.0       ),       critical_data=CriticalData(temperature=208.15, pressure=72.954)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKCorrespondingStatesHP91(           critical_data=CriticalData(temperature=208.15, pressure=72.954),           _a_coefficients=(5.45963e-09, -8.639200000000001e-10, 0.0),           _b=9.183009999999999e-06         ),         virial=VirialCompensation(           a_coefficients=(6.93054e-09, -8.38293e-10),           b_coefficients=(-3.30558e-07, 2.30524e-08),           c_coefficients=(0.0, 0.0),           P0=0.0         ),         critical_data=CriticalData(temperature=208.15, pressure=72.954)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

S2 CORK corresponding states bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.dummy_critical_data: CriticalData = CriticalData(temperature=1.0, pressure=1.0)

Dummy critical data

The full CO2 and H2O CORK models are not a corresponding states model, which can be reproduced by ignoring the scaling by the critical temperature and pressure, i.e. setting these quantities to unity.

atmodeller.eos._holland_powell.CO2_virial_compensation_holland91: VirialCompensation = VirialCompensation(   a_coefficients=(1.3379e-10, -1.0173999999999999e-13),   b_coefficients=(-7.175966957560494e-08, 2.4469483174946712e-11),   c_coefficients=(0.0, 0.0),   P0=5000.0 )

CO2 virial compensation [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CO2_cork_holland91: RealGas = CORK(   mrk=MRKImplicitFluidHP91(     _a_coefficients=(7.412e-05, -1.0891e-08, -3.4203e-11, 0.0),     _b=3.057e-05,     _Ta=0.0,     _Tc=304.15   ),   virial=VirialCompensation(     a_coefficients=(1.3379e-10, -1.0173999999999999e-13),     b_coefficients=(-7.175966957560494e-08, 2.4469483174946712e-11),     c_coefficients=(0.0, 0.0),     P0=5000.0   ),   critical_data=CriticalData(temperature=1.0, pressure=1.0) )

CO2 cork [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CO2_cork_holland91_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKImplicitFluidHP91(         _a_coefficients=(7.412e-05, -1.0891e-08, -3.4203e-11, 0.0),         _b=3.057e-05,         _Ta=0.0,         _Tc=304.15       ),       virial=VirialCompensation(         a_coefficients=(1.3379e-10, -1.0173999999999999e-13),         b_coefficients=(-7.175966957560494e-08, 2.4469483174946712e-11),         c_coefficients=(0.0, 0.0),         P0=5000.0       ),       critical_data=CriticalData(temperature=1.0, pressure=1.0)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKImplicitFluidHP91(           _a_coefficients=(7.412e-05, -1.0891e-08, -3.4203e-11, 0.0),           _b=3.057e-05,           _Ta=0.0,           _Tc=304.15         ),         virial=VirialCompensation(           a_coefficients=(1.3379e-10, -1.0173999999999999e-13),           b_coefficients=(-7.175966957560494e-08, 2.4469483174946712e-11),           c_coefficients=(0.0, 0.0),           P0=5000.0         ),         critical_data=CriticalData(temperature=1.0, pressure=1.0)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CO2 cork bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2O_virial_compensation_holland91: VirialCompensation = VirialCompensation(   a_coefficients=(-3.2297554000000004e-11, 2.2215221e-14),   b_coefficients=(-9.567945402488458e-09, -1.6896504906262718e-12),   c_coefficients=(0.0, 0.0),   P0=2000.0 )

H2O virial compensation [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2O_cork_holland91: RealGas = CORK(   mrk=H2OMrkHP91(Ta=673.0, Tc=695.0),   virial=VirialCompensation(     a_coefficients=(-3.2297554000000004e-11, 2.2215221e-14),     b_coefficients=(-9.567945402488458e-09, -1.6896504906262718e-12),     c_coefficients=(0.0, 0.0),     P0=2000.0   ),   critical_data=CriticalData(temperature=1.0, pressure=1.0) )

H2O cork [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2O_cork_holland91_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=H2OMrkHP91(Ta=673.0, Tc=695.0),       virial=VirialCompensation(         a_coefficients=(-3.2297554000000004e-11, 2.2215221e-14),         b_coefficients=(-9.567945402488458e-09, -1.6896504906262718e-12),         c_coefficients=(0.0, 0.0),         P0=2000.0       ),       critical_data=CriticalData(temperature=1.0, pressure=1.0)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=H2OMrkHP91(Ta=673.0, Tc=695.0),         virial=VirialCompensation(           a_coefficients=(-3.2297554000000004e-11, 2.2215221e-14),           b_coefficients=(-9.567945402488458e-09, -1.6896504906262718e-12),           c_coefficients=(0.0, 0.0),           P0=2000.0         ),         critical_data=CriticalData(temperature=1.0, pressure=1.0)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2O cork bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2O_cork_gas_fluid_holland91: RealGas = CORK(   mrk=H2OMrkGasFluid91(Ta=673.0, Tc=695.0),   virial=VirialCompensation(     a_coefficients=(-3.2297554000000004e-11, 2.2215221e-14),     b_coefficients=(-9.567945402488458e-09, -1.6896504906262718e-12),     c_coefficients=(0.0, 0.0),     P0=2000.0   ),   critical_data=CriticalData(temperature=1.0, pressure=1.0) )

H2O cork for the gas and supercritical fluid [Holland and Powell, 1991]

atmodeller.eos._holland_powell.H2O_cork_gas_fluid_holland91_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=H2OMrkGasFluid91(Ta=673.0, Tc=695.0),       virial=VirialCompensation(         a_coefficients=(-3.2297554000000004e-11, 2.2215221e-14),         b_coefficients=(-9.567945402488458e-09, -1.6896504906262718e-12),         c_coefficients=(0.0, 0.0),         P0=2000.0       ),       critical_data=CriticalData(temperature=1.0, pressure=1.0)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=H2OMrkGasFluid91(Ta=673.0, Tc=695.0),         virial=VirialCompensation(           a_coefficients=(-3.2297554000000004e-11, 2.2215221e-14),           b_coefficients=(-9.567945402488458e-09, -1.6896504906262718e-12),           c_coefficients=(0.0, 0.0),           P0=2000.0         ),         critical_data=CriticalData(temperature=1.0, pressure=1.0)       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2O cork for the gas and supercritical fluid bounded [Holland and Powell, 1991]

atmodeller.eos._holland_powell.CO2_virial_compensation_holland98: VirialCompensation = VirialCompensation(   a_coefficients=(5.40776e-11, -1.59046e-14),   b_coefficients=(-5.6351155448668494e-08, 7.757604687595265e-12),   c_coefficients=(0.0, 0.0),   P0=5000.0 )

CO2 virial compensation [Holland and Powell, 1998]

atmodeller.eos._holland_powell.CO2_cork_holland98: RealGas = CORK(   mrk=MRKImplicitFluidHP91(     _a_coefficients=(7.412e-05, -1.0891e-08, -3.4203e-11, 0.0),     _b=3.057e-05,     _Ta=0.0,     _Tc=304.15   ),   virial=VirialCompensation(     a_coefficients=(5.40776e-11, -1.59046e-14),     b_coefficients=(-5.6351155448668494e-08, 7.757604687595265e-12),     c_coefficients=(0.0, 0.0),     P0=5000.0   ),   critical_data=CriticalData(temperature=1.0, pressure=1.0) )

CO2 cork [Holland and Powell, 1998]

atmodeller.eos._holland_powell.CO2_cork_holland98_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=MRKImplicitFluidHP91(         _a_coefficients=(7.412e-05, -1.0891e-08, -3.4203e-11, 0.0),         _b=3.057e-05,         _Ta=0.0,         _Tc=304.15       ),       virial=VirialCompensation(         a_coefficients=(5.40776e-11, -1.59046e-14),         b_coefficients=(-5.6351155448668494e-08, 7.757604687595265e-12),         c_coefficients=(0.0, 0.0),         P0=5000.0       ),       critical_data=CriticalData(temperature=1.0, pressure=1.0)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=MRKImplicitFluidHP91(           _a_coefficients=(7.412e-05, -1.0891e-08, -3.4203e-11, 0.0),           _b=3.057e-05,           _Ta=0.0,           _Tc=304.15         ),         virial=VirialCompensation(           a_coefficients=(5.40776e-11, -1.59046e-14),           b_coefficients=(-5.6351155448668494e-08, 7.757604687595265e-12),           c_coefficients=(0.0, 0.0),           P0=5000.0         ),         critical_data=CriticalData(temperature=1.0, pressure=1.0)       ),       p_eval=120000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=120000.0     ),     ExperimentalCalibration(pressure_min=120000.0)   ),   upper_pressure_bounds=(1.0, 120000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CO2 cork bounded [Holland and Powell, 1998]

atmodeller.eos._holland_powell.H2O_virial_compensation_holland98: VirialCompensation = VirialCompensation(   a_coefficients=(1.9853e-11, 0.0),   b_coefficients=(-2.8172731674440095e-08, 0.0),   c_coefficients=(1.428509632878367e-07, 0.0),   P0=2000.0 )

H2O virial compensation [Holland and Powell, 1998]

atmodeller.eos._holland_powell.H2O_cork_holland98: RealGas = CORK(   mrk=H2OMrkHP91(Ta=673.0, Tc=695.0),   virial=VirialCompensation(     a_coefficients=(1.9853e-11, 0.0),     b_coefficients=(-2.8172731674440095e-08, 0.0),     c_coefficients=(1.428509632878367e-07, 0.0),     P0=2000.0   ),   critical_data=CriticalData(temperature=1.0, pressure=1.0) )

H2O cork [Holland and Powell, 1998]

atmodeller.eos._holland_powell.H2O_cork_holland98_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=H2OMrkHP91(Ta=673.0, Tc=695.0),       virial=VirialCompensation(         a_coefficients=(1.9853e-11, 0.0),         b_coefficients=(-2.8172731674440095e-08, 0.0),         c_coefficients=(1.428509632878367e-07, 0.0),         P0=2000.0       ),       critical_data=CriticalData(temperature=1.0, pressure=1.0)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=H2OMrkHP91(Ta=673.0, Tc=695.0),         virial=VirialCompensation(           a_coefficients=(1.9853e-11, 0.0),           b_coefficients=(-2.8172731674440095e-08, 0.0),           c_coefficients=(1.428509632878367e-07, 0.0),           P0=2000.0         ),         critical_data=CriticalData(temperature=1.0, pressure=1.0)       ),       p_eval=120000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=120000.0     ),     ExperimentalCalibration(pressure_min=120000.0)   ),   upper_pressure_bounds=(1.0, 120000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2O cork bounded [Holland and Powell, 1998]

atmodeller.eos._holland_powell.H2O_cork_gas_fluid_holland98: RealGas = CORK(   mrk=H2OMrkGasFluid91(Ta=673.0, Tc=695.0),   virial=VirialCompensation(     a_coefficients=(1.9853e-11, 0.0),     b_coefficients=(-2.8172731674440095e-08, 0.0),     c_coefficients=(1.428509632878367e-07, 0.0),     P0=2000.0   ),   critical_data=CriticalData(temperature=1.0, pressure=1.0) )

H2O cork for the gas and supercritical fluid [Holland and Powell, 1998]

atmodeller.eos._holland_powell.H2O_cork_gas_fluid_holland98_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     CORK(       mrk=H2OMrkGasFluid91(Ta=673.0, Tc=695.0),       virial=VirialCompensation(         a_coefficients=(1.9853e-11, 0.0),         b_coefficients=(-2.8172731674440095e-08, 0.0),         c_coefficients=(1.428509632878367e-07, 0.0),         P0=2000.0       ),       critical_data=CriticalData(temperature=1.0, pressure=1.0)     ),     UpperBoundRealGas(       real_gas=CORK(         mrk=H2OMrkGasFluid91(Ta=673.0, Tc=695.0),         virial=VirialCompensation(           a_coefficients=(1.9853e-11, 0.0),           b_coefficients=(-2.8172731674440095e-08, 0.0),           c_coefficients=(1.428509632878367e-07, 0.0),           P0=2000.0         ),         critical_data=CriticalData(temperature=1.0, pressure=1.0)       ),       p_eval=120000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=1873.0,       pressure_min=1.0,       pressure_max=120000.0     ),     ExperimentalCalibration(pressure_min=120000.0)   ),   upper_pressure_bounds=(1.0, 120000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2O cork for the gas and supercritical fluid bounded [Holland and Powell, 1998]

atmodeller.eos._holland_powell.get_holland_eos_models() dict[str, RealGas]

Gets a dictionary of EOS models

The naming convention is as follows:

[species]_[eos model]_[citation]

‘cs’ refers to corresponding states.

Returns:

Dictionary of EOS models

atmodeller.eos._holley module

Real gas EOS from [Holley et al., 1958]

atmodeller.eos._holley.volume_conversion(x: int | float) float

Volume conversion for Holley et al. [1958] units

atmodeller.eos._holley.A0_conversion(x: int | float) float

\(PV^2\) conversion for Holley et al. [1958] units

atmodeller.eos._holley.atm2bar(x: int | float) float

Atmosphere to bar conversion

class atmodeller.eos._holley.BeattieBridgeman(A0: Any, a: Any, B0: Any, b: Any, c: Any)

Bases: RealGas

Beattie-Bridgeman equation [Holley et al., 1958, Equation 1]

\[PV^2 = RT\left(1-\frac{c}{VT^3}\right)\left(V+B_0-\frac{bB_0}{V}\right) - A_0\left(1-\frac{a}{V}\right)\]
Parameters:
  • A0 – A0 empirical constant

  • a – a empirical constant

  • B0 – B0 empirical constant

  • b – b empirical constant

  • c – c empirical constant

A0: float

A0 empirical constant

a: float

a empirical constant

B0: float

B0 empirical constant

b: float

b empirical constant

c: float

c empirical constant

_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume [Holley et al., 1958, Equation 2]

\[PV^4 - RTV^3 - \left(RTB_0 - \frac{Rc}{T^2}-A_0\right)V^2 +\left(RTbB_0+\frac{RcB_0}{T^2}-aA_0\right)V - \frac{RcbB_0}{T^2}=0\]
Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity [Holley et al., 1958, Equation 11].

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Solves the BB equation numerically to compute the volume.

Holley et al. [1958] doesn’t say which root to take, but one real root is very small and the maximum real root gives a volume that agrees with the tabulated compressibility factor for all species.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in units required for internal Atmodeller operations.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

atmodeller.eos._holley.pressure_min: float = 0.101325

Minimum pressure for Holley et al. [1958]

atmodeller.eos._holley.H2_beattie_holley58: RealGas = BeattieBridgeman(   A0=2.00116875e-07,   a=-5.060000000000001e-06,   B0=2.096e-05,   b=-4.359e-05,   c=0.504 )

H2 Beattie-Bridgeman [Holley et al., 1958]

atmodeller.eos._holley.H2_beattie_holley58_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     BeattieBridgeman(       A0=2.00116875e-07,       a=-5.060000000000001e-06,       B0=2.096e-05,       b=-4.359e-05,       c=0.504     ),     UpperBoundRealGas(       real_gas=BeattieBridgeman(         A0=2.00116875e-07,         a=-5.060000000000001e-06,         B0=2.096e-05,         b=-4.359e-05,         c=0.504       ),       p_eval=1013.25     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=0.101325),     ExperimentalCalibration(       temperature_min=30.0,       temperature_max=1000.0,       pressure_min=0.101325,       pressure_max=1013.25     ),     ExperimentalCalibration(pressure_min=1013.25)   ),   upper_pressure_bounds=(0.101325, 1013.25),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2 Beattie-Bridgeman bounded [Holley et al., 1958]

atmodeller.eos._holley.N2_beattie_holley58: RealGas = BeattieBridgeman(   A0=1.3623146249999999e-06,   a=2.617e-05,   B0=5.046e-05,   b=-6.910000000000001e-06,   c=42.0 )

N2 Beattie-Bridgeman [Holley et al., 1958]

atmodeller.eos._holley.N2_beattie_holley58_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     BeattieBridgeman(       A0=1.3623146249999999e-06,       a=2.617e-05,       B0=5.046e-05,       b=-6.910000000000001e-06,       c=42.0     ),     UpperBoundRealGas(       real_gas=BeattieBridgeman(         A0=1.3623146249999999e-06,         a=2.617e-05,         B0=5.046e-05,         b=-6.910000000000001e-06,         c=42.0       ),       p_eval=1013.25     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=0.101325),     ExperimentalCalibration(       temperature_min=70.0,       temperature_max=1000.0,       pressure_min=0.101325,       pressure_max=1013.25     ),     ExperimentalCalibration(pressure_min=1013.25)   ),   upper_pressure_bounds=(0.101325, 1013.25),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

N2 Beattie-Bridgeman bounded [Holley et al., 1958]

atmodeller.eos._holley.O2_beattie_holley58: RealGas = BeattieBridgeman(   A0=1.510857075e-06,   a=2.5620000000000002e-05,   B0=4.6240000000000005e-05,   b=4.208e-06,   c=48.0 )

O2 Beattie-Bridgeman [Holley et al., 1958]

atmodeller.eos._holley.O2_beattie_holley58_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     BeattieBridgeman(       A0=1.510857075e-06,       a=2.5620000000000002e-05,       B0=4.6240000000000005e-05,       b=4.208e-06,       c=48.0     ),     UpperBoundRealGas(       real_gas=BeattieBridgeman(         A0=1.510857075e-06,         a=2.5620000000000002e-05,         B0=4.6240000000000005e-05,         b=4.208e-06,         c=48.0       ),       p_eval=1013.25     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=0.101325),     ExperimentalCalibration(       temperature_min=100.0,       temperature_max=1000.0,       pressure_min=0.101325,       pressure_max=1013.25     ),     ExperimentalCalibration(pressure_min=1013.25)   ),   upper_pressure_bounds=(0.101325, 1013.25),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

O2 Beattie-Bridgeman bounded [Holley et al., 1958]

atmodeller.eos._holley.CO2_beattie_holley58: RealGas = BeattieBridgeman(   A0=5.0728361250000004e-06, a=7.132e-05, B0=0.00010476, b=7.235e-05, c=660.0 )

CO2 Beattie-Bridgeman [Holley et al., 1958]

atmodeller.eos._holley.CO2_beattie_holley58_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     BeattieBridgeman(       A0=5.0728361250000004e-06,       a=7.132e-05,       B0=0.00010476,       b=7.235e-05,       c=660.0     ),     UpperBoundRealGas(       real_gas=BeattieBridgeman(         A0=5.0728361250000004e-06,         a=7.132e-05,         B0=0.00010476,         b=7.235e-05,         c=660.0       ),       p_eval=1013.25     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=0.101325),     ExperimentalCalibration(       temperature_min=200.0,       temperature_max=1000.0,       pressure_min=0.101325,       pressure_max=1013.25     ),     ExperimentalCalibration(pressure_min=1013.25)   ),   upper_pressure_bounds=(0.101325, 1013.25),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CO2 Beattie-Bridgeman bounded [Holley et al., 1958]

atmodeller.eos._holley.NH3_beattie_holley58: RealGas = BeattieBridgeman(   A0=2.4247072499999992e-06,   a=0.00017031,   B0=3.415e-05,   b=0.00019112000000000003,   c=4768.7 )

NH3 Beattie-Bridgeman [Holley et al., 1958]

atmodeller.eos._holley.NH3_beattie_holley58_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     BeattieBridgeman(       A0=2.4247072499999992e-06,       a=0.00017031,       B0=3.415e-05,       b=0.00019112000000000003,       c=4768.7     ),     UpperBoundRealGas(       real_gas=BeattieBridgeman(         A0=2.4247072499999992e-06,         a=0.00017031,         B0=3.415e-05,         b=0.00019112000000000003,         c=4768.7       ),       p_eval=506.625     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=0.101325),     ExperimentalCalibration(       temperature_min=300.0,       temperature_max=1000.0,       pressure_min=0.101325,       pressure_max=506.625     ),     ExperimentalCalibration(pressure_min=506.625)   ),   upper_pressure_bounds=(0.101325, 506.625),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

NH3 Beattie-Bridgeman bounded [Holley et al., 1958]

atmodeller.eos._holley.CH4_beattie_holley58: RealGas = BeattieBridgeman(   A0=2.3070689249999997e-06,   a=1.855e-05,   B0=5.5870000000000005e-05,   b=-1.587e-05,   c=128.3 )

CH4 Beattie-Bridgeman [Holley et al., 1958]

atmodeller.eos._holley.CH4_beattie_holley58_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     BeattieBridgeman(       A0=2.3070689249999997e-06,       a=1.855e-05,       B0=5.5870000000000005e-05,       b=-1.587e-05,       c=128.3     ),     UpperBoundRealGas(       real_gas=BeattieBridgeman(         A0=2.3070689249999997e-06,         a=1.855e-05,         B0=5.5870000000000005e-05,         b=-1.587e-05,         c=128.3       ),       p_eval=1013.25     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=0.101325),     ExperimentalCalibration(       temperature_min=100.0,       temperature_max=1000.0,       pressure_min=0.101325,       pressure_max=1013.25     ),     ExperimentalCalibration(pressure_min=1013.25)   ),   upper_pressure_bounds=(0.101325, 1013.25),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CH4 Beattie-Bridgeman bounded [Holley et al., 1958]

atmodeller.eos._holley.He_beattie_holley58: RealGas = BeattieBridgeman(   A0=2.18862e-08, a=5.9839999999999996e-05, B0=1.4e-05, b=0.0, c=0.04 )

He Beattie-Bridgeman [Holley et al., 1958]

atmodeller.eos._holley.He_beattie_holley58_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     BeattieBridgeman(       A0=2.18862e-08, a=5.9839999999999996e-05, B0=1.4e-05, b=0.0, c=0.04     ),     UpperBoundRealGas(       real_gas=BeattieBridgeman(         A0=2.18862e-08, a=5.9839999999999996e-05, B0=1.4e-05, b=0.0, c=0.04       ),       p_eval=1013.25     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=0.101325),     ExperimentalCalibration(       temperature_min=10.0,       temperature_max=1000.0,       pressure_min=0.101325,       pressure_max=1013.25     ),     ExperimentalCalibration(pressure_min=1013.25)   ),   upper_pressure_bounds=(0.101325, 1013.25),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

He Beattie-Bridgeman bounded [Holley et al., 1958]

atmodeller.eos._holley.get_holley_eos_models() dict[str, RealGas]

Gets a dictionary of Holley EOS models

The naming convention is as follows:

[species]_[eos model]_[citation]

Returns:

Dictionary of EOS models

atmodeller.eos._reid_connolly module

Real gas EOSs from Connolly [2016], Reid et al. [1977]

class atmodeller.eos._reid_connolly.RedlichKwong49(critical_data: CriticalData)

Bases: RedlichKwongABC

Redlich-Kwong 1949 model

Repulsive pressure term from van der Waals [Connolly, 2016, Equation 1, Redlich and Kwong, 1949] Attractive pressure term from Redlich-Kwong [Connolly, 2016, Equation 4, Redlich and Kwong, 1949]

Parameters:

critical_data – Critical data

critical_data: CriticalData
_a: float
_b: float
property critical_pressure: float

Critical pressure in bar

property critical_temperature: float

Critical temperature in K

classmethod create(hill_formula: str, suffix: str = '') RedlichKwong49

Gets the Redlich-Kwong 1949 (RK49) model for a given species.

Parameters:
  • hill_formula – Hill formula

  • suffix – Suffix. Defaults to an empty string.

Returns:

An RK49 model for the species

a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

RK49 a parameter [Redlich and Kwong, 1949, Equation 4].

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

RK49 a parameter in \((\mathrm{m}^3\ \mathrm{mol}^{-1})^2\ \mathrm{K}^{1/2}\ \mathrm{bar}\)

b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

RK49 b parameter [Redlich and Kwong, 1949, Equation 5].

Returns:

RK49 b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\).

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume-explicit equation [Holland and Powell, 1991, Equation 7]

Without complications of critical phenomena the RK equation can be simplified using the approximation:

\[V \sim \frac{RT}{P} + b\]

where \(V\) is volume, \(R\) is the gas constant, \(T\) is temperature, \(P\) is pressure, and \(b\) corrects for the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

atmodeller.eos._reid_connolly.experimental_calibration_connolly16: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=1000.0,   temperature_max=10000.0,   pressure_min=1.0,   pressure_max=50000.0 )

Experimental calibration for [Connolly, 2016] models

atmodeller.eos._reid_connolly.experimental_calibration_reid87: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=300.0,   temperature_max=500.0,   pressure_min=1.0,   pressure_max=100.0 )

Experimental calibration for [Reid et al., 1977] models

atmodeller.eos._reid_connolly.OSi_rk49_connolly16: RealGas = RedlichKwong49(   critical_data=CriticalData(temperature=3431.0, pressure=4544.0),   _a=0.000448433,   _b=5.43922e-06 )

OSi Redlich-Kwong [Connolly, 2016]

atmodeller.eos._reid_connolly.H4Si_rk49_reid87: RealGas = RedlichKwong49(   critical_data=CriticalData(temperature=269.7, pressure=48.4),   _a=0.000448433,   _b=5.43922e-06 )

H4Si Redlich-Kwong [Reid et al., 1977]

atmodeller.eos._reid_connolly.CHN_rk49_reid87: RealGas = RedlichKwong49(   critical_data=CriticalData(temperature=456.7, pressure=53.9),   _a=0.000448433,   _b=5.43922e-06 )

CHN Redlich-Kwong [Reid et al., 1977]

atmodeller.eos._reid_connolly.H3N_rk49_reid87: RealGas = RedlichKwong49(   critical_data=CriticalData(temperature=405.5, pressure=113.5),   _a=0.000448433,   _b=5.43922e-06 )

H3N Redlich-Kwong [Reid et al., 1977]

atmodeller.eos._reid_connolly.OSi_rk49_connolly16_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     RedlichKwong49(       critical_data=CriticalData(temperature=3431.0, pressure=4544.0),       _a=0.000448433,       _b=5.43922e-06     ),     UpperBoundRealGas(       real_gas=RedlichKwong49(         critical_data=CriticalData(temperature=3431.0, pressure=4544.0),         _a=0.000448433,         _b=5.43922e-06       ),       p_eval=50000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=1000.0,       temperature_max=10000.0,       pressure_min=1.0,       pressure_max=50000.0     ),     ExperimentalCalibration(pressure_min=50000.0)   ),   upper_pressure_bounds=(1.0, 50000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

OSi Redlich-Kwong bounded [Connolly, 2016]

atmodeller.eos._reid_connolly.get_reid_connolly_eos_models() dict[str, RealGas]

Gets a dictionary of EOS models

The naming convention is as follows:

[species]_[eos model]_[citation]

Returns:

Dictionary of EOS models

atmodeller.eos._saxena module

Real gas EOSs from Saxena and Fei [1987], Saxena and Fei [1987], Saxena and Fei [1988], Shi and Saxena [1992]

The papers state a volume integration from \(P_0\) to \(P\), where \(f(P_0=1)=1\). Hence for bounded EOS a minimum pressure of 1 bar is assumed.

class atmodeller.eos._saxena.SaxenaABC(a_coefficients: Any, b_coefficients: Any, c_coefficients: Any, d_coefficients: Any, critical_data: CriticalData = CriticalData(temperature=1.0, pressure=1.0))

Bases: RealGas

A real gas EOS from Shi and Saxena [1992]

This form of the EOS can also be used for the models in Saxena and Fei [1987], Saxena and Fei [1987], Saxena and Fei [1988].

Parameters:
  • a_coefficientsa coefficients

  • b_coefficientsb coefficients

  • c_coefficientsc coefficients

  • d_coefficientsd coefficients

  • critical_data – Critical data. Defaults to empty.

a_coefficients: tuple[float, ...]

a coefficients

b_coefficients: tuple[float, ...]

b coefficients

c_coefficients: tuple[float, ...]

c coefficients

d_coefficients: tuple[float, ...]

d coefficients

critical_data: CriticalData = CriticalData(temperature=1.0, pressure=1.0)

Critical data

abstractmethod _get_compressibility_coefficient(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, coefficients: tuple[float, ...]) Array

General form of the coefficients for the compressibility calculation [Shi and Saxena, 1992, Equation 1]

Parameters:
  • scaled_temperature – Scaled temperature, which is dimensionless

  • coefficients – Tuple of the coefficients a, b, c, or d.

Returns

The relevant coefficient

property critical_pressure: float

Critical pressure in bar

property critical_temperature: float

Critical temperature in K

a(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

a parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

a parameter

b(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

b parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

b parameter

c(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

c parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

c parameter

d(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

d parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

d parameter

scaled_pressure(pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Scaled (reduced) pressure

Parameters:

pressure – Pressure in bar

Returns:

The scaled (reduced) pressure, which is dimensionless

scaled_temperature(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Scaled (reduced) temperature

Parameters:

temperature – Temperature in K

Returns:

The scaled (reduced) temperature, which is dimensionless

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Compressibility factor [Shi and Saxena, 1992, Equation 2]

This overrides the base class because the compressibility factor is used to determine the volume, whereas in the base class the volume is used to determine the compressibility factor.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

The compressibility factor, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume [Shi and Saxena, 1992, Equation 1]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Shi and Saxena, 1992, Equation 11]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos._saxena.SaxenaFiveCoefficients(a_coefficients: Any, b_coefficients: Any, c_coefficients: Any, d_coefficients: Any, critical_data: CriticalData = CriticalData(temperature=1.0, pressure=1.0))

Bases: SaxenaABC

Real gas EOS with five coefficients, which is generally used for low pressures

_get_compressibility_coefficient(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, coefficients: tuple[float, ...]) Array

General form of the coefficients for the compressibility calculation [Shi and Saxena, 1992, Equation 3b]

Parameters:
  • temperature – Scaled temperature, which is dimensionless

  • coefficients – Tuple of the coefficients a, b, c, or d.

Returns

The relevant coefficient

_abc_impl = <_abc._abc_data object>
a(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

a parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

a parameter

b(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

b parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

b parameter

c(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

c parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

c parameter

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Compressibility factor [Shi and Saxena, 1992, Equation 2]

This overrides the base class because the compressibility factor is used to determine the volume, whereas in the base class the volume is used to determine the compressibility factor.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

The compressibility factor, which is dimensionless

critical_data: CriticalData = CriticalData(temperature=1.0, pressure=1.0)

Critical data

property critical_pressure: float

Critical pressure in bar

property critical_temperature: float

Critical temperature in K

d(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

d parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

d parameter

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

scaled_pressure(pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Scaled (reduced) pressure

Parameters:

pressure – Pressure in bar

Returns:

The scaled (reduced) pressure, which is dimensionless

scaled_temperature(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Scaled (reduced) temperature

Parameters:

temperature – Temperature in K

Returns:

The scaled (reduced) temperature, which is dimensionless

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume [Shi and Saxena, 1992, Equation 1]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Shi and Saxena, 1992, Equation 11]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

a_coefficients: tuple[float, ...]

a coefficients

b_coefficients: tuple[float, ...]

b coefficients

c_coefficients: tuple[float, ...]

c coefficients

d_coefficients: tuple[float, ...]

d coefficients

class atmodeller.eos._saxena.SaxenaEightCoefficients(a_coefficients: Any, b_coefficients: Any, c_coefficients: Any, d_coefficients: Any, critical_data: CriticalData = CriticalData(temperature=1.0, pressure=1.0))

Bases: SaxenaABC

Real gas EOS with eight coefficients, which is generally used for high pressures

_get_compressibility_coefficient(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, coefficients: tuple[float, ...]) Array

General form of the coefficients for the compressibility calculation [Shi and Saxena, 1992, Equation 3a]

Parameters:
  • temperature – Scaled temperature, which is dimensionless

  • coefficients – Tuple of the coefficients a, b, c, or d.

Returns

The relevant coefficient

_abc_impl = <_abc._abc_data object>
a(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

a parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

a parameter

b(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

b parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

b parameter

c(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

c parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

c parameter

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Compressibility factor [Shi and Saxena, 1992, Equation 2]

This overrides the base class because the compressibility factor is used to determine the volume, whereas in the base class the volume is used to determine the compressibility factor.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

The compressibility factor, which is dimensionless

critical_data: CriticalData = CriticalData(temperature=1.0, pressure=1.0)

Critical data

property critical_pressure: float

Critical pressure in bar

property critical_temperature: float

Critical temperature in K

d(scaled_temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

d parameter

Parameters:

scaled_temperature – Scaled temperature, which is dimensionless

Returns:

d parameter

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

scaled_pressure(pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Scaled (reduced) pressure

Parameters:

pressure – Pressure in bar

Returns:

The scaled (reduced) pressure, which is dimensionless

scaled_temperature(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Scaled (reduced) temperature

Parameters:

temperature – Temperature in K

Returns:

The scaled (reduced) temperature, which is dimensionless

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume [Shi and Saxena, 1992, Equation 1]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Shi and Saxena, 1992, Equation 11]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

a_coefficients: tuple[float, ...]

a coefficients

b_coefficients: tuple[float, ...]

b coefficients

c_coefficients: tuple[float, ...]

c coefficients

d_coefficients: tuple[float, ...]

d coefficients

atmodeller.eos._saxena._H2_low_pressure_SS92: RealGas = SaxenaFiveCoefficients(   a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),   b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),   c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),   d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),   critical_data=CriticalData(temperature=33.25, pressure=12.9696) )

H2 low pressure (<1000 bar) [Shi and Saxena, 1992, Table 1b]

The coefficients are the same as for the corresponding states model in Shi and Saxena [1992, Table 1a] because they originate from Saxena and Fei [1987, Equation 23].

In Saxena and Fei [1987, Equation 23] the final c coefficient is 0.1472e-1, not 0.1427e-1 as given in Shi and Saxena [1992, Table 1b]. The earlier work is assumed to be correct.

atmodeller.eos._saxena._H2_high_pressure_SS92: RealGas = SaxenaEightCoefficients(   a_coefficients=(2.2615, 0.0, -68.712, 0.0, -10573.0, 0.0, 0.0, -0.16936),   b_coefficients=(-0.00026707, 0.0, 0.20173, 0.0, 4.5759, 0.0, 0.0, 3.1452e-05),   c_coefficients=(     -2.3376e-09, 0.0, 3.4091e-07, 0.0, -0.0014188, 0.0, 0.0, 3.0117e-10   ),   d_coefficients=(-3.2606e-15, 0.0, 2.4402e-12, 0.0, -2.4027e-09, 0.0, 0.0, 0.0) )

H2 high pressure (>1000 bar) [Shi and Saxena, 1992, Table 1b]

This model cannot be a corresponding states model because the data do not appear correct when plotted, so presumably it requires the actual temperature and pressure (hence critical data are not provided as arguments). Visually, the fit compares well to _H2_high_pressure_SS92_refit.

atmodeller.eos._saxena._H2_high_pressure_SS92_refit: RealGas = SaxenaEightCoefficients(   a_coefficients=(     1.00574428, 0.0, 0.00193022092, 0.0, -0.379261142, 0.0, 0.0, -0.00244217972   ),   b_coefficients=(     0.00131517888,     0.0,     0.0722328441,     0.0,     0.0484354163,     0.0,     0.0,     -0.000419624507   ),   c_coefficients=(     2.64454401e-06,     0.0,     -5.18445629e-05,     0.0,     -0.000205045979,     0.0,     0.0,     -3.64843213e-07   ),   d_coefficients=(     2.28281107e-11, 0.0, -1.07138603e-08, 0.0, 3.67720815e-07, 0.0, 0.0, 0.0   ),   critical_data=CriticalData(temperature=33.25, pressure=12.9696) )

H2 high pressure (>1000 bar)

This model has been refitted using a least square regression using the experimental volume, pressure, and temperature data from Presnall [1969], Ross et al. [1983] assuming the same functional form for pressures above 1 kbar as given by Shi and Saxena [1992, Equation 2 and 3a], including which coefficients are set to zero [Shi and Saxena, 1992, Table 1b]. The refitting is performed using reduced temperature and pressure.

atmodeller.eos._saxena.H2_SS92: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=33.25, pressure=12.9696)     ),     SaxenaEightCoefficients(       a_coefficients=(2.2615, 0.0, -68.712, 0.0, -10573.0, 0.0, 0.0, -0.16936),       b_coefficients=(         -0.00026707, 0.0, 0.20173, 0.0, 4.5759, 0.0, 0.0, 3.1452e-05       ),       c_coefficients=(         -2.3376e-09, 0.0, 3.4091e-07, 0.0, -0.0014188, 0.0, 0.0, 3.0117e-10       ),       d_coefficients=(         -3.2606e-15, 0.0, 2.4402e-12, 0.0, -2.4027e-09, 0.0, 0.0, 0.0       )     ),     UpperBoundRealGas(       real_gas=SaxenaEightCoefficients(         a_coefficients=(2.2615, 0.0, -68.712, 0.0, -10573.0, 0.0, 0.0, -0.16936),         b_coefficients=(           -0.00026707, 0.0, 0.20173, 0.0, 4.5759, 0.0, 0.0, 3.1452e-05         ),         c_coefficients=(           -2.3376e-09, 0.0, 3.4091e-07, 0.0, -0.0014188, 0.0, 0.0, 3.0117e-10         ),         d_coefficients=(           -3.2606e-15, 0.0, 2.4402e-12, 0.0, -2.4027e-09, 0.0, 0.0, 0.0         )       ),       p_eval=100000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=100000.0),     ExperimentalCalibration(pressure_min=100000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 100000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2 EOS, which combines the low and high pressure EOS [Shi and Saxena, 1992, Table 1b]

Impose an upper bound on the high pressure fit to avoid unphysical extrapolation for pressures beyond around 100 kbar. This limit was determined by visual inspection of plots of the fugacity versus pressure at various temperatures, where beyond 100 kbar a sudden downturn in fugacity was observed due to the breakdown of the functional form (polynomial representation).

atmodeller.eos._saxena._H2_high_pressure_SF88: RealGas = SaxenaEightCoefficients(   a_coefficients=(1.6688, 0.0, -2.0759, 0.0, -9.6173, 0.0, 0.0, -0.1694),   b_coefficients=(-0.002041, 0.0, 0.07923, 0.0, 0.054295, 0.0, 0.0, 0.00040887),   c_coefficients=(     -2.1693e-07, 0.0, 1.7406e-06, 0.0, -0.00021885, 0.0, 0.0, 5.0897e-05   ),   d_coefficients=(-7.1635e-12, 0.0, 1.6197e-10, 0.0, -4.8181e-09, 0.0, 0.0, 0.0),   critical_data=CriticalData(temperature=33.25, pressure=12.9696) )

H2 high pressure [Saxena and Fei, 1988, Table on page 1196]

This model does not at all agree with Shi and Saxena [1992] or data, regardless of whether the temperature and pressure inputs are the actual or reduced values.

Further investigations are warranted before this model should be used.

atmodeller.eos._saxena.SO2_SS92: RealGas = SaxenaEightCoefficients(   a_coefficients=(     0.92854, 0.043269, -0.24671, 0.0, 0.24999, 0.0, -0.53182, -0.016461   ),   b_coefficients=(     0.00084866, -0.0018379, 0.066787, 0.0, -0.029427, 0.0, 0.029003, 0.0054808   ),   c_coefficients=(     -0.00035456,     2.3316e-05,     0.00094159,     0.0,     -0.00081653,     0.0,     0.00023154,     5.5542e-05   ),   d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),   critical_data=CriticalData(temperature=430.95, pressure=78.7295) )

SO2 EOS [Shi and Saxena, 1992, Table 1c] from 1 to 10e3 bar

atmodeller.eos._saxena.SO2_SS92_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaEightCoefficients(       a_coefficients=(         0.92854, 0.043269, -0.24671, 0.0, 0.24999, 0.0, -0.53182, -0.016461       ),       b_coefficients=(         0.00084866,         -0.0018379,         0.066787,         0.0,         -0.029427,         0.0,         0.029003,         0.0054808       ),       c_coefficients=(         -0.00035456,         2.3316e-05,         0.00094159,         0.0,         -0.00081653,         0.0,         0.00023154,         5.5542e-05       ),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=430.95, pressure=78.7295)     ),     UpperBoundRealGas(       real_gas=SaxenaEightCoefficients(         a_coefficients=(           0.92854, 0.043269, -0.24671, 0.0, 0.24999, 0.0, -0.53182, -0.016461         ),         b_coefficients=(           0.00084866,           -0.0018379,           0.066787,           0.0,           -0.029427,           0.0,           0.029003,           0.0054808         ),         c_coefficients=(           -0.00035456,           2.3316e-05,           0.00094159,           0.0,           -0.00081653,           0.0,           0.00023154,           5.5542e-05         ),         d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),         critical_data=CriticalData(temperature=430.95, pressure=78.7295)       ),       p_eval=10000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=10000.0),     ExperimentalCalibration(pressure_min=10000.0)   ),   upper_pressure_bounds=(1.0, 10000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

SO2 EOS [Shi and Saxena, 1992, Table 1c] from 1 to 10e3 bar

atmodeller.eos._saxena._H2S_low_pressure_SS92: RealGas = SaxenaEightCoefficients(   a_coefficients=(1.4721, 1.1177, 3.9657, 0.0, -10.028, 0.0, 4.5484, -3.82),   b_coefficients=(     0.16066, 0.10887, 0.29014, 0.0, -0.99593, 0.0, -0.18627, -0.45515   ),   c_coefficients=(     -0.28933, -0.070522, 0.39828, 0.0, -0.050533, 0.0, 0.1176, 0.33972   ),   d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),   critical_data=CriticalData(temperature=373.55, pressure=90.0779) )

H2S low pressure (1-500 bar) [Shi and Saxena, 1992, Table 1d]

atmodeller.eos._saxena._H2S_high_pressure_SS92: RealGas = SaxenaEightCoefficients(   a_coefficients=(     0.59941, -0.001557, 0.04525, 0.0, 0.36687, 0.0, -0.79248, 0.26058   ),   b_coefficients=(     0.022545, 0.0017473, 0.048253, 0.0, -0.01989, 0.0, 0.032794, -0.010985   ),   c_coefficients=(     0.00057375,     -2.0944e-06,     -0.0011894,     0.0,     0.0014661,     0.0,     -0.00075605,     -0.00027985   ),   d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),   critical_data=CriticalData(temperature=373.55, pressure=90.0779) )

H2S high pressure (500-10000 bar) [Shi and Saxena, 1992, Table 1d]

atmodeller.eos._saxena.H2S_SS92: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaEightCoefficients(       a_coefficients=(1.4721, 1.1177, 3.9657, 0.0, -10.028, 0.0, 4.5484, -3.82),       b_coefficients=(         0.16066, 0.10887, 0.29014, 0.0, -0.99593, 0.0, -0.18627, -0.45515       ),       c_coefficients=(         -0.28933, -0.070522, 0.39828, 0.0, -0.050533, 0.0, 0.1176, 0.33972       ),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=373.55, pressure=90.0779)     ),     SaxenaEightCoefficients(       a_coefficients=(         0.59941, -0.001557, 0.04525, 0.0, 0.36687, 0.0, -0.79248, 0.26058       ),       b_coefficients=(         0.022545, 0.0017473, 0.048253, 0.0, -0.01989, 0.0, 0.032794, -0.010985       ),       c_coefficients=(         0.00057375,         -2.0944e-06,         -0.0011894,         0.0,         0.0014661,         0.0,         -0.00075605,         -0.00027985       ),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=373.55, pressure=90.0779)     ),     UpperBoundRealGas(       real_gas=SaxenaEightCoefficients(         a_coefficients=(           0.59941, -0.001557, 0.04525, 0.0, 0.36687, 0.0, -0.79248, 0.26058         ),         b_coefficients=(           0.022545, 0.0017473, 0.048253, 0.0, -0.01989, 0.0, 0.032794, -0.010985         ),         c_coefficients=(           0.00057375,           -2.0944e-06,           -0.0011894,           0.0,           0.0014661,           0.0,           -0.00075605,           -0.00027985         ),         d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),         critical_data=CriticalData(temperature=373.55, pressure=90.0779)       ),       p_eval=10000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=500.0),     ExperimentalCalibration(pressure_min=500.0, pressure_max=10000.0),     ExperimentalCalibration(pressure_min=10000.0)   ),   upper_pressure_bounds=(1.0, 500.0, 10000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2S EOS, which combines the low and high pressure EOS [Shi and Saxena, 1992, Table 1d]

atmodeller.eos._saxena.get_corresponding_states_SS92(species: str) RealGas

Corresponding states [Shi and Saxena, 1992, Table 1a]

Coefficients for the low and medium pressure regimes are from Saxena and Fei [1987, Equation 23 and 21], respectively, although some values disagree either in value or sign with Shi and Saxena [1992, Table 1a]. Eventually it should be determined which is right, but for the time being it is assumed that the earlier work is correct. Coefficients for the high pressure regime are from Saxena and Fei [1987, Equation 11].

Parameters:

species – A species

Returns:

A corresponding states model for the species

atmodeller.eos._saxena.CH4_SS92: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=191.05, pressure=46.4069)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=191.05, pressure=46.4069)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=191.05, pressure=46.4069)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CH4 corresponding states [Shi and Saxena, 1992]

atmodeller.eos._saxena.CO_SS92: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=133.15, pressure=34.9571)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=133.15, pressure=34.9571)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=133.15, pressure=34.9571)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CO corresponding states [Shi and Saxena, 1992]

atmodeller.eos._saxena.CO2_SS92: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=304.15, pressure=73.8659)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=304.15, pressure=73.8659)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=304.15, pressure=73.8659)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CO2 corresponding states [Shi and Saxena, 1992]

atmodeller.eos._saxena.COS_SS92: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=377.55, pressure=65.8612)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=377.55, pressure=65.8612)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=377.55, pressure=65.8612)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

COS corresponding states [Shi and Saxena, 1992]

atmodeller.eos._saxena.O2_SS92: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=154.75, pressure=50.7638)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=154.75, pressure=50.7638)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=154.75, pressure=50.7638)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

O2 corresponding states [Shi and Saxena, 1992]

atmodeller.eos._saxena.S2_SS92: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=208.15, pressure=72.954)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=208.15, pressure=72.954)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=208.15, pressure=72.954)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

S2 corresponding states [Shi and Saxena, 1992]

atmodeller.eos._saxena.Ar_SF87: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=151.0, pressure=48.6)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=151.0, pressure=48.6)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=151.0, pressure=48.6)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

Ar corresponding states [Saxena and Fei, 1987, Equation 11]

The low pressure extension given by the corresponding states model of Shi and Saxena [1992, Table 1a] is also adopted.

atmodeller.eos._saxena.H2_SF87: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=33.25, pressure=12.9696)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=33.25, pressure=12.9696)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=33.25, pressure=12.9696)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2 corresponding states [Saxena and Fei, 1987, Equation 11]

The low pressure extension given by the corresponding states model of Shi and Saxena [1992, Table 1a] is also adopted.

atmodeller.eos._saxena.N2_SF87: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     SaxenaFiveCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.09827, 0.0, -0.2709, 0.0),       c_coefficients=(0.0, 0.0, -0.00103, 0.0, 0.01472),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=126.2, pressure=33.9)     ),     SaxenaEightCoefficients(       a_coefficients=(1.0, 0.0, 0.0, 0.0, -0.5917, 0.0, 0.0, 0.0),       b_coefficients=(0.0, 0.0, 0.09122, 0.0, 0.0, 0.0, 0.0, 0.0),       c_coefficients=(0.0, 0.0, 0.0, 0.0, 0.00014164, 0.0, 0.0, -2.8349e-06),       d_coefficients=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),       critical_data=CriticalData(temperature=126.2, pressure=33.9)     ),     SaxenaEightCoefficients(       a_coefficients=(2.0614, 0.0, 0.0, 0.0, -2.2351, 0.0, 0.0, -0.39411),       b_coefficients=(0.0, 0.0, 0.055125, 0.0, 0.039344, 0.0, 0.0, 0.0),       c_coefficients=(         0.0, 0.0, -1.8935e-06, 0.0, -1.1092e-05, 0.0, -2.1892e-05, 0.0       ),       d_coefficients=(0.0, 0.0, 5.0527e-11, 0.0, 0.0, -6.3033e-21, 0.0, 0.0),       critical_data=CriticalData(temperature=126.2, pressure=33.9)     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0, pressure_max=1000.0),     ExperimentalCalibration(pressure_min=1000.0, pressure_max=5000.0),     ExperimentalCalibration(pressure_min=5000.0)   ),   upper_pressure_bounds=(1.0, 1000.0, 5000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

N2 corresponding states [Saxena and Fei, 1987, Equation 11]

The low pressure extension given by the corresponding states model of Shi and Saxena [1992, Table 1a] is also adopted.

atmodeller.eos._saxena.get_saxena_eos_models() dict[str, RealGas]

Gets a dictionary of Saxena and colleagues EOS models

‘cs’ refers to corresponding states.

Returns:

Dictionary of EOS models

atmodeller.eos._vanderwaals module

Real gas EOS from Lide [2005]

class atmodeller.eos._vanderwaals.VanderWaals(a: Any, b: Any)

Bases: RealGas

Van der Waals EOS

Parameters:
  • a – a constant in \(\mathrm{m}^6 \mathrm{bar} \mathrm{mol}^{-2}\)

  • b – b constant in \(\mathrm{m}^3 \mathrm{mol}^{-1}\)

a: float

a constant in \(\mathrm{m}^6 \mathrm{bar} \mathrm{mol}^{-2}\)

b: float

b constant in \(\mathrm{m}^3 \mathrm{mol}^{-1}\)

_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume

Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Computes the volume numerically.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3 \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

atmodeller.eos._vanderwaals.H2_lide: RealGas = VanderWaals(a=2.452e-07, b=2.65e-05)

H2 van der Waals [Lide, 2005]

atmodeller.eos._vanderwaals.H2_lide_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=2.452e-07, b=2.65e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2 bounded to data range

atmodeller.eos._vanderwaals.He_lide: RealGas = VanderWaals(a=3.46e-08, b=2.38e-05)

He van der Waals [Lide, 2005]

atmodeller.eos._vanderwaals.He_lide_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=3.46e-08, b=2.38e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

He bounded to data range

atmodeller.eos._vanderwaals.N2_lide: RealGas = VanderWaals(a=1.37e-06, b=3.87e-05)

N2 van der Waals [Lide, 2005]

atmodeller.eos._vanderwaals.N2_lide_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=1.37e-06, b=3.87e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

N2 bounded to data range

atmodeller.eos._vanderwaals.H4Si_lide: RealGas = VanderWaals(a=4.38e-06, b=5.79e-05)

SiH4 van der Waals [Lide, 2005]

atmodeller.eos._vanderwaals.H4Si_lide_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=4.38e-06, b=5.79e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

SiH4 bounded to data range

atmodeller.eos._vanderwaals.H2O_lide: RealGas = VanderWaals(a=5.537e-06, b=3.05e-05)

H2O van der Waals [Lide, 2005]

atmodeller.eos._vanderwaals.H2O_lide_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=5.537e-06, b=3.05e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2O bounded to data range

atmodeller.eos._vanderwaals.CH4_lide: RealGas = VanderWaals(a=2.303e-06, b=4.31e-05)

CH4 van der Waals [Lide, 2005]

atmodeller.eos._vanderwaals.CH4_lide_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=2.303e-06, b=4.31e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CH4 bounded to data range

atmodeller.eos._vanderwaals.H3N_lide: RealGas = VanderWaals(a=4.225e-06, b=3.71e-05)

NH3 van der Waals [Lide, 2005]

atmodeller.eos._vanderwaals.H3N_lide_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=4.225e-06, b=3.71e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

NH3 bounded to data range

atmodeller.eos._vanderwaals.CHN_lide: RealGas = VanderWaals(a=1.29e-05, b=8.81e-05)

HCN van der Waals [Lide, 2005]

atmodeller.eos._vanderwaals.CHN_lide_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=1.29e-05, b=8.81e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

HCN bounded to data range

atmodeller.eos._vanderwaals.H4Si_isham: RealGas = VanderWaals(a=2.478e-06, b=3.275e-05)

SiH4 van der Waals (Isham) [Lide, 2005]

atmodeller.eos._vanderwaals.H4Si_isham_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=2.478e-06, b=3.275e-05)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

SiH4 (Isham) bounded to data range

atmodeller.eos._vanderwaals.OSi_isham: RealGas = VanderWaals(a=8.698e-06, b=8.582e-06)

OSi van der Waals (Isham) [Lide, 2005]

atmodeller.eos._vanderwaals.OSi_isham_bounded: RealGas = CombinedRealGas(   real_gases=(IdealGas(), VanderWaals(a=8.698e-06, b=8.582e-06)),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(pressure_min=1.0)   ),   upper_pressure_bounds=(1.0,),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

OSi (Isham) bounded to data range

atmodeller.eos._vanderwaals.get_vanderwaals_eos_models() dict[str, RealGas]

Gets a dictionary of van der Waals EOS models.

Returns:

Dictionary of EOS models

atmodeller.eos._wang module

Real gas Virial EOS

The papers state a volume integration from \(P_0\) to \(P\), where \(f(P_0=1)=1\). Hence for bounded EOS a minimum pressure of 1 bar is assumed.

class atmodeller.eos._wang.VirialQuadratic(a_coefficients: Any, b_coefficients: Any, c_coefficients: Any)

Bases: RealGas

A real gas EOS that implements the virial formulation

Parameters:
  • a_coefficientsa coefficients

  • b_coefficientsb coefficients

  • c_coefficientsc coefficients

  • critical_data – Critical data. Defaults to empty.

a_coefficients: tuple[float, ...]

a coefficients

b_coefficients: tuple[float, ...]

b coefficients

c_coefficients: tuple[float, ...]

c coefficients

_get_compressibility_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, coefficients: tuple[float, ...]) Array

General form of the coefficients for the compressibility calculation

Parameters:
  • temperature – Temperature in K

  • coefficients – Tuple of the coefficients a, b, c

Returns

The relevant coefficient

a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

a parameter

Parameters:

temperature – Temperature in K

Returns:

a parameter

b(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

b parameter

Parameters:

temperature – Temperature in K

Returns:

b parameter

c(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

c parameter

Parameters:

temperature – Temperature in K

Returns:

c parameter

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Compressibility factor

This overrides the base class because the compressibility factor is used to determine the volume, whereas in the base class the volume is used to determine the compressibility factor.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

The compressibility factor, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume [Shi and Saxena, 1992, Equation 1]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

atmodeller.eos._wang.experimental_calibration_wang18: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=1200.0,   temperature_max=4100.0,   pressure_min=1.0,   pressure_max=1387000.0 )

Experimental calibration for [Wang et al., 2018] models

atmodeller.eos._wang.H4Si_wang18_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     VirialQuadratic(       a_coefficients=(1.0, 0.0, 0.0),       b_coefficients=(0.00038552, -1.822e-07, 2.54e-11),       c_coefficients=(-1.942e-10, 1.088e-13, -1.62e-17)     ),     UpperBoundRealGas(       real_gas=VirialQuadratic(         a_coefficients=(1.0, 0.0, 0.0),         b_coefficients=(0.00038552, -1.822e-07, 2.54e-11),         c_coefficients=(-1.942e-10, 1.088e-13, -1.62e-17)       ),       p_eval=1387000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=1200.0,       temperature_max=4100.0,       pressure_min=1.0,       pressure_max=1387000.0     ),     ExperimentalCalibration(pressure_min=1387000.0)   ),   upper_pressure_bounds=(1.0, 1387000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

OSi MRK corresponding states bounded [Connolly, 2016]

atmodeller.eos._wang.get_wang_eos_models() dict[str, RealGas]

Gets a dictionary of virial EOS

Returns:

Dictionary of EOS models

atmodeller.eos._zhang_duan module

Real gas EOS from Zhang and Duan [2009]

class atmodeller.eos._zhang_duan.ZhangDuan(epsilon: Any, sigma: Any)

Bases: RealGas

Real gas EOS [Zhang and Duan, 2009]

Parameters:
  • epsilon – Lenard-Jones parameter (epsilon/kB) in K

  • sigma – Lenard-Jones parameter in \(10^{-10}\) m

coefficients: ClassVar[tuple[float, ...]] = (0.029517729893, -6337.56452413, -275265.428882, 0.00129128089283, -145.797416153, 76593.8947237, 2.58661493537e-06, 0.52126532146, -139.839523753, -2.36335007175e-08, 0.00535026383543, -0.27110649951, 25038.7836486, 0.73226726041, 0.015483335997)

Coefficients

epsilon: float

Lenard-Jones parameter (epsilon/kB) in K

sigma: float

Lenard-Jones parameter in \(10^{-10}\) m

_Pm(pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Scaled pressure

Parameters:

pressure – Pressure in bar

Returns:

Scaled pressure

_Tm(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Scaled temperature

Parameters:

temperature – Temperature in K

Returns:

Scaled temperature

_Vm(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Scaled volume

Parameters:

volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

Returns:

Scaled volume

_get_parameter(Tm: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, coefficients: tuple[float, ...]) Array

Gets the parameter (coefficient) for polynomials involving Tm terms

Parameters:
  • Tm – Scaled temperature

  • coefficients – Coefficients for this term

Returns:

Parameter (coefficient)

_S1(Tm: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, Vm: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

S1 term [Zhang and Duan, 2009, Equation 15]

Parameters:
  • Tm – Scaled temperature

  • Vm – Scaled volume

Returns:

S1 term

_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume [Zhang and Duan, 2009, Equation 8].

Note that the left-hand side of Zhang and Duan [2009, Equation 8] is the compressibility factor so should be expressed in terms of P, V, R, and T, and not the scaled equivalents.

Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

initial_volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Initial guess volume to ensure convergence to the correct root

\[V = \frac{RT}{P} \left(1 + \frac{b}{V_m}\right)\]

This is the ideal gas law with a correction for the b term based on truncating the full equation and substituting in the ideal gas volume. The 1/Vm**2 is not included because convergence did not improve with it, in fact, it got worse. Also, the initial volume is required to be positive, so the initial compressibility parameter is limited to a minimum of 0.1, which is guided by the behaviour of water to some extent.

This initial guess will eventually fail for large pressures, leaving room for an improved approach.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Initial volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Computes the volume numerically.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity [Zhang and Duan, 2009, Equation 14]

This is for a pure species and does not include the terms to enable end member mixing.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

atmodeller.eos._zhang_duan.CH4_zhang09: RealGas = ZhangDuan(epsilon=154.0, sigma=3.691)

CH4 unbounded [Zhang and Duan, 2009]

atmodeller.eos._zhang_duan.CH4_experimental_calibration: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=273.0,   temperature_max=2573.0,   pressure_min=1.0,   pressure_max=100000.0 )

Experimental calibration for CH4 [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.CH4_zhang09_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     ZhangDuan(epsilon=154.0, sigma=3.691),     UpperBoundRealGas(       real_gas=ZhangDuan(epsilon=154.0, sigma=3.691), p_eval=100000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=273.0,       temperature_max=2573.0,       pressure_min=1.0,       pressure_max=100000.0     ),     ExperimentalCalibration(pressure_min=100000.0)   ),   upper_pressure_bounds=(1.0, 100000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CH4 bounded to data range [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.H2O_zhang09: RealGas = ZhangDuan(epsilon=510.0, sigma=2.88)

H2O unbounded [Zhang and Duan, 2009]

atmodeller.eos._zhang_duan.H2O_experimental_calibration: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=673.0,   temperature_max=2573.0,   pressure_min=1.0,   pressure_max=100000.0 )

Experimental calibration for H2O [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.H2O_zhang09_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     ZhangDuan(epsilon=510.0, sigma=2.88),     UpperBoundRealGas(       real_gas=ZhangDuan(epsilon=510.0, sigma=2.88), p_eval=100000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=1.0),     ExperimentalCalibration(       temperature_min=673.0,       temperature_max=2573.0,       pressure_min=1.0,       pressure_max=100000.0     ),     ExperimentalCalibration(pressure_min=100000.0)   ),   upper_pressure_bounds=(1.0, 100000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2O bounded to data range [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.CO2_zhang09: RealGas = ZhangDuan(epsilon=235.0, sigma=3.79)

CO2 unbounded [Zhang and Duan, 2009]

atmodeller.eos._zhang_duan.CO2_experimental_calibration: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=473.0,   temperature_max=2573.0,   pressure_min=1.0,   pressure_max=100000.0 )

Experimental calibration for CO2 [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.H2_zhang09: RealGas = ZhangDuan(epsilon=31.2, sigma=2.93)

H2 unbounded [Zhang and Duan, 2009]

atmodeller.eos._zhang_duan.H2_experimental_calibration: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=250.0,   temperature_max=423.0,   pressure_min=20.0,   pressure_max=7000.0 )

Experimental calibration for H2 [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.H2_zhang09_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     ZhangDuan(epsilon=31.2, sigma=2.93),     UpperBoundRealGas(       real_gas=ZhangDuan(epsilon=31.2, sigma=2.93), p_eval=7000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=20.0),     ExperimentalCalibration(       temperature_min=250.0,       temperature_max=423.0,       pressure_min=20.0,       pressure_max=7000.0     ),     ExperimentalCalibration(pressure_min=7000.0)   ),   upper_pressure_bounds=(20.0, 7000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

H2 bounded to data range [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.CO_zhang09: RealGas = ZhangDuan(epsilon=105.6, sigma=3.66)

CO unbounded [Zhang and Duan, 2009]

atmodeller.eos._zhang_duan.CO_experimental_calibration: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=300.0,   temperature_max=573.2,   pressure_min=100.0,   pressure_max=10206.0 )

Experimental calibration for CO [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.CO_zhang09_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     ZhangDuan(epsilon=105.6, sigma=3.66),     UpperBoundRealGas(       real_gas=ZhangDuan(epsilon=105.6, sigma=3.66), p_eval=10206.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=100.0),     ExperimentalCalibration(       temperature_min=300.0,       temperature_max=573.2,       pressure_min=100.0,       pressure_max=10206.0     ),     ExperimentalCalibration(pressure_min=10206.0)   ),   upper_pressure_bounds=(100.0, 10206.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

CO bounded to data range [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.O2_zhang09: RealGas = ZhangDuan(epsilon=124.5, sigma=3.36)

O2 unbounded [Zhang and Duan, 2009]

atmodeller.eos._zhang_duan.O2_experimental_calibration: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=300.0,   temperature_max=1000.0,   pressure_min=70.0,   pressure_max=10132.0 )

Experimental calibration for O2 [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.O2_zhang09_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     ZhangDuan(epsilon=124.5, sigma=3.36),     UpperBoundRealGas(       real_gas=ZhangDuan(epsilon=124.5, sigma=3.36), p_eval=10132.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=70.0),     ExperimentalCalibration(       temperature_min=300.0,       temperature_max=1000.0,       pressure_min=70.0,       pressure_max=10132.0     ),     ExperimentalCalibration(pressure_min=10132.0)   ),   upper_pressure_bounds=(70.0, 10132.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

O2 bounded to data range [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.C2H6_zhang09: RealGas = ZhangDuan(epsilon=246.1, sigma=4.35)

C2H6 unbounded [Zhang and Duan, 2009]

atmodeller.eos._zhang_duan.C2H6_experimental_calibration: ExperimentalCalibration = ExperimentalCalibration(   temperature_min=373.0,   temperature_max=673.0,   pressure_min=300.0,   pressure_max=9000.0 )

Experimental calibration for C2H6 [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.C2H6_zhang09_bounded: RealGas = CombinedRealGas(   real_gases=(     IdealGas(),     ZhangDuan(epsilon=246.1, sigma=4.35),     UpperBoundRealGas(       real_gas=ZhangDuan(epsilon=246.1, sigma=4.35), p_eval=9000.0     )   ),   calibrations=(     ExperimentalCalibration(pressure_max=300.0),     ExperimentalCalibration(       temperature_min=373.0,       temperature_max=673.0,       pressure_min=300.0,       pressure_max=9000.0     ),     ExperimentalCalibration(pressure_min=9000.0)   ),   upper_pressure_bounds=(300.0, 9000.0),   _volume_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ),   _volume_integral_functions=(     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>,     <function to_hashable.<locals>.<lambda>>   ) )

C2H6 bounded to data range [Zhang and Duan, 2009, Table 5]

atmodeller.eos._zhang_duan.get_zhang_eos_models() dict[str, RealGas]

Gets a dictionary of Zhang and Duan EOS models.

Returns:

Dictionary of EOS models

atmodeller.eos.core module

Core classes and functions for real gas equations of state

Units for temperature and pressure are K and bar, respectively.

class atmodeller.eos.core.RealGasBase

Bases: Module

A real gas equation of state (EOS) without explicit volume calculations

For the purpose of Atmodeller calculations, i.e. solving the reaction equilibrium, it is only necessary to be able to calculate the fugacity.

abstractmethod log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

_abc_impl = <_abc._abc_data object>
class atmodeller.eos.core.RealGas

Bases: RealGasBase

A real gas equation of state (EOS) with volume calculations

Fugacity is computed using the standard relation:

\[R T \ln f = \int V dP\]

where \(R\) is the gas constant, \(T\) is temperature, \(f\) is fugacity, \(V\) is volume, and \(P\) is pressure.

abstractmethod volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Volume

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

abstractmethod volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in units required for internal Atmodeller operations.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

_abc_impl = <_abc._abc_data object>
fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

class atmodeller.eos.core.IdealGas

Bases: RealGas

Ideal gas equation of state:

\[R T = P V\]

where \(R\) is the gas constant, \(T\) is temperature, \(P\) is pressure, and \(V\) is volume.

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Volume

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in units required for internal Atmodeller operations.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos.core.RedlichKwongABC

Bases: RealGas

Redlich-Kwong EOS:

\[P = \frac{RT}{V-b} - \frac{a}{\sqrt{T}V(V+b)}\]

where \(P\) is pressure, \(T\) is temperature, \(V\) is the molar volume, \(R\) the gas constant, \(a\) corrects for the attractive potential of molecules, and \(b\) corrects for the volume.

This employs an approximation to analytically determine the volume and the volume integral.

abstractmethod a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the a parameter

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

a parameter in \((\mathrm{m}^3\ \mathrm{mol}^{-1})^2\ \mathrm{K}^{1/2}\ \mathrm{bar}\)

abstractmethod b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the b parameter

Returns:

b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume-explicit equation [Holland and Powell, 1991, Equation 7]

Without complications of critical phenomena the RK equation can be simplified using the approximation:

\[V \sim \frac{RT}{P} + b\]

where \(V\) is volume, \(R\) is the gas constant, \(T\) is temperature, \(P\) is pressure, and \(b\) corrects for the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos.core.RedlichKwongImplicitABC

Bases: RedlichKwongABC

Redlich-Kwong EOS in an implicit form

\[P = \frac{RT}{V-b} - \frac{a}{\sqrt{T}V(V+b)}\]

where \(P\) is pressure, \(T\) is temperature, \(V\) is the molar volume, \(R\) the gas constant, \(a\) corrects for the attractive potential of molecules, and \(b\) corrects for the volume.

abstractmethod initial_volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Initial guess volume for the solution to ensure convergence to the correct root

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Initial volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

A_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

A factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

A factor, which is dimensionless

B_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

B factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

B factor, which is dimensionless

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Equation A.2]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume

Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Solves the RK equation numerically to compute the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
abstractmethod a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the a parameter

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

a parameter in \((\mathrm{m}^3\ \mathrm{mol}^{-1})^2\ \mathrm{K}^{1/2}\ \mathrm{bar}\)

abstractmethod b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the b parameter

Returns:

b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos.core.RedlichKwongImplicitDenseFluidABC

Bases: RedlichKwongImplicitABC

MRK for the high density fluid phase :cite:p`HP91{Equation 6}`

initial_volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Initial guess volume to ensure convergence to the correct root

For the dense fluid phase a suitably low value must be chosen [Holland and Powell, 1991, Appendix].

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Initial volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

A_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

A factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

A factor, which is dimensionless

B_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

B factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

B factor, which is dimensionless

_abc_impl = <_abc._abc_data object>
_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume

Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

abstractmethod a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the a parameter

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

a parameter in \((\mathrm{m}^3\ \mathrm{mol}^{-1})^2\ \mathrm{K}^{1/2}\ \mathrm{bar}\)

abstractmethod b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the b parameter

Returns:

b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Solves the RK equation numerically to compute the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Equation A.2]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos.core.RedlichKwongImplicitGasABC

Bases: RedlichKwongImplicitABC

MRK for the low density gaseous phase [Holland and Powell, 1991, Equation 6a]

initial_volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Initial guess volume to ensure convergence to the correct root

For the gaseous phase a suitably high value must be chosen [Holland and Powell, 1991, Appendix].

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Initial volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

A_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

A factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

A factor, which is dimensionless

B_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

B factor [Holland and Powell, 1991, Appendix A]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

B factor, which is dimensionless

_abc_impl = <_abc._abc_data object>
_objective_function(volume: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, kwargs: dict[str, Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray]) Array

Objective function to solve for the volume

Parameters:
  • volume – Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

  • kwargs – Dictionary with other required parameters

Returns:

Residual of the objective function

abstractmethod a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the a parameter

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

a parameter in \((\mathrm{m}^3\ \mathrm{mol}^{-1})^2\ \mathrm{K}^{1/2}\ \mathrm{bar}\)

abstractmethod b() Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Gets the b parameter

Returns:

b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Solves the RK equation numerically to compute the volume.

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Equation A.2]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

class atmodeller.eos.core.VirialCompensation(a_coefficients: Any, b_coefficients: Any, c_coefficients: Any, P0: Any)

Bases: Module

A virial compensation term for the increasing deviation of the MRK volumes with pressure

General form of the equation Holland and Powell [1998] and also see Holland and Powell [1991, Equations 4 and 9]:

\[V_\mathrm{virial} = a(P-P0) + b(P-P0)^\frac{1}{2} + c(P-P0)^\frac{1}{4}\]

This form also works for the virial compensation term from Holland and Powell [1991], in which case \(c=0\).

Although this looks similar to an EOS, it only calculates an additional perturbation to the volume and the volume integral of an MRK EOS, and hence it does not return a meaningful volume or volume integral by itself.

Parameters:
  • a_coefficients – Coefficients for a polynomial of the form \(a=a_0+a_1 T\).

  • b_coefficients – As above for the b coefficients

  • c_coefficients – As above for the c coefficients

  • P0 – Pressure at which the MRK equation begins to overestimate the molar volume significantly and may be determined from experimental data.

a_coefficients: tuple[float, ...]

Coefficients for a polynomial of the form \(a=a_0+a_1 T\)

b_coefficients: tuple[float, ...]

As above for the b coefficients

c_coefficients: tuple[float, ...]

As above for the c coefficients

P0: float

Pressure at which the MRK equation begins to overestimate the molar volume significantly

_a(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, critical_data: CriticalData) Array

a parameter [Holland and Powell, 1998]

This is also the d parameter in Holland and Powell [1991].

Parameters:
  • temperature – Temperature in K

  • critical_data – Critical data

Returns:

a parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\ \mathrm{bar}^{-1}\)

_b(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, critical_data: CriticalData) Array

b parameter [Holland and Powell, 1998]

This is also the c parameter in Holland and Powell [1991].

Parameters:
  • temperature – Temperature in K

  • critical_data – Critical data

Returns:

b parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\ \mathrm{bar}^{-1/2}\)

_c(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, critical_data: CriticalData) Array

c parameter [Holland and Powell, 1998]

Parameters:
  • temperature – Temperature in K

  • critical_data – Critical data

Returns:

c parameter in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\ \mathrm{bar}^{-1/4}\)

_delta_pressure(pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Pressure difference

Parameters:

pressure – Pressure in bar

Returns:

Pressure difference relative to P0 in bar

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, critical_data: CriticalData) Array

Volume contribution

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

  • critical_data – Critical data

Returns:

Volume contribution in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, critical_data: CriticalData) Array

Volume integral \(V dP\) contribution

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

  • critical_data – Critical data

Returns:

Volume integral contribution in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

_abc_impl = <_abc._abc_data object>
class atmodeller.eos.core.CORK(mrk: RealGas, virial: VirialCompensation, critical_data: CriticalData)

Bases: RealGas

A Compensated-Redlich-Kwong (CORK) EOS [Holland and Powell, 1991]

Parameters:
  • mrk – MRK model

  • virial – Virial compensation term

  • critical_data – Critical data

_abc_impl = <_abc._abc_data object>
compressibility_factor(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Compressibility factor

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Compressibility factor, which is dimensionless

dvdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of volume with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of volume with respect to pressure

dzdp(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Derivative of the compressibility factor with respect to pressure

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Derivative of the compressibility factor with respect to pressure

fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Fugacity in bar

fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

fugacity coefficient, which is dimensionless

log_activity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log activity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log activity, which is dimensionless

log_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity in bar

log_fugacity_coefficient(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Log fugacity coefficient

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Log fugacity coefficient, which is dimensionless

pressure_from_fugacity(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, fugacity: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Calculate pressure from fugacity

Parameters:
  • temperature – Temperature in K

  • fugacity – Fugacity in bar

Returns:

Pressure in bar

volume_integral_J(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral in J

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{J}\ \mathrm{mol}^{-1}\)

mrk: RealGas

MRK model

virial: VirialCompensation

Virial compensation term

critical_data: CriticalData

Critical data

volume(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray

Volume [Holland and Powell, 1991, Equation 7a]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

volume_integral(temperature: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray, pressure: Array | ndarray | bool | number | bool | int | float | complex | TypedNdArray) Array

Volume integral [Holland and Powell, 1991, Equation 8]

Parameters:
  • temperature – Temperature in K

  • pressure – Pressure in bar

Returns:

Volume integral in \(\mathrm{m}^3\ \mathrm{bar}\ \mathrm{mol}^{-1}\)

atmodeller.eos.library module

Real gas EOS library

Listing 1 Usage
     from atmodeller.eos.library import get_eos_models

     eos_models = get_eos_models()
     CH4_beattie = eos_models["CH4_beattie_holley58"]
     # Evaluate fugacity at 10 bar and 800 K
     fugacity = CH4_beattie.fugacity(800, 10)
     print(fugacity)
atmodeller.eos.library.get_eos_models() dict[str, RealGasBase]

Gets a dictionary of EOS models

Returns:

Dictionary of EOS models

Module contents

EOS package

atmodeller.eos.DATA_DIRECTORY: Traversable = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/atmodeller/checkouts/latest/atmodeller/eos/data')

Data directory, which is the same as the package directory

atmodeller.eos.ABSOLUTE_TOLERANCE: float = 1e-12

Absolute tolerance when solving for the volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

atmodeller.eos.RELATIVE_TOLERANCE: float = 1e-06

Relative tolerance when solving for the volume in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)

atmodeller.eos.THROW: bool = False

Whether to throw errors. Change to True for debugging purposes.

atmodeller.eos.VOLUME_EPSILON: float = 1e-12

Small volume offset in \(\mathrm{m}^3\ \mathrm{mol}^{-1}\)