Saturday, 18 January 2025

Indoor cycling set-up v3

In a couple of previous blog posts I showed my indoor training setups, the first one in 2016 here, and then my improved one built in 2020 here.  In the last few days I've improved it further.

With hindsight, my cooling fan setup wasn't as good as it could be.  The cheap pedestal fan that I've used for the last four years couldn't provide enough flow and cooling for the warmest days or the hard workouts, although it was okay most of the time.

That has changed recently though, after I bought two Cleva centrifugal fans, after seeing some good reviews from people on the TrainerRoad Forum, who discussed UK alternatives to the Lasko fan that was highly recommended by tghe guys on the TrainerRoad podcast.

Initially, I bought a single Cleva Air Vacmaster Air Mover fan, which about  £50 at the time.  This was great, but it has a manual switch, so I also bought a remoted controlled plug set from Amazon for £18.99, to allow me to turn the fan on, after I warm up, about 5 minutes into the cycle.  The fan speed was excellent, but the fast moving air stream was quite narrow, not broad enough to cool my whole body.  Therefore I decided to buy a second fan to give me more complete body coverage.

The second Cleva fan I bought was their more expensive Vacmaster Cardio54, which I bought for £79.99.  It's identical to the cheaper Air Mover, except that it has a built in remote control which is slightly better because it also allows the speed to be selected from the remote, rather than just on/off.

As shown in the photo at the top, I have mounted these two fans in two positions in front of my bike and trainer, one directed at my head/torso from above and the other directed at the lower half of my body.  After some experimenting, I found this to be the best setup.

The lower fan was easy to position, and required only a small block to get the angle just right.  Also, it could stay in that position and wouldn't get in the way when I'm not cycling.

The upper fan was a bit more tricky though.  The fan is capable of being mounted to a standard tripod threaded attachment, or alternatively mounted onto a TV wall mount that has a VESA mount.  However I didn't really want to spend more money on a TV mount, so I re-purposed the fan swing arm from my old pedestal fan, as shown in the photo on the left, using a cylindrical wooden rod as the arm.  To attach the fan, I made a 3D-printed backet, using the 3D printer that I brought late last year.

I designed the bracket in Autodesk Fusion 360, which is free CAD software. I incorporated a quick release mechanism into the bracket, re-using an old QR seat post clamp that I had spare.

This allows the angle to be tilted to the best angle to direct air on my head and upper body.  The swing arm allows the upper fan to fold out of the way, against the wall, when not in use.

I'm really pleased with the new setup.  The amount of cooling is excellent, and in the colder winter months it is occasionally even too much, even on the lowest setting.  On those colder days, I only turn the lower fan on.  The photos below show the setup with everything in place (left), and on the right it's hwo it looks when everything is folded away to make more space in my garage.



 



Wednesday, 1 January 2025

Indoor cycling fan upgrade and speed check

I recently bought a Cleva Air Mover centrifugal fan as an upgrade to my indoor cycling setup. 

It came highly recommended on several TrainerRoad forum posts (see here).  Compared with my old fan, it seems to be a lot better.  I wanted to measure exactly how much better it is, and this blog post describes my attempts to measure the air speed that the fan generates.  As usual, it's all a bit nerdy and over-the-top, so sorry about that.



Airspeed measurement methods

I bought a cheap anemometer (an anemometer is air speed measurement device) from AliExpress for an incredibly cheap £13.05.  It seemed good, but given that it was so cheap, I wanted to check its accuracy with a second source of airspeed measurement.

Having recently bought a 3D printer, I decide to make a pitot tube that I could use as a 2nd instrument to measure the air speed generated by the fan.  It was quick to create in CAD (<1 hour) and printed in less than an hour.

A pitot tube is a device that measures the total pressure of the flow, by having tube that is orientated in the flow direction.  When the flow enters the pitot tube is comes to rest within the tube, and when it does so the pressure will be the total pressure. Total air pressure is the ambient (static) pressure of the air plus the dynamic pressure of the moving air.

