A python port of M-ANEOS.
Version 1 — the oracle-validated port. Every supported EOS path is
bit-identical (np.array_equal) to the Fortran, not tolerance-matched:
the 257-test legacy suite is checked against the frozen src/ oracle, and
the Thomas-Fermi path against the src-lpphpp oracle (see "Two oracles"
below). Supported: EOS types 0/1/3/4, type 5 (LPP/HPP), type -2 (ideal gas),
the JWL form, Saha and Thomas-Fermi electronics. The explicit list of what
is not ported (all behind clean errors, none reached by a fixture) is
docs/code/unported-features.md.
Everything under
examples/is a test fixture or proof of concept for validating the code — uncalibrated scaffolds, capability demos, and even a deliberately-broken deck or two. Do not use them for science. Use the separately-published, individually-validated production material models.
- src: original M-ANEOS fortran source from https://github.com/isale-code/M-ANEOS
- docs: folder contains detailed description of ANEOS modules and known issues.
- src-lpphpp: corrections to fortran source
- pyaneos: python port
Two oracles (both reproduced bit-for-bit): oracle/build.sh builds the
canonical oracle from the frozen src/; oracle/build_lpphpp.sh builds a
second oracle from src-lpphpp used only for Thomas-Fermi, because frozen
src/'s ANTOMF crashes on the 2nd+ call (a missing-SAVE bug). src-lpphpp
differs from src only by that fix plus the LPP/HPP extension files.
Extensions beyond original ANEOS — see the user guide:
- lpp/hpp/liquid triple point (2- and 3-solid chains; V47/V48 Gibbs offsets; pyaneos + fortran src-lpphpp, cross-validated bit-identical; calibrated examples: sio2-2026, sio2-2026-3solid, sio2-2026-3solid-v2 — the D1-D5 liquid-structure transition + physical liquid cv — h2o-2026-2solid/-3solid)
- negative-slope melt curves (water topology: V24 > 1 or -rholiq with the liquid denser than the solid)
- NOTENSION keyword: equilibrium tables with the solid-vapor (sublimation) region tabulated in place of the tension region
- Thomas-Fermi electronic EOS (ANTOMF/ANSMFT) ported (V33 != 0;
pyaneos/thomas_fermi.py), validated bit-identical against the src-lpphpp oracle - corrections: fresh-Clapeyron mixed-phase heat capacity at the lpp/hpp boundary (hpp_corrected), Thomas-Fermi SAVE-statement fix (src-lpphpp)
Bit-identity to the original Fortran ANEOS is this project's correctness
standard, so any bug — a crash, a wrong number, or a pyaneos result that
differs from the Fortran — is valuable. Please report it to Sarah T. Stewart
(contact via her web page). Include the ANEOS.INPUT and the (T, ρ) or table
cell where you see the difference.
MIT (see LICENSE) — same license as the upstream M-ANEOS Fortran (isale-code/M-ANEOS), whose copyright notice is retained. The example material datasets that are not vendored here (copies of external public repositories) are listed with their sources in examples/README.md.
If you use pyaneos, please cite it (see CITATION.cff and the badge above). The concept DOI below always resolves to the latest version:
Stewart, S. T. (2026). pyaneos: an oracle-validated Python port of M-ANEOS (Version 1.0) [Software]. Zenodo. https://doi.org/10.5281/zenodo.20736271
Please also cite the original ANEOS / M-ANEOS that pyaneos ports: Thompson & Lauson (1972), the Melosh (2007) and Stewart (2019) extensions, and the M-ANEOS software (https://github.com/isale-code/M-ANEOS).
Port and testing harness by Claude Code (Fable 5 and Opus 4.8, 1M context).
S. T. Stewart, Developer
6/16/2026