-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
506 lines (502 loc) · 49.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Grade-Adjusted Pace (GAP) Calculator for Uphills and Downhills - from Running Writings</title>
<link rel="icon" href="images/RW-favicon.png" type="image/png">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,[email protected],100..700,0..1,-50..200" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="styles_v3.css">
<script src="scripts.js?v=1.1" defer></script>
<script defer data-domain="apps.runningwritings.com" src="https://plausible.io/js/script.js"></script>
</head>
<body>
<header>
<div class="header-content">
<a href="https://apps.runningwritings.com"><img class="logo" id="top" src="images/RunningWritings-logo.png"></a>
<a class="home-link" href="https://apps.runningwritings.com">RW Apps</a>
<nav>
<a href="#how-to-use">How to use</a>
<a href="#get-updates">Get updates</a>
<a href="#contact">Contact</a>
</nav>
</div>
</header>
<main>
<h1>Grade-adjusted pace calculator</h1>
<div class="app-box">
<div class="pace-box">
<div class="left-dummy"></div>
<div class="clock" id="pace-dials">
<div class="digitbox">
<button class="material-icons svg-arrow" id="d1-up">expand_less</button>
<div class="digit" id="d1">7</div>
<button class="material-icons svg-arrow" id="d1-down">expand_more</button>
</div>
<div class="digitbox colon">
<span class="digit">:</span>
</div>
<div class="digitbox">
<button class="material-icons svg-arrow" id="d2-up">expand_less</button>
<div class="digit" id="d2">0</div>
<button class="material-icons svg-arrow" id="d2-down">expand_more</button>
</div>
<div class="digitbox">
<button class="material-icons svg-arrow" id="d3-up">expand_less</button>
<div class="digit" id="d3">0</div>
<button class="material-icons svg-arrow" id="d3-down">expand_more</button>
</div>
<div class="unit-text" id="pace-units">/mi</div>
</div>
<div class="clock hidden" id="speed-dials">
<div class="digitbox">
<button class="material-icons svg-arrow" id="s1-up">expand_less</button>
<div class="digit" id="s1">6</div>
<button class="material-icons svg-arrow" id="s1-down">expand_more</button>
</div>
<div class="digitbox colon">
<span class="digit">.</span>
</div>
<div class="digitbox">
<button class="material-icons svg-arrow" id="s2-up">expand_less</button>
<div class="digit" id="s2">0</div>
<button class="material-icons svg-arrow" id="s2-down">expand_more</button>
</div>
<div class="unit-text" id="speed-units">mph</div>
</div>
<div class="unit-stack">
<button class="unit-toggle pace-toggle active" id="mi-pace">/mi</button>
<button class="unit-toggle pace-toggle" id="km-pace">/km</button>
<button class="unit-toggle pace-toggle" id="mph-speed">mph</button>
<button class="unit-toggle pace-toggle" id="kmh-speed">km/h</button>
<button class="unit-toggle pace-toggle" id="kmh-speed">m/s</button>
</div>
</div>
<div class="spacer toggle-box" id="pace-post">
<a href="#pace-vs-effort" class="i-note">?</a>
<div>
<span id="pace-or-effort-pre"></span><span id="pace-or-effort">pace </span><span id="on-a-an">on an</span>
</div>
<label class="switch">
<input type="checkbox" checked>
<span class="slider round"></span>
</label>
</div>
<div class="hill-indicator">
<div class="input-row up-down-row">
<button class="material-symbols-outlined hill-button" title="Uphill or downhill">
elevation
</button>
<div class="slug">
<span class="hill-unit" id="uphill-or-downhill">uphill</span>
<span class="hill-text" id="uphill-post-text"> with a</span>
</div>
</div>
</div>
<div class="arrow-container" id="grade-input">
<div class="arrow-box">
<button class="material-icons pct-button" id="grade-m5" title="-5%">keyboard_double_arrow_left</button>
<button class="material-icons pct-button" id="grade-m1" title="-1%">keyboard_arrow_left</button>
</div>
<div class="incline-text">
<span class="incline-digits digit" id="grade-pct">
5
</span>
<span class="incline-pct digit">
%
</span>
<span class="incline-label ">
grade
</span>
</div>
<div class="arrow-box">
<button class="material-icons pct-button" id="grade-p1" title="+1%">keyboard_arrow_right</button>
<button class="material-icons pct-button" id="grade-p5" title="+5%">keyboard_double_arrow_right</button>
</div>
</div>
<div class="arrow-container hidden" id="angle-input">
<div class="arrow-box">
<button class="material-icons pct-button" id="angle-m5" title="-5%">keyboard_double_arrow_left</button>
<button class="material-icons pct-button" id="angle-m1" title="-1%">keyboard_arrow_left</button>
</div>
<div class="incline-text">
<span class="incline-digits digit" id="angle-pct">
5
</span>
<span class="deg-pct digit">
°
</span>
<span class="incline-label digit">
slope
</span>
</div>
<div class="arrow-box">
<button class="material-icons pct-button" id="angle-p1" title="+1%">keyboard_arrow_right</button>
<button class="material-icons pct-button" id="angle-p5" title="+5%">keyboard_double_arrow_right</button>
</div>
</div>
<div class="hill-outer hidden" id="riserun-input">
<div class="hill-container">
<div class="input-row">
<div class="slug">
<input class="hill-input" id="rise" type="number" inputmode="numeric" step="1" value="100">
<label for="rise" class="rise-unit" id="rise-input-unit">feet</label>
<span class="rise-text" id='rise-post-text'> of gain</span>
</div>
<span class="slug rise-text"> over </span>
<div class="slug">
<input class="hill-input" id="run" type="number" inputmode="decimal" step="0.1" value="1.0" min="0">
<label for="run" class="rise-unit" id="rise-output-unit">miles</label>
</div>
</div>
<div class="rise-run-row">
<div class="rise-run-togglebox">
<span class="rise-text">Rise:</span>
<button class="rise-toggle unit-toggle active">feet</button>
<button class="rise-toggle unit-toggle">meters</button>
</div>
<div class="rise-run-togglebox">
<span class="rise-text">Run:</span>
<button class="run-toggle unit-toggle active">mi</button>
<button class="run-toggle unit-toggle">km</button>
</div>
</div>
</div>
</div>
<div class="alert-box hidden">
<div class="alert-inner">
<span class='bulb-icon'><a href="#vert-speed-effort">!</a></span>
<span class='alert-text'>Effort-based GAP using vert speed can behave unpredictably!</span><span class='dummy'></span>
</div>
</div>
<div class="info-box hidden">
<div class="info-inner">
<a class = "i-note" id="info-i" href="#vert-speed-effort">i</a>
<span class='info-text'>This downhill might be too steep to gain the full energetic benefit</span>
<span class='dummy'></span>
</div>
</div>
<div class="hill-outer hidden" id="vertspeed-input">
<div class="hill-container">
<div class="input-row">
<div class="slug">
<input class="hill-input vert-input" id="vert-speed-input" type="number" inputmode="numeric" step="1" value="1000">
<label for="vert_speed" class="rise-unit" id="vert-unit">feet per hour</label>
<span class="rise-text" id="vert-speed-post-text"> gain</span>
</div>
</div>
<div class="vert-row">
<div class="rise-run-togglebox">
<button class="vert-toggle unit-toggle active" id="vert-speed-feet">ft/hr</button>
<button class="vert-toggle unit-toggle" id="vert-speed-meters">m/hr</button>
</div>
</div>
</div>
</div>
<div class="incline-unit-box">
<div class="unit-row hill-buttons">
<button class="hill-toggle active">grade</button>
<button class="hill-toggle">degrees</button>
<button class="hill-toggle">rise/run</button>
<button class="hill-toggle">vert speed</button>
</div>
</div>
<div class="spacer effort-container">
<span id="result-pre">is the same effort as</span><span id="result-speed-or-pace"></span><span id="results-of"></span>
</div>
<div class="pace-result-box">
<div class="left-dummy"></div>
<div class="pace-result-text">
<span class="pace-result" id="output-text">5:35</span>
<span class="convert-units" id="output-units">/mi</span>
</div>
<div class="left-dummy"></div>
</div>
<div class="info-box hidden" id="impossible-box">
<div class="impossible-inner">
<span class='bulb-icon'><a href="#errors">!</a></span>
<span class='info-text'>Energetically impossible result!</span>
<span class='dummy'></span>
</div>
</div>
<div class="unit-stack-horiz">
<button class="unit-toggle output-toggle active">/mi</button>
<button class="unit-toggle output-toggle">/km</button>
<button class="unit-toggle output-toggle">mph</button>
<button class="unit-toggle output-toggle">km/h</button>
<button class="unit-toggle output-toggle">m/s</button>
</div>
<div class="spacer">
<span id="post-result-text">on flat ground</span>
</div>
</div>
<div class="explainer-text">
<h2 id="how-to-use">How to use<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>This calculator allows you to estimate the effective difficulty of uphills and downhills for road running, trail/ultra running, fell running, skyrunning, orienteering, and incline treadmill training. The grade-adjusted pace (GAP) represents an equivalent flat-ground pace for a given incline or decline.</p>
<p>This calculator is based on energetic expenditure data from peer-reviewed scientific research on the energetic costs of uphill and downhill running.</p>
<p>You only need to input two things: your running pace (or speed), and the steepness of the hill, which you can input as a grade, slope, rise over run, or vertical speed.</p>
<h3 id="pace-vs-effort">Hill pace and flat-ground effort (forward and reverse GAP)<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>This calculator has two modes to deal with the two situations where grade adjustments to pace are useful.</p>
<p>Forward GAP states grade adjustments as follows:</p>
<div class="bq-text">Running at 7:00/mi pace on an uphill with a 5% grade is the same effort as 5:35/mi on flat ground</div>
<p>This first mode is useful when you’ve done a workout or a race that involved some hills, and you want to calculate the effective flat-ground pace you were running when you were ascending or descending a hill.</p>
<p>The second mode, which I call “reverse GAP,” can be toggled by pressing the toggle switch at the top of the app. Reverse GAP states grade adjustments as follows:</p>
<div class="bq-text">Running 6:00/mi flat-ground effort on an uphill with a 5% grade results in 7:42/mi pace
</div>
<p>This second mode is useful when making race plans, since you’ll typically know what flat-ground effort you should be shooting for.</p>
<p>For example, maybe you think you’re in 3:05 marathon shape (7:03/mi) but want to know your target splits over the first few miles at Boston. By inputting the rise over run for each of those miles, you can figure out the actual pace you should expect to see on your watch if you’re running the correct effort level.</p>
<h3>Incline and decline settings</h3>
<p>This GAP calculator supports a number of ways to select the steepness of an uphill or a downhill. You can tap the <span class='material-symbols-outlined mountain-inline'>elevation</span> button to quickly flip back and forth between an uphill and the equivalent downhill. Here are the possible ways you can specify hill steepness:</p>
<h4>Grade (percent gradient)</h4>
<p>Hill grade is the vertical gain of a hill, divided by the horizontal distance, expressed as a percent. A hill that gains 100 meters in one kilometer has a grade of 100 / 1000 = 10%.</p>
<p>The incline setting on treadmills is virtually always measured in grade, even if the display does not actually have a percent sign. So a treadmill incline of “7” is almost surely a grade of 7% (though whether that’s an *accurate* grade is another story!).</p>
<h4>Angle (degrees of slope)</h4>
<p>Angle, or slope, is the literal inclination of the hill, as you’d measure it if you were drawing right triangles in algebra class. The slope of a hill, measured as an angle in degrees, is commonly used in academic research on biomechanics. I hear that slope is also used by backcountry skiers—so maybe this mode could be useful if you’re running up hills in the summer at a ski resort.</p>
<h4>Rise over run</h4>
<p>When analyzing a hill from a course elevation map, often the elevation gain is in different units than the horizontal distance. Rise over run mode supports inputting the rise as feet or meters, and the run (meaning the horizontal distance) as miles or kilometers.</p>
<h4 id="vert-speed-info">Vertical speed / ascent rate / VAM</h4>
<p>GPS watches from companies like Garmin, COROS, and Suunto often display your rate of ascent as vertical speed, also known as “vert speed” or “VAM”—a cycling term that means
<em>velocità ascensionale media</em>
or “average ascent speed,” sometimes backronymed in English to “vertical ascent, meters per hour.”</p>
<p>Vertical speed is measured as your vertical gain per unit
<em>time</em> in feet per hour or meters per hour), so calculating the effective hill gradient requires knowing how fast you were going as well. This GAP calculator takes care of that under the hood.</p>
<p>Vertical speed is most useful when you are ascending extremely steep hills, because in these cases your vertical gain completely dominates the total energetic cost of running. When running at 24:00/mi up a 30% grade, for example, vertical speed accounts for almost 75% of your total energy cost (with the balance coming from your horizontal speed). So, on very steep ascents, you can use vert speed the same way you’d use pace on flat ground.</p>
<p><a href="#pace-vs-effort">Pace-based GAP calculations</a> are relatively straightforward with vertical speed.</p>
<p>Effort-based GAP calculations, however, are extremely complicated—do not use effort-based GAP with vertical speed unless you’re sure you know what you’re doing. See the footnote for details.<sup id="ft-2" class="footnote-super"><a href="#ft-1-note">[1]</a></sup></p>
<h3>Input and output speeds and paces</h3>
<p>This calculator lets you set your speed and effort using minutes per mile, minutes per kilometer, miles per hour, kilometers per hour, or meters per second. You can change the units of the output speed independently, for example to translate treadmill speed in miles per hour to overground running pace in minutes per kilometer.</p>
<h3>GAP for incline treadmill training</h3>
<p>This grade-adjusted pace calculator works just as well on treadmills as it does for running outdoors. In fact, it probably works better, since the energetics data it relies on for the GAP calculations was actually collected on treadmills!</p>
<p>On average, treadmill running is pretty comparable to “real” running outdoors in terms of the biomechanics. Treadmills do lack air resistance, which makes treadmill running a bit easier than outdoor running at fast speeds (below circa 7:00/mi) for a given speed and incline.</p>
<p>However, air resistance does not have much of an independent effect on GAP on the treadmill vs. GAP outdoors (see below). Some people advocate using a 1% incline on the treadmill to counter the lack of air resistance, <a href="https://runningwritings.com/2023/01/treadmill-workouts-guide.html">but I do not recommend it in most cases</a>.</p>
<p>Do be aware that different treadmill models can vary quite a lot in terms of their deck stiffness, which can affect the cost of running significantly. Not all treadmills are correctly calibrated either (both with regards to their belt speed and their incline setting).</p>
<h2 id="how-it-works">How running GAP calculations work<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>This GAP calculator estimates the effects of uphills and downhills on your running speed, assuming you are maintaining the same effort level. </p>
<p>The math behind these GAP calculations is based on data from two scientific papers: <a href="https://pubmed.ncbi.nlm.nih.gov/12183501/">Minetti et al. 2002</a> and <a href="https://pubmed.ncbi.nlm.nih.gov/28459289/">Black et al. 2018.</a></p>
<p>The Minetti et al. data contains energetic expenditure data from ten male trail runners doing uphill and downhill running at grades from 45% to -45% on a treadmill.</p>
<p>The huge range of these pace grades makes it a great dataset for modeling GAP across very steep inclines and (with some limitations) declines as well.</p>
<img src="images/02 - Energetic cost of running on inclines and declines.png" class="explainer-image">
<p>This plot shows the potent effects of inclines and declines on the energetic cost of running. From the curve on the plot, it’s possible to calculate the change in energy expenditure when running on a given uphill or downhill.</p>
<p>Both the Minetti and the Black data are measured in joules of energy per kilogram of body mass per meter of distance covered (J/kg/m) so they are already normalized to body mass, which is why you do not need to input your weight into the calculator. Converting this metabolic cost of transport to metabolic power is easy; you just multiply cost per meter (J/kg/m) by running speed (m/s) to get energy output per unit time, a.k.a metabolic power: J/kg/s or equivalently W/kg.</p>
<p>The Black et al. data contains energy expenditure data (during flat running on a treadmill) from 24 elite and 68 recreational runners. These data, shown below, allow the calculator to incorporate the effects of speed on running economy.<sup id="ft-2" class="footnote-super"><a href="#ft-2-note">[2]</a></sup></p>
<img src="images/01 - Energetic cost of running per mile.png" class="explainer-image">
<p>In the plot below, I’ve adjusted the Y-scales of both plots so they are the same, which helps drive home the point that steep grades, the metabolic cost of running is totally dominated by the vertical gain.<sup id="ft-3" class="footnote-super"><a href="#ft-3-note">[3]</a></sup></p></p>
<img src="images/03 - Inclines vs speed - energetic cost of running.png" class="explainer-image">
<h3>Calculating grade-adjusted pace</h3>
<p>The GAP calculation process (in forward mode, i.e. converting actual pace on a hill to its flat-ground equivalent) works as follows:<sup id="ft-4" class="footnote-super"><a href="#ft-4-note">[4]</a></sup></p>
<ol>
<li>Given a running speed and hill grade, calculate the metabolic cost of running that speed on flat ground</li>
<li>Calculate the increase or decrease in metabolic cost attributable to the hill grade</li>
<li>Add #1 and #2 together to get the total metabolic cost and express it as metabolic power (in W/kg)</li>
<li>Find the flat-ground running speed that demands the same metabolic power as #3</li>
<li>This flat-ground speed is the grade-adjusted pace (GAP)</li>
</ol>
<p>A similar process is used for “<a href="#pace-vs-effort">reverse mode</a>,” i.e. converting flat-ground effort to expected pace on a hill with a known grade.</p>
<ol>
<li>Given a target flat-ground effort, calculate the metabolic cost of running that speed on flat ground.</li>
<li>Express that target metabolic cost as metabolic power (in W/kg)</li>
<li>Using the hill grade, find the actual running speed on that grade that results in an equivalent metabolic power to #2</li>
<li>This incline speed is the effort-based grade-adjusted pace (GAP)</li>
</ol>
<h3>Experimental GAP versus data-driven GAP (Strava, COROS, etc.)</h3>
<p>Platforms like Strava and COROS offer their own versions of grade-adjusted pace—Strava Premium calculates GAP-adjusted pace after the fact on runs, and COROS watches can display “effort pace” in real-time, which is an individualized version of GAP. Stryd does something similar using their “power” metric.</p>
<p>I don’t know how these closed-source, proprietary algorithms work, nor how accurate they are, but there are not as many advantages as you might think to having massive observational datasets to develop GAP conversions.</p>
<p>In the real world, runners <a href="https://pubmed.ncbi.nlm.nih.gov/20010117">almost never maintain the same effective effort</a> level on hills—typically people run harder (meaning with a higher energy expenditure) on short uphills, slow down more on long uphills, and don’t take full advantage of downhills. The speed they run on a downhill is also affected by how steep of an uphill they just completed! Large databases are “polluted” by these effects, which make it hard to determine the true GAP from observational data alone.</p>
<p><a href="https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future">COROS’ effort pace method</a> sounds like it uses heart rate data, which is an improvement, but even heart rate data are plagued by heart rate drift and poor measurement from optical sensors, which tend to be biased in the worst possible way—less reliable the faster you go.</p>
<p>Heart rate drift is a problem because it represents an increase in heart rate
<em>for the same metabolic power</em>, meaning an increase in HR may not correspond to a real increase in metabolic rate.</p>
<p>The experimental data from Minetti et al. have none of these problems. Of course, this small dataset has numerous other issues, and these are the main shortcomings of this GAP calculator, but experimental studies with real energy expenditure data nevertheless have a level of control that you don’t get with observational heart rate and GPS data.</p>
<h3>Incorporating body weight: do heavier runners struggle more on hills?</h3>
<p>As noted earlier, the data used to develop this GAP calculator already have energy expenditure normalized to body mass, so you do not need to enter your weight into the calculator. However, the data used to calculate energy expenditure data on inclines and declines come from elite mountain and fell runners, who were presumably fairly lean.</p>
<p>Merely being heavier is not a guarantee that you’ll struggle on hills—if your extra body mass is in the form of lower-leg muscle mass, your added metabolic power output capabilities can offset the extra mechanical power required to ascend a hill (this is actually why physiologists normalize energy expenditure to body mass).</p>
<p>However, extra body mass on your upper body—whether in the form of fat, muscle, or a backpack—will always make uphills more challenging. Runners with a lot of extra weight in their upper body may find that the GAP predictions for steep uphills are too optimistic, i.e. the calculator predicts that you can run faster up a hill than you actually can.</p>
<h2>Is GAP accurate? Some test cases<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>There are a number of limitations to GAP calculations detailed below, but as a quick sanity check, it’s nice to run a few examples through the GAP calculator and see how they shake out.</p>
<h3>Vertical kilometer: Chamonix’s VK race</h3>
<p>The “vertical kilometer” or VK is a skyrunning event that involves gaining 1000 meters of elevation, typically over a horizontal distance of no longer than 5k. One famous
<em>kilométre vertical</em>
race is the Chamonix KV, a 3.8km course in France with a vertical gain of 1000 meters. The course record is 34:07 by François Gonon, which works out to an average pace of 8:59/km.</p>
<p>The GAP calculator suggests this is equivalent to 2:56/km pace on flat ground, or 29:20 10k pace. Keep in mind that this is surely an underestimate of the difficulty! The rough terrain at Chamonix adds to the challenge, beyond the metabolic cost of ascending 1000 meters in just over half an hour. But the ballpark figure seems about right: 29:20 for 10 km is national-caliber performance; add in some extra difficulty for the terrain and the final altitude of over 2,000m, and the GAP seems remarkably close for a world-caliber 10k performance.</p>
<h3>Pikes Peak Ascent GAP</h3>
<p>The Pikes Peak Ascent race gains 7800 feet over 13.3 mi. The course records are 2:00:20 (9:03/mi) for men and 2:24:58 (10:54/mi) for women, which convert to 5:23/mi and 6:04/mi GAP, respectively. These are on par with 1:10:35 and 1:19:30 half marathon times.</p>
<p>As with the vertical kilometer, we need to keep in mind that the terrain and switchbacks at Pikes Peak also contribute to the difficulty of the event—not to mention the finish line altitude of over 14,000 feet! Add in these factors and the GAP seems like it should correspond pretty well to elite-level fitness.</p>
<h3>Raleigh DownRun Downhill Mile GAP</h3>
<p>Raleigh, NC hosts a downhill mile race every summer that drops 131 feet over 1.0 miles. From results in the past few years, I picked two runners who were current college athletes with a TFRRS profile. Here are their race results, their predicted GAP, and their college mile PR at the time:</p>
<table>
<thead>
<tr>
<th></th>
<th>Downhill mile</th>
<th>GAP-adjusted</th>
<th>Track PR</th>
</tr>
</thead>
<tbody>
<tr>
<td>Athlete A (male)</td>
<td>4:03</td>
<td>4:28</td>
<td>4:17</td>
</tr>
<tr>
<td>Athlete B (female)</td>
<td>4:39</td>
<td>5:09</td>
<td>5:06</td>
</tr>
</tbody>
</table>
<p>Keep in mind that this race is in August, which is not when a collegiate miler is going to be in peak shape. Likely they’re hopping into a road mile for fun as they’re gearing up for cross country.</p>
<p>Again, the GAP is a remarkably good ballpark estimate for the athletes’ fitness levels.</p>
<h2>Limitations<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>This calculator only gives an
<em>estimate
</em>of grade-adjusted pace. There are a number of limitations you should keep in mind when using this GAP calculator’s pace estimates for planning and analyzing workouts and competitions.</p>
<h3>This calculator relies on a fairly small dataset<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>By far the biggest limitation of this GAP calculator is its reliance on the data from Minetti et al. 2002 for incline and decline energetic costs. That study used only ten subjects, all of whom were male and all of whom were elite mountain and trail runners. Moreover, the polynomial in the Minetti study is from averaged group data, so there’s no way to calculate any estimates of uncertainty for the predicted GAP.</p>
<p>In an ideal world, I would base this calculator off raw data from a much larger study of male and female runners coming from a wider range of ability levels, including both experienced trail runners and pure road runners. Such a dataset would enable better GAP prediction, as well as the construction of uncertainty intervals around the predicted GAP—for example, instead of predicting a GAP of 5:55/mi, you could get a best estimate of 5:55, plus a 90% prediction interval of 5:45–6:05, meaning 90% of runners would experience an equivalent effort within that range on that specific hill.</p>
<p>Such a dataset would also allow the calculator to account for whether hill-climbing ability is affected by experience level, mileage, body weight, and so on. You could even model energy utilization (carbs vs. fat) at different inclines and declines, which would be useful for planning fueling for long trail races.</p>
<p>It would actually be pretty easy to do this study from an equipment standpoint—all you need is a metabolic cart and a high-incline treadmill. Almost any university with a physiology department could do it. The main challenges would be in the study design, and data analysis.<sup id="ft-5" class="footnote-super"><a href="#ft-5-note">[5]</a></sup></p>
<p>Nevertheless, these challenges are surmountable with the right study design and data analysis strategy. Email me if you are an academic who wants to chat about doing this kind of study and making the data publicly available; I’d be happy to help (I have done studies with similar levels of complexity as part of my PhD work).</p>
<h3 id="steep-downhills">It is hard to take advantage of steep downhills<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>Virtually no one can take full advantage of the energetic savings offered by steep downhills. Even the original Minetti et al. paper notes that there’s quite a discrepancy between predicted times for net-downhill mountain races and actual times.</p>
<p>In practice, it’s likely that steep downhills (especially on trails) are too dangerous and too damaging to take at “full speed”—your body prioritizes avoiding falls and avoiding excessive muscle damage. Accordingly, this GAP calculator features a pop-up warning for declines greater than -8% that will warn you that the predicted GAP is likely going to be faster than you can actually manage in the real world.</p>
<h3>Running economy deteriorates on long downhills<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>If you do a long race with a lot of downhills (even mild ones) and haven’t trained for downhills, your muscles will sustain enough damage to increase the metabolic cost of running
<a href="https://www.tandfonline.com/doi/abs/10.1080/02640410600718228">by 3–7%</a>.</p>
<p>At races like Boston, and more extreme examples like the various REVEL downhill marathons, this muscle damage will prevent you from being able to achieve the theoretical GAP, because your flat-ground effort is no longer the same.</p>
<h3 id='walk-vs-run'>Walking can be more efficient than running on steep hills<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>On grades steeper than about 20-25%, it is often more efficient to walk instead of run, as shown in <a href='https://journals.physiology.org/doi/pdf/10.1152/japplphysiol.00546.2015'>this 2016 study</a>. In practice, elite mountain, trail, and fell runners typically use a mixture of running and walking on extremely steep slopes to spread out the stress on their muscles—walking fast on steep ascents tends to quickly fatigue your calves, while running tends to fatigue your quads.</p>
<h3>Using poles during steep hill ascents<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>The trail runners in the Minetti et al. study did not use poles during their ascents, so this calculator implicitly assumes you are not using poles.</p>
<p><a href="https://link.springer.com/article/10.1007/s00421-019-04145-2">More recent research</a> on using poles suggests that poles <a href="https://link.springer.com/article/10.1007/s00421-023-05254-9">do not have much effect</a> on the overall metabolic cost of ascending steep hills, but they likely do “save your legs” by offloading some force (and some metabolic cost) to your upper body. In practice, trail runners tend to feel less fatigued and go faster when using poles for very steep ascents. For what it’s worth, many vertical kilometer (VK) world records are set using poles.</p>
<h3>Skill level will affect energetic cost on steep hills<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>The Minetti study used elite mountain runners with extensive experience running on steep inclines and declines. Flatlanders who have little experience with running on steep hills are likely to fare worse than these elite runners, so the GAP predicted for steep climbs and descents may be too optimistic if you are not an experienced trail, fell, or mountain runner.</p>
<p>Likewise, I suspect that some of the very best uphill runners in the world are the best precisely because they can run uphills more efficiently than the average trail or fell runner. As a result, their effort-based GAPs from extremely steep climbs will overestimate flat-land performance.</p>
<h3>Footing and terrain affect the energetic cost of running<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>As noted earlier, both the Minetti and Black datasets were collected on treadmills. Real trail, ultra, mountain, skyrunning, and fell races have very rough terrain that can increase the metabolic cost of running compared to an equivalent incline with good footing.</p>
<p>Likewise, the downhills in these types of events are also very technical, which makes it hard (not to mention risky) to take full advantage of downhill energetic savings. So, GAP predictions will be too optimistic for very rough terrain. This problem likely gets a bit less severe on very steep inclines, since the elevation gain starts to dominate the total energetic cost.</p>
<h3>GAP calculations do not account for air resistance<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>This calculator does not take changes in air resistance into account when calculating your GAP. For moderate hills and slower speeds, the effects of air resistance are pretty much negligible.</p>
<p>However, if you run very fast on a very steep hill, the predicted grade-adjusted pace will be a bit too pessimistic—in this situation, the force from air resistance will drop considerably on the hill, because your actual overground velocity is significantly lower than on flat ground. Air resistance forces are proportional to the square of your running velocity, which is why these effects only become relevant at very high speeds.</p>
<p>In general, though, changes in air resistance for moderate speeds and moderate inclines will be so slight that it’s not worth worrying about. Indeed, for GAP calculations it’s not even the
<em>absolute</em>
amount of air resistance that matters; it’s the magnitude of the
<em>change
</em>in air resistance when going from flat ground to inclines or declines. So the effects of air resistance on GAP are negligible even for fast speeds, as long as they’re on mild to moderate hills.</p>
<h3>GAP calculations do not account for altitude<a class="material-icons up" href="#top">arrow_upward</a></h3>
<p>Often, if you are ascending or descending extremely steep hills, you are at altitude. This GAP calculator does not account for the effects of altitude on performance, something we saw in our analysis of the Pikes Peak Ascent earlier.</p>
<p>Compensating for altitude is fundamentally different from calculating metabolic costs on inclines—at high altitudes, the true metabolic cost of running does not change. What changes is your effective fitness level! Since you cannot extract as much oxygen from the air, your effective VO2max and maximum metabolic steady-state decline, meaning you are no longer able to sustain the same metabolic power for a given duration.</p>
<h2 id="errors">Errors<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>If your calculated gap is “🤔,” that means you’ve triggered an error.</p>
<p>The most likely cause is GAP paces that end up above 10 meters per second (which is world-caliber sprinting speed). Some hills are so steep that a theoretically “equivalent” pace is, in practice, totally impossible on flat ground.</p>
<p>You can also trigger errors by attempting to calculate mathematically impossible vertical speeds. Any given vertical speed has a minimum required metabolic power that corresponds to lifting your body weight against gravity at the specified vertical ascent rate..</p>
<p>So, even if your horizontal velocity is zero on the hill, there is a lower limit on the flat-ground metabolic power that equates to a given vertical speed. If you attempt to calculate GAP for a flat-ground effort level that falls below this metabolic power, the result will be “🤔.” See this footnote for more details</p>
<p>If you are getting errors and you don’t know why, it might be a bug in the code. Please email me if this happens to you!</p>
<h2>Examples of different running hill grades<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>As a reference point, here are some examples of different uphill and downhill grades, as a percent gradient, from a variety of famous road and trail routes.</p>
<table class="famous-hills">
<thead>
<tr>
<th>Course</th>
<th>Grade</th>
</tr>
</thead>
<tbody>
<tr>
<td>Optimal grade for a vertical kilometer (VK) personal best</td>
<td>36-57%</td>
</tr>
<tr>
<td>Baldwin Street in New Zealand, the steepest street in the world</td>
<td>35%</td>
</tr>
<tr>
<td>Point where walking becomes more efficient than running</td>
<td>20-25%</td>
</tr>
<tr>
<td>Pikes Peak Ascent average grade</td>
<td>11.3%</td>
</tr>
<tr>
<td>Steepest uphill 100m at the Boston marathon</td>
<td>8.6%</td>
</tr>
<tr>
<td>Steepest incline allowed on US interstates</td>
<td>6.0%</td>
</tr>
<tr>
<td>Kenya’s Fluorspar run average grade</td>
<td>5.8%</td>
</tr>
<tr>
<td>Biggest hill at Gale Woods Farm XC course</td>
<td>5.7%</td>
</tr>
<tr>
<td>Heartbreak Hill at the Boston Marathon</td>
<td>3.5%</td>
</tr>
<tr>
<td>Verrazano-Narrows Bridge at the New York City Marathon</td>
<td>3.0%</td>
</tr>
<tr>
<td>Steepest 5k on Magnolia Road (dirt section) in Boulder, CO</td>
<td>3.0%</td>
</tr>
<tr>
<td>St. George Marathon average grade</td>
<td>-1.8%</td>
</tr>
<tr>
<td>Last 20mi of Comrades Marathon</td>
<td>-2.1%</td>
</tr>
<tr>
<td>REVEL Mt. Charleston Marathon average grade</td>
<td>-3.7%</td>
</tr>
<tr>
<td>Steepest downhill 100m at Boston marathon</td>
<td>-7.9%</td>
</tr>
</tbody>
</table>
<h2 id="get-updates">Get updates<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>If you want to find out when I update this app, or get notified when I build new apps and publish new running research on my website, sign up for my email list with this form!</p>
<div class="newsletter-block">
<script async src="https://eomail6.com/form/187bb3d4-92e9-11ed-8dcb-9536633250ee.js" data-form="187bb3d4-92e9-11ed-8dcb-9536633250ee"></script>
</div>
<h2 id="contact">Contact<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>If you've got feedback, want to see a new feature, found a bug, or just want to chat, please reach out! I read every email I receive, and I do my best to respond. You can reach me at <a class="email" href="mailto:[email protected]">[email protected]</a>.</p>
<p>I'm also on <a href="https://twitter.com/JDruns">X</a>, but the best way to follow my work is definitely my <strong><a href="https://runningwritings.eo.page/news-and-notes-signup">email list!</a></strong></p>
<h2 id="support">Support my work<a class="material-icons up" href="#top">arrow_upward</a></h2>
<p>This app is 100% free and open-source. If you enjoy my work and want to help support me, be sure to check out my book, <strong><a href="https://www.amazon.com/Modern-Training-Physiology-Long-Distance-Runners/dp/0615790291">Modern Training and Physiology </a></strong> - it's available on Amazon as both an eBook and paperback.</p> <p>I also offer <strong><a href="https://runningwritings.com/coaching-and-consulting">coaching services</a></strong> for those interested.</p>
<h2 id="footnotes">Footnotes<a class="material-icons up" href="#top">arrow_upward</a></h2>
<ol>
<li id="ft-1-note"><p>Effort-based GAP calculations are an extremely thorny problem if you do not know your true running speed and you do not know the grade you are running on. There are three reasons why this is a difficult problem.</p>
<p>The first reason is that your vertical speed is a function of both the grade you are ascending (or descending) and your *actual* horizontal speed, not your flat-ground effort level.</p>
<p>The second reason is that there are sometimes multiple grades that can achieve the same metabolic intensity, and the same vertical gain per hour—imagine running fast up a gradual slope, or running slow up a very steep one. Both could yield the same metabolic intensity, and have the same vertical speed!</p>
<p>The third reason is that some rates of vertical ascent are mathematically impossible to achieve below a minimum metabolic power output, and hence put a lower boundary on the possible flat-ground equivalent pace. </p>
<p>To maintain a vertical speed of 1000 meters per hour, there’s a set amount of mechanical power that’s required to lift one kilogram of body weight up 1000 meters in one hour. If your target flat-ground effort requires less metabolic power than that minimum, the calculator will return an error—the flat-ground effort is too low to achieve the specified vertical speed, no matter how slow you go.</p>
<p>This GAP calculator uses a grid-search approximation to search across possible hill grades that provides both the specified vertical speed and matches the target metabolic effort. This approach is relatively fast, but provides no guarantees for situations where multiple possible grades match the target metabolic effort.</p>
<p>Again, unless you really know what you are doing, stick with pace-based GAP when using vertical speed.<a href="#ft-1">⤴️</a></p></li>
<li id="ft-2-note">The recreational runners cover a much narrower range of speeds than the elite runners because it’s only possible to measure running economy below LT2, the second lactate threshold (circa 15k-HM pace). Many of recreational runners had 10k PRs of over 40 minutes.<a href="#ft-2">⤴️</a></li>
<li id="ft-3-note"><p>While the elite runners are, on average, more economical, as seen by the lower energetic costs across the board for the red curve vs. the blue curve, there are not meaningful differences in the <em>shape</em>of the economy-speed curve for recreational vs. elite runners, so it’s not necessary to incorporate these differences into the calculator— that constant offset cancels out in the calculations.<a href="#ft-3">⤴️</a></p></li>
<li id="ft-4-note">A more subtle point about this calculation method is that it assumes an “additive” model for metabolic cost, in that the energetic cost of a certain speed and incline combination is equal to the independent effects of speed on energy expenditure, plus the independent effects of incline—but assumes no direct interaction between the two. This is an inherent limitation of relying on separate datasets for estimating speed effects and incline effects on the metabolic cost of running, and is another reason I’d like to see a large comprehensive dataset on speed, incline, and energetics. Calculating speed-incline interactions in this situation is fully possible with modern biostatistics techniques.<a href="#ft-4">⤴️</a></li>
<li id="ft-5-note">The two main challenges would be (1) the study would require several visits, and “incline-naive” runners will show significant learning effects as they become more skilled at running on steep inclines and declines; and (2) less-fit runners would not be able to complete the steeper uphill sections at below LT2, so you would not be able to get data for all speed-incline combinations for all subjects. Both problems are fully tractable with modern statistical models, though.<a href="#ft-5">⤴️</a></li>
</ol>
</div>
</main>
<footer>
Made by <a class="author-link" href="https://runningwritings.com">John Davis</a>
<a href="https://github.com/johnjdavisiv/gap-app" target="_blank"><i class="fa fa-github github-icon"></i></a>
</footer>
</body>
</html>
</html>