Hence, the difference between the static pressure and the total pressure is the dynamic pressure, which is a function of the air speed and the air density.  Hence, but knowing the air density and the by measuring the dynamic pressure (via the difference of total and static pressures) the air speed can be obtained.

I measured the difference between static and total pressure using a device called a manometer, which is the U-shaped device shown in the sketch on the left.  The manometer tube is filled with a liquid, shown in purple in the sketch, and could be any liquid such as water or mercury.  I used water because it was easy and its relatively low density helped with measurement precision.

I bought a manometer from Amazon for about £20.  A quick calculation in Excel allowed me to calculate the airspeed that corresponds to various manometer water height differences.  I also checked how sensitive the results would be to small changes on pressure and temperature, which affects the air density.



Results

I measured the airspeed at 0.5 metres from the fan nozzle and also at 1.0 metres from the nozzle.  These are distances that are representative of how far away the fan would be located from me when I'm cycling.

0.5 metre distance

The AliExpress anemometer gave a maximum airspeed, in the centre of the air stream, of 11.2 m/s.  The reading fluctuated by approximately +/-0.8 m/s.

My pitot tube gave a water height difference of 8 mm in the manometer, with a manometer measurement precision of about +/-1 mm.  This corresponds to an airspeed of 11.32 m/s +/- 0.8 m/s.  The nature of the pitot tube and manometer meant that any air speed fluctuations are damped, although the +/-1mm manometer measurement precision results in a +/-0.8 m/s uncertainty. The two measurement sources, the pitot and the AliExpress anemometer, therefore agree very well for this 0.5 metre case.

1.0 metre distance

At a distance of 1 metre, the AliExpress anemometer gave a maximum airspeed of 8.8 m/s, with +/-1.0 m/s fluctuations.

My pitot tube gave a water height difference of 4 mm in the manometer, +/-1 mm.  This corresponds to an airspeed of 8.0 m/s +/- 1.0 m/s.  Again, the two measurement sources therefore agree very well at this distance of 1m, and well within their measurement precision.

The Cleva website says that the maximum airspeed of their Cardio 54 fan, which is mechanically identical to their Air Mover Fan, is 54.0 kph.  54 kph corresponds to an airspeed of 15.0 m/s.  It's highly likely that this 15 m/s quoted by Cleva is the maximum velocity, directly in front of the nozzle.  That 15 m/s values seems to be believable and consistent with my measurements of 11.2 m/s and 8.8 m/s at 0.5 metres and 1.0 metres respectively.







Saturday, 28 September 2024

Back-to-back rolling resistance testing: MTB versus Cyclocross tyres

Last year, in October 2023, I published the results from some tyre rolling resistance tests (see blog post here) in which I tested my cyclocross bike with 33mm cyclocross tyres.

Those tests showed that my cyclocross (CX) tyres were much slower than my Schwalbe Thunder Burt mountain bike (MTB) tyres. The CX tyres had a CRR value nearly double the CRR of the MTB tyres, which was a huge difference.

However, the two tyres were tested on different days, with different bikes and different power meters, so there were a number of factors that cast doubt upon that comparison.  Since doing that test, and especially as the results were so surprising, I've wanted to repeat the test by testing both tyres on the same day, with same power meter, thereby improving the quality of the test.  This blog post describes my latest test results, and thereby allows me to conclude, with much more certainty, which of my two bikes is faster for dry cyclocross races.


Recap of previous test results

The previous results are shown in the plot to the left.

The data points shown in red are the CRR values obtained from my hardtail mountain bike tested in June 2022.  The CRR values reach impressively low values (~0.015), much lower than the two sets of cyclocross tyres plotted in blue and green.

As noted in the plot, the Challenge Grifo/Baby Limus tyre test was done a day when the ground was softer.  This will have certainly caused the CRR values to be higher, although it's not clear how much the softer ground accounted for the differences.  Note also that the softness of the ground was only determined qualitatively by me, with no measurements etc of the firmness.


New test setup

The new test is better in several ways:

  • Three different sets of tyres, all tested back-to-back on the same day.
  • Same power meter for all tests: Favero Assioma Pro MX-2 power meter pedals.
  • The power meter pedals are a dual-sided power meter, rather than single sided power meter that I've used in the past for most of the previous testing.
The use of a dual-sided power meter ensures total power is measured, whereas single-sided power meters measure only one side (one leg) and then assume the other leg is producing the same power in order to infer total power. Dual-sided power meters are therefore superior, especially since I have discovered that my left leg/right leg balance is not 50/50 (it's more like 53% left, 47% right).  Also, and more importantly, I've also discovered that my left/right leg imbalance is not fixed, and it varies with power, so there is inconsistency and inaccuracy whenever I use my single-sided powered meter. 

Test order:

  1. Drop Bar MTB with 2.35" (60 mm) Schwalbe Thunder Burt Super Race tyres @16 psi
  2. Cyclocross bike with 33 mm Challenge Baby Limus HTLR tyres @20 psi
  3. Drop Bar MTB with 2.35" (60 mm) Schwalbe Rocket Ron Super Race tyres @16 psi

The test was performed in my usual way (see Chung method description here), with the exception that I tested only one pressure per tyre/bike this time, using pressures that I know from previous testing give good rolling resistance results but without negative drawbacks like pinch flat risks.

Speeds were measured using a hub-based speed sensor, with the diameter in my Garmin head unit set to a fixed value of 2115 mm.  Measured speeds were then scaled in the analysis based on measured diameters to give the correct speeds:

  - Schwalbe Thunder Burt:  Speed scaling factor = 2228 / 2115
  - Challenge Baby Limus:  Speed scaling factor = 2110 / 2115
  - Schwalbe Rocket Ron:  Speed scaling factor = 2245 / 2115





Results

I performed the Chung method (virtual elevation) analysis using a fixed CdA or 0.40 m^2.  It's obviously wrong to use the same value for both bikes, because it's likely that the CX bike with a lower frontal area (narrower tyres, etc) will have a slightly lower CdA.  However, in the same way that I've done it previously (see here), by using this fixed value of CdA, any performance differences between the three setups, whether those performance differences comes from aero, rolling resistance or something else, will be attributed to CRR.  Hence, whichever setup has the lowest CRR using this style of analysis will be the fastest bike.

Results with Fixed CRR


Using a fixed CRR value of 0.0261, the virtual elevation plots show that the three setups are reasonably similar.

Note that the variations in the measured elevation (the green line), should be ignored because this is simply a drift caused by changes to ambient pressure during the test (note that a one metre elevation difference measured by the Garmin barometer is equivalent to just a 0.12 millibar change in ambient pressure).  The tests were done riding laps of a grass field, so the actual elevation always returned to the same value, in reality.

The variation in the orange virtual elevation profiles show which setup is fastest.  The CX bike with 33 mm Baby Limus tyres is fractionally slower than the drop bar MTB with Thunder Burts, because it's VE profile rises slightly.  The fastest setup is actually the third one tested, the MTB with Rocket Rons, since the VE profile falls slightly for that third test.

Results with adjusted CRR values

The CRR values can be adjusted to 'flatten' the VE profiles, as shown below.


This plot shows that the three setups have the following CRR values:

  • Drop Bar MTB with 2.35" (60 mm) Schwalbe Thunder Burt tyres:  CRR = 0.0261
  • Cyclocross bike with 33 mm Challenge Baby Limus HTLR tyres:  CRR = 0.0263
  • Drop Bar MTB with 2.35" (60 mm) Schwalbe Rocket Ron tyres:    CRR = 0.0251

Note that difference between the Rocket Ron CRR of 0.0251 and the Baby Limus CRR of 0.0263 is equivalent to 6.7 Watts of rolling resistance for a 85 kg bike+rider travelling at 15 mph.  These differences aren't significant, but they aren't particularly large differences either.

It's also interesting to note the average speeds, although it's more difficult to conclude which setup is faster form these speed, because the average power are not exactly the same.

  • Drop Bar MTB + Schwalbe Thunder Burt tyres:  Avg speed = 13.79 mph @203W avg
  • Cyclocross bike + Challenge Baby Limus tyres:  Avg speed = 13.33 mph @193W avg
  • Drop Bar MTB + Schwalbe Rocket Ron tyres:    Avg speed = 13.60 mph @195W avg

Incidentally, one of the benefits of the virtual elevation method is that it's not necessary, as a tester, to hold a fixed power.  That's a really inconvenient constraint that many testers put upon themselves if they don't use a virtual elevation method and try to hold a fixed power.

Finally, it's interesting to note that the final two laps for the Rocket Ron have a significantly rising profile, even though the first four laps were flat.  Those last two laps would have a measured CRR of 0.0271, which is strange.  I have no explanation for these weird results during the last couple of laps.


Conclusions

I set out to see repeat my previous tests but with a better standard of testing, to see whether my previous conclusion that MTB tyres are faster for cyclocross still holds true.

The conclusions from this test aren't quite so clear.  The MTB tyres are still slightly faster, but not significantly so this time.  The MTB tyres are only about 1-7 Watts faster.  Therefore, I'll likely use my cyclocross bike if there is any chance of mud, since my CX bike has much better mud clearance and is less likely to get jammed up from sticky mud.

Perhaps the most surprising result of this test is that the Rocket Ron tyres were actually faster than the Thunder Burt tyres, despite being how knobbly they are compared with the Burts, and considering the tyres are similar in every other respect.  This goes against what I'd expect and is contrary to Bicycle Rolling Resistance tests (although the Rocket Ron performs quite well on BRR).  This is a test result that would be worth trying to reproduce at some point.


Sunday, 21 January 2024

Testing Schwalbe's Super Ground versus Super Race tyre versions

Last month I posted the results of the tyre rolling resistance testing I did, in which I compared the Schwalbe's Thunder Burt Super Race against the Continental Race King Protection.

Both are fast tyres, but the Super Race version of the Thunder Burt has never been tested by BRR (BicycleRollingResistance.com). Only the more robust Super Ground version of the Thunder Burt has been tested (see here).  Nevertheless, that Super Ground version of the Schwalbe Thunder Burt is so far the fasted MTB tyre tested by BRR, marginally faster than the Continental Race King Protection. 

In principle, the thinner carcass of the Super Race version of the Thunder Burt should be faster than the Super Ground version.  This is at least what Schwalbe claims.  However, some tests on BRR in the past gave some unexpected results, with the Super Ground version of the Racing Ralph testing a few Watts faster than the Super Race version.  This showed that it's not guaranteed that the Super Race version should be faster tyre, which is what motivated me to do this test.


Test details

For this test I was fortunate to have two new 2.35" Schwalbe tyres, that were brand new and unused until this test.  I had bought both the Super Ground and Super Race tyres in late 2023, so there was minimal uncertainty coming from the effect of any tyre ageing.

I tested the tyres using the same protocol used previously, which I explained in a previous post here.  As for my most recent test though, I used my MTB with its Power2Max spider-mounted power meter which measures total power.  As a consequence, this was one of the best executed and best controlled tests I've done.

I tested the two tyres in an A-B-A-B manner, so both tyres had a repeated test.  In addition, I also test my older 2022 Schwalbe Thunder Burt Super Race tyre first, to check that it gave similar results to last week.


Results

The results are shown again below.  The results are fairly conclusive, showing the Super Race version of the tyre (plotted with purple symbols/lines) being faster than the Super Ground version (plotted in red).








Sunday, 14 January 2024

Validating my power delivery optimiser: Step 4

Excel-based optimiser versus Best Bike Split
Step 4: Calculating the optimum power delivery profile using my optimiser.  

In the previous blog post (Step 3), I showed the BestBikeSplit recommended power profile and the results of my Zwift ride when I followed BestBikeSplit's recommended power profile.  It saved me 9 seconds compared to the constant power effort, for a similar 150W normalised power.

I will now see if my Excel-based power optimiser gives similar results when I model the Whole Lotta Lava segment using the same set of 29 intervals that BestBikeSplit used to model the segment.


Results of my power optimiser

The plot above, at the top of this blog post, shows the BestBikeSplit recommended power profile (dashed red line) and then the power profile recommended by my Excel-based optimiser (solid red line), when targeting a 150W normalised power. The agreement between the two plots is remarkably good.  In the past I've done a crude comparison between my optimiser and BestBikeSplit (see here), but I've not plotted the powers on the same graph before.  This really shows the two methods give the same results, and so it shows my Excel-based optimiser is a free alternative to BestBikeSplit.  It could actually be even better than BestBikeSplit if I'm able to model more intervals than BestBikeSplit.  I just need to write the script that can automate the creation of the intervals.


Predicted ride times from my power optimiser

For the constant power situation, with the power fixed at a constant 150 Watts, my optimiser predicts a time of 27 minutes and 17 seconds. Note that this is only 2 seconds different (0.1% different) to my actual Zwift ride time of 27 minutes and 15 seconds, which I've obtained on two occasions riding at a constant 150 Watts.

To achieve this constant power of 150 Watt simulation in my optimiser, I set-up a multiple goal-seek macro in Excel.  That was an interesting learning exercise in itself, because I have never programmed in Visual Basic before.

Running the optimiser to achieve an optimal power profile, my optimiser predicts a time of 26 minutes and 37 seconds, which is a fairly significant 40 seconds (2.4% saving).  That's very similar to the 2-3% savings that I was getting when I first created my power optimisation spreadsheet back in 2016 (see post
here).  The speed and power differences between the constant power case and the optimised power case are shown in the plots above.


