aquasol


Nameaquasol JSON
Version 1.6.0 PyPI version JSON
download
home_pagehttps://github.com/ovinc/aquasol
SummaryThermodynamic and physico-chemical properties for water and aqueous solutions
upload_time2024-03-19 15:46:43
maintainer
docs_urlNone
authorOlivier Vincent
requires_python>=3.6
licenseCeCILL-2.1
keywords water solutions salt thermodynamic properties relations convert iapws supersaturated supersaturation pitzer kelvin activity volumetric vapor_pressure dewpoint density surface tension viscosity diffusivity solubility activity coefficient osmotic refractive index electrical conductivity physics chemistry
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            General information
===================

This package computes useful thermodynamic quantities for water and aqueous solutions (undersaturated, saturated and supersaturated). Is is divided in two modules: **water** (properties of pure water) and **solutions** (properties of aqueous solutions), which provide various functions to calculate properties of interest. There is also a list of useful constants in the *constants.py* module.

It is also possible to just see plots of the properties by running the package directly from a shell console with
```bash
python -m aquasol
```

The package is under CeCILL-2.1 license, which is equivalent to GNU-GPL (see license file and information below)

How to install:
```bash
pip install aquasol
```



WATER
=====

Properties
----------

The *water* module has the following functions(*), which return the respective properties of interest as a function of temperature:
- `density_sat()` for density on the liquid-vapor coexistence line (kg/m^3)
- `density_atm()` for density at ambient pressure 0.1 MPa (kg/m^3)
- `dielectric_constant()` for the dielectric constant at 0.1 MPa (-)
- `diffusivity_in_air()` for diffusivity of water vapor in air (m^2/s)
- `surface_tension()` for surface tension of pure water (N/m).
- `vapor_pressure()` for saturation vapor pressure of pure water (Pa),
- `viscosity()` for viscosity of liquid water (Pa.s)

The structure of the call for any property (replace *property* below by one of the function names above) is
```python
from aquasol.water import property

value = property(T=25, unit='C', source=None)
```
*Inputs*

- `T` (int, float, array, list, or tuple): temperature
- `unit` (str, default 'C'): 'C' for Celsius, 'K' for Kelvin
- `source` (str, default None) : Source for the used equation, if *None* then the default source for the particular property is used.

*Output*

- Property in SI units, returned as numpy array if input is not a scalar.

*Note*

- See further below for `dewpoint()`, `kelvin_pressure()`, `kelvin_humidity()`, `kelvin_radius()` and `molar_volume()`, which work a bit differently.

(*) As of aquasol 1.5, the main functions (excluding `dewpoint` etc.) are now callable objects, which act as functions but have additional attributes, see *Attributes and Methods* below.


### Examples

(See docstrings for more details)

```python
from aquasol.water import vapor_pressure, surface_tension
from aquasol.water import density_atm, density_sat
from aquasol.water import diffusivity_in_air, viscosity

vapor_pressure()             # Saturation vapor pressure (Pa) at 25°C (3170 Pa)
vapor_pressure(298.15, 'K')        # same thing
vapor_pressure(source='Wexler')    # same thing, but according to Wexler
vapor_pressure(T=[5, 15, 25])          # psat at different temperatures in °C

surface_tension(T=[5, 15, 25])         # same, but for surface tension (N/m)

density_atm(4)               # density of water at atmospheric pressure at 4°C
density_sat(277.15, 'K')     # same thing, but on the coexistence line

diffusivity_in_air(27)  # Diffusivity of water vapor in air at 27°C

viscosity()         # Viscosity of liquid water at 25°C

dielectric_constant(T=20)   # Dielectric constant at 20°C ( = 80)
```

### Attributes & Methods

The properties listed above are in fact (since version 1.5) extended functions (i.e. callable objects), with additional attributes and methods that can be useful in various contexts; below are some examples using `vapor_pressure`.
```python
from aquasol.water import vapor_pressure

vapor_pressure()         # Saturation vapor pressure (Pa) at 25°C

vapor_pressure.sources         # all available sources
vapor_pressure.default_source  # source used by default if None is provided
vapor_pressure.get_source()          # return default source
vapor_pressure.get_source('Wexler')  # checks if source exists and returns it

vapor_pressure.quantity  # 'saturated vapor pressure'
vapor_pressure.unit      # '[Pa]'
```

It is also possible to access specific formulas (i.e. corresponding to a specific source), and get their properties.

```python
formula = vapor_pressure.get_formula('Wexler')  # default formula if no arg.

formula.source  # 'Wexler'
formula.temperature_range  # validity range of expression
formula.temperature_unit   # 'C' or 'K', varies across formulas

formula.calculate(T=300)  # Return value at given T (input in temperature_unit)
```


Inverse and other property functions
------------------------------------

Based on the functions above, some inverse and other properties are also provided:

- `dewpoint()`
- `kelvin_pressure()`
- `kelvin_radius()`
- `kelvin_humidity()`
- `molar_volume()`

### Examples

(See docstrings for more details)

```python
from aquasol.water import dewpoint, kelvin_radius, kelvin_humidity

dewpoint(p=1000)  # Dew point of a vapor at 1kPa
dewpoint(rh=50)  # Dew point at 50%RH and 25°C (default)
dewpoint('K', 300, rh=50)  # specify temperature
dewpoint(aw=[0.5, 0.7])     # It is possible to input lists, tuples, arrays

kelvin_pressure(rh=80)  # (liquid) Kelvin pressure corresponding to 80%RH
kelvin_pressure(aw=[0.5, 0.7, 0.9], T=20)  # at 20°C for 50%RH, 70%RH, 90%RH

kelvin_radius(aw=0.8)  # Kelvin radius at 80%RH and T=25°C
kelvin_radius(rh=80, ncurv=1)  # assume cylindrical meniscus instead of spherical

kelvin_humidity(r=4.7e-9)  # activity corresponding to Kelvin radius of 4.7 nm at 25°C
kelvin_humidity(r=4.7e-9, out='rh')  # same, but expressed in %RH instead of activity
kelvin_humidity(r=4.7e-9, ncurv=1, out='p')  # cylindrical interface, output as pressure
kelvin_humidity(P=[-30e6, -50e6])  # input can also be liquid pressure

molar_volume()  # molar volume of water at 25°C
molar_volume(T=30)  # at 30°C
molar_volume(condition='atm')  # using atmosph. density instead of sat.
```


Sources
-------

Below are the sources for water vapor pressure (1, 2, 3), density (1, 4, 5), surface tension (6), diffusivity in air (7, 8), viscosity (9)

(1) Wagner, W. & Pruß, A. *The IAPWS Formulation 1995 for the Thermodynamic Properties of Ordinary Water Substance for General and Scientific Use.* Journal of Physical and Chemical Reference Data 31, 387–535 (2002). [*]

(2) Wexler, A. & Greenspan, L. *Vapor Pressure Equation for Water in the Range 0 to 100°C.* Journal of Research of the National Bureau of Standards - A. Physics and Chemistry 75A, 213–245 (1971).

(3) Bridgeman, O. C. & Aldrich, E. W. *Vapor Pressure Tables for Water.* Journal of Heat Transfer 86, 279–286 (1964).

(4) Pátek, J., Hrubý, J., Klomfar, J., Součková, M. & Harvey, A. H. *Reference Correlations for Thermophysical Properties of Liquid Water at 0.1MPa.* Journal of Physical and Chemical Reference Data 38, 21–29 (2009). [*]

(5) Kell, G. S. Density, thermal expansivity, and compressibility of liquid water from 0.deg. to 150.deg.. *Correlations and tables for atmospheric pressure and saturation reviewed and expressed on 1968 temperature scale.* J. Chem. Eng. Data 20, 97–105 (1975).

(6) IAPWS *Revised Release on Surface Tension of Ordinary Water Substance.* Moscow, Russia, June 2014. [*]

(7) Massman, W. J. *A review of the molecular diffusivities of H2O, CO2, CH4, CO, O3, SO2, NH3, N2O, NO, and NO2 in air, O2 and N2 near STP.* Atmospheric Environment 32, 1111-1127 (1998).

(8) Marrero, T. R. and Mason E. A., *Gaseous diffusion coeffcients.* Journal of Physics and Chemistry Reference Data 1, 3-118 (1972)

(9) Huber, M. L. et al. *New International Formulation for the Viscosity of H2O.* Journal of Physical and Chemical Reference Data 38, 101-125 (2009). [*]

(10) Archer, D. G. & Wang, P. *The Dielectric Constant of Water and Debye-Hückel Limiting Law Slopes.* Journal of Physical and Chemical Reference Data 19, 371-411 (1990).

[*] Recommended by IAPWS.


SOLUTIONS
=========

Properties
----------

The *solutions* module has the following functions(**), which return the respective properties of interest as a function of solute concentration and temperature (when available) of an aqueous solution.
- `density()` for absolute (kg / m^3) or relative density,
- `activity_coefficient()` for molal activity coefficient of solute (dimensionless)
- `water_activity()` for solvent activity (dimensionless, range 0-1),
- `surface_tension()` for absolute surface tension (N/m) or relative (normalized by that of pure water at the same temperature).
- `refractive_index()` (dimensionless)
- `electrical_conductivity()` (S/m)
- `solubility()` (output unit can be chosen)

The following functions, which are based on some of the ones above, are also defined:
- `osmotic_coefficient()`: $\phi$, calculated using `water_activity()`
- `osmotic_pressure()`: $\Pi$, calculated using `water_activity()`
- `aw_saturated()`: water activity of saturated solutions (i.e., equilibrium humidity)
- `debye_length()`: Debye length as a function of temperature and concentration

The structure of the call for any property (replace *property* below by one of the function names above) is
```python
data = property(solute='NaCl', T=25, unit='C', source=None, **concentration)
```
with an additional parameter `relative=False` where applicable.

Note that the solubility has a slightly different call:
```python
data = solubility(solute='NaCl', T=25, unit='C', source=None, out='m')
```

*Inputs*

- `solute` (str): solute name, default 'NaCl'
- `T` (float): temperature (default 25)
- `unit` (str, default 'C'): 'C' for Celsius, 'K' for Kelvin
- `source` (str, default None) : Source for the used equation, if None then
gets the default source for the particular solute (defined in submodules).
- `**concentration`: kwargs with any unit that is allowed by `convert()` (see below), e.g. `property(m=5.3)` for molality.
- when applicable: `relative` (bool, default False): True for relative density
- for solubility, the `out` parameter is the unit in which the solubility will be expressed (see `convert()` below)

*Output*

- Property in SI units, returned as numpy array if input is not a scalar.

Note: similarly to temperature, the values in `**concentration` can be an array, list or tuple, however if it's the case, temperature needs to be a scalar.

(**) As of aquasol 1.5, the main property functions (excluding `osmotic pressure` etc.) are now callable objects, which act as functions but have additional attributes, see *Attributes and Methods* below.*


### Examples

