Waterschap Brabantse Delta · R&D-lab · research-artifact
machineGroupControl node[19], with
file-level grounding. The contribution claimed here is a combination of design
choices, not a first BEP-based controller (see §2).
Electricity demand is large and growing. World gross electricity generation nearly doubled between 2000 and 2024, from 15,279 TWh to 30,930 TWh[22] (Fig. 1). A related but distinct metric, world total electricity final consumption, reached 22,848 TWh in 2019[1] — lower than generation because it excludes transmission & distribution losses and power-sector own use — and demand has since kept climbing (IEA reports +4.3 % growth in 2024 and forecasts consumption above 29,000 TWh by 2026)[2]. Generation and final consumption are different quantities and are not mixed here.
Electric-motor-driven systems (EMDS) — pumps, fans and compressors chief among them — are the single largest electrical load on the planet: Waide & Brunner estimate EMDS at 43–46 % of all global electricity consumption, with around a quarter of that use savable cost-effectively — enough to “reduce total global electricity demand by about 10 %”[3]. Within that motor load, the same source resolves the demand by application (2006 base of 7,108 TWh/yr of global motor electricity): “compressors (32 %), mechanical movement (30 %), pumps (19 %) and fans (19 %)” — i.e. compressors 2,267, mechanical movement 2,167, pumps 1,344 and fans 1,330 TWh/yr[3]. CRC controls groups of rotating machines, and pumps (moving liquid) and compressors/blowers (moving gas) are the same control problem; together they are 51 % of motor electricity (19 % + 32 %), which is ≈22–23 % of all electricity (0.51 × 43–46 % = 21.9–23.5 % — derived) — the largest identifiable electrical load class on the planet. Consistent with this, pumps specifically are commonly said by industry to account for “over 10 % of world energy consumption”[4], a figure we carry only as an attributed industry claim, since we could not confirm it against a primary source.
The compressor side has its own measured scope. In the European Union, compressed-air systems alone use >80 TWh/yr, about 10 % of EU industrial electricity[23]; in the United States, large (>25 hp) plus small compressors use roughly 27–32 TWh/yr, about 6 % of US industrial motor electricity[24] — different regions and scopes, so these two shares are not comparable and are not averaged. Notably, >25 hp units are under 1 % of compressors sold yet draw ~80 % of compressed-air electricity[24]: the energy is concentrated in a small number of large installations. As for the installed base (“how many machines”), no credible global count exists specifically for pumps or compressors; the global electric-motor stock brackets the order of magnitude at ≈2.23 billion units (~2.0 billion <0.75 kW; ~230 million medium 0.75–375 kW general-purpose industrial — the segment where pump and compressor groups live; ~0.6 million >375 kW)[3]; regionally, the EU installed pump stock was ~17 million units (2005) and US annual sales run ~12.1 million pumps and ~1.3 million compressors per year[3].
The savings that better control and selection can unlock are substantial and well documented. The European Commission's ecodesign regulation for water pumps records a “total cost-effective potential for improving the energy efficiency of these pumping systems by approximately 20 % to 30 %”, on an EU water-pump baseline of 109 TWh (2005) projected to rise to 136 TWh by 2020[5]; the US DOE Motor Market Assessment, as restated by the Hydraulic Institute, puts the average net saving from pump-system optimization at ~20 %, with up to 75 % achievable in individual systems[6].
The relevance is local as well as global. Waterschap Brabantse Delta (WBD) consumed, in 2024, 44.21 GWh of process electricity across its 17 wastewater treatment plants (RWZIs) and 9.35 GWh in its transport pumping stations (gemalen) to move 194.8 Mm³ of water[21] (Fig. 2). The gemalen are precisely the parallel variable-speed pump groups this paper is about. At these scales a single-digit-percent control gain is a GWh-scale quantity, worth pursuing on its own terms.
The baseline CRC argues against is classic cascade / staged control: pumps are brought on and off along a preset priority order and each running unit is scaled between a fixed minimum and maximum speed until a single process demand (pressure, level or flow) is met. This is the control philosophy documented in the standard industry guide, Europump & the Hydraulic Institute's Variable Speed Pumping[9]. Its weaknesses are structural: it does not place any unit at its BEP, it produces a visible efficiency “step” at each machine switch, and a benchmark tuned at one system pressure degrades when the pressure moves.
BEP-tracking parallel-pump control is not new, and this paper does not claim it as such. Viholainen et al. proposed monitoring each unit's operating point from frequency-converter data and switching the running combination to keep every pump near its BEP[10]. Koor et al. predicted the optimal number of identical pumps to run[11] and then generalized to the operating-point split among non-identical pumps to maximize combined efficiency[12]. Olszewski used a genetic algorithm to select and experimentally validate the optimal pump combination and speeds at each demand point[13]. Qiu & Ouyang demonstrated real-time BEP-tracking with pump-count/switching decisions against a differential-pressure-setpoint baseline[14], and Housh & Salomons show the field is still active with practical, station-local, model-based strategies[15]. The marginal-cost refinement CRC uses to distribute the residual demand is the equal-incremental-cost principle of power-systems economic dispatch, whose canonical root is Wood & Wollenberg[16].
The same problem — and the same staged/cascade baseline — recurs on the gas side. The US DOE compressed-air sourcebook devotes a “Multiple Compressor Control” section to trim-compressor selection, sequencing and network master controls for banks of compressors serving one air demand[24]: the control philosophy is identical to pump staging, so both the problem and CRC's combination-based approach generalize across the machine classes. The sourcebook reports 20–50 % whole-system savings potential (30–60 % under the Compressed Air Challenge), of which sequencing is only one component[24] — we do not attribute those figures to parallel control alone.
positioning CRC was conceived independently in 2022 and set down in an unpublished white paper[17]; the author was not aware of the works above at the time. The claimed contribution is therefore not priority over any of them, but the specific combination of: (i) an explicit three-law priority hierarchy (demand ≥ stability ≥ efficiency) as the controller's governing contract; (ii) exhaustive enumeration of feasible pump combinations at the momentary operating point on every demand change; (iii) a marginal-cost refinement of the per-pump split; (iv) a stability-preserving rendezvous execution layer so that combination changes do not disturb the process; and (v) a working, open-source industrial implementation with rig validation and a measured-curve feedback path. Where this paper uses the words “first” or quotes the 2022 paper's word “novel”, it is against this qualification.
The 2022 white paper[17] frames the problem exactly as §2 does: cascade control “depend[s] on the original design parameters assumptions and we don't take advantage of the actual site conditions.” It then proposes what it calls a “novel approach” (qualified in §2): control is “recalculated each demand change and then looks for the most optimal solution by combining the best efficiency points (BEP) of all available machines on a certain process demand,” evaluated at the momentary system pressure rather than a design pressure.
The concept is governed by three laws, stated here faithfully from the white paper[17]:
| # | Law | Statement |
|---|---|---|
| 1 | Process demand | The output flow shall equal the demand flow whenever this is mechanically / physically possible. |
| 2 | Process stability | Stability shall be safeguarded by continuously evaluating the right moment to add or remove a machine, without conflicting with the first law. |
| 3 | Energy efficiency | Energy efficiency is kept as high as physically possible, as long as this does not conflict with the first and second laws. |
Operationally: on each demand change the controller compares “all the possible combinations we can make on that moment to obtain a certain flow,” picks the most efficient feasible one under the three laws, and — crucially — does so at the pressure actually present, because “we need the variable pressure in order to precisely predict the flow at a certain speed.” The paper also anticipates a “self-learning part” (feeding measurements back to correct the theoretical curves), which it deferred to a later paper; §6 documents how that feedback path is realised in EVOLV.
The 2022 white paper's introductory energy figures contain two errors that the author corrects here.
erratum 1 — unit slip The white paper states that pumps and compressors “use about 20 % of the world's energy production … Anno 2019 this accounts for approx. 5.2 TWh (‘5,200,000,000,000 kWh’).” The two figures are inconsistent: 5,200,000,000,000 kWh is 5,200 TWh, not 5.2 TWh — a factor-1000 unit slip. On the verified basis, 20 % of 2019 world electricity final consumption (22,848 TWh[1]) is ≈4,570 TWh. The white paper's written-out 5,200 TWh is of generation-basis magnitude (world gross generation in 2019 was higher than final consumption), so the intent was directionally right but stated on the wrong basis and with the wrong prefix. The paper's cited sources [1]–[4] were never attached to the document and could not be reconstructed; they are replaced here by the verified reference list.
erratum 2 — household equivalence The white paper illustrated a hypothetical 10 % saving as “520,000,000,000 kWh … the equivalent of 185,714,285 households” using ~2,800 kWh/household. Reworked on the verified basis and labelled illustrative: a hypothetical 10 % saving on ~4,570 TWh is ~457 TWh/yr, which at the current Dutch average household electricity use of 1,727 kWh/yr (2024, CBS)[7] is roughly the annual electricity of ~265 million average Dutch households. The 10 % figure itself is not a CRC-measured result; it corresponds to the verified cost-effective EMDS-savings ceiling of “about 10 % of total global electricity demand”[3].
The name CRC stands for “Carbon Reducing Controller.” As a single illustrative local line (not an achieved saving): at the Dutch production-based grid factor of 0.20 kg CO₂/kWh (2024, CBS)[8], a hypothetical 10 % reduction on WBD's ~9.35 GWh of transport-pumping electricity (0.935 GWh) would correspond to ~187 tonnes CO₂/yr, or the electricity of ~540 average Dutch households — figures given only to fix the order of magnitude, not as a claim of realised savings.
To test the concept against a smart cascade, a pilot rig was built (white paper, Attachment 1): three DAB CPAE-80-15-S-PWM circulation pumps in parallel, each with a Grundfos VFS-2-40 flow sensor and an Eastron SDM120 power meter, a Grundfos VFS-5-100 total-flow sensor, a pressure sensor, and a Revolution Pi (Core/AIO/DIO) as controller; a 70 L basin; system pressure 150–450 mbar, set purely by the components' pressure drop (no valves were operated during the runs)[17]. Two runs were logged at ~1 Hz on 2022-07-11: a smart-cascade run and a CRC run. The raw data were recovered and re-analysed in 2026; the full exploration lives in the data artifact[18], and only compact figures are reproduced here.
Because no differential pressure was logged, the comparison uses a proxy efficiency — flow per unit electrical power — which is a fair comparator between the two algorithms on the same rig and system curve, but is not hydraulic efficiency. This distinction is load-bearing and is respected throughout: the 2022 numbers are proxy (l/min)/W; the hydraulic η of §6 is a different quantity.
| εproxy | proxy efficiency (flow per watt) | (l/min)/W | defined for the 2022 comparison[18] |
| Q | measured total flow | l/min | Grundfos VFS sensors[17] |
| P | measured electrical power | W | Eastron SDM120[17] |
Both runs were collapsed onto an accumulated-control axis (steady state per setpoint) and the per-machine and total proxy efficiencies computed. A derived “cascade-without-step” series (machine-switch step removed) is shown alongside, matching the white paper's smart-cascade figure. Series lengths after cleaning: 266 cascade points, 148 cascade-without-step points, 104 CRC points (running-state points with ε > 0)[18].
Binning the measured total flow (0–75 l/min) and comparing average proxy efficiency per bin (Fig. 4): CRC is ahead in 11 of the 14 populated bins. The mean of the per-bin ratio (CRC/cascade − 1) across the 14 bins is +26.0 %; the best bin is +97.2 % at 30 l/min and the worst is −7.2 % at 16 l/min. Averaged per machine, CRC reaches 0.859 vs the cascade's 0.544 (l/min)/W — a ratio of 1.58×[18].
The three negative bins (0, 16 and 70 l/min) sit at the extreme edges of the flow range, where both algorithms run at essentially the same one-pump operating point. The white paper's own caveat applies: no waiting/averaging window was built in per setpoint, so these edge bins are within measurement error and the error is present for both algorithms.
Stated plainly, the 2022 experiment is a single, indicative study, not a definitive benchmark: (a) no ΔP was logged, so the metric is a flow-per-watt proxy, not hydraulic efficiency; (b) there was no per-setpoint averaging window, which is the direct cause of the negative edge bins; (c) it is a single rig with three nominally identical low-cost circulation pumps; and (d) the smart-cascade baseline was implemented by the same author as CRC. The direction and magnitude of the advantage are consistent across bins and across the two summary statistics (binned and per-machine), but the numbers should be read as evidence of a real effect on this rig, not as a transferable percentage.
machineGroupControlOn joining WBD, the author open-sourced the concept and implemented it in the EVOLV
machineGroupControl (MGC) node — an S88 Unit-level orchestrator that
turns one operator demand (flow or %) into per-pump flow setpoints and start/stop
sequences for its rotatingMachine children[19].
All line references below are to the analysed source
(git.wbd-rd.nl/RnD/machineGroupControl @ d11d749afeff)[20];
a narrative walkthrough is the MGC reference-implementation
artifact[19].
The node is event-driven: outputs are pushed on the domain's output-changed
event rather than a fixed control tick, and a 1 s wall-clock interval drives only the
movement executor and stops itself when nothing is pending
(src/nodeClass.js:12-13; src/specificClass.js:119, 490-506). The
default optimizer is BEP-Gravitation-Directional
(src/specificClass.js:405).
| CRC law | Enforced by | Where |
|---|---|---|
| 1 — demand | Demand clamped onto the group flow envelope; feasibility filters keep only combinations that can span the demand within the power cap. | specificClass.js:530-554; combinatorics/pumpCombinations.js:75-93 |
| 2 — stability | Latest-wins demand gate; rendezvous scheduling so all pumps land on their setpoint at the same instant t*; a movement gate that parks a new demand while the group is still converging (only an emergency pre-empts). | dispatch/demandDispatcher.js; movement/movementScheduler.js:159-166; specificClass.js:315-328, 575-583 |
| 3 — efficiency | BEP-Gravitation-Directional optimizer: start every pump at its BEP, redistribute the deficit by curve slope, marginal-cost refine, then select the lowest-total-power combination with a BEP-deviation tiebreak. | optimizer/bepGravitation.js |
A percentage demand is interpolated linearly onto the group's dynamic flow envelope; a
flow demand in another unit is unit-converted; a negative demand stops all machines
(src/specificClass.js:530-554). The envelope minimum is the minimum of the
per-pump minimum flows and the maximum is the sum of the per-pump maxima
(totals/totalsCalculator.js:72-104).
| Qd | demand flow (canonical) | m³/s | computed[20] |
| p | operator demand percentage | % | input, 0–100 |
| Qmin | min over pumps of per-pump min flow | m³/s | totalsCalculator.js:72-104 |
| Qmax | sum over pumps of per-pump max flow | m³/s | totalsCalculator.js:72-104 |
The optimizer first estimates each pump's best-efficiency flow from its normalized
“cognition” NCog (a 0–1 curve descriptor), placed within the pump's own
flow span (optimizer/bepGravitation.js:136-137).
| QBEP,i | best-efficiency flow of pump i | m³/s | bepGravitation.js:136-137 |
| Qmin,i | pump i minimum flow | m³/s | pump envelope |
| spani | Qmax,i − Qmin,i | m³/s | pump envelope |
| NCog̃i | normalized cognition (0–1) | — | curve descriptor[19] |
Local curve slopes dP/dQ around each BEP are estimated by finite differences with a probe
step deliberately scaled to the pump's span (a fixed step degraded the local slope to a
global average — bepGravitation.js:11-15), and averaged into a curvature-like
weight αi (bepGravitation.js:16-43).
| δ | finite-difference probe step | m³/s | bepGravitation.js:11-15 |
| span | pump flow span | m³/s | pump envelope |
| slopeL, slopeR | dP/dQ left/right of BEP | Pa·s/m³ | finite difference[19] |
| αi | curvature weight of pump i | Pa·s/m³ | bepGravitation.js:16-43 |
Every pump starts at its BEP; the residual demand Δ is then redistributed with
weights inversely proportional to slope, so flatter-curve pumps (which pay less efficiency
penalty per extra unit of flow) absorb more of it — directionally in the Directional variant
(bepGravitation.js:47-83).
| Δ | residual demand after all pumps at BEP | m³/s | bepGravitation.js:47-83 |
| wi | redistribution weight of pump i | m³/(Pa·s) | bepGravitation.js:47-83 |
| slopei | dP/dQ of pump i near its operating point | Pa·s/m³ | finite difference |
A bounded marginal-cost pass (max 50 iterations) then shifts a small quantum
mcΔ from the pump with the highest dP/dQ to the one with the lowest, stopping when the
relative gap falls below 0.1 % or a swap no longer lowers total power
(bepGravitation.js:87-116). This is the equal-incremental-cost criterion of
economic dispatch[16] applied to pump curves:
at the optimum, marginal cost dP/dQ is equalised across running pumps.
| mcΔ | marginal-cost transfer quantum | m³/s | bepGravitation.js:87 |
| Qd | demand flow | m³/s | §5.1 |
| n | number of running pumps in the combination | — | combination size |
Across all feasible combinations, the optimizer selects the one with the lowest total
power; ties are broken by the smallest BEP-deviation, a slope-weighted sum of squared
departures from each pump's BEP (bepGravitation.js:170-186).
| Pi | predicted shaft/electrical power of pump i | W | pump curve[19] |
| ΔQi | Qi − QBEP,i (departure from BEP) | m³/s | selection metric |
| αi | curvature weight (above) | Pa·s/m³ | bepGravitation.js:170-186 |
Selecting a better combination is worthless if switching to it disturbs the process, so
MGC schedules the transition as a rendezvous: every pump's move is timed so they
all arrive at their new setpoints at the same instant t*, the latest of the individual
arrival times, and a slower-starting pump does not “leak” minimum flow into the
group total early (movement/movementScheduler.js:159-211). During a transition
the group reports movementState = working, and an incoming demand is parked
(latest wins) until the group is ready again — only a stop or a pressure
emergency may pre-empt (specificClass.js:315-328, 575-583). This is the
concrete realisation of the stability law: efficiency-driven recombination never overrides
demand delivery or process stability.
| t* | rendezvous time (common arrival instant) | s | movementScheduler.js:159-166 |
| etai | estimated time for pump i to reach its target (ramp + any start-up ladder) | s | moveTrajectory.js:46-80 |
The 2022 proxy metric existed only because ΔP was not logged. The 2026 rig closes that gap. A KSB Calio 40-80 pump was swept over 1617 operating points and reduced to a 40-key curve validated at ~1.4 % prediction error, giving a control-%-to-flow/power model at the momentary pressure[18]. With flow, ΔP and power all available, MGC computes a true hydraulic efficiency:
| η | hydraulic efficiency (0–1) | — | specificClass.js:424-432 |
| Q | flow at the group operating point | m³/s | measured / predicted |
| ΔP | header differential pressure | Pa | groupOps/groupOperatingPoint.js:48-97 |
| P | electrical/shaft power | W | measured / predicted |
The affinity laws let a single measured curve be reused across speeds by collapsing flow onto a speed-normalized coordinate, so one sweep parameterises the whole operating envelope:
| ϕ | speed-collapsed curve function | — | affinity scaling[18] |
| N | pump rotational speed (or control fraction) | — | drive command |
| ΔP | differential pressure | Pa | measured |
The measured-curve feedback path is the “self-learning part” the 2022 white paper deferred to a later paper[17]: sweep results and live telemetry (via FROST) update the per-pump curves the optimizer reads, so the controller tracks real, degrading hardware rather than a fixed datasheet. This paper documents the mechanism; quantified learning results are future work.
explicit gap A side-by-side CRC-vs-cascade re-run on the 2026 rig with the true η metric has not been performed. The 2022 experiment (§4) remains the only head-to-head evidence to date; the 2026 work establishes the measurement basis on which a proper re-run can be built, but the 2022 proxy numbers and any future 2026 hydraulic numbers must never be conflated.
What the 2022 numbers do support: on a real three-pump rig under dynamic pressure, combination-based BEP control delivered a large and consistent flow-per-watt advantage over a smart cascade across most of the operating range, with the advantage concentrated in the mid-range (best +97.2 % at 30 l/min) where the cascade is forced to run a single pump well off its BEP while CRC can split the load across two units near theirs. What they do not support: a transferable percentage. The metric is a proxy, the rig is one system, the baseline was author-built, and edge bins are within measurement noise. The honest headline is “a real, large effect on this rig,” not “+26 % everywhere.”
Generalization caveats compound: the advantage of any combination-selection scheme depends entirely on the available machine set — how much the pumps' efficiency curves overlap, how non-identical they are, and how wide the demand histogram is. A group of well-overlapping, complementary pumps offers more room to recombine than a group of identical units, which is exactly the point of the prior-art on non-identical pumps[12].
author's hypothesis The white paper argues that control which is independent of machine brand and size “can pave the way to select different machines for the job” — a range of complementary pumps rather than one very efficient unit — and cites a possible ~30 % selection-side saving. The magnitude here is the author's 2022 hypothesis, not a measured result; the sourced anchor for “selection and control together matter” is the 20–30 % cost-effective pump-system potential in EU Reg. 547/2012[5] and the DOE/HI ~20 % average[6].
CRC combines a three-law priority hierarchy, momentary-operating-point combination
enumeration, marginal-cost load allocation, and a rendezvous execution layer into a single
control concept, now implemented and open-sourced in the EVOLV
machineGroupControl node. The 2022 pilot gives indicative but genuine evidence
of a large flow-per-watt advantage over smart cascade control; the 2026 rig supplies the
measurement basis (true hydraulic η from validated, self-updating curves) that the 2022
study lacked.
How much could combination/BEP control save if applied wherever it applies? The following is an order-of-magnitude envelope, not a forecast: every factor is labelled as either sourced or an explicit assumption, and the estimate is deliberately built to bound both a pessimistic and an optimistic corner of the assumption space.
| S | global annual electricity saving from combination/BEP control | TWh/yr | derived (this scenario) |
| Epc | world electricity used by pumps + compressors (2024 basis) | TWh/yr | derived |
| Eel | world electricity, consumption basis, 2024 | TWh/yr | derived[22][1] |
| fEMDS | motor-systems share of electricity | — | source[3] |
| fpc | pumps + compressors share of motor electricity | — | source[3] |
| fpar | fraction of Epc in multi-machine installations serving one demand | — | author assumption |
| sctl | energy saving from combination/BEP control in those installations | — | anchored assumption[25][5][18] |
| Factor | Value(s) | Status & basis |
|---|---|---|
| Eel (world electricity, consumption basis, 2024) | ≈ 26,300 TWh | Derived estimate: 30,930 TWh gross generation 2024[22] × the 2019 final-consumption/generation ratio 22,848/26,832 = 0.851[1][22] |
| fEMDS (motor-systems share) | 43–46 % | Source[3] |
| fpc (pumps + compressors share of motor electricity) | 51 % (19 % + 32 %) | Source[3] |
| → Epc (pumps + compressors electricity, 2024 terms) | ≈ 5,770–6,170 TWh/yr | Derived from the three factors above |
| fpar (fraction of Epc in multi-machine, single-demand installations) | worst 10 % · best 40 % | Author assumption — no published statistic exists (searched 2026-07-17). Plausibility only: energy is concentrated in large installations[24] and large installations are typically multi-unit (N+1 redundancy); the number itself is unsourced. |
| sctl (saving from combination/BEP control in those installations) | worst 5 % · best 20 % | Assumption, anchored to: DOE worked parallel-pump example 23 %[25]; EU 20–30 % whole-system potential[5]; the CRC 2022 rig's +26 % proxy advantage ≈ 20.6 % energy-equivalent (1 − 1/1.26)[18]. The worst case is set deliberately below all three anchors. |
Evaluating the two corners (Eel ≈ 26,300 TWh throughout):
S is linear in both assumed factors, so a reader who prefers different values can rescale directly: S ≈ 6,000 TWh × fpar × sctl (taking the mid-range Epc ≈ 6,000 TWh). The point is not the precise figure but the floor: even the pessimistic corner of the assumption space is tens of TWh per year — country-scale energy — which is what justifies the research programme (the named 2026-rig head-to-head chief among it) rather than treating combination control as a rounding error.
scenario status This whole subsection is a labelled-assumption envelope, not a measured or forecast saving. Two of its factors (fpar, sctl) are assumptions; fpar in particular has no published source and is the largest uncertainty. No CO₂ figure is attached, because we have no verified world-average grid factor. The envelope should be read as an argument for the order of magnitude, and for doing the head-to-head measurement that would replace sctl with data.
Future work, in priority order: (1) a 2026-rig head-to-head CRC-vs-cascade re-run using the hydraulic-η metric; (2) a per-setpoint averaging protocol to remove the edge-bin measurement error; (3) ΔP-instrumented efficiency throughout; (4) field deployment on WBD transport gemalen, where the load is GWh-scale (Fig. 2); (5) quantification of the learned-versus-theoretical curve improvement — the self-learning result the 2022 paper promised; and (6) sharpening the global scenario's parallel-fraction (fpar) with real installed-base surveys.
machineGroupControl node,
git.wbd-rd.nl/RnD/machineGroupControl (+ EVOLV super-repo), analysed at
commit d11d749afeff. accessed 2026-07-17owid-energy-data.csv, country = World; variables
electricity_generation and primary_energy_consumption). World
gross electricity generation 15,279 TWh (2000) → 26,832 TWh (2019) →
30,930 TWh (2024). Upstream: Ember Yearly Electricity Data (2026) + Energy Institute
Statistical Review of World Energy (2025); EIA + Energy Institute for primary energy.
CSV ↗
fetched 2026-07-17machineGroupControl node. Sole author and inventor:
R. de Ren.git.wbd-rd.nl/RnD/machineGroupControl @ d11d749afeff; 2022 data and full
exploration in [D][18].