Skip to content

Rheology figures of Becker & Faccenna ​

This page reproduces figures 5.6, 5.7, 5.10, 5.12 and 5.13 of chapter 5 ("Rheology") of Becker, T.W. & Faccenna, C., Tectonic Geodynamics (draft, 2026), with the creep laws of the GeoParams database and CairoMakie. The flow laws, geotherms and other parameter choices are the authors' (taken from the book and from the script that made the printed figures), so that the figures can be used as a starting point for your own computations.

Each figure is made by one function of the Makie extension of GeoParams. Their keyword arguments default to the book's choices, and the creep laws are keywords too, so any law of the database (or your own) can be plotted instead. The functions are available once a Makie backend is loaded:

julia
using GeoParams, CairoMakie

Stress and strain-rate conventions ​

Laboratory flow laws relate the differential stress σd=σ1−σ3 to the axial strain rate of a compression test. GeoParams converts them to the second invariants of the deviatoric stress and strain-rate tensors (Apparatus = AxialCompression), using τII=σd/3 and ε˙II=32ε˙axial, so that ε˙II=A3(n+1)/22τIIn… (eq. 5.12 of the book, see also Gerya 2019). On this page the strain rate ε˙ is ε˙II and all stresses are differential stresses, σd=3τII.

The printed figures use two other conventions, so the curves below differ from the printed ones by a constant factor:

  • Fig. 5.12 uses the olivine laws of Table 5.2. Its viscosities are the same as in GeoParams, but its stress axis shows 2τII. At a given strain rate the printed stresses are therefore 2/3≈1.15 times higher than here, and the brittle-ductile transitions are 0.3–0.8 km deeper.

  • Figs. 5.6, 5.10 and 5.13 use the stress scale B=2(1+3/n)/2A−1/n given below eq. (5.5), i.e. ε˙=Aσn/2(n+3)/2. At the same stress the printed strain rate is 32(n+1)/2 times lower than here (3.5 for diffusion creep, 4.9 for the Peierls law of Mei et al. (2010), 6.9 for n=3, 8.2 for n=3.5). At the same strain rate the printed stress of a power law is (32(n+1)/2)1/n times higher: 1.95 (quartz, n=2.8), 1.91 (n=3), 1.83 (olivine, n=3.5). The bands of Fig. 5.6 and the creep curves of Fig. 5.13 are shifted accordingly; in Fig. 5.10 the strain-rate contours move by 0.5–0.9 orders of magnitude and the diffusion/dislocation boundary by 0.15 log units in stress.

The Byerlee limits, temperatures, water fugacities and water contents are not affected.

Differences to the book's parameters ​

Apart from the conventions above, the GeoParams database differs from the parameters of the book in a few places. Where the book uses its own choice, the default arguments of the plotting functions override the database value.

LawBook (Table 5.1/5.2, script)GeoParams databaseOn this page
Wet olivine, dislocation, Table 5.2 (Fig. 5.12)COHr with r=1, COH=1000wet_olivine1_Hirth_2003: r=1.2 (Hirth & Kohlstedt 2003)f = 1000^(1/1.2), which gives f1.2=1000
Table 5.2, A in SI unitsrounded (7.4⋅10−15, 6⋅10−15)computed from Hirth & Kohlstedt (2003)database (stress differs by 0.1 %)
Dry olivine, diffusionV=6⋅10−6 m³/molV=10⋅10−6 m³/mol (range 2–10)V=6⋅10−6
Dry olivine, dislocation (Figs. 5.10, 5.13)V=18⋅10−6 m³/molV=14⋅10−6 m³/mol (Table 5.2: 14)V=18⋅10−6
Quartz, Rutter & Brodie (2004)n=3, log10⁡A=−4.9n=2.97, log10⁡A=−4.93database (stresses in Fig. 5.6 differ by −1 to +17 %)
Quartz, Tokle et al. (2019)A=1.1⋅10−12 (log10⁡A=−11.9586)1.1⋅10−12 (Table 1 of the paper)identical
Quartz, Jaoul et al. (1984), "wet"n=2.8, A=9.0⋅10−6, E=163 kJ/moln=2.4, A=0.63 s⁻¹ kbar⁻ⁿ =9.98⋅10−6 MPa⁻ⁿ s⁻¹, E=39 kcal/mol =163.2 kJ/mol (Jaoul et al. 1984, Table 1, "as is" sample W-291)database (at 10−15–10−13 s⁻¹ the quartz stresses in Fig. 5.6 are higher below 580–770 °C (up to 2.5 times at 300 °C) and lower above (down to 0.54 times at 1200 °C))
Quartz, Lu & Jiang (2019) (not used here)n=3n=4 (Lu & Jiang 2019)–

