Products Environment and mobility
WLTP
Worldwide harmonised light vehicles test procedure
Vehicle CO₂ for every option combination, interpolated as the regulation says.
WLTP type approval fixes the CO₂ and fuel consumption figures a manufacturer declares. GraphAtlas applies the interpolation method across a vehicle family, so every configuration of mass, drag and tyres gets its own figure, and it keeps test results and calculation on one record.
Try the calculation Request a walkthrough
- Verification
- 10 statements. 2 proved, 0 certified, 8 tested.
- Regime
- UN GTR No. 15 and Regulation (EU) 2017/1151
- Set by
-
- United Nations Economic Commission for Europe
- European Commission and the European Supervisory Authorities
- Built for
-
- Homologation engineers
- Powertrain and vehicle line teams
- Technical services
- Version
- 1.7
Try it
Run it on sample data
Choose options and tyres for one car. See its road load, its energy demand on the real cycle and the CO₂ that the interpolation gives it. Then move the CO₂ of the high vehicle until the range rule objects.
Fig. 1 CO₂ of an illustrative vehicle family, interpolated between a low and a high test vehicle on the class 3b cycle
Verifying receipt
The vehicle
Tyre rolling resistance class
Classes B, C and E are sold with this family. There is no class D for these tyres.
Test mass 1,536 kg. Drag area 0.032 m² above vehicle L. Tyres 8.4 kg per tonne.
The test vehicles
Vehicle L has no options and emits 120.92 g/km. Vehicle H has every option and was tested at 136.69 g/km.
Declared CO₂
129 g/km
Interpolated to 129.30 g/km, then rounded. This vehicle is 53% of the way from L to H in cycle energy demand.
Range rule
Allowed
H emits 15.77 g/km more than L. The rule needs between 5 and 27.34 g/km.
Where the vehicle sits on the line
- Energy
- L 122.883, this vehicle 131.425, H 138.965 Wh/km
- CO₂
- 120.92 + (131.425 − 122.883) ÷ (138.965 − 122.883) × (136.69 − 120.92) = 129.30
CO₂ by phase
| Phase | Distance km | Energy Wh/km | L g/km | This vehicle g/km | H g/km | Declared | Position |
|---|---|---|---|---|---|---|---|
| Low589 s | 3.09 | 114.4 | 131.20 | 140.09 | 146.85 | 140 | 57% |
| Medium433 s | 4.76 | 125.1 | 120.49 | 128.86 | 135.58 | 129 | 55% |
| High455 s | 7.16 | 118.1 | 103.57 | 111.11 | 117.89 | 111 | 53% |
| Extra high323 s | 8.25 | 153.0 | 132.36 | 141.34 | 149.82 | 141 | 51% |
| Whole cycle | 23.27 | 131.4 | 120.92 | 129.30 | 136.69 | 129 | 53% |
Road load
| Vehicle | f0 | f1 | f2 | Mass |
|---|---|---|---|---|
| L, refitted | 98.48 | 0.3410 | 0.02575 | 1,460 |
| This vehicle | 114.72 | 0.3410 | 0.02713 | 1,536 |
| H | 131.40 | 0.3410 | 0.02855 | 1,580 |
Road load is the force that the road and the air put against the car at a steady speed v, in newtons: f0 + f1 v + f2 v², with v in km/h. Mass is in kg. Test mass times rolling resistance puts this vehicle 49% of the way from L to H, which moves f0. Drag area puts it 49% of the way, which moves f2. The term f1 is that of H for all three, because the curve of L was refitted to it.
The cycle and the seconds that count
Inputs and outputs
What goes in. What comes out
The plate runs a slice of the engine. This is the whole shape of it.
What goes in
- Test vehicles L and H
- The road load coefficients, test mass, tyre rolling resistance and measured CO₂ of the two vehicles at the ends of the family, for each phase and for the whole cycle.
- An individual vehicle
- Its test mass, the rolling resistance class of its tyres and the difference in drag area against vehicle L.
- The cycle
- The target speed for each second of the class 3b cycle, in four phases.
What comes out
- Road load
- The coefficients of the individual vehicle, with the refitted curve of vehicle L that they move away from.
- Energy demand
- For vehicles L and H and the individual vehicle, in each phase and over the whole cycle.
- CO₂
- Interpolated for each phase and for the cycle, with its position between L and H, and the figure to declare in whole g/km.
- Range check
- Whether the two test vehicles are far enough apart and not too far, and whether a vehicle beyond the line could be an extension.
- Receipt
- A hash of the rules, the cycle, both test vehicles, the individual vehicle and every figure worked out. Anyone can recompute it.
What the plate covers
In the plate above
- The class 3b speed trace as the regulation prints it, second by second.
- The road load of an individual vehicle, with the least squares refit of vehicle L.
- The energy demand of three vehicles on that trace, counting only positive force.
- Interpolation in each phase and over the cycle, with the rounding of the regulation.
- The range rule and its extension of 3 g/km.
- Every combination of options and tyres that the family is sold in.
In the licensed engine, not the plate
- Hybrid and electric vehicles, and every cycle other than class 3b.
- Road load matrix families, and the extra vehicle M.
- Fuel consumption, and the corrections for temperature and for regenerating systems.
- Measuring road load. The coefficients here are illustrative.
- Later amendments of the regulation.
Clause map
Every rule has an address
Each row names the clause, the function that carries it and the statements that check it. A test opens each file and confirms the function exists.
| Reference | Rule | Carried by | Checked by |
|---|---|---|---|
| Sub-Annex 1, paragraphs 3.3.2 and 3.4, Tables A1/7, A1/9, A1/11, A1/12 and A1/13 | A class 3b cycle gives a target speed for each second of four phases that last 589, 433, 455 and 323 seconds. Table A1/13 prints the sum of the speeds for each phase and for the cycle, so that an implementation can check its copy. | WLTC_ src/ | Tested WL-04 |
| Sub-Annex 4, paragraph 4.2.2.1 and Table A4/1 | An individual vehicle takes the class value of its tyres, which for C1 tyres is 5.9, 7.1, 8.4, 9.8, 11.3 or 12.9 kg per tonne for classes A, B, C, E, F and G. There is no class D. | TYRE_ src/ | Tested WL-10 |
| Sub-Annex 7, paragraph 3.2.3.2.2.4 | The curve of vehicle L is refitted by least squares over the reference speeds from 20 to 130 km/h, with the linear coefficient of vehicle H. An individual vehicle has the first coefficient of H less the step to the refitted L, scaled by how far its mass times rolling resistance lies below that of H. The second coefficient moves with drag area. | individual src/ | Tested WL-05 Tested WL-06 |
| Sub-Annex 7, paragraph 5 | Energy demand over a cycle or a phase is the sum, over its one second periods, of the driving force times the distance. The force is the road load plus 1.03 times the mass times the acceleration. A period with force at or below zero counts for nothing. | cycle src/ | Tested WL-03 |
| Sub-Annex 7, paragraph 3.2.3.2.4 | CO₂ of an individual vehicle is that of vehicle L plus the share of the way that its energy demand lies from L to H, times the difference in CO₂. | interpolate src/ | Proved WL-01 Proved WL-02 |
| Sub-Annex 7, paragraphs 3.2.3.2.3 and 3.2.3.2.4 | The energy demand is worked out for vehicle L, vehicle H and the individual vehicle, and CO₂ is interpolated on it for every phase and for the whole cycle. | evaluate src/ | Tested WL-07 |
| Sub-Annex 6, paragraph 1.2.3.2 | The method may be used only if H emits at least 5 g/km more than L, and no more than the lower of 30 g/km and 20 per cent of its own CO₂. | interpolation src/ | Tested WL-08 |
| Sub-Annex 6, paragraph 1.2.3.2, the extension | At the maker’s request and with approval, the line may run up to 3 g/km above H and below L, but only within the boundaries of the range above. | extension src/ | Tested WL-08 |
| Sub-Annex 7, Table A7/1, step 2 | The value for the whole cycle is the phase values weighted by the distance driven in each phase. | combined src/ | Tested WL-09 |
| Sub-Annex 7, Table A7/1, step 9 | The CO₂ of the test vehicles is carried to two decimal places. | test src/ | Tested WL-09 |
| Sub-Annex 7, Table A7/1, step 10 | The CO₂ of an individual vehicle is stated in whole g/km, to the nearest, for each phase and for the cycle. | declared src/ | Tested WL-09 |
Verification
What we claim, and how it is checked
Every statement is registered, and each says which level of assurance it has earned. The ladder is explained on the verification page.
Proved
True for every input.
- WL-01
For every vehicle inside the family, the interpolated CO2 lies between the CO2 of the low vehicle and the CO2 of the high vehicle.
3 checks, decided by Z3 5.3.3.0 (WebAssembly) and rerun from the emitted file by Z3 5.3.3 (native) and cvc5 1.4.2 (native, nl-cov). 2 broken variants are refuted. proofs/smt2/WL-01.smt2
- WL-02
Inside the family, a vehicle that demands more energy never gets a lower interpolated CO2, provided the high vehicle emits at least as much as the low one.
1 check, decided by Z3 5.3.3.0 (WebAssembly) and rerun from the emitted file by Z3 5.3.3 (native) and cvc5 1.4.2 (native, nl-cov). 1 broken variant is refuted. proofs/smt2/WL-02.smt2
Tested
True on every input we tried.
- WL-03
Energy demand over a cycle is the sum of force times distance over its one second periods, counting only positive force. It equals force times distance at a steady speed and rises with every road load coefficient and with test mass.
tests/kernel/wltp.test.ts
- WL-04
The class 3b trace has 1,801 speeds in phases of 589, 433, 455 and 323 seconds, and its sums over each phase and over the whole cycle reproduce the checksums that the regulation prints in Table A1/13.
tests/kernel/wltp.test.ts
- WL-05
An individual vehicle with the mass, tyres and drag of vehicle H has the road load of H. One with those of vehicle L has the refitted road load of L. In between, the first coefficient moves in proportion to test mass times rolling resistance and the second in proportion to drag area.
tests/kernel/wltp.test.ts
Show the other 5 Show fewer
- WL-06
The curve of vehicle L is refitted, over the reference speeds from 20 to 130 km/h, by least squares with the linear coefficient of vehicle H, and a curve that already has that coefficient is not moved.
tests/kernel/wltp.test.ts
- WL-07
An individual vehicle that has the parameters of vehicle H or of vehicle L is given the CO2 of that vehicle, in every phase and over the cycle, and one between them is given a figure between theirs.
tests/kernel/wltp.test.ts
- WL-08
The method is allowed when vehicle H emits at least 5 g/km more than vehicle L and no more than the lower of 30 g/km and 20 per cent of its own CO2. The line may be extended by 3 g/km at either end, and no further than the largest difference.
tests/kernel/wltp.test.ts
- WL-09
The CO2 for the whole cycle weights the phases by their driven distance. The CO2 of the test vehicles is carried to two decimal places, and an individual vehicle is declared to the nearest whole g/km, for each phase and for the cycle.
tests/kernel/wltp.test.ts
- WL-10
An individual vehicle takes the class value of its tyres from Table A4/1 for C1 tyres, which are 5.9, 7.1, 8.4, 9.8, 11.3 and 12.9 kg per tonne for classes A, B, C, E, F and G. There is no class D.
tests/kernel/wltp.test.ts
Use it
The same call, anywhere
This sample is written from the input the plate starts with, so the code and the numbers cannot drift apart.
import {
WLTC_CLASS_3B,
evaluateIndividual,
wltpReceiptPayload,
} from '@graphatlas/kernel/wltp';
import { receipt } from '@graphatlas/kernel/receipt';
// The two test vehicles as the laboratory measured them. Road load is in N, N per km/h and N per (km/h)
// squared, mass is in kg, rolling resistance in kg per tonne and CO2 in g/km, for each phase and for the cycle.
const low = {
f0: 99.2,
f1: 0.318,
f2: 0.0259,
mass: 1460,
rollingResistance: 6.8,
phaseCo2: [131.2, 120.49, 103.57, 132.36],
cycleCo2: 120.92,
};
const high = {
f0: 131.4,
f1: 0.341,
f2: 0.02855,
mass: 1580,
rollingResistance: 10.1,
phaseCo2: [146.85, 135.58, 117.89, 149.82],
cycleCo2: 136.69,
};
// The difference in drag area between the two, in square metres.
const family = { cycle: WLTC_CLASS_3B, low, high, dragAreaLH: 0.065 };
// One vehicle from the order book: roof rails, panoramic roof, tow bar, and tyres of class C.
const vehicle = { mass: 1536, rollingResistance: 8.4, dragArea: 0.032 };
const result = evaluateIndividual(family, vehicle);
const hash = await receipt(wltpReceiptPayload(family, vehicle, result)); const out = {
declared: 129,
co2: 129.2962,
position: 0.5311,
phases: [140, 129, 111, 141],
range: { span: 15.77, maximum: 27.338, verdict: 'ok' },
receipt: '9948ea6941e46cd93386e040815bfaaed9d7a701174887e9e81788bb06f828ea',
}; The call and the numbers come from the engine that built this page, run on the same input as the plate above. The family is illustrative and has 1,801 speeds in its cycle. The position is the share of the way from vehicle L to vehicle H. Values are rounded to four places for display. The receipt hashes the unrounded numbers.
Runs on
- Browser
- Edge
- Node.js
- Python
- JVM
- .NET
- Excel
- Command line
- Container
Green surfaces are measured on every build of this site. Each must return the same receipt, bit for bit. The others are packaged targets that the build does not measure. How the platform works
Changes
When the rule moves, so does the engine
Publications that touch this regime, and the release that answered each.
-
Amendment to UN GTR No. 15 on the interpolation method
Shipped as WLTP 1.7, 8 days later