1-D interior dynamics of rocky mantles that are solid, liquid, or mixed phase
Project description
Aragog
1-D two-phase interior dynamics solver with mixing-length convective closure.
Aragog integrates the spherically symmetric specific-entropy equation for a partially molten silicate mantle from the core-mantle boundary to the surface. Two design choices define Aragog's approach:
- Mixing-length theory (MLT) closes the convective heat flux locally at every radial node. The full radial entropy profile $S(r,t)$ is the prognostic variable, so solidification fronts, retained melt pockets, and EOS-resolved adiabats are recovered without an assumed reference state. See Mixing-length theory.
- Two-phase flow treats the mushy mantle as a coexisting solid + melt mixture at every node. This activates gravitational separation of melt and solid, chemical mixing of melt fraction across the rheological transition, and a continuous (lever-rule) treatment of latent heat through the partial-melt regime. See Two-phase flow in Aragog.
Together, MLT and two-phase flow let Aragog resolve the partial-melt window between first crystallisation and final solidification, where atmospheric outgassing, surface volatile budgets, and the timing of solidification are shaped by the coupled mantle-atmosphere evolution. Aragog is part of the PROTEUS coupled atmosphere-interior evolution framework and is its production interior-energetics backend.
- Documentation: https://proteus-framework.org/aragog
- Source code: https://github.com/FormingWorlds/aragog
Features
- Entropy-form, two-phase interior dynamics solver. Specific entropy $S(r,t)$ at staggered nodes is the only state variable; $T$, $\rho$, $\phi$, $c_p$, $\alpha$, $(\partial T/\partial P)_S$ are read from PALEOS or SPIDER-format pressure-entropy tables. Lever-rule blending, gravitational separation, and chemical mixing all enter the energy budget continuously across the solidus and liquidus.
- Mixing-length theory with smooth viscous-to-inviscid blend. Convective eddy diffusivity $\kappa_h$ is built per cell from the local entropy gradient, gravity, density, viscosity, and a mixing length $l(r)$, with a tanh blend at $\mathrm{Re}_\mathrm{crit} = 9/8$. Captures both the laminar and turbulent regimes inside one closure.
- Production-grade integrator. SUNDIALS CVODE via
scikits.odesis the default (solver_method = "cvode"), paired with a JAX-derived analytic Jacobian (use_jax_jacobian = true) for production-tolerance coupled runs. scipyRadauandBDFare available as fall-backs (solver_method = "radau"/"bdf"); standalone installs withoutscikits.odesor JAX fall back automatically. - SPIDER bit-parity boundary conditions. Default
core_bc = "energy_balance"evolves $dS/dr|_\mathrm{cmb}$ as an extra ODE state, mirroring SPIDER'sbc.c:76-131. Three other modes (quasi_steady,gradient,bower2018) are available for parity testing and quick exploration. - Per-call mass-weighted $\Delta\Phi$ cap. SUNDIALS root function returns at the exact step where the global melt-fraction change first reaches the configured limit; required at the rheological transition where any rate estimate from $t = 0$ overshoots within the call window and stalls the adaptive $dt$.
- Coupling to Zalmoxis. External P-T tables, mesh, and per-node gravity profiles read from the structure solver are accepted via
eos_method = 2andmass_coordinates = true, so the interior dynamics solve and the structure solve share a single self-consistent mantle. - Configurable radiogenic and tidal heating. Six radionuclides ($^{40}\mathrm{K}$, $^{232}\mathrm{Th}$, $^{235}\mathrm{U}$, $^{238}\mathrm{U}$ for present-day heating; $^{26}\mathrm{Al}$ and $^{60}\mathrm{Fe}$ for early-Solar-System studies) plus a per-staggered-node tidal-heating array.
Quick start
Install
git clone git@github.com:FormingWorlds/aragog.git
cd aragog
pip install -e ".[jax,test,docs]"
The optional extras are: jax (JAX, equinox, scikits-odes-sundials for the production CVODE+JAX path), test (pytest with xdist + cov), docs (Zensical + mkdocstrings for building the doc site). Plain pip install -e . works for an inspection-only install.
A PyPI release is available as fwl-aragog:
pip install fwl-aragog
Equation-of-state tables
Aragog requires SPIDER-format pressure-entropy lookup tables on disk. Inside a PROTEUS coupled run the tables are produced on the fly by Zalmoxis from PALEOS; for standalone use, point eos_dir at any directory containing the ten required files (see Reference: data for the schema and the canonical file list).
FWL_DATA is honoured as the default data root if it is set:
export FWL_DATA=/your/data/path
Run a smoke integration
from pathlib import Path
from aragog import aragog_file_logger
from aragog.solver import EntropySolver
aragog_file_logger(log_dir=str(Path.cwd()))
solver = EntropySolver.from_file(
filename="src/aragog/cfg/abe_solid.toml",
eos_dir="path/to/eos/tables",
)
solver.initialize()
solver.set_initial_entropy(2900.0)
solver.solve()
out = solver.get_state()
print(f"Status: {out.status}")
print(f"T_magma: {out.T_magma:.0f} K, T_core: {out.T_core:.0f} K, Phi: {out.Phi_global:.4f}")
EntropySolver.from_file builds Parameters from the TOML file and loads the EOS tables in one call. The bundled configs in src/aragog/cfg/ are short standalone smoke setups; for a full walkthrough including the SolverOutput dataclass fields, see the first-run tutorial. The production-tolerance defaults that PROTEUS uses (CVODE + JAX, core_bc = "energy_balance", mass_coordinates = true, phase_smoothing = "tanh", kappah_floor = 10 m$^2$/s, the six-isotope radionuclide cocktail) are set on the PROTEUS side, not in abe_solid.toml or abe_mixed.cfg.
Test suite
pytest -m unit # ~2 min on a workstation
pytest -m "unit or smoke or slow" # full nightly suite, 10 min wall + EOS-table data
Coverage is enforced at 90% by [tool.coverage.report] in pyproject.toml. Both push CI (unit tier) and the nightly (full suite) upload to Codecov under separate flags so the dashboard distinguishes the two cadences.
PROTEUS integration
When PROTEUS drives Aragog, the configuration lives in PROTEUS's TOML schema, not in input/abe_mixed.cfg. The PROTEUS-side attrs class is proteus.config._interior.Aragog; the wrapper at src/proteus/interior_energetics/aragog.py translates PROTEUS settings into Aragog Parameters and registers the JAX CVODE factory.
Recommended PROTEUS-side knobs (in priority order):
interior_struct.module = "zalmoxis"+interior_energetics.module = "aragog"for new production runs.interior_energetics.aragog.core_bc = "energy_balance"(default).interior_energetics.aragog.backend = "jax"(default; the wrapper translates touse_jax_jacobian = true).interior_energetics.aragog.solver_method = "cvode"(default).interior_energetics.aragog.phi_step_cap = 0.05for typical evolution; leave at 0.0 unless mushy-zone melt-fraction oscillations show up early.
Full theory and the prioritised-settings table live in docs/Explanations/.
Citation
If you use Aragog (or the original SPIDER code) please cite:
- Bower et al. (2018). Numerical solution of a non-linear conservation law applicable to the interior dynamics of partially molten planets. Physics of the Earth and Planetary Interiors, 274, 49 to 62.
The PALEOS pressure-entropy tables used by the production path are described in Attia et al. (2026), PALEOS: Multiphase Equations of State and Mass-Radius Relations for Exoplanet Interiors (submitted to A&A; arXiv:2605.03741).
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 fwl_aragog-26.5.13.tar.gz.
File metadata
- Download URL: fwl_aragog-26.5.13.tar.gz
- Upload date:
- Size: 2.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3023d7b9902bf7d2adb3bc1f746aa27d12995d1538dee2f485079dad93a263d7
|
|
| MD5 |
39aaa09962193115963b7b8eaa3571ee
|
|
| BLAKE2b-256 |
ee1f900c030be66bb246f37fc3f7ac2f2ca22f2eca641848256f35703353b618
|
Provenance
The following attestation bundles were made for fwl_aragog-26.5.13.tar.gz:
Publisher:
publish.yaml on FormingWorlds/aragog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fwl_aragog-26.5.13.tar.gz -
Subject digest:
3023d7b9902bf7d2adb3bc1f746aa27d12995d1538dee2f485079dad93a263d7 - Sigstore transparency entry: 1523106614
- Sigstore integration time:
-
Permalink:
FormingWorlds/aragog@d051902b4e5f216ffcc1ac1799ff6c34eec8c289 -
Branch / Tag:
refs/tags/26.05.13 - Owner: https://github.com/FormingWorlds
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@d051902b4e5f216ffcc1ac1799ff6c34eec8c289 -
Trigger Event:
release
-
Statement type:
File details
Details for the file fwl_aragog-26.5.13-py3-none-any.whl.
File metadata
- Download URL: fwl_aragog-26.5.13-py3-none-any.whl
- Upload date:
- Size: 177.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61d46105684e9632f8afb16ee279c4147a5aec563e38e92b9f9639a974a04c7c
|
|
| MD5 |
d06e63be8e7f7c7efadc21b70a4d9c9c
|
|
| BLAKE2b-256 |
5d47dbb62162d9d3a1ed4278eeca91c569321cd343c9b738cda2f5d7f56564f8
|
Provenance
The following attestation bundles were made for fwl_aragog-26.5.13-py3-none-any.whl:
Publisher:
publish.yaml on FormingWorlds/aragog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fwl_aragog-26.5.13-py3-none-any.whl -
Subject digest:
61d46105684e9632f8afb16ee279c4147a5aec563e38e92b9f9639a974a04c7c - Sigstore transparency entry: 1523106645
- Sigstore integration time:
-
Permalink:
FormingWorlds/aragog@d051902b4e5f216ffcc1ac1799ff6c34eec8c289 -
Branch / Tag:
refs/tags/26.05.13 - Owner: https://github.com/FormingWorlds
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@d051902b4e5f216ffcc1ac1799ff6c34eec8c289 -
Trigger Event:
release
-
Statement type: