Training Zone Models
Standalone web version of the bundled PRhealthier Lactate Test reference document.
Inline citations deliberately mix two source types: published framework / physiology references for scientific or historical claims, and current app implementation references for product-behavior claims. That split is intentional so it is clear what comes from the underlying training frameworks versus what comes from the current codebase.
The app organizes its zone models into two distinct families:
| Family | What it is | When to prefer it |
|---|---|---|
| Physiologic | Zones derived from this athlete’s own measured curve – individualized LT1 + Modified Dmax + fixed 4.0 mmol/L crossing | When the curve resolves cleanly and you want zones tailored to the athlete’s specific aerobic-to-threshold transition |
| Framework-derived | Published zone-fraction structures (Olympiatoppen, Coggan-derived, Daniels-derived, Friel-derived) applied once LT2 is known on each axis | When you want the familiar coaching language of an established framework, applied with a stable reference point. More reproducible test-to-test; less individualized. |
The picker is sport-scoped:
- Cycling: 5-Zone (Calculated LT1/LT2), Olympiatoppen, Friel-derived, Coggan-derived
- Running: 5-Zone (Calculated LT1/LT2), Olympiatoppen, Friel-derived, Daniels-derived
The default is 5-Zone (Calculated LT1/LT2) because it uses the app’s own calculated threshold landmarks from this athlete’s test rather than a published fixed-fraction framework. The framework-derived models (Olympiatoppen, Coggan-derived, Daniels-derived, Friel-derived) remain available when the curve resolves poorly or when familiar coaching language matters more than individualization.[9][11]
Why two families instead of one
Coaches sometimes ask whether the Olympiatoppen zones in this app are the same as the original Olympiatoppen framework. In this case, the answer is much closer to yes than for the other imported frameworks, because the current Olympiatoppen reference explicitly publishes the multi-axis LT2-anchored fraction structure. Here’s the distinction:[2][9]
- The original Olympiatoppen / Norwegian framework was developed against heart-rate-centered intensity zoning and later practical field use in Norwegian endurance sport. The zone fractions (
< 0.78,0.78–0.89, etc.) are population-level framework fractions, not individualized values for a single athlete.[1][2] - In this app, those same fractions are applied to the athlete’s own fixed 4.0 mmol/L crossing per axis. That matches the current Olympiatoppen operational framing: once LT2 is measured on each axis, the same five-zone fraction structure can be applied across HR, power, and pace.[2][9][11]
The same logic applies to Coggan (originally FTP-anchored), Daniels (originally VDOT-anchored), and Friel (originally threshold-anchor-based): in the app, all four are re-anchored on the fixed 4.0 mmol/L crossing per axis. Each model carries an in-UI caveat noting the qualitative direction of the expected shift compared to the original framework’s anchor – see the Re-anchoring caveats section.[3][4][5][9]
The 5-Zone (Calculated LT1/LT2) model is fundamentally different from any of these. It anchors on the athlete’s own calculated threshold landmarks from this specific test: individualized LT1 from the five-tier detection chain, a calculated middle landmark from Modified Dmax or fallback logic, and the fixed 4.0 mmol/L crossing at the top. If the middle boundary would collapse against LT1 or LT2 on a given axis, the app first tries the midpoint of the LT1→LT2 band; if even that midpoint is too compressed to produce trainable interior zones, the model becomes unavailable on that axis rather than fabricating a false split.[9][11]
Why 5-Zone (Calculated LT1/LT2) is not the same as Olympiatoppen
Both models produce a five-zone structure anchored on an LT2 landmark, and at first glance they can look interchangeable. They are not. The two families differ in how the sub-LT2 boundaries are derived, and that single design choice produces the most important practical distinction in the app’s zone catalog.
- Olympiatoppen uses population-average fractions of LT2 (
0.78,0.89,0.95) for the Z1/Z2/Z3/Z4 boundaries. The Z1/Z2 boundary at0.78 × LT2is the framework’s implicit population-average LT1. Every athlete is treated as having LT1 at the same fractional position relative to their own LT2. - 5-Zone (Calculated LT1/LT2) uses the athlete’s measured LT1 (from the five-tier detection chain) as a real boundary, plus a curve-shape Modified Dmax middle anchor. Sub-LT2 zones are individualized from this athlete’s specific curve, not population-averaged.
In design-philosophy terms: Calculated LT1/LT2 is a dual-anchor model (LT1 + LT2, both measured on this athlete); Olympiatoppen is a single-anchor model (LT2 measured; LT1 implied by population average).
The two models converge for athletes whose measured LT1/LT2 ratio is close to 0.78. They diverge – sometimes meaningfully – for athletes whose ratio sits elsewhere:
| Athlete profile | Typical measured LT1/LT2 ratio | Calculated LT1/LT2 vs Olympiatoppen |
|---|---|---|
| Trained endurance, wide aerobic plateau | ~0.65 – 0.75 | Calculated puts Z2 lower than Olympiatoppen |
| “Population-average” athlete | ~0.78 | Approximately equivalent |
| Untrained or anaerobic-dominant, compressed aerobic range | ~0.82 – 0.88 | Calculated puts Z2 higher than Olympiatoppen |
Most trained endurance athletes have ratios meaningfully below 0.78, so for them the two models will produce different Z1/Z2/Z3 boundaries. Above LT2 (Z4/Z5) the boundaries are essentially the same.
This is a deliberate design trade, not a bug in either model:
- Calculated LT1/LT2 trades robustness for individualization. It uses the most patient-specific information available but depends on LT1 detection resolving cleanly. On linear or noisy curves where the LT1 chain falls through to its semi-log rescue or fixed-2.0 fallback, the resulting zones inherit that uncertainty.
- Olympiatoppen trades individualization for robustness. It accepts a population-average LT1 location in exchange for boundaries that don’t depend on noisy LT1 detection at all. On the same flat-curve test where Calculated LT1/LT2 would collapse, Olympiatoppen still produces stable bands.
The two models are therefore complementary, not redundant. Calculated LT1/LT2 is the right default when LT1 resolves cleanly (the Estimate Confidence Tier is a usable proxy for this). Olympiatoppen is the right fallback when the curve is too linear to support a measured LT1, or when the coach prefers a model that doesn’t move test-to-test as the LT1 detection tier changes.
A subtler point worth flagging: Olympiatoppen’s institutional lab practice in elite Norwegian endurance sport typically identifies LT2 via curve-shape methods (Modified Dmax, lactate turnpoint, or the first sustained ≥1 mmol/L stage rise), not via the fixed 4.0 mmol/L crossing. The 2024 Olympiatoppen tool itself is anchor-method-agnostic – it accepts whatever LT2 the user supplies and applies the fractional structure around it. The app’s choice to anchor the Olympiatoppen-derived bands on the fixed 4.0 crossing is a reproducibility-first implementation; an elite Norwegian lab might use a measured curve-shape LT2 instead. Both are valid Olympiatoppen-compatible inputs; the app uses the more stable anchor.[2][7][9]
Anchoring strategy – how each family works
- Framework-derived models (Olympiatoppen, Coggan-derived, Daniels-derived, Friel-derived). Each axis is anchored once LT2 is known on that axis. For Olympiatoppen, the current published tool explicitly uses the same LT2-anchored fraction structure across HR, power, and pace. For Coggan-, Daniels-, and Friel-derived, the app adapts the original framework’s fraction structure to the fixed 4.0 mmol/L crossing measured on the relevant axis. This is not the same as the individualized LT2 (Modified Dmax / Classic Dmax) that appears in the Estimate Summary – individualized LT2 drives Predicted VO₂max, FTP Estimate, and the LT2 row, but not those framework-style zone bounds.[7][9][11]
- 5-Zone (Calculated LT1/LT2). The only model that uses calculated threshold landmarks from this athlete’s test directly as zone anchors. LT1 follows the full five-tier detection chain (strict → relaxed → lenient → semi-log rescue → fixed 2.0 fallback). The middle boundary uses the Modified Dmax point (or Classic Dmax fallback) when it yields a usable split on the selected axis; otherwise the app falls back to the midpoint of the LT1→LT2 band on that axis, or suppresses that axis entirely if the band is still too compressed. Minimum-gap guards are applied on the displayed axis itself, so very sparse running protocols can now suppress the pace-axis model instead of emitting a collapsed Z3. The upper boundary uses the fixed 4.0 mmol/L crossing.[9][11]
The 4.0 mmol/L crossing is a population-derived reference. It can over- or under-estimate a specific athlete’s true maximal lactate steady state (MLSS), so every framework-style model that depends on fixed LT2 anchoring carries the caveat below. The Estimate Confidence Tier moderates how far to trust either family on a given test.[6][7][11]
Framework-derived models
The four models below are published zone-fraction structures re-projected onto this athlete’s fixed 4.0 mmol/L crossing. Use them when you want familiar coaching language with stable test-to-test reproducibility. They preserve framework structure, not framework-original anchoring. They are therefore labeled as derived rather than presented as the canonical original frameworks.[2][3][4][5][8]
Olympiatoppen
Olympiatoppen is the elite-performance department of the Norwegian Olympic and Paralympic Committee and the institutional source of the five-zone intensity scale used across Norwegian high-performance endurance sport. The current Olympiatoppen reference publishes the same LT2-anchored fraction structure across HR, power, and pace once LT2 is measured on each axis. In this app, those fractions are applied to the fixed 4.0 mmol/L crossing on each axis.[1][2][8][9]
| Zone | Label | Fraction of fixed 4.0 mmol/L anchor |
|---|---|---|
| Z1 | Recovery | < 0.78 |
| Z2 | Aerobic | 0.78 – 0.89 |
| Z3 | Tempo | 0.89 – 0.95 |
| Z4 | Threshold | 0.95 – 1.00 |
| Z5 | VO₂max | > 1.00 |
When to choose it over the default 5-Zone (Calculated LT1/LT2):[9][11]
- The athlete has a near-linear curve where Modified Dmax converges close to LT1 and would collapse Z3 in the physiology model.
- The Estimate Confidence Tier is red and the curve-shape methods can’t be trusted.
- You want zone reproducibility across tests over individualization (every boundary is anchored on the same fixed reference, so test-to-test drift is minimal).
- You want the familiar Olympiatoppen coaching language.
Coggan-derived
Cycling-only model derived from the Coggan framework, which is traditionally anchored to FTP. In the app it is re-anchored on the power at the fixed 4.0 mmol/L crossing (the cycling-power axis of the Mader / OBLA reference).[3][7][8]
Bounds are inclusive on both sides. The displayed decimal “gaps” (for example 0.75 then 0.76) are typographic rounding only; the engine’s underlying table has no gaps and assigns each fractional value to exactly one zone.[8]
| Zone | Label | Fraction of fixed 4.0 mmol/L anchor |
|---|---|---|
| Z1 | Active Recovery | < 0.55 |
| Z2 | Endurance | 0.55 – 0.75 |
| Z3 | Tempo | 0.76 – 0.90 |
| Z4 | Threshold | 0.91 – 1.05 |
| Z5 | VO₂max | 1.06 – 1.20 |
| Z6 | Anaerobic | 1.21 – 1.50 |
| Z7 | Neuromuscular | > 1.50 |
Daniels-derived
Running-only model derived from the Daniels framework, which is traditionally anchored to threshold pace / VDOT. In the app it is re-anchored on the running speed at the fixed 4.0 mmol/L crossing, then converted back to pace for display.[5][8]
| Zone | Label | Fraction of fixed 4.0 mmol/L speed anchor |
|---|---|---|
| E | Easy | < 0.84 |
| M | Marathon | 0.88 – 0.93 |
| T | Threshold | 0.98 – 1.02 |
| I | Interval | 1.10 – 1.14 |
| R | Repetition | > 1.19 |
Friel-derived (Cycling)
Cycling model derived from the Friel framework and re-anchored on the power and heart-rate values at the fixed 4.0 mmol/L crossing. Heart rate uses Friel’s seven-zone threshold-heart-rate table; power uses his six-zone FTP table.[4][8]
| Zone | Label | Fraction of LT2 HR | Fraction of LT2 power |
|---|---|---|---|
| Z1 | Recovery | < 0.81 | < 0.55 |
| Z2 | Aerobic | 0.81 – 0.89 | 0.55 – 0.74 |
| Z3 | Tempo | 0.90 – 0.93 | 0.75 – 0.89 |
| Z4 | SubThreshold | 0.94 – 0.99 | 0.90 – 1.04 |
| Z5a | SuperThreshold | 1.00 – 1.02 | – |
| Z5b | Aerobic Capacity | 1.03 – 1.06 | – |
| Z5c | Anaerobic Capacity | > 1.06 | – |
| Z5 | VO₂max | – | 1.05 – 1.20 |
| Z6 | Anaerobic | – | > 1.20 |
Friel-derived (Running)
Running model derived from the Friel framework and re-anchored on the running speed and heart-rate values at the fixed 4.0 mmol/L crossing. Pace fractions are converted to speed (speed % = 100 / pace %) so the rest of the pipeline applies them as fractions of LT2 speed.[4][8]
| Zone | Label | Fraction of LT2 HR | Fraction of LT2 speed |
|---|---|---|---|
| Z1 | Recovery | < 0.85 | < 0.775 |
| Z2 | Aerobic | 0.85 – 0.89 | 0.775 – 0.877 |
| Z3 | Tempo | 0.90 – 0.94 | 0.885 – 0.943 |
| Z4 | SubThreshold | 0.95 – 0.99 | 0.952 – 1.010 |
| Z5a | SuperThreshold | 1.00 – 1.02 | 1.000 – 1.031 |
| Z5b | Aerobic Capacity | 1.03 – 1.06 | 1.042 – 1.111 |
| Z5c | Anaerobic Capacity | > 1.06 | > 1.111 |
Physiologic zones
The model below is derived from this athlete’s own measured curve rather than a published fraction structure. Use it when the curve resolves cleanly and you want zones tailored to this athlete’s specific aerobic-to-threshold transition. Less reproducible than the framework-derived models (because Modified Dmax is curve-sensitive), but more individualized.[9][11]
5-Zone (Calculated LT1/LT2)
The app’s default zone model. Five-zone structure anchored on the app’s own calculated threshold landmarks from this athlete’s test: individualized LT1 plus the Modified Dmax point plus the fixed 4.0 mmol/L crossing. LT1 follows the full five-tier detection chain (strict → relaxed → lenient → semi-log rescue → fixed 2.0 fallback, see Calculation Methods), so the resulting zones can inherit a Semi-log rescue LT1 when the baseline tiers fail on this curve.[9][11]
Boundary anchors:
0.9 × LT1 (Individualized)– Z1/Z2 boundaryLT1 (Individualized)– Z2/Z3 boundary- Modified Dmax (or Classic Dmax fallback) – Z3/Z4 boundary when it remains practically separable on the selected axis; otherwise midpoint of the LT1→LT2 band on that axis, or no physiology zones on that axis if the band remains too compressed
- Fixed
4.0 mmol/Lcrossing on the axis – Z4/Z5 boundary
Why “Calculated LT1/LT2” rather than “Dmax”: the model uses three different calculated landmarks from the test (individualized LT1, Modified Dmax-derived middle point, fixed LT2), not Dmax alone.[9][11]
For backward compatibility, the persisted identifier in saved settings and older exports still remains 5-Zone (Dmax), so historical CSV/PDF comparisons may show the legacy string even though the user-facing label is now 5-Zone (Calculated LT1/LT2).[9][11]
When to choose it over a framework-derived model:[9][11]
- The athlete’s curve has clean shape – clear inflection, peak above 4.0 mmol/L, ≥ 6 stages.
- You specifically want zones built around the athlete’s own LT1 rather than a percentage of the 4.0 mmol/L crossing.
- The Estimate Confidence Tier badge is green or orange. If it’s red, prefer a framework-derived model – its fixed-4.0 anchoring is more dependable when the curve shape is weak.
When it can collapse (and the framework-derived models beat it):[9][11]
- Highly trained athletes with near-linear curves where Modified Dmax converges close to LT1, leaving the app to use the midpoint fallback for the Z3/Z4 split.
- Tests with too few above-threshold stages where Dmax can’t resolve a clear inflection.
In those cases the LT2 ≥ LT1 guard still catches the worst failures (rejecting Dmax candidates below LT1 – see the LT2 (Individualized) row’s “below LT1 – rejected” capsule). If the raw Dmax-derived split collapses on a specific axis, the app first tries a midpoint fallback and then suppresses that axis entirely if the physiologic band is still too narrow. The framework-derived models remain reliable alternatives when you want a fully fixed-fraction structure that does not depend on Modified Dmax at all.[9][11]
Re-anchoring caveats
Because crosswalk models were originally anchored on FTP, VDOT, or threshold-heart-rate anchors[3][4][5] – not on the fixed 4.0 mmol/L crossing – re-anchoring may shift their published boundaries relative to the original framework.[9] The app does not currently provide quantified shift estimates because no peer-reviewed source quantifies these shifts across a representative athlete population. Each model carries an in-UI caveat noting the qualitative direction of the expected drift; future versions may add empirical observations as data accumulates from validated comparisons.[11]
| Model | Direction of expected shift vs. original anchor |
|---|---|
| Olympiatoppen | HR-axis bounds can still differ from older HRmax-based shorthand; the current published tool uses LT2 as the anchor |
| Coggan-derived | Power-axis bounds may shift because the lactate 4.0 crossing is not identical to FTP for every athlete |
| Friel-derived (Cycling / Running) | HR-, power-, and pace-axis bounds may shift relative to the LTHR/FTP/pace-anchored published version |
| Daniels-derived | Pace-axis bounds may shift relative to the VDOT-anchored version, with largest drift expected at the E and I extremes |
Zone-boundary uncertainty
Each zone boundary shown in Practical Training Targets is the centre of a band, not a hard line. A single caption below the grid reports the band width as a percentage (from the LT1/LT2 bootstrap half-widths) and as per-axis concrete widths like ±11 W · ±5 bpm · ±14 s/km.[11]
Derived axes
Some frameworks do not publish every axis natively. In those cases the app derives the displayed axis from the framework’s native fractional structure, and marks the column header with “(derived)” so the coach knows the values came from a cross-axis inference.[8]
See also
- Calculation Methods (open from the documentation menu) – the full threshold-to-zone pipeline, including the LT2 ≥ LT1 guard, bootstrap uncertainty, and the Estimate Confidence tier that moderates how far to trust the zones.
References
- Seiler S. What is best practice for training intensity and duration distribution in endurance athletes? Int J Sports Physiol Perform. 2010;5(3):276–291.
- Olympiatoppen intensity scale tool. Available from: https://olt-skala.nif.no/en
- Allen H, Coggan AR. Training and Racing with a Power Meter. 3rd ed. Boulder (CO): VeloPress; 2019.
- Friel J. The Triathlete’s Training Bible. 4th ed. Boulder (CO): VeloPress; 2016.
- Daniels J. Daniels’ Running Formula. 4th ed. Champaign (IL): Human Kinetics; 2021.
- Faude O, Kindermann W, Meyer T. Lactate threshold concepts: how valid are they? Sports Med. 2009;39(6):469–490.
- Beneke R. Methodological aspects of maximal lactate steady state – implications for performance testing. Eur J Appl Physiol. 2003;89(1):95–99.
- PRhealthier Lactate Test source:
CrosswalkTables.swift. - PRhealthier Lactate Test source:
ZoneEngine.swift. - PRhealthier Lactate Test source:
LactateAnalysisEngine.swift. - PRhealthier Lactate Test source:
ContentView+Sections.swift;TrainingZonesSectionView.swift;EstimateConfidenceAssessment.swift.
Notes on citation scope
Reference [1] (Seiler 2010) addresses training-intensity distribution among endurance athletes (the polarized 80/20 model derived from observation of elite Norwegian endurance athletes); it does not define the specific zone-fraction structure used in the Olympiatoppen model. The fraction boundaries (<0.78, 0.78–0.89, etc.) are institutional convention from Olympiatoppen; reference [2] is the direct source. Seiler’s paper is cited as a peer-reviewed proxy for the empirical context in which that zone structure developed.
References [3] (Allen & Coggan), [4] (Friel), and [5] (Daniels) are training textbooks rather than peer-reviewed journal articles. They are cited as the canonical authoritative descriptions of the Coggan, Friel, and Daniels frameworks, respectively. Public-facing summaries reflecting the same content are widely available (TrainingPeaks for Coggan; joefrieltraining.com for Friel; vdoto2.com for Daniels). Readers from a strict academic background should treat references [3]–[5] as practitioner literature rather than primary-research evidence.
References [6] (Faude 2009) and [7] (Beneke 2003) are cited specifically for the claim that the 4.0 mmol/L crossing can over- or under-estimate an individual athlete’s MLSS, and for MLSS methodology. Neither paper addresses the app’s choice to re-anchor crosswalk frameworks on the fixed 4.0 mmol/L crossing; that re-anchoring is implementation logic, documented under references [8]–[11].
References [8]–[11] are pointers to the PRhealthier Lactate Test source code rather than published literature. They are listed because the document explicitly distinguishes between literature claims (where each framework was originally anchored) and implementation behavior (the app’s re-anchoring decision and zone routing). Inline citations to “[8]” through “[11]” indicate “see the implementation source for the actual behavior” rather than a literature claim.
Practitioners using this document for clinical, research, or coaching certification purposes should verify each citation against current databases (PubMed, Google Scholar, publisher catalogues) before quoting; citation details (volume, page, year, edition) are provided as a starting point and should be confirmed before publication.
