Skip to content

Faults: to mesh or not to mesh? (UWTN 2026-017) - #54

Merged
lmoresi merged 20 commits into
mainfrom
note/putting-a-fault-in-a-mesh
Sep 20, 2026
Merged

lmoresi merged 20 commits into
mainfrom
note/putting-a-fault-in-a-mesh

Conversation

@lmoresi

@lmoresi lmoresi commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

UWTN 2026-017, Louis Moresi and Thyagarajulu Gollapalli. The frame the fault series hangs on: why a fault is not a shear band, the three implementations Underworld3 offers (weak zone, weak zone with a direction, cut) and whether to mesh for each, and where the band and the cut agree — on a strand, provided eta_1/w is held — and where they cannot: at a junction, and at a stepover closed to one element.

Publish now; hold the deposit. The sibling notes are in preparation and this one will cite them inline by DOI at 1.1.0, which is when it should be deposited. Leave the "Deposit:" pull request that deposit-ready opens after this merge unmerged until then.

Also in this branch, as its own commit (937ea50): the house table style — every markdown table centred, horizontal hairlines only, header row in the theme blue — in the PDF template and the site CSS. It lands with the note.

Three figures, all with alt text and generating scripts in examples/; the comparison figure comes from the S-fault rig in uw3-fault-workflows. Seven pages.

Underworld development team with AI support from Claude Code

🤖 Generated with Claude Code

https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS

lmoresi and others added 19 commits September 10, 2026 11:14
Drafted 23-24 August and never committed, so two weeks of outline, five
figures and nine example scripts lived only in a worktree. Committing it
also closes the allocator's blind spot: `ids_on_branches` searches every
ref, but a note that has never been committed is invisible to it, and
2026-017 was offered a second time on 8 September exactly as 2026-012
was offered twice before.

The outline stands as written. It frames the fault against the shear
band, separates saying WHERE the fault is from saying HOW to model it,
sets out the four representations in a table, and carries the S-bend
worked example with the split-versus-TI comparison and the series
roadmap.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
The note asked "how do I put a fault in a mesh"; the reader's question is
whether to. Leading with the free options — a shear band the rheology
localises on its own, and a prescribed fault painted as a director the
mesh never learns about — makes meshing a cost with a reason attached,
and gives the four representations a spine, from the mesh knowing
nothing to the mesh conforming and being cut.

The comparison section is rewritten on the newer measurements: on a
single strand the two representations converge, provided eta_1/w is what
is held fixed rather than eta_1; at a junction they do not, and it is not
resolution. A band can fork, two cuts cannot without sharing a node, so
a cut network leaves an intact ligament that carries load. The band's
junction conserves slip; the cut's is 25 to 40% short.

Two TODO(LOUIS) markers left where the content is judgement rather than
measurement: the thesis paragraph on what forces you up the ladder, and
the practical rule for a network.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
Brings the branch up to date after 14 commits — the house-style checker,
the outstanding report, analytics injection — and the note now passes
check_style.py cleanly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
The merge brought five tests the note had never been held to: it was
unclassified, carried no discussion block, its archival PDF was
unbranded, and three example scripts hard-coded a path under my home
directory. The description also still described the old frame.

The examples now take their output directory from SF_OUT, defaulting to
the working directory, so they run wherever they are unpacked.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
The table listed them in no particular order. Ordered by what the mesh
is asked to do — nothing, resolve, resolve, conform and cut — it becomes
the answer to the title's question, and the width column reads across as
the trade: physics for the first three, a mesh convenience for the last.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
Paragraphs, list items and figure captions are one line each. Front
matter, tables, fenced blocks and the discussion block are untouched.
The reflow was gated on the word sequence being identical before and
after, so nothing was reworded.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
The note's anisotropic representations are not new machinery, and the
draft introduced the painted director as if they were. Moresi and
Mühlhaus formulate large-deformation Mohr-Coulomb failure as an
orthotropic viscous rheology; Sharples and co-authors use the resulting
anisotropic frictional rheology to study how rifts organise and how far
apart their faults sit. Both cited by DOI, both verified to resolve in
the built page's reference list.

Author details taken from authors.yml rather than retyped. The article
was also missing from the table of contents, so it had never built.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
He moved at the start of the year; the affiliation was transcribed from
the JOSS paper, which predates the move. Corrected in authors.yml so
every future note inherits it, with a comment saying why the JOSS
paper disagrees, and in this note's two copies.

The remaining Monash entry is John Mansour's, untouched. The JOSS
citation on the how-to-cite page is a fixed published record and is
also untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
…ot a review

The previous paragraph claimed the anisotropic rheology had been used to
carry faults in convection models. It had not — those models mostly went
the damage route — and the sentence was pulling the note toward
localisation, which is the neighbouring argument rather than this one.

