-
Notifications
You must be signed in to change notification settings - Fork 0
/
index-template.html
198 lines (195 loc) · 17.3 KB
/
index-template.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
<!DOCTYPE html>
<html lang="en">
<head>
<title>model.energy/future</title>
<meta charset="utf-8">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.rawgit.com/afeld/bootstrap-toc/v1.0.1/dist/bootstrap-toc.min.css"/>
<link rel="stylesheet" type="text/css" href="./nowcast.css">
</head>
<body id="page-top">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="#page-top">model.energy/future</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#intro">Introduction</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#explore">Explore scenarios</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#learn">What we can learn</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#warnings">Warnings</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#links">Similar websites</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#acknowledgements">Contributors & acknowledgements</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#licence">Software & data licence</a>
</li>
</ul>
</div>
</div>
</nav>
<header class="bg-primary text-white">
<div class="container text-center">
<h1>model.energy/future: Future power systems with today's weather</h1>
</div>
</header>
<div class="container-fluid">
<div class="row">
<! -- next three lines just provide some padding on left in case want to insert TOC -->
<div class="col-md-2 toc-col">
<nav id="toc" class="sticky-top"></nav>
</div>
<div class="col-md-12 col-lg-9">
<div class="container-like">
<section id="intro">
<h2>Introduction</h2>
<p>This website simulates how a future fully-renewable German power system
would behave with today's demand and weather. Here is the actual wind and solar generation from the past 10 days in Germany:</p>
<p><img class="wide" src="{{results_dir}}/today/{{days_fn[:-11]}}-today.png" /></p>
<p>In the scenarios below the wind and solar generation is scaled up to
projected capacities for a fully renewable system.</p>
<p>The feed-in of wind, solar, existing hydroelectricity, batteries,
hydrogen storage and flexible demand is optimised to minimise costs. <b>The model can only see 24 hours ahead.</b> The long-term hydrogen
storage is dispatched assuming a constant hydrogen value (e.g. 90 €/MWh<sub>LHV</sub>).</p>
<p><b>Warning:</b> This website is a thought-experiment for educational purposes, not a forecast. Please see <a href="#warnings">all other warnings</a>.</p>
<p>Currently the website only works for Germany as an island system. <a href="https://github.com/PyPSA/nowcast/issues">Additional features</a> will follow soon!</p>
<p>You may also be interested in our <b>sister websites</b>: <a href="https://model.energy/">model.energy for simulating baseload renewable electricity anywhere in the world</a>, <a href="https://model.energy/products/">model.energy for green hydrogen-derived products</a> and an <a href="https://model.energy/scenarios/">interface to run the detailed European model PyPSA-Eur</a>.</p>
</section>
<section id="explore">
<h2>Explore scenarios</h2>
<p>Click on scenario for full details.</p>
<ul>
{% for scenario in scenario_order %}
<li>
<a href="html/{{scenario}}.html">{{ scenarios[scenario]["name"] }}</a> ({{ scenarios[scenario]["description"] }})
<a href="html/{{scenario}}.html"><img class="wide" src="{{results_dir}}/{{scenario}}/{{days_fn}}" /></a>
</li>
{% endfor %}
</ul>
</section>
<section id="learn">
<h2>What can we learn?</h2>
<p>Despite the <a href="#warnings">many limitations</a> of these simulations, here are a few things we can learn (not an exhaustive list - also note that the model results depend strongly on input assumptions):</p>
<ul>
<li>Systems dominated by wind and solar can meet demand in all hours if there is sufficient short- and long-term storage.</li>
<li>Wind is very helpful in high latitudes to get through the winter periods when the sun shines less.
</li>
<li>There are multi-day periods with low wind and solar output. To bridge these, batteries, pumped hydroelectricity and short-term demand-side management are too expensive. Longer-term storage (in this example: hydrogen) can help despite the high losses, since it is used infrequently.</li>
<li>Foresight of 24 hours is sufficient to dispatch the system. Long-term storage can be dispatched using heuristics for the value of hydrogen. This is similar to how water values are used to dispatch hydroelectricity-dominated systems today. See the 2024 preprint <a href="https://arxiv.org/abs/2407.21409">Price formation without fuel costs: the interaction of elastic demand with storage bidding</a> for more details on price formation and the dispatch of long-term storage.</li>
<li>Prices are often set by the value of hydrogen, both when hydrogen turbines are price-setting as supply and when hydrogen electrolysers are price-setting as demand.</li>
<li>Prices drop to zero in rare situations when wind and solar supply exceeds all flexible demand.</li>
<li>Market prices are more volatile than prices today on a day-to-day basis, but also don't behave radically differently. Prices in this systems do not depend on world markets for fossil fuels.</li>
<li>While the whole system can recover most of its costs from the market prices, it is hard for the peaking hydrogen turbines to recover their costs without some load shedding or a generator of last resort (e.g. based on imported fuel). This is the same situation as in conventional power systems, i.e. the missing money problem.</li>
</ul>
</section>
<section id="technical">
<h2>Technical details</h2>
<p>The model is updated once a day to take account of the latest day's data.</p>
<p>The model has been run from 2015 up until the present day, one day at a time to preserve the limited 24-hour-ahead foresight.</p>
<p>Today's demand time series are based on the network load (Netzlast) from <a href="https://www.smard.de/home">SMARD</a>. This time series is then corrected upwards based on yearly data from <a href="https://ag-energiebilanzen.de/daten-und-fakten/zusatzinformationen/">AG Energiebilanzen e.V.</a> so that it equals the sum of net generation and imports minus exports.</p>
<p>For the solar PV, wind onshore, wind offshore and hydroelectric generation, the generation time series are taken from <a href="https://www.smard.de/home">SMARD</a>. Since they don't reflect all generators (particularly for hydroelectricity, but also for solar PV), they are corrected by yearly correction factors based on the net generation statistics from <a href="https://ag-energiebilanzen.de/daten-und-fakten/zusatzinformationen/">AG Energiebilanzen e.V.</a>. For the current year, the previous year's correction factor is used. You can check out the <a href="./correction_factors.csv">correction factors</a>.</p>
<p>This correction scheme for load and generation follows the <a href="https://www.agora-energiewende.org/fileadmin/Projekte/Agorameter/2023-10-01_Hintergrunddokumentation_Agorameter_v13_EN.pdf">Agorameter</a>.</p>
<p>The time series are then scaled down to per unit time series using the historical capacities reported by <a href="https://www.energy-charts.info/">energy-charts</a>, before being scaled back up to their projected capacities.</p>
<p>The heat demand and air-sourced heat pump coefficient of performance data are based on temperature time series from <a href="https://open-meteo.com/">Open-Meteo</a>. Temperature time series are downloaded for the capital of each German state and then a population-weighted mean is taken.</p>
<p>Space heat demand time series are built using the daily mean temperature. The space heat demand is only present below a mean daily temperature of 15 Celsius and linearly increases below this temperature. The heat demand is then given an hourly profile following a typical profile from BDEW. Water heat demand is assumed to be constant.</p>
<p>The hourly coefficient of performance for air-sourced heat pumps is derived assuming an average supply temperature of 45 Celsius and the curve from <a href="https://doi.org/10.1039/C2EE22653G">Staffell et al (2012)</a>. The coefficient of performance varies from 2 on cold days to 5 on warm days, with an average of 3.</p>
<p>A small heat storage is modelled to mimic either the thermal inertia in buildings or a small water tank thermal energy storage. This means the heat pump can adapt its demand somewhat to electricity prices.</p>
<p>In the default setting, battery electric vehicles are only allowed to charge between 1900 and 0700. Within this time they charge based on the electricity price.</p>
<p>Hydrogen demand is assumed to be constant in time.</p>
<p>See the 2024 preprint <a href="https://arxiv.org/abs/2407.21409">Price formation without fuel costs: the interaction of elastic demand with storage bidding</a> for more details on price formation and the dispatch of long-term storage.</p>
<p>Planned additional features are listed on the <a href="https://github.com/PyPSA/nowcast/issues">GitHub issue tracker</a>.</p>
</section>
<section id="warnings">
<h2>Warnings</h2>
<p>Currently the website has many limitations. It is only a prototype; it will improve over time (see <a href="https://github.com/PyPSA/nowcast/issues">planned features</a>). Important limitations and their effects include:</p>
<ul>
<li>Germany is currently treated as an island; no exchanges of electricity or hydrogen are allowed with other countries. Relaxing this condition would <a href="https://arxiv.org/abs/1704.05492">lower costs by 10-25%</a>.</li>
<li>Network constraints and redispatch costs inside Germany are ignored. Including network bottlenecks would raise costs.</li>
<li>Power storage using hydrogen is not yet implemented at scale anywhere, although MW-scale electrolysers and GWh-scale hydrogen underground storage exist. <a href="https://netl.doe.gov/sites/default/files/publication/A-Literature-Review-of-Hydrogen-and-Natural-Gas-Turbines-081222.pdf">Research is still ongoing</a> to develop 100+-MW-scale pure hydrogen turbines that have both good efficiency and low NOx emissions. Alternative storage mediums such as <a href="https://doi.org/10.1016/j.joule.2023.10.001">methanol storage with carbon cycling</a> could also be attractive.</li>
<li>In reality the value of hydrogen could change seasonally, like natural gas does, and also be affected by other hydrogen demands (e.g. in industry) and hydrogen trade. A nice discussion of how to handle long-term storage with myopic foresight can be found in Section 3.3.4 of <a href="https://arxiv.org/abs/1704.05492">Marie-Alix Dupré la Tour's PhD thesis</a>.</li>
<li>Demand flexibility for conventional electricity demand is limited to the new demands (heat pumps, battery electric vehicles, electrolysers) and demand elasticity in some scenarios. Electrolysers, heat pumps and batteries run based on market signals.</li>
<li>Some potential new demands are not yet implemented yet, including district heating, electric truck charging and some process heat in industry.</li>
<li>Existing biomass electricity generation is not included, because biomass should be restricted to sustainable sources and prioritised for sectors like industrial feedstocks and long-distance aviation rather than electricity.</li>
<li>The future effects of climate change on weather are not considered.</li>
<li>Short-term forecasting errors, balancing costs, other ancilliary services, and unplanned and planned outages are currently ignored.</li>
<li>Other generation technologies, such as geothermal, nuclear, fossil fuels with CCS, wave, solar in space, etc., are not included.</li>
<li>Other storage technologies, such as iron-air batteries, etc., could lower costs.</li>
<li>Scaling up existing wind profiles will underestimate yields, because new turbines achieve higher capacity factors than the average existing turbine (e.g. because of higher hub heights).</li>
<li>On the other hand, locations for additional wind and solar turbines may have lower wind speeds and insolation than the sites used today.</li>
<li>Increasing wake effects for offshore wind with rising capacity are ignored.</li>
</ul>
</section>
<section id="links">
<h2>Other similar websites, some of which served as an inspiration</h2>
<ul>
<li><a href="https://reneweconomy.com.au/a-near-100-per-cent-renewables-grid-is-well-within-reach-and-with-little-storage/">David Osmond's simulations for highly renewable Australia</a></li>
<li><a href="https://www.agora-energiewende.de/service/agorameter">Agora Energiewende Future-Agorameter for Germany</a></li>
<li><a href="https://www.mygridgb.co.uk/2030grid/">MyGridGB simulations of a low-carbon British grid by 2030</a></li>
<li><a href="https://www.energy-charts.info/charts/power_simulated/chart.htm?l=en&c=DE">Energy-Charts future simulations</a></li>
<li><a href="https://www.energy-charts.info/charts/remod_installed_power/chart.htm?l=en&c=DE">Energy-Charts REMod scenarios</a> (doesn't use live weather for future scenarios)</li>
</ul>
</section>
<section id="acknowledgements">
<h2>Contributors & acknowledgements</h2>
<ul>
<li>
<a href="https://nworbmot.org/">Tom Brown</a> conceived and developed the website.
</li>
<li>
The <a href="https://openenergytracker.org/">Open Energy Tracker</a> team (<a href="https://wolfpeterschill.de/">Wolf-Peter Schill</a>, Alex Roth, Felix Schmidt and Adeline Gueret) helped with some early brainstorming.
</li>
<li>David Osmond, creator of <a href="https://reneweconomy.com.au/a-near-100-per-cent-renewables-grid-is-well-within-reach-and-with-little-storage/">live simulations for highly renewable Australia</a>, provided a lot of valuable feedback.
</li>
<li>Mirko Schäfer of the Albert-Ludwigs-Universität Freiburg, Katharina Hartz of Agora Energiewende and Leonhard Probst of Fraunhofer ISE helped understand the necessary corrections to the time series.
</li>
<li>Michael Lindner, Toni Seibold, Iegor Riepin, Goran Tkalec, Max Parzen, Gunnar Luderer and Philipp Glaum provided helpful general feedback.
</li>
</ul>
</section>
<section id="licence">
<h2>Software and data licence</h2>
<p>The open source code on <a href="https://github.com/PyPSA/nowcast">GitHub</a> is released under the GNU Affero General Public Licence (AGPL) Version 3.0. The open input data from <a href="https://www.smard.de/home">Bundesnetzagentur | SMARD.de</a> and <a href="https://open-meteo.com/">Open-Meteo</a> are released under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International Licence</a> (CC BY). All output data available on this website is also available under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International Licence</a> (CC BY).</p>
</section>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://cdn.rawgit.com/afeld/bootstrap-toc/v1.0.1/dist/bootstrap-toc.min.js"></script>
<script src="./jquery.easing.min.js"></script>
<script src="./scrolling-nav.js"></script>
<script type="text/javascript">
// Determine which navbar to assign scrollspy depending on window width
if ($(window).width() >= 992) {
$(function() {
var navSelector = "#toc";
var $myNav = $(navSelector);
Toc.init($myNav);
$("body").scrollspy({
target: navSelector
});
});
} else {
$('body').scrollspy({
target: '#mainNav',
offset: 56
});
}
</script>
</body>
</html>