```python
from aquasol.solutions import water_activity, activity_coefficient
from aquasol.solutions import osmotic_pressure, osmotic_coefficient
from aquasol.solutions import density, surface_tension, refractive_index
from aquasol.solutions import solubility, aw_saturated
from aquasol.solutions import ionic_strength, debye_length

# Water activity (dimensionless, 'aw') ---------------------------------------
water_activity(x=0.1)            # NaCl solution, mole fraction 10%, 25°C
water_activity(r=0.3)           # solution when mixing 55g NaCl with 100g H2O
water_activity('LiCl', w=0.3, T=70)  # LiCl solution, 30% weight fraction, 70°C
water_activity(solute='CaCl2', m=[2, 4, 6])  # for several molalities (mol/kg)

# Other ways to express water activity:
osmotic_pressure(m=5)
osmotic_coefficient(x=0.1, solute='LiCl')

# Molal activity coefficient (dimensionless, 'gamma') ------------------------
activity_coefficient(m=6.1)            # ~ Saturated NaCl solution, 25°C
activity_coefficient(solute='Na2SO3', m=2.2)  # Na2SO3 at 2.2 mol/kg

# Density (absolute, kg / m^3, or relative) ----------------------------------
density(source='Tang', x=0.23)  # supersaturatad NaCl, 25°C, using Tang equation
density(c=5000, relative=True)  # relative density of NaCl, 5 mol/L.
density('LiCl', w=[0.11, 0.22, 0.51])  # for several weight fractions of LiCl

# Surface tension (N / m) ----------------------------------------------------
surface_tension(r=0.55)           # solution when mixing 55g NaCl with 100g H2O
surface_tension(c=5000, relative=True)  # sigma / sigma(H2O) at 5 mol/L of NaCl
surface_tension('CaCl2', 353, 'K', c=5e3)    # CaCl2, 300K, 5 mol/L
surface_tension(x=[0.02, 0.04, 0.08], T=21)  # iterable mole fraction

# Refractive index -----------------------------------------------------------
refractive_index(c=4321)  # concentration of 4.321 mol/L of NaCl, 25°C
refractive_index('KCl', T=22, r=[0.1, 0.175])  # various mass ratios of KCl

# Electrical conductivity ----------------------------------------------------
electrical_conductivity('KCl', m=0.1)  # molality of 0.1 mol/L of KCl, 25°C
electrical_conductivity('KCl', T=50, x=[0.01, 0.02])  # various mole fractions
electrical_conductivity('KCl', T=[0, 25, 50], m=1)  # various mole fractions

# Solubility -----------------------------------------------------------------
solubility()       # NaCl at 25°C
solubility(T=10)   # NaCl at 10°C
solubility('KCl')  # KCl, 25°C
solubility('Na2SO4,10H20', T=10)  # Mirabilite at T=10°C

# Other ways to express solubility:
aw_saturated()        # Activity of saturated NaCl solution = 0.753
aw_saturated('LiCl')  # etc.

# Debye length and ionic strength
debye_length('Na2SO4', c=100)  # sodium sulfate at 100mM
ionic_strength('KCl', m=2)     # molal ionic strength
```

### Attributes & Methods

Similarly to the `water` module, the properties listed above are in fact (since version 1.5) extended functions (i.e. callable objects), with additional attributes and methods that can be useful in various contexts; below are some examples using `density`.
```python
from aquasol.solutions import density

density(m=6)  # Density of an NaCl solution at 6 mol/kg

density.quantity  # 'density'
density.unit  #   # '[kg/m^3]'

density.solutes  # All solutes available for the given property
density.default_solute  # solute used by default if None provided
density.get_solute()  # get solute or defautl solute, see docstring

density.sources  # Dictionary of sources available for each solute
density.default_sources  # Dict of sources used by default if None provided
density.get_source()   # get source or default source, see docstring
```

It is also possible to access specific formulas (i.e. corresponding to a specific source and solute), and get their properties.

```python
formula = density.get_formula(solute='KCl', source='Krumgalz')

formula.source  # 'Krumgalz'
formula.temperature_range  # validity range of expression in temperature
formula.temperature_unit   # 'C' or 'K', varies across formulas
formula.solute             # solute of interest

formula.concentration_range  # validity range of expression in concentration
formula.concentration_unit   # 'm' 'w', 'x', etc., varies across formulas

formula.with_water_reference  # if true, returns a tuple with value at c=0 and value at c
formula.calculate(m=2.2)      # Value at given concentration (in concentration_unit)
```


Inverse property functions
--------------------------

The `aw_to_conc` calculates what concentration of solute is necessary to reach a specific water activity:
```python
aw_to_conc(a, out='w', solute='NaCl', T=25, unit='C', source=None):
```
For example:
```python
aw_to_conc(0.8)  # weight fraction of NaCl to have a humidity of 80%RH
aw_to_conc([0.6, 0.85], out='m')  # molality of NaCl to get 60%RH and 85%RH
aw_to_conc(0.33, 'r', 'LiCl', T=50)  # in terms of mass ratio, for LiCl at 50°C
```

Other functions
---------------

The *solutions* module also has a function to convert between concentration units:
```python
value_out = convert(value, unit_in, unit_out, solute='NaCl', density_source=None)
```
where unit_in and unit_out can be in the following list:
- *'m'* (molality, mol/kg)
- *'c'* (molarity, mol/m^3)
- *'x'* (mole fraction)
- *'w'* (weight fraction)
- *'r'* (ratio solute mass to solvent mass).

By default, solute is `'NaCl'`. When converting to/from molarity, one must also use a formula to calculate the density of the solution. It's possible to specify a formula different than the default one by providing an argument to the `density_source` argument.

**NOTE**: In case of issues such as `ValueError: Requested values higher than the higher limit of the image`, try playing with the `density_wmin` and `density_wmax` parameters in `convert()`.

One can access more elaborate quantities with the following functions:

```python
Iy = ionic_strength(solute, **concentration)
```
for ionic strength, which can be expressed in terms of molarity, molality or mole fraction. Which version is chosen among these three possibilities depend on the input parameters, e.g. *m=5.3* for molality, *x=0.08* for mole fraction, *c=5000* for molarity.

```python
y1, y2 = ion_quantities(solute, **concentration)
```
which calculate quantities of individual ions within the solution instead of considering the solute as a whole. Similarly, the result depends on the input unit, which can also be only among `m`, `c` or `x`.

*See docstrings for more details.*

Available Solutes
-----------------

Sorted by alphabetical order. When available, the sources are written in parentheses. For convert, an X means available.

| Solute | Water Activity | Activity Coeff. |      Density      | Surface Tension | Refr. Index | Elec. Conduct. | Solubility | Convert (*) |
|:------:|:--------------:|:---------------:|:-----------------:|:---------------:|:-----------:|:--------------:|:----------:|:-----------:|
| CaCl2  |      (1)       |                 |     (1,3,14)      |      (1,6)      |     (7)     |                |            |      X      |
| KCl    |     (8,13)     |     (8,13)      |      (3,14)       |       (6)       |     (7)     |       (9)      |    (13)    |      X      |
| KI     |                |                 |      (3,14)       |                 |             |                |            |      X      |
| LiBr   |    (19,20)     |      (20)       |                   |                 |             |                |    (18)    |      -      |
| LiCl   |   (1,19,20)    |      (20)       |      (1,14)       |       (1)       |             |                |    (17)    |      X      |
| MgCl2  |                |                 |      (3,14)       |       (6)       |             |                |            |      X      |
| Na2SO4 |   (2,12,13)    |    (12,13)      |    (10,14,15)     |       (6)       |             |                |    (13)    |      X      |
| NaCl   | (2,8,12,13,20) |  (8,12,13,20)   | (3,4,5,11,14,15)  |      (6,11)     |     (7)     |                | (13,16,17) |      X      |

(*) Solutes with no density data cannot use conversion to/from molarity ('c') but all other conversions work. They are noted with - instead of X.

Sources
-------

(1) Conde, M. R., *Properties of aqueous solutions of lithium and calcium chlorides: formulations for use in air conditioning equipment design.*
International Journal of Thermal Sciences 43, 367–382 (2004).

(2) Clegg, S. L., Brimblecombe, P., Liang, Z. & Chan, C. K., *Thermodynamic Properties of Aqueous Aerosols to High Supersaturation: II — A Model of the System Na+ Cl− NO3- SO42- H2O at 298.15 K.* Aerosol Science and Technology 27, 345–366 (1997).

(3) Al Ghafri, S., Maitland, G. C. & Trusler, J. P. M., *Densities of Aqueous MgCl 2 (aq), CaCl 2 (aq), KI(aq), NaCl(aq), KCl(aq), AlCl 3 (aq), and (0.964 NaCl + 0.136 KCl)(aq) at Temperatures Between (283 and 472) K, Pressures up to 68.5 MPa, and Molalities up to 6 mol·kg –1.* Journal of Chemical & Engineering Data 57, 1288–1304 (2012).

(4) Tang, I. N., *Chemical and size effects of hygroscopic aerosols on light scattering coefficients.* Journal of Geophysical Research: Atmospheres 101, 19245–19250 (1996).

(5) Simion, A. I., Grigoras, C., Rosu, A.-M. & Gavrilă, L. *Mathematical modelling of density and viscosity of NaCl aqueous solutions.* Journal of Agroalimentary Processing and Technologies 21, 41–52 (2015).

(6) Dutcher, C. S., Wexler, A. S. & Clegg, S. L. *Surface Tensions of Inorganic Multicomponent Aqueous Electrolyte Solutions and Melts.* J. Phys. Chem. A 114, 12216–12230 (2010).

(7) Tan, C.-Y. & Huang, Y.-X. *Dependence of Refractive Index on Concentration and Temperature in Electrolyte Solution, Polar Solution, Nonpolar Solution, and Protein Solution.* J. Chem. Eng. Data 60, 2827–2833 (2015).

(8) Tang, I. N., Munkelwitz, H. R. & Wang, N. *Water activity measurements with single suspended droplets: The NaCl-H2O and KCl-H2O systems.* Journal of Colloid and Interface Science 114, 409–415 (1986).

(9) McKee, C. B., *An Accurate Equation for the Electrolytic Conductivity of Potassium Chloride Solutions*. J Solution Chem 38, 1155-1172 (2009).

(10) Tang, I. N. & Munkelwitz, H. R., *Simultaneous Determination of Refractive Index and Density of an Evaporating Aqueous Solution Droplet*. Aerosol Science and Technology 15, 201–207 (1991).

(11) Talreja-Muthreja, T., Linnow, K., Enke, D. & Steiger. *M. Deliquescence of NaCl Confined in Nanoporous Silica*. Langmuir 38, 10963-10974 (2022).

(12) Steiger, M., *Crystal growth in porous materials—I: The crystallization pressure of large crystals.* Journal of Crystal Growth 282, 455-469 (2005).

(13) Steiger, M., Kiekbusch, J. & Nicolai, *An improved model incorporating Pitzer's equations for calculation of thermodynamic properties of pore solutions implemented into an efficient program code.* Construction and Building Materials 22, 1841-1850 (2008).

(14) Krumgalz, B. S., Pogorelsky, R. & Pitzer, K. S., *Volumetric Properties of Single Aqueous Electrolytes from Zero to Saturation Concentration at 298.15 K Represented by Pitzer's Ion-Interaction Equations.* Journal of Physical and Chemical Reference Data 25, 663-689 (1996).

(15) Clegg, S. L. & Wexler, A. S., *Densities and Apparent Molar Volumes of Atmospherically Important Electrolyte Solutions. 1. The Solutes H2SO4, HNO3, HCl, Na2SO4, NaNO3, NaCl, (NH4)2SO4, NH4NO3, and NH4Cl from 0 to 50°C, Including Extrapolations to Very Low Temperature and to the Pure Liquid State, and NaHSO4, NaOH, and NH3 at 25°C.* J. Phys. Chem. A 115, 3393-3460 (2011).

(16) Sparrow, B. S., *Empirical equations for the thermodynamic properties of aqueous sodium chloride*. Desalination 159, 161-170 (2003).

(17) CRC Handbook of Chemistry and Physics: A Ready-Reference Book of Chemical and Physical Data. (CRC Press, Boca Raton London New York, 2023).

(18) Duvall, K. N., Dirksen, J. A. & Ring, T. A. *Ostwald-Meyers Metastable Region in LiBr Crystallization—Comparison of Measurements with Predictions.* Journal of Colloid and Interface Science 239, 391-398 (2001).

(19) Patil, K. R., Tripathi, A. D., Pathak, G. & Katti, S. S. *Thermodynamic Properties of Aqueous Electrolyte Solutions. 1. Vapor Pressure of Aqueous Solutions of LiCI, LiBr, and LiI.* J. Chem. Eng. Data 35, 166-168 (1990)

(20) Pitzer, K. S. & Mayorga, G., *Thermodynamics of electrolytes. II. Activity and osmotic coefficients for strong electrolytes with one or both ions univalent.* J. Phys. Chem. 77, 2300-2308 (1973).


Constants
=========

The *constants.py* file includes useful values including critical point data, molecular weights of species, dissociation numbers etc. Use the function `molar_mass` to get the molar mass (in kg/mol) of a specific solute from the available solutes, e.g.:

