Skip to content

Interior structure and energetics

PROTEUS separates the interior into two coupled subsystems: structure (hydrostatic equilibrium, density profile, planet radius) and energetics (thermal evolution, melt fraction, heat flux). Each has its own module selection and parameters.

Submodule documentation: Aragog | SPIDER | Zalmoxis. See also Model description.

Interior structure [interior_struct]

The structure module computes the planet's density profile, radius, and core-mantle boundary position by solving the hydrostatic equilibrium equation with an equation of state (EOS).

Parameter Type Default Description
module str "zalmoxis" Structure solver: zalmoxis (full EOS), dummy (scaling laws), spider (SPIDER internal)
core_frac float 0.325 Core fraction (meaning depends on core_frac_mode)
core_frac_mode str "mass" How core_frac is interpreted: mass (mass fraction) or radius (radius fraction). The zalmoxis module always uses mass and ignores radius with a warning; radius is honoured by the dummy and spider modules
core_density float or "self" "self" Core density [kg m\(^{-3}\)]; "self" = computed by the structure solver
core_heatcap float or "self" "self" Core heat capacity [J kg\(^{-1}\) K\(^{-1}\)]; "self" = computed by the structure solver
melting_dir str or none none Melting curve folder name in FWL_DATA (for SPIDER module)
eos_dir str or none none EOS folder name in FWL_DATA (for SPIDER module)

Zalmoxis [interior_struct.zalmoxis]

Zalmoxis solves the full hydrostatic structure with tabulated EOS (PALEOS, Chabrier, or Seager 2007). It supports 2-layer (core + mantle) and 3-layer (core + mantle + ice/water) models.

Equation of state

Parameter Type Default Description
core_eos str "PALEOS:iron" Core EOS as "<source>:<material>"
mantle_eos str "PALEOS:MgSiO3" Mantle EOS as "<source>:<material>"; PALEOS: uses the unified table, PALEOS-2phase: uses separate solid and liquid tables (see the PALEOS mantle EOS notes below)
ice_layer_eos str or none none Ice/water layer EOS; none = 2-layer model
mushy_zone_factor float 0.8 Solidus depression \(T_\mathrm{sol}=f\,T_\mathrm{liq}\) [0.7, 1.0]; the default 0.8 is the Stixrude (2014) solidus-to-liquidus ratio for MgSiO\(_3\). Applies to PALEOS: unified only; for PALEOS-2phase: it is treated as 1.0
mantle_mass_fraction float 0 Mantle mass fraction for 3-layer models; 0 = auto (\(1 - \mathrm{core\_frac}\))
dry_mantle bool true Structure EOS assumes a dry mantle. Set false for melt-fraction-aware dissolved-volatile mixing in the mantle density (per-shell volatile profile). When false, only the atmospheric inventory is excluded from the dry-mass target; the dissolved mass stays inside the interior

How the PALEOS mantle EOS is applied

The MgSiO\(_3\) mantle EOS resolves through two distinct paths depending on the <source> prefix of mantle_eos.

With mantle_eos = "PALEOS:MgSiO3" (the default), the hydrostatic structure solve uses the PALEOS unified MgSiO\(_3\) table for the density profile. The phase-specific property surfaces used by Aragog (density, heat capacity, thermal expansion, adiabatic gradient) and the pressure-entropy lookup tables are built from the PALEOS two-phase solid and liquid tables shipped with Zalmoxis when those tables are present, which keeps the properties well resolved across the melting-curve discontinuity that a single unified table interpolates through. If the two-phase tables are not available, the property surfaces are built from the unified table alone, and the entropy near the melting curve is less reliable. The liquidus is the analytic PALEOS curve (Belonoshko et al. 2005 below 2.55 GPa, Fei et al. 2021 above, in Simon-Glatzel form), and the solidus is derived as \(T_\mathrm{sol}(P) = f\,T_\mathrm{liq}(P)\) with \(f\) the mushy_zone_factor (default 0.8), the constant solidus-to-liquidus ratio of the Stixrude (2014)3 MgSiO\(_3\) melting parametrization. The melt fraction then follows from the lever rule between this solidus and liquidus.

With mantle_eos = "PALEOS-2phase:MgSiO3", the solid and liquid tables define the phase boundaries directly. mushy_zone_factor is treated as 1.0 so the solidus coincides with the liquidus, and the latent-heat gap is supplied by the entropy difference between the solid and liquid tables rather than by a fixed temperature depression.

