How Velosplit's cycling power model works

Velosplit turns a GPX course, your FTP and a goal time into a target wattage for every stretch of the route. This page documents the model behind that: the equations, where each one comes from, and which parts are established physics and which are judgement calls. Studies are cited by number and listed at the end.

The resistance model

On each segment of the course the model balances the power you put through the pedals against the three forces that resist you: air drag, rolling resistance and gravity. This is the equation of motion of a cyclist set out by di Prampero and colleagues [4] and validated against measured road power by Martin and colleagues [6], who found the modelled power matched measured power with a standard error of 2.7 W when the inputs were measured carefully. That figure validates the equation under controlled conditions, with measured drag and steady speed. It is not a measured error margin for Velosplit, whose inputs are estimates and whose model is simpler.

η · P  =  ½ · ρ · CdA · (v + w) · |v + w| · v   (air drag)
       +  Crr · m · g · cos θ · v             (rolling resistance)
       +  m · g · sin θ · v                   (gravity)

Here P is your power, η the drivetrain efficiency, ρ the air density, CdA your drag area, v your ground speed, w the headwind component, Crr the rolling resistance coefficient, m the combined mass of rider and bike, g gravity (9.80665 m/s²) and θ the slope angle, the arctangent of the gradient. Velosplit solves this for v on every segment.

Air speed is not ground speed

Drag builds on your speed through the air, v + w, while the power it costs is set by your speed over the ground, v. The two only collapse into a single cubed term in still air. The model squares the air speed with its sign preserved, so a tailwind that outruns you pushes you along rather than holding you back.

Solving for speed

The equation is a cubic in v, but the sign of the air speed splits it into cases, so rather than juggle those Velosplit solves it numerically the same way for every wind and slope: it brackets v by bisection and then refines it with Newton–Raphson steps until the power balance is within 0.01 W. Speed is held between 0.5 and 40 m/s (about 1.8 to 144 km/h). On a climb steep enough that your power cannot move you faster than the floor, the model reports the floor rather than stalling, and descents are capped at a maximum speed you can set, 70 km/h by default.

To hit a goal time, the planner searches for the base power, between 50 and 600 W, whose plan finishes within half a second of the goal. A goal outside what that range can produce is reported as unachievable instead of being forced.

Drivetrain losses

Not all pedalling power reaches the wheel. Spicer and colleagues measured chain-drive efficiency across loads, speeds and sprocket sizes and found values from about 81 to 98.6 percent [7], the low end coming from light loads and small sprockets. Velosplit uses a fixed 97.6 percent, from the favourable end of that range, so small sprockets, low loads or a worn, dirty chain cost more than the model assumes.

Air density

Air gets thinner with altitude, which lowers drag. Velosplit computes the density at the elevation of each segment from the International Standard Atmosphere [9], which falls 6.5 K per kilometre from 288.15 K and 101,325 Pa at sea level:

T = 288.15 − 0.0065 · h          (kelvin, h in metres)
p = 101325 · (T / 288.15)^5.255   (pascals)
ρ = p / (287.05 · T)              (kg/m³)

This is a standard day. Real temperature and pressure are not used, and they matter: at the same pressure, a 35 °C day has air about 6.5 percent thinner than the standard 15 °C.

Drag area (CdA)

Aerodynamic drag is the largest force at racing speed [3], so CdA matters more than any other rider input. Velosplit estimates your frontal area from height and mass with a regression reported by Faria and colleagues [5], from Bassett and colleagues [2], for the aero-racing position on aero bars:

A = 0.0293 · H^0.725 · M^0.425 + 0.0604   (H in metres, M in kg)

It then multiplies that by a factor for your riding position. The regression was reported for the aero position, but Velosplit uses its output as a drag area at the hoods and scales from there. The factors below were chosen so that a 178 cm, 75 kg rider lands on the CdA values typically measured in each position. They are a calibration, not a result from a study, and fitting one reference rider says little about how well they fit other body sizes or how a given rider sits on the bike.

PositionFactorCdA, 178 cm / 75 kg
Tops (upright)1.150.39 m²
Hoods10.34 m²
Drops0.880.30 m²
Aero bars0.730.25 m²

This is a population regression rather than a measurement, so a rider who knows their real CdA should enter it and override the estimate. Field-test methods for measuring it are reviewed by Debraux and colleagues [3].

Wind

You enter one wind speed and the direction it blows from, measured clockwise from north, the convention every forecast uses. For each segment the model takes the component of that wind along the direction the road is heading: the wind speed times the cosine of the angle between the two. A headwind is positive and a tailwind negative. The wind is the same for the whole route. Only this along-road component is used, so a pure crosswind is treated as still air.

Gradient-aware power targets

Riding at constant power is not the fastest way to finish a hilly course. Swain modelled that at the same average power, a little more power on climbs and into headwinds and a little less on descents and with tailwinds saves time [8]. Velosplit applies that idea with a multiplier on your base power for each gradient band:

TerrainGradientPower multiplier
Descentsteeper than 3% downhill×0 (coasting)
Gentle descent−3% to −1%×0.85
Flat−1% to 2%×1
Climb2% to 5%×1.1
Steep climb5% to 8%×1.15
Very steep climbabove 8%×1.2

Swain's result supports the direction of these multipliers, not their size. Nor does holding average power equal mean the physiological cost is equal; Velosplit keeps that in check through the normalized power and intensity targets below. The numbers are a pacing convention chosen for Velosplit, not measured physiology. The flat band reaches slightly below zero so that ground within the noise of the elevation data reads as flat, instead of being split between two power targets on the sign of the noise.

Before any of this, the route is resampled every 25 metres, its elevation smoothed over 150 metres and its gradient clamped to ±25 percent, so GPS noise does not become phantom hills. Nearby stretches of the same terrain are then merged into the splits you see in the results.

Normalized power, intensity factor and TSS

These are the metrics Allen and Coggan describe [1]. Normalized power estimates the physiological cost of a variable effort, and Velosplit computes it in this order: sample the planned power onto a one-second grid, take a 30-second rolling mean, raise each value to the fourth power, average, and take the fourth root. The order matters. Raising to the fourth power first would leave the averaging with nothing to smooth and report a plain fourth-power mean instead.

The one-second grid is deliberate. Segments rarely last a whole number of seconds, so the samples are placed by the rounded running total of elapsed time rather than by rounding each segment on its own. That keeps the series the same length as the ride instead of letting per-segment rounding errors pile up and skew the weighting.

IF  = NP / FTP
TSS = hours · IF² · 100

Because the power series is a plan rather than a recording, it is smoother than a ridden one, so the normalized power it produces is likely to be lower than what the same ride records, though the 30-second smoothing already damps the shortest surges.

Pacing by effort

With no goal time, the planner solves for the base power whose normalized power lands on a target intensity factor, to within 0.0005. Solving for intensity rather than setting base power from FTP keeps the levels comparable across courses: a hilly route spends much of its time above the base power, so the same base would be a materially harder ride there than on a flat one.

  • Low, intensity factor 0.65: endurance pace you could ride all day.
  • Moderate, intensity factor 0.78: tempo effort for a long, committed day.
  • High, intensity factor 0.88: race effort near threshold.

Sustainability ceilings

The planner warns that a plan is likely unsustainable when its intensity factor is more than 0.02 above a ceiling for the ride's length, and calls it aggressive when it is within 0.05 below it. These ceilings are heuristics, not measured physiology: they are rules of thumb for how hard a trained rider can go, and individuals differ widely. They also step rather than taper, so a ride just over a band boundary meets a noticeably lower ceiling than one just under it. Treat the warning as a prompt to check the plan, not a verdict on what you can do.

Ride lengthCeiling (intensity factor)
up to 1 h1.05
1 to 2 h0.95
2 to 4 h0.85
4 to 6 h0.75
over 6 h0.65

What the model leaves out

  • Drafting. Every rider is modelled in clean air.
  • Acceleration. Each segment is solved at a steady speed, so no energy is carried between a descent and the climb after it.
  • Weather. Air density assumes a standard day, and the wind is one constant value.
  • Crosswind aerodynamics. A crosswind changes the angle the air meets you at, and with it your drag; the model only uses the headwind or tailwind component.
  • Surface. One rolling-resistance coefficient, 0.005 by default, is used for the whole route.
  • Braking and cornering, beyond the descent speed cap, and fatigue.

References

  1. Allen H, Coggan A. Training and Racing with a Power Meter. VeloPress.
  2. Bassett DR Jr, Kyle CR, Passfield L, Broker JP, Burke ER. Comparing cycling world hour records, 1967–1996: modeling with empirical data. Medicine & Science in Sports & Exercise. 1999;31(11):1665–1676.
  3. Debraux P, Grappe F, Manolova AV, Bertucci W. Aerodynamic drag in cycling: methods of assessment. Sports Biomechanics. 2011;10(3):197–218. doi:10.1080/14763141.2011.592209
  4. di Prampero PE, Cortili G, Mognoni P, Saibene F. Equation of motion of a cyclist. Journal of Applied Physiology. 1979;47(1):201–206.
  5. Faria EW, Parker DL, Faria IE. The science of cycling: factors affecting performance – Part 2. Sports Medicine. 2005;35(4):313–337.
  6. Martin JC, Milliken DL, Cobb JE, McFadden KL, Coggan AR. Validation of a mathematical model for road cycling power. Journal of Applied Biomechanics. 1998;14(3):276–291.
  7. Spicer JB, Richardson CJK, Ehrlich MJ, Bernstein JR, Fukuda M, Terada M. Effects of frictional loss on bicycle chain drive efficiency. Journal of Mechanical Design. 2001;123(4):598–605.
  8. Swain DP. A model for optimizing cycling performance by varying power on hills and in wind. Medicine & Science in Sports & Exercise. 1997;29(8):1104–1108.
  9. U.S. Standard Atmosphere, 1976. NOAA, NASA and U.S. Air Force.

Normalized Power, Intensity Factor and Training Stress Score are trademarks of Peaksware, LLC.