Summary

Riding at a constant 150 Watts, my optimiser predicts a time of 27:17.
(average power = 150W, normalised power = 150W)
That 27:17 time agrees very well with the actual ride time in Zwift of 27:15.

Riding at the optimum power, my optimiser predicts a time of 26:37 (40s faster)
(average power = 143W, normalised power = 150W)
I haven't yet tried following this power profile in Zwift yet, and although the BestBikeSplit power profile is similar, the speed modelling deficiencies in BestBikeSplit (described here) was insufficient to test this.


Next Steps

The next step is to create a script that can process the Whole Lotta Lava segment profile, and any other ride profile, in a more efficient way with less manual effort by me.







Saturday, 13 January 2024

Validating my Power Delivery Optimiser: Step 3

Step 3: Using BestBikeSplit to create an optimum power delivery profile.  

In my previous blog post, I explained that the following values are needed to simulate the Zwift ride:

  • Total weight (rider + bike) = 80 kg (176.4 lb)
  • CdA (drag coefficient x Frontal area) = 0.2415
  • Crr (coefficient of rolling resistance) = 0.004
  • Air pressure = 101,250 Pa
  • Air temperature = 15 degrees C
  • Air density = 1.225 kg/m^3
  • Drivetrain losses = 2.5%

BestBikeSplit modelling via ZwiftInsider

I first tried to use this BestBikeSplit link that is available via the ZwiftInsider Whole Lotta Lava route page to access Best Bike Split.  The page assumes a fairly light rider weighing 145lbs, and makes some other assumptions. However, 
the Time Analysis tab allows the user to change the value of various parameters using sliders to adjust the parameters in 1% increments to the necessary value.  Unfortunately, this method didn't allow me to enter the exact values above, so I used the closest values possible instead:

  • CdA = 0.24 (i.e. 0.0015 too low)
  • Average power = 144.5 Watts
  • Normalised power = 149.9 Watts (0.1 Watts too low)
  • Weight = 177 lb (i.e. 0.6 lbs too high)
  • Crr (coefficient of rolling resistance) = 0.004 (exactly as required)

Note that I tried to get the normalised power as close as possible to 150 Watts.  It's unclear what assumptions BestBikeSplit has made for air density and drivetrain losses.  Nevertheless, with these values, BestBikeSplit predicts a route time of 27 minutes 42 seconds, which strangely is 27 seconds slower than my constant power time.  I didn't understand this, so I needed to investigate why.



BestBikeSplit dedicated race plan

Since the results above seemed to make no sense, I decided to create a dedicated BestBikeSplit race plan, which is possible even with BestBikeSplit's free account.

I was able to change the settings so that the parameters were exactly matching what I wanted:

  • Rider weight = 160 lbs, Bike Weight = 16.4 lb -> Total weight = 80 kg (176.4 lb)
  • CdA = 0.2415, for all yaw angles
  • Crr = 0.004
  • Drivetrain losses = 2.5%
  • Air pressure = 101,250 Pa
  • Air temperature = 15 degrees C
  • Zero wind speed
  • Drivetrain losses = 2.5%
These values give a route time of 27:47 for a normalised power of 149.94W and an average power of 141.93W, which is bizarrely still 32 seconds slower than my constant power Zwift time.









The final section of the BestBikeSplit Race plan above provides 'race intervals' which show the segment distances and gradients, then the power recommended by BestBikeSplit, together with the resulting speeds.  I copy and pasted those 29 race intervals into Excel and calculated segment distances in metres, instead of miles: 




I then copied the distance, gradient and speed values into my power optimiser spreadsheet to allow me to compare the power values calculated by BestBikeSplit and values calculated by my spreadsheet.  Surprisingly, the power values agreed for some of the route, but were significantly different for the downhill section, as shown in plot below for the solid red and dashed red lines:


As soon as the gradient becomes negative, BestBikeSplit (the red dashed curve) is showing that a higher power is needed to achieve the downhill speeds that BestBikeSplit has calculated.  I really don't understand this because, for example, it is calculating speeds of 23.08 mph on a -4.36% (downhill) gradient while applying 84 Watts of power.  That is clearly wrong and I didn't know why BestBikeSplit is doing that, unless it is somehow assuming a large headwind

To investigate this, I plotted the BestBikeSplit powers and speeds versus the gradient values, shown withe red symbols on the plot to the left.  The plot looks reasonably sensible, although the scatter seen in the corresponding speeds is slightly strange. 
Regardless of these doubts, I decided to try to ride the route using the BestBikeSplit power profile to see what time it would give.

Riding the BestBikeSplit power profile

To do this, I decided to use the BestBikeSpilt's feature where they allow the power profile to be exported as a TrainerRoad workout.  
This is a nice feature, because it allowed me to ride exactly the prescribed powers by doing the workout in ERG mode, with my phone (for TrainerRoad) and also Zwift (via my iPad) connected to my Wahoo Kickr trainer.  The workout included the 29 intervals contained in BestBikeSplit's race intervals.  As shown above, I also added a long 150W interval afterwards to allow me to do a second lap at a constant power, if I wanted to.

I started the TrainerRoad workout as I got to the archway that marks the start of the Whole Lotta Lava segment.  As a reminder, the segment time I did previously with a constant 150W power output was 27 minutes and 15 seconds.  Using the BestBikeSplit power profile, I did a time of 27 minutes and 6 seconds, so 9 seconds faster than the constant 150W effort.  It's worth noting that although the normalised power for the BestBikeSplit run was about 150W (actually slightly lower, at 148W), the
average power was substantially lower at 140W.  This is interesting in itself, and a positive results, that the average power was 10W lower than the constant 150W effort, but the time was 9 seconds faster.

