Category Archives: Cycling

Granfondo Stelvio Santini

The Granfondo Stelio Santini takes place in the Italian Dolomites around the town of Bormio. In 2019 it was held on the 2nd June. The profile of the race is as follows:

There are three major climbs in the race: the Teglio (400m+ over 6km) which is the least well known as well as being the shortest and easiest; the Mortirolo (1,200m over 12km) which has the reputation of being one of the most difficult climbs in road cycling and the Stelvio (1,530m over 21km) which is the biggest and most famous (but not as steep as the Mortirolo).

In the run upto the race the Giro d’Italia had been in the area a couple of weeks earlier, and although the Stelvio was not on this year’s race, one of the nearby high passes, the Gavia was on the route. Unfortunately, there was still plenty of snow around 3,000m and the Giro did not go up the Gavia but did do the slightly lower Mortirolo. So the question was, would the Stelvio Pass be open in time for the race?


I flew to Milan (Malpensa) from Cardiff via Amsterdam. I would have preferred not to change planes when travelling with my bike to minimise the chances of “things happening” but in this case, given the dates, I had no choice.

I was disappointed but not entirely surprised when my bike did not appear in Milan. So, after a while I found the baggage information for KLM and started the process of trying to track it down. It was still in Amsterdam. I decided to wait at the airport for it, although the baggage staff could neither confirm not deny whether it would be on the next plane!

So I went to sort my car hire out. As it turned out my bike was not on the next flight from Amsterdam but may be on the one after that. So I waited around. Eventually (after waiting 5 hours) my bike arrived.

So i packed everything into the hire car and drove to Bormio where I was planning to stay for the race.


After breakfast on the Saturday I walked across town to register for Sunday’s race. I got there early and the process was very quick (about 5 mins). So I walked back to the hotel with the intention of assembling my bike and going for a ride.

The organisers had been warming us upto to the idea that the Stelvio Pass may not be open for the race and that another climb may be substituted for it. Then they made the call that we would not be doing the Stelvio and the Cancano climb would be substituted for it. So I thought I would ride up here to check it out and see what the temperature was like at the top.

Shake-Out Ride

So, back at the hotel I started assembling my bike only to find that the fixing that attaches the rear derailleur to the bike frame had been broken in transit.

So I asked in the hotel for a bike shop and they gave me directions. Obviously the shop was extremely busy with people getting their bikes fixed up for tomorrow’s race. As it happened they did not have an exact match for the broken component but recommended another shop out of town.

This shop did have the part and fitted it for me. I drove back to the hotel with my repaired bike.

So I headed out for the shake-out ride.

The Cancano climb was a steady one and with the sun out it was hot. The climb had a fairly consistent gradient and consisted of a series of switchbacks up the side of a mountain to a plane at the top where the road ran out and there was a couple of lakes.

After descending back towards Bormio I decided to have a look at the base of the Stelvio Pass as it was nearby.

As it was pretty warm at the top of the Cancano I decided to just wear the organisers shirt for the race and not to carry other layers (the forecast for race day was the same as today… hot!).

Race Day

I wondered down to the start with my bike and found the correct coloured entrance. I hung around towards the back of the pack as I wasn’t particularly bothered about timings.

The Start to Teglio

Most people were wearing a couple of layers or arm warmers as it was an early start and the sun was not yet shining in the valley. The first 45km were more or less downhill as we descended the valley from Bormio.

I have to say, it was pretty cold on the way down, but we eventually got to the bottom of the Teglio climb.

It started off reasonably gradually and averaged about 9% I think. There were some steep sections that went upto 18%. We made to the town where there was a checkpoint to get some water and something to eat.

It was good to get the first climb done and after a short stop, I was on my way again, rolling down the other side of the hill. It was quite a fast descent and we ended up braking hard at the bottom to cross a busy road.

Then there were about 20km of rolling terrain to the next checkpoint at the base of the Mortirolo.

It was a chance to fill up both water bottles and prepare for what was next.

The Mortirolo

Setting off again from the checkpoint we soon reached the base of the Mortirolo, indicated by a right turn and a very small sign.

The riders in front soon disappeared into the forest and it was clear that this climb would mostly be hidden. Under the trees it was relatively cool, which was a good thing.

The climb is just under 7 miles at an average gradient of 11%. But there are some sections that are much steeper than this; more on this later.

I settled into the climb and planned to take it steadily. From watching the Giro, I knew that the steepest section was in the middle of the climb and that towards the end the gradient slackened off a bit.

The road was quite narrow, wide enough for a car, or about 3 riders in parallel. The climb was relentless after the first kilometre or so with no flatter parts to take a breather. There were kilometre markers to the top and they ticked away slowly.

The expected ramp up in the middle did not really happen. The road was steep, but not noticeably steeper than before. When we reacher the 6km to go marker I was pleased that things should start to flatten off shortly.

5km to go came and went and on we climbed; then 4km to go. At 3km to go the road flattened off and there was some downhill. I didn’t remember this from the Giro but now there was only 2km to go. I rounded a corner and was back into a steep climb.

I realised afterwards that the Giro had ascended the Mortirolo from a slightly different direction so my knowledge of the profile was completely wrong! Doh!

The way we were going up, they had saved the steepest part till the end.

It says on the above graphic that the max gradient was 22% and over a kilometre or so that is probably accurate but within that there was steeper ramps.

As we hit a very steep ramp, most of the people in front were unclipping and I saw a couple of people fall off.

I knew I didn’t have far to go, but each peddle stroke was a struggle. I managed to keep going and we went through a small group of huts. We were out of the forest so must be near the top.

I rolled over some mud, just at the top of a pedal stroke and as the rear wheel spun on the mud I came to a standstill. Fortunately, I just managed to get moving again before toppling over and shortly after that we were back in the trees. Up ahead I could see a group of stationary riders – the top!

From the summit, it was a long fast descent. The road on the descent was bigger, wider. I think this is the one the Giro normally uses, which makes sense from a support vehicle perspective.

The views were better on the descent as we went through less woodland. At the bottom was another checkpoint which was good as I was getting low on water and it was getting hot now that we were out of the forest.

Back to Bormio and the Cancano Climb

After the checkpoint the next section was undulating as we made our way back up the valley towards Bormio. It was very hot now, with little breeze, and this was probably the least interesting section of the course.

We arrived back at the town of Bormio and another checkpoint. This was the last one. After this, we set off for the Cancano climb (the replacement for the Stelvio).

I had done this route the previous day so it was familiar. It’s a nice climb, but it was a shame to miss out on the iconic Stelvio. The Cancano is just over 5 miles at an average 7%. So gradient wise it’s quite similar to the Stelvio, but much shorter.

There is a pair of towers at the top of the climb and a small tunnel. From here the sealed road ended and we had a couple of kilometres to travel on a dirt road to the finish.

So it was good to get to the finish.

I had a small break at the top before rolling back to Bormio.


  1. The race was well organised. It isn’t too big and whilst I rode with others most of the time there weren’t so many people that it felt crowded.
  2. Bormio itself is a nice town and well suited to cycling and running (from what I could see). The people were very friendly and helpful, and used to outdoor sports.
  3. The Mortirolo is very challenging. Its the most challenging hill I’ve ridden by a long way. I used a 34 and probably would not have made it without this.
  4. Shame about the Stelvio being absent from this year’s race but that’s how it goes. Maybe I will return to get the full experience!

Dragon Ride, 2018

The Dragon Ride is a cycling sportive in South Wales. There are 4 distances to choose from:

  • Macmillan 100, 100km
  • Medio Fondo, 153km
  • Gran Fondo, 223km
  • Dragon Devil, 300km

I was doing the Dragon Devil which cannot seem to make up its mind if its 300km or 305km long. I’m going for 305km (189 miles) with 15,843ft of climbing.


The race starts in Margam Park, just outside Port Talbot and loops around the Brecon Beacons before returning to Margam Park. The road book advertises the following:

Climbing: The route features 6 x Category 5 climbs and close to 5,000m of total climbing.

Timed Climbs: There are two timed climbs (Devil’s Elbow @ 90km & Devil’s Staircase @ 190km).

Feed Stations: 6 stops at 59km, 96km, 122km, 154km, 219km & 256km. There will be a water station at 185km.


I got up at 5am and had some breakfast (porridge) before driving to Margam Park which is about 40mins from where I live. I had a start time of 6:45 to 6:55 as the Devil distance sets off first. This was a good thing as it meant there was not too much traffic getting into the car park and I was able to park 3 rows back from the start.

Unfortunately my watch had decided to stop charging itself when I turned my back on it so it was on 8% battery when I woke up. I had it charging from a powerbank on the way to the start but it only got to about 50% so I knew it would not survive the whole race.

I put my bike together and got dressed and headed over to the start area.

The Race Start

I got into the 3rd of 4 pens and waited about 15mins before my pen was called forward to the start. The race briefing was quite short and consisted of basic instructions about following road signs and the highway code (no road closures), avoiding sheep and avoiding a piece of metal in the road 50m from the start.


