Rheology
MILET's constitutive model is a pointwise visco-elasto-plastic (VEP) composite evaluated per marker at 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:
1. Viscous branch
Calibrated dislocation creep (creep_A / disl_prof)
The secondary-invariant power law (Ranalli 1995 convention)
is inverted to an effective viscosity (dislocation_viscosity in FlowLaws.jl):
with creep_A > 0 explicitly or by naming a catalog profile:
[[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:
| Profile | ||||
|---|---|---|---|---|
Dry_Olivine-Ranalli_1995 | 2.5e4 | 3.5 | 532 | 0 |
Wet_Olivine-Ranalli_1995 | 2.0e3 | 4.0 | 471 | 0 |
Mafic_Granulite-Ranalli_1995 | 1.4e4 | 4.2 | 445 | 0 |
Plagioclase_An75-Ranalli_1995 | 3.3e-4 | 3.2 | 238 | 0 |
Quartzite-Ranalli_1995 | 6.7e-6 | 2.4 | 156 | 0 |
Wet_Quarzite-Ranalli_1995 | 3.2e-4 | 2.3 | 154 | 0 |
Dry_Olivine_disl-Hirth_Kohlstedt_2003 | 1.1e5 | 3.5 | 530 | 14e-6 |
Grain-size-sensitive diffusion creep (diff_A / diff_prof)
A parallel linear-viscous mechanism (Hirth & Kohlstedt 2003 form):
with lab units 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 (Wet_Olivine_diff-Hirth_Kohlstedt_2003 (diff_A = 0 (default) disables the mechanism. The grain size
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):
Legacy Arrhenius path (eta0)
When creep_A = 0 and eta0 > 0, the pre-exponential viscosity form is used:
with $n = $ stress_exponent (activation_energy activation_volume ref_yield_stress
which interpolates continuously between the linear regime (activation_energy < 0) reproduces the I3ELVIS depth-linear softening, and a legacy grain_exponent modifier scales eta0-path viscosity by
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 visc_soft_factor over the same accumulated-strain interval 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:
where cohesion_init, friction_init) to (cohesion_weak, friction_weak) as the accumulated plastic strain strain_thresh_init, strain_thresh_weak]. Note friction_init / friction_weak are
The absolute yield cap yield_stress_max (default 5e8 Pa, after Kaus 2010 / Glerum et al. 2018) prevents <= 0 to disable.
Plasticity is realized rate-dependently as an effective viscosity
so that
Visco-plastic combination
The combination is stress-limiting, not harmonic — the weaker mechanism governs:
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
3. Maxwell elasticity {#maxwell-elasticity} {#3.-Maxwell-elasticity-{#maxwell-elasticity}}
A Maxwell body compute_VEP_viscosity):
Limits: shear_modulus (Pa; typical silicate shear_modulus <= 0 disables elasticity (
4. Melt weakening
_compute_viscosity_core applies an exponential melt weakening to the total visco-plastic viscosity (Mei et al. 2002):
via the melt_factor (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 [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
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
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 eta_min/eta_max numerical guards here would break the identity 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) | Units | Meaning |
|---|---|---|
eta0 | Pa·s | legacy pre-exponential viscosity |
activation_energy, activation_volume, stress_exponent | J/mol; J/(mol·bar) legacy / m³/mol calibrated; — | |
ref_yield_stress | Pa | |
creep_A or disl_prof | MPa⁻ⁿ s⁻¹ / name | calibrated dislocation creep |
diff_A, diff_m, diff_E, diff_V or diff_prof | lab units / name | grain-size-sensitive diffusion creep |
cohesion_init, cohesion_weak | Pa | |
friction_init, friction_weak | — | |
strain_thresh_init, strain_thresh_weak | — | weakening strain bracket |
visc_soft_factor | — | viscous softening end-member (1 = off) |
yield_stress_max | Pa | absolute yield cap (default 5e8; ≤ 0 off) |
shear_modulus | Pa | Maxwell |
eta_min, eta_max | Pa·s | per-rock clamp (also global in [rheology]) |
strain_gate_plastic ([rheology]) | bool | gate strain accumulation by yield fraction |
grain_exponent ([rheology]) | — | legacy eta0 path |