Brightway Flows 1.0
GitHub
Contents · Using the data

Docs / Using the data

On this page

Scoring a dataset two ways

Take one ecoinvent dataset — electricity production, wind, >3MW turbine, onshore in Sweden, one kilowatt-hour — and ask what it is worth under EF. There are two ways to answer.

The first is the vendor's own: brightway, with ecoinvent's own elementary flows and the factors ecoinvent ships in its LCIA implementation file. For ecoinvent 3.8 that file carries EF v3.0, because that is the method 3.8 shipped with; for 3.12 it carries EF v3.1.

The second is this list's: the same inventory — the same flows, the same amounts — but every ecoinvent flow first mapped onto its consensus flow, and the factor applied being the one this list publishes under its own name.

For that wind activity the two answers agreed on the inventory exactly and disagreed on three categories: water use 434 times too high, fossil resource use 28 times too low, freshwater ecotoxicity 2.3 times too high. Finding out why took a contribution analysis run by hand on each side, which is what named the flows — four fossil fuels whose factor had been imported as 1.0, uranium with no factor at all, and water counted twice, once as withdrawal less return and once as vapour.

The score comparison does that for five hundred datasets at once, and then ranks the flows by how much score they move.

What is compared

The vendor's side is a file written by brightway — see running the exporter. It holds a seeded sample of a release's datasets; for each one its cumulative inventory per unit of reference product, by the vendor's own flow identifiers; the factors the vendor's tooling applied, once per category and flow; and the scores. The list refuses a file whose scores are not exactly its inventory times its factors, so the factors in the file are provably the ones the scores used.

compare-scores then re-scores every dataset our way. A flow of the inventory is looked up in the merge's record of where that vendor's rows went; if the consensus flow it reached is measured in another unit, the conversion the merge recorded is applied to the amount; and this list's own factor for that flow under that category is multiplied in.

Why two numbers differ

Because the inventory is the same on both sides, a difference for one dataset under one category is the sum of differences for single flows, and each of those is one of six things:

Reason What happened to the flow
agree It mapped, both sides have a factor, and the two contributions agree within 2%
factor differs Both sides have a factor and they do not agree
no consensus factor It mapped, the vendor has a factor, this list does not
unmapped flow The vendor's flow reached no consensus flow at all
unit crossing unconverted It mapped onto a flow in another unit and the merge recorded no conversion
only consensus factor This list has a factor and the vendor does not

That list is closed, and it is the report. Scores in the review application shows, per release, a row per category with how many datasets agree, how many are within 2×, and the median of ours over theirs; behind each category the vendor's flows ranked by how much of that category's total they move, with the reason; and behind any dataset, every category both ways and every flow under one of them.

Reading a release scored with an earlier method

ecoinvent 3.8 is scored with EF v3.0, the method it ships. This list's factors are EF 3.1, so part of every gap on that release is the revision between the two rather than a defect of either side — biogenic climate change moved by a fifth between 3.0 and 3.1, and the three metals toxicity categories 3.0 scored separately were folded into inorganics in 3.1, which is why those three appear on the table as categories with no row of ours. A release scored with the same method version on both sides, as 3.12 is, has no such excuse: on it every gap is the flow mapping's or the factor's.

That makes the two releases read together. 3.8 says where the two sides differ; 3.12 says whether the difference is the method's revision or ours. A flow that disagrees on 3.8 and agrees on 3.12 is the JRC changing its mind between versions. A flow that disagrees on both is this list's to answer.

What the 3.8 comparison says

Three categories on that release are worth reading in full, because between them they show every shape a difference can take: a difference of vintage that belongs to neither side's method, a mapping this list stands behind, a gap in the method's own flow list, and a genuine revision.

Non-renewable energy resources

501 datasets, 247 of them agreeing within 2%, 252 in the 2× band and two a hundredfold out. Three flows account for every one of those gaps and no others.

Flow ecoinvent (EF v3.0) This list Share of the category
Oil, crude, in ground 42.3 MJ/kg 43.4 1.01%
Gas, natural, in ground 34.5 MJ/m³ 36.0 0.65%
Peat, horticulture 9.76 MJ/kg none 0.02%

A fourth, Gas, mine, off-gas, process, coal mining, was on that list until #774 gave it a factor; the same section explains why, and why it is not the same question as peat.

The first two are not a difference of method at all, and it is worth being precise about whose number is whose. The JRC's factor for a fossil energy carrier is 1.0 MJ per MJ under EF v3.0 and EF 3.1 alike — EUR 29600 §4.10 states it and the EF 3.1 data says the same — so the per-kilogram number is nobody's characterisation factor. It is the implementer's heating value, and ecoinvent revised theirs at database release 3.9 following Meili et al. (2021): crude oil 42.3 → 43.4 MJ/kg, natural gas 34.5 → 36 MJ/m³.