Start to Feed Station 1, Penderyn Primary School, 59km

The first section is relatively long to the first feed station at 59km.

After exiting Margam Park we headed out towards Port Talbot. Past the steel works and into the town, under the M4 and then we started to head up the Afan valley. There were a few sections of traffic-lighted road works so it was a bit stop start along here.

It was good to get in a group here as its flat and it was easy to draft along.

At Pontrhydyfen, the birthplace of Richard Burton, we swung under the aqueduct and then there is a short, sharp pull for 30 or 40 metres, which always seems to catch people out.

From here the road follows the River Afan up the valley to Cymer, an old mining village that had a massive mining tragedy in 1856, killing 114 people. Nobody was prosecuted for it, and no compensation was paid to families.

As we swung through a right handed corner in the village there a police motorcyclist standing in the road shouting “watch out for drawing pins”! Easy to say but not so easy to do.

I was lucky. For the next mile or more I was constantly passing upturned bikes in various stages of puncture repair. I stopped counting at 30.

From here we started the first climb of the day, the Bwlch. The Strava segment has this at 4.2 miles @ 5%. So this is a steady climb.

The sun was out and there was little wind so it was shaping to be be a cracking day!

From the top of the Bwlch there was a great view down to Treorchy in the Rhondda valley below. Its quite a fast descent and you have to mindful of sheep.

From Treorchy we rode through the town to Treherbert where the next climb, the Rhigos, started. Its a similar climb to the Bwlch in terms of length and gradient.

From the top, it was another long descent, this time ending at a roadabout near Hirwaun. We crossed over the A465 and continued heading north to Penderyn on the A4059. Past the Perderyn Whiskey Distillery and just a little further along was the first feed station.


Always good to the get to the first checkpoint. It was busy but not overcrowded. I topped up on water and ate a few salted potatoes and Jaffa cakes.

Penderyn to Feed Station 2, Ystradfellte Car Park, 96km

So after a quick stop at feed Station 1, I headed out on the second leg to Ystradfellte, 37km away.

Its a steady climb on the A4059 into the Beacons. This area can be very windswept, but today was relatively calm and the sunny weather continued. There is a short descent to merge with the A470 towards Brecon before we climbed again to the foot of Pen Y Fan, before descending again towards Libanus.

Just before Libanus, we turned left onto the A4215 towards Defynnog. I have driven this road many times and it does not seem particularly hilly, but on a bike it always feels more hilly than expected. About halfway along we turned left again, now heading south. The roads here are very small, single track and quite windy.

After a few minutes we could see the Devil’s Elbow climb ahead snaking up the mountain. Its just over a mile long averaging 10% with 2 switchbacks in the middle. The steeper part is about 0.5 mile @ 12% going to 15% in places. My strategy was to go in, in my second lowest gear and take it fairly steadily as we were still in the first third of the race.

It can be awkward meeting traffic coming the other way on these type of climbs but fortunately the road was clear today. Didi the Devil, mascot of the Tour de France, was there to cheer us on although he was out of oomph when I passed him, managing only a feeble “Allez, Allez”.

From the top of the climb its mainly descending to Ystradfellte, which is a small village. There is a sharp right hand bend in the village and the car park was just there on the right hand side.


As usual I filled up with water and ate some more salted potatoes and Jaffa cakes and prepared to set off.

I was quite amused when I went to collect my bike, to find it sandwiched between two Pinarello Dogmas. It was quite tempting to take the wrong bike, but I managed to resist. Needless to say, given they were at the feed station at the same time as me, these were not TeamSky riders.

Ystradfellte to Feed Station 3, Crai, 122km

There are a couple of short sharp pulls out of Ystradfellte, but generally its descending down off the Beacons to Pontneddfechan with a sweeping right hander and the bottom of a hill, and then along to Glynneath.

I would normally be heading home down the Neath Valley, but not today! So we climbed out of the Neath Valley and over to the Swansea Valley at Abercraf. We turned north onto the A4067 and climbed up to the Crai reservoir. There seemed to be a bit of a headwind here so I caught up some guys in front and drafted along for a bit. I took a turn on the front, and of course, nobody was interested in coming past so I towed the group upto the village of Crai where we turned off the “A” road towards Trecastle.

The third feed station was just off to the left here. For some reason its not marked on the event map.


It was around here that my watch ran out of power.

Crai to Feed Station 4, Llandovery College, 154km

Setting off again there is one quite steep climb shortly after the feed station, but its not very long. Then some undulating terrain for a few miles until the route for the Devil splits from the route for the Gran Fondo distance, just before Trecastle.

After the split there was noticeably fewer cyclists on the route, as expected.

I was riding on an unknown road for the first time now, on the section from Trecastle to Llandovery, along the A40. Its generally downhill all the way so this was a fast section of the route.

We passed through the village of Halfway, and although close, it was not at halfway!

From there it is a short ride to Llandovery and the next feed station, in a tent inside the grounds of Llandovery College.


Llandovery College to Feed Station 5, Llandovery College, 219km

So the next section was a northerly loop upto the Devil’s Staircase and back via Llyn Brianne, probably the most scenic section of the race.

We headed off north on the A483. Its quite undulating here and we went past the village of Cynghordy, before climbing up and around Sugar Loaf Mountain. From here its a descent down to the town of Llanwrtyd Wells, which claims to be the smallest town in Britain and the home of the World Bog Snorkelling Championships, as well as the Man vs Horse Marathon which I should do one day!

From here we turned left onto a small road towards Abergwesyn. I had caught up another rider, the first I had seen since Llandovery. I was expecting a water stop around here as there was one advertised at 185km, just before the Devil’s Staircase, but did not spot anything.

At Abergwesyn, we turned left along a small road that heads along the River Irfon. Its very scenic along here as we climbed along the river valley toward the bottom of the Devil’s Staircase. The road is very narrow here and I was almost forced off it by a van driver thinking its fine to pass a cyclist at 40mph along these sort of roads.

At the end of the valley the road drops down from the hillside and crosses the river before starting the climb up and around the mountain, Cefn Coch. This is the Devil’s Staircase, the most difficult climb on the ride. There is a helpful sign at the bottom about staying in a low gear!


I was at about 120 miles at this point, but at my level of ability, there is not much strategy involved, its just about survival. Here is the VeloViewer profile for the climb:

Screen Shot 2018-06-13 at 11.14.56

Cross the cattle grid and pass the trees on the right, hiding the climb. The road turns slightly right here and then you can see the climb, very steep at the start. Down to lowest gear and out of the saddle. No chance of carrying any speed into the climb as there is a poorly maintained cattle grid and a slow preamble before the climb proper starts.

The Strava segment says it hits 40% here; I’m not sure that is right but it is very steep at the bottom of the climb. Over the ramp and its around 15% to the first hairpin. Best to take the long way round here; its a left-hander so if there is a car coming down it could be game over on that hairpin! No cars today.

Round the hairpin at 20% and you can see upto the next hairpin. The gradient eases off to about 12% at the start of this section, so sit down and have a rest. By halfway to the next hairpin it ramps up to 20%. Wide berth on the hairpin at 25%.

Gradient then eases back to 15% for a little while so sit down and relax for a few seconds before the next sharp ramp which Strava says gets above 30% (umm, not sure). Then it eases again for a few seconds before ramping again to 25%. Pure survival now; one peddle stroke then the next. Tack across the road. Sight for traffic every 5 to 10 peddle strokes. Car coming down. Car stops. Reach car, thank driver. Pass car and continue tacking. Road turns slightly left and the gradient drops to 15%. Pass a walker; just about going faster. Another ramp to 25% then the gradient drops off again.

This is about halfway to the top, but the second half averages about 10% with some short sections at 15%.

From a race time perspective cycling up the Devil’s Staircase probably results in a slower time for the race, versus unclipping and walking up and putting in more power for the rest of the route… but who wants to do that!

I was very pleased to have got to the top.

Its a steep descent down the other side (25%) so hard on the brakes and do not miss the left handed turn off halfway down!

From here we started to head south and after a few miles we came to the shores of Llyn Brianne, which is a massive man-made lake supplying water to a large area of South Wales, including where I live.

Its very picturesque around Llyn Brianne, but I had just about run out of water as we left the lake and headed along the Towy River valley towards Llandovery. Its undulating but not too difficult from here to the town.

We stopped at the same feed station as last time, in Llandovery College.


This feed station had some cooking capability so we had cheese on toast and pasta. There was no sauce for the pasta. Now I know this was a cycling, not a gastronomy, event, but in my opinion this should not be allowed. On the positive side, all the feed stations were well stocked, so pasta aside, all good.

It was good to know we were heading back towards the finish!

Llandovery College to Feed Station 6,

Ysgol Gymraeg Dyffryn Y Glowyr, 256km

After filling up with water and food I set off again. We were heading south, firstly to Llangadog on the A4069 which runs parallel to the much busier A40. At Llangadog we turned left and started the climb up the Black Mountain.

