A multiphysics model of the Achilles tendon
A computational model of how the human Achilles tendon responds to mechanical loading over time — coupling the tendon’s mechanics, the fluid and nutrient environment inside it, and the way its cells sense load and rebuild the tissue.
Built with gymnastics in mind, where the loading pattern is unusual: enormous forces applied for extremely short times.
The question it answers
Gymnasts land. A tumbling pass puts roughly 8 body weights through the Achilles for about 130 milliseconds. Intuitively that ought to be a powerful training stimulus for the tendon — it is, after all, an enormous load.
The model says it is almost the opposite. Running the activity library through the dose–response calculation:
A tumbling pass does ~520× the damage of one heavy-slow-resistance rep, while delivering ~2% of the adaptive signal.
The reason is a genuine and well-measured piece of physiology. Bohm and colleagues (2014) held tendon strain constant at ~6.5% and varied only how long each repetition lasted:
| Loading duration | Stiffness gain after 14 weeks |
|---|---|
| 130 ms (jump landings) | ~0% (not significant) |
| 3 s (heavy slow reps) | +57% |
| 12 s (single long hold) | +25% |

Tendon is viscoelastic. Load it fast enough and the tissue simply does not have time to transmit the deformation to the cells that would respond to it. So a landing-dominated training week loads the tendon hard enough to accumulate fatigue damage, but not in a way that tells it to get stronger.
That is the model’s core claim, and everything else is built to test whether it survives contact with the rest of the physiology.
What comes out
Twelve simulated weeks, same athlete, same starting tendon:
| Protocol | Stiffness | Modulus | CSA | Peak damage |
|---|---|---|---|---|
| Sedentary (walking only) | +0.7% | +0.2% | +0.5% | 0.0000 |
| Gymnastics baseline | +2.9% | +2.0% | +0.9% | 0.0006 |
| Gymnastics + 2× load spike at wk 6 | +2.9% | +2.0% | +0.9% | 0.0010 |
| Gymnastics + heavy slow resistance | +25.4% | +20.3% | +4.2% | 0.0000 |
| Heavy slow resistance only | +32.9% | +26.8% | +4.8% | 0.0000 |

These are growth metrics, and they are not the whole story — a tendon can gain stiffness while losing collagen. The health ledger below scores the same model on the variables that track tissue integrity directly.
Three things worth pulling out.
A full competitive training week barely builds tendon. Twelve weeks of tumbling, vaulting and dismounts produces +2.9% stiffness — a hard training block whose loads are enormous and whose adaptive yield is close to a sedentary control.
Doubling landing volume bought nothing and cost plenty. The load spike adds 67% more accumulated damage and exactly zero additional adaptation (+2.9% either way). The adaptive signal was already saturated; only the damage term had room to move.
Adding slow heavy loading improved both sides at once. Keeping the identical landing volume and adding heavy slow resistance three days a week gave nearly 9× the stiffness gain and drove accumulated damage down by ~25×.
That last result is the interesting one, because the damage reduction is not something the model was told to produce. It falls out of two feedback loops: the tendon stiffens, so the same landing force produces less strain, and damage climbs with an effective exponent near 18 in that range; and repair itself is funded by the loading signal, so the adaptive work also pays for the clean-up. The extra loading is protective because it is adaptive.
What stiffness hides: the health ledger at elite volume
The table above scores protocols on growth metrics — and that is a trap worth naming. Stiffness is a composite readout: fatigue damage subtracts from it, but improving matrix quality props it up, and the two can move in opposite directions at once. A tendon can be stiffening and degenerating at the same time.
To make that visible, the same 12-week analysis was re-run at a realistic elite load — twice-daily practice, six days a week, 1,200 landings per week, roughly four times the baseline above — and scored on the state variables that actually track tissue integrity: the collagen mass balance (synthesis versus MMP-driven degradation), accumulated fatigue damage, and collagen-degrading enzyme activity.
| Protocol | Collagen balance | Peak damage | MMP (vs. rest ≈ 1) | Stiffness |
|---|---|---|---|---|
| Sedentary (walking only) | −0.6% | 0.0000 | 1.1 | +0.4% |
| Elite: 2× daily, 6 d (1,200 landings/wk) | −3.7% | 0.0006 | 4.3 | +5.4% |
| Half volume (600/wk) | −4.4% | 0.0003 | 5.3 | +5.1% |
| Elite + heavy slow resistance (3 sessions/wk) | +0.6% | 0.0000 | 2.3 | +23.7% |
| Heavy slow resistance only (4 sessions/wk) | +0.6% | 0.0000 | 2.3 | +28.5% |

Three results, one of them uncomfortable.
Stiffness rises while the tendon runs a collagen deficit. The elite week reads +5.4% stiffness — apparently healthy adaptation — while load-competent collagen falls 3.7% and degradative enzyme activity runs at roughly four times homeostasis. The stiffness gain is carried entirely by matrix quality; underneath it, mass is draining. Stiffness alone is therefore a misleading health readout, in this model and plausibly in the clinic — early tendinopathic tendons also present thicker and can measure stiffer.
Halving the landing volume does not fix the balance. 600 landings per week loses collagen at least as fast (−4.4%). The deficit is not caused by the volume of damage; it is caused by what landings fail to deliver — synthesis-funding adaptive signal. Removing landings removes damage but adds no signal, so the ledger barely moves. This result is robust to the model’s least certain repair parameter: sweeping the fitted remodelling gain across a 4× range (half to double) keeps the high-volume collagen balance negative in every case (−1.3% to −6.2%).
Adding the signal flips the ledger. The identical 1,200 landings plus three heavy-slow-resistance sessions: collagen balance turns positive (+0.6%), fatigue damage falls ~15×, and stiffness more than quadruples to +23.7%. Nothing was taken away from training — a signal source was added.
Two honest caveats. The sharp collagen dip every loaded protocol shows in the first two weeks is the model starting an elite load abruptly from habitual-activity homeostasis — read it as a return-from-break transient, and as the simulation’s most vulnerable window, not steady-state behaviour. And the MMP values are end-of-block snapshots of a quantity that oscillates with the training week, so treat their ordering between similar protocols loosely.
The damage-to-adaptation ratio
analysis.py makes the trade-off explicit. A cycle here means one
repetition — one landing, one heel raise, one footstrike — not a set or a
session. Each cycle is resolved at sub-millisecond resolution and charged for
two things: the adaptive signal it delivers, and the fatigue damage it deposits.
| Activity | Peak strain | Signal/cycle | Damage/cycle | Signal per unit damage |
|---|---|---|---|---|
| Heel raise | 3.21% | 0.123 | 1.6×10⁻¹¹ | 7.7×10⁹ |
| Eccentric (Alfredson) | 3.81% | 0.885 | 2.2×10⁻¹⁰ | 4.0×10⁹ |
| Walking | 3.55% | 0.201 | 7.6×10⁻¹¹ | 2.7×10⁹ |
| Heavy slow resistance | 4.47% | 0.998 | 1.7×10⁻⁹ | 5.9×10⁸ |
| Jogging | 6.69% | 0.078 | 1.7×10⁻⁷ | 4.5×10⁵ |
| Drop landing | 6.54% | 0.021 | 1.2×10⁻⁷ | 1.8×10⁵ |
| Tumbling pass | 7.31% | 0.017 | 8.7×10⁻⁷ | 2.0×10⁴ |
| Running (5 m/s) | 8.21% | 0.038 | 5.7×10⁻⁶ | 6.7×10³ |
| Vault landing | 8.07% | 0.014 | 4.5×10⁻⁶ | 3.1×10³ |