```python
from aquasol.constants import Mw           # molar mass of water (kg/mol)
from aquasol.constants import molar_mass   # molar mass of specific solute
from aquasol.constants import get_solute   # returns solute object with info

Na2SO4 = get_solute('Na2SO4')

molar_mass('Na2SO4')            # 0.142 kg/mol
Na2SO4.molar_mass               # same
Na2SO4.molecular_weight         # same but in Daltons (142)

z_m, z_x = Na2SO4.charges          # (1, -2) for Na(1+), SO4(2-)
nu_m, nu_x = Na2SO4.stoichiometry   # (2, 1) for Na(2) SO4(1)
```


Shortcut functions
==================

For rapid calculations without much typing, the following shortcuts are provided:

|       original function       | shortcut |
|:-----------------------------:|:--------:|
| `water.vapor_pressure()`      |  `ps()`  |
| `water.dewpoint()`            |  `dp()`  |
| `water.kelvin_pressure()`     |  `kp()`  |
| `water.kelvin_radius()`       |  `kr()`  |
| `water.kelvin_humidity()`     |  `kh()`  |
| `water.molar_volume()`        |  `vm()`  |
| `solutions.water_activity()`  |  `aw()`  |
| `solutions.aw_to_conc()`      |  `ac()`  |
| `solutions.convert()`         |  `cv()`  |

For example, the two following imports are equivalent:
```python
from aquasol.solutions import water_activity as aw
from aquasol import aw
```

Information
===========

Package requirements
--------------------
- numpy
- pynverse
- [optional] matplotlib (only if running the package directly as a main file to plot the properties)

Python requirements
-------------------
Python : >= 3.6

Author
------

Olivier Vincent

(ovinc.py@gmail.com)

Contributors
------------
Marine Poizat (2019), Léo Martin (2020), Hugo Bellezza (2023)

License
-------

