Aqueous equilibrium calculation.
[DEPRECATED] A new version is provided at: https://github.com/pyequion/pyequion2
A pure python implementation for electrolytes chemical equilibrium.
A simplified version is provided with a web based user interface: https://caiofcm.github.io/pyequion-onl/
Repository: https://github.com/caiofcm/pyequion
- Pure python package: hence it is easy to install in any platform
- Calculation of equilibrium of inorganic salts in water solution with precipitation
- Automatic determination of reactions
- Provides information as: Ionic Strength, pH, Electric Conductivity and the concentrations of each species as well their activity coefficient
- A modular approach for the activity coefficient calculation allows the usage of new thermodynamic models
- Just in time compilation capabilities with
numba
- Automatic differentiation with
sympy
- Code generation for exporting the residual function for a giving system to other environments: suitable for kinetic simulations (e.g python or C)
- Automatic determination of the mean activity coefficient (often used in comparison with experiments)
The package can be installed with pip install pyequion
or pip install <folder>
import pyequion
sol = pyequion.solve_solution({'NaHCO3': 50, 'CaCl2': 10})
pyequion.print_solution(sol)
>> Solution Results:
>> pH = 7.86640
>> sc = 6602.68061 uS/cm
>> I = 73.74077 mmol/L
>> DIC = 50.00000 mmol/L
>> Saturation Index:
>> Halite: -4.77905928064043
>> Calcite: 2.083610139715626
>> Aragonite: 1.9398402923233906
>> Vaterite: 1.5171786455013265
https://pyequion.readthedocs.io/en/latest/
To run unit tests:
pytest ./tests
To create the test report:
pytest --cov=pyequion ./tests/test_reactions_species_builder.py --cov-report=html
The code is formatted with black following flack8 specifications. Run black .
to format the code.
- Code can be JIT compiled with
numba
calling the function:pyequion.jit_compile_functions()
- When using JIT, running the code in
jupyter
becomes unstable, prefer regular python script.
- Caio Curitiba Marcellos
- Gerson Francisco da Silva Junior
- Elvis do Amaral Soares
- Fabio Ramos
- Amaro G. Barreto Jr
- Danilo Naiff
.
├── api # Application Programming Interface for web service
├── data # Parameters database file (was replaced by python dictionaries in pyequion/data)
├── docs # Documentation generation (sphinx)
├── LICENSE.md #License file
├── pyequion
│ ├── activity_coefficients.py # Built-in thermodynamic models
│ ├── conductivity.py # Conductivity function
│ ├── core.py # Core functionalities
│ ├── data # Parameters database as python files
│ │ ├── __init__.py
│ │ ├── reactions_solids.py
│ │ ├── reactions_solutions.py
│ │ └── species.py
│ ├── __init__.py # Auxiliary
│ ├── jit_helper.py # Auxiliary
│ ├── PengRobinson.py # EOS for pure gas
│ ├── pitzer.py # Pitzer model
│ ├── properties_utils.py # Auxiliary
│ ├── pyequion.py # Application Programming Interface for python call
│ ├── reactions_species_builder.py # Creation of equilibrium system
│ ├── read_from_phreeqc_db.py # Auxiliary
│ ├── symbolic_computations.py # Symbolic Computation with sympy
│ ├── utils_api.py # Auxiliary
│ ├── utils_for_numba.py # Auxiliary
│ ├── utils.py # Auxiliary
│ └── wateractivity.py # Auxiliary for water activity in pitzer
├── pyproject.toml #Linting configuration
├── README.md # General guide
├── requirements-dev.txt # Development Requirements
├── requirements.txt # Main Requirements
├── samples #Some samples using pyequion
├── setup.py #Installation file
└── tests # Automatic Unit tests folder (pytest based)