Skip to content

Rheology

MILET's constitutive model is a pointwise visco-elasto-plastic (VEP) composite evaluated per marker at (T,P,ε˙II,εpl,d) and harmonically averaged to cells. The core lives in src/materials/Rheology.jl (_compute_viscosity_core, compute_VEP_viscosity, viscous_mechanism_partition) with calibrated flow laws in src/materials/FlowLaws.jl.

The total deviatoric strain rate decomposes as a serial (Maxwell-type) arrangement sharing one deviatoric stress:

ε˙=ε˙visc+ε˙plast+ε˙elast.

1. Viscous branch

Calibrated dislocation creep (creep_A / disl_prof)

The secondary-invariant power law (Ranalli 1995 convention)

ε˙II=AσIInexp(E+PVRT),A in MPans1

is inverted to an effective viscosity (dislocation_viscosity in FlowLaws.jl):

ηdisl=10612A1/nε˙II(1n)/nexp(E+PVnRT)[Pas],

with E in J/mol, V in m³/mol, P in Pa; the 106 converts the MPa-based stress convention. A rock activates this path by setting creep_A > 0 explicitly or by naming a catalog profile:

toml
[[rock]]
disl_prof = "Dry_Olivine-Ranalli_1995"

lookup_flow_law resolves the name from the FLOW_LAWS catalog and overrides activation_energy, activation_volume, stress_exponent, and creep_A. Shipped entries:

ProfileA (MPa⁻ⁿ s⁻¹)nE (kJ/mol)V (m³/mol)
Dry_Olivine-Ranalli_19952.5e43.55320
Wet_Olivine-Ranalli_19952.0e34.04710
Mafic_Granulite-Ranalli_19951.4e44.24450
Plagioclase_An75-Ranalli_19953.3e-43.22380
Quartzite-Ranalli_19956.7e-62.41560
Wet_Quarzite-Ranalli_19953.2e-42.31540
Dry_Olivine_disl-Hirth_Kohlstedt_20031.1e53.553014e-6

Grain-size-sensitive diffusion creep (diff_A / diff_prof)

A parallel linear-viscous mechanism (Hirth & Kohlstedt 2003 form):

ε˙II=AσIIdmexp(E+PVRT)ηdiff=106(d106)m2Aexp(E+PVRT),

with lab units A in MPa⁻¹ µmm s⁻¹ and grain size d in metres at the call site (diffusion_viscosity). Configure with explicit diff_A, diff_m, diff_E, diff_V keys or a catalog profile (DIFF_CREEP_LAWS): Dry_Olivine_diff-Hirth_Kohlstedt_2003 (A=1.5×109, m=3, E=375 kJ/mol, V=6×106) or Wet_Olivine_diff-Hirth_Kohlstedt_2003 (A=109, m=3, E=335 kJ/mol, V=4×106). diff_A = 0 (default) disables the mechanism. The grain size d is a marker property evolved by the paleowattmeter — see Grain-size evolution.

Harmonic composite

Both mechanisms act in parallel at common stress, so compliances add (the standard LaMEM/ASPECT "harmonic" approximation, evaluated at the total strain-rate invariant):

1ηvisc=1ηdisl+1ηdiff(d).

Legacy Arrhenius path (eta0)

When creep_A = 0 and eta0 > 0, the pre-exponential viscosity form is used:

ηcreep=η0exp(Q+VPbarnRT),

with $n = $ stress_exponent (n=1 → diffusion creep, n>1 → dislocation creep; the 1/n in the exponent is essential to avoid 108× overestimated viscosity at depth). Unit note for this path: activation_energy Q is in J/mol but activation_volume V is in J/(mol·bar) since P enters in bar. Strain-rate dependence is supplied by the power-law blend when ref_yield_stress σref>0 and n>1:

x=(2ηcreepε˙IIσref)11/n,ηvisc=ηcreep1+x,

which interpolates continuously between the linear regime (ε˙II0) and the power-law regime without an explicit switch. A legacy "air-like" branch (activation_energy < 0) reproduces the I3ELVIS depth-linear softening, and a legacy grain_exponent modifier scales eta0-path viscosity by (d/dref)m.

Viscous strain softening (visc_soft_factor)

Fabric/CPO weakening of ductile shear zones: the aggregate viscous viscosity is divided by a factor that ramps linearly from 1 to visc_soft_factor over the same accumulated-strain interval [ε0,εf] = [strain_thresh_init, strain_thresh_weak] as the plastic weakening. visc_soft_factor = 1.0 (default) disables it; e.g. 0.3 gives a 3.3× weaker steady shear zone.

2. Plastic branch (Drucker–Prager + strain weakening)

Drucker–Prager yield with linear strain weakening of both cohesion and friction:

τyield=min(C(εpl)+sinφ(εpl)P,σy,max),

where C and sinφ interpolate linearly from (cohesion_init, friction_init) to (cohesion_weak, friction_weak) as the accumulated plastic strain εpl grows across [strain_thresh_init, strain_thresh_weak]. Note friction_init / friction_weak are sinφ directly (dimensionless), not angles.