Six orders of magnitude separate the top of that column from the bottom.
But the ratio is not a fixed property of an activity — it degrades with volume. Damage is linear in repetitions; the adaptive signal saturates after roughly 30–45 reps in a bout. So the marginal rep in a long session carries full damage and almost no signal. That, not the per-rep number, is why doubling landing volume added damage and no adaptation.
Is there a critical ratio? Not in this model
The intuition that there should be a tipping point below which degeneration begins is a reasonable one, and the model does not support it. Tumbling-only volume was swept from 30 to 960 passes per week:
| Passes/week | Final damage | Behaviour |
|---|---|---|
| 30 | 0.00004 | levels off |
| 120 | 0.00014 | levels off |
| 480 | 0.00056 | levels off |
| 960 | 0.00112 | levels off |
Damage is exactly linear in volume across a 32× range and always reaches an equilibrium — 960 passes/week gives precisely 32× the damage of 30. There is no knee and no runaway. Equilibrium damage is simply
D* = (weekly damage input) / (repair capacity funded by the weekly signal)
so degeneration in this model is a continuum, not a threshold. That happens to match the clinical continuum model of tendinopathy (Cook & Purdam) better than a tipping-point model would — but it is a model result, not a measurement, and the honest caveat is below. (There is a threshold in this model, but of a different kind — not in training volume but in the tendon’s damage state. See “Modeling to failure” further down.)
Has this ratio been determined experimentally? No
Nobody has measured adaptation-per-cycle and damage-per-cycle for tendon in commensurable units, so no critical ratio exists in the literature. What does exist, and what this model is built from:
- strain thresholds — Arampatzis brackets adaptation onset at 3–4.5%
- damage thresholds — ~2% functional, ~6% collagen denaturation
- S-N fatigue curves — Schechtman & Bader, for human foot tendon
- acute:chronic workload ratio — the closest clinical analogue, and substantially criticised on statistical grounds
The ratio here is therefore a model construct. Its value is that it is explicit and testable, not that it has been validated.
Modeling to failure: the threshold is in damage, not volume
The volume sweep above found no tipping point: a healthy tendon reaches an
equilibrium at any landing volume. But the model contains a latent failure
mechanism that those sweeps never engaged. Damage softens the tendon
(effective modulus is multiplied by 1 − D), landings are force-driven, so a
softer tendon strains more under the identical landing, and damage grows as
a steep power of strain while repair removes it only in linear proportion to
how much exists. That is a feedback loop with nothing guaranteeing stability.
failure_experiment.py probes it directly: seed a calibrated, otherwise
healthy tendon with pre-existing uniform damage D₀ and run the elite training
week (1,200 landings/wk) against it.
| D₀ (seeded damage) | Outcome after 12 weeks | Final peak damage | Stiffness |
|---|---|---|---|
| 0 | equilibrates | 0.0006 | +5.4% |
| 0.05 | heals completely | 0.0006 | +11.0% |
| 0.10 | heals completely | 0.0006 | +17.2% |
| 0.20 | runaway — crosses D = 0.5 in ~2 days | (capped) | −47% |
| 0.30–0.50 | runaway within a day | (capped) | −15 to −39% |
The knee sits between D₀ = 0.10 and 0.20, and it is a cliff, not a slope. Below it, the tendon doesn’t merely stabilise — it repairs the entire seeded lesion back to the healthy equilibrium within about eight weeks, and the transient extra strain even feeds the adaptive signal (the D₀ = 0.10 tendon ends stiffer than the healthy control — an in-model result in an untested biological regime; don’t lean on it). Above the knee, the softening loop outruns linear repair within days.
The phase map (initial damage × landing volume) shows how narrow the load-management window is:
| 300/wk | 600/wk | 1,200/wk | 2,400/wk | |
|---|---|---|---|---|
| D₀ = 0 | equilibrates | equilibrates | equilibrates | equilibrates |
| D₀ = 0.1 | equilibrates | equilibrates | equilibrates | equilibrates |
| D₀ = 0.2 | equilibrates | runaway | runaway | runaway |
| D₀ = 0.3 | runaway | runaway | runaway | runaway |
| D₀ = 0.4 | runaway | runaway | runaway | runaway |
At D₀ = 0.2 there is exactly one training answer left: a hard deload. At D₀ = 0.3 nothing in the training toolkit works at all.
The rescue question. For the marginal D₀ = 0.2 tendon, the clinical toolkit was tested head-to-head over 12 weeks:
| Strategy | Outcome |
|---|---|
| Keep 1,200 landings/wk | runaway |
| Keep 1,200/wk, add heavy slow resistance ×3 | runaway — the signal takes weeks; the loop takes days |
| Deload to 300 landings/wk | heals completely (final damage 0.0002, stiffness +31%) |
| Deload to 300/wk + heavy slow resistance ×3 | heals completely and fastest (0.00001, stiffness +52%) |
The asymmetry is the point. At the marginal damage state, adding the adaptive signal without removing landings fails — the runaway loop is mechanical and plays out in days, faster than any biology. Removing landings works, because it breaks the loop directly; adding the signal on top of the deload then roughly halves the residual damage again and doubles the stiffness recovery. In this model the deload is what saves the tendon, and the slow loading is what rebuilds it.