This is a regular climb for me so I know it well; the official Strava segment is 4.5miles @ 5%. It only get over 10% in a few places. The climb starts in forrest, then into farmland before crossing a cattle grid out onto wild hillside. It can get windy and usually its a headwind, but today was calm and therefore relatively easy. The Gran Fondo route rejoined our route at the base of the climb so there were more people about again.

It was a case of plugging away to get to the top. Its a good descent on the other side though, down to Brynamman, although again you have to watch out for sheep.

We took a sharp left at Brynamman onto the A4068 which heads south-east over to the Swansea Valley at Ystalfera. It quite undulating here, but no big hills. Somewhere along the road was the last feed station; this time in a local school carpark, Ysgol Gymraeg Dyffryn Y Glowyr.


I did the usual topping up on food and drink and prepared to head out on the last section of the race to the finish, back in Margam Park.

Ysgol Gymraeg Dyffryn Y Glowyr to Margam Park, 305km

After the feed station I continued along the A4068, until it joined the A4067 which runs up the Swansea Valley. We headed north until Caerbont where we turned right and started to climb out of the Swansea Valley over to the Dulais Valley. From there we headed south down the valley to Aberdulais where we joined the Neath Valley and the A465, down towards Neath,

From Neath, there was one last sting in the tail as we climbed Cimla hill. There are easier ways to get to Port Talbot from Neath, but this race is a challenge so fair enough. Climbing out of Neath we were heading over to the Afan Valley again at Pontrhydyfen. Again, it was a slow and steady climb.

At Pontrhydyfen, we turned south down the Afan Valley to Port Talbot. It was about here that I joined up with a few riders going quite quickly on the flatter ground and was able to draft along with them. The group slowly picked up more riders as we went and by Port Talbot we were about a dozen.

It made the flat miles from Port Talbot to Margam Park go by a little quicker, but eventually our little group broke up and I did the last couple of miles back to the park more or less on my own.

It was good to finish in 12hrs 39mins 5secs and collect my medal!

Screen Shot 2018-06-14 at 08.00.20

Since my watch ran out of power during the event I only have a relive for the first part of the race, but here it is anyway:

Lessons Learned

  1. My experience was that the event is well organised, and although there are a lot of people the roads and feed stations are not too busy.
  2. Food: I carried 6 cereal bars and 9 packs of Shot Bloxs. I ate 5 cereal bars and 2 packs of Shot Bloxs. There is plenty of food on the course and the feed stations are well stocked (apart from pasta source)! In reality after the first feed station, you could just eat at each station and not carry much with you. Bear in mind that there are not that many shops about to buy things.
  3. Water: I did not see the water station before the Devil’s Staircase and ran out of water before getting back to Llandovery. It was very hot there and this is a difficult section so pay attention to water here.
  4. I am very familiar with the route, but the signage looked pretty good to me all the way around so no navigating required.
  5. Riding with a group of friends would help with drafting on the flatter sections. Also, you could take it in turns to stop at feed stations, fill up for the group and catch them up again, rather than all stopping. Obviously only relevant if you care about improving your time.
  6. Travel to and from Margam Park is easy for me as I live in South Wales. It seems to be a good location for an event like this though as its near the M4 and is a big open space with ample parking and areas to congregate.

L’Etape du Tour, 2017

The L’Etape du Tour is a mountain stage of the Tour de France open to the public and ridden a few days ahead of the Tour’s pro riders hitting the same stage. It was my first cycling sportive outside of the UK.

It was advertised as 178km with 3,529m of climbing, centred on two climbs; the Col de Vars and Col d’Izoard.



The start was in the Alpine town of Briançon in the south east of France and the route was a big loop finishing at the top of the Col d’Izoard, above Briançon.


I hired a bike box and disassembled my bike:20046728_10213423312726816_3908967585656538741_n

My wife and I flew from Heathrow to Geneva with BA. When we arrived our suitcase was there but not the bike box! Boohoo! We were told it had not been loaded on in Heathrow but would be on a later flight. The folks in lost luggage said they would deliver it to our hotel so we collected our hire car and set off.

Somewhat predictably it did not arrive at the hotel that evening and all the numbers I tried to call went to voicemail so I gave up for the night and thought I would resume the following morning.

In the morning I got through to someone who said the bike box was still in London but would be sent out that day. Since I had booked the hotel through Sports Tours International (only way to get a hotel room near the event) I went off to find them and see what they could do. They were very helpful and said they could hire me out a bike but I would have to buy some shoes and a helmet (mine were in the bike box). So I said I would let them know later that afternoon if my bike did not turn up.

I went to register and have a look around the expo, where I collected my race number and a free pair of polkadot socks!


When I got back to the hotel there was no sign of my bike and nobody was answering their phone. I was starting to think about hiring the SportsTour bike when the hotel called my room to say something had arrived for me.

I went down to reception and the receptionist led me downstairs to the ski room (which had turned into a bike room) where my bike box was waiting. No sign of the delivery guy; I guess he had done a “dump and run”.

So I assembled my bike and took it for a ride into Briançon. All seemed well.

I got my bike ready for the race by sticking on the various stickers, including a little guide to the race which attached to the top tube; a very nice touch!


The Race Start

It was an earlyish start and I had decided to cycle down to the start, about 9 miles away from the hotel. I was in the penultimate pen which suited me fine as I really had no idea how long I would take to complete the race.

It was very busy with cyclists but the organisation at the start was pretty good. You went into your pen, the higher the number the further from the start you were. The pens funnelled into each other and lead to the start line. When your pen was a few minutes from starting you were released down towards the start and you rode through the, now departed, earlier pens. Then another wait for a few minutes and then we were released out onto the course.


The only thing I was not very keen on was putting your race number on the back of your jersey with safety pins. As everyone was fiddling with items in the back pocket of their jerseys, safety pins were popping off all over the place. The ground was literally covered in popped open safety pins!

The First Third of the Race

The first third of the race was flat on the profile but undulating in reality, with some small climbs but certainly nothing big. It was a gloriously sunny day and the views were fantastic as we rode along on closed roads. The roads were in great condition, almost no pot-holes and the surface was new and very smooth. Quite unlike the road surfaces I am used to.

The first feed station was in Embrun at 42km, and it was jam packed. The picture below does not do it justice.

IMG_7346It became clear travelling alone had a distinct disadvantage from those riding in groups. Each area where there was something to be had, food, drink, etc. had a long queue of people and all the bike racks were taken. Those in groups would dispatch one person for each type of food and one for drinks where they would queue to fill their 10 water bottles, and leave one person to mind their bikes. Then they would all reassemble and divide up their spoils and get on their way. I was forced to queue for each item in turn. Not that it made much difference, but was annoying. It was like that situation in the coffee shop where you join the back of the queue and eventually make it to the “one person to go” place only for the guy in front to pull out a massive list of drinks to order for his whole office. Only in this case, the guy in front would pull out bottle after bottle to refill.

I have a cheap bike; I expect one of the cheapest in the race so I was not particularly bothered about leaving it… but you never know!

After the first feed station, we rode along the edge of a lake with stunning views. There was then a Cat 3 climb, the Cote des Demoiselles Coiffees, before we turned east (we had been heading more or less due south up until this point).

The Mountain Classification

The Tour de France rates all the longer climbs in each stage. Strava has a clear formula where you multiple the length of the climb in metres by the average percentage gradient and based on the answer being above 8,000 its a categorised climb as follows:

  • Cat 4 > 8,000
  • Cat 3 > 16,000
  • Cat 2 > 32,000
  • Cat 1 > 48,000
  • HC (Hors Categorie) > 64,000

So, for example, a 5km climb with average gradient of 5% would score 25,000 and be a Cat 3 climb. This works well for Strava as it means any segment can be a classified climb based on clear data about the climb. Obviously, however, there could be a significant difference between two 5km, average 5% climbs. One could be just a continuous gradient  for the 5km; whilst another could have much steeper sections interspersed with flatter or downhill sections.

For the TdF, they have a slightly different objective which is to create an exciting race where points are awarded for being the first to the top of a categorised climb; more points for bigger climbs. Where the climb occurs within the race, where within the stage and how famous the climb is, are taken into account when the TdF gives each one a category, and an associated number of climbing points.

The Second Third of the Race

After the Cat 3 climb, it was again. relatively flat as we made our way to the second feed station at Barcelonette. This time the station was in the town square so space was more limited and it was even busier than the first one. For some reason, the running water fountain in the square had been fenced off to the competitors and the “official” water supply was crowded so I ended up leaving the aid station without topping up water.

From Barcelonette, it was a gradual incline towards the base of the Cat 1, Col de Vars. There was a water station before we started the climb proper so I filled up with water there.

It was getting very hot by now. When we were rolling along at a reasonable pace it was not really noticeable, but when we slowed on the climb there was no wind and the temperature started to become oppressive.Col_de_Vars-south