However, something I noted when riding the segment with the BestBikeSplit power profile was that at several times the target power did not correlate well with the gradient.  At most times it was good.  For most of the uphill sections, the target power was higher than 150W, as  expected.  At some points, though, the target power didn't correlate with the gradient.  For example, the high power interval stopped about 10 or 20 seconds too soon, before I reached the top of the climb, on the steepest part, which seemed odd.  Therefore, I think that due to the BestBikeSplit speed issue mentioned previously, I think there was a synchronisation problem between the BestBikeSplit simulation and what actually happened in Zwift when those powers were ridden.  I have the feeling that the most likely explanation is that BestBikeSplit is assuming some wind that is not actually there in Zwift.

It's worth also be noting that the 27:06 time is significantly faster that the 27:47 time predicted by BestBikeSplit, indicating that their calculation of Zwift speeds are wrong, despite me entering the details such as Crr and CdA correctly. 

Finally, it's interesting and encouraging that my second lap of the Whole Lotta Lava segment was done again at 150W constant power, and again this gave exactly the same 27 minute 15 second segment time as I achieved before (described in my previous blog post).


Summary

This has been quite a long post, so let's recap:

Riding at a constant 150 Watts gives a time of 27:15.
(average power = 150W, normalised power = 150W)

Riding at the BestBikeSplit optimum power profile gives a time of 27:06 (9 second saving)
(average power = 140W, normalised power = 148W)


Next Steps

The next step is to see whether my own Excel-based power optimiser gives similar results, and to do that I will be to create a scripts that can process the segment profile in a more efficient way, with less manual effort by me.






















Saturday, 30 December 2023

Validating my Power Delivery Optimiser: Steps 1 & 2

Steps 1 & 2: Gathering data and rider parameters for the constant power case.  

The introduction post written previously (here) explains the objective and context of this Step 1 & 2 of the study.

Route Selection

Firstly, I needed to decide a suitable route.  Strange as it may seem, I didn't want to use an outdoor route.  The difficulty of doing a test like this outdoors is that the conditions are so variable. The wind changes, traffic interferes with aerodynamic drag and gets in the way, road junctions have to be avoided, etc.  Then I would also have to ensure my bike, my power meter and my body position stayed consistent between runs.  

I really wanted to avoid those constraints and difficulties associated with doing the test outdoors, so I instead decided to use a virtual route on Zwift.  This is also not ideal, because the bike speed in Zwift is calculated with a computational model, so I'll effectively be using a model (Zwift) to validate another model.  However, I feel that the benefits of having a fully controlled environment to test the power delivery optimiser outweighed the doubts and downsides that may come from using Zwift.

For the route, I decided to use the Whole Lotta Lava route.  I picked this route because it was reasonably short at 12.3km (7.6 miles), so it would take less than half an hour to ride.  Also, it includes a good mix of terrain, with a flat section, a climb and a descent in approximately equal amounts, as shown in the route profile to the left.  The amount of climbing, with 160m (525ft) climbed in 12.3km is the kind of elevation change that I typically see in my local rides and the terrain in the South West of England where I live.

Finally, the route is almost entirely pavement, which makes the treatment of rolling resistance somewhat easier.  There is a short section of wooden boardwalk, perhaps 200m in length that has to be crossed on climb and the descent, but I'm hoping that is not significant enough to complicate the modelling.

Bike Choice

For this type of test, a TT bike is the best bike to use, because Zwift does not allow a TT bike to gain a benefit from drafting other riders, unlike for their road bikes.  This means that any ride I would do on a TT bike, and the associated segment time for the Whole Lotta Lava route, would not be affected by the presence of other riders.

In Zwift I have the Canyon Speedmax TT bike with Zipp 808/Super 9 wheelset.


Riding the route at constant power

I decided to perform the constant power reference case at a fixed power of 150 Watts.  This is approximately 60% of my FTP, so it makes it a comfortable long-slow-ride kind of pace.

