A hot isosurface: plumes rise from the core-mantle boundary and spread beneath the surface. 3-D plume planforms →
2-D plume from the CMB
A 300 K anomaly above the core-mantle boundary rises as a plume and spreads beneath the cold boundary layer (Ra = 10⁶, 64 × 512, first 60 Myr). Plume from the CMB →
Temperature above a primordial layer
The temperature of the primordial-material example: the dense, viscous layer in the lowest 1650 km passes little heat and warms until, between 2.1 and 2.6 Gyr, broad hot domes rise from it (64 × 512, 0 to 4.5 Gyr). Primordial and recycled material →
2-D stagnant lid that fails
An Arrhenius viscosity (contrast 10⁴) holds the cold lid still until its stresses reach an 8 MPa yield stress; it then breaks, sinks into the mantle and regrows (64 × 512, internally heated, 0 to 1500 Myr; 1100 to 1800 K shown). Stagnant lid →
Primordial and recycled material
A dense primordial layer, 100 times more viscous than the mantle, fills the lowest 1650 km while convection, melting and crustal recycling go on above it; the colour is the fraction of primordial material (64 × 512, 0 to 4.5 Gyr). Reference case M100dD of Gülcher, Ballmer & Tackley (2021). Primordial and recycled material →
Grids and geometries
The 2-D spherical and cylindrical annuli, a 3-D spherical chunk and the 3-D Yin-Yang sphere. Grids and geometries →
Mantle Interaction and Lithospheric Evolution in Viscous Annuli is a mantle-convection code written in Julia. It solves the coupled Stokes, energy and composition equations on a staggered finite-volume grid, with velocities on cell faces and pressure at cell centres, and carries temperature and composition on Lagrangian markers.
It runs in two geometries:
the 2-D spherical annulus, cfg.geometry = "spherical_annulus" (the default), whose radial measure is , so boundary areas and volume weights match a sphere;
the 3-D Yin-Yang spherical shell, two overlapping latitude-longitude patches coupled by Schwarz iteration.
MILEVA is a flat-include research code: include/mileva.jl loads the sources under config/, utils/, markers/, physics/, solvers/ and parallel/ in dependency order, and main_SphCon.jl holds the time loop. A run is a Julia script that edits the three configuration structs cfg (SimConfig), mat (MaterialProperties) and temp (TemperatureConditions) and calls main_SphCon(cfg, mat, temp).
Thermochemical Stokes flow with the full deviatoric stress at variable viscosity, Boussinesq or anelastic forms; see Governing equations
Composite rheology: diffusion and dislocation creep, Arrhenius and Frank-Kamenetskii laws, yielding, viscoelastoplasticity, damage and grain-size evolution; see Rheology
Thermal and compositional buoyancy: basalt, depletion, thermochemical piles, phase transitions; see Buoyancy and composition
# install dependencies (once)julia --project=. -e 'using Pkg; Pkg.instantiate()'# test suite (keep it to a few threads and a bounded heap on a laptop)JULIA_NUM_THREADS=4 julia --project=. --heap-size-hint=3G tests/run_tests.jl# isoviscous convection in the spherical annulus, Ra = 1e4, Nr = 64julia --project=. -t 4 examples/annulus_convection_2d.jl 1e4 64# verification against Hernlund & Tackley (2008), Ra = 1e4, Nr = 64# hours of wall time; for a short probe prefix MILEVA_MAXSTEPS=500 (not a result)julia --project=. benchmarks/hernlund_tackley_annulus.jl HT4 64
Output (VTK frames for ParaView, checkpoints and an in-loop diagnostics.csv) goes to cfg.outputDir. A complete first run, written out line by line, is on the Getting started page; every example is listed in the Examples.
MILEVA's 2-D spherical-annulus operator is verified against the published results of Hernlund & Tackley (2008) and the Annulus column of Fleury et al. (2024), and by conservation tests: Nu = 1 on a conducting state, closure of the energy budget, and the identity between buoyancy work and viscous dissipation. The tables are on the Benchmarks and verification page.