Skip to content

MILETModeling in Lithospheric Evolution Tectonics

A thermomechanical finite-element framework for lithosphere and mantle dynamics, developed entirely in Julia on top of Gridap and named after Miletus, a historic center of early scientific thought.

Example simulations

Every animation below comes from a case file shipped in cases/; open a card's page for the full parameter file and the command to run it.

Subduction (2-D)

Glerum et al. (2018) Model 1: a slab sinks toward 660 km.Benchmarks →

Convection in a box (3-D)

Bottom-heated convection at Ra = 10⁵: isotherms and flow.Case file →

Plumes in a spherical chunk (2-D)

Plumes rise from the core-mantle boundary of a 92° wedge.Case file →

Ridge and transform (3-D)

Offset spreading segments: seafloor dynamic topography.Case file →

What is MILET? ​

Modeling in Lithospheric Evolution Tectonics is a thermo-mechanical finite-element code for lithospheric and mantle dynamics. It solves the coupled Stokes and energy equations with a mixed, inf-sup stable Taylor–Hood discretisation (Q2 velocity, Q1 pressure, built on Gridap.jl) combined with a marker-in-cell representation of material. It is designed for problems in which composition, rheology, and metamorphic phase change evolve together — lithospheric foundering, delamination, drips, and subduction.

MILET is a flat-include research code: main.jl includes the sources under src/ in dependency order and drives one simulation per run, fully specified by a single TOML parameter file (deep-merged onto cases/_defaults.toml).

Capabilities ​

  • Stokes flow, Boussinesq or compressible (TALA, King et al. 2010), in 2-D and 3-D Cartesian plus spherical-chunk geometry — Governing equations, Compressibility

  • Visco-elasto-plastic composite rheology with calibrated dislocation-creep flow laws (Ranalli 1995 catalogue), grain-size-sensitive diffusion creep, and Drucker–Prager yield — Rheology

  • Marker-in-cell transport: RK4 advection, reseeding, and subgrid-scale temperature diffusion after Gerya & Yuen (2003) — Markers

  • Divariant, rate-limited (Arrhenius) phase transitions with reaction-progress-dependent softening — Phase changes

  • Melting parameterisations and melt weakening — Melting

  • Heat transport with shear, adiabatic, and radiogenic heating, plus SUPG / entropy-viscosity stabilisation options — Heat transport

  • Sticky-air free surface with FSSA stabilisation and an ALE surface-tracking option — Free surface

  • Direct (MUMPS) and iterative (GMG, PETSc) solvers with cached factorisations and warm starts — Linear solvers

  • Picard and Newton nonlinear loops, CFL-limited time stepping, checkpoint/restart, VTK output — Time stepping

  • Adaptive mesh refinement and ALE — AMR & ALE

New capabilities ​

Geometric multigrid 3-D Stokes solver — Geometric multigrid. Right-preconditioned FGMRES on the monolithic saddle-point system; the velocity block is preconditioned by V-cycles of a Galerkin geometric multigrid (Aℓ+1=PℓTAℓPℓ, so variable viscosity and Dirichlet elimination are inherited exactly from the fine operator), with Chebyshev smoothing and a cached-LU coarse solve; the pressure Schur complement uses the η-weighted lumped pressure mass (Elman–Silvester–Wathen). Select with [solver] type = "gmg" (gmg_levels, gmg_cheb_degree, gmg_cycles, gmg_coarse_dofs); shipped 3-D cases: cases/plume3d_cube_gmg.toml, cases/plume3d_slab_gmg.toml. Implementation: src/solvers/GMG.jl, src/solvers/BlockMG.jl.

Two-phase (McKenzie) flow — Two-phase flow. Porous melt migration through a compacting viscous matrix, as a 3-field extension of the Stokes solve (Katz 2008; Rhebergen, Wells & Katz 2014):

−∇⋅(2ηϕε˙(us))+∇pf+∇pc=ρ¯g,∇⋅us+pcζϕ=0,−∇⋅(kϕμf(∇pf−ρfg))−∇⋅us=0,