Two-phase table versions

Two versions of the PALEOS two-phase MgSiO\(_3\) tables are in circulation: the set shipped in the Zalmoxis data directory, and the finer-grid set on Zenodo that the reference-data manifest fetches. They are generated from the same PALEOS EOS but on different grids, so for exact reproducibility record which set a run used (the shipped tables resolve through the Zalmoxis material registry; the fetched tables land under FWL_DATA).

The wet mantle carries dissolved water only

With dry_mantle = false and the production outgassing module (CALLIOPE), the only species blended into the mantle density is H2O. This is the intersection of the two sides of the coupling, not an arbitrary restriction: a species needs both a dissolved mass from the outgassing chemistry and an EOS table in the structure solver, and under CALLIOPE H2O is the only species with both. CALLIOPE also dissolves CO2, CO, CH4, N2, and S2, but these have no structure-side EOS mapping. Their dissolved mass stays inside the interior mass target, and because the silicate blend fraction is defined as the remainder 1 - w_H2O, those kilograms are packed at silicate density: the mass budget stays exact while the compressibility of these species is misrepresented. The radius error scales as the species' dissolved mass fraction times its density contrast against silicate, negligible at typical inventories. If a composition ever pushes an unmapped species to percent-level dissolved mass fractions, the fix is an EOS mapping for it, not a bookkeeping change. H2 has an EOS mapping (Chabrier:H) but no solubility law in CALLIOPE; a dissolved H2 mass can arise from the atmodeller outgassing module (its H2 solubility law), from the H2-silicate binodal partitioning (outgas.h2_binodal), or from the radial miscibility solve (interior_struct.zalmoxis.global_miscibility). The last two are rejected at config load until that physics is production ready, and the atmodeller wet combination has not been through the wet-path conservation verification. Every verified configuration therefore exercises the wet path with water alone, which is exactly the case covered by the dissolved-water conservation verification. Whoever lifts either gate or runs atmodeller wet must extend the wet-path verification to H2 first: the per-shell binodal suppression removes dissolved H2 from the structure without returning it to the atmosphere, so water-grade mass closure does not carry over.

Grid and solver

Parameter Type Default Description
num_levels int 150 Number of radial grid levels
outer_solver str "newton" Outer mass-radius solver: newton (recommended) or picard (alternative)
use_jax bool true Use JAX backend for the structure solver
use_anderson bool false Anderson Type-II Picard acceleration on the density loop
solver_tol_outer float 3e-3 Relative tolerance for mass convergence
solver_tol_inner float 1e-4 Relative tolerance for density convergence
solver_max_iter_outer int 100 Maximum iterations for mass convergence
solver_max_iter_inner int 100 Maximum iterations for density convergence

Newton solver tuning (used when outer_solver = "newton")

Parameter Type Default Description
newton_max_iter int 30 Maximum Newton iterations
newton_tol float 1e-4 Newton convergence tolerance
newton_relative_tolerance float 1e-9 Integrator relative tolerance for Newton path
newton_absolute_tolerance float 1e-10 Integrator absolute tolerance for Newton path

Structure update triggers

Zalmoxis structure updates are expensive and decoupled from the main coupling loop. The structure is recomputed when any of these conditions are met:

Parameter Type Default Description
update_dphi_abs float 0.05 Trigger when melt fraction changes by this amount
update_dtmagma_frac float 0.05 Trigger when \(T_\mathrm{magma}\) changes by this fraction
update_dw_comp_abs float 0.05 Trigger when the relative dissolved-volatile (H\(_2\)O or H\(_2\)) mantle mass fraction changes by this amount
update_interval float 1e9 Maximum time between updates [yr]; effectively disabled at default
update_min_interval float 0 Minimum time between updates [yr] (prevents thrashing)
update_stale_ceiling float 2.5e4 Time since last successful re-solve that refires a trigger [yr]; 0 disables
mesh_max_shift float 0.05 Maximum fractional radius shift per update
mesh_convergence_interval float 10.0 Convergence relaxation time after mesh update [yr]

Initialisation

Parameter Type Default Description
equilibrate_init bool true Equilibrate structure and composition before the main loop
equilibrate_max_iter int 15 Maximum equilibration iterations
equilibrate_tol float 0.01 Equilibration convergence tolerance

P-S entropy lookup tables

