# FeOs - A Framework for Equations of State and Classical Density Functional Theory
[![crate](https://img.shields.io/crates/v/feos.svg)](https://crates.io/crates/feos)
[![documentation](https://docs.rs/feos/badge.svg)](https://docs.rs/feos)
[![documentation](https://img.shields.io/badge/docs-github--pages-blue)](https://feos-org.github.io/feos/)
[![repository](https://img.shields.io/pypi/v/feos)](https://pypi.org/project/feos/)
The `FeOs` package provides Rust implementations of different equation of state and Helmholtz energy functional models and corresponding Python bindings.
```python
from feos.eos import EquationOfState, State
from feos.pcsaft import PcSaftParameters, PcSaftRecord
# PC-SAFT parameters for methanol (Gross and Sadowski 2002)
record = PcSaftRecord(1.5255, 3.23, 188.9, kappa_ab=0.035176, epsilon_k_ab=2899.5, na=1, nb=1)
# Build an equation of state
parameters = PcSaftParameters.from_model_records([record])
eos = EquationOfState.pcsaft(parameters)
# Define thermodynamic conditions
critical_point = State.critical_point(eos)
# Compute properties
p = critical_point.pressure()
t = critical_point.temperature
print(f'Critical point for methanol: T={t}, p={p}.')
```
```terminal
Critical point for methanol: T=531.5 K, p=10.7 MPa.
```
## Models
The following models are currently published as part of the `FeOs` framework
|name|description|eos|dft|
|-|-|:-:|:-:|
|`pcsaft`|perturbed-chain (polar) statistical associating fluid theory|✓|✓|
|`epcsaft`|electrolyte PC-SAFT|✓||
|`gc-pcsaft`|(heterosegmented) group contribution PC-SAFT|✓|✓|
|`pets`|perturbed truncated and shifted Lennard-Jones mixtures|✓|✓|
|`uvtheory`|equation of state for Mie fluids and mixtures|✓||
|`saftvrqmie`|equation of state for quantum fluids and mixtures|✓|✓|
|`saftvrmie`|statistical associating fluid theory for variable range interactions of Mie form|✓||
The list is being expanded continuously. Currently under development are implementations of Helmholtz energy functionals for the UV theory and for SAFT-VR Mie.
Other public repositories that implement models within the `FeOs` framework, but are currently not part of the `feos` Python package, are
|name|description|eos|dft|
|-|-|:-:|:-:|
|[`feos-fused-chains`](https://github.com/feos-org/feos-fused-chains)|heterosegmented fused-sphere chain functional||✓|
## Parameters
In addition to the source code for the Rust and Python packages, this repository contains JSON files with previously published [parameters](https://github.com/feos-org/feos/tree/main/parameters) for the different models including group contribution methods. The parameter files can be read directly from Rust or Python.
## Properties and phase equilibria
The crate makes use of [generalized (hyper-) dual numbers](https://github.com/itt-ustutt/num-dual) to generically calculate exact partial derivatives from Helmholtz energy equations of state. The derivatives are used to calculate
- **equilibrium properties** (pressure, heat capacity, fugacity, and *many* more),
- **transport properties** (viscosity, thermal conductivity, diffusion coefficients) using the entropy scaling approach
- **critical points** and **phase equilibria** for pure components and mixtures.
In addition to that, utilities are provided to assist in the handling of **parameters** for both molecular equations of state and (homosegmented) group contribution methods and for the generation of phase diagrams for pure components and binary mixtures.
## Classical density functional theory
`FeOs` uses efficient numerical methods to calculate density profiles in inhomogeneous systems. Highlights include:
- Fast calculation of convolution integrals in cartesian (1D, 2D and 3D), polar, cylindrical, and spherical coordinate systems using FFT and related algorithms.
- Automatic calculation of partial derivatives of Helmholtz energy densities (including temperature derivatives) using automatic differentiation with [generalized (hyper-) dual numbers](https://github.com/itt-ustutt/num-dual).
- Modeling of heterosegmented molecules, including branched molecules.
- Functionalities for calculating surface tensions, adsorption isotherms, pair correlation functions, and solvation free energies.
## Cargo features
Without additional features activated, the command
```
cargo test --release
```
will only build and test the core functionalities of the crate. To run unit and integration tests for specific models, run
```
cargo test --release --features pcsaft
```
to test, e.g., the implementation of PC-SAFT or
```
cargo test --release --features all_models
```
to run tests on all implemented models.
## Python package
`FeOs` uses the [`PyO3`](https://github.com/PyO3/pyo3) framework to provide Python bindings. The Python package can be installed via `pip` and runs on Windows, Linux and macOS:
```
pip install feos
```
If there is no compiled package for your system available from PyPI and you have a Rust compiler installed, you can instead build the python package from source using
```
pip install git+https://github.com/feos-org/feos
```
This command builds the package without link-time optimization (LTO) that can be used to increase the performance further.
See the *Building from source* section for information about building the wheel including LTO.
### Building from source
To compile the code you need the Rust compiler and `maturin` (>=0.13,<0.14) installed.
To install the package directly into the active environment (virtualenv or conda), use
```
maturin develop --release
```
which uses the `python` and `all_models` feature as specified in the `pyproject.toml` file.
Alternatively, you can specify the models or features that you want to include in the python package explicitly, e.g.
```
maturin develop --release --features "python pcsaft dft"
```
for the PC-SAFT equation of state and Helmholtz energy functional.
To build wheels including link-time optimization (LTO), use
```
maturin build --profile="release-lto"
```
which will use the `python` and `all_models` features specified in the `pyproject.toml` file.
Use the following command to build a wheel with specific features:
```
maturin build --profile="release-lto" --features "python ..."
```
LTO increases compile times measurably but the resulting wheel is more performant and has a smaller size.
For development however, we recommend using the `--release` flag.
## Documentation
For a documentation of the Python API, Python examples, and a guide to the underlying Rust framework check out the [documentation](https://feos-org.github.io/feos/).
## Benchmarks
Check out the [benches](https://github.com/feos-org/feos/tree/main/benches) directory for information about provided Rust benchmarks and how to run them.
## Developers
This software is currently maintained by members of the groups of
- Prof. Joachim Gross, [Institute of Thermodynamics and Thermal Process Engineering (ITT), University of Stuttgart](https://www.itt.uni-stuttgart.de/)
- Prof. André Bardow, [Energy and Process Systems Engineering (EPSE), ETH Zurich](https://epse.ethz.ch/)
## Contributing
`FeOs` grew from the need to maintain a common codebase used within the scientific work done in our groups. We share the code publicly as a platform to publish our own research but also encourage other researchers and developers to contribute their own models or implementations of existing equations of state.
If you want to contribute to ``FeOs``, there are several ways to go: improving the documentation and helping with language issues, testing the code on your systems to find bugs, adding new models or algorithms, or providing feature requests. Feel free to message us if you have questions or open an issue to discuss improvements.
## Cite us
If you find `FeOs` useful for your own scientific studies, consider citing our [publication](https://pubs.acs.org/doi/full/10.1021/acs.iecr.2c04561) accompanying this library.
```
@article{rehner2023feos,
author = {Rehner, Philipp and Bauer, Gernot and Gross, Joachim},
title = {FeOs: An Open-Source Framework for Equations of State and Classical Density Functional Theory},
journal = {Industrial \& Engineering Chemistry Research},
volume = {62},
number = {12},
pages = {5347-5357},
year = {2023},
}
```
Raw data
{
"_id": null,
"home_page": "https://github.com/feos-org",
"name": "feos",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "physics, thermodynamics, equations_of_state, phase_equilibria",
"author": "Gernot Bauer <bauer@itt.uni-stuttgart.de>, Philipp Rehner <prehner@ethz.ch>",
"author_email": "Gernot Bauer <bauer@itt.uni-stuttgart.de>, Philipp Rehner <prehner@ethz.ch>",
"download_url": null,
"platform": null,
"description": "# FeOs - A Framework for Equations of State and Classical Density Functional Theory\n\n[![crate](https://img.shields.io/crates/v/feos.svg)](https://crates.io/crates/feos)\n[![documentation](https://docs.rs/feos/badge.svg)](https://docs.rs/feos)\n[![documentation](https://img.shields.io/badge/docs-github--pages-blue)](https://feos-org.github.io/feos/)\n[![repository](https://img.shields.io/pypi/v/feos)](https://pypi.org/project/feos/)\n\nThe `FeOs` package provides Rust implementations of different equation of state and Helmholtz energy functional models and corresponding Python bindings.\n\n```python\nfrom feos.eos import EquationOfState, State\nfrom feos.pcsaft import PcSaftParameters, PcSaftRecord\n\n# PC-SAFT parameters for methanol (Gross and Sadowski 2002)\nrecord = PcSaftRecord(1.5255, 3.23, 188.9, kappa_ab=0.035176, epsilon_k_ab=2899.5, na=1, nb=1)\n\n# Build an equation of state\nparameters = PcSaftParameters.from_model_records([record])\neos = EquationOfState.pcsaft(parameters)\n\n# Define thermodynamic conditions\ncritical_point = State.critical_point(eos)\n\n# Compute properties\np = critical_point.pressure()\nt = critical_point.temperature\nprint(f'Critical point for methanol: T={t}, p={p}.')\n```\n```terminal\nCritical point for methanol: T=531.5 K, p=10.7 MPa.\n```\n\n## Models\nThe following models are currently published as part of the `FeOs` framework\n\n|name|description|eos|dft|\n|-|-|:-:|:-:|\n|`pcsaft`|perturbed-chain (polar) statistical associating fluid theory|\u2713|\u2713|\n|`epcsaft`|electrolyte PC-SAFT|\u2713||\n|`gc-pcsaft`|(heterosegmented) group contribution PC-SAFT|\u2713|\u2713|\n|`pets`|perturbed truncated and shifted Lennard-Jones mixtures|\u2713|\u2713|\n|`uvtheory`|equation of state for Mie fluids and mixtures|\u2713||\n|`saftvrqmie`|equation of state for quantum fluids and mixtures|\u2713|\u2713|\n|`saftvrmie`|statistical associating fluid theory for variable range interactions of Mie form|\u2713||\n\nThe list is being expanded continuously. Currently under development are implementations of Helmholtz energy functionals for the UV theory and for SAFT-VR Mie.\n\nOther public repositories that implement models within the `FeOs` framework, but are currently not part of the `feos` Python package, are\n\n|name|description|eos|dft|\n|-|-|:-:|:-:|\n|[`feos-fused-chains`](https://github.com/feos-org/feos-fused-chains)|heterosegmented fused-sphere chain functional||\u2713|\n\n## Parameters\nIn addition to the source code for the Rust and Python packages, this repository contains JSON files with previously published [parameters](https://github.com/feos-org/feos/tree/main/parameters) for the different models including group contribution methods. The parameter files can be read directly from Rust or Python.\n\n## Properties and phase equilibria\n\nThe crate makes use of [generalized (hyper-) dual numbers](https://github.com/itt-ustutt/num-dual) to generically calculate exact partial derivatives from Helmholtz energy equations of state. The derivatives are used to calculate\n- **equilibrium properties** (pressure, heat capacity, fugacity, and *many* more),\n- **transport properties** (viscosity, thermal conductivity, diffusion coefficients) using the entropy scaling approach\n- **critical points** and **phase equilibria** for pure components and mixtures.\n\nIn addition to that, utilities are provided to assist in the handling of **parameters** for both molecular equations of state and (homosegmented) group contribution methods and for the generation of phase diagrams for pure components and binary mixtures.\n\n## Classical density functional theory\n\n`FeOs` uses efficient numerical methods to calculate density profiles in inhomogeneous systems. Highlights include:\n- Fast calculation of convolution integrals in cartesian (1D, 2D and 3D), polar, cylindrical, and spherical coordinate systems using FFT and related algorithms.\n- Automatic calculation of partial derivatives of Helmholtz energy densities (including temperature derivatives) using automatic differentiation with [generalized (hyper-) dual numbers](https://github.com/itt-ustutt/num-dual).\n- Modeling of heterosegmented molecules, including branched molecules.\n- Functionalities for calculating surface tensions, adsorption isotherms, pair correlation functions, and solvation free energies.\n\n## Cargo features\n\nWithout additional features activated, the command\n```\ncargo test --release\n```\nwill only build and test the core functionalities of the crate. To run unit and integration tests for specific models, run\n```\ncargo test --release --features pcsaft\n```\nto test, e.g., the implementation of PC-SAFT or\n```\ncargo test --release --features all_models\n```\nto run tests on all implemented models.\n\n## Python package\n\n`FeOs` uses the [`PyO3`](https://github.com/PyO3/pyo3) framework to provide Python bindings. The Python package can be installed via `pip` and runs on Windows, Linux and macOS:\n\n```\npip install feos\n```\n\nIf there is no compiled package for your system available from PyPI and you have a Rust compiler installed, you can instead build the python package from source using\n\n```\npip install git+https://github.com/feos-org/feos\n```\n\nThis command builds the package without link-time optimization (LTO) that can be used to increase the performance further.\nSee the *Building from source* section for information about building the wheel including LTO.\n\n### Building from source\n\nTo compile the code you need the Rust compiler and `maturin` (>=0.13,<0.14) installed.\nTo install the package directly into the active environment (virtualenv or conda), use\n\n```\nmaturin develop --release\n```\n\nwhich uses the `python` and `all_models` feature as specified in the `pyproject.toml` file.\n\nAlternatively, you can specify the models or features that you want to include in the python package explicitly, e.g.\n\n```\nmaturin develop --release --features \"python pcsaft dft\"\n```\n\nfor the PC-SAFT equation of state and Helmholtz energy functional.\n\nTo build wheels including link-time optimization (LTO), use\n\n```\nmaturin build --profile=\"release-lto\"\n```\n\nwhich will use the `python` and `all_models` features specified in the `pyproject.toml` file.\nUse the following command to build a wheel with specific features:\n\n```\nmaturin build --profile=\"release-lto\" --features \"python ...\"\n```\n\nLTO increases compile times measurably but the resulting wheel is more performant and has a smaller size.\nFor development however, we recommend using the `--release` flag.\n\n## Documentation\n\nFor a documentation of the Python API, Python examples, and a guide to the underlying Rust framework check out the [documentation](https://feos-org.github.io/feos/).\n\n## Benchmarks\n\nCheck out the [benches](https://github.com/feos-org/feos/tree/main/benches) directory for information about provided Rust benchmarks and how to run them.\n\n## Developers\n\nThis software is currently maintained by members of the groups of\n- Prof. Joachim Gross, [Institute of Thermodynamics and Thermal Process Engineering (ITT), University of Stuttgart](https://www.itt.uni-stuttgart.de/)\n- Prof. Andr\u00e9 Bardow, [Energy and Process Systems Engineering (EPSE), ETH Zurich](https://epse.ethz.ch/)\n\n## Contributing\n\n`FeOs` grew from the need to maintain a common codebase used within the scientific work done in our groups. We share the code publicly as a platform to publish our own research but also encourage other researchers and developers to contribute their own models or implementations of existing equations of state.\n\nIf you want to contribute to ``FeOs``, there are several ways to go: improving the documentation and helping with language issues, testing the code on your systems to find bugs, adding new models or algorithms, or providing feature requests. Feel free to message us if you have questions or open an issue to discuss improvements.\n\n## Cite us\n\nIf you find `FeOs` useful for your own scientific studies, consider citing our [publication](https://pubs.acs.org/doi/full/10.1021/acs.iecr.2c04561) accompanying this library.\n\n```\n@article{rehner2023feos,\n author = {Rehner, Philipp and Bauer, Gernot and Gross, Joachim},\n title = {FeOs: An Open-Source Framework for Equations of State and Classical Density Functional Theory},\n journal = {Industrial \\& Engineering Chemistry Research},\n volume = {62},\n number = {12},\n pages = {5347-5357},\n year = {2023},\n}\n```\n\n",
"bugtrack_url": null,
"license": "MIT OR Apache-2.0",
"summary": "FeOs - A framework for equations of state and classical density functional theory.",
"version": "0.7.0",
"project_urls": {
"Homepage": "https://github.com/feos-org",
"Source Code": "https://github.com/feos-org/feos"
},
"split_keywords": [
"physics",
" thermodynamics",
" equations_of_state",
" phase_equilibria"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "76efd6d1e798f7a759d9f19fd2b437129e09eb2332f6a9e72f53ebe7cce71c7c",
"md5": "fb7fab7156819a10defbc87f4f77ae1a",
"sha256": "e95b69fc0e6d3275ecd3469e9db0683e678f7acaba8dc57cda4dd68f64e12b48"
},
"downloads": -1,
"filename": "feos-0.7.0-cp37-abi3-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "fb7fab7156819a10defbc87f4f77ae1a",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 16106327,
"upload_time": "2024-05-23T12:51:40",
"upload_time_iso_8601": "2024-05-23T12:51:40.233302Z",
"url": "https://files.pythonhosted.org/packages/76/ef/d6d1e798f7a759d9f19fd2b437129e09eb2332f6a9e72f53ebe7cce71c7c/feos-0.7.0-cp37-abi3-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2a7caeade5653d218e92c5d68fef62de98bd181071a4c09b08702906b96dc8ff",
"md5": "fcf2077c0037eb00c3a67a420d9c31dc",
"sha256": "fe3bc2b3e46057c62319362f277a7b114112d4e1a143f450833fb4aaaa03d506"
},
"downloads": -1,
"filename": "feos-0.7.0-cp37-abi3-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "fcf2077c0037eb00c3a67a420d9c31dc",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 11421605,
"upload_time": "2024-05-23T12:51:43",
"upload_time_iso_8601": "2024-05-23T12:51:43.683651Z",
"url": "https://files.pythonhosted.org/packages/2a/7c/aeade5653d218e92c5d68fef62de98bd181071a4c09b08702906b96dc8ff/feos-0.7.0-cp37-abi3-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f1df521dfb08b955dc89377b763b749ec3b229d3b862a8ecbd04401bec417bd8",
"md5": "c20ac7416f760e76bcd8ac252dae0a10",
"sha256": "5498ef22f17f8541e9841a50c3d1862715b7fdf2f0342362182db62cee4562f5"
},
"downloads": -1,
"filename": "feos-0.7.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c20ac7416f760e76bcd8ac252dae0a10",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 15922193,
"upload_time": "2024-05-23T12:51:46",
"upload_time_iso_8601": "2024-05-23T12:51:46.237049Z",
"url": "https://files.pythonhosted.org/packages/f1/df/521dfb08b955dc89377b763b749ec3b229d3b862a8ecbd04401bec417bd8/feos-0.7.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "13d81034cb402bb37b81374dea83ccb02d3e158f7195eb5fb0bab06bd9ea8239",
"md5": "b23aeae3887ed96d2b102802e85b2b1a",
"sha256": "fd9467cb24414dd76c9430e4e1199aceee4d006e76dab28133cb4f79d287adf6"
},
"downloads": -1,
"filename": "feos-0.7.0-cp37-abi3-win32.whl",
"has_sig": false,
"md5_digest": "b23aeae3887ed96d2b102802e85b2b1a",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 15667981,
"upload_time": "2024-05-23T12:51:48",
"upload_time_iso_8601": "2024-05-23T12:51:48.929224Z",
"url": "https://files.pythonhosted.org/packages/13/d8/1034cb402bb37b81374dea83ccb02d3e158f7195eb5fb0bab06bd9ea8239/feos-0.7.0-cp37-abi3-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6a72e582628abb5149689a7bafd9f39a1b0b4b8d3d09685e62af68d57e0a0aa8",
"md5": "49eb13252a935169ef0fed0acdadec15",
"sha256": "27db5ded30dd1bc293a09e32d9aadae838ead8015d4e1988c7c28e7357b01d98"
},
"downloads": -1,
"filename": "feos-0.7.0-cp37-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "49eb13252a935169ef0fed0acdadec15",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 16302028,
"upload_time": "2024-05-23T12:51:51",
"upload_time_iso_8601": "2024-05-23T12:51:51.220387Z",
"url": "https://files.pythonhosted.org/packages/6a/72/e582628abb5149689a7bafd9f39a1b0b4b8d3d09685e62af68d57e0a0aa8/feos-0.7.0-cp37-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-23 12:51:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "feos-org",
"github_project": "feos",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "feos"
}