The absolute yield cap yield_stress_max (default 5e8 Pa, after Kaus 2010 / Glerum et al. 2018) prevents C+sinφP from growing to many GPa at depth — without it cold slab cores accumulate unbounded elastic stress and trigger spurious break-off cascades; set <= 0 to disable.

Plasticity is realized rate-dependently as an effective viscosity

ηplast=τyield2ε˙II,

so that 2ηplastε˙II=τyield exactly when plasticity is engaged.

Visco-plastic combination

The combination is stress-limiting, not harmonic — the weaker mechanism governs:

1ηVP=max(1ηvisc, 1ηplast)ηVP=min(ηvisc, ηplast),

which caps the stress at yield once plasticity engages rather than summing compliances. _compute_viscosity_core also returns a yielded flag (inv_plast > inv_visc); its marker average forms the per-cell yield fraction state.yield_frac_c, which gates plastic-strain accumulation on markers (update_marker_strain! in src/particles/Projection.jl, toggled by strain_gate_plastic) so weakening strain builds only in shear zones that actually yield. Strain healing (heal_tau0, heal_E, heal_Tref) anneals εpl back — see Softening & healing.

3. Maxwell elasticity {#maxwell-elasticity} {#3.-Maxwell-elasticity-{#maxwell-elasticity}}

A Maxwell body σ˙/G+σ/ηVP=ε˙ discretized with backward Euler over Δt gives (compute_VEP_viscosity):

Z=GΔtηVP+GΔt[0,1],ηVEP=ZηVP,χ=1Z,σnew=2ηVEPε˙+χσold.

Limits: GΔtηVPZ1, χ0 (pure viscous, old stress forgotten); GΔtηVPZ0, ηVEP0, σnewσold (pure elastic). In between, stress relaxes over the Maxwell time τM=η/G. The per-rock key is shear_modulus (Pa; typical silicate 7×1010); shear_modulus <= 0 disables elasticity (Z=1, χ=0). The χσold term feeds the Stokes RHS — see Governing equations.

4. Melt weakening

_compute_viscosity_core applies an exponential melt weakening to the total visco-plastic viscosity (Mei et al. 2002):

ηηeϕwFmelt,

via the melt_factor (ϕw) and F_melt (marker melt fraction) keyword arguments — melt weakens both diffusion and dislocation creep, hence the application to the aggregate. The single-phase marker projection currently calls it with melt_factor = 0.0; active matrix melt weakening in the shipped physics goes through the two-phase module, which applies ηeαϕϕ with the [twophase] key alpha_phi (default 27.0) in src/physics/TwoPhase.jl. See Melting and Two-phase flow.

5. Clamps and evaluation pipeline

The final viscosity is clamped to

η[max(eta_min, rock.eta_min), min(eta_max, rock.eta_max)],

combining the global [rheology] bounds (defaults 1e19 / 1e25 Pa·s) with the per-rock ones.

project_markers_to_cells! (src/particles/Projection.jl) evaluates compute_VEP_viscosity per marker with marker temperature, lithostatic pressure P=ρ0gy (converted to bar), the host cell's ε˙II from the previous iteration, the marker's accumulated strain, grain size, and melt fraction. Cell viscosity and thermal conductivity are harmonic marker means; ρ, cp, hr, χ, σold, and the yield fraction are arithmetic means.

Mechanism partition (wattmeter input)

viscous_mechanism_partition splits the viscous deformation at a point for the grain-size wattmeter. At the harmonic-composite approximation both mechanisms see the common stress σII=2ηviscε˙II and partition as ε˙mech=σII/(2ηmech). It returns (ηvisc,ηdiff,ηdisl,ε˙diff,ε˙disl,Ψdisl) with the dislocation work rate Ψdisl=σIIε˙disl. Deliberately unclamped: applying the eta_min/eta_max numerical guards here would break the identity ε˙diff+ε˙disl=ε˙II and inflate the wattmeter work rate. With diff_A = 0 the full work rate is attributed to dislocation creep (the conservative choice for grain-size reduction). See Grain-size evolution.

Key reference

Key (per [[rock]] unless noted)UnitsMeaning
eta0Pa·slegacy pre-exponential viscosity
activation_energy, activation_volume, stress_exponentJ/mol; J/(mol·bar) legacy / m³/mol calibrated; —Q/E, V, n
ref_yield_stressPaσref of the (1+x) power-law blend
creep_A or disl_profMPa⁻ⁿ s⁻¹ / namecalibrated dislocation creep
diff_A, diff_m, diff_E, diff_V or diff_proflab units / namegrain-size-sensitive diffusion creep
cohesion_init, cohesion_weakPaC0, Cf
friction_init, friction_weaksinφ0, sinφf
strain_thresh_init, strain_thresh_weakweakening strain bracket [ε0,εf]
visc_soft_factorviscous softening end-member (1 = off)
yield_stress_maxPaabsolute yield cap (default 5e8; ≤ 0 off)
shear_modulusPaMaxwell G (0 = no elasticity)
eta_min, eta_maxPa·sper-rock clamp (also global in [rheology])
strain_gate_plastic ([rheology])boolgate strain accumulation by yield fraction
grain_exponent ([rheology])legacy d-dependence of the eta0 path