Skip to content

Transtension / transpression

Oblique driving = strike-slip + fault-normal opening (transtension) or closing (transpression). Starter template.

Run it with:

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

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

toml
# ══════════════════════════════════════════════════════════════════════════════
# EXAMPLE TEMPLATE — Transtension / transpression (OBLIQUE, map view)
#
# Oblique relative plate motion = strike-slip (along-fault, y) + fault-normal
# (across-fault, x) component. Same map-view setup as transform.toml, but the
# side walls now carry BOTH components:
#   • TRANSTENSION (this file): walls also move APART  → bc_left_vx < 0, bc_right_vx > 0
#   • TRANSPRESSION: flip the normal sign → walls move TOGETHER (bc_left_vx > 0,
#     bc_right_vx < 0). Switch the two bc_*_vx signs below to convert.
#
# Obliquity angle θ = atan(v_normal / v_shear). Here v_shear = 2 cm/yr and
# v_normal = 1 cm/yr → θ ≈ 27° (transtensional pull-apart). STARTER TEMPLATE,
# data-driven path, gravity OFF (map view). Tune before production.
# ══════════════════════════════════════════════════════════════════════════════

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

[mesh]
dim   = 2
xsize = 200000.0
ysize = 200000.0
nx    = 101
ny    = 101
mnx   = 4
mny   = 4

[gravity]
gy = 0.0                           # MAP VIEW

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

[rheology]
eta_min = 1e18
eta_max = 1e24

[temperature]
T_top = 673.0
T_bot = 673.0

[physics]
do_stokes        = true
do_heat          = false
do_advect        = true
do_shear_heating = false
do_friction      = true
do_free_surface  = false
do_radiogenic    = false

# Oblique driving: shear (vy) + opening (vx). For transpression, flip vx signs.
[boundary_velocity]
bc_left    = "uniform"
bc_right   = "uniform"
bc_surface = "traction"
bc_deep    = "traction"

[boundary_velocity_values]
bc_left_vx  = -3.17e-10           # −1 cm/yr  (opening; flip to + for transpression)
bc_left_vy  =  6.34e-10           # +2 cm/yr  (shear, north)
bc_right_vx =  3.17e-10           # +1 cm/yr  (opening; flip to − for transpression)
bc_right_vy = -6.34e-10           # −2 cm/yr  (shear, south)

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

[solver]
type = "mumps"

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

# ── Rocks: 1=crust, 2=weak releasing-bend / 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
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 with a 10 km-wide oblique-slip fault at the 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

[[init_T]]
name    = "uniform"
shape   = "background"
profile = "constant"
T_value = 673.0