Now four citations doing four jobs. Weak zones for plate margins since
the 1980s (Davies), the same idea still carrying a subduction interface
(Sandiford & Moresi), the directional version the band representations
here use (Moresi & Mühlhaus), and the slippery-node precedent at the
other end of the ladder (Zhong & Gurnis) — whose mesh was a hexahedral
grid nudged towards the fault rather than conforming to it, which is the
gap this series is about.

All four verified by reading the built page's reference list, not by
trusting the identifiers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
Moresi and Muhlhaus give the rheology; Sharples and co-authors are where
it is put to work on faults, which is the step this note's band
representations inherit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
Three forward references removed: the band representations "below", the
detail going "to the notes that follow", and a precedent at "the other
end of the ladder" that pointed at a ladder the reader had not been
shown. Each spent a sentence on scaffolding instead of on the argument.

The separation of where the fault is from how it is modelled is the
thesis of both Zhong & Gurnis and Sandiford & Moresi, so it is cited at
the point it is stated rather than left as an assertion.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
…d the stress-and-slip figure from the rig, citations where the ideas are

The four-representation table becomes three things and whether to
mesh for them, with XFEM in the cell the split cannot fill. One
three-panel anatomy figure (ribbon, painted band, split) on one bent
mesh replaces the split figure; the geometry figure is regenerated from
the rig with the Y, the en-echelon array and both stepovers; the
comparison figure is cut against band at w = 0.005 on one stress and
one slip scale, with the stepover closed to one element. Figures are
named and cross-referenced; every figure has alt text.

The precedent paragraphs dissolve into the sentences they support:
Davies at plate boundaries as prior knowledge, Moresi & Muhlhaus at the
TI ribbon, Zhong & Gurnis at the general cut, Yang et al. at the
stress concentrations of the painted band. Generating scripts for
every figure ship in examples/.

Underworld development team with AI support from Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
Panel order now follows the table's columns — the mesh untouched, then
the mesh made to conform, then the cut — with caption, alt text and
the prose references swapped to match.

Underworld development team with AI support from Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
MyST renders every markdown table as tablex(..tableStyle, ..columnStyle)
with both dictionaries empty in its generated import, so the PDF
template shadows them after that import: horizontal hairlines and no
verticals, the header row filled in the theme blue with light sans
text, the body at 9pt, the table centred. static/uwtn.css carries the
same design to the site for both colour schemes.

Underworld development team with AI support from Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
The geometry figure at 60%, the anatomy at 72%, the stress-and-slip
panel at 64%; nine pages become seven and no figure takes a page alone.

Underworld development team with AI support from Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
Status published, the date set, and the ten figures and scripts the
note no longer references removed, so figures/ holds exactly the three
it uses and examples/ exactly their generators. The deposit waits for
the sibling notes' DOIs, to be cited inline at 1.1.0.

Underworld development team with AI support from Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
The preview failed on CI because doi.org would not answer for one DOI
or another on the runner — Zhong & Gurnis and Sandiford & Moresi on
2026-09-11, Yang et al. on 2026-09-18 — and MyST then produced no PDF.
The repository's rule already covers it: resolve once, pin the BibTeX
beside the article, cite by key, so the build never depends on doi.org
answering.

Underworld development team with AI support from Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
…he concurrent PDF build

Typst downloads a package into a per-user cache on first import, MyST
compiles the archival PDFs concurrently, and a CI runner's cache is
always cold — so every compile that starts together downloads the same
package into the same directory and the losers die. Two contenders got
away with it; when the template began importing @preview/tablex for the
house table style every article became one, and four PDFs died on the
first cold runner (PR #54). The serial first-target build was not
warming the cache in either run.

The packages the template imports are read from the template files and
compiled from a stub, serially, before MyST starts. Verified on a cold
cache via TYPST_PACKAGE_CACHE_PATH.

Underworld development team with AI support from Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
@github-actions

github-actions Bot commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Preview

Or the whole site.

Built from 3f42d18. Shows notes at draft and review, which the published site withholds. Not indexed, no comments, and not the citable version. Confirmed serving this commit before this was posted.

eta_1 is defined where the TI rheology is first described — the second,
smaller viscosity for shear on the fault plane, against the background
eta_0 — and every occurrence is now the symbol rather than its python
spelling, in the prose, both tables and the figure caption.

The bottom row of the comparison figure had no text: two collinear
segments butted end to end with one element between them, which the cut
cannot close and the band does.

Underworld development team with AI support from Claude Code

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzK7JXSxsc2GoG7TGnQgUS
@lmoresi
lmoresi merged commit d05171e into main Sep 20, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant