Overview

pyiapws95 provides two top-level functions: water_props() and saturation_props(). The former returns single-state water or gas properties:

.. parsed-literal::

temperature [K] pressure [Pa] density [kg m^-3] entropy [Joule kg^-1 K^-1] internal_energy [Joule kg^-1] enthalpy [Joule kg^-1] gibbs_free_energy [Joule kg^-1] isochoric_heat_capacity [Joule kg^-1 K^-1] isobaric_heat_capacity [Joule kg^-1 K^-1] speed_of_sound [m s^-1]

The latter returns a tuple of above properties for liquid and vapour phases. Input parameters should be in SI units. When pint is available, pint.Quantity can be passed as well. Output is always in SI units, either as pint.Quantity values when an input parameter units is set (it is set by default), ot plain floats.

Examples

Compute thermodynamic water properties for pressure 100 000 Pa and temperature 280 deg K.

>>> import pyiapws95 as wp  # Wagner and Pruss or Water Properties
>>> wp.water_props(1e5, 280, units=True)
WaterProps(
  temperature = 280.0 kelvin
  pressure = 100000.0 pascal
  density = 999.9103569375845 kilogram / meter ** 3
  entropy = 104.11392202805507 joule / kelvin / kilogram
  internal_energy = 28794.08780871546 joule / kilogram
  enthalpy = 28894.09677381184 joule / kilogram
  gibbs_free_energy = -257.8013940435776 joule / kilogram
  isochoric_heat_capacity = 4199.837682609676 joule / kelvin / kilogram
  isobaric_heat_capacity = 4200.944742530026 joule / kelvin / kilogram
  speed_of_sound = 1434.2746295730974 meter / second
)

Compute saturation properties for temperature 30 deg C:

>>> import pyiapws95 as wp
>>> from pint import UnitRegistry
>>> ur = UnitRegistry()
>>> t = ur.Quantity(30, ur.celsius)
>>> wp.saturation_props(t, units=True)
Liquid WaterProps(
  temperature = 303.15 kelvin
  pressure = 4246.970836833437 pascal
  density = 995.6061774738458 kilogram / meter ** 3
  entropy = 436.7548587214662 joule / kelvin / kilogram
  internal_energy = 125729.70746867526 joule / kilogram
  enthalpy = 125733.97318230748 joule / kilogram
  gibbs_free_energy = -6668.262239104966 joule / kilogram
  isochoric_heat_capacity = 4117.534162924182 joule / kelvin / kilogram
  isobaric_heat_capacity = 4180.08366959557 joule / kelvin / kilogram
  speed_of_sound = 1508.9888796749242 meter / second
)
Vapour WaterProps(
  temperature = 303.15 kelvin
  pressure = 4246.970836833437 pascal
  density = 0.030415211808981893 kilogram / meter ** 3
  entropy = 8451.965908946451 joule / kelvin / kilogram
  internal_energy = 2415912.08580385 joule / kilogram
  enthalpy = 2555545.203058002 joule / kilogram
  gibbs_free_energy = -6668.262239113916 joule / kilogram
  isochoric_heat_capacity = 1445.240733936132 joule / kelvin / kilogram
  isobaric_heat_capacity = 1918.0102698516084 joule / kelvin / kilogram
  speed_of_sound = 430.0307654967225 meter / second
)

When speed is an issue, unit processing can be turned off. Performance gain is substantial:

>>> import pyiapws95 as wp
>>> %timeit wp.water_props(1e5, 280, units=True)
>>> %timeit wp.water_props(1e5, 280, units=False)
310 µs ± 2.14 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
28.5 µs ± 160 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

The times in this example are for an environment with numba installed. Without numba, performance drops significantly:

>>> import pyiapws95 as wp
>>> %timeit wp.water_props(1e5, 280, units=False)
6.37 ms ± 569 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)