Flow stresses of crustal and mantle rocks ​

Dislocation creep of water-saturated quartz, feldspar (anorthite) and olivine at p=0.5 GPa, with the water fugacity of Pitzer & Sterner (1994). Each band spans strain rates from 10−15 (low stress) to 10−13 s⁻¹ (high stress); quartz is drawn in lighter colors above 650 °C. The piezometer estimates of the printed figure are not shown.

julia
using GeoParams, CairoMakie
PlotFlowStressTemperature()

Other laws, pressures or strain rates are passed as keywords. Each law is a named tuple with a label, the law and a color; the water variable f defaults to water saturation:

julia
quartz = [
    (label = "Tokle 2019", law = SetDislocationCreep(GeoParams.Dislocation.wet_quartzite_Tokle_2019), color = :red),
    (label = "Lusk 2021, high p", law = SetDislocationCreep(GeoParams.Dislocation.highP_wet_quartzite_Lusk_2021), color = :green),
    (label = "Lu & Jiang 2019", law = SetDislocationCreep(GeoParams.Dislocation.wet_quartzite_Lu_2019), color = :purple),
]
PlotFlowStressTemperature(; laws = quartz, P = 1.0e9)

Water fugacity and water content of olivine ​

Left: water fugacity from the equation of state of Pitzer & Sterner (1994) (colors) and from the crustal approximation of Shinevar et al. (2015), eq. (5.7) (contours every 250 MPa), with two linear geotherms (surface heat flow 50 and 100 mW/m², k=3 W/m/K, ρ=2750 kg/m³) between 20 and 40 km depth. Right: water content of olivine at water saturation, eq. (5.9), with half-space cooling geotherms (Tm=1350 °C, κ=10−6 m²/s, p=ρgz with ρ=3000 kg/m³; these values reproduce the printed geotherms to within about 50 K). The printed caption places the crustal geotherms between 10 and 40 km, but the printed lines start at about 20 km, as here.

julia
PlotWaterFugacity()

Deformation mechanism maps of dry olivine ​

Four dashpots in series (eq. 5.29): diffusion creep, dislocation creep and grain-boundary sliding of Hirth & Kohlstedt (2003) and the Peierls law of Mei et al. (2010). For a prescribed differential stress, the strain rate of each mechanism is computed with compute_εII; colors show the dominant mechanism and contours the log10 of the total strain rate. a) T=1250 °C and p=1 GPa; b) d=3 mm and p=1 GPa, Peierls creep only for T≤1250 °C; c) d=3 mm along a 100 Myr half-space cooling geotherm (Tm=1400 °C) to which a gradient of 0.15 K/km is added (chosen to reproduce the printed contours), p=ρgz with ρ=3300 kg/m³, and Peierls creep only for T≤1250 °C. The dashed line in c) is the stress at which the Peierls law of Goetze & Evans (1979) reaches 10−15 s⁻¹, but not less than 300 MPa, the lower stress limit for that law in the book's script; only the 300 MPa part is drawn in the printed figure.

julia
PlotDeformationMechanismMaps()

