Uh oh!
There was an error while loading. Please reload this page.
Teaching examples on the ribbon representation: crossing fault zones, and gouge width - #583
Teaching examples on the ribbon representation: crossing fault zones, and gouge width#583lmoresi wants to merge 3 commits into
Conversation
…h is for Two pages built on the finite-width (ribbon) representation, each testing a prediction rather than illustrating one. crossing-fault-zones.md answers the open question in #544: where two fused zones overlap, does the nearest-fault director reproduce an orthotropic treatment? The algebra comes first and reframes the question. In plane strain the deviatoric strain-rate space is two-dimensional and a rotation by theta rotates a state in it by 2 theta, so a weak plane occupies one LINE in that space and two planes separated by Delta in the rock are separated by 2 Delta there. Delta = 0 and Delta = 90 are therefore the same case, and the 90-degree X that "high angle" suggests is the one geometry where the rules provably coincide. Checked against the shipped Muehlhaus-Moresi tensor, which also confirms the eta -> 1/(4 eta) substitution of #539 and shows the orthotropic tensor is itself a TI tensor in 2-D, so it needs no new constitutive machinery. Measured on one mesh per angle, with the rules differing ONLY in the overlap cells and referenced to a no-fault control: the nearest-fault rule recovers 70% of the network's weakening at a 10-degree crossing, rising monotonically to exactly 100% at 90 degrees, where the two dissipations agree to seven significant figures. That null is required by the algebra and nothing was tuned to produce it. The error is largest where the issue expected none. The per-cell tensors differ most at 45 degrees, but the overlap AREA goes as 1/sin(Delta) and the area wins, so the case to worry about is the shallow crossing. gouge-zones.md takes the matched collapse eta_I = eta_1 / w and measures what it loses. It reproduces slip to 1.7% at w = 0.002 and 12% at w = 0.02, behaving as the w -> 0 limit it is. It preserves the ratio eta_1 / w and destroys the pair, so the gouge's own temperature excess, eta_1 V^2 / 8 kappa, is unrecoverable from a contact - matched to 1% at three widths with nothing fitted. Separately, a transport equation posed on a split-node mesh sees a perfect insulator: plain conduction with uniform diffusivity and no fault properties anywhere loses 19% of the flux and develops a temperature discontinuity of 0.47. Both pages record their resolution controls. The host mesh does not enter the crossing result at all (three host sizes give the same ratio to four figures); the zone mesh does, and refining it moves the nearest-fault rule closer to the orthotropic one, so the quoted percentages are bounds rather than estimates. Scripts and full working notes: ~/+Simulations/ribbon_network_2d/ Underworld development team with AI support from Claude Code
…ere is where they converge The overlap is a few tens of cells at a zone mesh of w/4, so the sweep table needed a refinement study before its numbers could be read as measurements. Halving the zone mesh twice at the two angles that carry the argument: Delta = 10: 70.0 -> 73.8 -> 75.1% (overlap 141 -> 522 -> 2051 cells) Delta = 45: 88.2 -> 93.0 -> 94.5% The increments contract about threefold in both cases, extrapolating to roughly 76% and 95%. Refinement always moves the nearest-fault rule CLOSER to the orthotropic one, so the sweep overstates the error everywhere. Corrected headline: the rule loses about a quarter of the network's weakening at the worst crossing angle, not a third. The structure of the result is unchanged - monotone in the crossing angle, exactly zero at 90 degrees, and largest at shallow crossings rather than high-angle ones. The host mesh does not enter the answer at all: 0.04, 0.03 and 0.02 give the same ratio to four significant figures because the embedded zone mesh is identical in all three. That is the embedding contract holding, and it is worth having as a measurement. Underworld development team with AI support from Claude Code
…e is no external reference Three additions from reviewing the diff wide. The 90-degree null is a property of the two-dimensional deviatoric space and nothing on the page said so. In 3-D that space has five dimensions, two weak planes at any angle occupy different subspaces, and there is no null at all. A reader carrying "a 90-degree crossing is safe" into a 3-D model would be wrong, so the page now refuses that reading explicitly. There is no external reference solution for what an overlap should be, and there cannot be one without modelling the fabric. Both orthotropic constructions are assumptions, so the measurement is a distance to a choice rather than to a truth. What makes it readable is that the two choices differ by a factor of two in overlap weakness and still bracket the answer tightly, which is now stated where the constructions are introduced rather than left for the reader to infer from the tables. At a shallow crossing the whole signal is a difference of about 0.03 between dissipations that agree to 1%. That is now said next to the metric, along with what makes it readable - the exact analytic control and the refinement study. Underworld development team with AI support from Claude Code
lmoresi
commented
Aug 16, 2026
Adversarial reviewReviewed wide — the diff, the two sweeps behind it, #544, #539, #553, and the split-node and fault-network pages this one links to. Findings first, then what we could not fault. Fixed in 519743eThe central algebraic result is two-dimensional and the page did not say so. The 90-degree null exists because the deviatoric space here has two dimensions, so two lines in it either coincide or do not. In 3-D that space has five dimensions, two weak planes at any angle occupy different subspaces, and there is no null. A reader taking "a 90-degree crossing is safe" into a 3-D model would be wrong, and the page as written invited exactly that. It now refuses the reading explicitly. We measured a distance to a choice and reported it as a distance to an answer. There is no external reference for what an overlap should be, and there cannot be one without modelling the fabric — both orthotropic constructions are assumptions. The page said "neither is obviously right" in passing and then quoted percentages as if one were. What actually carries the argument is that the two constructions differ by a factor of two in overlap weakness and still bracket the answer tightly (61.8% against 70.0% at the worst angle; 92.3% against 93.0% at 45 degrees), so the conclusion is insensitive to the assumed part. That inference was available in the tables and left for the reader to make; it is now stated. The headline is a small difference of larger numbers. At Δ = 10 the dissipations are 3.9521 and 3.9225 against a control of 4.0000 — the entire signal is about 0.03 between numbers agreeing to 1%. Now said next to the metric, with what makes it readable: the control hits the analytic 4.000000 exactly, and the refinement study moves the ratio in a controlled, contracting sequence. Standing limitations, not fixedOne point along the fault carries the gouge oracle. ΔT is measured at the fault midpoint only. The 1% agreement at three widths is strong, but nothing checks that it holds toward the tips where slip and therefore Φ fall away. The claim is about the peak, which is the quantity of interest, so this is scope rather than error — but it is untested scope. The gouge oracle's input is a probe. ΔT = η₁V²/8κ takes V from a velocity-jump probe with the ribbon's standoff convention, and V enters squared. The 1% agreement is therefore also a check on that probe, not only on the physics. It cannot be disentangled from the data we have. The sweep confounds crossing angle with fault orientation — unavoidable geometrically, since the pair is symmetric about the loading axes and two planes cannot change their mutual angle while both keep their orientation. Stated on the page; worth repeating that no absolute slip should be compared across angles. What survived
Related, unblocked by this PR#544 has its measurement and a recommendation; it can close on a modelling decision rather than more work. #539 is confirmed incidentally — the Underworld development team with AI support from Claude Code |
Two pages in
docs/advanced/, built on the finite-width (ribbon) fault representation. Each tests a prediction rather than illustrating one. Scripts and full working notes live in~/+Simulations/ribbon_network_2d/.crossing-fault-zones.md— the measurement #544 asked forThe algebra comes first, and it reframes the question. In plane strain the deviatoric strain-rate space is two-dimensional, and rotating the material by θ rotates a state in it by 2θ. A weak plane is compliant in exactly one mode, so it occupies a single line in that space; two planes separated by Δ in the rock are separated by 2Δ there.
So Δ = 0 and Δ = 90 are the same case — shear on a plane with normal x̂ is shear on a plane with normal ŷ. The 90-degree X that "high angle" suggests is the one geometry where the two rules provably coincide, and the acceptance test as #544 proposed it would have measured nothing.
Checked numerically against the shipped Mühlhaus–Moresi tensor. Two by-products: #539's
eta -> 1/(4 eta)substitution is confirmed to round-off, and the orthotropic tensor is itself a TI tensor in 2-D, so it needs no new constitutive machinery — read off an effective director and effective η₀, η₁.The measurement. Two ribbons crossing at the box centre, fused into one zone, five rheologies per angle on one mesh, differing only in the overlap cells, against a no-fault control on that same mesh. Metric is dissipation weakening, which has no probe geometry in it.
The Δ = 90 row is the experiment's negative control and it passes exactly — the two dissipations agree to seven significant figures. The algebra requires it, nothing was tuned to produce it, and it is what licenses the other six rows.
The error is largest where the issue expected none. The per-cell tensors differ most at 45°, and the curve shows no feature there. The overlap area goes as 1/sin Δ — 141 overlap cells at 10° against 24 at 90° — so the area wins. The geometry to worry about is the shallow crossing.
Resolution. The host mesh does not enter at all: 0.04, 0.03 and 0.02 give the same ratio to four significant figures, because the embedded zone mesh is identical in all three. The zone mesh does, and refining it always moves the nearest-fault rule closer to the orthotropic one — 70.0 → 73.8 → 75.1% at Δ = 10, converging near 76%. The sweep table is therefore a set of bounds, and the corrected headline is that the rule loses about a quarter of the network's weakening at the worst angle, not a third.
gouge-zones.md— what the matched collapse losesThe collapse
eta_I = eta_1 / wis checked rather than assumed: it reproduces slip to 1.7% at w = 0.002 and 12% at w = 0.02, behaving as the w → 0 limit it is.It preserves the ratio η₁/w and destroys the pair. So the gouge's own temperature excess,
is proportional to the width at fixed interface law and is zero for a contact at every width. Matched to 1% at three widths with nothing fitted — η₁ and κ are set, V and ΔT are measured independently.
Separately and more sharply: a transport equation posed on a split-node mesh sees a perfect insulator. Plain conduction, uniform diffusivity, no fault properties anywhere, no mechanics — the split mesh loses 19% of the wall flux and develops a temperature discontinuity of 0.47 across the fault. The plain-mesh control reproduces the analytic flux exactly (−0.010000), so that is the mesh and not the solver.
Things recorded so they are not re-derived
clearanceis not monotone: a 30° crossing builds only at 1.3, a 45° one at 1.0 but not 1.3. Walk a ladder and record which value was used.stokes.petsc_optionsnever reaches; on its default the velocity sub-solve hit its 200-iteration cap and warned while the outer SNES still reported convergence. Use_rotated_use_luat this size, and take the verdict from the constraint (the no-opening leak, 5.5e-17 here) rather than from a SNES reason that does not describe that solver.uw.function.evaluate— it L2-projects derivative composites (uw.function.evaluate returns negative values for a squared DERIVATIVE expression #491) and the smoothing lands on the structure being measured. Project to discontinuous degree 0, where the L2 projection is the cell average.Not included
Example 3 of the session plan (a large-scale single surface, where the contact should win outright) is blocked on #553 — the contact cannot daylight, and daylighting is the use case.
Underworld development team with AI support from Claude Code