TM1.0
How TrailMath rates a course
Every TrailMath number on this site - the effort-km on a race page, the reference time beside it, the index a calculator estimates - comes from one frozen, versioned model. This page is that model. Current version: TM1.0, fitted 2026-09-25.
In 30 seconds
- Effort-km is the size of a course: distance + gain ÷ 100 + loss ÷ 200. UTMB Mont-Blanc is 324 effort-km, CCC (Courmayeur-Champex-Chamonix) is 202.
- The TrailMath Index is the runner, 0 to 1000. The reference time on a race page is the model at index 500, a mid-pack finisher of a UTMB World Series ultra: about 43 h on UTMB Mont-Blanc, 24 h on CCC (Courmayeur-Champex-Chamonix).
- Every range is built on the model's out-of-sample error (66.7 index points), not on how well the fit matches its own data. What the model cannot do is listed at the bottom.
How it works
Effort-km: the size of a course
effort-km = distance_km + gain_m / 100 + loss_m / 200
The uphill term is ITRA's public km-effort exactly, so an ITRA figure and a TrailMath figure differ only by the descent term. When an organiser publishes no descent, loss is taken equal to gain and the number is marked as assumed.
The descent divisor of 200 is a published convention, not a fitted value. Nothing in the data TrailMath may fit on - twenty-four public results with gain-only course figures, and no split times - identifies a descent cost, and the two values previously in use here (150 on the site, 250 in the app) were both unfitted guesses. Minetti's energy-cost curve deliberately does not enter: it is an energy cost, and as a time cost it has the wrong sign on descents.
Worked examples, from the official figures: UTMB Mont-Blanc is 324 effort-km (174 km, +10,000 m, -10,000 m); CCC (Courmayeur-Champex-Chamonix) is 202 effort-km.
The TrailMath Index: how fast a runner is
index = a + b · ln(v · κ) + c · ln(effort-km) v = effort-km / hours ln t = (1 + c/b) · ln(effort-km) + (a - index) / b + ln κ
v is effort-km per hour and κ is the course's terrain-class factor. Solved for time, finish time scales as effort-km to the power 1.225 - one continuous exponent, published, instead of the classic road value of 1.06.
The coefficients are an ordinary least-squares fit to 20 public results whose runners carry a public UTMB category index, with 4 further results held out and never fitted. Fitted values: a = -1385.575779, b = 561.716376, c = 126.161787. One hundred index points are a factor of 1.19 in time.
The error that matters is out of sample. Leave-one-out over the training results: 65.9 points. Leaving out every result of one runner: 66.7. Leaving out every result on one course: 66.7. The largest of these, 66.7, is the number every range on this site is built from. In-sample error is 51.3; it is reported, not used.
Below 50 effort-km the fit is extrapolating (two results, one of them the worst-fitting row), so no reference time is quoted there. Every time in the model is in hours.
Terrain classes
κ is one number per terrain class, fixed before the fit and normalised so that mountain = 1: road to_trail 0.88, forest 0.90, trail 0.93, mountain 1.00, ultra mountain 1.05. It carries everything a course brings that effort-km does not - typical altitude, weather and night exposure, ground - as one average per class. A per-race factor needs results the model does not yet have and is not published.
The classes are the ones the TrailMath app uses for its catalogue, assigned from gain per kilometre: trail 10-45 m/km, mountain 30-80, and ultra mountain from 45 m/km on courses of at least 100 km.
The reference time
The reference time on a race page is the model at index 500 with the class factor and no day-specific conditions. Index 500 is defined as the median finisher of a UTMB World Series ultra: over the timed editions of UTMB, CCC, OCC, TDS and Val d'Aran in the table further down, the median finisher implies an index of 536.
These are descriptions of a runner of that ability, not a pacing plan, and never a guarantee against a cutoff.
What an index is worth, in hours
The same course, at three levels of runner.
| Race | Index 400 | Index 500 | Index 600 |
|---|---|---|---|
| UTMB Mont-Blanc | 52 h | 43 h | 36 h |
| CCC | 29 h | 24 h | 20 h |
One hundred index points are a factor of 1.19 in time.
Try it on a course
Type a course, or pick one from the library, and read the same two numbers a race page shows. Model TM1.0.
- Effort-km
- 324 effort-km
- Reference time
- About 43 h for a mid-pack finisher (index 500)
Terrain factor 1.05 (Ultra mountain)
Distance + gain ÷ 100 + loss ÷ 200. Not a pacing guarantee. What is this?
The evidence
Every parameter
| model_version | TM1.0 | a refit bumps the minor, a formula change the major |
|---|---|---|
| gain_divisor | 100 | ITRA's public km-effort, held fixed for compatibility |
| loss_divisor | 200 | published convention, not a fit: between the two unfitted in-house values (150 web, 250 app); no time-bearing data we may fit on identifies a descent cost |
| a (intercept) | -1385.575779 | least squares on the training results |
| b (speed coefficient) | 561.716376 | same fit; 100 index points = ×1.19 in time |
| c (effort coefficient) | 126.161787 | same fit |
| exponent 1 + c/b | 1.2246 | the Riegel-style exponent on effort-km |
| rmse (in sample) | 51.3 | reported, not used |
| rmse (leave one out) | 65.9 | training results, one row at a time |
| rmse (leave one runner out) | 66.7 | runners repeat in the table |
| rmse (leave one course out) | 66.7 | courses repeat in the table |
| rmse (out of sample) | 66.7 | the largest of the three; what every range is built from |
| min_effort_km | 50 | below this the index is extrapolated and no reference time is shown |
| reference_index | 500 | the median finisher of a UTMB World Series ultra |
| κ by class | road_to_trail 0.88 · forest 0.9 · trail 0.93 · mountain 1 · ultra_mountain 1.05 | mountain = 1 |
| anchors | 20 fitted + 4 held out | hash 05e114a59751; fitted 2026-09-25 |
The results the index is fitted to
Each row is one public result and the public UTMB category index its runner carries. Loss is assumed equal to gain on every row - no runner page publishes descent - and is marked. The residual is the runner's index minus the model's, with that row left out of the fit (for held-out rows, against the full fit). Positive means the runner scored above the curve.
| Race | Year | Course | Class | Effort-km | Time (h) | Index | Residual |
|---|---|---|---|---|---|---|---|
| OCC - HOKA UTMB Mont-Blanc | 2025 | 57 km · +3,500 · −3,500 (assumed) | mountain | 109.5 | 5.01 | 918 | -25 |
| Sierre-Zinal | 2024 | 31.3 km · +2,190 · −2,190 (assumed) | mountain | 64.2 | 2.43 | 945 | -50 |
| UTMB Mont-Blanc | 2025 | 174.2 km · +9,920 · −9,920 (assumed) | ultra mountain | 323.0 | 19.32 | 957 | +5 |
| Western States 100 | 2026 | 162.2 km · +5,790 · −7,238 (assumed) | trail | 256.3 | 13.77 | 943 | +31 |
| WMTRC Long Trail 82km | 2025 | 81.2 km · +5,413 · −5,413 (assumed) | mountain | 162.4 | 8.59 | 959 | +57 |
| WMTRC Long Trail 82km | 2025 | 81.2 km · +5,413 · −5,413 (assumed) | mountain | 162.4 | 9.97 | 859 | +37 |
| Chianti Ultra Trail | 2026 | 118.9 km · +5,121 · −5,121 (assumed) | mountain | 195.7 | 11.53 | 859 | -13 |
| Hardrock 100 | 2025 | 157.7 km · +9,720 · −9,720 (assumed) | ultra mountain | 303.5 | 24.07 | 887 | +115 |
| UTMB Mont-Blancheld out | 2025 | 174.2 km · +9,920 · −9,920 (assumed) | ultra mountain | 323.0 | 22.94 | 812 | -44 |
| OCC - HOKA UTMB Mont-Blanc | 2024 | 57 km · +3,500 · −3,500 (assumed) | mountain | 109.5 | 6.41 | 741 | -64 |
| OCC - HOKA UTMB Mont-Blanc | 2024 | 57 km · +3,500 · −3,500 (assumed) | mountain | 109.5 | 6.22 | 811 | -7 |
| Lavaredo 80Kheld out | 2026 | 80 km · +4,600 · −4,600 (assumed) | mountain | 149.0 | 10.41 | 725 | -16 |
| Tatra Fest Bieg | 2025 | 68 km · +5,000 · −5,000 (assumed) | mountain | 143.0 | 8.24 | 846 | +2 |
| Istria 100 by UTMB - 168K | 2026 | 168.2 km · +7,140 · −7,140 (assumed) | mountain | 275.3 | 22.12 | 712 | -31 |
| UTMB Mont-Blanc | 2025 | 174.2 km · +9,920 · −9,920 (assumed) | ultra mountain | 323.0 | 28.51 | 742 | +9 |
| Speed'Goat Trail des Geantsheld out | 2026 | 132 km · +8,024 · −8,024 (assumed) | ultra mountain | 252.4 | 39.93 | 356 | -19 |
| Ultra Trail du Vercors - Solo | 2025 | 82 km · +4,400 · −4,400 (assumed) | mountain | 148.0 | 18.94 | 366 | -49 |
| Trail de la Cochette | 2025 | 42 km · +2,200 · −2,200 (assumed) | mountain | 75.0 | 6.22 | 470 | -100 |
| Alpi Trail de Pichauris | 2025 | 21 km · +1,100 · −1,100 (assumed) | mountain | 37.5 | 2.55 | 549 | -44 |
| Trans Aubrac TA 105 | 2026 | 108 km · +3,500 · −3,500 (assumed) | trail | 160.5 | 14.65 | 550 | -10 |
| SKY - Baqueira Beret | 2026 | 18 km · +900 · −900 (assumed) | mountain | 31.5 | 2.68 | 565 | +198 |
| Ultra Trail du Puy Mary Aurillac - Solo | 2026 | 114 km · +5,500 · −5,500 (assumed) | ultra mountain | 196.5 | 18.27 | 581 | -69 |
| Javelina Jundredheld out | 2024 | 159.2 km · +1,810 · −1,810 (assumed) | trail | 186.4 | 19.76 | 594 | +100 |
| EcoTrail Stockholm 45km | 2025 | 45.2 km · +1,250 · −1,250 (assumed) | trail | 64.0 | 4.47 | 621 | +33 |
Where the model and the results disagree
75 of 179 timed editions flagged (implied index outside 420-600).
For every timed edition in the results library: the reference time at index 500, the observed median, and the index a runner finishing at that median would carry. This is not a fit target - a slow median can be a hard course or a weak field, and nothing here can tell the two apart. Each flagged row is a case for a future per-race factor, once enough results exist to fit one.
| Race | Year | Class | Effort-km | Reference (h) | Median (h) | Ratio | Implied index | Finishers |
|---|---|---|---|---|---|---|---|---|
| 23km du Mont-Blancflagged | 2026 | mountain | 43.2 | below floor | 4.5 | - | 357 | 1,771 |
| 42km du Mont-Blanc | 2026 | mountain | 80.1 | 7.5 | 7.8 | 1.04 | 479 | 1,999 |
| 90km du Mont-Blanc | 2026 | ultra mountain | 180.1* | 21.2 | 18.6 | 0.88 | 572 | 650 |
| Black Canyon Ultras - 100Kflagged | 2026 | trail | 127.2 | 12.2 | 14.9 | 1.22 | 391 | 765 |
| Black Canyon Ultras - 100Kflagged | 2025 | trail | 127.2 | 12.2 | 15.0 | 1.22 | 386 | 776 |
| Black Canyon Ultras - 50Kflagged | 2026 | trail | 64.0 | 5.3 | 6.7 | 1.27 | 366 | 850 |
| Black Canyon Ultras - 50Kflagged | 2025 | trail | 64.0 | 5.3 | 7.0 | 1.32 | 345 | 527 |
| Bucovina Ultra Rocks by UTMB - Four Summits 72K | 2026 | mountain | 141.0 | 14.9 | 14.8 | 0.99 | 507 | 237 |
| Bucovina Ultra Rocks by UTMB - Lady's Rocks 48K | 2026 | mountain | 96.0 | 9.3 | 9.4 | 1.01 | 493 | 350 |
| Bucovina Ultra Rocks by UTMB - Rocky 33K | 2026 | mountain | 63.0* | 5.6 | 6.3 | 1.13 | 434 | 430 |
| Bucovina Ultra Rocks by UTMB - Ultra Rocks 114K | 2026 | ultra mountain | 219.0 | 26.9 | 25.6 | 0.95 | 527 | 100 |
| CCC (Courmayeur-Champex-Chamonix) | 2026 | ultra mountain | 201.7 | 24.3 | 22.2 | 0.91 | 551 | 1,512 |
| Chiang Mai Thailand by UTMB - Chiang Dao 160 | 2025 | ultra mountain | 313.7* | 41.7 | 42.0 | 1.01 | 497 | 367 |
| Chiang Mai Thailand by UTMB - Elephant 100 | 2025 | ultra mountain | 172.8* | 20.1 | 22.1 | 1.10 | 448 | 974 |
| Chianti Ultra Trail by UTMB - CUT 73Kflagged | 2026 | mountain | 121.5* | 12.4 | 10.4 | 0.84 | 601 | 1,036 |
| Chianti Ultra Trail by UTMB - UTCC 123Kflagged | 2026 | mountain | 198.0* | 22.6 | 18.7 | 0.83 | 608 | 535 |
| Diagonale des Fous (Grand Raid Réunion) | 2026 | ultra mountain | 333.4 | 45.0 | 49.9 | 1.11 | 442 | 2,126 |
| Diagonale des Fous (Grand Raid Réunion) | 2025 | ultra mountain | 335.5* | 45.3 | 51.0 | 1.12 | 434 | 2,064 |
| EcoTrail Oslo - Trail 10 kmflagged | 2026 | forest | 11.5 | below floor | 1.0 | - | 224 | 486 |
| EcoTrail Oslo - Trail 21 kmflagged | 2026 | forest | 25.3 | below floor | 2.2 | - | 348 | 1,081 |
| EcoTrail Oslo - Trail 31 kmflagged | 2026 | forest | 41.4 | below floor | 3.6 | - | 403 | 779 |
| EcoTrail Oslo - Trail 50 km | 2026 | forest | 67.9 | 5.5 | 6.2 | 1.13 | 430 | 498 |
| EcoTrail Oslo - Trail 80 km | 2026 | forest | 110.1 | 9.9 | 10.4 | 1.05 | 475 | 297 |
| EcoTrail Paris - Trail 10 kmflagged | 2026 | forest | 12.5* | below floor | 1.0 | - | 271 | 1,559 |
| EcoTrail Paris - Trail 120 kmflagged | 2026 | forest | 146.0* | 14.0 | 16.8 | 1.19 | 400 | 1,212 |
| EcoTrail Paris - Trail 20 kmflagged | 2026 | forest | 30.6* | below floor | 2.4 | - | 406 | 2,742 |
| EcoTrail Paris - Trail 30 kmflagged | 2026 | forest | 36.2* | below floor | 3.0 | - | 405 | 3,038 |
| EcoTrail Paris - Trail 35 km | 2026 | forest | 47.4 | below floor | 3.8 | - | 465 | 1,604 |
| EcoTrail Paris - Trail 45 km | 2026 | forest | 58.7* | 4.6 | 5.3 | 1.15 | 422 | 1,769 |
| EcoTrail Paris - Trail 80 km | 2026 | forest | 102.8* | 9.1 | 10.3 | 1.13 | 429 | 2,451 |
| Eiger Ultra-Trail by UTMB - E101 | 2026 | ultra mountain | 201.5 | 24.3 | 20.5 | 0.84 | 595 | 425 |
| Eiger Ultra-Trail by UTMB - E35 | 2026 | mountain | 71.8 | 6.5 | 6.7 | 1.03 | 485 | 635 |
| Eiger Ultra-Trail by UTMB - E51 | 2026 | mountain | 97.5 | 9.5 | 9.7 | 1.02 | 489 | 869 |
| Endurance Trail des Templiers | 2026 | trail | 161.5 | 16.4 | 17.4 | 1.06 | 468 | 1,240 |
| Făgăraș Rocks! - #BerivoiRaceflagged | 2025 | mountain | 40.8 | below floor | 4.3 | - | 339 | 84 |
| Făgăraș Rocks! - #BerivoiRaceflagged | 2024 | mountain | 40.8 | below floor | 4.3 | - | 349 | 55 |
| Făgăraș Rocks! - #DaraUltraSkyrace | 2024 | mountain | 143.4 | 15.2 | 14.4 | 0.94 | 532 | 7 |
| Făgăraș Rocks! - #FăgărașSkyrace | 2025 | mountain | 70.6 | 6.4 | 7.2 | 1.12 | 434 | 54 |
| Făgăraș Rocks! - #FăgărașSkyrace | 2024 | mountain | 70.6 | 6.4 | 6.7 | 1.04 | 478 | 44 |
| Făgăraș Rocks! - #TheWildTruth ultra skyrace | 2025 | ultra mountain | 290.5 | 38.0 | 37.0 | 0.97 | 516 | 4 |
| Făgăraș Rocks! - #TheWildTruth ultra skyrace | 2024 | ultra mountain | 290.5 | 38.0 | 40.4 | 1.06 | 465 | 4 |
| Gran Trail Courmayeur - GTC100 | 2026 | ultra mountain | 214.0 | 26.1 | 25.0 | 0.96 | 525 | 425 |
| Gran Trail Courmayeur - GTC30flagged | 2026 | mountain | 56.1 | 4.8 | 6.1 | 1.26 | 372 | 425 |
| Gran Trail Courmayeur - GTC55 | 2026 | ultra mountain | 105.8 | 11.0 | 10.7 | 0.97 | 515 | 456 |
| Grand Raid des Pyrénées Tour de la Gela | 2026 | ultra mountain | 93.4* | 9.5 | 9.4 | 0.99 | 503 | 505 |
| Grand Raid des Pyrénées Tour de la Gela | 2025 | ultra mountain | 94.4* | 9.6 | 8.5 | 0.88 | 570 | 603 |
| Grand Raid des Pyrénées Tour des Cirques | 2026 | ultra mountain | 232.5* | 28.9 | 29.3 | 1.01 | 493 | 523 |
| Grand Raid des Pyrénées Tour des Cirques | 2025 | ultra mountain | 241.1* | 30.2 | 30.4 | 1.01 | 497 | 520 |
| Grand Raid des Pyrénées Tour des Lacs | 2026 | mountain | 157.1* | 17.0 | 17.6 | 1.03 | 481 | 1,046 |
| Grand Raid des Pyrénées Tour du Bastan | 2026 | mountain | 99.1* | 9.7 | 11.0 | 1.14 | 427 | 793 |
| Grand Raid des Pyrénées Tour du Bastan | 2025 | mountain | 99.6* | 9.8 | 10.9 | 1.11 | 440 | 827 |
| Grand Raid des Pyrénées Tour du Moudang | 2026 | mountain | 113.7* | 11.5 | 12.2 | 1.07 | 464 | 606 |
| Grand Raid des Pyrénées Tour du Néouvielle | 2026 | mountain | 79.6* | 7.4 | 8.0 | 1.07 | 460 | 1,264 |
| Grand Raid des Pyrénées Tour du Néouvielle | 2025 | mountain | 83.3* | 7.8 | 7.9 | 1.00 | 499 | 1,266 |
| Grand Raid des Pyrénées Ultra Tour 160 | 2026 | ultra mountain | 330.0* | 44.4 | 41.0 | 0.92 | 545 | 357 |
| Grand Trail des Templiers | 2026 | trail | 132.2 | 12.8 | 12.5 | 0.98 | 514 | 2,297 |
| Grossglockner Ultra-Trail - GGUT 110 | 2026 | ultra mountain | 207.5 | 25.2 | 23.7 | 0.94 | 534 | 219 |
| Grossglockner Ultra-Trail - Grossglockner Trail | 2026 | mountain | 112.0 | 11.3 | 11.7 | 1.04 | 480 | 508 |
| Grossglockner Ultra-Trail - Osttirol Trail | 2026 | ultra mountain | 162.5 | 18.7 | 16.6 | 0.89 | 567 | 115 |
| Grossglockner Ultra-Trail - Weissee Glacier World Trailflagged | 2026 | mountain | 60.0 | 5.2 | 6.7 | 1.28 | 359 | 489 |
| Integrale des Causses | 2026 | trail | 99.5* | 9.1 | 9.7 | 1.07 | 462 | 753 |
| Istria 100 by UTMB - 110K | 2026 | mountain | 172.5* | 19.1 | 18.5 | 0.97 | 518 | 411 |
| Istria 100 by UTMB - 168K | 2026 | mountain | 274.5* | 33.8 | 32.9 | 0.98 | 514 | 256 |
| Istria 100 by UTMB - 42Kflagged | 2026 | trail | 58.5* | 4.7 | 5.7 | 1.21 | 392 | 644 |
| Istria 100 by UTMB - 69K | 2026 | mountain | 104.5* | 10.3 | 10.2 | 0.99 | 507 | 575 |
| Javelina Jundred - 100 Mileflagged | 2026 | trail | 189.8 | 20.0 | 23.7 | 1.19 | 404 | 375 |
| Javelina Jundred - 100 Mileflagged | 2025 | trail | 189.8 | 20.0 | 25.3 | 1.26 | 368 | 492 |
| Javelina Jundred - 100 Mileflagged | 2024 | trail | 189.8 | 20.0 | 25.4 | 1.27 | 364 | 421 |
| Javelina Jundred - 100 Mileflagged | 2023 | trail | 189.8 | 20.0 | 25.4 | 1.27 | 366 | 513 |
| Javelina Jundred - 100Kflagged | 2026 | trail | 116.4 | 11.0 | 15.5 | 1.41 | 306 | 301 |
| Javelina Jundred - 100Kflagged | 2025 | trail | 116.4 | 11.0 | 17.0 | 1.54 | 256 | 325 |
| Javelina Jundred - 100Kflagged | 2024 | trail | 116.4 | 11.0 | 17.7 | 1.61 | 233 | 296 |
| Javelina Jundred - 100Kflagged | 2023 | trail | 116.4 | 11.0 | 16.7 | 1.52 | 264 | 303 |
| Javelina Jundred - Jackass 31Kflagged | 2026 | trail | 36.5 | below floor | 4.8 | - | 167 | 244 |
| Javelina Jundred - Jackass 31Kflagged | 2025 | trail | 36.5 | below floor | 4.8 | - | 163 | 211 |
| Javelina Jundred - Jackass 31Kflagged | 2024 | trail | 36.5 | below floor | 4.9 | - | 155 | 195 |
| Javelina Jundred - Jackass 31Kflagged | 2023 | trail | 36.5 | below floor | 4.5 | - | 208 | 180 |
| Kodiak by UTMB - 100 Mileflagged | 2026 | trail | 233.0* | 25.7 | 31.6 | 1.23 | 383 | 279 |
| Kullamannen by UTMB - Ultra 100 Milesflagged | 2026 | trail | 197.5* | 21.0 | 26.8 | 1.28 | 363 | 390 |
| Madeira Island Ultra Trail - MIUT Advanced | 2026 | ultra mountain | 147.5 | 16.6 | 16.1 | 0.97 | 518 | 394 |
| Madeira Island Ultra Trail - MIUT Discover | 2026 | mountain | 99.6 | 9.8 | 10.4 | 1.06 | 465 | 441 |
| Madeira Island Ultra Trail - MIUT Legend | 2026 | ultra mountain | 216.4 | 26.5 | 24.8 | 0.94 | 538 | 581 |
| Madeira Island Ultra Trail - MIUT Marathon | 2026 | mountain | 64.2 | 5.7 | 6.3 | 1.11 | 440 | 668 |
| Mallorca by UTMB - CPS 104K | 2026 | mountain | 160.1 | 17.4 | 17.5 | 1.00 | 499 | 460 |
| Mallorca by UTMB - CPS 104K | 2025 | mountain | 160.1 | 17.4 | 17.2 | 0.99 | 507 | 527 |
| Mallorca by UTMB - ETM 56K | 2026 | mountain | 93.5 | 9.0 | 9.3 | 1.03 | 482 | 612 |
| Mallorca by UTMB - ETM 56K | 2025 | mountain | 93.5 | 9.0 | 9.1 | 1.01 | 495 | 591 |
| Mallorca by UTMB - SDT 138K | 2026 | mountain | 218.3 | 25.5 | 24.7 | 0.97 | 518 | 344 |
| Mallorca by UTMB - SDT 138K | 2025 | mountain | 218.3 | 25.5 | 24.5 | 0.96 | 522 | 243 |
| MaXi-Race Demi tOur du Lac | 2026 | mountain | 108.8* | 10.9 | 9.5 | 0.87 | 575 | 1,244 |
| MaXi-Race Marathon-eXperience | 2026 | mountain | 68.0* | 6.1 | 5.6 | 0.92 | 549 | 1,259 |
| MaXi-Race tOur du Lac Soloflagged | 2026 | ultra mountain | 186.5* | 22.1 | 18.2 | 0.83 | 607 | 1,418 |
| NUTS Karhunkierros - 166 kmflagged | 2026 | trail | 223.9 | 24.5 | 31.9 | 1.30 | 351 | 172 |
| NUTS Karhunkierros - 166 kmflagged | 2025 | trail | 223.9 | 24.5 | 31.7 | 1.30 | 355 | 99 |
| NUTS Karhunkierros - 34 kmflagged | 2026 | trail | 52.4 | 4.1 | 6.1 | 1.49 | 277 | 1,283 |
| NUTS Karhunkierros - 34 kmflagged | 2025 | trail | 52.4 | 4.1 | 6.1 | 1.47 | 283 | 1,237 |
| NUTS Karhunkierros - 55 kmflagged | 2026 | trail | 77.7 | 6.7 | 9.6 | 1.44 | 297 | 879 |
| NUTS Karhunkierros - 55 kmflagged | 2025 | trail | 77.7 | 6.7 | 9.9 | 1.48 | 278 | 794 |
| NUTS Karhunkierros - 83 kmflagged | 2026 | trail | 110.1 | 10.3 | 14.9 | 1.46 | 289 | 662 |
| NUTS Karhunkierros - 83 kmflagged | 2025 | trail | 110.1 | 10.3 | 15.1 | 1.47 | 283 | 544 |
| NUTS Ylläs Pallas - 100 kmflagged | 2026 | trail | 144.9 | 14.4 | 20.5 | 1.43 | 300 | 463 |
| NUTS Ylläs Pallas - 100 kmflagged | 2025 | trail | 144.2* | 14.3 | 20.2 | 1.42 | 305 | 280 |
| NUTS Ylläs Pallas - 100 kmflagged | 2024 | trail | 144.9 | 14.4 | 18.9 | 1.31 | 347 | 218 |
| NUTS Ylläs Pallas - 15 kmflagged | 2026 | trail | 19.7 | below floor | 2.0 | - | 237 | 422 |
| NUTS Ylläs Pallas - 15 kmflagged | 2025 | trail | 19.8* | below floor | 2.2 | - | 177 | 343 |
| NUTS Ylläs Pallas - 15 kmflagged | 2024 | trail | 19.7 | below floor | 2.0 | - | 235 | 301 |
| NUTS Ylläs Pallas - 160 kmflagged | 2026 | trail | 219.9 | 23.9 | 29.8 | 1.25 | 376 | 221 |
| NUTS Ylläs Pallas - 160 kmflagged | 2025 | trail | 220.4* | 24.0 | 32.3 | 1.35 | 333 | 127 |
| NUTS Ylläs Pallas - 160 kmflagged | 2024 | trail | 219.9 | 23.9 | 29.8 | 1.24 | 377 | 133 |
| NUTS Ylläs Pallas - 37 kmflagged | 2026 | trail | 50.4 | 3.9 | 5.3 | 1.36 | 328 | 785 |
| NUTS Ylläs Pallas - 37 kmflagged | 2025 | trail | 50.5* | 3.9 | 5.7 | 1.45 | 293 | 586 |
| NUTS Ylläs Pallas - 37 kmflagged | 2024 | trail | 50.4 | 3.9 | 5.4 | 1.37 | 324 | 580 |
| NUTS Ylläs Pallas - 66 kmflagged | 2026 | trail | 89.6 | 8.0 | 10.9 | 1.37 | 322 | 811 |
| NUTS Ylläs Pallas - 66 kmflagged | 2025 | trail | 91.5* | 8.2 | 11.6 | 1.42 | 302 | 623 |
| NUTS Ylläs Pallas - 66 kmflagged | 2024 | trail | 89.6 | 8.0 | 10.8 | 1.35 | 330 | 540 |
| OCC (Orsières-Champex-Chamonix) | 2026 | mountain | 111.9 | 11.3 | 11.4 | 1.01 | 494 | 1,556 |
| Patagonia Bariloche by UTMB - Bella Vista 55K | 2025 | mountain | 102.0* | 10.0 | 10.1 | 1.00 | 497 | 644 |
| Patagonia Bariloche by UTMB - Frey 85K | 2025 | ultra mountain | 156.9* | 17.9 | 17.1 | 0.96 | 524 | 326 |
| Patagonia Bariloche by UTMB - Nahuel Huapi 33K | 2025 | mountain | 57.3* | 5.0 | 5.6 | 1.13 | 431 | 768 |
| Patagonia Bariloche by UTMB - Tronador 130K | 2025 | ultra mountain | 229.7* | 28.5 | 27.0 | 0.95 | 531 | 169 |
| Penyagolosa Trails CSP | 2026 | ultra mountain | 184.0 | 21.7 | 19.4 | 0.90 | 562 | 325 |
| Penyagolosa Trails CSP | 2025 | ultra mountain | 184.0 | 21.7 | 18.7 | 0.86 | 585 | 414 |
| Penyagolosa Trails MiM | 2026 | mountain | 103.5 | 10.2 | 10.4 | 1.02 | 490 | 1,158 |
| Penyagolosa Trails MiM | 2025 | mountain | 103.5 | 10.2 | 9.8 | 0.96 | 525 | 1,350 |
| SaintéLyon | 2025 | trail | 109.1* | 10.1 | 11.0 | 1.08 | 455 | 6,152 |
| SallandTrail - 100 km | 2026 | forest | 114.7 | 10.4 | 9.8 | 0.94 | 533 | 29 |
| SallandTrail - 42 kmflagged | 2026 | forest | 48.7 | below floor | 4.5 | - | 377 | 114 |
| SallandTrail - 42 kmflagged | 2025 | forest | 47.2* | below floor | 4.7 | - | 334 | 77 |
| SallandTrail - 50 kmflagged | 2026 | forest | 59.2 | 4.6 | 5.7 | 1.23 | 383 | 191 |
| SallandTrail - 50 kmflagged | 2025 | forest | 60.6* | 4.8 | 5.8 | 1.21 | 394 | 177 |
| SallandTrail - 60 kmflagged | 2026 | forest | 68.8 | 5.6 | 6.5 | 1.16 | 416 | 95 |
| SallandTrail - 60 km | 2025 | forest | 72.5* | 5.9 | 6.7 | 1.13 | 431 | 65 |
| SallandTrail - 80 kmflagged | 2026 | forest | 93.1 | 8.1 | 9.5 | 1.18 | 409 | 64 |
| SallandTrail - 80 kmflagged | 2025 | forest | 93.3* | 8.1 | 9.7 | 1.20 | 399 | 96 |
| Sierre-Zinal | 2026 | mountain | 58.5 | 5.1 | 4.4 | 0.86 | 585 | 1,637 |
| SkyRun 100flagged | 2024 | mountain | 160.7 | 17.5 | 25.6 | 1.46 | 288 | 125 |
| SkyRun 65flagged | 2024 | mountain | 112.2 | 11.3 | 16.4 | 1.45 | 291 | 96 |
| TDS (Sur les Traces des Ducs de Savoie) | 2026 | ultra mountain | 288.4 | 37.7 | 37.5 | 1.00 | 502 | 714 |
| The Canyons Endurance Runs by UTMB - 100K | 2026 | trail | 156.3* | 15.7 | 15.9 | 1.01 | 494 | 538 |
| The Canyons Endurance Runs by UTMB - 100M | 2026 | trail | 244.3* | 27.2 | 31.1 | 1.14 | 425 | 150 |
| The Canyons Endurance Runs by UTMB - 25Kflagged | 2026 | trail | 37.8* | below floor | 3.5 | - | 365 | 311 |
| The Canyons Endurance Runs by UTMB - 50K | 2026 | trail | 75.5* | 6.5 | 7.0 | 1.08 | 459 | 609 |
| Tor des Géants (TOR330) | 2026 | ultra mountain | 727.0 | 116.8 | 130.5 | 1.12 | 438 | 690 |
| Tor des Géants (TOR330) | 2025 | ultra mountain | 727.0 | 116.8 | 128.3 | 1.10 | 447 | 743 |
| Tor des Glaciers (TOR450) | 2026 | ultra mountain | 962.8 | 164.8 | 173.7 | 1.05 | 470 | 116 |
| Tor des Glaciers (TOR450) | 2025 | ultra mountain | 962.8 | 164.8 | 169.8 | 1.03 | 483 | 89 |
| Trail del Cinghiale 100K | 2026 | ultra mountain | 176.1 | 20.6 | 19.8 | 0.96 | 522 | 93 |
| Trail del Cinghiale 100K | 2025 | ultra mountain | 179.0* | 21.0 | 19.3 | 0.92 | 547 | 80 |
| Trail del Cinghiale 20K | 2026 | mountain | 35.6 | below floor | 2.9 | - | 470 | 382 |
| Trail del Cinghiale 20K | 2025 | mountain | 35.7* | below floor | 3.1 | - | 437 | 344 |
| Trail del Cinghiale 50K | 2026 | mountain | 93.1 | 9.0 | 8.7 | 0.97 | 516 | 168 |
| Trail du Ventoux - Évasion Baronnies-Ventoux 64K | 2026 | mountain | 116.0* | 11.8 | 10.9 | 0.92 | 544 | 329 |
| Trail du Ventoux - L'Origine 48K | 2026 | mountain | 87.5* | 8.3 | 7.7 | 0.93 | 540 | 833 |
| Trail Verbier St-Bernard by UTMB - Verbier Marathon X-Treme | 2026 | mountain | 89.1 | 8.5 | 8.8 | 1.04 | 480 | 1,384 |
| Transgrancanaria Advanced | 2026 | ultra mountain | 145.9* | 16.3 | 14.7 | 0.90 | 560 | 598 |
| Transgrancanaria Classicflagged | 2025 | ultra mountain | 228.8* | 28.4 | 23.6 | 0.83 | 602 | 568 |
| Transgrancanaria Marathon | 2026 | mountain | 72.6* | 6.6 | 7.1 | 1.07 | 464 | 1,478 |
| Transvulcania Marathon | 2026 | mountain | 78.7 | 7.3 | 7.2 | 0.98 | 509 | 756 |
| Transvulcania Ultramarathon | 2026 | ultra mountain | 136.8 | 15.1 | 12.8 | 0.84 | 595 | 928 |
| Transylvania 100 - 100K | 2026 | ultra mountain | 199.7 | 24.0 | 26.1 | 1.09 | 454 | 175 |
| Transylvania 100 - 30Kflagged | 2026 | mountain | 65.5* | 5.8 | 7.5 | 1.29 | 358 | 456 |
| Transylvania 100 - 50K | 2026 | mountain | 99.8* | 9.8 | 10.9 | 1.12 | 438 | 489 |
| Transylvania 100 - 80K | 2026 | mountain | 155.7* | 16.9 | 17.5 | 1.04 | 480 | 108 |
| Ultra-Trail Australia by UTMB - UTA100 | 2026 | mountain | 167.0 | 18.4 | 18.2 | 0.99 | 505 | 1,389 |
| Ultra-Trail Australia by UTMB - UTA50 | 2026 | mountain | 87.0 | 8.3 | 8.6 | 1.05 | 475 | 2,262 |
| Ultra-Trail Australia by UTMB - UTAMiler | 2026 | mountain | 269.0* | 32.9 | 33.3 | 1.01 | 494 | 327 |
| Ultra-Trail Harricana - UTHC 125flagged | 2026 | trail | 186.3 | 19.5 | 24.5 | 1.25 | 373 | 279 |
| Ultra-Trail Harricana - UTHC 42 Classicflagged | 2026 | trail | 59.8 | 4.9 | 6.3 | 1.30 | 351 | 366 |
| Ultra-Trail Harricana - UTHC 42 Saint-Simeonflagged | 2026 | trail | 62.2 | 5.1 | 7.1 | 1.40 | 312 | 370 |
| Ultra-Trail Harricana - UTHC 60 MS Canadaflagged | 2026 | trail | 97.8 | 8.9 | 11.5 | 1.30 | 353 | 41 |
| Ultra-Trail Harricana - UTHC 65flagged | 2026 | trail | 88.4 | 7.8 | 10.2 | 1.30 | 351 | 410 |
| Ultra-Trail Harricana - UTHC 80flagged | 2026 | trail | 107.6 | 10.0 | 12.0 | 1.21 | 394 | 249 |
| UTMB Mont-Blanc | 2026 | ultra mountain | 324.0 | 43.4 | 38.2 | 0.88 | 573 | 1,676 |
| UTMB Mont-Blanc | 2025 | ultra mountain | 324.0 | 43.4 | 40.8 | 0.94 | 535 | 1,665 |
| UTMB Mont-Blanc | 2024 | ultra mountain | 325.1* | 43.6 | 40.6 | 0.93 | 540 | 1,760 |
| Val d'Aran by UTMB - CDH 110K | 2026 | ultra mountain | 204.3 | 24.7 | 22.0 | 0.89 | 565 | 854 |
| Val d'Aran by UTMB - PDA 55K | 2026 | mountain | 105.9 | 10.5 | 10.6 | 1.00 | 498 | 1,478 |
| Val d'Aran by UTMB - TDL 75K | 2026 | mountain | 150.2 | 16.1 | 15.1 | 0.94 | 536 | 610 |
| Val d'Aran by UTMB - VDA 163K | 2026 | ultra mountain | 313.0 | 41.6 | 39.5 | 0.95 | 529 | 358 |
* assumed
Limits and changelog
What TM1.0 does not model
- A shaped descent cost. Steep or technical descents cost more than the linear term says; fitting that needs split times, which the model does not have.
- A per-race factor. Only the class factor exists; the table above says where a race-level one would go.
- Fade within a race. The exponent is fitted across races and cannot produce the second-half slowdown real splits show; Race Plan splits keep their own ramp, unvalidated.
- Night, heat and altitude in the headline. Whatever the fitted results experienced is averaged into the coefficients; the Conditions Simulator applies day-specific deltas and says so.
- Technicality. A GPX cannot see rock, roots or scree.
On this site the headline numbers are TM1.0. In the app, the finish estimate still runs on the earlier chain; moving it onto this model is a separate decision (ADR-017).
Changelog
- TM1.0 (2026-09-25): first frozen model. Loss divisor 200 replaces the 150 used on this site and the 250 used in the app; the index is refitted on effort-km conditional on the terrain classes; ranges come from out-of-sample error instead of a fixed 25 points.