The mechanisms are a list of named tuples (name, law, color), optionally with Tmax [K] above which the mechanism is switched off; law can also be a function of temperature, as for the two GBS regimes. For example, the diffusion creep law of Faul & Jackson (2007) instead of Hirth & Kohlstedt (2003), without GBS and Peierls creep:

julia
mechanisms = [
    (name = "diffusion", law = SetDiffusionCreep(GeoParams.Diffusion.dry_olivine_Faul_2007), color = RGBf(0.85, 0.85, 0.83)),
    (name = "dislocation", law = SetDislocationCreep(GeoParams.Dislocation.dry_olivine_Hirth_2003), color = RGBf(0.7, 0.63, 0.48)),
]
PlotDeformationMechanismMaps(; mechanisms, yield_law = nothing)

Strength of oceanic lithosphere ​

Half-space cooling geotherms (Tm=1400 °C) for plate ages of 25, 50 and 150 Myr, creep at ε˙=5⋅10−15 s⁻¹ of "wet" (solid) and "dry" (dashed) olivine in dislocation creep (Table 5.2 of the book, Hirth & Kohlstedt 2003), limited by Byerlee's law for extension with λ=0 (heavy blue line). The thin blue line is Byerlee's law for compression with λ=0. Pressure uses ρ=2750 kg/m³ above and ρ=3300 kg/m³ below 7 km depth. Temperatures are dotted (lower axis).

julia
fig, strength = PlotOceanicStrength()
for (key, value) in sort(collect(strength))
    println(key, ": ", round(value, digits = 1), " TN/m")
end
fig

The depth-integrated strengths (0–100 km) printed above can be compared with the 8 (11) and 43 (61) TN/m quoted in the book for the wet (dry) cases at 25 and 150 Myr. The values here are 5–8 % lower. Plotting 2τII as in the book raises them to 7.6 (10.4) and 42.0 (58.2) TN/m; the remaining few percent are probably due to the integration in the book (its depth range or resolution is not stated).

Strength of continental lithosphere ​

Compression with λ=0.4 and ε˙=10−15 s⁻¹, linear geotherms for surface heat flows of 45, 65 and 85 mW/m² (k=3 W/m/K, T≤1350 °C), a 35 km thick crust (ρ=2750 kg/m³) and a dry olivine mantle (ρ=3300 kg/m³). a) The whole crust is wet anorthite (Rybacki et al. 2006); b) the upper third of the crust (11.7 km) is wet quartz (Tokle et al. 2019). The crustal laws use the water fugacity at saturation.

julia
PlotContinentalStrength()

Each panel lists its crustal layers from top to bottom, with the depth of their base; below the last layer the mantle law applies. For example, a granite upper crust over a mafic granulite lower crust:

julia
granite = SetDislocationCreep(GeoParams.Dislocation.granite_Tirel_2008)
granulite = SetDislocationCreep(GeoParams.Dislocation.mafic_granulite_Wilks_1990)
panels = [(title = "granite / granulite", layers = [(bottom = 20.0e3, law = granite), (bottom = 35.0e3, law = granulite)])]
PlotContinentalStrength(; panels, size = (550, 650))

Plotting functions ​

GeoParams.PlotFlowStressTemperature Function
julia
fig = PlotFlowStressTemperature(; laws, P = 0.5e9, εII = (1e-15, 1e-13), T_C = 200:5:1200, f = compute_water_fugacity)

Flow stress of dislocation creep versus temperature (Becker & Faccenna, Fig. 5.6). Each entry of laws is a named tuple (label, law, color) with optional fields f (water variable: a number or a function (P, T) -> f, default: the keyword f, i.e. water saturation) and light_above (°C above which the band is drawn light). Each band spans the strain rates εII. The defaults are the book's quartz, anorthite and olivine laws.

Example

