Welcome to \(\text{FeO}_\text{s}\)

\(\text{FeO}_\text{s}\) is a framework for thermodynamic equations of state (EoS) and classical density functional theory (DFT). It is written in Rust with a Python interface.

Usage

from feos import EquationOfState, State
from feos.parameters import Parameters

# Build an equation of state
parameters = Parameters.from_json(['methanol'], 'parameters.json')
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}.')
Critical point for methanol: T=531.5 K, p=10.7 MPa.
// some imports omitted
use feos::core::parameter::{IdentifierOption, Parameters};
use feos::core::{Contributions, State};
use feos::pcsaft::PcSaft;

// Build an equation of state
let parameters = Parameters::from_json(
    vec!["methanol"],
    "parameters.json",
    None,
    IdentifierOption::Name,
)?;
let eos = &PcSaft::new(parameters);

// Define thermodynamic conditions
let critical_point = State::critical_point(&eos, None, None, None, Default::default())?;

// Compute properties
let p = critical_point.pressure(Contributions::Total);
let t = critical_point.temperature;
println!("Critical point for methanol: T={}, p={}.", t, p);
Critical point for methanol: T=531.5 K, p=10.7 MPa.

Getting started

Want to learn more?

Features

Equations of State
  • thermodynamic properties

  • phase equilibria for pure substances and mixtures

  • critical point calculations for pure substances and mixtures

  • dynamic properties (entropy scaling)

  • stability analysis


Implemented equations of state

  • PC-SAFT (incl. group contribution method)

  • ePC-SAFT

  • uv-Theory

  • SAFT-VR-Mie and the extension to quantum fluids SAFT-VRQ-Mie

  • PeTS

  • Multiparameter Helmholtz energy equations of state for common pure components

Density Functional Theory
  • interfacial properties,

  • properties in nanopores and at walls,

  • adsorption isotherms,

  • solvation free energies,

  • different dimensions and coordinate systems

Extensibility / Usability
  • Helmholtz energy uses generalized (hyper-) dual numbers - no analytical derivatives are needed.

  • Interfaces use dimensioned quantities - never accidentally mix molar and mass-specific properties.

  • Python bindings are written in Rust - robust type checking and error handling.