Repository navigation
Radially resolved evolution of fO2 through ferric/ferrous iron tracking #653
Description
Feature description
Currently, PROTEUS assumes a prescribed oxygen fugacity (fO₂) at the surface when computing volatile speciation and atmospheric composition. However, in reality the redox state of the mantle evolves during magma ocean solidification due to several processes. In this implementation we focus specifically on the evolution of fO₂ driven by the partitioning of ferric iron (Fe³⁺) between melt and crystallizing solid phases.
This feature introduces self-consistent tracking of the Fe³⁺/Fe²⁺ ratio in the mantle as a function of time and radius, from which the corresponding fO₂ can be derived using an experimentally calibrated relation, based on Schaefer et al. (2024) .This will allow the computation of a radial fO₂ profile at every timestep. In particular, the surface fO₂ can then be passed to the outgassing module (CALLIOPE) to determine gas speciation and atmospheric composition.
Implementing this capability will allow PROTEUS to self-consistently couple interior redox evolution, crystallization, and atmospheric chemistry.
Preferred solution
The proposed implementation follows the formulation described in Schaefer et al. (2024). In that work, oxygen fugacity is computed from the Fe³⁺/Fe²⁺ ratio in the mantle using an experimentally calibrated relation for BSE (Equation 13). The key requirement is therefore to track the evolution of ferric iron (Fe³⁺) during crystallization. In Schaefer et al. (2024), this is done using a chemical fractional crystallization model, where the partitioning of ferric iron between melt and specific mineral phases is explicitly simulated.
In contrast, SPIDER does not explicitly simulate chemical differentiation between mineral phases. Instead, it represents fractional crystallization through the thermal evolution of the magma ocean, where parameters such as grain size control the crystallization regime and influence energy transport. As a result, SPIDER determines how much solid forms but does not track which specific minerals crystallize. Therefore, rather than reproducing a full chemical crystallization model, we adopt a simplified approach that links ferric iron partitioning to the amount of solid produced by SPIDER.
The proposed approximation is:
-
Track Fe³⁺ and Fe²⁺ in the mantle as tracers in each radial cell.
-
When SPIDER forms crystals, redistribute Fe³⁺ between melt and solids using ferric iron partition coefficients.
Because mineralogy is not explicitly tracked, assume that the crystallizing phases correspond to MgSiO₃ minerals represented by the current EOS. As a first-order approximation:
*At high pressures, crystallizing phases are assumed to behave like Bridgmanite.
*At lower pressures, they can be approximated as enstatite-like MgSiO₃ phases.
The specific mineral phase is therefore approximated using pressure cutoffs, while the thermodynamic structure remains consistent with the MgSiO₃ mantle EOS already used in PROTEUS. This provides a radial fO₂ profile throughout the mantle and a self-consistent surface fO₂ that can be used by the in/outgassing module
Additional information
The original MATLAB code is open source and available here.
This issue is a sub-issue from #289 which has as a parent issue #57
I will start implementing this approach in the next couple of weeks :)
Relevant people
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsNext Up
Activity
nichollsh commentedon Mar 9, 2026
Very cool. Excited to see this in action!
Regarding this point:
I previously made a related issue for this topic, here #432
timlichtenberg commentedon Mar 9, 2026
Sounds like a good plan to me!
nichollsh commentedon Apr 13, 2026
Following discussion today: we need to think about how to track these variables in PROTEUS.
Since this approach presumably conserves oxygen, we will need to incorporate new config options for inputting the oxygen budget.
The helpfile will need to store new variables representing fO2. This calculation resolves fO2 profiles with depth, so the helpfile could store surface and bulk values as separate variables. It could also (or alternatively) store Fe2+/Fe3+ ratios.
Add planet.fO2_source enum and gate the IC oxygen-budget check on it
timlichtenberg commentedon Oct 6, 2026
Issue is being worked on in PR/branch #948. Issues with metal saturation. Crystallisation redox evolution works well. Updates in #948.
planetmariana commentedon Oct 13, 2026
PR #38 adds the Hirschmann (2021) iron–wüstite buffer and makes it the default IW buffer in the code (DEFAULT_FO2_MODEL = 'hirschmann'). That PR only touches the code and tests. The docs and tutorials still describe Fischer (2011) as the default and quote numbers computed with it, so an issue needs to be opened on CALLIOPE to track updating them in a follow-up.
To reproduce Schaefer et al. (2024) in PR/branch #948 qualitatively, we will take the FeO (Fe²⁺) partition coefficients of bridgmanite and pyroxene from their Fe–Mg exchange model in place of the bulk value of 0.85, so that D(Fe³⁺) exceeds D(Fe²⁺) and the melt Fe³⁺/FeT falls during lower-mantle crystallization, as in Schaefer models.