Read this section with more suspicion than the rest of the page. Four
caveats, in descending order of importance. First, everything past D = 0.5 is
outside the model’s validated range, and the model says so itself
(exceeded_valid_range). Second, the terminal damage value the runaway runs
settle at (~0.73) is a numerical guardrail, not a prediction: the
load-sharing amplification that drives rupture is deliberately capped in the
model precisely because the uncapped form is a rupture model and diverges. So
the model can locate the tipping point and say “runaway happens in days,” but
it cannot and does not predict rupture timing. Third, the seeded damage is
uniform across the cross-section, while real ruptures nucleate at focal
lesions in degenerate tissue (in the classic Kannus & Józsa autopsy series,
~97% of ruptured tendons showed pre-existing degeneration) — this is
structural-failure-shaped behaviour, not a model of an Achilles rupture.
Fourth, D is not clinically measurable; there is no established mapping from
“D₀ = 0.2” to anything visible on an ultrasound. The claim worth taking
seriously is the shape: degeneration is a continuum in load but a threshold
in state, below the threshold aggressive healing is possible, and above it
load modification fails — which rhymes with the reactive-versus-degenerative
distinction in the clinical continuum model, where early-stage tendinopathy
is reversible and late-stage is not.
After the bad landing: what actually protects a seeded tendon
The failure analysis says a discrete event — a short landing, a partial tear —
is what puts a tendon on the wrong side of the threshold. The natural next
question is management: a gymnast has just taken a bad landing, the seed is
below the knee, and the tendon will survive. What now? Rest? Deload? Keep
training? seed_response_experiment.py races the full toolkit over 12 weeks
from a seed of D₀ = 0.15 — edge territory, between the known-safe 0.10 and the
known-runaway 0.20:
| Strategy | Healed (D < 0.01) by | Collagen balance | Stiffness |
|---|---|---|---|
| HSR only, no landings | week 1.7 | +0.6% | +51% |
| Deload to 300/wk + HSR ×3 | week 1.9 | −1.4% | +43% |
| Full training + HSR ×3 | week 2.0 | +0.6% | +46% |
| Deload to 300/wk | week 2.6 | −4.6% | +24% |
| Full training (1,200/wk) | week 3.0 | −3.7% | +24% |
| Rest (walking only) | week 3.7 | −0.7% | +18% |
| Immobilised | never (still elevated at wk 12) | −12.6% | −22% |
(The ordering is identical for a D₀ = 0.10 seed.)