The Col de Vars is 14.6km long, climbing 796m at an average 5.5% gradient, although as shown in the profile, the last section is much steeper between 7% and 12%. It reaches 2,109m.

This was my first proper alpine hill climb and its fair to say that nothing in the UK really compares. Its not that this is steeper, its just much longer than any of the hills I had cycled up before. I was on a 32 and I noticed that those around me where mainly 34 or 36. This seemed to create 2 problems:

  1. On the steeper sections when I was in my lowest gear I was having to push more watts than suited my ability. It was OK for a while but towards the top was becoming a real struggle.
  2. I was going faster than 95% of those around me. The road was fairly narrow and solid with riders so often there was no space to overtake so I was forced into a lower cadence to maintain the same speed. There is a minimum cadence below which it becomes hard to ride.

It was great to reach the top, from which it was a 1,000m descent to the village of Guillestre.

The Last Third of the Race

At Guillestre was the third and final feed station. After this we started climbing, gently at first but we had a few hundred metres of elevation to climb before we got to the start of the the last climb proper. This was the HC category Col d’Izoard, one of the iconic Tour de France climbs.


Again, its not the steepest but the 14km feels relentless, climbing about 1,000m to 2,360 at the summit.

People were struggling at the side of the road. A few had been struggling on Col de Vars, but many more were really struggling here. By the time I was on the climb it was afternoon and there was no wind at all to give respite from the sun.

Just at the start of the climb I punctured. I suspect it was a safety pin but I could not find anything in the tyre so I guess I’ll never know. It was very quiet as people rode past, hardly anyone speaking, each person in their own struggle with the mountain. It was blisteringly hot just mending the puncture by the side of the road as there was no shade around.

After fixing the puncture I got going again. I wish I had a 34 gear as I know I was overheating in the 32 but had no choice but to push on. The kilometres went past very slowly. I was very hot by now and concerned about overheating and I remember stopping under some shade for a while. Everyone on the road where there was pockets of shade there were clumps of riders, unclipped, trying to cool down.

I remember walking for a bit, then thought I had better man-up and get on with it.

Eventually we came out though a forest where the road levels out and there is a slight downhill before it kicks up again to the summit. This is the lunar style landscape that this climb is famous for. Picking up some speed helped cool me down a bit before the final 2km to the top.

It was quite a relief to finally get to the top and cross the finish line!


I had a rest at the top and some food and drink. This was the end of the official stage but I still had to get back to Briançon to collect the medal. So this was another 1,000m, 12 mile descent where it was important to pay attention. It got to the point where I was starting to get cramp in my hand from all the braking, but I don’t think I was wishing for an uphill section to relieve the pain.

Back in Briançon, I collected my medal and then set off back to the hotel. It was 9 miles and slightly uphill but it was a lot cooler now so I took it easy as I rode back.IMG_7354

My official time was 9:12:42 for 6,973rd position.



I really enjoyed the day out cycling so would recommend it. It is a really busy event as you would expect. I think about 15,000 people started.

It certainly makes you realise how difficult it would be for a pro rider to complete a grand tour, let alone contend for a position. Obviously these guys are professional athletes, have better equipment and are much better supported, but they still have to get up the climbs themselves, each day for three weeks.

The Col d’Izoard has been a very popular climb over the years but 2017 was the first time the stage had finished at the top of the climb. Some of the greats of cycling like Fausto Coppi and Eddy Merckx have summited the Izoard first. Warren Barguil won in 2017.

So Chapeau! to all of them.

Lessons Learned

  1. I half went with a tour group (hotel booked through the tour but event entry and travel arrangements made myself). Going with a tour group is certainly good when things don’t go right as there is a group of people who can help. It is an expensive way of doing things though so you would have to decide if you thought it worth the cost.
  2. It was very hot on the day so some heat acclimatisation would be worthwhile. I am more familiar with running in the heat than cycling, where its easier to reduce your effort to match the conditions, but with cycling the biggest effort comes on the steepest climbs where you are moving slowest and have the least benefit from wind cooling. This is intertwined with the next point.
  3. Think about the gearing on your bike and how long you will be riding the climbs. Ideally I think I would have had a gear to ride the hardest climbs in and then 1 lower gear where I could have a break.
  4. Riding with a group of friends would make navigating the feed stations much easier.

The Physics of Zwift Cycling


I have no inside knowledge of Zwift and know nobody that works, or has ever worked, for Zwift. So what follows are just some thoughts on cycling in general and how Zwift might have implemented their game. It might be completely wrong!

If you are not familiar with cycling on Zwift this may not mean much.


Zwift is probably the most popular and well known virtual cycling environment on the market covering basic virtual cycling, training plans for cycling and racing. For those that have not tried it, you need a bike, a so-called “turbo-trainer”, a computer to run the Zwift program on and a means of having the components communicate.

Along with most people, I have started doing indoor cycling in the winter when outdoor cycling is not much fun.

There are several products on the market that provide some sort of virtual environment that translates the power you output on your bike / turbo trainer to an on-screen avatar in the virtual environment. So basically, the harder you pedal, the faster your avatar goes. Smart trainers are able to interact with the software environment (e.g. Zwift) to give an experience that mimics real life in a multi-player game environment, e.g. by simulating hills, drafting, etc.

Zwift do not publish the equations of motion the software uses, so I thought it would be interesting to reverse engineer what Zwift does in order to produce the outcomes it generates and see how this compares to what might happen “in real life”.

Standard Cycling Equation of Motion

bicycle_physics_3Consider riding a bike up a hill of grade G%, at speed, v, in still conditions (i.e. no wind):

  • M is the mass of the rider and bike
  • g is the acceleration due to gravity
  • C_{rr} is the coefficient of rolling resistance
  • ρ is air density
  • C_D is the coefficient of drag
  • A is cross sectional area of the rider, bike and wheels
  • ε is the drive chain efficiency

If you are familiar with cycling physics you will probably recognise this equation for the power, P, required to sustain a steady velocity, v:

P = \epsilon.(M.g.v.\cos (\arctan (G)).C_{rr} + M.g.v.\sin(\arctan(G)) + \frac {1} {2} \rho.C_D.A.v^3)

If the rider applies more power than P, (s)he will accelerate; if less then (s)he will decelerate.

The three terms on the right of the power equation refer to components that consume power:

  1. Rolling resistance, or friction.
  2. Power required to overcome gravity. This term will be zero on the flat. When going downhill gravity becomes a source of power, rather than a consumer.
  3. Drag, or power needed to overcome air resistance. If there is wind then it is easy to replace the velocity, v relative to the ground with a velocity relative to the wind to allow for this.

How might this apply to Zwift?

What does Zwift know about you?

Zwift needs the following information about you and your ride:

  • Weight
  • Height
  • Power. When you are in game Zwift needs to receive how much power you are putting out. It doesn’t care about how fast you are going on your turbo trainer, what gear you are in or how much resistance the turbo trainer is applying. All it needs is power.
  • Heart rate. This is optional so you can see how hard you are exercising
  • Cadence. This is optional, again for you to see in stats.

Obviously Zwift may use a completely different equation of motion, or they may vary the equation and/or the coefficients over time. Who knows?

Starting Assumptions

Lets make some assumptions to get us going:


There does not appear to be any wind in Zwift so lets assume this is true.

Drive chain efficiency, ε

Now it gets a bit complicated. There are two bikes involved:

  • The real life bike you are riding.
  • The Zwift bike you are riding in game.

So, if you are using a turbo trainer to supply power to Zwift then the trainer will measure the power at the trainer, after any losses in your real life bike’s drive chain. If you have a power meter it will be somewhere in the drive chain, for example in the pedals or the crank so you will be measuring power at a slightly different point so the drive chain efficiency may be slightly different.

Anyway, the point is, there are 2 bikes so 2 drive chain efficiencies involved. So, to avoid double-dipping, I’m going to assume the drive chain efficiency of the Zwift bike is 100%. This means we can ignore ε in the equation. If this assumption is wrong the impact of ε will be factored into other constants.

Do not forget, though, that you are probably loosing drive chain efficiency on your real world bike. Typical values are from 95% to 98% assuming you maintain your drive chain. So if you are generating 100w power, the trainer may be receiving 95w of power.

Rider Weight

Zwift ask you to input your weight. But what is this weight? Is it your weight naked, fully clothed, wearing cycling kit, helmet on or off, carrying a water bottle, etc, etc.? Zwift does not really specify this.

So again, there are 2 riders in play:

  • You, in real life.
  • Your in-game avatar that you can select different kit for.

So Zwift could give weight to the different pieces of kit you choose. Some kit is mandatory, some like gloves and helmet are optional.

I am going to assume that the kit you choose in Zwift does not contribute to your weight and that you should weigh yourself in your real world kit. If you want to compare Zwift to real life include anything you would carry with you on your ride in the weight you enter into Zwift, e.g. cycling kit, helmet, water, food, spare tube, cuddly toy, etc.

Bike and Wheel Weights

