Composed friction partition - #1764
Open
IvarStefansson wants to merge 7 commits into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #1762 — the base branch is
damage-dissipation-scale, notdevelop.Introduces the fracture friction law of Stefansson et al. (in preparation): friction on
surfaces inclined by the dilation angle, a stress-dependent split between climbing over
asperities and shearing through them, and the wear of both. The damage driver is
unchanged in this PR, so the history variable keeps the meaning it has on #1762.
Three constitutive layers
Each layer modifies the one below through
super(), and each is usable without the onesabove it.
DilationRotatedFrictionintroduces no new material constants —μ_bandψ₀are thefriction_coefficientanddilation_anglealready inSolidConstants— soany model with
ShearDilationcan take Patton'stan(φ_b + ψ)on its own. Verified on aplain
MomentumBalancewith plainSolidConstants:0.776777313376againsttan(arctan(0.6) + 0.12) = 0.776777313376.FrictionDamageandDilationDamagemerge into oneFractureDamage: the composedcoefficient contains both damage states, so neither channel can be mixed in alone any
more. A channel is switched off by
d₀^α = 1rather than by omitting a mixin, and thetwo identical softening bodies are now one private helper.
New constants live in
AsperityContactSolidConstants, whichFractureDamageSolidConstantsinherits from, so a model wanting
σ_Tneed not instantiate a damage constants class.transitional_normal_tractiondefaults to infinity, holdinga_s ≡ 0and leaving thepartition inert; the
1.0its neighbours use would pina_s = 1— silent full ploughingunder any real traction.
A behavioural change worth flagging
The friction floor moves. Previously the damage state multiplied the whole coefficient,
so it decayed to
d₀^f·μ_b; now it multiplies only the ploughing term, and the floor isμ_bitself — the rock surfaces' own friction, which no amount of asperity wear removes.d₀^f = 0becomes admissible, and is the physical statement: asperities worn flat ceaseto plough.
In the
dilation_angle = 0fixture used by the integration tests this raisesμfrom0.006789to0.010000. Downstream parameterisations that relied ond₀^fto set thefriction floor need revisiting.
Commits
ENH: Tangent of the dilation angle as a constitutive methodShearDilationENH: Stress partition of asperity contacta_s = 1 − clip(1 − σ_n/σ_T, 0, 1)^KAPI: Widen the damage constant accessors to OperatorMAINT: Merge the dilation and friction damage constitutive mixinsMAINT: Remove the spurious mated gap from the damage exampleENH: Composed friction coefficient and damaged mated gapTST: Retune the fourth-step damage length toleranceVerification
Three of the six substantive commits are results-neutral and were gated on the twelve
pinned configurations ({2D, 3D} × {isotropic, anisotropic} × {dilation, friction, both}),
comparing damage states, softening exponents, contact traction, displacement jump,
friction bound and fracture gap:
tangent_dilation_angleextractionThe law itself has no neutrality gate, so the substitutes are exact identities:
μ* → tan(φ_b + ψ₀)asσ_n → 0andμ* → μ_b + μ_p0atσ_n = σ_T, both withΛ = 0. Ties the partition, the dilation scaling and the tangentaddition to one closed form that none of them contains.
σ_n > σ_T. This is the clip-before-power test: with theclip applied afterwards the base is negative and a non-integer power of it is complex,
so the failure is not a wrong number.
σ_Tasserted as an observed rate: quartering the step halves thecentred difference, pinning
K − 1 = 0.5in the derivative. A hard switch would give aquotient growing as
1/h, a linear ramp one constant inh.(σ_n, Λ)grid, againstfriction_coefficient − tangent_dilation_angle.μ_b·tanψ₀ ≥ 1, and does not fire for an admissiblesteep angle.
pytest tests/models/ tests/compositional/ tests/numerics/: 2068 passed, 353 skipped,1 xfailed.
The retuned tolerance is the one place the new law required an existing test to change.
test_fracture_damage.pycompares the fourth-step damage length against the prescribedtangential boundary displacement, which the plastic jump only approaches — part of the
motion is taken up elastically, and that share grows with the friction coefficient. With
the floor at
μ_bthe shortfall goes from 0.208% to 0.306%, crossing anrtolof 3e-3that had little margin to begin with. Widened to 1e-2, which still catches a missing
absolute value, a wrong projection or a spurious factor.
Two notes for review
The
API:commit overlaps #1762.σ_Tneeds to be anOperatorrather than aScalarso a heterogeneous asperity strength stays expressible, and the same argumentapplies to the wear energy scales and residual damage accessors introduced in #1762. They
are widened here rather than by amending #1762, to avoid force-pushing a PR under review —
so #1762's reviewer sees signatures this branch changes three commits later.
MAINT: Remove the spurious mated gapis a prerequisite, not housekeeping. The damageexample inherited
fracture_gap = 1e-3from granite, cancelled by a normal boundarydisplacement of
0.98e-3. Once the mated gap is damageable,(1 − d₀^d)·g₀ = 4e-4 mofaperture collapse against a
2e-5 mcontact margin diverges at the first time step.