I ensured that that my ride was done at exactly 150W by using TrainerRoad in ERG mode to control my Wahoo Kickr trainer, ensuring that I held a power of exactly 150W, then linking the Kickr trainer to Zwift via it's second bluetooth connection so that the Zwift ride was done at 150W.  It can be seen in my Strava activity file (screenshot shown above, link to Strava activity here) that the power trace is constantly at 150W.

The entire Whole Lotta Lava route was done first, then I also performed most of a second lap too.  The second lap was useful because the translucent pace partner (which follows the pace of my best time) was a demonstration that Zwift was reproducing the pace almost exactly, as shown in the screenshot to the left.  This was the top of the climb, approximately half way through the route.  Note that the pace partner (riding at the pace of my previous lap) is very close to my avatar on the second lap.

This is to be expected, of course, but it was reassuring to see.  This is the kind of repeatability that would be impossible if riding a route outside!


Reference parameters

For the subsequent power delivery optimisation, I will also have to decide values to use for the following parameters:

  • Total weight (rider + bike)
  • CdA (drag coefficient x frontal area)
  • Crr (coefficient of rolling resistance)
  • Air pressure
  • Air temperature (which together with air pressure, gives the air density)
  • Drivetrain losses, if indeed Zwift even account for these.
The choice of these values should match as closely as possible as what Zwift models, some of which it's possible to determine, but some of which are unknown.

Weight
I entered my weight of 73kg and my height of 5'10" into Zwift.  I'm not sure what weight Zwift assumes for the bike, so this is something I had to figure out as part of the virtual elevation (VE) analysis.

Coefficient of rolling resistance (Crr)
According to Zwift Insider, Zwift assumes a Crr value of 0.004 for road and TT bikes on pavement.  I will use this 0.004 value for the VE analysis.  The small section of wooden boardwalk apparently pushes the Crr up to 0.0065 for that short period of time.

Drag coefficient (CdA)
Previously, when I unlocked the Zipp Super 9 disc wheel, I calculated (here) that the CdA was 0.2415 m^2.  I will use that value for VE analysis.

Air Pressure and Temperature
As I did previously, I assumed International Standard Atmospheric Sea Level conditions (101250 Pa, 15 degrees Celsius), which results in an air density of 1.225 kg/m3.  It's worth noting that pressure, temperature and the resulting air density only affects aerodynamic drag and nothing else.  Therefore, if the assumption is wrong, it will simply bias the CdA value which is also chosen, because it's the product of CdA and air density that affects aerodynamic drag.  As the CdA is obtained from the VE analysis, the choice of pressure, temperature and air density is rather arbitrary and intrinsically linked to the CdA value selection.

Drivetrain losses
I used a value of 2.5% as starting point, to be checked with the VE analysis.


Virtual Elevation Analysis

I used the .fit file from my Zwift ride to perform a virtual elevation analysis using Golden Cheetah's Aerolab Chung Analysis feature. The plot to the left shows the final fit between the real elevation curve (from Zwift, in green) and the Chung Method virtual elevation curve (in blue).  As can be seen in the plot, keeping the values above and changing only the total weight to 80kg gives an excellent fit between the blue and green curves, to the point where it's almost impossible to see the two different elevation profiles.  I also tried using other combinations of parameter values, but using this combination of parameter values gave the best match.


Summary and Results

My constant 150W ride took 27 minutes and 15 seconds to complete the Whole Lotta Lava route, which equates to an average speed of 16.8mph (27.0 kph).

My virtual analysis showed that the values used by Zwift which I need to use later for the power delivery optimisation are:

  • Total weight (rider + bike) = 80kg
  • CdA (drag coefficient x Frontal area) = 0.2415
  • Crr (coefficient of rolling resistance) = 0.004
  • Air pressure = 101,250 Pa
  • Air temperature = 15 degrees C
  • Air density = 1.225 kg/m^3
  • Drivetrain losses = 2.5%
I'll publish the next blog post to describe the improvements to my power delivery optimiser, once I've done that.