Calculate Needed Training Load?

Just use the formula that @MedTechCD provided, plug it into your own GoogleSpreadSheet / Excel and fill in the blanks.

(Note: This is app code)
let newAtl = prevAtl + (TodayTSS - prevAtl)/7
let newCtl = prevCtl + (TodayTSS - prevCtl)/42

eg:
Date | TodayCTL | TodayATL | TodayTSS | NewATL | newCTL

copy your current CTL/ATL into it and then the relevent formulas in NewATL/CTL

1 Like

I’m busy putting one together, will share the link once done.

1 Like
  • ATL = (ATLyesterday)(e(-1/k))+ (TSStoday)(1-e(-1/k))
  • CTL = (CTLyesterday)(e(-1/k))+ (TSStoday)(1-e(-1/k))
  • TSB = CTL - ATL
  • K= Time constant (7 for ATL and 42 for CTL)
    e = 2.71828
    ATL = fatigue
    CTL = fitness

ok I think I got it…

here is an unnecessarily complicated spreadsheet on how to do that math but it shows the steps.

Thinking about this a bit further, the super stupid easy answer is to

Fatigue = take yesterday’s fatigue number x 0.8669 + today’s training load x 0.1331

Fitness = take yesterday’s fitness number x 0.9765 + today’s training load x 0.0235

Form = Fitness - Fatigue

1 Like

ok now I can actually plan on how much load I need for each day to stay in the optimal zone, knowing that there are certain days I won’t have access to my trainer.

Here’s an example of how TSS, CTL, ATL and TSB are calculated
You can enter your own values in the green columns, as well as TSS.
Then you can calculate CTL, ATL and TSB in the yellow columns based on those figures.
I guess the rounding may result in the -1 delta in some rows.

2 Likes

I’ve been meddling around w/ this calculation and I was using the same formula as you namely:

let newAtl = prevAtl + (TodayTSS - prevAtl)/7
let newCtl = prevCtl + (TodayTSS - prevCtl)/42

BUt when I compare the data with that from intervals.icu’s wellness API endpoint, I get some differing number (rounding delta of 1 or -1 from my calculation and that of intervals.icu)

It took some digging, but the formula from @JASON_C_WILLIAMS

  • ATL = (ATLyesterday)(e(-1/k))+ (TSStoday)(1-e(-1/k))
  • CTL = (CTLyesterday)(e(-1/k))+ (TSStoday)(1-e(-1/k))

Was the key to consolidating the numbers from my own calculation and that of intervals.icu (now they match)

Somehow, the formula used by @david for intervals.icu and that @JASON_C_WILLIAMS got is different from that of TP’s article you linked. https://help.trainingpeaks.com/hc/en-us/articles/204071884-Fitness-CTL-

2 Likes

Metrics, in general would be the same as using a power meter for testing; always use the same one to ensure consistency.

Strava uses 25s EWMA for “NP”, TrainingPeaks uses 30s EWMA, and (I think) Xert something different, all use different methods to calculate training load.

In your case, Form from different analytical tools uses different methods based on yesterday or today. It’s important to avoid comparing between methods as there will be a different.

I have been using WKO4 and WKO5, and still use it. I don’t try compare it to Intervals, but rather use the best of both applications.

Trends are more important that the absolute value. So the Fitness, Fatigue and Form should rise and drop at a similar rate…

2 Likes

I’m going to repeat Jason’s feature request. My goal is to keep my form in the optimal training zone -10 to -30. For each day I would like to see how much load I still need to generate today to keep my form below -10 and above -30. I don’t want to make my own spreadsheet. I want intervals.icu to show me exactly what that magic pair of numbers is.

5 Likes

There are easier ways to get optimised training done, and looking at the numbers can be too complicated, and unnecessary. A better way to do it, where I have seen progress in every cyclists I’ve given workouts to, and that have followed the plan (not 100% compliant, but at least >80%) have shown improvements in performance.