The table above measures a build that predates #777. At the time this list recorded one heating value per substance and applied it to every release it merged (#671), and it was the newer one — so on 3.8 it converted with 3.9-era values while ecoinvent had scored with the values 3.8 shipped, and the 2× band on 3.8 was entirely oil and gas chains, at +2.6% and +4.3%. A conversion factor now carries the releases it was checked against, and 3.8 converts with 3.8's own numbers, so a rerun should put oil and gas in the agreeing band on both releases. The table stays as measured until somebody reruns the comparison and can state what it found.

Hard coal (18.01), brown coal (9.41) and uranium (560,000) were not revised, and agreed bit for bit on both releases before the change as after it.

The other two — mine off-gas and horticultural peat — are flows the ecoinvent Centre characterises and the JRC does not, and both numbers come from one rule of ecoinvent's rather than from two judgements. Their LCIA implementation report (v3.12, §6.5.1) lists both flows in Table 5 as non-renewable fossil energy carriers, gives their lower heating values in Table 6 — 36 MJ/Sm³ for mine off-gas, the same as natural gas, and 9.76 MJ/kg for peat — and says lower heating values "are implemented in methods assessing energy resources if no other CFs are given". So where EF is silent, ecoinvent fills in the calorific value.

The JRC is silent for a reason that is about its flow list rather than about either substance. EUR 29600 §4.10 states the rule as a rule about a bucket: following van Oers et al. (2002), "a separate impact category for fossil fuels is defined, based on their similar function as energy carriers. CFs for fossil fuels are expressed as MJ/MJ, i.e. the CF is equal to 1 for all fossil resources." The bucket is EF's Non-renewable energy resources from ground, whose flows are all in megajoules, and the six characterised flows are exactly its members. Neither of these two is in it: EF files mine off-gas as a non-renewable material resource from ground, in standard cubic metres, and horticultural peat as a renewable material resource from the biosphere, in kilograms.

That silence means opposite things for the two, and both have now been answered in opposite directions. Mine off-gas is coal-seam methane and a fossil resource by any reading of the model; it falls between EF's two resource buckets — the energy rule wants megajoules and it is in standard cubic metres, and Resource use, minerals and metals prices crustal elements in kg Sb-eq and has nothing to price a methane flow from — so EF lists it and characterises it nowhere. That is a gap rather than a decision, and 36 MJ/Sm³ is the JRC's own rule arithmetic: 1.0 MJ per MJ, times the flow's heating value. A publish ruling adopts it (#774). Horticultural peat is 0.02% of the category and 98% of two datasets — market for peat and market for peat moss are the two hundredfold outliers — and it has been answered: EF ships a separate fuel peat, from the ground, in megajoules, at 1.0, and this flow is the other one. A decline in data/lcia-factor-rulings.json says so on the record (#772). What that costs is peat burned for electricity: ecoinvent ships one peat flow and uses it for both, so Irish peat-fired power scores 0.91× theirs here, and the answer to that is a fuel-peat row in the inventory rather than a fuel's factor on a growing medium.

One number in this section is worth reading twice. Giving mine off-gas its factor lowered how many 3.8 datasets agree within 2%, from 291 to 247, and that is not a regression. The mine-gas deficit ran the opposite way to the oil and gas heating-value surplus and was quietly cancelling part of it, so removing one error exposed the other; the mean ratio moved from 1.013 to 1.017, which is the oil-and-gas offset with nothing left masking it. The release where the vintage difference does not exist says what actually happened: on 3.12, scored with the same method and the same heating values on both sides, the category went from 495 of 500 datasets agreeing within 2% to 499 of 500, and its mean ratio from 0.9963 to 0.9999. Two releases are worth having for exactly this reason.

Marine eutrophication

428 datasets within 2%, 73 in the 2× band, and this list's score never above ecoinvent's — the lowest ratio is 0.752, and the difference is pure subtraction. One substance does all of it: ecoinvent's Nitrogen emitted to water, in four contexts, which EF v3.0 characterises at 1.0 kg N-eq/kg and this list does not characterise at all.

It is not characterised because ecoinvent labels that flow CAS 7727-37-9, which is dinitrogen, and N₂ dissolved in water does not eutrophy anything. The list does publish Nitrogen, Total (excluding N2) at 1.0 in all four of the same water contexts, which is what a total-nitrogen row should reach. The tell that this reading is the right one is that ecoinvent stopped: their EF 3.1 implementation gives the same four flows nothing, and on 3.12 the category has no disagreeing flow whatsoever. The datasets it moves on 3.8 are exactly the nitrogen chemistry — urea formaldehyde resin at 0.752, the NPK and ammonium nitrate markets, ammonia production — where wastewater denitrification puts N₂ in the water.

