Wheel Selector Project

I’ve spent a lot of time in the back of sprinter/race vans. In the past few years the assholes sitting next to me in the van have increasingly asked me the same question over and over again: What wheels should I use for this race.

In an effort to cut the questions off at the pass and provide myself a tool to answer the question of how much difference does wheel selection actually make I made a tool to try to help figure it out. Now I’ve always secretly kind of suspected the answer is rather boring but I wanted a quantifiable way to answer the question. The difficulty with doing real world experiments is that there are a ton, ton, ton of unknown inputs that can throw off your results. So instead of doing countless rides and averaging the results I think it’s a better route to create a model that will basically ignore a lot of the smaller inputs that go into power required to cycle (i.e. hitting a pothole, lubing chain, tire pressure, hitting a pothole, turning vs going straight, etc). This should give a clearer picture about what wheel to use.

At the moment it’s a very bare bones calculation


You can also follow the project on GitHub (yea i know PHP is a dinosaur, working on a python update so I can do more fancy data analysis, and I’m also awful at coding so be kind) :

Wheel-Selector on GitHub

Feel free to give me feedback or check out the code and if there’s any improvements you can think of I’d love to hear about them.

Immediate future steps:

  • Get a CFD study going to find correction factor to figure out what an individual wheelset CdA means when you put those wheels on a bike
  • Independently select wheels
  • Incorporate rolling resistance into calculations (mostly with regards to tubular vs. clincher vs. tubeless, also tire size)
  • Add correction factor for a solo ride vs group ride (currently this option does nothing)

Short term future steps:

Long Term Future Steps:

  • Leverage more Strava data (i.e. pull a Strava ride with power, speed, elevation data and determine the wheelset that would require the least power)
  • Switch project to Python for better API tool access (other sites, visualization, tools, etc)
  • Get moar wheel data

Nitty Gritty is below if you’re interested in a good read to put you to sleep


There are a few steps and notes to this:

  • Estimate Rider CdA (read up on this: CdA primer) –
    • This is probably the most ‘guesswork’ part of the exercise. Using a method developed in This Paper a persons Body Surface Area is estimated from their height and weight, and using an empirical formula a base level of rider CdA is found.
    • The next step here is to correct this base CdA to riding style, here I used CdA values from Cycling Power Lab to correct the base CdA value to each of the riding positions. Then using the slider in the tool to set how much time you spend in each position the tool will produce a time-weighted CdA that takes into account how much time the rider spends in each position
  • Get single CdA value for Wheelset
    • This is another approximation, while we have actual CdA’s for each wheelset wind angle we don’t know which wind angle the wheelset is seeing at each time point. So to take into account all the drag information there is a weighing scheme used where each wind angle CdA value is corrected and summed into an overall effective CdA value. This is currently a rough weighting scheme where 0 degrees =30%, 5 degrees =30% of the time, etc (this is saying you don’t see heavy crosswinds for a large portion of the ride)
    • This will eventually take into account some wind term which would increase the high AoA wind angles for windier days
  • Calculate Air Density
    • After my previous long blog post about air density and Strava I called a weather API to grab current basic weather info for a zip code, or you can enter that info yourself to play around with the numbers.
  • Incorporate Wheel Drag to Overall Rider Drag
    • This still needs some work
    • Currently we take the above estimated Rider CdA value, subtract our base-wheelset (Boyd Altamont) CdA, then add back in the CdA of the wheel we’re calculating for
    • There are a few problems that I still need to refine:
      • Currently assume a one wheel system
      • All wheelset drag values are for wheel without frame/fork/rider etc so probably overestimates impact of different wheels
      • Currently these are acceptable assumptions since they likely somewhat cancel each other out (i.e. rear wheel is not as effective aerodynamically, and front wheel in frame is still less aerodynamically effective than a wheel by itself)
      • Will have to do a series of CFD studies to determine an “Effectiveness factor” to adjust wheel CdA to Wheel-in-Bike CdA
        • If anyone knows of any sort of this info It would be greatly appreciated
  • Calculate work to overcome Air resistance
    • Since speed, air density, and CdA are already given either in the inputs or above, calculating work required is relatively straightforeward
    • Important Assumptions:
      • Constant Speed throughout ride
      • Wind not a factor
      • Does not take into account reduced speed while climbing or increased speed while descending
  • Calculate work to overcome climbing resistance
    • Again fairly straight forward at the moment and could use A LOT of improvements (read through these assumptions carefully)
    • Assumptions:
      • Climbing work ONLY calculated for going up-hill
      • No benefit (work reduction) from descending
        • This would be too complex to approximate, additionally a lot of braking happens on descents which would be difficult to incorporate into the overall calculation



Leave a Reply

Your email address will not be published.