Skip to content

Model overview

CALLIOPE is a 0-D equilibrium outgassing solver for the magma-ocean atmosphere coupling. It treats the silicate mantle and the overlying gas-phase atmosphere as a single thermodynamic system in equilibrium at the surface, and asks: for a given total elemental inventory and a given magma-ocean state, what surface partial pressures and dissolved-volatile masses simultaneously satisfy (i) gas-phase chemical equilibrium, (ii) gas-melt solubility equilibrium, and (iii) elemental mass conservation?

This page summarises the model assumptions, the variables it solves for, and how it relates to the upstream papers (Bower et al. 2019, 2022; Nicholls et al. 2024). Each component has its own dedicated page.

What is in the model

  • Eleven gas-phase species (calliope.constants.volatile_species): H\(_2\)O, CO\(_2\), O\(_2\), H\(_2\), CH\(_4\), CO, N\(_2\), S\(_2\), SO\(_2\), H\(_2\)S, NH\(_3\).
  • Five elements: H, C, N, S as freely solved; O as a derived quantity set by the oxygen-fugacity buffer.
  • Six equilibrium reactions (gas-phase, surface temperature):

    Reaction Source
    \(\mathrm{H_2O} \rightleftharpoons \mathrm{H_2} + \tfrac{1}{2}\,\mathrm{O_2}\) JANAF (janaf_H2) and Schaefer & Fegley 2017 (schaefer_H)
    \(\mathrm{CO_2} \rightleftharpoons \mathrm{CO} + \tfrac{1}{2}\,\mathrm{O_2}\) JANAF (janaf_CO) and Schaefer & Fegley 2017 (schaefer_C)
    \(\mathrm{CO_2} + 2\,\mathrm{H_2} \rightleftharpoons \mathrm{CH_4} + \mathrm{O_2}\) Schaefer & Fegley 2017 (schaefer_CH4)
    \(\tfrac{1}{2}\,\mathrm{S_2} + \mathrm{O_2} \rightleftharpoons \mathrm{SO_2}\) JANAF, doubled form (janaf_SO2)
    \(\tfrac{1}{2}\,\mathrm{S_2} + \mathrm{H_2} \rightleftharpoons \mathrm{H_2S}\) JANAF, doubled form (janaf_H2S)
    \(\tfrac{1}{2}\,\mathrm{N_2} + \tfrac{3}{2}\,\mathrm{H_2} \rightleftharpoons \mathrm{NH_3}\) JANAF, doubled form (janaf_NH3)
  • One oxygen-fugacity buffer: O'Neill & Eggins (2002) iron-wΓΌstite (default), or Fischer et al. (2011) IW. The model takes a user-prescribed shift \(\Delta\mathrm{IW}\) that sets \(\log_{10} f_{\mathrm{O}_2}\) relative to the buffer; this is not solved for, it parameterises the redox state of the magma ocean.

  • One solubility law per species with multiple alternative compositions (peridotite, basalt, lunar glass, anorthite-diopside) selectable via constructor argument.

What is not in the model

  • No interior structure: gravity, radius, mantle mass come in as scalar inputs. Use Zalmoxis for these.
  • No interior thermal evolution: \(T_\mathrm{magma}\) and \(\Phi_\mathrm{global}\) come in as scalars. Use Aragog or SPIDER.
  • No radiative transfer: surface partial pressures come out, optical depths and surface temperature come from AGNI or JANUS.
  • No atmospheric escape: per-iteration mass loss is computed by the PROTEUS escape module (ZEPHYRUS).
  • No solid-phase partitioning: dissolved-mass fields are written into _kg_solid slots that always read 0.0; CALLIOPE only resolves melt and gas reservoirs. The PROTEUS atmosphere modules handle solid-phase trapping if any.
  • No real-gas EOS: all species are treated as ideal gases, so partial pressure \(\equiv\) fugacity. For non-ideal real-gas effects use atmodeller (Bower et al. 2025).
  • No condensation: every species is in the gas phase. Condensation chemistry happens in AGNI / JANUS.