Human toxicity and ecotoxicity

Start with the control. On 3.12, with EF 3.1 on both sides, all nine toxicity categories agree on essentially every dataset: 500 of 500 identical for five of them, 496 or 497 for the rest. So everything below is the revision between EF v3.0 and EF 3.1, and none of it is the mapping.

EF v3.0 scores twelve toxicity categories and EF 3.1 scores nine, and the three that vanished are the metals ones. That has two consequences on the table, and only the first is obvious. The three metals rows have no counterpart and report nothing. The three surviving inorganics rows pair up by name and are not comparable either, because EF v3.0's inorganics excludes the metals and EF 3.1's includes them: nearly every flow moving ecotoxicity: freshwater, inorganics is reported as only consensus factor, and every one of them is a metal — strontium, chromium(VI), iron, aluminium, cadmium, barium, silver. The organics rows are the half of the split that survived unchanged, and they agree: human toxicity: carcinogenic, organics is identical on all 501 datasets, and ecotoxicity: freshwater, organics is within 2% on 390 of them.

So the aggregates are the only honest reading of toxicity on 3.8, and each is dominated by a handful of numbers the JRC revised:

  • ecotoxicity: freshwater — 336 of 501 datasets in the 10× band, ratios from 0.012 to 9.4. Aluminium(3+) is four-fifths of it on its own: 188,000 CTUe/kg to air under EF v3.0 against 2,002.7 under EF 3.1, a ninety-fourfold cut, repeated across seven compartments. Copper falls the same way (36,500 to 17.0); iron (134 to 2,109) and chromium(VI) (1,040 to 12,274) rise, which is what puts a few datasets above 1 rather than below it.
  • human toxicity: carcinogenic — two-fifths of the movement is chromium(III), which EF v3.0 gives 7.6e-05 CTUh/kg to air and EF 3.1 gives zero. EF 3.1 charges hexavalent chromium and not trivalent.
  • human toxicity: non-carcinogenic — a fifth of it is carbon monoxide, 1.08e-06 CTUh/kg under EF v3.0 and zero under EF 3.1, across three air compartments; chloride and chlorine are zeroed the same way.

What is left on 3.12, once the revision is out of the picture, is a handful of pesticides — fenpropimorph, mecoprop, lambda-cyhalothrin — where ecoinvent characterises a release to agricultural soil and this list has no factor, plus kresoxim-methyl, where a ruling takes the JRC's 134.73 over ecoinvent's 53,540 (EF publishes that substance twice under two EC numbers). Each is under a thousandth of its category.

What the first run said

On the build of 25 August 2026, over 500 datasets of ecoinvent 3.12 cutoff scored with EF 3.1 on both sides, 22 of 25 categories agreed within 2% on almost every dataset. Water use was twice ecoinvent's on nearly all of them — a median ratio of 2.00 over 462 datasets — and the two flows that moved it were Water, turbine use withdrawn and Water returned to water, at +2.4e11 and −2.4e11 over the sample: a withdrawal and its return, netting to almost nothing, that this list characterises and ecoinvent's own implementation leaves at zero. What was doubling the score was the flow both sides agreed on. Water to air carries 42.95 on both, and that is ecoinvent's way of counting consumption — what evaporates — while the withdrawals and returns are the JRC's way — what was taken and not given back. On a water-balanced dataset the two are the same cubic metres, and publishing both factors counted them twice. The ecoinvent number had reached this list as restated, because 42.95 stands bit for bit on every withdrawal of the category and that is what the identity twin looks for. A decline in data/lcia-factor-rulings.json now withholds it, and the median ratio is 1.00. That is the wind activity's water finding, for 460 datasets rather than one, and it is #726.

What is left on water use after the ruling is not systematic: irrigation, where the JRC's convention counts the withdrawal as consumed and ecoinvent's counts nothing because none of it leaves as vapour; wastewater treatment, where more is returned than withdrawn; and run-of-river hydro, whose return exceeds its turbine withdrawal by a little. Those are the two conventions differing on an unbalanced inventory, and the comparison names each one.

What it does not do

It does not apply a regional factor. An aggregate inventory has no place to apply one to, so only the factors stated for no particular place are used. And it does not make brightway a dependency of this list: the exporter runs under a brightway Python and the two share nothing but the file and the schema that describes it.

Keyboard

?
Show or hide this map
/
Focus search
Esc
Close