Three conclusions, one of them the actual answer to “rest or load?”
The most protective factor is loading — specifically slow, heavy loading — not rest. Repair in this model is funded by the adaptive signal, and heavy slow work delivers that signal with negligible damage deposits. The no-landings HSR arm heals twice as fast as walking rest and finishes with the strongest tendon on the board. Complete immobilisation is the worst option tested: the seed never clears, and the tendon loses an eighth of its collagen and a fifth of its stiffness — consistent with the disuse benchmark the model is validated against, and with the clinical consensus that a flaring tendon needs its load changed, not removed.
In the model, even full training heals a sub-knee seed — but that result should not be trusted into practice. The margin is the problem: the knee sits somewhere between 0.15 and 0.20, the seed size after a real bad landing is unknowable (D is not clinically measurable), and misjudging it by a little flips “heals by week 3” into “runaway in two days.” The costs are wildly asymmetric — swapping landings for slow heavy work costs nothing (it heals faster and builds more stiffness), while keeping the landings risks everything. Under that asymmetry the rational policy does not depend on knowing the seed: pull the landings, load the tendon slowly, return when the symptom-free weeks have passed.
The vulnerable window is short if you load, long if you don’t. Time spent with damage still elevated — where a second bad landing could stack onto the first and cross the knee — is under a week for every loading strategy, but nearly two weeks when immobilised at the larger seed.
The standing caveats apply with extra force here: the sub-knee healing regime leans on repair behaviour no experiment has measured at these damage levels, and the model’s tendency for a healing tendon to end stiffer than it started (the transient extra strain feeds the adaptive signal) is an in-model prediction from an untested biological regime. The robust, defensible core is the ordering — signal-funded loading beats rest, and rest beats nothing at all, by margins large enough to survive parameter uncertainty.
Training design: offsetting landing volume
Landing volume held fixed at a full competitive week; only the adaptive work
varies (analysis.py, section C):
| HSR sessions/week | Damage | vs. none | Stiffness | Landing strain, final week |
|---|---|---|---|---|
| 0 | 0.00058 | 1.00× | +2.9% | 7.88% |
| 1 | 0.00024 | 0.41× | +8.1% | 7.59% |
| 2 | 0.00008 | 0.13× | +15.6% | 7.19% |
| 3 | 0.00002 | 0.04× | +25.4% | 6.72% |
| 5 | 0.00000 | 0.01× | +43.5% | 6.01% |
The last column is the mechanism. Adaptive work pulls the strain of an unchanged landing down from 7.9% toward 6% — out of the collagen-denaturation regime. Put those through the damage law and one landing at 6.72% costs 16× less than the same landing at 7.88%; at 6.01%, 94× less. That dwarfs the small amount of damage the resistance work itself adds.
Timing, by contrast, did essentially nothing. Identical weekly content, only the placement of three HSR sessions changed:
| Placement | Damage | Stiffness |
|---|---|---|
| Same day, before tumbling | 0.00002 | +25.2% |
| Same day, after tumbling | 0.00002 | +24.9% |
| On non-tumbling days | 0.00002 | +25.4% |
Half a percentage point separates them. In this model the adaptive signal is low-pass filtered over ~2 days and mechanosensitivity recovers over ~6 hours, so weekly dose dominates and within-week placement is nearly invisible. This agrees with Tsai 2024, which found temporal coordination “rather secondary”. Treat it as a weak negative: the model contains timing mechanisms, but their effects are small next to total dose.
What is actually modelled
Three coupled physical layers on a radial slice of the tendon’s mid-portion — the “watershed” region 2–6 cm above the heel, which is both the narrowest and the worst-perfused part of the tendon, and where tendinopathy actually occurs.
1. Mechanics — mechanics.py, poro.py
- Collagen fibres are recruited progressively as their crimp is pulled straight, giving the characteristic toe region then linear region.
- Viscoelasticity via a generalised Maxwell (Prony) series — this is what makes a 130 ms landing mechanically different from a 3 s hold.
- Fatigue damage accumulates as a steep power of strain, not stress. This follows Wren 2003, who found that for Achilles tendon specifically, applied stress did not predict time to failure but initial strain did.
- Two damage thresholds rather than one: below 2% nothing accumulates; 2–6% is functional, repairable damage; above 6% collagen actually denatures.
- Load squeezes fluid out of the tissue, and that fluid has to flow somewhere.
2. Transport — transport.py
Oxygen, glucose and lactate diffusing inward from the paratenon at the surface, consumed by tenocytes along the way, with load-driven fluid flow adding convective mixing.
This layer earns its place because collagen synthesis and lysyl-oxidase cross-linking are both oxygen-dependent reactions. A cell in a poorly supplied region physically cannot build load-bearing collagen, no matter how good its mechanical signal is.
3. Mechanobiology — biology.py
Cells sense strain, and the tissue rebuilds:
- A strain threshold gates adaptation. Arampatzis’ contralateral-leg experiments — same person, same training volume, only strain differing — found 2.85% strain produced nothing and 4.55% produced +36% stiffness.
- A non-monotonic duration response (the Bohm 2014 result above).
- Refractoriness: mechanosensitivity depletes during a session and recovers over hours, which is why splitting work into several short bouts beats one long one.
- Two collagen pools. Newly synthesised collagen is not yet cross-linked and bears only a fraction of the load. This is what produces the transient post-exercise weakening window — the tendon is temporarily carrying more collagen but less mechanical competence.
- Matrix quality (cross-linking, fibril organisation) as a separate, faster state from collagen mass — because both meta-analyses agree that training stiffens tendon mainly by changing material quality, not size.
- Muscle strength adapts too, on its own clock. Leaving this out breaks the model, and including it exposes the clinically dangerous state: muscle outgrowing tendon.
Design principle: the inverted-U is an output
Many tendon models hard-code a hump-shaped strain/adaptation curve. This one does not. It specifies two competing processes, each anchored to its own literature — signal saturates with strain, damage explodes with an effective exponent near 18 at landing strains — and lets the optimum emerge. That matters because the optimum then moves: it shifts when nutrients are scarce, when recovery is short, or when the tissue is already damaged. A hard-coded hump cannot do that, and predicting when the optimum has moved out from under an athlete is the entire point.
The two hard problems, and how they are handled
Six orders of magnitude in time. A landing needs sub-millisecond resolution; adaptation takes twelve weeks. Resolving every millisecond of twelve weeks is ~3×10⁹ steps. The model uses temporal homogenisation: resolve a few representative loading cycles at fine resolution using the tissue’s current properties, extract the cycle-averaged quantities the biology responds to, then hold those constant and advance the slow biology. Re-resolve when loading or tissue state changes.
Fluid drainage doesn’t work the obvious way. Treating the tendon as a poroelastic cylinder draining to its surface gives a consolidation time of about 29 days — yet Merza (2022) measured 13.6% volume loss from a human Achilles in a protocol lasting minutes. Bulk Darcy flow is wrong by three to four orders of magnitude. The resolution is that fluid drains a short distance out of each fascicle into the low-resistance interfascicular matrix, so the drainage length is ~150 µm, not ~4.3 mm. That gives ~370 s, which reproduces Merza’s measurements including the null result for short holds.
Honesty about the parameters
Every parameter in params.py carries a source and a confidence flag:
| Flag | Meaning |
|---|---|
| A | Well-established, multiple human studies |
| B | Single good human study |
| C | Animal or other-tissue analogue substituted |
| D | Estimated, derived, or calibrated — no direct source |
Things worth knowing before trusting any number:
- No study has ever measured Achilles tendon force during gymnastics. The tumbling and vault values are extrapolated from measured ground reaction forces. They are the least defensible numbers here; treat gymnastics results as directional.
- Hydraulic permeability is unconstrained, spanning 20–400× across the literature. It should be swept, not fixed.
- No published Prony series exists for human Achilles. The viscoelastic constants were constructed to match measured hysteresis at fast and slow loading rates.
- Tenocyte metabolic rates are largely unmeasured. Transport values come mostly from cartilage and intervertebral disc.
- The oxygen gradient in a healthy tendon is modest, and the model does not inflate it. Healthy tendon is not necrotic. Damage localises here through feedback — repair is metabolically expensive, and tendinopathic tissue swells, lengthening the diffusion path — rather than through a large baseline gradient.
Validation
The model is checked against four experiments it must reproduce simultaneously —
see run_experiments.py validate. Two are training studies, one is disuse, and
one is the null case that catches drift:
| Protocol | Published | Source |
|---|---|---|
| Heavy slow resistance, 14 wk | +55% stiffness | Bohm 2014 |
| Low load (55% MVC), volume-matched | ~0% | Arampatzis 2007 |
| Immobilised, 12 wk | −25% | disuse literature |
| Sedentary, 12 wk | 0% (must not drift) | homeostasis |
The sedentary case matters more than it looks. A model that quietly drifts under no intervention will attribute its own drift to whatever training you simulate. The tendon here is explicitly calibrated so that habitual daily walking sits at exact homeostasis.
What the model does not do
One result worth stating plainly, because it is a negative one and it concerns a whole layer of the model.
The nutrient-transport layer was built partly to explain why Achilles
tendinopathy is focal — it occurs in the mid-portion watershed zone, and
degeneration concentrates in the tendon core. The model does not reproduce
that. Running perfusion_experiment.py:
| Perfusion | Core pO₂ | Core damage | Surface damage | Core/surface |
|---|---|---|---|---|
| Normal | 34.8 mmHg | 0.00204 | 0.00200 | 1.02 |
| Watershed (50% supply) | 15.4 mmHg | 0.00240 | 0.00227 | 1.05 |
| Watershed + 2× load | 15.4 mmHg | 0.00414 | 0.00392 | 1.05 |
Even with supply halved — giving a genuinely hypoxic core at 15 mmHg — and training load doubled, damage is only 5% higher at the centre than at the surface. There is no focal lesion.
What the transport layer does do is change the magnitude: halving perfusion raises total accumulated damage by ~18%, because repair is nutrient-gated and a poorly supplied tendon heals more slowly. So in this model perfusion governs how much damage accumulates, not where.
The reason is structural. Strain is uniform across the cross-section, so damage accrues uniformly, and the repair gradient across a 4.3 mm radius is too shallow to concentrate it. Producing a genuine focal lesion would need something this model does not have — a local stress concentration, a pre-existing defect, or resolved along-tendon geometry rather than a single cross-section.
That is a real limitation, not a tuning problem, and it is the most useful thing to fix next.
The model is an academic exercise, built to make the trade-offs explicit and testable — not a production tool. The full code, parameters (each tagged with its evidence grade), and tuning notes are available from Sarah on request.