CeCILL v.2.1 (equivalent to GNU GPL, see https://cecill.info/)
See LICENSE file.

Copyright Olivier Vincent (2020-2024)
(ovinc.py@gmail.com)

This software is a computer program whose purpose is to provide the
properties of water and aqueous solutions as a function of temperature
and/or concentration (along with other useful tools).

This software is governed by the CeCILL license under French law and
abiding by the rules of distribution of free software. You can  use,
modify and/ or redistribute the software under the terms of the CeCILL
license as circulated by CEA, CNRS and INRIA at the following URL
"http://www.cecill.info".

As a counterpart to the access to the source code and rights to copy,
modify and redistribute granted by the license, users are provided only
with a limited warranty  and the software's author, the holder of the
economic rights, and the successive licensors have only limited
liability.

In this respect, the user's attention is drawn to the risks associated
with loading, using, modifying and/or developing or reproducing the
software by the user in light of its specific status of free software,
that may mean that it is complicated to manipulate, and that also
therefore means that it is reserved for developers and experienced
professionals having in-depth computer knowledge. Users are therefore
encouraged to load and test the software's suitability as regards their
requirements in conditions enabling the security of their systems and/or
data to be ensured and, more generally, to use and operate it in the
same conditions as regards security.

The fact that you are presently reading this means that you have had
knowledge of the CeCILL license and that you accept its terms.


  CeCILL FREE SOFTWARE LICENSE AGREEMENT

Version 2.1 dated 2013-06-21


    Notice

This Agreement is a Free Software license agreement that is the result
of discussions between its authors in order to ensure compliance with
the two main principles guiding its drafting:

  * firstly, compliance with the principles governing the distribution
    of Free Software: access to source code, broad rights granted to users,
  * secondly, the election of a governing law, French law, with which it
    is conformant, both as regards the law of torts and intellectual
    property law, and the protection that it offers to both authors and
    holders of the economic rights over software.

The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
license are:

Commissariat à l'énergie atomique et aux énergies alternatives - CEA, a
public scientific, technical and industrial research establishment,
having its principal place of business at 25 rue Leblanc, immeuble Le
Ponant D, 75015 Paris, France.

Centre National de la Recherche Scientifique - CNRS, a public scientific
and technological establishment, having its principal place of business
at 3 rue Michel-Ange, 75794 Paris cedex 16, France.

Institut National de Recherche en Informatique et en Automatique -
Inria, a public scientific and technological establishment, having its
principal place of business at Domaine de Voluceau, Rocquencourt, BP
105, 78153 Le Chesnay cedex, France.


    Preamble

The purpose of this Free Software license agreement is to grant users
the right to modify and redistribute the software governed by this
license within the framework of an open source distribution model.

The exercising of this right is conditional upon certain obligations for
users so as to preserve this status for all subsequent redistributions.

In consideration of access to the source code and the rights to copy,
modify and redistribute granted by the license, users are provided only
with a limited warranty and the software's author, the holder of the
economic rights, and the successive licensors only have limited liability.

In this respect, the risks associated with loading, using, modifying
and/or developing or reproducing the software by the user are brought to
the user's attention, given its Free Software status, which may make it
complicated to use, with the result that its use is reserved for
developers and experienced professionals having in-depth computer
knowledge. Users are therefore encouraged to load and test the
suitability of the software as regards their requirements in conditions
enabling the security of their systems and/or data to be ensured and,
more generally, to use and operate it in the same conditions of
security. This Agreement may be freely reproduced and published,
provided it is not altered, and that no provisions are either added or
removed herefrom.

This Agreement may apply to any or all software for which the holder of
the economic rights decides to submit the use thereof to its provisions.

Frequently asked questions can be found on the official website of the
CeCILL licenses family (http://www.cecill.info/index.en.html) for any
necessary clarification.


    Article 1 - DEFINITIONS

For the purpose of this Agreement, when the following expressions
commence with a capital letter, they shall have the following meaning:

Agreement: means this license agreement, and its possible subsequent
versions and annexes.

Software: means the software in its Object Code and/or Source Code form
and, where applicable, its documentation, "as is" when the Licensee
accepts the Agreement.

Initial Software: means the Software in its Source Code and possibly its
Object Code form and, where applicable, its documentation, "as is" when
it is first distributed under the terms and conditions of the Agreement.

Modified Software: means the Software modified by at least one
Contribution.

Source Code: means all the Software's instructions and program lines to
which access is required so as to modify the Software.

Object Code: means the binary files originating from the compilation of
the Source Code.

Holder: means the holder(s) of the economic rights over the Initial
Software.

Licensee: means the Software user(s) having accepted the Agreement.

Contributor: means a Licensee having made at least one Contribution.

Licensor: means the Holder, or any other individual or legal entity, who
distributes the Software under the Agreement.

Contribution: means any or all modifications, corrections, translations,
adaptations and/or new functions integrated into the Software by any or
all Contributors, as well as any or all Internal Modules.

Module: means a set of sources files including their documentation that
enables supplementary functions or services in addition to those offered
by the Software.

External Module: means any or all Modules, not derived from the
Software, so that this Module and the Software run in separate address
spaces, with one calling the other when they are run.

Internal Module: means any or all Module, connected to the Software so
that they both execute in the same address space.

GNU GPL: means the GNU General Public License version 2 or any
subsequent version, as published by the Free Software Foundation Inc.

GNU Affero GPL: means the GNU Affero General Public License version 3 or
any subsequent version, as published by the Free Software Foundation Inc.

EUPL: means the European Union Public License version 1.1 or any
subsequent version, as published by the European Commission.

Parties: mean both the Licensee and the Licensor.

These expressions may be used both in singular and plural form.


    Article 2 - PURPOSE

The purpose of the Agreement is the grant by the Licensor to the
Licensee of a non-exclusive, transferable and worldwide license for the
Software as set forth in Article 5 <#scope> hereinafter for the whole
term of the protection granted by the rights over said Software.


    Article 3 - ACCEPTANCE

3.1 The Licensee shall be deemed as having accepted the terms and
conditions of this Agreement upon the occurrence of the first of the
following events:

  * (i) loading the Software by any or all means, notably, by
    downloading from a remote server, or by loading from a physical medium;
  * (ii) the first time the Licensee exercises any of the rights granted
    hereunder.

3.2 One copy of the Agreement, containing a notice relating to the
characteristics of the Software, to the limited warranty, and to the
fact that its use is restricted to experienced users has been provided
to the Licensee prior to its acceptance as set forth in Article 3.1
<#accepting> hereinabove, and the Licensee hereby acknowledges that it
has read and understood it.


    Article 4 - EFFECTIVE DATE AND TERM


      4.1 EFFECTIVE DATE

The Agreement shall become effective on the date when it is accepted by
the Licensee as set forth in Article 3.1 <#accepting>.


      4.2 TERM

The Agreement shall remain in force for the entire legal term of
protection of the economic rights over the Software.


    Article 5 - SCOPE OF RIGHTS GRANTED

The Licensor hereby grants to the Licensee, who accepts, the following
rights over the Software for any or all use, and for the term of the
Agreement, on the basis of the terms and conditions set forth hereinafter.

Besides, if the Licensor owns or comes to own one or more patents
protecting all or part of the functions of the Software or of its
components, the Licensor undertakes not to enforce the rights granted by
these patents against successive Licensees using, exploiting or
modifying the Software. If these patents are transferred, the Licensor
undertakes to have the transferees subscribe to the obligations set
forth in this paragraph.


      5.1 RIGHT OF USE

The Licensee is authorized to use the Software, without any limitation
as to its fields of application, with it being hereinafter specified
that this comprises:

 1. permanent or temporary reproduction of all or part of the Software
    by any or all means and in any or all form.

 2. loading, displaying, running, or storing the Software on any or all
    medium.

 3. entitlement to observe, study or test its operation so as to
    determine the ideas and principles behind any or all constituent
    elements of said Software. This shall apply when the Licensee
    carries out any or all loading, displaying, running, transmission or
    storage operation as regards the Software, that it is entitled to
    carry out hereunder.


      5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS

The right to make Contributions includes the right to translate, adapt,
arrange, or make any or all modifications to the Software, and the right
to reproduce the resulting software.

The Licensee is authorized to make any or all Contributions to the
Software provided that it includes an explicit notice that it is the
author of said Contribution and indicates the date of the creation thereof.


      5.3 RIGHT OF DISTRIBUTION

In particular, the right of distribution includes the right to publish,
transmit and communicate the Software to the general public on any or
all medium, and by any or all means, and the right to market, either in
consideration of a fee, or free of charge, one or more copies of the
Software by any means.

The Licensee is further authorized to distribute copies of the modified
or unmodified Software to third parties according to the terms and
conditions set forth hereinafter.


        5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION

The Licensee is authorized to distribute true copies of the Software in
Source Code or Object Code form, provided that said distribution
complies with all the provisions of the Agreement and is accompanied by:

 1. a copy of the Agreement,

 2. a notice relating to the limitation of both the Licensor's warranty
    and liability as set forth in Articles 8 and 9,

and that, in the event that only the Object Code of the Software is
redistributed, the Licensee allows effective access to the full Source
Code of the Software for a period of at least three years from the
distribution of the Software, it being understood that the additional
acquisition cost of the Source Code shall not exceed the cost of the
data transfer.


        5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE

When the Licensee makes a Contribution to the Software, the terms and
conditions for the distribution of the resulting Modified Software
become subject to all the provisions of this Agreement.

The Licensee is authorized to distribute the Modified Software, in
source code or object code form, provided that said distribution
complies with all the provisions of the Agreement and is accompanied by:

 1. a copy of the Agreement,

 2. a notice relating to the limitation of both the Licensor's warranty
    and liability as set forth in Articles 8 and 9,

and, in the event that only the object code of the Modified Software is
redistributed,

 3. a note stating the conditions of effective access to the full source
    code of the Modified Software for a period of at least three years
    from the distribution of the Modified Software, it being understood
    that the additional acquisition cost of the source code shall not
    exceed the cost of the data transfer.


        5.3.3 DISTRIBUTION OF EXTERNAL MODULES

When the Licensee has developed an External Module, the terms and
conditions of this Agreement do not apply to said External Module, that
may be distributed under a separate license agreement.


        5.3.4 COMPATIBILITY WITH OTHER LICENSES

The Licensee can include a code that is subject to the provisions of one
of the versions of the GNU GPL, GNU Affero GPL and/or EUPL in the
Modified or unmodified Software, and distribute that entire code under
the terms of the same version of the GNU GPL, GNU Affero GPL and/or EUPL.

The Licensee can include the Modified or unmodified Software in a code
that is subject to the provisions of one of the versions of the GNU GPL,
GNU Affero GPL and/or EUPL and distribute that entire code under the
terms of the same version of the GNU GPL, GNU Affero GPL and/or EUPL.


    Article 6 - INTELLECTUAL PROPERTY


      6.1 OVER THE INITIAL SOFTWARE

The Holder owns the economic rights over the Initial Software. Any or
all use of the Initial Software is subject to compliance with the terms
and conditions under which the Holder has elected to distribute its work
and no one shall be entitled to modify the terms and conditions for the
distribution of said Initial Software.

The Holder undertakes that the Initial Software will remain ruled at
least by this Agreement, for the duration set forth in Article 4.2 <#term>.


      6.2 OVER THE CONTRIBUTIONS

The Licensee who develops a Contribution is the owner of the
intellectual property rights over this Contribution as defined by
applicable law.


      6.3 OVER THE EXTERNAL MODULES

The Licensee who develops an External Module is the owner of the
intellectual property rights over this External Module as defined by
applicable law and is free to choose the type of agreement that shall
govern its distribution.


      6.4 JOINT PROVISIONS

The Licensee expressly undertakes:

 1. not to remove, or modify, in any manner, the intellectual property
    notices attached to the Software;

 2. to reproduce said notices, in an identical manner, in the copies of
    the Software modified or not.

The Licensee undertakes not to directly or indirectly infringe the
intellectual property rights on the Software of the Holder and/or
Contributors, and to take, where applicable, vis-à-vis its staff, any
and all measures required to ensure respect of said intellectual
property rights of the Holder and/or Contributors.


    Article 7 - RELATED SERVICES

7.1 Under no circumstances shall the Agreement oblige the Licensor to
provide technical assistance or maintenance services for the Software.

However, the Licensor is entitled to offer this type of services. The
terms and conditions of such technical assistance, and/or such
maintenance, shall be set forth in a separate instrument. Only the
Licensor offering said maintenance and/or technical assistance services
shall incur liability therefor.

7.2 Similarly, any Licensor is entitled to offer to its licensees, under
its sole responsibility, a warranty, that shall only be binding upon
itself, for the redistribution of the Software and/or the Modified
Software, under terms and conditions that it is free to decide. Said
warranty, and the financial terms and conditions of its application,
shall be subject of a separate instrument executed between the Licensor
and the Licensee.


    Article 8 - LIABILITY

8.1 Subject to the provisions of Article 8.2, the Licensee shall be
entitled to claim compensation for any direct loss it may have suffered
from the Software as a result of a fault on the part of the relevant
Licensor, subject to providing evidence thereof.

8.2 The Licensor's liability is limited to the commitments made under
this Agreement and shall not be incurred as a result of in particular:
(i) loss due the Licensee's total or partial failure to fulfill its
obligations, (ii) direct or consequential loss that is suffered by the
Licensee due to the use or performance of the Software, and (iii) more
generally, any consequential loss. In particular the Parties expressly
agree that any or all pecuniary or business loss (i.e. loss of data,
loss of profits, operating loss, loss of customers or orders,
opportunity cost, any disturbance to business activities) or any or all
legal proceedings instituted against the Licensee by a third party,
shall constitute consequential loss and shall not provide entitlement to
any or all compensation from the Licensor.


    Article 9 - WARRANTY

9.1 The Licensee acknowledges that the scientific and technical
state-of-the-art when the Software was distributed did not enable all
possible uses to be tested and verified, nor for the presence of
possible defects to be detected. In this respect, the Licensee's
attention has been drawn to the risks associated with loading, using,
modifying and/or developing and reproducing the Software which are
reserved for experienced users.

The Licensee shall be responsible for verifying, by any or all means,
the suitability of the product for its requirements, its good working
order, and for ensuring that it shall not cause damage to either persons
or properties.

9.2 The Licensor hereby represents, in good faith, that it is entitled
to grant all the rights over the Software (including in particular the
rights set forth in Article 5 <#scope>).

9.3 The Licensee acknowledges that the Software is supplied "as is" by
the Licensor without any other express or tacit warranty, other than
that provided for in Article 9.2 <#good-faith> and, in particular,
without any warranty as to its commercial value, its secured, safe,
innovative or relevant nature.

Specifically, the Licensor does not warrant that the Software is free
from any error, that it will operate without interruption, that it will
be compatible with the Licensee's own equipment and software
configuration, nor that it will meet the Licensee's requirements.

9.4 The Licensor does not either expressly or tacitly warrant that the
Software does not infringe any third party intellectual property right
relating to a patent, software or any other property right. Therefore,
the Licensor disclaims any and all liability towards the Licensee
arising out of any or all proceedings for infringement that may be
instituted in respect of the use, modification and redistribution of the
Software. Nevertheless, should such proceedings be instituted against
the Licensee, the Licensor shall provide it with technical and legal
expertise for its defense. Such technical and legal expertise shall be
decided on a case-by-case basis between the relevant Licensor and the
Licensee pursuant to a memorandum of understanding. The Licensor
disclaims any and all liability as regards the Licensee's use of the
name of the Software. No warranty is given as regards the existence of
prior rights over the name of the Software or as regards the existence
of a trademark.


    Article 10 - TERMINATION

10.1 In the event of a breach by the Licensee of its obligations
hereunder, the Licensor may automatically terminate this Agreement
thirty (30) days after notice has been sent to the Licensee and has
remained ineffective.

10.2 A Licensee whose Agreement is terminated shall no longer be
authorized to use, modify or distribute the Software. However, any
licenses that it may have granted prior to termination of the Agreement
shall remain valid subject to their having been granted in compliance
with the terms and conditions hereof.


    Article 11 - MISCELLANEOUS


      11.1 EXCUSABLE EVENTS

Neither Party shall be liable for any or all delay, or failure to
perform the Agreement, that may be attributable to an event of force
majeure, an act of God or an outside cause, such as defective
functioning or interruptions of the electricity or telecommunications
networks, network paralysis following a virus attack, intervention by
government authorities, natural disasters, water damage, earthquakes,
fire, explosions, strikes and labor unrest, war, etc.

11.2 Any failure by either Party, on one or more occasions, to invoke
one or more of the provisions hereof, shall under no circumstances be
interpreted as being a waiver by the interested Party of its right to
invoke said provision(s) subsequently.

11.3 The Agreement cancels and replaces any or all previous agreements,
whether written or oral, between the Parties and having the same
purpose, and constitutes the entirety of the agreement between said
Parties concerning said purpose. No supplement or modification to the
terms and conditions hereof shall be effective as between the Parties
unless it is made in writing and signed by their duly authorized
representatives.

11.4 In the event that one or more of the provisions hereof were to
conflict with a current or future applicable act or legislative text,
said act or legislative text shall prevail, and the Parties shall make
the necessary amendments so as to comply with said act or legislative
text. All other provisions shall remain effective. Similarly, invalidity
of a provision of the Agreement, for any reason whatsoever, shall not
cause the Agreement as a whole to be invalid.


      11.5 LANGUAGE

The Agreement is drafted in both French and English and both versions
are deemed authentic.


    Article 12 - NEW VERSIONS OF THE AGREEMENT

12.1 Any person is authorized to duplicate and distribute copies of this
Agreement.

12.2 So as to ensure coherence, the wording of this Agreement is
protected and may only be modified by the authors of the License, who
reserve the right to periodically publish updates or new versions of the
Agreement, each with a separate number. These subsequent versions may
address new issues encountered by Free Software.

12.3 Any Software distributed under a given version of the Agreement may
only be subsequently distributed under the same version of the Agreement
or a subsequent version, subject to the provisions of Article 5.3.4
<#compatibility>.


    Article 13 - GOVERNING LAW AND JURISDICTION

13.1 The Agreement is governed by French law. The Parties agree to
endeavor to seek an amicable solution to any disagreements or disputes
that may arise during the performance of the Agreement.

13.2 Failing an amicable solution within two (2) months as from their
occurrence, and unless emergency proceedings are necessary, the
disagreements or disputes shall be referred to the Paris Courts having
jurisdiction, by the more diligent Party.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/ovinc/aquasol",
    "name": "aquasol",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "water,solutions,salt,thermodynamic,properties,relations,convert,IAPWS,supersaturated,supersaturation,pitzer,kelvin,activity,volumetric,vapor_pressure,dewpoint,density,surface tension,viscosity,diffusivity,solubility,activity coefficient,osmotic,refractive index,electrical conductivity,physics,chemistry",
    "author": "Olivier Vincent",
    "author_email": "ovinc.py@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/02/fd/ca2dfdb405a14b5af5c49a58d3f0fb8ed8ab5c9d5f2d0410c8530b9cc602/aquasol-1.6.0.tar.gz",
    "platform": null,
    "description": "General information\n===================\n\nThis package computes useful thermodynamic quantities for water and aqueous solutions (undersaturated, saturated and supersaturated). Is is divided in two modules: **water** (properties of pure water) and **solutions** (properties of aqueous solutions), which provide various functions to calculate properties of interest. There is also a list of useful constants in the *constants.py* module.\n\nIt is also possible to just see plots of the properties by running the package directly from a shell console with\n```bash\npython -m aquasol\n```\n\nThe package is under CeCILL-2.1 license, which is equivalent to GNU-GPL (see license file and information below)\n\nHow to install:\n```bash\npip install aquasol\n```\n\n\n\nWATER\n=====\n\nProperties\n----------\n\nThe *water* module has the following functions(*), which return the respective properties of interest as a function of temperature:\n- `density_sat()` for density on the liquid-vapor coexistence line (kg/m^3)\n- `density_atm()` for density at ambient pressure 0.1 MPa (kg/m^3)\n- `dielectric_constant()` for the dielectric constant at 0.1 MPa (-)\n- `diffusivity_in_air()` for diffusivity of water vapor in air (m^2/s)\n- `surface_tension()` for surface tension of pure water (N/m).\n- `vapor_pressure()` for saturation vapor pressure of pure water (Pa),\n- `viscosity()` for viscosity of liquid water (Pa.s)\n\nThe structure of the call for any property (replace *property* below by one of the function names above) is\n```python\nfrom aquasol.water import property\n\nvalue = property(T=25, unit='C', source=None)\n```\n*Inputs*\n\n- `T` (int, float, array, list, or tuple): temperature\n- `unit` (str, default 'C'): 'C' for Celsius, 'K' for Kelvin\n- `source` (str, default None) : Source for the used equation, if *None* then the default source for the particular property is used.\n\n*Output*\n\n- Property in SI units, returned as numpy array if input is not a scalar.\n\n*Note*\n\n- See further below for `dewpoint()`, `kelvin_pressure()`, `kelvin_humidity()`, `kelvin_radius()` and `molar_volume()`, which work a bit differently.\n\n(*) As of aquasol 1.5, the main functions (excluding `dewpoint` etc.) are now callable objects, which act as functions but have additional attributes, see *Attributes and Methods* below.\n\n\n### Examples\n\n(See docstrings for more details)\n\n```python\nfrom aquasol.water import vapor_pressure, surface_tension\nfrom aquasol.water import density_atm, density_sat\nfrom aquasol.water import diffusivity_in_air, viscosity\n\nvapor_pressure()             # Saturation vapor pressure (Pa) at 25\u00b0C (3170 Pa)\nvapor_pressure(298.15, 'K')        # same thing\nvapor_pressure(source='Wexler')    # same thing, but according to Wexler\nvapor_pressure(T=[5, 15, 25])          # psat at different temperatures in \u00b0C\n\nsurface_tension(T=[5, 15, 25])         # same, but for surface tension (N/m)\n\ndensity_atm(4)               # density of water at atmospheric pressure at 4\u00b0C\ndensity_sat(277.15, 'K')     # same thing, but on the coexistence line\n\ndiffusivity_in_air(27)  # Diffusivity of water vapor in air at 27\u00b0C\n\nviscosity()         # Viscosity of liquid water at 25\u00b0C\n\ndielectric_constant(T=20)   # Dielectric constant at 20\u00b0C ( = 80)\n```\n\n### Attributes & Methods\n\nThe properties listed above are in fact (since version 1.5) extended functions (i.e. callable objects), with additional attributes and methods that can be useful in various contexts; below are some examples using `vapor_pressure`.\n```python\nfrom aquasol.water import vapor_pressure\n\nvapor_pressure()         # Saturation vapor pressure (Pa) at 25\u00b0C\n\nvapor_pressure.sources         # all available sources\nvapor_pressure.default_source  # source used by default if None is provided\nvapor_pressure.get_source()          # return default source\nvapor_pressure.get_source('Wexler')  # checks if source exists and returns it\n\nvapor_pressure.quantity  # 'saturated vapor pressure'\nvapor_pressure.unit      # '[Pa]'\n```\n\nIt is also possible to access specific formulas (i.e. corresponding to a specific source), and get their properties.\n\n```python\nformula = vapor_pressure.get_formula('Wexler')  # default formula if no arg.\n\nformula.source  # 'Wexler'\nformula.temperature_range  # validity range of expression\nformula.temperature_unit   # 'C' or 'K', varies across formulas\n\nformula.calculate(T=300)  # Return value at given T (input in temperature_unit)\n```\n\n\nInverse and other property functions\n------------------------------------\n\nBased on the functions above, some inverse and other properties are also provided:\n\n- `dewpoint()`\n- `kelvin_pressure()`\n- `kelvin_radius()`\n- `kelvin_humidity()`\n- `molar_volume()`\n\n### Examples\n\n(See docstrings for more details)\n\n```python\nfrom aquasol.water import dewpoint, kelvin_radius, kelvin_humidity\n\ndewpoint(p=1000)  # Dew point of a vapor at 1kPa\ndewpoint(rh=50)  # Dew point at 50%RH and 25\u00b0C (default)\ndewpoint('K', 300, rh=50)  # specify temperature\ndewpoint(aw=[0.5, 0.7])     # It is possible to input lists, tuples, arrays\n\nkelvin_pressure(rh=80)  # (liquid) Kelvin pressure corresponding to 80%RH\nkelvin_pressure(aw=[0.5, 0.7, 0.9], T=20)  # at 20\u00b0C for 50%RH, 70%RH, 90%RH\n\nkelvin_radius(aw=0.8)  # Kelvin radius at 80%RH and T=25\u00b0C\nkelvin_radius(rh=80, ncurv=1)  # assume cylindrical meniscus instead of spherical\n\nkelvin_humidity(r=4.7e-9)  # activity corresponding to Kelvin radius of 4.7 nm at 25\u00b0C\nkelvin_humidity(r=4.7e-9, out='rh')  # same, but expressed in %RH instead of activity\nkelvin_humidity(r=4.7e-9, ncurv=1, out='p')  # cylindrical interface, output as pressure\nkelvin_humidity(P=[-30e6, -50e6])  # input can also be liquid pressure\n\nmolar_volume()  # molar volume of water at 25\u00b0C\nmolar_volume(T=30)  # at 30\u00b0C\nmolar_volume(condition='atm')  # using atmosph. density instead of sat.\n```\n\n\nSources\n-------\n\nBelow are the sources for water vapor pressure (1, 2, 3), density (1, 4, 5), surface tension (6), diffusivity in air (7, 8), viscosity (9)\n\n(1) Wagner, W. & Pru\u00df, A. *The IAPWS Formulation 1995 for the Thermodynamic Properties of Ordinary Water Substance for General and Scientific Use.* Journal of Physical and Chemical Reference Data 31, 387\u2013535 (2002). [*]\n\n(2) Wexler, A. & Greenspan, L. *Vapor Pressure Equation for Water in the Range 0 to 100\u00b0C.* Journal of Research of the National Bureau of Standards - A. Physics and Chemistry 75A, 213\u2013245 (1971).\n\n(3) Bridgeman, O. C. & Aldrich, E. W. *Vapor Pressure Tables for Water.* Journal of Heat Transfer 86, 279\u2013286 (1964).\n\n(4) P\u00e1tek, J., Hrub\u00fd, J., Klomfar, J., Sou\u010dkov\u00e1, M. & Harvey, A. H. *Reference Correlations for Thermophysical Properties of Liquid Water at 0.1MPa.* Journal of Physical and Chemical Reference Data 38, 21\u201329 (2009). [*]\n\n(5) Kell, G. S. Density, thermal expansivity, and compressibility of liquid water from 0.deg. to 150.deg.. *Correlations and tables for atmospheric pressure and saturation reviewed and expressed on 1968 temperature scale.* J. Chem. Eng. Data 20, 97\u2013105 (1975).\n\n(6) IAPWS *Revised Release on Surface Tension of Ordinary Water Substance.* Moscow, Russia, June 2014. [*]\n\n(7) Massman, W. J. *A review of the molecular diffusivities of H2O, CO2, CH4, CO, O3, SO2, NH3, N2O, NO, and NO2 in air, O2 and N2 near STP.* Atmospheric Environment 32, 1111-1127 (1998).\n\n(8) Marrero, T. R. and Mason E. A., *Gaseous diffusion coeffcients.* Journal of Physics and Chemistry Reference Data 1, 3-118 (1972)\n\n(9) Huber, M. L. et al. *New International Formulation for the Viscosity of H2O.* Journal of Physical and Chemical Reference Data 38, 101-125 (2009). [*]\n\n(10) Archer, D. G. & Wang, P. *The Dielectric Constant of Water and Debye-H\u00fcckel Limiting Law Slopes.* Journal of Physical and Chemical Reference Data 19, 371-411 (1990).\n\n[*] Recommended by IAPWS.\n\n\nSOLUTIONS\n=========\n\nProperties\n----------\n\nThe *solutions* module has the following functions(**), which return the respective properties of interest as a function of solute concentration and temperature (when available) of an aqueous solution.\n- `density()` for absolute (kg / m^3) or relative density,\n- `activity_coefficient()` for molal activity coefficient of solute (dimensionless)\n- `water_activity()` for solvent activity (dimensionless, range 0-1),\n- `surface_tension()` for absolute surface tension (N/m) or relative (normalized by that of pure water at the same temperature).\n- `refractive_index()` (dimensionless)\n- `electrical_conductivity()` (S/m)\n- `solubility()` (output unit can be chosen)\n\nThe following functions, which are based on some of the ones above, are also defined:\n- `osmotic_coefficient()`: $\\phi$, calculated using `water_activity()`\n- `osmotic_pressure()`: $\\Pi$, calculated using `water_activity()`\n- `aw_saturated()`: water activity of saturated solutions (i.e., equilibrium humidity)\n- `debye_length()`: Debye length as a function of temperature and concentration\n\nThe structure of the call for any property (replace *property* below by one of the function names above) is\n```python\ndata = property(solute='NaCl', T=25, unit='C', source=None, **concentration)\n```\nwith an additional parameter `relative=False` where applicable.\n\nNote that the solubility has a slightly different call:\n```python\ndata = solubility(solute='NaCl', T=25, unit='C', source=None, out='m')\n```\n\n*Inputs*\n\n- `solute` (str): solute name, default 'NaCl'\n- `T` (float): temperature (default 25)\n- `unit` (str, default 'C'): 'C' for Celsius, 'K' for Kelvin\n- `source` (str, default None) : Source for the used equation, if None then\ngets the default source for the particular solute (defined in submodules).\n- `**concentration`: kwargs with any unit that is allowed by `convert()` (see below), e.g. `property(m=5.3)` for molality.\n- when applicable: `relative` (bool, default False): True for relative density\n- for solubility, the `out` parameter is the unit in which the solubility will be expressed (see `convert()` below)\n\n*Output*\n\n- Property in SI units, returned as numpy array if input is not a scalar.\n\nNote: similarly to temperature, the values in `**concentration` can be an array, list or tuple, however if it's the case, temperature needs to be a scalar.\n\n(**) As of aquasol 1.5, the main property functions (excluding `osmotic pressure` etc.) are now callable objects, which act as functions but have additional attributes, see *Attributes and Methods* below.*\n\n\n### Examples\n\n```python\nfrom aquasol.solutions import water_activity, activity_coefficient\nfrom aquasol.solutions import osmotic_pressure, osmotic_coefficient\nfrom aquasol.solutions import density, surface_tension, refractive_index\nfrom aquasol.solutions import solubility, aw_saturated\nfrom aquasol.solutions import ionic_strength, debye_length\n\n# Water activity (dimensionless, 'aw') ---------------------------------------\nwater_activity(x=0.1)            # NaCl solution, mole fraction 10%, 25\u00b0C\nwater_activity(r=0.3)           # solution when mixing 55g NaCl with 100g H2O\nwater_activity('LiCl', w=0.3, T=70)  # LiCl solution, 30% weight fraction, 70\u00b0C\nwater_activity(solute='CaCl2', m=[2, 4, 6])  # for several molalities (mol/kg)\n\n# Other ways to express water activity:\nosmotic_pressure(m=5)\nosmotic_coefficient(x=0.1, solute='LiCl')\n\n# Molal activity coefficient (dimensionless, 'gamma') ------------------------\nactivity_coefficient(m=6.1)            # ~ Saturated NaCl solution, 25\u00b0C\nactivity_coefficient(solute='Na2SO3', m=2.2)  # Na2SO3 at 2.2 mol/kg\n\n# Density (absolute, kg / m^3, or relative) ----------------------------------\ndensity(source='Tang', x=0.23)  # supersaturatad NaCl, 25\u00b0C, using Tang equation\ndensity(c=5000, relative=True)  # relative density of NaCl, 5 mol/L.\ndensity('LiCl', w=[0.11, 0.22, 0.51])  # for several weight fractions of LiCl\n\n# Surface tension (N / m) ----------------------------------------------------\nsurface_tension(r=0.55)           # solution when mixing 55g NaCl with 100g H2O\nsurface_tension(c=5000, relative=True)  # sigma / sigma(H2O) at 5 mol/L of NaCl\nsurface_tension('CaCl2', 353, 'K', c=5e3)    # CaCl2, 300K, 5 mol/L\nsurface_tension(x=[0.02, 0.04, 0.08], T=21)  # iterable mole fraction\n\n# Refractive index -----------------------------------------------------------\nrefractive_index(c=4321)  # concentration of 4.321 mol/L of NaCl, 25\u00b0C\nrefractive_index('KCl', T=22, r=[0.1, 0.175])  # various mass ratios of KCl\n\n# Electrical conductivity ----------------------------------------------------\nelectrical_conductivity('KCl', m=0.1)  # molality of 0.1 mol/L of KCl, 25\u00b0C\nelectrical_conductivity('KCl', T=50, x=[0.01, 0.02])  # various mole fractions\nelectrical_conductivity('KCl', T=[0, 25, 50], m=1)  # various mole fractions\n\n# Solubility -----------------------------------------------------------------\nsolubility()       # NaCl at 25\u00b0C\nsolubility(T=10)   # NaCl at 10\u00b0C\nsolubility('KCl')  # KCl, 25\u00b0C\nsolubility('Na2SO4,10H20', T=10)  # Mirabilite at T=10\u00b0C\n\n# Other ways to express solubility:\naw_saturated()        # Activity of saturated NaCl solution = 0.753\naw_saturated('LiCl')  # etc.\n\n# Debye length and ionic strength\ndebye_length('Na2SO4', c=100)  # sodium sulfate at 100mM\nionic_strength('KCl', m=2)     # molal ionic strength\n```\n\n### Attributes & Methods\n\nSimilarly to the `water` module, the properties listed above are in fact (since version 1.5) extended functions (i.e. callable objects), with additional attributes and methods that can be useful in various contexts; below are some examples using `density`.\n```python\nfrom aquasol.solutions import density\n\ndensity(m=6)  # Density of an NaCl solution at 6 mol/kg\n\ndensity.quantity  # 'density'\ndensity.unit  #   # '[kg/m^3]'\n\ndensity.solutes  # All solutes available for the given property\ndensity.default_solute  # solute used by default if None provided\ndensity.get_solute()  # get solute or defautl solute, see docstring\n\ndensity.sources  # Dictionary of sources available for each solute\ndensity.default_sources  # Dict of sources used by default if None provided\ndensity.get_source()   # get source or default source, see docstring\n```\n\nIt is also possible to access specific formulas (i.e. corresponding to a specific source and solute), and get their properties.\n\n```python\nformula = density.get_formula(solute='KCl', source='Krumgalz')\n\nformula.source  # 'Krumgalz'\nformula.temperature_range  # validity range of expression in temperature\nformula.temperature_unit   # 'C' or 'K', varies across formulas\nformula.solute             # solute of interest\n\nformula.concentration_range  # validity range of expression in concentration\nformula.concentration_unit   # 'm' 'w', 'x', etc., varies across formulas\n\nformula.with_water_reference  # if true, returns a tuple with value at c=0 and value at c\nformula.calculate(m=2.2)      # Value at given concentration (in concentration_unit)\n```\n\n\nInverse property functions\n--------------------------\n\nThe `aw_to_conc` calculates what concentration of solute is necessary to reach a specific water activity:\n```python\naw_to_conc(a, out='w', solute='NaCl', T=25, unit='C', source=None):\n```\nFor example:\n```python\naw_to_conc(0.8)  # weight fraction of NaCl to have a humidity of 80%RH\naw_to_conc([0.6, 0.85], out='m')  # molality of NaCl to get 60%RH and 85%RH\naw_to_conc(0.33, 'r', 'LiCl', T=50)  # in terms of mass ratio, for LiCl at 50\u00b0C\n```\n\nOther functions\n---------------\n\nThe *solutions* module also has a function to convert between concentration units:\n```python\nvalue_out = convert(value, unit_in, unit_out, solute='NaCl', density_source=None)\n```\nwhere unit_in and unit_out can be in the following list:\n- *'m'* (molality, mol/kg)\n- *'c'* (molarity, mol/m^3)\n- *'x'* (mole fraction)\n- *'w'* (weight fraction)\n- *'r'* (ratio solute mass to solvent mass).\n\nBy default, solute is `'NaCl'`. When converting to/from molarity, one must also use a formula to calculate the density of the solution. It's possible to specify a formula different than the default one by providing an argument to the `density_source` argument.\n\n**NOTE**: In case of issues such as `ValueError: Requested values higher than the higher limit of the image`, try playing with the `density_wmin` and `density_wmax` parameters in `convert()`.\n\nOne can access more elaborate quantities with the following functions:\n\n```python\nIy = ionic_strength(solute, **concentration)\n```\nfor ionic strength, which can be expressed in terms of molarity, molality or mole fraction. Which version is chosen among these three possibilities depend on the input parameters, e.g. *m=5.3* for molality, *x=0.08* for mole fraction, *c=5000* for molarity.\n\n```python\ny1, y2 = ion_quantities(solute, **concentration)\n```\nwhich calculate quantities of individual ions within the solution instead of considering the solute as a whole. Similarly, the result depends on the input unit, which can also be only among `m`, `c` or `x`.\n\n*See docstrings for more details.*\n\nAvailable Solutes\n-----------------\n\nSorted by alphabetical order. When available, the sources are written in parentheses. For convert, an X means available.\n\n| Solute | Water Activity | Activity Coeff. |      Density      | Surface Tension | Refr. Index | Elec. Conduct. | Solubility | Convert (*) |\n|:------:|:--------------:|:---------------:|:-----------------:|:---------------:|:-----------:|:--------------:|:----------:|:-----------:|\n| CaCl2  |      (1)       |                 |     (1,3,14)      |      (1,6)      |     (7)     |                |            |      X      |\n| KCl    |     (8,13)     |     (8,13)      |      (3,14)       |       (6)       |     (7)     |       (9)      |    (13)    |      X      |\n| KI     |                |                 |      (3,14)       |                 |             |                |            |      X      |\n| LiBr   |    (19,20)     |      (20)       |                   |                 |             |                |    (18)    |      -      |\n| LiCl   |   (1,19,20)    |      (20)       |      (1,14)       |       (1)       |             |                |    (17)    |      X      |\n| MgCl2  |                |                 |      (3,14)       |       (6)       |             |                |            |      X      |\n| Na2SO4 |   (2,12,13)    |    (12,13)      |    (10,14,15)     |       (6)       |             |                |    (13)    |      X      |\n| NaCl   | (2,8,12,13,20) |  (8,12,13,20)   | (3,4,5,11,14,15)  |      (6,11)     |     (7)     |                | (13,16,17) |      X      |\n\n(*) Solutes with no density data cannot use conversion to/from molarity ('c') but all other conversions work. They are noted with - instead of X.\n\nSources\n-------\n\n(1) Conde, M. R., *Properties of aqueous solutions of lithium and calcium chlorides: formulations for use in air conditioning equipment design.*\nInternational Journal of Thermal Sciences 43, 367\u2013382 (2004).\n\n(2) Clegg, S. L., Brimblecombe, P., Liang, Z. & Chan, C. K., *Thermodynamic Properties of Aqueous Aerosols to High Supersaturation: II \u2014 A Model of the System Na+ Cl\u2212 NO3- SO42- H2O at 298.15 K.* Aerosol Science and Technology 27, 345\u2013366 (1997).\n\n(3) Al Ghafri, S., Maitland, G. C. & Trusler, J. P. M., *Densities of Aqueous MgCl 2 (aq), CaCl 2 (aq), KI(aq), NaCl(aq), KCl(aq), AlCl 3 (aq), and (0.964 NaCl + 0.136 KCl)(aq) at Temperatures Between (283 and 472) K, Pressures up to 68.5 MPa, and Molalities up to 6 mol\u00b7kg \u20131.* Journal of Chemical & Engineering Data 57, 1288\u20131304 (2012).\n\n(4) Tang, I. N., *Chemical and size effects of hygroscopic aerosols on light scattering coefficients.* Journal of Geophysical Research: Atmospheres 101, 19245\u201319250 (1996).\n\n(5) Simion, A. I., Grigoras, C., Rosu, A.-M. & Gavril\u0103, L. *Mathematical modelling of density and viscosity of NaCl aqueous solutions.* Journal of Agroalimentary Processing and Technologies 21, 41\u201352 (2015).\n\n(6) Dutcher, C. S., Wexler, A. S. & Clegg, S. L. *Surface Tensions of Inorganic Multicomponent Aqueous Electrolyte Solutions and Melts.* J. Phys. Chem. A 114, 12216\u201312230 (2010).\n\n(7) Tan, C.-Y. & Huang, Y.-X. *Dependence of Refractive Index on Concentration and Temperature in Electrolyte Solution, Polar Solution, Nonpolar Solution, and Protein Solution.* J. Chem. Eng. Data 60, 2827\u20132833 (2015).\n\n(8) Tang, I. N., Munkelwitz, H. R. & Wang, N. *Water activity measurements with single suspended droplets: The NaCl-H2O and KCl-H2O systems.* Journal of Colloid and Interface Science 114, 409\u2013415 (1986).\n\n(9) McKee, C. B., *An Accurate Equation for the Electrolytic Conductivity of Potassium Chloride Solutions*. J Solution Chem 38, 1155-1172 (2009).\n\n(10) Tang, I. N. & Munkelwitz, H. R., *Simultaneous Determination of Refractive Index and Density of an Evaporating Aqueous Solution Droplet*. Aerosol Science and Technology 15, 201\u2013207 (1991).\n\n(11) Talreja-Muthreja, T., Linnow, K., Enke, D. & Steiger. *M. Deliquescence of NaCl Confined in Nanoporous Silica*. Langmuir 38, 10963-10974 (2022).\n\n(12) Steiger, M., *Crystal growth in porous materials\u2014I: The crystallization pressure of large crystals.* Journal of Crystal Growth 282, 455-469 (2005).\n\n(13) Steiger, M., Kiekbusch, J. & Nicolai, *An improved model incorporating Pitzer's equations for calculation of thermodynamic properties of pore solutions implemented into an efficient program code.* Construction and Building Materials 22, 1841-1850 (2008).\n\n(14) Krumgalz, B. S., Pogorelsky, R. & Pitzer, K. S., *Volumetric Properties of Single Aqueous Electrolytes from Zero to Saturation Concentration at 298.15 K Represented by Pitzer's Ion-Interaction Equations.* Journal of Physical and Chemical Reference Data 25, 663-689 (1996).\n\n(15) Clegg, S. L. & Wexler, A. S., *Densities and Apparent Molar Volumes of Atmospherically Important Electrolyte Solutions. 1. The Solutes H2SO4, HNO3, HCl, Na2SO4, NaNO3, NaCl, (NH4)2SO4, NH4NO3, and NH4Cl from 0 to 50\u00b0C, Including Extrapolations to Very Low Temperature and to the Pure Liquid State, and NaHSO4, NaOH, and NH3 at 25\u00b0C.* J. Phys. Chem. A 115, 3393-3460 (2011).\n\n(16) Sparrow, B. S., *Empirical equations for the thermodynamic properties of aqueous sodium chloride*. Desalination 159, 161-170 (2003).\n\n(17) CRC Handbook of Chemistry and Physics: A Ready-Reference Book of Chemical and Physical Data. (CRC Press, Boca Raton London New York, 2023).\n\n(18) Duvall, K. N., Dirksen, J. A. & Ring, T. A. *Ostwald-Meyers Metastable Region in LiBr Crystallization\u2014Comparison of Measurements with Predictions.* Journal of Colloid and Interface Science 239, 391-398 (2001).\n\n(19) Patil, K. R., Tripathi, A. D., Pathak, G. & Katti, S. S. *Thermodynamic Properties of Aqueous Electrolyte Solutions. 1. Vapor Pressure of Aqueous Solutions of LiCI, LiBr, and LiI.* J. Chem. Eng. Data 35, 166-168 (1990)\n\n(20) Pitzer, K. S. & Mayorga, G., *Thermodynamics of electrolytes. II. Activity and osmotic coefficients for strong electrolytes with one or both ions univalent.* J. Phys. Chem. 77, 2300-2308 (1973).\n\n\nConstants\n=========\n\nThe *constants.py* file includes useful values including critical point data, molecular weights of species, dissociation numbers etc. Use the function `molar_mass` to get the molar mass (in kg/mol) of a specific solute from the available solutes, e.g.:\n\n```python\nfrom aquasol.constants import Mw           # molar mass of water (kg/mol)\nfrom aquasol.constants import molar_mass   # molar mass of specific solute\nfrom aquasol.constants import get_solute   # returns solute object with info\n\nNa2SO4 = get_solute('Na2SO4')\n\nmolar_mass('Na2SO4')            # 0.142 kg/mol\nNa2SO4.molar_mass               # same\nNa2SO4.molecular_weight         # same but in Daltons (142)\n\nz_m, z_x = Na2SO4.charges          # (1, -2) for Na(1+), SO4(2-)\nnu_m, nu_x = Na2SO4.stoichiometry   # (2, 1) for Na(2) SO4(1)\n```\n\n\nShortcut functions\n==================\n\nFor rapid calculations without much typing, the following shortcuts are provided:\n\n|       original function       | shortcut |\n|:-----------------------------:|:--------:|\n| `water.vapor_pressure()`      |  `ps()`  |\n| `water.dewpoint()`            |  `dp()`  |\n| `water.kelvin_pressure()`     |  `kp()`  |\n| `water.kelvin_radius()`       |  `kr()`  |\n| `water.kelvin_humidity()`     |  `kh()`  |\n| `water.molar_volume()`        |  `vm()`  |\n| `solutions.water_activity()`  |  `aw()`  |\n| `solutions.aw_to_conc()`      |  `ac()`  |\n| `solutions.convert()`         |  `cv()`  |\n\nFor example, the two following imports are equivalent:\n```python\nfrom aquasol.solutions import water_activity as aw\nfrom aquasol import aw\n```\n\nInformation\n===========\n\nPackage requirements\n--------------------\n- numpy\n- pynverse\n- [optional] matplotlib (only if running the package directly as a main file to plot the properties)\n\nPython requirements\n-------------------\nPython : >= 3.6\n\nAuthor\n------\n\nOlivier Vincent\n\n(ovinc.py@gmail.com)\n\nContributors\n------------\nMarine Poizat (2019), L\u00e9o Martin (2020), Hugo Bellezza (2023)\n\nLicense\n-------\n\nCeCILL v.2.1 (equivalent to GNU GPL, see https://cecill.info/)\nSee LICENSE file.\n\nCopyright Olivier Vincent (2020-2024)\n(ovinc.py@gmail.com)\n\nThis software is a computer program whose purpose is to provide the\nproperties of water and aqueous solutions as a function of temperature\nand/or concentration (along with other useful tools).\n\nThis software is governed by the CeCILL license under French law and\nabiding by the rules of distribution of free software. You can  use,\nmodify and/ or redistribute the software under the terms of the CeCILL\nlicense as circulated by CEA, CNRS and INRIA at the following URL\n\"http://www.cecill.info\".\n\nAs a counterpart to the access to the source code and rights to copy,\nmodify and redistribute granted by the license, users are provided only\nwith a limited warranty  and the software's author, the holder of the\neconomic rights, and the successive licensors have only limited\nliability.\n\nIn this respect, the user's attention is drawn to the risks associated\nwith loading, using, modifying and/or developing or reproducing the\nsoftware by the user in light of its specific status of free software,\nthat may mean that it is complicated to manipulate, and that also\ntherefore means that it is reserved for developers and experienced\nprofessionals having in-depth computer knowledge. Users are therefore\nencouraged to load and test the software's suitability as regards their\nrequirements in conditions enabling the security of their systems and/or\ndata to be ensured and, more generally, to use and operate it in the\nsame conditions as regards security.\n\nThe fact that you are presently reading this means that you have had\nknowledge of the CeCILL license and that you accept its terms.\n\n\n  CeCILL FREE SOFTWARE LICENSE AGREEMENT\n\nVersion 2.1 dated 2013-06-21\n\n\n    Notice\n\nThis Agreement is a Free Software license agreement that is the result\nof discussions between its authors in order to ensure compliance with\nthe two main principles guiding its drafting:\n\n  * firstly, compliance with the principles governing the distribution\n    of Free Software: access to source code, broad rights granted to users,\n  * secondly, the election of a governing law, French law, with which it\n    is conformant, both as regards the law of torts and intellectual\n    property law, and the protection that it offers to both authors and\n    holders of the economic rights over software.\n\nThe authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])\nlicense are:\n\nCommissariat \u00e0 l'\u00e9nergie atomique et aux \u00e9nergies alternatives - CEA, a\npublic scientific, technical and industrial research establishment,\nhaving its principal place of business at 25 rue Leblanc, immeuble Le\nPonant D, 75015 Paris, France.\n\nCentre National de la Recherche Scientifique - CNRS, a public scientific\nand technological establishment, having its principal place of business\nat 3 rue Michel-Ange, 75794 Paris cedex 16, France.\n\nInstitut National de Recherche en Informatique et en Automatique -\nInria, a public scientific and technological establishment, having its\nprincipal place of business at Domaine de Voluceau, Rocquencourt, BP\n105, 78153 Le Chesnay cedex, France.\n\n\n    Preamble\n\nThe purpose of this Free Software license agreement is to grant users\nthe right to modify and redistribute the software governed by this\nlicense within the framework of an open source distribution model.\n\nThe exercising of this right is conditional upon certain obligations for\nusers so as to preserve this status for all subsequent redistributions.\n\nIn consideration of access to the source code and the rights to copy,\nmodify and redistribute granted by the license, users are provided only\nwith a limited warranty and the software's author, the holder of the\neconomic rights, and the successive licensors only have limited liability.\n\nIn this respect, the risks associated with loading, using, modifying\nand/or developing or reproducing the software by the user are brought to\nthe user's attention, given its Free Software status, which may make it\ncomplicated to use, with the result that its use is reserved for\ndevelopers and experienced professionals having in-depth computer\nknowledge. Users are therefore encouraged to load and test the\nsuitability of the software as regards their requirements in conditions\nenabling the security of their systems and/or data to be ensured and,\nmore generally, to use and operate it in the same conditions of\nsecurity. This Agreement may be freely reproduced and published,\nprovided it is not altered, and that no provisions are either added or\nremoved herefrom.\n\nThis Agreement may apply to any or all software for which the holder of\nthe economic rights decides to submit the use thereof to its provisions.\n\nFrequently asked questions can be found on the official website of the\nCeCILL licenses family (http://www.cecill.info/index.en.html) for any\nnecessary clarification.\n\n\n    Article 1 - DEFINITIONS\n\nFor the purpose of this Agreement, when the following expressions\ncommence with a capital letter, they shall have the following meaning:\n\nAgreement: means this license agreement, and its possible subsequent\nversions and annexes.\n\nSoftware: means the software in its Object Code and/or Source Code form\nand, where applicable, its documentation, \"as is\" when the Licensee\naccepts the Agreement.\n\nInitial Software: means the Software in its Source Code and possibly its\nObject Code form and, where applicable, its documentation, \"as is\" when\nit is first distributed under the terms and conditions of the Agreement.\n\nModified Software: means the Software modified by at least one\nContribution.\n\nSource Code: means all the Software's instructions and program lines to\nwhich access is required so as to modify the Software.\n\nObject Code: means the binary files originating from the compilation of\nthe Source Code.\n\nHolder: means the holder(s) of the economic rights over the Initial\nSoftware.\n\nLicensee: means the Software user(s) having accepted the Agreement.\n\nContributor: means a Licensee having made at least one Contribution.\n\nLicensor: means the Holder, or any other individual or legal entity, who\ndistributes the Software under the Agreement.\n\nContribution: means any or all modifications, corrections, translations,\nadaptations and/or new functions integrated into the Software by any or\nall Contributors, as well as any or all Internal Modules.\n\nModule: means a set of sources files including their documentation that\nenables supplementary functions or services in addition to those offered\nby the Software.\n\nExternal Module: means any or all Modules, not derived from the\nSoftware, so that this Module and the Software run in separate address\nspaces, with one calling the other when they are run.\n\nInternal Module: means any or all Module, connected to the Software so\nthat they both execute in the same address space.\n\nGNU GPL: means the GNU General Public License version 2 or any\nsubsequent version, as published by the Free Software Foundation Inc.\n\nGNU Affero GPL: means the GNU Affero General Public License version 3 or\nany subsequent version, as published by the Free Software Foundation Inc.\n\nEUPL: means the European Union Public License version 1.1 or any\nsubsequent version, as published by the European Commission.\n\nParties: mean both the Licensee and the Licensor.\n\nThese expressions may be used both in singular and plural form.\n\n\n    Article 2 - PURPOSE\n\nThe purpose of the Agreement is the grant by the Licensor to the\nLicensee of a non-exclusive, transferable and worldwide license for the\nSoftware as set forth in Article 5 <#scope> hereinafter for the whole\nterm of the protection granted by the rights over said Software.\n\n\n    Article 3 - ACCEPTANCE\n\n3.1 The Licensee shall be deemed as having accepted the terms and\nconditions of this Agreement upon the occurrence of the first of the\nfollowing events:\n\n  * (i) loading the Software by any or all means, notably, by\n    downloading from a remote server, or by loading from a physical medium;\n  * (ii) the first time the Licensee exercises any of the rights granted\n    hereunder.\n\n3.2 One copy of the Agreement, containing a notice relating to the\ncharacteristics of the Software, to the limited warranty, and to the\nfact that its use is restricted to experienced users has been provided\nto the Licensee prior to its acceptance as set forth in Article 3.1\n<#accepting> hereinabove, and the Licensee hereby acknowledges that it\nhas read and understood it.\n\n\n    Article 4 - EFFECTIVE DATE AND TERM\n\n\n      4.1 EFFECTIVE DATE\n\nThe Agreement shall become effective on the date when it is accepted by\nthe Licensee as set forth in Article 3.1 <#accepting>.\n\n\n      4.2 TERM\n\nThe Agreement shall remain in force for the entire legal term of\nprotection of the economic rights over the Software.\n\n\n    Article 5 - SCOPE OF RIGHTS GRANTED\n\nThe Licensor hereby grants to the Licensee, who accepts, the following\nrights over the Software for any or all use, and for the term of the\nAgreement, on the basis of the terms and conditions set forth hereinafter.\n\nBesides, if the Licensor owns or comes to own one or more patents\nprotecting all or part of the functions of the Software or of its\ncomponents, the Licensor undertakes not to enforce the rights granted by\nthese patents against successive Licensees using, exploiting or\nmodifying the Software. If these patents are transferred, the Licensor\nundertakes to have the transferees subscribe to the obligations set\nforth in this paragraph.\n\n\n      5.1 RIGHT OF USE\n\nThe Licensee is authorized to use the Software, without any limitation\nas to its fields of application, with it being hereinafter specified\nthat this comprises:\n\n 1. permanent or temporary reproduction of all or part of the Software\n    by any or all means and in any or all form.\n\n 2. loading, displaying, running, or storing the Software on any or all\n    medium.\n\n 3. entitlement to observe, study or test its operation so as to\n    determine the ideas and principles behind any or all constituent\n    elements of said Software. This shall apply when the Licensee\n    carries out any or all loading, displaying, running, transmission or\n    storage operation as regards the Software, that it is entitled to\n    carry out hereunder.\n\n\n      5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS\n\nThe right to make Contributions includes the right to translate, adapt,\narrange, or make any or all modifications to the Software, and the right\nto reproduce the resulting software.\n\nThe Licensee is authorized to make any or all Contributions to the\nSoftware provided that it includes an explicit notice that it is the\nauthor of said Contribution and indicates the date of the creation thereof.\n\n\n      5.3 RIGHT OF DISTRIBUTION\n\nIn particular, the right of distribution includes the right to publish,\ntransmit and communicate the Software to the general public on any or\nall medium, and by any or all means, and the right to market, either in\nconsideration of a fee, or free of charge, one or more copies of the\nSoftware by any means.\n\nThe Licensee is further authorized to distribute copies of the modified\nor unmodified Software to third parties according to the terms and\nconditions set forth hereinafter.\n\n\n        5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION\n\nThe Licensee is authorized to distribute true copies of the Software in\nSource Code or Object Code form, provided that said distribution\ncomplies with all the provisions of the Agreement and is accompanied by:\n\n 1. a copy of the Agreement,\n\n 2. a notice relating to the limitation of both the Licensor's warranty\n    and liability as set forth in Articles 8 and 9,\n\nand that, in the event that only the Object Code of the Software is\nredistributed, the Licensee allows effective access to the full Source\nCode of the Software for a period of at least three years from the\ndistribution of the Software, it being understood that the additional\nacquisition cost of the Source Code shall not exceed the cost of the\ndata transfer.\n\n\n        5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE\n\nWhen the Licensee makes a Contribution to the Software, the terms and\nconditions for the distribution of the resulting Modified Software\nbecome subject to all the provisions of this Agreement.\n\nThe Licensee is authorized to distribute the Modified Software, in\nsource code or object code form, provided that said distribution\ncomplies with all the provisions of the Agreement and is accompanied by:\n\n 1. a copy of the Agreement,\n\n 2. a notice relating to the limitation of both the Licensor's warranty\n    and liability as set forth in Articles 8 and 9,\n\nand, in the event that only the object code of the Modified Software is\nredistributed,\n\n 3. a note stating the conditions of effective access to the full source\n    code of the Modified Software for a period of at least three years\n    from the distribution of the Modified Software, it being understood\n    that the additional acquisition cost of the source code shall not\n    exceed the cost of the data transfer.\n\n\n        5.3.3 DISTRIBUTION OF EXTERNAL MODULES\n\nWhen the Licensee has developed an External Module, the terms and\nconditions of this Agreement do not apply to said External Module, that\nmay be distributed under a separate license agreement.\n\n\n        5.3.4 COMPATIBILITY WITH OTHER LICENSES\n\nThe Licensee can include a code that is subject to the provisions of one\nof the versions of the GNU GPL, GNU Affero GPL and/or EUPL in the\nModified or unmodified Software, and distribute that entire code under\nthe terms of the same version of the GNU GPL, GNU Affero GPL and/or EUPL.\n\nThe Licensee can include the Modified or unmodified Software in a code\nthat is subject to the provisions of one of the versions of the GNU GPL,\nGNU Affero GPL and/or EUPL and distribute that entire code under the\nterms of the same version of the GNU GPL, GNU Affero GPL and/or EUPL.\n\n\n    Article 6 - INTELLECTUAL PROPERTY\n\n\n      6.1 OVER THE INITIAL SOFTWARE\n\nThe Holder owns the economic rights over the Initial Software. Any or\nall use of the Initial Software is subject to compliance with the terms\nand conditions under which the Holder has elected to distribute its work\nand no one shall be entitled to modify the terms and conditions for the\ndistribution of said Initial Software.\n\nThe Holder undertakes that the Initial Software will remain ruled at\nleast by this Agreement, for the duration set forth in Article 4.2 <#term>.\n\n\n      6.2 OVER THE CONTRIBUTIONS\n\nThe Licensee who develops a Contribution is the owner of the\nintellectual property rights over this Contribution as defined by\napplicable law.\n\n\n      6.3 OVER THE EXTERNAL MODULES\n\nThe Licensee who develops an External Module is the owner of the\nintellectual property rights over this External Module as defined by\napplicable law and is free to choose the type of agreement that shall\ngovern its distribution.\n\n\n      6.4 JOINT PROVISIONS\n\nThe Licensee expressly undertakes:\n\n 1. not to remove, or modify, in any manner, the intellectual property\n    notices attached to the Software;\n\n 2. to reproduce said notices, in an identical manner, in the copies of\n    the Software modified or not.\n\nThe Licensee undertakes not to directly or indirectly infringe the\nintellectual property rights on the Software of the Holder and/or\nContributors, and to take, where applicable, vis-\u00e0-vis its staff, any\nand all measures required to ensure respect of said intellectual\nproperty rights of the Holder and/or Contributors.\n\n\n    Article 7 - RELATED SERVICES\n\n7.1 Under no circumstances shall the Agreement oblige the Licensor to\nprovide technical assistance or maintenance services for the Software.\n\nHowever, the Licensor is entitled to offer this type of services. The\nterms and conditions of such technical assistance, and/or such\nmaintenance, shall be set forth in a separate instrument. Only the\nLicensor offering said maintenance and/or technical assistance services\nshall incur liability therefor.\n\n7.2 Similarly, any Licensor is entitled to offer to its licensees, under\nits sole responsibility, a warranty, that shall only be binding upon\nitself, for the redistribution of the Software and/or the Modified\nSoftware, under terms and conditions that it is free to decide. Said\nwarranty, and the financial terms and conditions of its application,\nshall be subject of a separate instrument executed between the Licensor\nand the Licensee.\n\n\n    Article 8 - LIABILITY\n\n8.1 Subject to the provisions of Article 8.2, the Licensee shall be\nentitled to claim compensation for any direct loss it may have suffered\nfrom the Software as a result of a fault on the part of the relevant\nLicensor, subject to providing evidence thereof.\n\n8.2 The Licensor's liability is limited to the commitments made under\nthis Agreement and shall not be incurred as a result of in particular:\n(i) loss due the Licensee's total or partial failure to fulfill its\nobligations, (ii) direct or consequential loss that is suffered by the\nLicensee due to the use or performance of the Software, and (iii) more\ngenerally, any consequential loss. In particular the Parties expressly\nagree that any or all pecuniary or business loss (i.e. loss of data,\nloss of profits, operating loss, loss of customers or orders,\nopportunity cost, any disturbance to business activities) or any or all\nlegal proceedings instituted against the Licensee by a third party,\nshall constitute consequential loss and shall not provide entitlement to\nany or all compensation from the Licensor.\n\n\n    Article 9 - WARRANTY\n\n9.1 The Licensee acknowledges that the scientific and technical\nstate-of-the-art when the Software was distributed did not enable all\npossible uses to be tested and verified, nor for the presence of\npossible defects to be detected. In this respect, the Licensee's\nattention has been drawn to the risks associated with loading, using,\nmodifying and/or developing and reproducing the Software which are\nreserved for experienced users.\n\nThe Licensee shall be responsible for verifying, by any or all means,\nthe suitability of the product for its requirements, its good working\norder, and for ensuring that it shall not cause damage to either persons\nor properties.\n\n9.2 The Licensor hereby represents, in good faith, that it is entitled\nto grant all the rights over the Software (including in particular the\nrights set forth in Article 5 <#scope>).\n\n9.3 The Licensee acknowledges that the Software is supplied \"as is\" by\nthe Licensor without any other express or tacit warranty, other than\nthat provided for in Article 9.2 <#good-faith> and, in particular,\nwithout any warranty as to its commercial value, its secured, safe,\ninnovative or relevant nature.\n\nSpecifically, the Licensor does not warrant that the Software is free\nfrom any error, that it will operate without interruption, that it will\nbe compatible with the Licensee's own equipment and software\nconfiguration, nor that it will meet the Licensee's requirements.\n\n9.4 The Licensor does not either expressly or tacitly warrant that the\nSoftware does not infringe any third party intellectual property right\nrelating to a patent, software or any other property right. Therefore,\nthe Licensor disclaims any and all liability towards the Licensee\narising out of any or all proceedings for infringement that may be\ninstituted in respect of the use, modification and redistribution of the\nSoftware. Nevertheless, should such proceedings be instituted against\nthe Licensee, the Licensor shall provide it with technical and legal\nexpertise for its defense. Such technical and legal expertise shall be\ndecided on a case-by-case basis between the relevant Licensor and the\nLicensee pursuant to a memorandum of understanding. The Licensor\ndisclaims any and all liability as regards the Licensee's use of the\nname of the Software. No warranty is given as regards the existence of\nprior rights over the name of the Software or as regards the existence\nof a trademark.\n\n\n    Article 10 - TERMINATION\n\n10.1 In the event of a breach by the Licensee of its obligations\nhereunder, the Licensor may automatically terminate this Agreement\nthirty (30) days after notice has been sent to the Licensee and has\nremained ineffective.\n\n10.2 A Licensee whose Agreement is terminated shall no longer be\nauthorized to use, modify or distribute the Software. However, any\nlicenses that it may have granted prior to termination of the Agreement\nshall remain valid subject to their having been granted in compliance\nwith the terms and conditions hereof.\n\n\n    Article 11 - MISCELLANEOUS\n\n\n      11.1 EXCUSABLE EVENTS\n\nNeither Party shall be liable for any or all delay, or failure to\nperform the Agreement, that may be attributable to an event of force\nmajeure, an act of God or an outside cause, such as defective\nfunctioning or interruptions of the electricity or telecommunications\nnetworks, network paralysis following a virus attack, intervention by\ngovernment authorities, natural disasters, water damage, earthquakes,\nfire, explosions, strikes and labor unrest, war, etc.\n\n11.2 Any failure by either Party, on one or more occasions, to invoke\none or more of the provisions hereof, shall under no circumstances be\ninterpreted as being a waiver by the interested Party of its right to\ninvoke said provision(s) subsequently.\n\n11.3 The Agreement cancels and replaces any or all previous agreements,\nwhether written or oral, between the Parties and having the same\npurpose, and constitutes the entirety of the agreement between said\nParties concerning said purpose. No supplement or modification to the\nterms and conditions hereof shall be effective as between the Parties\nunless it is made in writing and signed by their duly authorized\nrepresentatives.\n\n11.4 In the event that one or more of the provisions hereof were to\nconflict with a current or future applicable act or legislative text,\nsaid act or legislative text shall prevail, and the Parties shall make\nthe necessary amendments so as to comply with said act or legislative\ntext. All other provisions shall remain effective. Similarly, invalidity\nof a provision of the Agreement, for any reason whatsoever, shall not\ncause the Agreement as a whole to be invalid.\n\n\n      11.5 LANGUAGE\n\nThe Agreement is drafted in both French and English and both versions\nare deemed authentic.\n\n\n    Article 12 - NEW VERSIONS OF THE AGREEMENT\n\n12.1 Any person is authorized to duplicate and distribute copies of this\nAgreement.\n\n12.2 So as to ensure coherence, the wording of this Agreement is\nprotected and may only be modified by the authors of the License, who\nreserve the right to periodically publish updates or new versions of the\nAgreement, each with a separate number. These subsequent versions may\naddress new issues encountered by Free Software.\n\n12.3 Any Software distributed under a given version of the Agreement may\nonly be subsequently distributed under the same version of the Agreement\nor a subsequent version, subject to the provisions of Article 5.3.4\n<#compatibility>.\n\n\n    Article 13 - GOVERNING LAW AND JURISDICTION\n\n13.1 The Agreement is governed by French law. The Parties agree to\nendeavor to seek an amicable solution to any disagreements or disputes\nthat may arise during the performance of the Agreement.\n\n13.2 Failing an amicable solution within two (2) months as from their\noccurrence, and unless emergency proceedings are necessary, the\ndisagreements or disputes shall be referred to the Paris Courts having\njurisdiction, by the more diligent Party.\n",
    "bugtrack_url": null,
    "license": "CeCILL-2.1",
    "summary": "Thermodynamic and physico-chemical properties for water and aqueous solutions",
    "version": "1.6.0",
    "project_urls": {
        "Homepage": "https://github.com/ovinc/aquasol"
    },
    "split_keywords": [
        "water",
        "solutions",
        "salt",
        "thermodynamic",
        "properties",
        "relations",
        "convert",
        "iapws",
        "supersaturated",
        "supersaturation",
        "pitzer",
        "kelvin",
        "activity",
        "volumetric",
        "vapor_pressure",
        "dewpoint",
        "density",
        "surface tension",
        "viscosity",
        "diffusivity",
        "solubility",
        "activity coefficient",
        "osmotic",
        "refractive index",
        "electrical conductivity",
        "physics",
        "chemistry"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "24977ff842984e540afb5fdc79a611851fab350d83d6b263e832619893af9cee",
                "md5": "19418ae09ea94a9d0fff0ee143bb217a",
                "sha256": "535506e326fe7fccce7224a1e83e01f11e845f92ae60a400bb32f269e6bd7a2c"
            },
            "downloads": -1,
            "filename": "aquasol-1.6.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "19418ae09ea94a9d0fff0ee143bb217a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 133497,
            "upload_time": "2024-03-19T15:46:40",
            "upload_time_iso_8601": "2024-03-19T15:46:40.973991Z",
            "url": "https://files.pythonhosted.org/packages/24/97/7ff842984e540afb5fdc79a611851fab350d83d6b263e832619893af9cee/aquasol-1.6.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "02fdca2dfdb405a14b5af5c49a58d3f0fb8ed8ab5c9d5f2d0410c8530b9cc602",
                "md5": "807a0cc134d786e10972e320da31546f",
                "sha256": "0444e421ea23dc051e3f5dfe90ad5687d5d2d43b1886f59dccd80c3e7e213889"
            },
            "downloads": -1,
            "filename": "aquasol-1.6.0.tar.gz",
            "has_sig": false,
            "md5_digest": "807a0cc134d786e10972e320da31546f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 117904,
            "upload_time": "2024-03-19T15:46:43",
            "upload_time_iso_8601": "2024-03-19T15:46:43.324665Z",
            "url": "https://files.pythonhosted.org/packages/02/fd/ca2dfdb405a14b5af5c49a58d3f0fb8ed8ab5c9d5f2d0410c8530b9cc602/aquasol-1.6.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-19 15:46:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ovinc",
    "github_project": "aquasol",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "aquasol"
}
        
Elapsed time: 0.71436s