So there are 2 bikes involved:

  • Your real world bike. Zwift does not need to know about this.
  • Your in game Zwift bike and wheels. Zwift offers many bikes and wheels and each has a one to four star weight rating. Two possible systems spring to mind:
    • Each bike in Zwift is mapped to one of four weights. Same for each wheel set.
    • Each bike and wheel set has its own weight. The possible range of weights is divided into 4 buckets and marked with the appropriate number of stars.

Different frame sizes would, of course, weigh different amounts so Zwift could take the height you supply and use that to determine the frame size and adjust the weight for that, but I am going to assume this does not happen, i.e. each bike has a single weight.

The Zwift bike and wheel weights are added to the user supplied rider weight to make up the total weight used in the calculations.

Air Density, ρ

So density of air varies as follows:

  • Inversely with temperature. The higher the temperature the less dense the air.
  • Inversely with humidity. The more water vapour in the air, the less dense the air. This one is counter-intuitive.
  • Inversely with altitude. The higher up you are the less dense the air.

Starting with the ideal gas law:

P.V = n.R.T

Where P is the pressure of a gas, V its volume and T its absolute temperature, n is the number of moles of the gas and R is the universal gas constant.

Now: n = \frac {m} {M} where m is the mass of the gas and M the mass of 1 mole of the gas.

The density, ρ, is given by: \rho = \frac {m} {V}


P.V = \frac {m} {M}.R.T

P = \frac {m} {V} \frac {R} {M}.T = \rho. \frac {R} {M}.T

For a gas its specific gas constant is given by R_{spec} = \frac {R} {M}

\rho = \frac {P} {R_{spec}.T}

For humid air its possible to treat the air as a combination of two gases; dry air (da) and water vapour (wv) where the density is given by:

\rho = \frac {P_{da}} {R_{da}.T} + \frac {P_{wv}} {R_{wv}.T}

The molecular mass of water vapour is less than dry air so adding water vapour actually reduces the air density, so humid air had a lower density than dry air.

Both temperature and pressure fall as altitude, h, increases:

P = P_0.(\frac {T} {T_0})^\frac {g.M} {R.L}

where P_0 is the sea level pressure, and L is the lapse rate, the rate of temperature decline with altitude. T varies with altitude according to:

T = T_0 - L.h

where T_0 is the sea level temperature.

So atmospheric conditions and altitude all affects ρ, and therefore drag.

It is possible that in Zwift, there is a model to adjust the air density used in calculations depending on your altitude and details of the weather, temperature, etc. It is also possible that different “worlds” in Zwift use different parameters; London will be at a different temperature to Watopia in the Solomon Islands, for example.

Atmospheric pressure on the earth’s surface ranges from about 950 millibar to 1050 millibar which is a range of 100 / 1000 or 10%. The density of air, ρ, will therefore move by around 10% based on the atmospherics at the time.

The table below shows how air density, ρ, varies with temperature. Again you can see that there is quite a significant decrease in air density as the temperature increases.

Screen Shot 2018-05-28 at 11.54.24

The graph below shows how air density varies with altitude.

Screen Shot 2018-05-28 at 12.00.33

Again, there is a significant change in air density, ρ, with altitude. So at the top of Alpe du Zwift the air density should be lower than at the bottom, and you should therefore move faster, right? Well kind of. The other effect is that human power output declines with altitude (there is less oxygen to power your muscles). Different people behave differently at altitude, mainly depending on how well adapted they are to it. Here is a graph for elite athletes showing VO_{2max} decline with altitude for acclimated and non-acclimated athletes, along with the equations of best fit.

Screen Shot 2018-06-01 at 18.23.03

There has been quite a bit of discussion as to the sweet spot for attempting the 1 hour cycle record. The higher above sea level you are the lower the air density and therefore the drag, but the lower your power output will be. As a cyclist moves higher in altitude initially the benefit of a lower air density outweighs the negative impact of a reduced power output and speed increases. As the cyclist moves higher, there comes a point where power output drops away faster than the benefit of lower air density accrues and speed would decrease.

There was work done using Chris Boardman’s hour record speed (using the superman position) to plot the distance he would have travelled at different altitudes using both the acclimated and non-acclimated equations.

Screen Shot 2018-06-01 at 18.31.04

Zwift could argue that modelling a changing air density is more hassle than its worth; even though they have visually taken the time to model weather in-game. I think there is enough research available and the equations would are not too difficult, so it could be done.

However, I am going to assume that Zwift use a single value of ρ = 1.225 kg/mwhich is a value at sea level at 15C and seems to be a commonly quoted value. If Zwift use a different value then, providing it is constant, it would be absorbed into the other CD.A constants.

Rolling Resistance or Friction

The power required to overcome rolling resistance P_{rr} is given by:

P_{rr} = M.g.v.\cos (\arctan (G)).C_{rr}

ck_56f2422a030f9This equation is derived as follows. Consider a wheel on an inclined road as per the diagram opposite. The frictional force f is given by:

f = \mu \times N

where the force perpendicular to the surface which is given by:

N = M.g.\cos(\theta)

and μ is called the coefficient of friction which is a constant for the two surfaces in contact.


f = M.g.\cos(\theta).\mu

The next thing to know is how grades are quoted on roads. 500px-Grade_dimension.svg

So what does a 25% grade mean? The convention is that its the vertical distance divided by the horizontal distance (not the distance you actually travel on the road). So:

\tan(\alpha) = \frac {h} {d}

where \frac {h} {d} is the grade, lets call it G

\alpha = \arctan(G)

Remembering Power P_{rr} is related to force, f and velocity, v by:

P_{rr} = f \times v, or

P_{rr} = M.g.v.\cos (\arctan (G)).C_{rr}

where I have replaced μ with C_{rr}, usually called the coefficient of rolling resistance.

So this is where the rolling resistance term comes from.

There are plenty of sites on the internet testing and comparing the C_{rr} for different tyres, for example:


Rolling Resistance in Zwift

So how might Zwift have modelled C_{rr}? Well, there is no option to select different tyres which implies they will have modelled a single tyre. There are different road types, e.g. good quality roads, less well maintained ones, dirt roads and some cobbles. Also, Zwift has weather with rain for example. All of these things would change the C_{rr}.

My assumption is that Zwift have a single value for C_{rr} for all bike / wheel combinations, in all weather and on all surfaces.

Power to Overcome Gravity

The power required to overcome gravity when going up hill, P_g, is given by:

P_g = M.g.v.\sin(\arctan(G))

This equation is derived as follows. Consider the wheel from the last section on an inclined road. The gravitational force f pulling down the hill is given by:

f = M.g.\sin(\theta)

Again, using:

P_g = f \times v, and tan(\theta) = G, gives:

p_g = M.g.v.\sin(\arctan(G))

This is where the gravity term comes from and is what I will assume Zwift uses.


The power required to overcome drag, P_D, is given by:

P_D = \frac {1} {2} \rho.C_D.A.v^3)

The starting point would a fluid flowing around some obstacle:


The Navier Stokes equation is the general equation for this:

Navier-Stokes equation

The problem is that this is a very complex equation. There is an unclaimed $1m prize for anyone who can prove that this equation will actually have a solution in the general case (no need to find the solution just prove there must be one).

So clearly some simplification is going to be required!

Lord Rayleigh (1842 – 1919) came up with a drag equation for the force F_D exerted by turbulent flow:

F_D = \frac {1} {2} \rho.C_D.A.v^2)

Converting to a power equation, for P_D:

P_D = \frac {1} {2} \rho.C_D.A.v^3)

Zwift and CD.A

So how would Zwift calculate CD.A?

The “A” is related to the cross-sectional area in the direction of motion through the air, and CD is related to the shape of the rider, bike and wheels.

200px-14ilf1l.svgHere are some examples of CD for simple objects. As you might expect, the more “streamlined” the object, the lower the CD.

So given each bike and wheelset has a 1 to 4 star “Aero” rating in Zwift it seems likely that these will contribute to CD.A in some way.

There are many ways Zwift could have set this up but I’m going to make some assumptions that cross-sectional area, A is predominately determined by the rider and that CD is calculated as follows:

C_D = C_{Dr} + C_{Db} + C_{Dw}


C_{Dr}  is the coefficient of drag due to the rider which is a constant for everybody.

C_{Db}  is the coefficient of drag due to the bike based on the bike’s aero star rating.

C_{Dw}  is the coefficient of drag due to the wheelset based on the wheelset’s aero star rating.

Doing some internet research, it seems that a rule of thumb is that CD is roughly 70% due to the person, 20% due to wheelset and 10% due to the bike frame.

So how would Zwift get cross-sectional (or frontal) area, A. We supply height and weight. Looking at some research papers on the topic, people have attempted to do regression analysis on various datasets to find a formula linking weight, height and A.

The starting point seems to be the relationship between height, weight and body surface area. There are several formulae in use but the most common seems to be the Du Bois & Du Bois formula from 1915, for body surface area, A_{BSA} which is related to height, h, and weight, m, by:

A_{BSA} = 0.2025.h^{0.725}.m^{0.425}

Work was then done to relate body surface area to cyclist cross-sectional area. There is a quoted paper from 1999, “Comparing cycling world hour records, 1967–1996: modeling with empirical data” that includes this graph:

Screen Shot 2018-05-18 at 10.32.47

So, using the upper line of best fit for regular racing bikes on the drops, frontal area, A is given by:

A = 0.1366.A_{BSA} + 0.1647 = 0.0276.h^{0.725}.m^{0.425} + 0.1647

Note the R squared is terribly low (0.4013) and there are only a few data points, and this is for the best cyclists ever, but at least its something!

Similarly, for the TT bike line of best fit, frontal area, A is given by:

A = 0.1447.A_{BSA} + 0.0604 = 0.0293.h^{0.725}.m^{0.425} + 0.0604

The R squared is better, but still low at 0.757.

So there are certainly a lot of issues with taking these formulae and applying them outside of elite cyclists but it does provide a one size fits all pair of equations to use for all riders on Zwift based on simple, easy to get data of weight and height.

Since the weight and height part of the equation comes from medical research outside cycling I suspect the numbers are for the naked individuals (i.e. without kit)! Which creates a bit of a conundrum as to what weight to enter into Zwift. If it is naked weight then the weight used for the gravity and rolling resistance terms will probably be understated but the drag term should be more accurate. If it is weight of the person in riding kit then the gravity and rolling resistance terms will likely be more accurate but the drag will be overstated. This might be why Zwift keep this vague.

What does it mean?

What can an equation like this actually mean:

A = 0.0276.h^{0.725}.m^{0.425} + 0.1647

Well, the 0.1647 will probably refer to the bike and wheels. But what about the h^{0.725}.m^{0.425} part; what is going on here?

The taller you are the larger the frontal area. That seems reasonable. The heavier you are the larger the frontal area. Again, this seems reasonable.

220px-Cylinder_geometry.svgBut what about those strange fractional powers of weight and height? A human is a very complex shape but lets simplify the situation and look at a cylinder of height, h and radius, r.

The volume, V is given by:

V = \pi.r^2.h

and the surface area, S is given by:

S = 2.\pi.r.h + 2.\pi.r^2

If h is much bigger than r, then approximately:

S \approx 2.\pi.r.h

If the cylinder has constant density, ρ, then its mass, m, is given by:

m = \rho.V = \pi.\rho.r^2.h

Rearranging this gives:

r = \sqrt (\frac {m} {\pi.\rho.h})

So substituting this into the formula for approximate surface area:

S \approx 2.\pi.h.\sqrt (\frac {m} {\pi.\rho.h})

S \propto h^{0.5} \times m^{0.5}

So, the above gives some sort of clue as to where the fractional powers of rider weight and height might come from in the surface area equation.

Back, to the formula… for a 75kg 1.83m rider A = 0.433.

Increasing height by 1cm increases A by 0.25%

Increasing weight by 1kg increases A by 0.35%

Given where this formula has come from its likely to be better at the pro-rider end of the spectrum where the rider is riding in an aerodynamic way. The frontal area for casual riders is likely to be higher, which would make drag higher and therefore the speed slower in real life compared to Zwift.

The other point to bear in mind is that the formula came from elite male cyclists who would have minimum body fat. Applying this to less well trained individuals is likely to understate the frontal area for a given weight (fat is less dense than bone and muscle) and therefore the drag, so again Zwift may overstate your speed slightly.

Rider Position

In real life, how the rider is riding, e.g. on the drops, on the hoods, etc. has an impact on drag by affecting the frontal area, A and shape, CD.

In Zwift, the avatar rides in one of the following positions:

  • On the hoods, when going slowly or drafting
  • On the drops when going quickly
  • Standing, when climbing at low cadence
  • Sprinting when outputting a large number of Watts
  • Supertuck when free-wheeling down a steep hill.

For each of the these positions Zwift could change CD.A. Supertuck is a free-wheeling position which I have not considered, so putting this to one side, in my analysis I am assuming Zwift do not change CD.A based on avatar position.

Zwift Equation of Motion

I am going to ignore the TT bike and concentrate on the road bike for the rest of this blog. The overall equation of motion is now:

P = M.g.v.\cos (\arctan (G)).C_{rr} + M.g.v.\sin(\arctan(G)) + \frac {1} {2} \rho.C_D.(0.0276.h^{0.725}.m^{0.425} + 0.1647).v^3

where m = mass of rider, M = m + mass of bike + mass of wheelset

So, given we know in-game speed, v, power, P and the grade of the slope, G, along with rider height and weight, the unknowns in the above equation become:

  • Mass of the bike (we know a 1 – 4 star rating)
  • Mass of the wheelset (we know a 1 – 4 star rating)
  • C_{rr} which is constant
  • C_D = C_{Dr} + C_{Db} + C_{Dw} where the rider component is constant and the bike and wheels component varies with the equipment chosen.

So now we need some data.

ZwiftInsider Dataset

ZwiftInsider has very kindly made some test lap data available here. The way this works is that a simulator has been built to output a constant amount of power and then to send an avatar around various loops of Zwift at certain power levels. Various heights, weights, bikes and wheelset combinations have been tried out.

The advantage of looking at this data is that power is constant, not something that happens if you just ride on a turbo trainer.

The downside is that the gradient on Zwift is almost always constantly changing so the rider’s speed rarely reaches equilibrium, i.e. the rider is always accelerating or decelerating. This is fine but makes solving the equation of motion much more tricky.

So, the test laps are on Strava where its possible to look at performance across various segments. The problem with this is that the segments have varying gradients so again I cannot just use average speed for the segment and average grade because the power equation is a polynomial in speed.

What I have done is look for parts of the loop where grade is constant and used the segment analyser tool in Strava to get the speed.

Richmond Dataset

I started with the Richmond dataset because this is the largest number of laps and has variety of weight, height etc. for the same bike and wheelset.

I picked the Zwift W Broad St Sprint as it is completely flat and the terrain before it is quite flat so the entry speed to the segment is close to the speed through the segment. The speed towards the end of the segment is as close to equilibrium as I could get.

Screen Shot 2018-05-23 at 07.53.45

So, what speed to use? Strava gives an average and a max speed for the segment. It also calculates a value every second if you look at the analyser tool. In general, for this segment the entry speed increases slightly over the first half of the segment and then fluctuates by a small amount (e.g. 0.2 mi/h over the second half). Using the average value I think would understate the number due to the slower speed in the first half and using the maximum I think would overstate it due to what look like random fluctuations in the speed; so I manually averaged the speed over the end section of the segment.

Initial Analysis on CRR and CD

So the first thing to note, is that on level ground (zero grade) the equation becomes:

P = M.g.v.C_{rr} + C_D.(0.016905.h^{0.725}.m^{0.425} + 0.10087875).v^3

For the same bike and wheelset, M and CD will be constant at different power levels, so the equation becomes:

P = X.v + Y.v^3 where X, Y are constant.

So using the Zwift Carbon bike with Zwift 32mm Carbon wheels there are 9 runs at 150 to 500 watts for a 75kg rider with 1.83m height. Running an excel regression analysis on the above formula gives:

X = 3.3219, Y = 0.1893

From which X gives M.C_{rr} = 0.3386. If we assume a 7.5kg bike and wheels this gives:

C_{rr} = 0.0041

and Y gives CD = 0.7143

These are “realistic” values.

Regression analysis is just a statistical way of fitting a equation to a set of data. Excel is quite good at this. You need to get an equation of the form:

y = c_1 + c_2.x + c_3.x^2 + c_4.x^3 + ...

where the c_n values are constants. Regression analysis will then give you the constants.

The adjusted R squared was 86%. I tried some regression formula for terms with v^2 and v^4 but the adjusted R squared was 75% and the coefficients did not make any physical sense (i.e. they were negative) so it looks like Zwift is using the predicted type of equation.

Analysis on how Height Effects Drag

Starting with the equation for level ground:

P = M.g.v.C_{rr} + \frac {1} {2} \rho.C_D.(0.0276.h^{0.725}.m^{0.425} + 0.1647).v^3

ZwiftInsider did a few runs where everything was kept constant except height. So, again picking the “Zwift W Broad St Sprint” in Richmond, and using the Zwift Carbon bike with Zwift 32mm Carbon wheels there are 3 runs at 225 Watts with heights 1.53m, 1.68m and 1.83m.

So to check how speed is related to height, it is necessary to get to get the above power equation into a form that allows regression analysis to be run on it. Lets assume z is the exponent on height and lets see what we get:

P = X.v + (Y_1.h^z+Y_2).v^3 where X, Y1 and Y2 are constant

Rearranging and taking logs gives a linear equation:

\ln (\frac {\frac {P - X.v} {v^3} - Y_2} {Y_1}) = z.\ln(h)

Running excel regression on this gives z = 0.69. Bear in mind I only used 3 data points and the R squared is only 50% though!

