Skip to content

Transform / strike-slip

Map-view simple shear across a weak fault zone. Starter template.

Run it with:

bash
julia -t auto --project=. main.jl cases/examples/transform.toml

Full case file — cases/examples/transform.toml:

toml
# ══════════════════════════════════════════════════════════════════════════════
# EXAMPLE TEMPLATE — Transform / strike-slip fault (MAP VIEW)
#
# Modelled as a horizontal map-plane slice (gravity OFF). The two blocks slide
# past each other along a vertical weak fault zone at x = xsize/2:
#   • x = across-fault, y = along-fault
#   • left block (x < axis) drives +y, right block (x > axis) drives −y
#   • the along-fault ends (y = 0, y = ysize) are open (traction-free)
# Plastic strain localises the simple-shear onto the weak fault band.
#
# STARTER TEMPLATE on the data-driven path. Because this is a map view, set
# gy = 0, do_heat = false, and treat the temperature field as a passive label.
# For a vertical strike-slip cross-section use dim = 3 with out-of-plane (z)
# driving instead. Tune before production.
# ══════════════════════════════════════════════════════════════════════════════

[model]
case = "transform"                 # unknown name → data-driven layers/init_T

[mesh]
dim   = 2
xsize = 200000.0                   # 200 km across-fault
ysize = 200000.0                   # 200 km along-fault
nx    = 101
ny    = 101
mnx   = 4
mny   = 4

[gravity]
gy = 0.0                           # MAP VIEW — no gravity in the horizontal plane

[time]
maxxystep = 0.5
maxtmstep = 3.1556e12
ntot      = 200

[rheology]
eta_min = 1e18
eta_max = 1e24

[temperature]
T_top = 673.0                      # uniform mid-crustal T (heat solve is off)
T_bot = 673.0

[physics]
do_stokes        = true
do_heat          = false
do_advect        = true
do_shear_heating = false
do_friction      = true            # plastic localisation on the fault
do_free_surface  = false
do_radiogenic    = false

# Simple shear: opposite along-fault (y) velocities on the across-fault walls.
[boundary_velocity]
bc_left    = "uniform"
bc_right   = "uniform"
bc_surface = "traction"            # along-fault ends left open
bc_deep    = "traction"

[boundary_velocity_values]
bc_left_vy  =  6.34e-10            # +2 cm/yr (north)
bc_right_vy = -6.34e-10            # −2 cm/yr (south)

[fe]
n_picard   = 4
picard_tol = 1e-3

[solver]
type = "mumps"

[output]
dir   = "output/transform"
every = 10

# ── Rocks: 1=crust, 2=weak fault gouge
[[rock]]                           # 1 — crust
nu0=1e22
ro0=2750.0
alpha=0.0
cp=1000.0
kt=2.5
ht=0.0
mm=1.0
dh=0.0
dv=0.0
a0=2e7
b0=0.6
a1=2e6
b1=0.06
e0=0.0
e1=0.5
nu_min=1e20
nu_max=1e24
immobile=false
G=3e10

[[rock]]                           # 2 — weak fault zone (low cohesion + friction)
nu0=1e20
ro0=2750.0
alpha=0.0
cp=1000.0
kt=2.5
ht=0.0
mm=1.0
dh=0.0
dv=0.0
a0=1e6
b0=0.05
a1=1e5
b1=0.0
e0=0.0
e1=0.1
nu_min=1e19
nu_max=1e22
immobile=false
G=3e10

# ── Geometry: crust everywhere, with a 10 km-wide vertical weak fault at centre
[[layer]]
name    = "crust"
rock_id = 1
shape   = "background"

[[layer]]
name    = "fault_zone"
rock_id = 2
shape   = "rectangle"
x_min   = 95000.0
x_max   = 105000.0
y_min   = 0.0
y_max   = 200000.0

# ── Uniform "temperature" (passive — heat solve is off)
[[init_T]]
name    = "uniform"
shape   = "background"
profile = "constant"
T_value = 673.0