These tables are derived from PALEOS EOS data at runtime and cached. They provide the entropy-to-temperature mapping used by Aragog and SPIDER.

Parameter Type Default Description
lookup_nP int 1350 Pressure grid points in lookup tables
lookup_nS int 280 Entropy grid points in lookup tables

By default each run derives its own copy of these tables under its output data/ directory. Set the PROTEUS_PS_CACHE_DIR environment variable to an absolute path to instead share one derived copy across runs: tables are stored in a subdirectory keyed by pressure ceiling, resolution, mantle-mass fraction, table layout, and the resolved mantle-EOS identity, so a run reuses the cache only when every one of those matches and different equations of state never collide. This is the mitigation for the per-run disk duplication that a grid or batch of same-EOS runs would otherwise incur, since all such runs then read one shared copy. The cache directory is not size-limited or auto-pruned; it grows with the number of distinct pressure, resolution, and EOS combinations run against it, so point it at storage sized for the campaign.

Miscibility (experimental, not production-ready)

Parameter Type Default Description
global_miscibility bool false Enable H\(_2\)-silicate binodal-aware radial structure. true is rejected at config load: it requires the H\(_2\)-silicate binodal handoff on the Zalmoxis side (Zalmoxis tracker #64), which is not yet implemented
miscibility_max_iter int 10 Maximum miscibility iterations
miscibility_tol float 0.01 Miscibility convergence tolerance

Interior energetics [interior_energetics]

The energetics module evolves the mantle thermal state (temperature, entropy, melt fraction) and computes the interior heat flux that drives atmospheric evolution.

Parameter Type Default Description
module str "aragog" Interior thermal module: aragog (default), spider, boundary, dummy
num_levels int 80 Radial grid levels for the energetics domain
rtol float 1e-10 ODE solver relative tolerance
atol float 1e-10 ODE solver absolute tolerance
flux_guess float -1 Initial heat flux guess [W m\(^{-2}\)]; negative = compute as \(\sigma T_\mathrm{magma}^4\)
surface_bc_mode str "flux" Surface BC for SPIDER/Aragog: flux (prescribed \(F_\mathrm{atm}\) from the atmosphere module) or grey_body (native grey-body BC computed inside the interior solver)

Transport physics

Parameter Type Default Description
trans_conduction bool true Conductive heat transfer
trans_convection bool true Convective heat transfer (mixing length theory)
trans_grav_sep bool true Gravitational separation (Stokes settling)
trans_mixing bool true Chemical mixing flux

Heating

Parameter Type Default Description
heat_tidal bool false Tidal heating (requires orbit.module \(\neq\) none)
heat_radiogenic bool true Radiogenic heating
radio_tref float 4.567 Reference age for decay concentrations [Gyr] (4.567 = present-day BSE)
radio_Al float 0.0 \(^{26}\)Al concentration [ppmw]; 1.23 = canonical
radio_Fe float 0.0 \(^{60}\)Fe concentration [ppmw]
radio_K float 310.0 \(^{40}\)K concentration [ppmw of element]; BSE value
radio_U float 0.031 U concentration [ppmw of element]; BSE value
radio_Th float 0.124 Th concentration [ppmw of element]; BSE value

Rheology and convection

Parameter Type Default Description
rfront_loc float 0.50 Rheological front centre [melt fraction]
rfront_wid float 0.20 Rheological front width [melt fraction]
grain_size float 0.1 Crystal settling grain size [m]
mixing_length str "nearest" MLT length scale: nearest (distance to nearest boundary) or constant (\(D/4\))
kappah_floor float 10.0 Eddy diffusivity floor [m\(^2\) s\(^{-1}\)]; prevents MLT freeze

Coupling limits

Parameter Type Default Description
tmagma_atol float 20.0 Maximum \(T_\mathrm{magma}\) change per PROTEUS step [K]
tmagma_rtol float 0.02 Maximum relative \(T_\mathrm{magma}\) change per step

Ultra-thin boundary layer

Parameter Type Default Description
param_utbl bool false Enable UTBL parameterisation
param_utbl_const float 1e-7 UTBL scaling constant [K\(^{-1}\)]

Hydrostatic EOS (Adams-Williamson)

Parameter Type Default Description
adams_williamson_rhos float 4078.95 Surface density [kg m\(^{-3}\)]
adams_williamson_beta float 1.1115e-7 Density gradient [m\(^{-1}\)]
adiabatic_bulk_modulus float 260e9 Adiabatic bulk modulus [Pa]

Phase material properties

Parameter Type Default Description
melt_log10visc float 2.0 log\(_{10}\) molten-silicate viscosity [Pa s]
solid_log10visc float 22.0 log\(_{10}\) solid-silicate viscosity [Pa s]
melt_cond float 4.0 Molten-silicate thermal conductivity [W m\(^{-1}\) K\(^{-1}\)]
solid_cond float 4.0 Solid-silicate thermal conductivity [W m\(^{-1}\) K\(^{-1}\)]
eddy_diffusivity_thermal float 1.0 Scaling on MLT thermal eddy diffusivity
eddy_diffusivity_chemical float 1.0 Scaling on MLT chemical eddy diffusivity
latent_heat_of_fusion float 4e6 Silicate latent heat of fusion [J kg\(^{-1}\)]
phase_transition_width float 0.1 Width of the mushy-zone blend [melt fraction]

Core thermal model

Parameter Type Default Description
core_tfac_avg float 1.147 \(T_\mathrm{avg} / T_\mathrm{cmb}\) ratio from adiabatic gradient

Diagnostics

Parameter Type Default Description
write_flux_diagnostics bool false Save per-component flux decomposition to Aragog NetCDF output

Constant-properties mode

Bypasses EOS tables and uses an analytical \(T(S) = T_\mathrm{ref} \exp((S - S_\mathrm{ref}) / C_p)\) relationship. Useful for controlled parity tests.

Parameter Type Default Description
const_properties bool false Enable constant-properties mode
const_rho float 4000.0 Constant density [kg m\(^{-3}\)]
const_Cp float 1000.0 Constant heat capacity [J kg\(^{-1}\) K\(^{-1}\)]
const_alpha float 1e-5 Constant thermal expansivity [K\(^{-1}\)]
const_cond float 4.0 Constant thermal conductivity [W m\(^{-1}\) K\(^{-1}\)]
const_log10visc float 2.0 Constant log\(_{10}\) viscosity [Pa s]
const_T_ref float 3500.0 Reference temperature [K]
const_S_ref float 3000.0 Reference entropy [J kg\(^{-1}\) K\(^{-1}\)]

Aragog [interior_energetics.aragog]

Aragog is the default interior thermal evolution module. It solves the mantle energy equation with CVODE (SUNDIALS) using JAX-derived analytic Jacobians for robust convergence.

Parameter Type Default Description
mass_coordinates bool true Use mass-coordinate mesh spacing (gives finer resolution near surface)
backend str "jax" ODE backend: jax (CVODE + analytic Jacobian, recommended) or numpy (CVODE + finite-difference Jacobian)
solver_method str "cvode" ODE solver: cvode (SUNDIALS), radau (scipy), bdf (scipy)
atol_temperature_equivalent float 1e-8 Effective temperature-scale absolute tolerance [K]
phase_smoothing str "tanh" Phase-boundary smoothing: tanh or cubic_hermite
core_bc str "energy_balance" Core-mantle boundary condition: energy_balance (SPIDER bit-parity), quasi_steady, gradient, or bower2018 (experimental)
tolerance_struct float 100 Absolute mass tolerance [kg] for the interior-radius secant solver
scalar_gravity_override bool false Overwrite the mesh gravity column with a uniform surface scalar; set true only for paired scalar-gravity comparisons
phi_step_cap float 0.0 Per-call melt-fraction step cap. A CVODE root function returns control at the exact time the larger of the global mass-weighted $
temperature_step_cap float 0.0 Per-call per-cell temperature step cap [K]. Shares the same root function as phi_step_cap and fires on the maximum single-cell $
entropy_step_cap float 0.0 Per-call per-cell entropy step cap [J kg\(^{-1}\) K\(^{-1}\)] in the native solver variable; same role as temperature_step_cap without an EOS lookup in the root function. 0.0 promotes to 100.0 on the Zalmoxis stack; positive overrides, -1.0 keeps it off; any other negative, NaN, or infinity is rejected at load
phase_boundary_entropy_margin float 200.0 Phase-boundary proximity band [J kg\(^{-1}\) K\(^{-1}\)] within which a staggered cell counts as near a solidus or liquidus crossing, tightening the integrator max_step so CVODE resolves the stiff two-phase RHS. A positive value is required. Keep it of order a few hundred; a value orders of magnitude above the default makes every cell count as near a boundary at all times, clamping the integrator to 1 yr steps for the whole run and stalling it

SPIDER [interior_energetics.spider]

SPIDER is the C interior module. It requires PETSc and produces results consistent with Bower et al. (2018) 1.

Parameter Type Default Description
solver_type str "bdf" SUNDIALS method: adams or bdf
matprop_smooth_width float 0.01 Melt-fraction smoothing window across solidus/liquidus
tolerance_struct float 100 Absolute mass tolerance [kg] for the interior-radius secant solver
log_output bool true Write SPIDER solver log output

Dummy [interior_energetics.dummy]

A parameterised cooling model with prescribed solidus and liquidus.

Parameter Type Default Description
mantle_tliq float 2700.0 Liquidus temperature [K]
mantle_tsol float 1700.0 Solidus temperature [K]
mantle_rho float 4550.0 Mantle density [kg m\(^{-3}\)] for the density profile and the fallback mantle-mass estimate; the mantle mass uses \(M_\mathrm{int}-M_\mathrm{core}\) when the structure provides it
mantle_cp float 1792.0 Mantle heat capacity [J kg\(^{-1}\) K\(^{-1}\)]
heat_internal float 0.0 Internal heating rate [W kg\(^{-1}\)]

Boundary [interior_energetics.boundary]

A 0-D box model for the mantle thermal evolution based on Schaefer et al. (2016) 2, with prescribed solidus and liquidus and parameterised convective heat transport.

Parameter Type Default Description
rtol float 1e-6 ODE solver relative tolerance
atol float 1e-9 ODE solver absolute tolerance
T_p_0 float 3500.0 Initial potential temperature [K] (if Zalmoxis is not active)
T_solidus float 1420.0 Mantle solidus [K]
T_liquidus float 2020.0 Mantle liquidus [K]
Tsurf_event_change float 20.0 Maximum surface-\(T\) jump per iteration before triggering an event [K]
critical_rayleigh_number float 1100.0 Critical Rayleigh number for onset of convection
heat_fusion_silicate float 4e5 Latent heat of fusion for silicates [J kg\(^{-1}\)]
nusselt_exponent float 0.33 Nusselt-Rayleigh scaling exponent
silicate_heat_capacity float 1200.0 Silicate heat capacity [J kg\(^{-1}\) K\(^{-1}\)]
atm_heat_capacity float 1.7e4 Fallback atmosphere heat capacity [J kg\(^{-1}\) K\(^{-1}\)]
silicate_density float 4103.0 Silicate density [kg m\(^{-3}\)]
thermal_conductivity float 4.2 Thermal conductivity [W m\(^{-1}\) K\(^{-1}\)]
thermal_diffusivity float 1e-6 Thermal diffusivity [m\(^2\) s\(^{-1}\)]
thermal_expansivity float 2e-5 Thermal expansivity [K\(^{-1}\)]
viscosity_model int 2 1 = constant, 2 = aggregate smooth, 3 = Arrhenius
eta_constant float 100 Constant viscosity [Pa s] (model 1)
transition_width float 0.2 Viscosity transition width [melt fraction]
eta_solid_const float 1e22 Solid-end viscosity [Pa s] (aggregate model)
eta_melt_const float 100 Melt-end viscosity [Pa s] (aggregate model)
dynamic_viscosity float 3.8e9 Arrhenius solid reference dynamic viscosity [Pa s]
activation_energy float 3.5e5 Arrhenius solid activation energy [J mol\(^{-1}\)]
creep_parameter float 26.0 Arrhenius creep parameter
viscosity_prefactor float 2.4e-4 VFT magma-ocean prefactor [Pa s]
viscosity_activation_temp float 4600.0 VFT magma-ocean activation temperature [K]
logging bool false Write diagnostic CSV files

See also: Interior modules | Structure module | Melting curves


  1. Bower, D.J., Sanan, P. & Wolf, A.S., 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-62, 2018. SciX

  2. Schaefer, L., Wordsworth, R.D., Berta-Thompson, Z. & Sasselov, D., Predictions of the atmospheric composition of GJ 1132b, The Astrophysical Journal, 829, 63, 2016. SciX

  3. Stixrude, L., Melting in super-earths, Philosophical Transactions of the Royal Society A, 372, 20130076, 2014. SciX