Configuration file¶
PROTEUS uses TOML to structure its configuration files. This page lists all parameters with their types, defaults, and descriptions. For topic-specific parameter guides, see the configuration reference pages:
- Execution and output
- Planet and volatiles
- Star and orbit
- Interior structure and energetics
- Atmosphere and chemistry
- Escape and outgassing
- Synthetic observations
For worked examples, see the Tutorials.
Defaults and required parameters¶
Every parameter has a built-in default. The defaults are defined in the
configuration schema in
src/proteus/config/,
so a configuration file only needs to set the parameters whose defaults you
want to change. Empty sections can be omitted entirely. The
minimal.toml
example shows how little a working file needs: a few science-critical choices
(planet mass, orbit, volatiles, redox), with everything else left at its
default.
Where to find the default for each parameter. The configuration reference
pages listed above give the default value of every parameter in their
Default column, alongside its type and description. The auto-generated
listing further down this page is built from the same schema and shows each
parameter's source definition, including the coded default value.
To see exactly which defaults applied to a run, open the
init_coupler.toml file in that run's output folder. It is a completed copy of
the configuration with every parameter resolved, including all the defaults
that were filled in for the options you did not set. This is the
fully-expanded configuration the simulation actually used.
Some parameters are conditionally required. A parameter that is only
meaningful for one module is required when that module is selected. For
example, the mors stellar evolution module (star.module = 'mors') requires
star.mors.age_now, whereas the dummy module does not. The configuration
loader reports an error at startup if a required parameter is missing for the
chosen modules.
Keys outside the schema are refused. Loading a configuration fails if the
file contains a key that the schema does not define, and the error names every
such key. Because each parameter has a default, a misspelled or outdated option
name would otherwise take no effect at all: the run would proceed on the
default while the file appears to say otherwise. The check covers nested keys,
so planet.elements.H_budgets is caught as readily as a stray top-level
section. It runs when a run configuration is loaded, which includes proteus
start, the data-download commands, and the base configuration of a parameter
grid. If a key is rejected that you expect to exist, check its spelling against
the configuration reference pages above or against all_options.toml.
Sections must be written as single tables. Writing [[planet]] rather than
[planet] declares an array of tables, which the parser cannot map onto the
schema: the section is discarded whole and every parameter inside it reverts to
its default. The name itself is spelled correctly in that case, so nothing
about it looks wrong in the file. Loading refuses such a section and names it,
and the fix is to remove the extra brackets.
See all_options.toml for a comprehensive example. Have a look at the other input configs for ideas of how to set up your config in practice.
Root parameters¶
Config
¶
Root config parameters.
Attributes:
| Name | Type | Description |
|---|---|---|
config_version |
str
|
Version of the configuration file format. |
params |
Params
|
Parameters for code execution, output files, time-stepping, convergence. |
star |
Star
|
Stellar parameters, model selection. |
orbit |
Orbit
|
Orbital and star-system parameters. |
planet |
Planet
|
Bulk planet properties (mass, initial volatile inventory). |
interior_struct |
Struct
|
Planetary structure calculation (radius, composition, Zalmoxis). |
interior_energetics |
Interior
|
Magma ocean / mantle energetics model parameters, model selection. |
outgas |
Outgas
|
Outgassing parameters (fO2, etc) and included volatiles. |
atmos_clim |
AtmosClim
|
Planetary atmosphere climate parameters, model selection. |
atmos_chem |
AtmosChem
|
Planetary atmosphere chemistry parameters, model selection. |
escape |
Escape
|
Atmospheric escape parameters, model selection. |
accretion |
Accretion
|
Late accretion / delivery model selection. |
observe |
Observe
|
Synthetic observations. |
write(out)
¶
Write configuration to a new TOML file.
Source code in src/proteus/config/_config.py
352 353 354 355 356 357 358 359 360 361 362 363 364 365 | |
spada_zephyrus(instance, attribute, value)
¶
ZEPHYRUS escape requires the MORS star module with the Spada evolution tracks.
Source code in src/proteus/config/_config.py
25 26 27 28 29 30 | |
instmethod_dummy(instance, attribute, value)
¶
Instellation method 'inst' is only available with the dummy star module.
Source code in src/proteus/config/_config.py
33 34 35 36 | |
instmethod_evolve(instance, attribute, value)
¶
Orbital evolution cannot be combined with instellation method 'inst'.
Source code in src/proteus/config/_config.py
39 40 41 42 43 44 | |
satellite_evolve(instance, attribute, value)
¶
Planetary orbital evolution and the satellite model are mutually exclusive.
Source code in src/proteus/config/_config.py
47 48 49 50 51 52 | |
tides_enabled_orbit(instance, attribute, value)
¶
Interior tidal heating requires an orbit module to be enabled.
Source code in src/proteus/config/_config.py
55 56 57 58 | |
check_module_dependencies(instance, attribute, value)
¶
Check that required external packages are importable for the selected modules.
Source code in src/proteus/config/_config.py
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | |
boreas_requires_atmosphere(instance, attribute, value)
¶
BOREAS escape requires a radiative atmosphere (not dummy).
Source code in src/proteus/config/_config.py
118 119 120 121 122 123 124 | |
observe_resolved_atmosphere(instance, attribute, value)
¶
Synthetic observations require a spatially resolved atmosphere (not dummy).
Source code in src/proteus/config/_config.py
127 128 129 130 | |
janus_escape_atmosphere(instance, attribute, value)
¶
ZEPHYRUS escape with JANUS requires the escape stop criterion to be enabled.
Source code in src/proteus/config/_config.py
133 134 135 136 137 138 139 140 141 142 | |
planet_mass_valid(instance, attribute, value)
¶
Validate that mass_tot is within range.
Source code in src/proteus/config/_config.py
145 146 147 148 149 150 151 | |
planet_oxygen_mode_explicit(instance, attribute, value)
¶
Validate O_mode in planet.elements.
Whole-planet oxygen accounting requires every config to declare how the IC O budget is interpreted. Valid modes: 'ic_chemistry' (default, defer to CALLIOPE equilibrium), 'ppmw', 'kg', 'FeO_mantle_wt_pct'.
Source code in src/proteus/config/_config.py
154 155 156 157 158 159 160 161 162 163 164 | |
planet_fO2_source_compat(instance, attribute, value)
¶
Validate planet.fO2_source against O_mode, volatile_mode, and against availability.
Rejection rules:
-
fO2_source = "from_mantle_redox"is a reserved enum value for the radial Fe3+/Fe2+ fO2 framework (issue #653, Schaefer et al. 2024). The runtime path for it does not exist yet; reject the config so users do not silently fall through to the default behaviour. -
fO2_source = "from_O_budget"requires the O budget to be authoritative.O_mode = "ic_chemistry"defers the O inventory to the chemistry solver, so there is nothing to invert against. Require a concrete O budget ("ppmw" / "kg" / "FeO_mantle_wt_pct") instead. -
fO2_source = "from_O_budget"requires the volatile budget to be set element-wise.volatile_mode = "gas_prs"supplies partial pressures directly and makesplanet.elements.O_modeinoperative, so there is nothing to invert against. Switchvolatile_modeto"elements"or pick a different fO2_source. -
fO2_source = "from_O_budget"requires an outgassing backend with an authoritative-O implementation: CALLIOPE (equilibrium_atmosphere_authoritative_O) and atmodeller (native mass-constraint API) both qualify; thedummybackend does not. The runtime dispatch echoes this rejection too, but failing at config-load saves the user from burning interior IC and structure setup before hitting the wall.
fO2_source = "user_constant" (default) accepts every O_mode and
every volatile_mode.
Warning rule:
fO2_source = "from_O_budget"with a non-defaultoutgas.fO2_shift_IWemits a UserWarning. With this source the buffer offset is derived, so a user-supplied value is silently ignored. The warning surfaces the misconfiguration without blocking the run.
Source code in src/proteus/config/_config.py
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | |
boundary_requires_fixed_surface_state(instance, attribute, value)
¶
Boundary backend assumes a fixed surface state coupling.
Source code in src/proteus/config/_config.py
272 273 274 275 276 277 278 279 | |
General parameters¶
This module describes the parameters for the data location, data output, and logging. It also defines stopping criteria.
OutputParams
¶
Parameters for output files and logging.
Note that write_mod and dt_write_rel are independent triggers for
writing output files. The model will write output if either trigger
is individually satisfied.
Attributes:
| Name | Type | Description |
|---|---|---|
path |
str
|
Output folder name inside |
logging |
str
|
Log verbosity. Choices: 'INFO', 'DEBUG', 'ERROR', 'WARNING'. |
plot_fmt |
str
|
Plotting output file format. Choices: "png", "pdf". |
write_mod |
int
|
Write data iteration-interval trigger. 0: wait until completion. n: every n iterations. |
dt_write_rel |
float
|
Write data time-interval trigger. Expressed as a fraction of the current simulation time. Set to 0 to disable. |
plot_mod |
int | None
|
Plotting frequency. 0: wait until completion. n: every n iterations. None: never plot. |
archive_mod |
int | None
|
Archive frequency. 0: wait until completion. n: every n iterations. None: never archive. |
remove_sf |
bool
|
Remove SOCRATES spectral files after model terminates. |
TimeStepParams
¶
Parameters for time-stepping.
Attributes:
| Name | Type | Description |
|---|---|---|
minimum |
float
|
Minimum absolute time-step size [yr]. |
minimum_rel |
float
|
Minimum relative time-step size [dimensionless]. |
maximum |
float
|
Maximum time-step size [yr]. |
initial |
float
|
Initial time-step size [yr]. |
starspec |
float
|
Maximum interval at which to recalculate the stellar spectrum [yr]. |
starinst |
float
|
Maximum interval at which to recalculate instellation flux [yr]. |
method |
str
|
Time-stepping method. Choices: 'proportional', 'adaptive', 'maximum'. |
propconst |
float
|
Proportionality constant (proportional method). |
atol |
float
|
Absolute tolerance on time-step size (adaptive method) [yr]. |
rtol |
float
|
Relative tolerance on time-step size (adaptive method) [dimensionless]. |
scale_incr |
float
|
Scale factor to grow time-step on a successful adaptive step [dimensionless, must be >1]. |
scale_decr |
float
|
Scale factor to shrink time-step on a rejected adaptive step [dimensionless, in (0, 1)]. |
window |
int
|
Number of previous steps to consider for adaptive-method comparison [dimensionless]. |
max_growth_factor |
float
|
Cap on the dt growth ratio between consecutive steps [dimensionless]. Bounds dtswitch / dtprev, preventing large jumps that can wedge the interior solver; 0 (default) disables the cap. |
maximum_rel |
float
|
Time-fraction allowance added to |
mushy_maximum |
float
|
Maximum time-step size [yr] during the mushy-zone transition
( |
mushy_upper |
float
|
Upper bound of the mushy regime [dimensionless melt
fraction]. When |
hysteresis_iters |
int
|
Number of PROTEUS iterations after an adaptive "slow down" decision during which the speed-up factor is suppressed. Prevents the controller from ramping dt straight back into the same stiffness cliff it just escaped from. Default 3; set to 0 to disable. |
hysteresis_sfinc |
float
|
Replacement speed-up factor applied while the hysteresis
counter is active. Must be |
StopIters
¶
StopTime
¶
StopSolid
¶
Parameters for solidification criteria.
Attributes:
| Name | Type | Description |
|---|---|---|
enabled |
bool
|
Enable termination at solidification if True. |
phi_crit |
float
|
Model will terminate (if enabled) or freeze volatiles (if freeze_volatiles) when global melt fraction drops below this value. |
freeze_volatiles |
bool
|
When True, outgassing stops at crystallization (Phi_global < phi_crit) but the simulation continues. Dissolved volatiles are trapped in the solid mantle and preserved in the helpfile. The atmosphere retains its current composition. When False, outgassing continues regardless of melt fraction. |
StopRadeqm
¶
StopEscape
¶
StopDisint
¶
Parameters for planet disintegration stopping criteria.
Attributes:
| Name | Type | Description |
|---|---|---|
enabled |
bool
|
Enable all planet disintegration criteria if True |
roche_enabled |
bool
|
Disable Roche limit criterion |
offset_roche |
float
|
Absolute correction (+/-) to (increase/decrease) calculated Roche limit [m]. |
spin_enabled |
bool
|
Disable Breakup period criterion |
offset_spin |
float
|
Absolute correction (+/-) to (increase/decrease) calculated Breakup period [s]. |
StopClock
¶
StopStall
¶
Parameters for the unconverged-atmosphere stopping criteria.
Attributes:
| Name | Type | Description |
|---|---|---|
enabled |
bool
|
Enable criteria if True |
maximum |
int
|
Model will terminate after this many consecutive iterations without a converged atmosphere solve, whatever the interior is doing. Sized on 27 stalled GJ 9827 d cases as they stood on 2026-08-08: the deepest streak a run recovered from is 126 and the deepest open one, which never converged, is 233. Raising it past the open streak defeats the criterion; lowering it below the recovered one ends runs that come back. |
StopParams
¶
Parameters for termination criteria.
Attributes:
| Name | Type | Description |
|---|---|---|
strict |
bool
|
Require termination criteria to be satisfied twice before the model exits. |
iters |
StopIters
|
Parameters for iteration number criteria. |
time |
StopTime
|
Parameters for maximum time criteria. |
solid |
StopSolid
|
Parameters for solidification criteria. |
radeqm |
StopRadeqm
|
Parameters for radiative equilibrium criteria. |
escape |
StopEscape
|
Parameters for escape criteria. |
disint |
StopDisint
|
Parameters for planet disintegration criteria. |
clock |
StopClock
|
Parameters for maximum clock runtime criteria. |
stall |
StopStall
|
Parameters for the unconverged-atmosphere criteria. |
Params
¶
Parameters for code execution, output files, time-stepping, convergence.
Attributes:
| Name | Type | Description |
|---|---|---|
out |
OutputParams
|
Parameters for data / logging output. |
dt |
TimeStepParams
|
Parameters for time-stepping. |
stop |
StopParams
|
Parameters for stopping criteria. |
resume |
bool
|
Resume the simulation from the last archived state in the output folder, instead of starting from scratch. |
offline |
bool
|
Run without network access; never download reference data, and fail if a required file is missing locally. |
max_bigger_than_min(instance, attribute, value)
¶
The maximum must exceed the minimum on the same section.
Source code in src/proteus/config/_params.py
17 18 19 20 | |
Stellar evolution¶
Mors
¶
Module parameters for MORS module.
Attributes:
| Name | Type | Description |
|---|---|---|
rot_pcntle |
float
|
Rotation, as percentile of stellar population. |
rot_period |
float
|
Rotation rate [days]. |
tracks |
str
|
Stellar evolution track to be used. Choices: 'spada', 'baraffe'. |
age_now |
float
|
Observed estimated age of the star [Gyr]. |
star_name |
str
|
Name of the star, to find appropriate stellar spectrum. See documentation. |
star_path |
str
|
Path to custom stellar spectra. If 'none', star_name will be used to find spectra in default locations. |
spectrum_source |
str
|
Source of stellar spectra. Choices: 'solar', 'muscles', 'phoenix', 'none'. |
phoenix_FeH |
float
|
Stellar metallicity [Fe/H] to be used for PHOENIX synthetic spectra, if spectrum_source is 'phoenix'. |
phoenix_alpha |
float
|
Alpha-element enhancement [alpha/Fe] to be used for PHOENIX synthetic spectra, if spectrum_source is 'phoenix'. |
phoenix_radius |
float
|
Stellar radius [R_sun]. If 'none', radius will be calculated using mors' stellar tracks, if spectrum_source is 'phoenix'. |
phoenix_log_g |
float
|
Surface gravity [cgs]. If 'none', log g will be calculated will be calculated using mors' stellar tracks, if spectrum_source is 'phoenix'. |
phoenix_Teff |
float
|
Effective temperature [K]. If 'none', Teff will be calculated will be calculated using mors' stellar tracks, if spectrum_source is 'phoenix'. |
StarDummy
¶
Star
¶
Stellar parameters, model selection.
You can find useful reference data in the documentation.
Attributes:
| Name | Type | Description |
|---|---|---|
bol_scale |
float
|
Scale factor applied to bolometrically modulate the stellar fluxes. |
bol_scale_start |
float | None
|
Stellar age from which bol_scale is applied [Gyr]. 'None' to disable. |
bol_scale_duration |
float
|
Duration for which bol_scale is applied [Gyr]. |
mass |
float
|
Stellar mass [M_sun]. Note that for Mors, it should be between 0.1 and 1.25 solar masses. Values outside of the valid range will be clipped. |
age_ini |
float
|
Stellar age at model initialisation, relative to stellar birthline [Gyr]. |
module |
str | None
|
Select star module to use. |
mors |
Mors
|
Parameters for MORS module. |
dummy |
StarDummy
|
Parameters for the dummy star module |
valid_mors(instance, attribute, value)
¶
Validate MORS settings: positive age, spectrum-source requirements, and rotation set by exactly one of percentile or period.
Source code in src/proteus/config/_star.py
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | |
valid_bol_scale_start(instance, attribute, value)
¶
A bolometric scaling other than 1 requires bol_scale_start and a positive duration.
Source code in src/proteus/config/_star.py
114 115 116 117 118 119 120 121 | |
valid_stardummy(instance, attribute, value)
¶
Dummy star requires a consistent radius specification and a valid Teff.
Source code in src/proteus/config/_star.py
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | |
Orbital evolution and tides¶
OrbitDummy
¶
Dummy orbit/tidal heating module.
Uses a fixed tidal heating power density and love number.
Attributes:
| Name | Type | Description |
|---|---|---|
H_tide |
float
|
Fixed global heating rate from tides [W kg-1]. |
Phi_tide |
str
|
Inequality which, if locally true, determines in which regions tides are applied. |
Imk2 |
float
|
Imaginary part of k2 Love number, which is usually negative. |
Lovepy
¶
Orbit
¶
Planetary and satellite orbital parameters.
Includes initial conditions, and options for enabling dynamical evolution.
Attributes:
| Name | Type | Description |
|---|---|---|
semimajoraxis |
float
|
Initial semi-major axis of the planet's orbit [AU]. |
eccentricity |
float
|
Initial Eccentricity of the planet's orbit. |
instellation_method |
str
|
Whether to use the semi-major axis ('distance') or instellation flux ('inst') to define the planet's initial orbit |
instellationflux |
float
|
Instellation flux initially received by the planet in Earth units. |
zenith_angle |
float
|
Characteristic angle of incoming stellar radiation, relative to the zenith [deg]. |
s0_factor |
float
|
Scale factor applies to incoming stellar radiation to represent planetary rotation. |
evolve |
bool
|
Allow the planet's orbit to evolve based on eccentricity tides? |
axial_period |
float | None
|
Planet initial day length [hours], will use orbital period if value is None. |
satellite |
bool
|
Model a satellite (moon) orbiting the planet and solve for its orbit? |
mass_sat |
float
|
Satellite mass [kg]; the default is the lunar mass. |
semimajoraxis_sat |
float
|
Satellite initial semi-major axis [m] |
module |
str | None
|
Select orbit module to use. Choices: 'none', 'dummy', 'lovepy'. |
Interior structure¶
Zalmoxis
¶
Parameters for Zalmoxis module.
Attributes:
| Name | Type | Description |
|---|---|---|
core_eos |
str
|
EOS for the core layer. Format: " |
mantle_eos |
str
|
EOS for the mantle layer. Format: " |
ice_layer_eos |
str or None
|
EOS for the ice/water layer (3-layer model). 'none' for 2-layer model (core + mantle only). Tabulated: "PALEOS:H2O", "Seager2007:H2O". Analytic: "Analytic:H2O". |
mushy_zone_factor |
float
|
Cryoscopic depression factor controlling the width of the mushy zone (partially molten region) in the PALEOS unified EOS. Defines the solidus as T_sol = T_liq * mushy_zone_factor. 1.0 = sharp phase boundary (no mushy zone). 0.8 = solidus at 80% of the liquidus temperature, roughly matching the Stixrude+2014 cryoscopic depression for MgSiO3. Must be in [0.7, 1.0]. Only applies to PALEOS unified EOS; ignored for WolfBower2018 and RTPress100TPa (which use explicit melting curve files). This factor is applied consistently across Zalmoxis (density interpolation), SPIDER (phase boundaries), and the VolatileProfile phi-blending. |
mantle_mass_fraction |
float
|
Fraction of the planet's interior mass corresponding to the mantle. Required for 3-layer models (with ice layer) and for T-dependent 2-layer models (WolfBower2018, RTPress100TPa) where it partitions mass between core and mantle layers. |
num_levels |
int
|
Number of Zalmoxis radius layers. |
solver_tol_outer |
float
|
Relative tolerance for mass convergence (outer loop). |
solver_tol_inner |
float
|
Relative tolerance for density convergence (inner loop). |
solver_max_iter_outer |
int
|
Max iterations for mass convergence (outer loop). |
solver_max_iter_inner |
int
|
Max iterations for density convergence (inner loop). |
lookup_nP |
int
|
Number of pressure points in SPIDER P-S tables generated from PALEOS. |
lookup_nS |
int
|
Number of entropy points in SPIDER P-S tables generated from PALEOS. |
outer_solver |
str
|
Outer mass-radius solver: 'newton' (recommended) or 'picard'. |
use_jax |
bool
|
Use the JAX backend for the structure solver. |
use_anderson |
bool
|
Anderson Type-II Picard acceleration on the density loop. |
newton_max_iter |
int
|
Maximum Newton iterations (outer_solver = 'newton'). |
newton_tol |
float
|
Newton convergence tolerance (outer_solver = 'newton'). |
newton_relative_tolerance |
float
|
Integrator relative tolerance for the Newton path. |
newton_absolute_tolerance |
float
|
Integrator absolute tolerance for the Newton path. |
update_dphi_abs |
float
|
Re-solve the structure when the global melt fraction changes by this absolute amount since the last solve. |
update_dtmagma_frac |
float
|
Re-solve the structure when T_magma changes by this fraction. |
update_dw_comp_abs |
float
|
Re-solve when the relative dissolved-volatile (H2O or H2) mantle mass fraction changes by this amount. |
update_interval |
float
|
Maximum time between structure updates [yr]; effectively disabled at the default. |
update_min_interval |
float
|
Minimum time between structure updates [yr]; prevents thrashing. |
update_stale_ceiling |
float
|
Time since the last successful re-solve after which a trigger refires [yr]; 0 disables. |
mesh_max_shift |
float
|
Maximum fractional radius shift per structure update. |
mesh_convergence_interval |
float
|
Convergence relaxation time after a mesh update [yr]. |
equilibrate_init |
bool
|
Equilibrate structure and composition before the main loop. |
equilibrate_max_iter |
int
|
Maximum equilibration iterations. |
equilibrate_tol |
float
|
Equilibration convergence tolerance. |
dry_mantle |
bool
|
Structure EOS assumes a dry mantle. Set False for melt-fraction-aware dissolved-volatile mixing in the mantle density (per-shell volatile profile); the dissolved mass then stays inside the interior mass target. |
global_miscibility |
bool
|
Enable the H2-silicate binodal-aware radial structure. True is rejected at config load: it requires the binodal handoff on the Zalmoxis side, which is not yet implemented. |
miscibility_max_iter |
int
|
Maximum miscibility iterations. |
miscibility_tol |
float
|
Miscibility convergence tolerance. |
Struct
¶
Planetary structure (mass, radius).
Attributes:
| Name | Type | Description |
|---|---|---|
core_frac |
float
|
Fraction of the planet's interior radius corresponding to the core. |
module |
str
|
Module for solving the planet's interior structure. Choices: 'dummy', 'spider', 'zalmoxis'. |
zalmoxis |
Zalmoxis or None
|
Zalmoxis parameters if module is 'zalmoxis'. |
core_frac_mode |
str
|
How core_frac is interpreted. 'radius': fraction of planet radius. 'mass': fraction of total planet mass. Only 'radius' is supported when module = 'spider'. The zalmoxis module always interprets core_frac as a mass fraction and ignores this flag (a warning is emitted at runtime if 'radius' is set with module = 'zalmoxis'). |
core_density |
float or str
|
Density of the planet's core [kg m-3]. Set to 'self' for self-consistent calculation by Zalmoxis (requires module = 'zalmoxis'). |
core_heatcap |
float or str
|
Specific heat capacity of the planet's core [J kg-1 K-1]. Set to 'self' for self-consistent calculation by Zalmoxis (requires module = 'zalmoxis'). |
melting_dir |
str
|
Melting curve folder name in FWL_DATA, for the SPIDER structure module. |
eos_dir |
str
|
EOS folder name in FWL_DATA, for the SPIDER structure module. |
valid_zalmoxis(instance, attribute, value)
¶
Validate Zalmoxis EOS format strings and reject unsupported miscibility options.
Source code in src/proteus/config/_struct.py
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | |
Magma ocean and planetary interior¶
Spider
¶
SPIDER-specific parameters.
solver_type is the SUNDIALS integrator choice.
tolerance_rel is a deprecated alias for the top-level
[interior_energetics].rtol; set rtol instead.
matprop_smooth_width sets the smoothing width for
material-property blending across the solidus/liquidus, read by
both SPIDER and Aragog.
Attributes:
| Name | Type | Description |
|---|---|---|
solver_type |
str
|
SUNDIALS integrator choice. Choices: 'adams', 'bdf'. |
tolerance_rel |
float
|
Deprecated alias for |
matprop_smooth_width |
float
|
Melt-fraction window width for smoothing material properties
across the solidus/liquidus. Passed to SPIDER as
|
tolerance_struct |
float
|
Absolute mass tolerance [kg] for the interior-radius secant solver. |
log_output |
bool
|
Write SPIDER solver log output. |
Aragog
¶
Aragog-specific parameters.
Attributes:
| Name | Type | Description |
|---|---|---|
mass_coordinates |
bool
|
Whether to use mass coordinates in the model. Default is True. Uses uniform spacing in mass coordinate space, giving larger cells at the surface where density is lower, matching SPIDER's mesh. |
backend |
str
|
ODE backend selector. Default 'jax'.
- 'jax' : CVODE with JAX-derived RHS and JAX analytic Jacobian
( |
atol_temperature_equivalent |
float
|
Effective temperature-scale absolute tolerance [K] for Aragog's CVODE integrator. Aragog's state variable is entropy (J/kg/K), but users think in Kelvin, so this is exposed as a temperature equivalent that Aragog converts internally via Cp/T. Default is 1e-8 K, matching SPIDER's atol=rtol=1e-8 setting; this tight tolerance eliminates the CVODE marginal-stability bifurcation at the first dt jump after equilibration. |
core_bc |
str
|
Core-mantle boundary condition mode. Default 'energy_balance'. Valid values: - 'quasi_steady': alpha-factor heat-flux partition; gives about -19% T_core offset vs SPIDER. - 'energy_balance': SPIDER bit-parity BC with dSdr_cmb as a new state variable (mirrors SPIDER bc.c:76-131). - 'gradient': gradient-based state with two boundary entropies as state variables. - 'bower2018': experimental, do not use for production. |
atol_temperature_equivalent = field(default=1e-08, validator=(gt(0)))
class-attribute
instance-attribute
¶
Effective temperature-scale absolute tolerance [K] for Aragog's ODE integrator. Default 1e-8 matches SPIDER's atol=rtol=1e-8 setting; this tight tolerance avoids a marginal-stability bifurcation at the first dt jump after equilibration.
phase_smoothing = field(default='tanh', validator=(in_(('tanh', 'cubic_hermite'))))
class-attribute
instance-attribute
¶
Phase-boundary smoothing for Jgrav and Jmix: 'tanh' (SPIDER parity) or 'cubic_hermite'.
solver_method = field(default='cvode', validator=(in_(('cvode', 'radau', 'bdf'))))
class-attribute
instance-attribute
¶
ODE solver: 'cvode' (SUNDIALS, SPIDER parity), 'radau' (scipy), 'bdf' (scipy).
scalar_gravity_override = field(default=False)
class-attribute
instance-attribute
¶
Scalar-gravity comparison knob. When True, the external mesh file that
Zalmoxis writes has its gravity column overwritten with a uniform scalar
(the surface value from hf_row['gravity']) before Aragog reads it, so
Aragog's per-node gravity path interpolates to that scalar everywhere.
False by default; set True only when running a paired scalar-gravity
comparison.
phi_step_cap = field(default=0.0, validator=_step_cap_valid)
class-attribute
instance-attribute
¶
Per-call melt-fraction step cap. When > 0 and any staggered cell is in or near the two-phase window at solve() entry, a CVODE root function (and the equivalent scipy event) returns control at the exact time the larger of the global mass-weighted |ΔΦ| and the maximum single-cell |Δφ| reaches this cap. The per-cell term bounds how far one deep cell may cross the mushy window in a single call, which removes the discontinuous core-temperature drop at crystallisation onset. Schema default 0.0, which the Aragog wrapper promotes to a non-zero default for the coupled zalmoxis interior stack; a positive value here overrides that. -1.0 is the single off sentinel that keeps the cap disabled even on zalmoxis; any other negative, NaN, or infinity is rejected at load.
temperature_step_cap = field(default=0.0, validator=_step_cap_valid)
class-attribute
instance-attribute
¶
Per-call per-cell temperature step cap [K]. Shares the same root function as phi_step_cap and fires on the maximum single-cell |ΔT| since solve() entry. It bounds the core-temperature drop on the solid adiabat just below the solidus, where the melt-fraction cap goes blind because a fully solid cell's melt fraction can no longer move. Schema default 0.0, which the Aragog wrapper promotes to a non-zero default for the coupled zalmoxis stack; a positive value overrides that. -1.0 is the single off sentinel that keeps the cap disabled even on zalmoxis; any other negative, NaN, or infinity is rejected at load.
entropy_step_cap = field(default=0.0, validator=_step_cap_valid)
class-attribute
instance-attribute
¶
Per-call per-cell entropy step cap [J/kg/K], in the native solver variable; same role as temperature_step_cap without an EOS lookup in the root function. Schema default 0.0, which the Aragog wrapper promotes to a non-zero default for the coupled zalmoxis stack; a positive value overrides that. -1.0 is the single off sentinel that keeps the cap disabled even on zalmoxis; any other negative, NaN, or infinity is rejected at load.
phase_boundary_entropy_margin = field(default=200.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Phase-boundary proximity band [J/kg/K] 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 across the boundary. This is a solver-accuracy control, not a cosmetic step-size setting: at the default it reproduces the fixed band and the converged trajectory is unchanged, but lowering it below the default can under-resolve a real phase crossing and shift the converged state, because CVODE's local error control can accept an over-large step across the near-discontinuous RHS. Keeping the default reproduces current behaviour, and modestly widening the band does not move a converged result because tighter steps only refine an adaptive integrator; but 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 (max_step = 1 yr, versus 100 yr otherwise) for the whole run and stalling it, so keep the band of order a few hundred J/kg/K. Default 200.0, matching Aragog's own default; a positive value is required (0 or negative is not a valid disabled state for a proximity band).
tolerance_struct = field(default=100.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Absolute mass tolerance [kg] for the secant solver in determine_interior_radius. Default 100 kg; pairs with Spider's matching field so both backends drive the same outer-loop convergence criterion.
InteriorBoundary
¶
Parameters for Boundary interior module. Default values taken from Schaefer et al. 2016 (https://iopscience.iop.org/article/10.3847/0004-637X/829/2/63/pdf).
Attributes:
| Name | Type | Description |
|---|---|---|
T_solidus |
float
|
Mantle solidus temperature [K]. |
T_liquidus |
float
|
Mantle liquidus temperature [K]. |
critical_rayleigh_number |
float
|
Critical Rayleigh number for onset of convection [-]. |
nusselt_exponent |
float
|
Nusselt-Rayleigh scaling exponent [-]. |
silicate_heat_capacity |
float
|
Silicate heat capacity [J/kg/K]. |
atm_heat_capacity_const |
bool
|
Always use fallback atmosphere heat capacity? |
atm_heat_capacity |
float
|
Used as fallback for atmosphere heat capacity when layer-specific value is not available [J/kg/K]. |
silicate_density |
float
|
Silicate density [kg/m^3]. Default taken from Fei et. al. 2021 (https://ui.adsabs.harvard.edu/abs/2021NatCo..12..876F). |
core_density |
float
|
Core density [kg/m^3]. |
thermal_conductivity |
float
|
Thermal conductivity [W/m/K]. |
thermal_diffusivity |
float
|
Thermal diffusivity [m^2/s]. |
thermal_expansivity |
float
|
Thermal expansivity [1/K]. |
viscosity_model |
int
|
Viscosity parameterisation model. Choices: 1 (constant), 2 (aggregate smooth transition), 3 (Arrhenius temperature-dependent). |
dynamic_viscosity |
float
|
Reference dynamic viscosity [Pa s] for Arrhenius solid mantle model. |
activation_energy |
float
|
Activation energy [J/mol] for Arrhenius solid mantle model. |
creep_parameter |
float
|
Creep parameter [-] for Arrhenius solid mantle model. |
viscosity_prefactor |
float
|
Viscosity prefactor [Pa s] for Vogel-Fulcher-Tammann magma ocean model. |
viscosity_activation_temp |
float
|
Activation temperature [K] for Vogel-Fulcher-Tammann magma ocean model. |
logging |
bool
|
Whether to create diagnostic CSV data files from boundary interior module. |
InteriorDummy
¶
Parameters for Dummy interior module.
Attributes:
| Name | Type | Description |
|---|---|---|
mantle_rho |
float
|
Mantle density [kg m-3] for the dummy density profile and the
fallback mantle-mass estimate. When the interior structure provides
the masses, the mantle mass is taken as |
mantle_cp |
float
|
Mantle specific heat capacity [J kg-1 K-1] |
mantle_tliq |
float
|
Mantle liquidus temperature [K] |
mantle_tsol |
float
|
Mantle solidus temperature [K] |
heat_internal |
float
|
Fixed internal heating rate (e.g. radiogenic) [W kg-1].
Tidal heating is handled separately via |
Interior
¶
Magma ocean model selection and parameters.
Attributes:
| Name | Type | Description |
|---|---|---|
grain_size |
float
|
Crystal settling grain size [m]. |
flux_guess |
float
|
Initial heat flux guess [W m-2]. When < 0 (default), computed automatically as sigma * T_magma^4. Set to a positive value to prescribe a specific initial flux. Set to 0 for zero initial flux. |
radio_tref |
float
|
Reference age for setting radioactive decay [Gyr]. |
radio_K |
float
|
Concentration (ppmw) of potassium-40 at reference age t=radio_tref. |
radio_U |
float
|
Concentration (ppmw) of uranium at reference age t=radio_tref. |
radio_Th |
float
|
Concentration (ppmw) of thorium-232 at reference age t=radio_tref. |
radio_Al |
float
|
Concentration (ppmw) of aluminium-26 at reference age t=radio_tref; 1.23 is the canonical early solar system value. |
radio_Fe |
float
|
Concentration (ppmw) of iron-60 at reference age t=radio_tref. |
heat_radiogenic |
bool
|
Include radiogenic heat production? |
heat_tidal |
bool
|
Include tidal heating? |
rfront_loc |
float
|
Centre of rheological transition in terms of melt fraction |
rfront_wid |
float
|
Width of rheological transition in terms of melt fraction |
num_levels |
int
|
Number of radial grid levels for the energetics domain. |
num_tolerance |
float
|
Deprecated alias for rtol; emits a DeprecationWarning when set. |
trans_conduction |
bool
|
Include conductive heat transfer. |
trans_convection |
bool
|
Include convective heat transfer (mixing length theory). |
trans_grav_sep |
bool
|
Include gravitational separation (Stokes settling). |
trans_mixing |
bool
|
Include the chemical mixing flux. |
mixing_length |
str
|
Mixing-length scale: 'nearest' (distance to nearest boundary) or 'constant' (a quarter of the mantle depth). |
kappah_floor |
float
|
Eddy diffusivity floor [m2 s-1]; prevents mixing-length transport from freezing out. |
tmagma_atol |
float
|
Maximum absolute change in T_magma per PROTEUS step [K]. |
tmagma_rtol |
float
|
Maximum relative change in T_magma per PROTEUS step. |
param_utbl |
bool
|
Enable the ultra-thin boundary layer parameterisation. |
param_utbl_const |
float
|
Ultra-thin boundary layer scaling constant [K-1]. |
surface_bc_mode |
str
|
Surface boundary condition for SPIDER/Aragog: 'flux' (prescribed F_atm from the atmosphere module) or 'grey_body' (native grey-body boundary condition computed inside the interior solver). |
const_properties |
bool
|
Enable constant-properties mode: bypass the EOS tables and use the analytical T(S) = T_ref * exp((S - S_ref) / Cp) relationship, for controlled parity tests. |
module |
str
|
Module for simulating the magma ocean. Choices: 'spider', 'aragog', 'dummy'. |
spider |
Spider
|
Parameters for running the SPIDER module. |
aragog |
Aragog
|
Parameters for running the aragog module. |
dummy |
Dummy
|
Parameters for running the dummy module. |
Notes
The melting_dir and eos_dir fields live on the parent
[interior_struct] section (class Struct in
config/_struct.py), not here. They are shared across SPIDER,
Aragog, and Zalmoxis and so belong with the structure config.
rtol = field(default=_TOL_UNSET, validator=_gt0_or_unset)
class-attribute
instance-attribute
¶
Relative numerical tolerance for the interior ODE solver. SPIDER: -ts_sundials_rtol (used internally via atol_sf scaling). Aragog: scipy solve_ivp rtol. The deprecated aliases num_tolerance and [interior_energetics.spider].tolerance_rel copy into this field. Resolves to 1e-10 when left unset.
atol = field(default=1e-10, validator=(gt(0)))
class-attribute
instance-attribute
¶
Absolute numerical tolerance for the interior ODE solver. SPIDER: -ts_sundials_atol (scaled by atol_sf at runtime). Aragog uses [interior_energetics.aragog].atol_temperature_equivalent instead because its state variable is entropy, not temperature, and a direct entropy-scale atol would be unintuitive to tune.
adams_williamson_rhos = field(default=4078.95095544, validator=(gt(0)))
class-attribute
instance-attribute
¶
Adams-Williamson surface density [kg/m^3]. Matches SPIDER -adams_williamson_rhos and Aragog _MeshParameters.surface_density.
adams_williamson_beta = field(default=1.1115348931000002e-07, validator=(gt(0)))
class-attribute
instance-attribute
¶
Adams-Williamson density gradient [1/m]. Matches SPIDER -adams_williamson_beta. Aragog derives its own via bulk modulus, so this value applies to SPIDER only.
adiabatic_bulk_modulus = field(default=260000000000.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Adiabatic bulk modulus [Pa] used by Aragog's Adams-Williamson EOS (_MeshParameters.adiabatic_bulk_modulus). SPIDER derives its own.
melt_log10visc = field(default=2.0)
class-attribute
instance-attribute
¶
log10 viscosity of molten silicate [Pa s]. Matches SPIDER -melt_log10visc (2.0 = 1e2 Pa s).
solid_log10visc = field(default=22.0)
class-attribute
instance-attribute
¶
log10 viscosity of solid silicate [Pa s]. Matches SPIDER -solid_log10visc (22.0 = 1e22 Pa s). Shared by SPIDER and Aragog so both apply the same solid-phase rheology; a mis-set value diverges both solvers' solid-phase rheology by the same factor.
melt_cond = field(default=4.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Thermal conductivity of molten silicate [W/m/K]. Matches SPIDER -melt_cond.
solid_cond = field(default=4.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Thermal conductivity of solid silicate [W/m/K]. Matches SPIDER -solid_cond.
eddy_diffusivity_thermal = field(default=1.0)
class-attribute
instance-attribute
¶
Multiplier on the internally-computed thermal eddy diffusivity. SPIDER: -eddy_diffusivity_thermal (1.0 default).
eddy_diffusivity_chemical = field(default=1.0)
class-attribute
instance-attribute
¶
Multiplier on the internally-computed chemical eddy diffusivity. SPIDER: -eddy_diffusivity_chemical (1.0 default).
const_rho = field(default=4000.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Constant density [kg/m3].
const_Cp = field(default=1000.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Constant heat capacity [J/kg/K].
const_alpha = field(default=1e-05, validator=(gt(0)))
class-attribute
instance-attribute
¶
Constant thermal expansivity [1/K].
const_cond = field(default=4.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Constant thermal conductivity [W/m/K].
const_log10visc = field(default=2.0)
class-attribute
instance-attribute
¶
Constant log10 dynamic viscosity [Pa.s].
const_T_ref = field(default=3500.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Reference temperature for T(S) = T_ref * exp((S-S_ref)/Cp) [K].
const_S_ref = field(default=3000.0)
class-attribute
instance-attribute
¶
Reference entropy for T(S) [J/kg/K]. No positivity constraint since entropy reference states can be zero or negative.
latent_heat_of_fusion = field(default=4000000.0, validator=(gt(0)))
class-attribute
instance-attribute
¶
Latent heat of fusion of silicate [J/kg]. Aragog uses this as a scalar in _PhaseMixedParameters. SPIDER derives it per-(P,S) from dS * T_fus via the EOS tables; the SPIDER derivation is more physically correct but this scalar is good to ~10% at Earth-mantle conditions. TODO: switch Aragog to SPIDER's derivation once the EntropyEOS exposes a dS_fus(P) method.
phase_transition_width = field(default=0.1, validator=(gt(0), lt(1)))
class-attribute
instance-attribute
¶
Width [fraction] of the mushy-zone transition in Aragog's
_PhaseMixedParameters. Sets the width of the phase boundary in
Aragog's mixed-phase blending (viscosity, thermal conductivity
etc.). Distinct from [interior_energetics.spider].matprop_smooth_width
which is SPIDER's analogous knob for its own solver.
core_tfac_avg = field(default=1.147, validator=(gt(0)))
class-attribute
instance-attribute
¶
Core T_avg / T_cmb ratio from adiabatic gradient (Bower+2018 Table 2). Used by Aragog's _BoundaryConditionsParameters.tfac_core_avg. SPIDER derives its own internally.
write_flux_diagnostics = field(default=False)
class-attribute
instance-attribute
¶
When True, Aragog's NetCDF output includes per-component flux decomposition (Jcond_b, Jconv_b, Jgrav_b, Jmix_b) and basic-node state variables (dSdr_b, eddy_diff_b, phi_basic_b, T/cp/rho_basic_b). Adds ~10 fields per snapshot; default False keeps output compact. Useful for diagnosing T_core and CMB-closure behaviour near phi=0. SPIDER path ignores this flag (uses SPIDER's own JSON output which already includes Jcond_b, Jconv_b, Jgrav_b, Jmix_b).
valid_spider(instance, attribute, value)
¶
SPIDER requires at least one energy transport term to be enabled.
Source code in src/proteus/config/_interior.py
50 51 52 53 54 55 56 57 58 59 60 61 62 | |
valid_interiorboundary(instance, attribute, value)
¶
Validate Boundary backend's solidus/liquidus ordering.
Only fires when module == 'boundary'; otherwise the subclass is
constructed with defaults and never exercised.
Source code in src/proteus/config/_interior.py
65 66 67 68 69 70 71 72 73 74 75 76 77 | |
valid_aragog(instance, attribute, value)
¶
Aragog requires at least one energy transport term to be enabled.
Source code in src/proteus/config/_interior.py
136 137 138 139 140 141 142 143 144 145 146 147 148 | |
valid_interiordummy(instance, attribute, value)
¶
Dummy interior requires the liquidus to sit above the solidus.
Source code in src/proteus/config/_interior.py
279 280 281 282 283 284 285 286 287 288 289 | |
Atmosphere climate¶
Agni
¶
AGNI atmosphere module (AGNI-specific parameters only).
Grid, spectral, and pressure parameters are shared with JANUS and live on the parent AtmosClim class.
Attributes:
| Name | Type | Description |
|---|---|---|
verbosity |
int
|
Logging and output verbosity for agni (0:none, 1:info, 2:debug). |
surf_material |
str
|
Surface scattering material file. Set to 'greybody' to use surf_greyalbedo. |
chemistry |
str | None
|
Atmospheric chemistry treatment. Choices: 'none', 'eq' (FastChem). |
solve_energy |
bool
|
Solve for an energy-conserving atmosphere solution. |
solution_atol |
float
|
Absolute tolerance on the atmosphere solution [W/m2]. |
solution_rtol |
float
|
Relative tolerance on the atmosphere solution. |
surf_roughness |
float
|
Characteristic surface roughness scale [metres]. |
surf_windspeed |
float
|
Characteristic surface wind speed [m/s]. |
phs_timescale |
float
|
Relaxation timescale for phase changes (condensation/evaporation) [seconds]. |
evap_efficiency |
float
|
Efficiency of raindrop re-evaporation (0 to 1). |
rainout |
bool
|
Enable volatile condensation and evaporation in the atmosphere. |
oceans |
bool
|
Enable volatile ocean formation at the surface. |
latent_heat |
bool
|
Account for latent heat from condense/evap when solving temperature profile. Requires |
convection |
bool
|
Account for convective heat transport, using MLT. |
conduction |
bool
|
Account for conductive heat transport, using Fourier's law. |
sens_heat |
bool
|
Include sensible heat flux at surface |
real_gas |
bool
|
Use real gas equations of state in atmosphere, where possible. |
thermo_functions |
bool
|
Use temperature-dependent thermodynamic properties. |
psurf_thresh |
float
|
Use the transparent-atmosphere solver when P_surf is less than this value [bar]. |
dx_max |
float
|
Nominal maximum step size to T(p) during the solver process, although this is dynamic. |
dx_max_ini |
float
|
Initial maximum step size to T(p) when AGNI is called in the first few PROTEUS loops. |
max_steps |
int
|
Maximum number of iterations before giving up. |
perturb_all |
bool
|
Recalculate entire jacobian matrix at every iteration? |
mlt_criterion |
str
|
Convection criterion. Options: (l)edoux, (s)chwarzschild. |
fastchem_floor |
float
|
Minimum temperature allowed to be sent to FC |
fastchem_maxiter_chem |
int
|
Maximum FC iterations (chemistry) |
fastchem_maxiter_solv |
int
|
Maximum FC iterations (internal solver) |
fastchem_xtol_chem |
float
|
FC solver tolerance (chemistry) |
fastchem_xtol_elem |
float
|
FC solver tolerance (elemental) |
ini_profile |
str
|
Shape of initial T(p) guess: 'loglinear', 'isothermal', 'dry_adiabat', 'analytic'. |
ls_default |
int
|
Default linesearch method. 0: disabled, 1: goldensection, 2: backtracking. |
fdo |
int
|
Numerical order of finite-difference for jacobian. 2 or 4. |
spectral_file |
str | None
|
Path to AGNI spectral file, or 'greygas' to enable the grey-gas RT scheme. If None, will use atmos_clim.spectral_group and atmos_clim.spectral_bands. |
grey_opacity_lw |
float
|
Grey longwave opacity [m2 kg-1], used when |
grey_opacity_sw |
float
|
Grey shortwave opacity [m2 kg-1], used when |
Janus
¶
JANUS atmosphere module (JANUS-specific parameters only).
Grid, spectral, and pressure parameters are shared with AGNI and live on the parent AtmosClim class.
Attributes:
| Name | Type | Description |
|---|---|---|
F_atm_bc |
int
|
Outgoing flux boundary: 0 (TOA) or 1 (surface). |
tropopause |
str | None
|
Tropopause scheme. Choices: 'none', 'skin', 'dynamic'. |
cloud_alpha |
float
|
Condensate retention fraction (0 = full rainout, 1 = fully retained). |
tmp_maximum |
float
|
Solver temperature ceiling [K]. |
Dummy
¶
Dummy atmosphere module.
A parametrised model of the atmosphere designed for debugging. The greenhouse effect
is captured by gamma which produces a transparent atmosphere when 0, and a completely
opaque atmosphere when 1. The height of the atmosphere equals the scale height times
the height_factor variable.
When fixed_flux is set to a positive value, the dummy module bypasses the
grey-body calculation entirely and returns that constant flux as F_atm at every
coupling step. This is useful for controlled parity comparisons between interior
solvers where the surface BC must be identical.
Attributes:
| Name | Type | Description |
|---|---|---|
gamma |
float
|
Atmosphere opacity factor between 0 and 1. |
height_factor |
float
|
A multiplying factor applied to the ideal-gas scale height. |
fixed_flux |
float
|
If > 0, return this constant flux [W/m2] instead of computing it. Default -1 (disabled, use the grey-body calculation). |
AtmosClim
¶
Atmosphere parameters, model selection.
Attributes:
| Name | Type | Description |
|---|---|---|
module |
str
|
Which atmosphere module to use. Choices: 'agni', 'janus', 'dummy'. |
spectral_group |
str
|
Spectral file group defining gas opacities. See https://proteus-framework.org/SOCRATES/Reference/proteus_spectral_file_reference.html |
spectral_bands |
str
|
Number of wavenumber bands in k-table. |
num_levels |
int
|
Number of vertical atmosphere levels. |
p_top |
float
|
Top-of-atmosphere pressure [bar]. |
p_obs |
float
|
Observation pressure level [bar] (transit radius). |
overlap_method |
str
|
Gas overlap method. Choices: 'ro', 'rorr', 'ee'. |
surface_d |
float
|
Conductive skin thickness [m]. |
surface_k |
float
|
Conductive skin thermal conductivity [W m-1 K-1]. |
aerosols_enabled |
bool
|
Enable aerosol radiative effects. |
cloud_enabled |
bool
|
Enable water cloud radiative effects (AGNI, JANUS only). |
surf_state |
str
|
Surface energy balance scheme. Choices: 'mixed_layer', 'fixed', 'skin'. |
surf_greyalbedo |
float
|
Grey surface albedo. |
albedo_pl |
float
|
Planetary bond albedo (0 to 1). |
cloud_alpha |
float
|
Condensate retention fraction (0 = full rainout, 1 = fully retained). |
rayleigh |
bool
|
Include Rayleigh scattering (AGNI, JANUS only). |
tmp_minimum |
float
|
Minimum temperature throughout the atmosphere [K] (AGNI, JANUS only). |
agni |
Agni
|
Config parameters for AGNI atmosphere module. |
janus |
Janus
|
Config parameters for JANUS atmosphere module. |
dummy |
Dummy
|
Config parameters for dummy atmosphere module. |
surf_state_int
property
¶
Return integer surface boundary condition for agni.
warn_if_dummy(instance, attribute, value)
¶
Reject enabling this option when the dummy atmos_clim module is selected.
Source code in src/proteus/config/_atmos_clim.py
11 12 13 14 | |
valid_rayleigh(instance, attribute, value)
¶
Reject Rayleigh scattering with the dummy module or AGNI in grey-gas mode.
Source code in src/proteus/config/_atmos_clim.py
17 18 19 20 21 22 23 24 25 26 | |
valid_aerosols_enabled(instance, attribute, value)
¶
Aerosol scattering needs band-resolved RT.
Reuses the dummy guard from warn_if_dummy and rejects the
AGNI grey-gas combination: grey gas has no spectral bands, so a
Mie-scattering aerosol library is either silently ignored or
crashes on the Julia side. The check fires only when aerosols
are enabled (value is True).
Source code in src/proteus/config/_atmos_clim.py
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | |
valid_agni(instance, attribute, value)
¶
Validate AGNI settings: pressure ordering, surface-state support, rainout, spectral file.
Source code in src/proteus/config/_atmos_clim.py
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | |
valid_janus(instance, attribute, value)
¶
Validate JANUS settings: spectral file selection and temperature-bound ordering.
Source code in src/proteus/config/_atmos_clim.py
263 264 265 266 267 268 269 270 271 272 273 274 275 276 | |
Atmospheric escape¶
Zephyrus
¶
EscapeDummy
¶
EscapeBoreas
¶
BOREAS escape module.
Attributes:
| Name | Type | Description |
|---|---|---|
fractionate |
bool
|
Enable elemental fractionation in outflow? |
efficiency |
float
|
Energy efficiency factor. |
sigma_H |
float
|
Absorption cross-section of H in XUV [cm2] |
sigma_O |
float
|
Absorption cross-section of O in XUV [cm2] |
sigma_C |
float
|
Absorption cross-section of C in XUV [cm2] |
sigma_N |
float
|
Absorption cross-section of N in XUV [cm2] |
sigma_S |
float
|
Absorption cross-section of S in XUV [cm2] |
kappa_H2O |
float
|
Grey H2O opacity in IR [cm2 g-1] |
kappa_H2 |
float
|
Grey H2 opacity in IR [cm2 g-1] |
kappa_O2 |
float
|
Grey O2 opacity in IR [cm2 g-1] |
kappa_CO2 |
float
|
Grey CO2 opacity in IR [cm2 g-1] |
kappa_CO |
float
|
Grey CO opacity in IR [cm2 g-1] |
kappa_CH4 |
float
|
Grey CH4 opacity in IR [cm2 g-1] |
kappa_N2 |
float
|
Grey N2 opacity in IR [cm2 g-1] |
kappa_NH3 |
float
|
Grey NH3 opacity in IR [cm2 g-1] |
kappa_H2S |
float
|
Grey H2S opacity in IR [cm2 g-1] |
kappa_SO2 |
float
|
Grey SO2 opacity in IR [cm2 g-1] |
kappa_S2 |
float
|
Grey S2 opacity in IR [cm2 g-1] |
Escape
¶
Escape parameters and module selection.
Attributes:
| Name | Type | Description |
|---|---|---|
reservoir |
str
|
Escaping composition when not doing fractionation. Choices: bulk, outgas, pxuv. |
module |
str | None
|
Escape module to use. Choices: None, "dummy", "zephyrus", "boreas". |
zephyrus |
Zephyrus
|
Parameters for zephyrus module. |
dummy |
EscapeDummy
|
Parameters for dummy escape module. |
boreas |
EscapeBoreas
|
Parameters for BOREAS escape module. |
hill_clamp |
bool
|
Limit the XUV level to the Hill radius. Gas beyond the Hill radius is not bound to the planet, so an XUV radius outside it sizes the escape cross-section with material the planet does not hold. |
hill_clamp_frac |
float
|
Fraction of the Hill radius used as that limit, when hill_clamp is enabled. |
step_max_frac |
float
|
Largest share of the escapable reservoir a single step may remove. The bulk rate is sized without reference to how much mass remains, so over a long step it can ask for many times the reservoir. The default guards reduced compositions rather than limiting the grid.
Measured on production cases, every one at IW-5 asks for more than it at
some step and the worst for eighty times the reservoir, while cases from
IW-1 to IW+5 stay under a thousandth of it and never meet the cap at
all. A larger value lets one step take more of what is left, so a
reduced case draws its reservoir down in fewer and coarser steps. The
cap keeps binding at every setting in this range, because an unchanged
rate settles at |
step_dt_floor_frac |
float
|
How far below |
xuv_defined_by_radius
property
¶
Does Rxuv define the escape level?
If the escape level is defined by constant Pxuv, then return False. This depends on the escape module used. BOREAS calculates both Pxuv and Rxuv, while the default assumes that Pxuv is constant, which is used to find Rxuv from the r(p) profile.
valid_zephyrus(instance, attribute, value)
¶
Validate ZEPHYRUS settings: Pxuv within (0, 10] bar and efficiency within [0, 1].
Source code in src/proteus/config/_escape.py
9 10 11 12 13 14 15 16 17 18 19 20 | |
valid_escapedummy(instance, attribute, value)
¶
Dummy escape requires a non-negative escape rate.
Source code in src/proteus/config/_escape.py
42 43 44 45 46 47 48 49 | |
valid_escapeboreas(instance, attribute, value)
¶
Hook for BOREAS cross-field checks; no active constraints at present.
Source code in src/proteus/config/_escape.py
65 66 67 68 | |
valid_reservoir(instance, attribute, value)
¶
Escape reservoir must be one of 'bulk', 'outgas', or 'pxuv'.
Source code in src/proteus/config/_escape.py
137 138 139 140 141 | |
Atmospheric chemistry¶
Vulcan
¶
VULCAN chemistry module.
Attributes:
| Name | Type | Description |
|---|---|---|
clip_fl |
float
|
Stellar flux floor [ergs cm-2 s-1 nm-1]. |
clip_vmr |
float
|
Neglect species with surface VMR < clip_vmr. |
make_funs |
bool
|
Make functions from chemical network. |
ini_mix |
str
|
Initial mixing ratios. Options: profile, outgas. |
fix_surf |
bool
|
Fix the surface mixing ratios based on outgassed composition. |
network |
str
|
Chemical network. Options: CHO, NCHO, SNCHO. |
save_frames |
bool
|
Save simulation state as plots. |
yconv_cri |
float
|
Steady state - max change in mixing ratio over test period |
slope_cri |
float
|
Steady state - max rate of change of mixing ratio over test period |
AtmosChem
¶
Atmosphere chemistry parameters, model selection.
Attributes:
| Name | Type | Description |
|---|---|---|
module |
str
|
Chemistry module |
vulcan |
Vulcan
|
VULCAN module options |
when |
str
|
When to run the chemistry module. Options: manually, offline, online. |
photo_on |
bool
|
Use photochemistry. |
Kzz_on |
bool
|
Use Kzz. |
Kzz_const |
float
|
Constant Kzz value [cm2/s]. If 'none', Kzz is read from NetCDF file. |
moldiff_on |
bool
|
Use molecular diffusion. |
updraft_const |
float
|
Updraft velocity [cm/s]. |
Volatile outgassing¶
Calliope
¶
Module parameters for Calliope.
Attributes:
| Name | Type | Description |
|---|---|---|
include_H2O |
bool
|
If True, include H2O. |
include_CO2 |
bool
|
If True, include CO2. |
include_N2 |
bool
|
If True, include N2. |
include_S2 |
bool
|
If True, include S2. |
include_SO2 |
bool
|
If True, include SO2. |
include_H2S |
bool
|
If True, include H2S. |
include_NH3 |
bool
|
If True, include NH3. |
include_H2 |
bool
|
If True, include H2. |
include_CH4 |
bool
|
If True, include CH4. |
include_CO |
bool
|
If True, include CO. |
include_He |
bool
|
If True, include He (noble gas; budget set in planet.elements). |
include_Ne |
bool
|
If True, include Ne (noble gas; budget set in planet.elements). |
include_Ar |
bool
|
If True, include Ar (noble gas; budget set in planet.elements). |
include_Kr |
bool
|
If True, include Kr (noble gas; budget set in planet.elements). |
include_Xe |
bool
|
If True, include Xe (noble gas; budget set in planet.elements). |
solubility |
bool
|
Enable solubility of volatiles into melt. |
nguess |
int
|
Maximum number of initial-guess samples for the CALLIOPE equilibrium solver. Default 1000. |
nsolve |
int
|
Maximum number of iterations of the CALLIOPE equilibrium solver per call. Default 3000. |
p_guess_max |
float
|
Upper bound [bar] of the CALLIOPE Monte-Carlo cold-start surface- pressure draw. Sets where the cold start samples, so raising it helps the solver find a high-pressure (e.g. sub-Neptune) basin faster. It does NOT raise the maximum pressure the solver can accept (CALLIOPE's fixed 1e7 bar box), so it is bounded to (0, 1e7]. Default 1e5. |
is_included(vol)
¶
Helper method for getting flag if vol is included in outgassing.
Source code in src/proteus/config/_outgas.py
110 111 112 | |
Atmodeller
¶
Module parameters for Atmodeller (Bower+2025, ApJ 995:59).
JAX-based volatile partitioning with real gas EOS, non-ideal solubility laws, and condensation. Replaces CALLIOPE for thermodynamically consistent magma-atmosphere equilibrium.
Attributes:
| Name | Type | Description |
|---|---|---|
solver_mode |
str
|
Root-finding mode: 'robust' (slower compile, better convergence) or 'basic' (faster compile, less robust). |
solver_max_steps |
int
|
Maximum iterations for the root-finder. |
solver_multistart |
int
|
Number of random restarts for the root-finder. |
include_condensates |
bool
|
Enable condensate phases (graphite, etc.) in the equilibrium. |
solubility_H2O |
str
|
Solubility law for H2O. See atmodeller.solubility.library. |
solubility_CO2 |
str
|
Solubility law for CO2. |
solubility_H2 |
str
|
Solubility law for H2. |
solubility_N2 |
str
|
Solubility law for N2. |
solubility_S2 |
str
|
Solubility law for S2. |
solubility_CO |
str
|
Solubility law for CO. 'none' = no solubility. |
solubility_CH4 |
str
|
Solubility law for CH4. 'none' = no solubility. |
eos_H2O |
str
|
Real gas EOS for H2O. 'none' = ideal gas. |
eos_CO2 |
str
|
Real gas EOS for CO2. 'none' = ideal gas. |
eos_H2 |
str
|
Real gas EOS for H2. 'none' = ideal gas. |
eos_CH4 |
str
|
Real gas EOS for CH4. 'none' = ideal gas. |
eos_CO |
str
|
Real gas EOS for CO. 'none' = ideal gas. |
Lavatmos
¶
Module parameters for LavAtmos rock vapourisation.
Attributes:
| Name | Type | Description |
|---|---|---|
T_min |
float
|
Minimum surface temperature [K] used by LavAtmos. |
melt_comp_name |
str
|
Name of the melt composition file (without extension). |
P_melt |
float
|
Pressure used for melt activities [bar]. |
xatol |
float
|
Absolute tolerance for LavAtmos fO2 solve. |
fO2_buffer_model |
str
|
IW buffer model used for LavAtmos fO2 solve. One of 'oneill', 'fischer'. |
Outgas
¶
Outgassing parameters (fO2) and included volatiles.
Attributes:
| Name | Type | Description |
|---|---|---|
module |
str
|
Outgassing module to be used. Choices: 'calliope', 'atmodeller', 'dummy'. |
fO2_shift_IW |
float
|
Oxygen fugacity relative to Iron-Wustite [log10 units]. |
mass_thresh |
float
|
Minimum threshold for element mass [kg]. Inventories below this are set to zero. |
h2_binodal |
bool
|
Enable binodal-controlled H2 partitioning between atmosphere and magma ocean using the Rogers+2025 H2-MgSiO3 miscibility model. |
T_floor |
float
|
Temperature floor [K]. The outgassing temperature is clamped to this value from below before the chemistry solve. |
solver_rtol |
float
|
Relative tolerance for the volatile equilibrium solver. |
solver_atol |
float
|
Absolute tolerance for the volatile equilibrium solver. |
calliope |
Calliope
|
Parameters for CALLIOPE module. |
atmodeller |
Atmodeller
|
Parameters for atmodeller module. |
vapourise |
bool
|
Enable rock vapourisation via LavAtmos/ThermoEngineLite. Requires
|
lavatmos |
Lavatmos
|
Parameters for the LavAtmos rock-vapour module. |
Elemental delivery and accretion¶
Synthetic observations¶
PetitRADTRANS
¶
Parameters for the petitRADTRANS module.
Attributes:
| Name | Type | Description |
|---|---|---|
line_opacity_mode |
str
|
Opacity treatment: 'c-k' (correlated-k) or 'lbl' (line-by-line). |
include_rayleigh |
bool
|
Include Rayleigh scattering contributions. |
include_cia |
bool
|
Include collision-induced absorption contributions. |
silent |
bool
|
Suppress petitRADTRANS stdout/stderr during Radtrans initialization. |
Note
Input data is discovered at runtime from dirs['fwl']/prt/input_data, where dirs['fwl'] is populated from the FWL_DATA environment variable during PROTEUS startup.
Observe
¶
Synthetic observations.
Attributes:
| Name | Type | Description |
|---|---|---|
module |
str
|
Module to use for calculating synthetic spectra. |
clip_vmr |
float
|
Minimum VMR to include a species in radiative transfer. |
reference_pressure |
float
|
Reference pressure for synthetic spectrum generation [bar]. |
source |
str
|
Composition source selection: 'all', 'outgas', 'profile', or 'offchem'. |
spectrum_type |
str
|
Synthetic spectrum products to compute: 'both', 'transit', or 'eclipse'. |
remove_one_gas |
bool
|
If True, generate additional leave-one-out spectra with each gas removed. |
For developers: adding a new parameter
So, you are developing a new model and want to add some parameters? Follow these steps:
- Decide on a good parameter name (e.g.
my_star_var), and under which section to place it (e.g.star). Add the new variable to the config submodule. - Add the type for your variable, e.g.
float,int,str. You can also add complex types, please check the code for inspiration. - Add a validator!
If your variable has a maximum value (e.g. 10), you can add a validator to make sure
that any values above 10 are rejected:
my_star_var: float = field(validator=attrs.validators.le(10)) - Add a description for your new variable under
Attributesin the docstring. The documentation uses the description to generate this documentation. - Update the example input configs. Proteus checks tests all input configs in this directory are valid.
- Use your parameter in your code, i.e.:
config.star.my_star_var
class Star:
"""Stellar parameters.
Attributes
----------
my_star_var: float
Star variable, must be 10 or lower!
"""
my_star_var: float = field(validator=attrs.validators.le(10))
Proteus uses attrs for its parameter handling. Please see the examples for more information how to work with attrs.