Mathematical statement

CALLIOPE assembles four mass-conservation equations, one per solved element. Each equation has the structure

\[ \underbrace{m_e^{\mathrm{atm}}(p_{\mathrm{H_2O}}, p_{\mathrm{CO_2}}, p_{\mathrm{N_2}}, p_{\mathrm{S_2}})}_{\text{Bower 2019 Eq. 2 summed over all species}} + \underbrace{m_e^{\mathrm{melt}}(p_{\mathrm{H_2O}}, p_{\mathrm{CO_2}}, p_{\mathrm{N_2}}, p_{\mathrm{S_2}})}_{\text{Henry's law summed over all species}} = m_e^{\mathrm{target}}, \quad e \in \{H, C, N, S\} \]

The four primary partial pressures \(p_\mathrm{H_2O}\), \(p_\mathrm{CO_2}\), \(p_\mathrm{N_2}\), \(p_\mathrm{S_2}\) are the unknowns. The seven secondary partial pressures are not independent: they are algebraic functions of the primaries via the six equilibrium constants, evaluated at \(T = T_\mathrm{magma}\) and \(\log_{10} f_{\mathrm{O}_2} = \log_{10} f_{\mathrm{O}_2}^\mathrm{IW}(T) + \Delta\mathrm{IW}\). The system is therefore \(4 \times 4\), which scipy.optimize.fsolve solves with the Powell hybrid method.

The four pieces of physics decompose cleanly:

Component Page Implementation
Speciation tree (primary \(\to\) secondary) Equilibrium chemistry chemistry.ModifiedKeq, solve.get_partial_pressures
Atmospheric column mass Mass balance & solver solve.atmosphere_mass
Dissolved mass via Henry / power-law / multi-arg solubility Solubility laws solubility.SolubilityH2O, ..., solve.dissolved_mass
O'Neill IW buffer Oxygen fugacity oxygen_fugacity.OxygenFugacity

Lineage

Why four primaries

CALLIOPE's prognostic variables are the four primary partial pressures, not the eleven species partial pressures. This is why N has only one solved degree of freedom even though it appears in both N\(_2\) and NH\(_3\), and why O is not solved at all: the gas-phase chemistry collapses the eleven species into four independent mass-balance constraints. Adding a new oxygen-bearing species (e.g. NO) would not require a new constraint, only a new entry in get_partial_pressures() and the corresponding contribution to atmospheric and dissolved mass.

Validity range

CALLIOPE is calibrated for surface temperatures of roughly \(1000 \le T_\mathrm{magma} \le 4000\) K and surface pressures of roughly \(0.1 \le p_\mathrm{surf} \le 5000\) bar. The lower end of the pressure range is set by numerical stability of the speciation walk; the upper end is the loose envelope above which one or more solubility laws extrapolate. Individual solubility laws have tighter calibration windows than the envelope (Dixon CO\(_2\): \(\le\)815 bar; Sossi H\(_2\)O: a few kbar; Ardia CH\(_4\): 0.7-3 GPa total pressure), see the per-law table in Solubility laws. Outside the envelope above:

  • Below \(T \sim 1000\) K the JANAF fits used for the equilibrium constants extrapolate beyond their validation range. The PROTEUS wrapper enforces a configurable T_floor (default 700 K), which clips temperatures below T_floor to this value, since thermochemical equilibrium does not necessarily hold at cooler temperatures.
  • Above \(T \sim 4000\) K the mantle-atmosphere partitioning approximation breaks down; switch to atmodeller (Bower et al. 2025).
  • At surface pressures above ~5 kbar, the H\(_2\)O solubility laws (Sossi et al. 2023, Newcombe et al. 2017) extrapolate beyond their experimental calibration window; results are still self-consistent but should be checked against atmodeller for robustness.
  • Solid-phase partitioning is ignored; CALLIOPE strictly handles melt + gas. Use it only when \(\Phi_\mathrm{global} > 0\), or accept that all dissolved masses will be zero.