julia
using GeoParams, CairoMakie
laws = [(label = "Tokle 2019", law = SetDislocationCreep(GeoParams.Dislocation.wet_quartzite_Tokle_2019), color = :red),
        (label = "Lusk 2021", law = SetDislocationCreep(GeoParams.Dislocation.highP_wet_quartzite_Lusk_2021), color = :green)]
PlotFlowStressTemperature(; laws, P = 1.0e9)
source
GeoParams.PlotWaterFugacity Function
julia
fig = PlotWaterFugacity(; P, T, heatflow = (0.05, 0.1), ages = (10, 25, 50, 150), Tm = 1623.15, kwargs...)

Water fugacity (Pitzer & Sterner 1994) with the Shinevar et al. (2015) approximation, and the water content of olivine at saturation, as functions of pressure P [Pa] and temperature T in K (Becker & Faccenna, Fig. 5.7). Linear crustal geotherms for surface heat flows heatflow [W/m²] and half-space cooling geotherms for plate ages [Myr] are overlaid.

source
GeoParams.PlotDeformationMechanismMaps Function
julia
fig = PlotDeformationMechanismMaps(; mechanisms, T = 1523.15, P = 1e9, d = 3e-3, age = 100, kwargs...)

Maps of the dominant deformation mechanism for creep mechanisms acting in series (Becker & Faccenna, Fig. 5.10): a) stress versus grain size at T, P; b) stress versus temperature at d, P; c) stress versus depth along a half-space cooling geotherm of age Myr (plus dTdz [K/m]). Contours show the total strain rate. Each entry of mechanisms is a named tuple (name, law, color) with optional Tmax [K] above which the mechanism is switched off; law can also be a function T -> law. The defaults are the dry olivine laws of the book (Hirth & Kohlstedt 2003 diffusion, dislocation and GBS, Peierls creep of Mei et al. 2010). yield_law (default Goetze & Evans 1979, nothing to omit) draws the dashed yield stress in c).

Example

julia
using GeoParams, CairoMakie
mechanisms = [(name = "diffusion", law = SetDiffusionCreep(GeoParams.Diffusion.dry_olivine_Faul_2007), color = :gray),
              (name = "dislocation", law = SetDislocationCreep(GeoParams.Dislocation.dry_olivine_Hirth_2003), color = :tan)]
PlotDeformationMechanismMaps(; mechanisms, yield_law = nothing)
source
GeoParams.PlotOceanicStrength Function
julia
fig, strength = PlotOceanicStrength(; laws, ages = (25, 50, 150), εII = 5e-15, Tm = 1673.15, λ = 0.0, kwargs...)

Strength of oceanic lithosphere (Becker & Faccenna, Fig. 5.12): creep at strain rate εII along half-space cooling geotherms for plate ages [Myr], limited by Byerlee's law in extension (pore pressure factor λ). Each entry of laws is a named tuple (label, law) with optional f (water variable, number or (P, T) -> f) and linestyle. The defaults are wet and dry olivine of Table 5.2 of the book. strength[(age, label)] is the depth-integrated strength in TN/m.

source
GeoParams.PlotContinentalStrength Function
julia
fig = PlotContinentalStrength(; panels, mantle, heatflow = (0.045, 0.065, 0.085), εII = 1e-15, λ = 0.4, kwargs...)

Strength of continental lithosphere under compression (Becker & Faccenna, Fig. 5.13) for linear geotherms with surface heat flows heatflow [W/m²]. Each entry of panels is a named tuple (title, layers), where layers lists the crustal layers from top to bottom as (bottom, law) with optional f; below the last layer the mantle law applies. Crustal laws use the water fugacity f (default: saturation). The defaults are the book's wet anorthite crust (a) and wet quartz upper crust over anorthite (b), on a dry olivine mantle.

Example

julia
using GeoParams, CairoMakie
granite = SetDislocationCreep(GeoParams.Dislocation.granite_Tirel_2008)
panels = [(title = "granite crust", layers = [(bottom = 35.0e3, law = granite)])]
PlotContinentalStrength(; panels)
source