Differentiable thermodynamics and physical-property engine for the Fugacio stack.
Project description
fugacio-thermo
Differentiable thermodynamics and physical-property engine for the Fugacio stack. Every model is written in JAX, so any output (a fugacity coefficient, a saturation pressure, a flash result) is differentiable with respect to temperature, pressure, composition, and model parameters. The iterative solvers (cubic-EOS root, flash, saturation, bubble/dew) carry hand-written implicit-function-theorem rules, so gradients flow exactly through them rather than through unrolled iterations.
What's inside
- Curated open component database (
DATABASE,get,component_arrays): critical constants, acentric factors, Antoine coefficients, and ideal-gas heat capacities for common species. - Ideal-gas properties:
cp_ig,enthalpy_ig,entropy_ig,gibbs_ig(plus mixture variants). - Cubic equations of state: van der Waals, Redlich-Kwong, SRK, Peng-Robinson
(
VDW,RK,SRK,PR), with mixing rules, a differentiable compressibility solver, fugacity coefficients (ln_phi_mixture,ln_phi_pure), and molar volume. - Real-fluid energy properties: residual/departure functions
(
residual_enthalpy,residual_entropy,residual_gibbs,residual_cp), real-fluid molar properties (molar_enthalpy,molar_entropy,molar_gibbs,molar_cp,stable_phase), two-phasemixture_enthalpy/mixture_entropy, and energy-specified flashesflash_ph(isenthalpic) andflash_ps(isentropic), the backbone of adiabatic units, valves, compressors, and turbines. - Activity-coefficient models: Margules, van Laar, Wilson, NRTL, UNIQUAC, and
predictive regular-solution / Flory-Huggins, available both as functions and
as differentiable
ActivityModelobjects (nrtl,uniquac, ...) whose parameters are themselves gradient leaves. - Group contribution: predictive
unifac_activityandjoback_estimate(pure-component constants from a structure). - Molecular PC-SAFT: the perturbed-chain SAFT equation of state
(
SaftParameters,saft_parameters_for,alpha_residual,SAFTModel) with a curated Gross-Sadowski parameter bank, Wertheim TPT1 association for hydrogen-bonding fluids, fugacity / density / residual properties by autodiff, the equilibrium routinesflash_pt_saft,bubble_pressure_saft,dew_pressure_saft,psat_saft, andstability_saft, and differentiable parameter regression (fit_saft_pure,fit_saft_kij). - Reference state: pure-liquid reference fugacity (
liquid_reference_fugacity), thepoynting_factor, saturation fugacity coefficient, andhenry_constant. - EOS phase equilibrium:
rachford_rice,flash_pt,psat_eos,bubble_pressure_eos,dew_pressure_eos, and Michelsenstability_analysis. - Non-ideal (gamma-phi) VLE:
flash_pt_gamma,bubble_pressure_gamma,dew_pressure_gamma, and the temperature duals, the route that captures azeotropes and strongly polar mixtures. - Liquid-liquid & three-phase equilibria: isoactivity
flash_llewithtie_line/binodal_curve, three-phaseflash_vlle, the binaryheterogeneous_azeotropesolver, and a general tangent-plane stability test (stability_analysis_general,liquid_stability). - Unified model interface:
EOSModel,GammaPhiModel, andSAFTModelexpose the sameflash_pt/ bubble / dew calls, so the rest of the stack switches thermodynamic method (cubic, γ–φ, or molecular PC-SAFT) by swapping one (differentiable) object. - Parameter regression & prediction: a self-contained
levenberg_marquardtover arbitrary parameter pytrees with residual builders (bubble_pressure_residuals,activity_residuals,lle_residuals), ready fitters (fit_nrtl_binary,fit_uniquac_binary), and UNIFAC-to-binary prediction (predict_nrtl_from_unifac,predict_uniquac_from_unifac) for mixtures without fitted parameters. - Reactions, equilibrium & kinetics: stoichiometry and standard-state
thermochemistry (
Reaction,reaction_properties,delta_g_rxn,equilibrium_constant), chemical-reactionequilibrium(single or simultaneous, ideal-gas or EOS-phibasis), and differentiable rate laws (PowerLaw,MassActionReversible,LHHW,Arrhenius). - Validation harness: first-principles consistency checks (Gibbs-Duhem,
equifugacity, the
(d ln phi / dP)_Tidentity), an AD-vs-finite-difference checker, and optional differential-testing oracles: CoolProp /chemicals(pure-fluid properties),thermo/ Clapeyron.jl (activity coefficients and PC-SAFT), and Cantera (reaction equilibrium and standard-state thermochemistry).
Example: a differentiable flash
import jax
import jax.numpy as jnp
from fugacio.thermo import PR, component_arrays, flash_pt
arr = component_arrays(["methane", "propane", "n-pentane"])
z = jnp.array([0.5, 0.3, 0.2])
result = flash_pt(PR, 320.0, 20e5, z, arr["tc"], arr["pc"], arr["omega"])
result.beta # vapour fraction (~0.75)
result.x, result.y # liquid / vapour compositions
# Gradient of the vapour fraction w.r.t. pressure, straight through the solver:
dbeta_dP = jax.grad(
lambda p: flash_pt(PR, 320.0, p, z, arr["tc"], arr["pc"], arr["omega"]).beta
)
dbeta_dP(20e5)
Example: a non-ideal (gamma-phi) bubble point
import jax.numpy as jnp
from fugacio.thermo import bubble_pressure_gamma, component_arrays, nrtl
arr = component_arrays(["ethanol", "water"])
# NRTL with 1/T interaction coefficients (K); alpha = 0.3.
model = nrtl(
a=jnp.zeros((2, 2)),
b=jnp.array([[0.0, 670.0], [310.0, 0.0]]),
alpha=jnp.array([[0.0, 0.3], [0.3, 0.0]]),
)
P, y = bubble_pressure_gamma(model, 350.0, jnp.array([0.3, 0.7]),
arr["tc"], arr["pc"], arr["omega"])
# P, y are differentiable w.r.t. T, x, *and* the NRTL parameters.
Part of the fugacio namespace; installs independently:
pip install fugacio-thermo.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fugacio_thermo-0.1.0.tar.gz.
File metadata
- Download URL: fugacio_thermo-0.1.0.tar.gz
- Upload date:
- Size: 311.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9773284f650127dd6e6dbc3ffe6c0e4d7fc51fc178c17f0eb8be222e28cdee9
|
|
| MD5 |
3822ef86eaedb9d999aa66e049f857eb
|
|
| BLAKE2b-256 |
af9d3c7fb63ff91987e79f0d25a7e6d6a02da936fe77ae8d1ac1e557401ae906
|
File details
Details for the file fugacio_thermo-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fugacio_thermo-0.1.0-py3-none-any.whl
- Upload date:
- Size: 312.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0abc3c09c93cf5c294573e3ac656e7d74c0094d40e97c70e4b9ea78117f0b09
|
|
| MD5 |
9587ea8a80ed0ae66982add7c56bb053
|
|
| BLAKE2b-256 |
982ca07cd9e97bca902b7c009fbb069fe92a7b2ba32ed3f94fee85be9bc48016
|