Over a 4 week period, aka traditional periodization, there would be an increase in either:

  • the workout duration at the same power, or
  • the power for the same duration.

If I see them struggling, based on RPE and Feel, I would dial back the intensity a few watts, or perhaps they need a longer recovery. Otherwise I encourage them to not use ERG mode and ride to feel. If they feel strong, go a little harder, eg. the 8m intervals, they can go at 95% if they feel sluggish or up to 105% if they’re feeling really strong.

Here’s view of one person’s calendar, taken at random (they’re moving into Base2 next week):

  • I try keep their ramp rate below 5, unless they are truly a good responder to fatigue.
  • You’ll see the week’s form shows green as I’m not worried about their day to day scores.
  • You’ll also notice the progression is focused on increases in weekly workouts.
    While I personally start on a Monday, because I train in the afternoon (weekdays) and morning (weekends), I try encourage them to have a reserve day. In this case, it’s a Friday. If work/life prevents them from following the plan, they have a day in reserve. If they want to add another ride, the rule is simple: keep it easy. The Free ride on Sunday is difficult (many times they want to race up the hill, because others are doing it, and they want to see how their performance is improving). That’s that the free ride is for… let them have fun, but keep the intensity lower than normal for the rest of the ride.

Hope this helps.

11 Likes

What happens in the next block?

The intensity goes up, and they start again at 3x8m and then 4x8m and finally 5x8m.
So if they were on 95% in base1, I’d push them up to 100% in base2, and 105% in base3.
The second breakthrough workout would be slightly different, and can be mixed up of they need it. The key is to ensure that workout has a progressive increase.

Group rides will always be 3 - 4 hours long, as the races are all 2.5 - 3.5 hours in duration. Each block during Base1-3 will be the same TSS in each block. If it’s a longer event some time in the future will the duration of long group rides increase for that event. In the Build and Taper weeks, the volume drops on these long rides (2.5 - 3 hours) and it’s more race-specific type riding (higher intensity, less duration; and a little more rest days too).

5 Likes

This came form Alan Couzens:

"It goes like this… (assuming default constants of 42/7)
Target CTL ramp rate = ~10 per month
Target TSB floor (i.e. where your Training Stress Balance will bottom out at the end of a 3 week loading period) ~= -20 TSB
Target daily TSS load = CTL+~30 per day.
Easy as 1,2,3!


A worked example…
Athlete’s current CTL (fitness) is 100 TSS/d and we want it to be 110 TSS/d by the end of the 4 week block.
We know that a TSB of -20 is a safe ‘bottom’ for this athlete.
So we plan the loading days for the 3 loading weeks (of the 4 week block) as 100 +~30 = ~130TSS/d.
Of course at the end of the block, the athlete will have a new CTL of 110 so loading days for the next block will need to be 140TSS/d… Finnegan begin again (until Finnegan runs out of time/life space :slight_smile:


So, what does the recovery week/recovery days look like?
Conveniently enough, 7 days at CTL-30 at the end of the block will bring the athlete back to a ‘neutral’ freshness of TSB ~ 0 ready to start the next block (for our athlete above, a TSS load during the recovery week of 100-30 = ~70TSS/d)
With a proven athlete or an athlete with a high constitution but lower than average response, it may be more like a 2,4,6 rule, i.e. ramp rate of 20, TSB floor of -40, daily loading of CTL+60. But athletes who can handle this sort of 5TSS/wk ramp over the long term are the exception rather than the rule.
Of course, this ‘flat loading’ process is as boring to the body as it sounds to the head. There is real benefit in implementing more variability in the load to avoid ‘training monotony’ - something that can significantly diminish the response than an athlete gets from a give training load, i.e. for an average load week of 100TSS/d, having some days at 150, others at 50 and maybe even a big day at 200 & (perish the thought :-), a true rest day of zero. I’ll talk about the advantages of that type of approach in a future post. But for now…
Train smart,"

Very easy.

Take TrainerRoad TSS RAMP RATE "
TSS = Previous week’s TSS + weekly work days *rr
Typically, a weekly ramp rate in the 6 TSS neighborhood (+/- 2 TSS) works well for most riders, so a weekly ramp rate of 15 TSS is not recommended but still useful for our needs here.

De https://support.trainerroad.com/hc/en-us/articles/202237810-Training-Stress-Ramp-Rate-and-Target-Ranges "

and apply to Alan’s scheme above and you have what you want.
It is easy do checkf it this is ok but entering the result as “target load” at Interval’s and cheking the number and fitness charts.

regards,

PS: sometimes you have to make some adjustments to the frequency (2,3 sets in a row ou separate) and duration (long ones does have impact). but the main spine remains.

2 Likes

I don’t disagree with what he has said. In fact, I train like he describes in the bold bit, just not 100TSS/day average (I don’t have the time).

For me, and the guys I coach, I feel it’s important to get the basics right first, which can be monotonous, then introduce the variability. If the person doesn’t enjoy the hard work, variability doesn’t make it any easier.

BTW, 700 TSS per week is about 14 hours per week average. Recovery weeks will be about 10h and max at about 18-20 hours. He’s probably describing someone capable of riding Cat 1-2.

1 Like

that was only an exemple.
you can do the math whit whatever ctl ramp / TSS avg you have int the moment.

Again from Alan: "…most folks can handle a ramp of 5-8 CTL per week. Perhaps it’s just me growing more and more cautious as the years pass, but I’ve found these numbers to be a little too aggressive over the long term among my sample of high performance (often working age group/‘high life stress’) athletes. I typically aim for a more conservative long term ramp of 3-5 CTL per week (or ~10-20 per 4 week block) as a good long term figure.

De https://www.alancouzens.com/blog/CTLramp.html "

I did a formula to address the proportionality of Alan’s exemple:

For a 3w load 1w rest block:

“Desired BLOCK CTL Gain”, I will call it CTLg . let’s say (in my case) 4
“Initial CTL block value”, I will call it CTL. i.g.:54
“Daily load TSS to add”, I will call it dlTSS
dlTSS= CTLg times 5
dlTSS=4 times 5=20
“Week Load TSS”, I will call it wlTSS
wlTSS=(CTL+dlTSS) times 7
wlTSS=(54+20) times 7=518
so, making 3 weeks of 518TSS will take you to -20/-30 TSB
than you have the rest week where:
“Daily rest TSS on rest week” , I will call it drTSS
rdTSS=CTLg times 3
rdTSS=4 times 3=12
“Week rest TSS”, I will call it wrTSS
wrTSS=(CTL-rdTSS) times 7
wrTSS=(54-12) times 7=294TSS
so making the 294 in the rest week will take you to the fresh TSB
theoretically you end up the 4w block with a CTL 58

all approximate numbers

From my spread sheet

1 Like

Forun editor is not accepting * . I’ll use “times” instead

In addition to the good advice from others, you may find this helpful:

Link to a post of a simple Google docs spreadsheet I made that leverages the intervals.icu API to output what I think you are after.

1 Like

I made a local copy of the spread sheet, entered athlete ID: and API Key: but nothing has happened.
also import data botton at “Daily Record” tab is inoperante.
Appreciate any help.

Tks

What device did you try this on? Unfortunately those buttons (and scripts) can not be triggered on mobile devices - a limitation of Google sheets.

Solution I found for mobile use was to initially set up on a computer, and then set up a regular time-based trigger to run the script that the button initiates.

1 Like

Regular notebook w11
Local copy using Excel

Running it in Excel is why it’s falling over. The script which calls the data from the API is Google Sheets specific, it will not run as an Excel macro.

3 Likes

Even using Google Sheets I’ve got an error message with no further details…

Tks