So it seems possible that Zwift is using height to the power of 0.725 in their drag equation.

Analysis on how Weight Effects Drag

Starting with the equation for level ground:

P = M.g.v.C_{rr} + \frac {1} {2} \rho.C_D.(0.0276.h^{0.725}.m^{0.425} + 0.1647).v^3

ZwiftInsider did a few runs where everything was kept constant except weight. Weight, however, effects both the rolling resistance and drag terms so its difficult to algebraically produce an equation to run regression analysis on.

However, Excel has a cute “solver” function where you can set a target by varying a particular cell. So I picked 3 runs at 200 watts where the only difference was a rider weight of 50kg, 75kg and 100kg.

The only thing we do not know in the above equation is the weight of the bike and wheels. This seems to be a bit mysterious in Zwift but I did see a comment on the Zwift website from the head developer a couple of years back saying that all bikes weighed about 7.5kg but that Zwift were about to change this so each component would have its own weight.

So 7.5kg is not a bad weight for a racing bike and wheels so I used this in the above equation. Setup a variable, z, to represent the power of the rider’s weight and calculate the power using the formula. I set “solver” to minimise the square of the sum of the difference in power from the equation versus 200 watts by varying z. Its kind of a quick and dirty “least squares” approach.

Solver came out with z = 4.2. Again, its only 3 data points!

It seems posible that Zwift is using weight to the power of 0.425 in their drag equation.

Problems with the Richmond Dataset

I tried doing regression above on datasets with a 50kg and 100kg rider. With this information it is possible to calculate CD and M.C_{rr} again. Unfortunately, the numbers do not agree very well.

Looking at the dataset:

  • An obvious problem occurs at 400W and 500W where speed seems to be independent of rider weight, e.g. a 50kg rider goes at the same speed as a 100kg rider. This does not seem right. It is, of course, possible that at some threshold power, Zwift change the equation of motion but I am going to assume this is not what Zwift does.
  • The way Strava is calculating the speed seems wrong in certain cases. E.g. for a 50kg rider at 400W, the segment average is 27.9 mi/h and max is 27.7 mi/h (obviously this is not possible).
  • Some data looks wrong, e.g. 100kg rider doing 250W, segment average is 21.6 mi/h whereas max is 23.7 mi/h which is a significant difference.

So, I could not get anymore information from the Richmond dataset.

Watopia 2016 and 2017 Datasets

This dataset is mainly for a 75kg, 1.83m rider with different bike and wheel combinations riding a loop around Watopia at 225 watts. I used the “ocean reverse” segment because it starts after 0.6km of flat riding and is itself about 1km long. Unfortunately the end of the segment is not completely flat so I manually took the speed towards the end of the segment whilst the gradient was zero.

So, once again the equation for level ground:

P = M.g.v.C_{rr} + \frac {1} {2} \rho.C_D.(0.0276.h^{0.725}.m^{0.425} + 0.1647).v^3

So with this dataset, power, rider weight, height and contribution to CD are constant and the variables are all to with the equipment:

  • Bike weight and CD contribution
  • Wheel weight and CD contribution

So, that’s 4 unknowns so time for some more assumptions!

Zwift give a 1 to 4 star rating to the weight and aero’ness of each bike and wheelset. These star ratings would be turned into actual kg and used in the power equation. Weights are obviously just additive, i.e. add the bike weight to the wheel weight to the rider weight.

Not so obvious what to do about about aero’ness. I have assumed Zwift convert the aero’ness star rating into a contribution to CD that obeys:

C_D = C_{Dr} + C_{Db} + C_{Dw}


I looked at the ZwiftInsider data for the wheels that I have unlocked in game (and see the star ratings for) using the Zwift Carbon bike.

Wheelset Weight star Weight (real) Aero star
Zwift Classic 2 1
32mm carbon 3 2
Zipp 202 4 1.45 2
Mavic Cosmic  CXR60c 1 1.986 3
Bontrager Aeolus 5 3 1.605 3
Zipp 404 3 1.69 3
Zipp 808 2 1.885 4

Doing a bit of googling its possible to get values for the real-world wheelsets. There are many options so its not obvious which ones Zwift would use but its possible to a variation of 1.45kg for a 4 star wheelset to 1.986kg for a 1 star wheelset.

From this I constructed a simple matrix of star rating versus weight:

Wheel Weight star Weight (kg)
1 2.0
2 1.8
3 1.6
4 1.4

For aero’ness I assumed a similar approach that each star changed the CD value by a set amount. To get a starting point, for the 32mm Carbon wheelset and Zwift Carbon bike I know the total CD, and assuming the rider is 70%, bike 10% and wheels 20% I have a value for the contribution of the 2 star wheels of 0.1429.

So for all these wheelsets I setup an Excel Solver equation to work out the contribution each star makes to CD for the wheelset which came out at 0.0186.

Wheelset Weight star Weight (kg) Aero star Cdw
Zwift Classic 2 1.8 1 0.1615
32mm carbon 3 1.6 2 0.1429
Zipp 202 4 1.4 2 0.1429
Mavic Cosmic  CXR60c 1 2 3 0.1243
Bontrager Aeolus 5 3 1.6 3 0.1243
Zipp 404 3 1.6 3 0.1243
Zipp 808 2 1.8 4 0.1057


So following the same process for bikes as I followed for wheelsets:

Bike Weight star Weight (Kg) Aero star
Zwift Steel 2 1
Zwift Carbon 3 2
Parlee ESX 3 5.6 3
Trek Emonda 4 5 2
Zwift Aero 3 3
Canyon Aeroad 3 5.6 3
Trek Madone 3 6.1 3

There are even more options for bikes so it is very difficult to know what to choose for real world weights. But again, creating a simple matrix:

Weight star Weight (Kg)
1 7
2 6
3 5
4 4

Following the same approach for aero’ness, I started with a value for the Zwift Carbon bike of 0.714. So again using Excel solver to work out a contribution of each star to the bike’s CD contribution of 0.0080.

Bike Weight star Weight (Kg) Aero star Cdb
Zwift Steel 2 6 1 0.0794
Zwift Carbon 3 5 2 0.0714
Parlee ESX 3 5 3 0.0634
Trek Emonda 4 4 2 0.0714
Zwift Aero 3 5 3 0.0634
Canyon Aeroad 3 5 3 0.0634
Trek Madone 3 5 3 0.0634

I have one more unlocked bike, the Tron which has its own wheels:

Bike Weight star Weight (Kg) Aero star Cdb
Tron 4 5 4 0.0555
Wheelset Weight star Weight (Kg) Aero star Cdw
Tron 4 1.4 4 0.1057

So it is possible to come up with some numbers for the dataset for weight and CD. The dataset is not accurate enough to know which model Zwift has actually chosen but I would guess the following:

  • Weights are probably entered specifically for the equipment as this is publicly available information. Zwift would have to specify some guidelines but could obtain weights from the manufacturers or just purchase and weigh the equipment. Zwift would have to specify the weights of Zwift-only equipment that does not exist in the real world. Based on weight buckets, each piece of equipment would then be assigned a star rating.
  • Aero. This would be more contentious for Zwift as it would be difficult to get a CD for a piece of equipment and presumably Zwift would not want to get involved in wind tunnel tests, etc. To take some of the contention away, Zwift may have assigned a star rating based on information from the manufacturer and / or public reviews and then used the star rating to come up with a CD for each piece of equipment.

However Zwift have done this, the full lap times show that different equipment with the same star rating performs very slightly differently.

Alpe du Zwift Dataset

I hoped to be able to use this dataset to investigate inclines and how Zwift works. Unfortunately, the Alpe has continuous gradient changes, so the rider does not get into a steady state where speed stabilises on a certain gradient so I could not get any new information. It does look like Zwift obeys the basic equation of motion though.

Next Steps

To get more accurate information on the performance of different bikes and wheelsets would be possible but it would require laps of of areas with long stretches of constant gradient when the rider gets into speed equilibrium.

It would also be possible to investigate the features like free-wheeling downhill and the “super tuck” position where frontal area is likely reduced. Some laps of the radio tower in Watopia would help here.

It would be interesting to investigate drafting and see what equations are used here. This would be tricky to setup as it would require multiple bots to ride together in close proximity.

So what does it all mean?

Going back to the general power equation:

P = M.g.v.\cos (\arctan (G)).C_{rr} + M.g.v.\sin(\arctan(G)) + \frac {1} {2} \rho.C_D.(0.0276.h^{0.725}.m^{0.425}+0.1647).v^3

Riding on the Flat

Here the gravity term is zero and the equation reduces to a rolling resistance term and a drag term. The rolling resistance is proportional to speed and is relatively small. Drag is proportional to speed cubed. Here is a typical graph.

Screen Shot 2018-05-29 at 10.54.36

At higher speeds we can ignore the rolling resistance:

P \approx \frac {1} {2} \rho.C_D.(0.0276.h^{0.725}.m^{0.425}+0.1647).v^3

v \propto \sqrt[3] { \frac {P} {Cd.A}}

So to double your speed you would need 2 cubed = 8 times the power.

So, for sprinting (assuming no drafting) top end speed is dependent upon the ratio of Power to CD.A.

In Zwift, CD does not vary by rider and has only a very small equipment dependency. Frontal area, A, is fixed based on weight and height so the only thing you can vary is your power. You can sprint in whatever position generates the most power for you, irrespective of how aerodynamic (or not) that position is. In real life the compromise is to optimise the power to CD.A ratio not to optimise absolute power.

In Zwift, for a group of people sprinting, ignoring differences in equipment and drafting effects:

v \propto \sqrt[3] { \frac {P} {h^{0.725}.m^{0.425}}}

Climbing a Steep Hill

Here the gravity term dominates:

Screen Shot 2018-05-28 at 12.30.46

Because speed is low, drag is low, and the power equation can be approximated by:

P \approx M.g.v.\sin(\arctan(G))

v \propto \frac {P} {M}

So here climbing speed is proportional to the ratio of power to total weight of rider and equipment. Top climbers are usually smaller, lighter people. The important thing for speed is not absolute power but the power to weight ratio. Lightweight equipment helps.

Zwift is probably an idealised situation with top class, lightweight equipment. Things like carrying water, food or spare kit and equipment like tubes are likely not factored in, in Zwift. So Zwift would represent a lightweight you, unless you factor all the things you take on a real world climb into the weight you enter into Zwift.

Intermediate Hills

Different inclines will have different mixes of gravity power and drag:

Screen Shot 2018-05-28 at 12.41.31

Different people can do better or worse on different inclines depending on their absolute power and power to weight ratio compared to their peers.


One of Zwift’s badges is unlocked if you can hit 100kph.

For a 75kg, 1.83m rider on the Zwift Carbon bike with Zwift 32mm carbon wheels you would need to generate a whopping 4,150 watts for long enough to reach a steady state 100kph, which is obviously unrealistic.

Downhill however, gravity can help. The gravity term in the power equation is negative for a negative gradient which means gravity is now a source of power (as opposed to a consumer of the power the rider is generating). Consider a downhill of 15%, like for example the descent from Watopia’s radio tower.

Screen Shot 2018-05-31 at 11.07.33

At about 90kph, gravity is generating about 3,000 watts of power which more or less matches the drag and rolling resistance, so you can free wheel to this speed. To get to the magic 100kph you would need to put in about 850 watts of rider power.

However, a 100kg rider would only need to put in 195 watts of power on the same hill to hit the magic 100kph. This is because the gravity term is proportional to weight (as is rolling resistance but this is much smaller) whereas drag is scaling with m^{0.425} so the steady state is reached at a higher speed. So weight is not always a disadvantage!

Where do I get Most Return for Harder Efforts?

Consider the following ride:

  • 5k of 10% uphill, followed by
  • 5k of flat, followed by
  • 5k of 10% downhill

Assuming again a 75kg, 1.83m rider on the Zwift Carbon bike with Zwift 32mm carbon wheels riding at a constant 225 watts, (s)he would cover each section as follows:

Screen Shot 2018-05-31 at 17.16.48

I have ignored the impact of accelerating at the start of the ride and on gradient changes so the rider is assumed to always move at the steady state speed appropriate to his power output and the gradient. This is not how Zwift works, obviously, but I have done this just to make the maths simpler.

Now, if the rider wanted to do a single, 2 min effort at 300 watts, and ride the remainder of the course at 225 watts would it be more beneficial to do the effort on the uphill, the flat or the downhill? Lets simplify the maths again by ignoring the few seconds of acceleration and deceleration when the 2min effort starts and finishes. Here is what the three scenarios would look like:

Screen Shot 2018-05-31 at 19.14.57

In scenario 1, the 300 watt effort is put in on the uphill, taking his speed from 9.61kph to 12.67 kph for 2 minutes before reverting to 225 watts and a speed of 9.61kph. Watts were increased by 33% on a steep hill and speed increased by nearly 33% (as expected as speed is approximately proportional to power here). The time for the uphill section is reduced to 30:35 an overall time saving for the scenario of 38 seconds.

In scenario 2, the 300 watt effort is put in on the flat, taking speed from 36.2kph to 40.18kph. Overall time for the flat section is reduced to 8:04, an overall time saving for the scenario of 13 seconds. Here, power is being consumed mainly by drag which scales as speed cubed, so a 33% increase in power results is a 1.33^{1/3} \approx 1.1 increase in speed (or approximately 10%). This is a much smaller speed increase than scenario 1, and therefore the time saving of scenario 2 versus scenario 1 is much smaller.

In scenario 3, the 300 watt effort is put in on the downhill taking speed from 77.11kph to 78.55kph. Overall time for the downhill section is reduced to 3:51 an overall time saving for the scenario of 2 seconds. Here, before the effort, gravity is already contributing over 1,700 watts to the rider’s 225 watts so if the rider adds another 75 watts taking his output to 300 watts, that is only an increase of 75 / 1925 or 4%. This 4% power increase results in an approximate speed increase of 1.04^{1/3} \approx 1.01 or 1%. This small speed increase results in the smallest time saving of all scenarios.

So time your efforts for the uphills, the steeper the better!


Zwift has implemented drafting where it is possible to stay “on the wheel” of another rider, i.e. going at the same speed, but by outputting less power. I have no real data on this to be able to analyse but ZwiftInsider wrote this article on drafting. In it he says: “Using power emulators on a closed course, we had one rider sustain 300 watts while another ride drafted behind. We found a rider could stay in this 300 watt draft at 225 watts while on relatively flat ground.”

So how might that work. The most obvious way would be to modify CD.A in some way, probably reduce it by some factor. Lets call it γ, and assume a 75kg, 1.83m rider on the Zwift Carbon bike with Zwift 32mm carbon wheels riding at a constant 300 watts on level ground.

P = 300 = M.g.v.C_{rr} + \frac {1} {2} \rho.C_D.A.v^3

Lets assume rider 2 has the same physical characteristics and the same equipment, travels at the same speed but is putting out just 225 watts:

P = 225 = M.g.v.C_{rr} + \frac {1} {2} \rho.\gamma.C_D.A.v^3

Subtracting these equations gives:

75 = \frac {1} {2} \rho.(1-\gamma).C_D.A.v^3 , or

1-\gamma = \frac {150} {\rho.C_D.A.v^3} = 0.285

Which gives γ as 71.5% or put another way the drafting effect of a single rider reduces CD.A by 28.5%

Multiple Riders

There have been studies in real life, mainly open track cycling where speeds are higher and the drag effect a bit more pronounced on multiple riders in a group. The draft effect is dependent upon the number of riders, how close together they are, etc.

Lead Rider Benefit

There is also a benefit (though smaller) to a lead rider from being drafted. This is due to the change in the way the air flows around multiple riders, as opposed to how it would have flowed past a single, isolated rider. The impact of this is to reduce the drag of the lead rider which results in the lead rider moving more quickly at the same power.

Blob Effect

Zwift appear to have modelled the drafting benefit to both leader and follower. When a group of riders are close together, for example, in a race, not only do the riders behind the leader go faster than they would for the same power output if they were isolated, but the whole group goes noticeably faster. This gets called the “blob effect”. If a rider drops off the pace, “getting back on” becomes incredibly difficult once the isolated rider loses the drag benefit of drafting. Remember power in these situations scales as speed cubed, so even a modest increase in speed requires a significant uptick in power.


Again, I do not have any data to analyse so these are just some thought.


There are 5 different Powerups in Zwift. The first 2 add to your rider score and the last 3 effect the physics of the game:

  • Lightweight. This reduces your weight. So this should impact the gravity term in the power equation. Going uphill it will make you go faster and coming downhill it will slow you down. On the flat, if Zwift adjust the drag term as well, you should see a small benefit to drag through a reduced CD.A. Although, from the analysis above, the biggest benefit from this powerup will be on the steepest incline.
  • Draft Boost. Increases the benefit of drafting. Would make sense to use it when travelling at high speed where drag is the dominant force to be overcome. Could be a factor applied to the drafting factor, γ, (that could be applied to CD.A).
  • Aero Boost. Makes you more aerodynamic which would imply a reduction to CD.A again most likely as a factor applied to the drafting factor, γ, applied to CD.A. Again, it would make sense to use it when travelling at high speed where drag is the dominant force to be overcome.

Is Zwift Realistic?

The equation of motion looks reasonable from the analysis. Its possible Zwift uses a more complex set of equations as the data I have used is not detailed enough for me to be completely sure on the equation I suspect is being used.

Speeds in Zwift are what you could do in real life in an idealised way, assuming you enter a height and weight into Zwift consistent with what you wear and carry on your real life rides, and ride in a highly trained, pro-like “aero” manner as you would if you were attempting a 1 hour record! Also, it would assume flawless equipment, correctly inflated tires, well-maintained drive-chain, etc. etc.

Ride on!