discretised as Q2 solid velocity / Q1 fluid pressure / Q1 compaction pressure, with porosity carried on markers. At ϕ=0 the system reduces exactly to single-phase Stokes (a regression test enforces this). Enabled with [twophase] do_two_phase = true (k0, phi0, n_perm, mu_fluid, rho_fluid, alpha_phi, phi_min, pf_surface0, …). Implementation: src/physics/TwoPhase.jl.

Grain-size evolution (paleowattmeter) — Grain-size evolution. Per-marker grain size d evolves by Arrhenius normal grain growth balanced against Austin & Evans (2007) reduction driven by the dislocation-creep work rate Ψdisl=σIIε˙disl:

dddt=G0pdp−1exp(−Eg+PVgRT)−λcγd2Ψdisl,

integrated with exact operator-split sub-flows (update_grain_size, src/materials/GrainSize.jl) and two-way coupled to the composite diffusion + dislocation rheology. Per-rock keys grain_G0, grain_p, grain_Eg, grain_Vg, grain_lambda, grain_gamma, grain_c, grain_init (grain_G0 = 0 freezes the grain size).

Strain softening & healing — Softening & healing. Linear cohesion/friction weakening over [strain_thresh_init, strain_thresh_weak], now with plastic-strain gating ([rheology] strain_gate_plastic = true: weakening strain accumulates only where the cell actually yields), temperature-dependent Arrhenius healing (τheal=τ0exp⁡[ER(1T−1Tref)]; per-rock heal_tau0, heal_E, heal_Tref), optional viscous strain softening (visc_soft_factor), and a configurable yield-stress cap (yield_stress_max).

Quick start ​

bash
# install dependencies (once)
julia --project=. -e 'using Pkg; Pkg.instantiate()'

# verification benchmark: SolCx (variable-viscosity Stokes, analytic solution)
julia --project=. main.jl cases/solcx_fixed.toml

# convection benchmark: Blankenbach case 1a
julia --project=. main.jl cases/blankenbach_1a.toml

# a worked geodynamic example: thermo-mechanical subduction
julia --project=. main.jl cases/subduction.toml

# 3-D plume with the geometric-multigrid solver
julia -t auto --project=. main.jl cases/plume3d_cube_gmg.toml

Results are written as VTK files (solution fields, markers, topography) to output/<case>/, viewable in ParaView — see Getting started for output formats and the depth-positive-down camera setup. Every TOML key is documented in the parameter-file reference.

Verification ​

  • SolCx (Duretz et al. 2011): grid convergence of the variable-viscosity Stokes solution (cases/solcx_fixed_n*.toml)

  • Blankenbach et al. (1989) case 1a: steady convection diagnostics (Nu, Vrms) at three resolutions (cases/blankenbach_*.toml)

  • Smoke and benchmark tests under test/ (julia --project=. test/runtests.jl) — see Benchmarks and Testing

Notes ​

  • The multi-species volatile transport module is part of a separate study in preparation and is not included in this release; shipped cases run with volatiles disabled.

  • 3-D and spherical-chunk support are functional but less exercised than the 2-D Cartesian path.

Citing ​

If you use MILET in your work, please cite the paper that describes the code and its application to eclogite foundering on Venus, together with the archived simulations and inputs:

  • Karagoz, O. (2026). A mantle viscosity threshold for eclogite foundering on Venus. Journal of Geophysical Research: Planets, in revision.

  • Karagoz, O. (2026). MILET simulations, inputs and figure scripts for the eclogite-foundering study [Data set]. Zenodo. doi:10.5281/zenodo.20932417

Until the paper is published, please also cite the repository, github.com/okaragoz/MILET. The reference will be updated with volume, pages and DOI on publication.

bibtex
@article{Karagoz2026Venus,
  author  = {Karagoz, Oguzcan},
  title   = {A Mantle Viscosity Threshold for Eclogite Foundering on {Venus}},
  journal = {Journal of Geophysical Research: Planets},
  year    = {2026},
  note    = {In revision}
}

@misc{Karagoz2026Zenodo,
  author       = {Karagoz, Oguzcan},
  title        = {{MILET} simulations, inputs and figure scripts for the
                  eclogite-foundering study on {Venus}},
  year         = {2026},
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.20932417},
  url          = {https://doi.org/10.5281/zenodo.20932417}
}