Skip to main content

FeOs - A framework for equations of state and classical density functional theory.

Project description

FeOs - A Framework for Equations of State and Classical Density Functional Theory

crate documentation repository documentation FeOs Publication

The FeOs package provides Rust implementations of different equation of state and Helmholtz energy functional models and corresponding Python bindings.

import feos
import si_units as si

# PC-SAFT parameters for methanol (Gross and Sadowski 2002)
record = feos.PureRecord(
    feos.Identifier(name="methanol"),
    molarweight=32.04,
    m=1.5255,
    sigma=3.23,
    epsilon_k=188.9,
    association_sites=[{
      "kappa_ab": 0.035176,
      "epsilon_k_ab": 2899.5,
      "na": 1,
      "nb": 1,
    }]
)

# Build an equation of state
parameters = feos.Parameters.new_pure(record)
eos = feos.EquationOfState.pcsaft(parameters)

# Define thermodynamic conditions
critical_point = feos.State.critical_point(eos)

# Compute properties
p = critical_point.pressure()
t = critical_point.temperature
print(f"Critical point for methanol: T={t/si.KELVIN:.1f} K, p={p/si.BAR:.1f} bar.")
Critical point for methanol: T=531.5 K, p=106.5 bar.

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
multiparameter Multiparameter Helmholtz energy equations of state for common pure components

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 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 for the different models including group contribution methods. The parameter files can be read directly from Rust or Python.

[!WARNING] The format for parameter files changed between releases 0.8.0 and 0.9.0. You find parameters for new versions in the parameters directory and for versions up to 0.8.0 in the parameters_old directory.

If you maintain your own parameter files, there are two adjustments you need to make when upgrading to feos 0.9.0:

  • Flatten the contents of the model_record field directly into the pure or segment record.
  • Move association parameters into a list called association_sites.

The structure of the JSON files and the PureRecord and SegmentRecord classes in Python is identical.

Properties and phase equilibria

The crate makes use of generalized (hyper-) dual numbers 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.
  • 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 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 installed. To install the package directly into the active environment (virtualenv or conda), use

cd py-feos
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 "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 "pcsaft ..."

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.

Benchmarks

Check out the 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

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 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},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

feos-0.9.3-cp310-abi3-win_amd64.whl (18.9 MB view details)

Uploaded CPython 3.10+Windows x86-64

feos-0.9.3-cp310-abi3-win32.whl (18.6 MB view details)

Uploaded CPython 3.10+Windows x86

feos-0.9.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

feos-0.9.3-cp310-abi3-macosx_11_0_arm64.whl (14.1 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

feos-0.9.3-cp310-abi3-macosx_10_12_x86_64.whl (17.8 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file feos-0.9.3-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: feos-0.9.3-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 18.9 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for feos-0.9.3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 39edbbd7676e54de23084c7efd32736584bb8eb72e7025c9773686045b02fc96
MD5 8f74264bbfdee997c966ff2e1ea6cc67
BLAKE2b-256 5011fe952651ef1a2b4d17314f5728fc832b84271afad54340f7f69f925777ad

See more details on using hashes here.

File details

Details for the file feos-0.9.3-cp310-abi3-win32.whl.

File metadata

  • Download URL: feos-0.9.3-cp310-abi3-win32.whl
  • Upload date:
  • Size: 18.6 MB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for feos-0.9.3-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 9e3e998bafc9a8ae9a13e96de5b5e4cb712fa0e41aa0399c3ef6213444eb8166
MD5 dc919e7426eea12430371cd66f537d50
BLAKE2b-256 18f01380b93c65a045e0040e75905b28a900c48999f249d86db5f1e0de44c984

See more details on using hashes here.

File details

Details for the file feos-0.9.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for feos-0.9.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 29b12c70672074c59f3bbef489a44349e2a74e0ee8f51e312bb0fb562d4581e1
MD5 da7843470ae95e157494fa60f7aeff1a
BLAKE2b-256 35ba7eb2c0450e241a7cc1264c78960cc1c6bec4179732505ff3b76846241443

See more details on using hashes here.

File details

Details for the file feos-0.9.3-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: feos-0.9.3-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 14.1 MB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for feos-0.9.3-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 baccb42f2da24179287b72afb0859f526d3d4305bfbfc702ccb50e5496ea936c
MD5 0c69cf78db8112262ce737f0bc38eb02
BLAKE2b-256 242276d9acda1e63c07149bef3f057fb0d44d6975b4d7d9e98add64da1bc58ef

See more details on using hashes here.

File details

Details for the file feos-0.9.3-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for feos-0.9.3-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bfbfd935b1da9fb238c425fac774a81feca5594a90f7478f33672fb4d5ed4ecc
MD5 319d7e098427b9991463a5b83727087b
BLAKE2b-256 b67c02aa7e1ce06f94fe32344c52a6cce1faab5cb7a9cb1b9ef422ea761e9dd3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page