Subduction
Plate-driven trench with slab descent (oceanic–continental / oceanic–oceanic).
Run it with:
bash
julia -t auto --project=. main.jl cases/subduction.tomlFull case file — cases/subduction.toml:
toml
# ══════════════════════════════════════════════════════════════════════════════
# Oceanic subduction case — two-plate symmetric convergence (two-plate symmetric setup).
#
# Domain: 4000 km × 1400 km (y = 0 surface, +y depth).
# Q2-Q1 Taylor-Hood FEM, MUMPS direct solver.
# ══════════════════════════════════════════════════════════════════════════════
[model]
case = "subduction"
# ── domain & resolution ──────────────────────────────────────────────────────
dim = 2
xsize = 4000000.0 # 4000 km
ysize = 1400000.0 # 1400 km
nx = 201 # 200 cells, 20 km
ny = 71 # 70 cells, 20 km
mnx = 4
mny = 4
# ── gravity ──────────────────────────────────────────────────────────────────
gx = 0.0
gy = 9.81
pinit = 0.0
# ── rheology limits ──────────────────────────────────────────────────────────
eta_min = 1e19 # asthenosphere floor (was 1e18 — gave unphysical 1000 cm/yr flows)
eta_max = 1e25
# ── time control ─────────────────────────────────────────────────────────────
maxxystep = 0.5
maxtkstep = 20.0
maxtmstep = 1.5768e13 # ≈ 500 kyr
ntot = 100
# ── physics toggles ──────────────────────────────────────────────────────────
do_stokes = true
do_heat = true
do_advect = true
do_adiabatic = false
do_shear_heating = true
do_friction = true
do_phase_change = false
do_melting = false
do_free_surface = true
do_radiogenic = true
# ── FEM discretization ───────────────────────────────────────────────────────
fe_order_v = 2 # Q2 velocity
fe_order_p = 1 # Q1 pressure (Taylor-Hood)
fe_order_T = 1
n_picard = 3
picard_tol = 1e-3
# ── solver ───────────────────────────────────────────────────────────────────
solver_type = "mumps"
krylov_tol = 1e-7
krylov_maxit = 200
gmg_levels = 3
# ── IO ───────────────────────────────────────────────────────────────────────
output_dir = "output/subduction"
output_every = 10
str_min = 1e-18
eii_seed = 1e-15 # mild seed — engages power-law without overheating
body_force_full = false # Boussinesq perturbation (ρ−ρ̄)·g: stable with our pressure null-space
marker_T_mode = "overwrite" # subduction convection-light — PIC not needed
# ── thermal BCs ──────────────────────────────────────────────────────────────
T_top = 273.0
T_bot = 1623.0
# ── subduction geometry ──────────────────────────────────────────────────────
trench_x = 2000000.0
plate_thickness = 80000.0
plate_age = 4e7
continent_thickness = 120000.0
air_thick = 40000.0
x_plate_left = 294000.0
x_plate_right = 3706000.0
vx_plate = 9.51173113506658e-10
vx_plate_right = -9.51173113506658e-10
# ── free surface ─────────────────────────────────────────────────────────────
air_rock_id = 1
surface_smooth = 0.0
# ══════════════════════════════════════════════════════════════════════════════
# Rocks (1=air, 2=oceanic crust, 3=continental crust, 4=lith mantle, 5=asthen)
# ══════════════════════════════════════════════════════════════════════════════
[[rock]]
nu0=1e18
ro0=1000.0
alpha=0.0
beta=0.0
cp=1000.0
kt=50.0
ht=0.0
mm=1.0
dh=0.0
dv=0.0
ss=0.0
a0=0.0
b0=0.0
a1=0.0
b1=0.0
e0=0.0
e1=1.0
nu_min=1e18
nu_max=1e19
immobile=false
G = 0.0
[[rock]]
nu0=1.97e17
dh=154000.0
dv=0.3
ss=3e4
mm=2.3
ro0=2900.0
alpha=3e-5
beta=0.0
cp=1000.0
kt=2.5
ht=2.5e-7
a0=3e6
b0=0.6
a1=3e5
b1=0.0
e0=0.0
e1=0.1
nu_min=1e18
nu_max=5e18
immobile=false
G = 4e10
[[rock]]
nu0=1e23
dh=0.0
dv=0.0
ss=0.0
mm=1.0
ro0=2700.0
alpha=3e-5
beta=0.0
cp=1000.0
kt=2.5
ht=1e-6
a0=1e7
b0=0.6
a1=1e6
b1=0.06
e0=0.0
e1=0.1
nu_min=1e18
nu_max=1e25
immobile=false
G = 3e10
[[rock]]
nu0=1.97e17
dh=154000.0
dv=0.3
ss=0.0
mm=1.0
ro0=3300.0
alpha=3e-5
beta=1e-11
cp=1000.0
kt=3.0
ht=2.5e-8
a0=3e7
b0=0.1
a1=3e6
b1=0.0
e0=0.0
e1=0.1
nu_min=1e22 # lithospheric mantle: strong (was 1e18; never softer than 10²²)
nu_max=1e25 # ceiling raised to engage MC plasticity at hinge
immobile=false
G = 7e10
[[rock]]
nu0=1.97e17
dh=154000.0
dv=0.3
ss=3e4
mm=2.3
ro0=3300.0
alpha=3e-5
beta=1e-11
cp=1000.0
kt=3.0
ht=2.5e-8
a0=1e6
b0=0.03
a1=1e5
b1=0.01
e0=0.0
e1=0.1
nu_min=1e19 # asthenosphere floor (raised from 1e18 — too weak)
nu_max=1e22 # max — allows some stiffness in deep regions
immobile=false
G = 7e10
# ── Phase transitions (Olivine → Wadsleyite at 410 km; eclogitization of basalt at 70 km) ──
[[phase]]
rock_from = 5 # asthenosphere
rock_to = 5
transition = 1
T_ref = 1700.0
P_ref = 14e9 # ~410 km
clapeyron = 2.5e-9 # +2.5 MPa/K (exothermic)
drho = 270 # +270 kg/m³
latent = -90000 # -90 kJ/kg (released)
[[phase]]
rock_from = 2 # oceanic crust
rock_to = 4 # transforms to eclogite (heavier — joins lith mantle)
transition = 2 # depth-triggered
depth = 70e3
drho = 200
latent = 0.0
# ── Melting (Katz-style for oceanic crust + asthenosphere) ──
[[melt]]
rock_id = 2 # oceanic crust
T_solidus_ref = 1085.0
T_liquidus_ref = 1780.0
solidus_dPdT = 132.9e-9
liquidus_dPdT = 89.0e-9
H_latent_melt = 4e5
extract_threshold = 0.3
rock_after_extract = 2
[[melt]]
rock_id = 5 # asthenosphere
T_solidus_ref = 1085.0
T_liquidus_ref = 1780.0
solidus_dPdT = 132.9e-9
liquidus_dPdT = 89.0e-9
H_latent_melt = 4e5
extract_threshold = 0.3
rock_after_extract = 5