---
title: ""

format:
  html:
    fig-width: 9
    fig-height: 8
    fig-dpi: 300
    # embed-resources: TRUE # Entwicklung
    # theme: "null" # Entwicklung
    embed-resources: FALSE # Veröffentlichung
    theme: none # Veröffentlichung
    header-includes: |
     <link rel="stylesheet" href="https://media.sciencemediacenter.de/static/fonts/circular/web.css">
      <script>document.addEventListener("DOMContentLoaded",function(){document.querySelectorAll("a").forEach(function(a){a.setAttribute("target","_blank");});});</script>
     <style>
     .kraftwerksstrategie-tip-card{padding:10px 12px;border-radius:10px;background:#fff;border-left:6px solid var(--tip-accent,#313233);box-shadow:0 8px 22px rgba(20,30,42,.18);color:#212529;font-family:"CircularSMCWeb",sans-serif;width:max-content;max-width:380px}
     .kraftwerksstrategie-tip-title{font-size:13px;font-weight:700;letter-spacing:.2px;margin-bottom:4px}
     .kraftwerksstrategie-tip-value{font-size:18px;font-weight:700;line-height:1.15;margin-bottom:6px}
     .kraftwerksstrategie-tip-lines{border-top:1px solid rgba(54,31,37,.12);margin-top:4px;padding-top:6px}
     .kraftwerksstrategie-tip-line{font-size:12px;line-height:1.6}
     .datatables a{color:#212529}
     </style>

mainfont: CircularSMCWeb

execute:
  echo: FALSE
  output: asis
  warning: FALSE
  error: FALSE
---

```{r}
#| label: pakete_und_daten
#| output: false
library(tidyverse)
library(SMChelpR)
library(scales)
library(DT)
library(plotly)
library(mapview)

## wichtige Story-Parameter
storyNo <- 26092
file_name_code <- "2026_Kraftwerksstrategie.qmd" ########################################
caption_energy_charts <-
  "Quelle: Energy-Charts.info, Berechnungen: Science Media Center Germany."
caption_marktstammdaten <-
  "Quelle: Marktstdammdatenregister, Berechnungen/Darstellung: Science Media Center Germany."

# caption_MaSta <-
#   "Quelle: Marktstammdatenregister, Berechnungen: Science Media Center Germany."
Datumsprefix_files <- FALSE # FALSE, wenn keine regelmäßige Aussendung / keine tagesaktuellen Daten

##############################

imagepath <-
  file.path("reports", storyNo)
dir.create(imagepath, showWarnings = FALSE, recursive = TRUE)

## workspace directory in RStudio interaktiv
if (rstudioapi::isAvailable()) {
  setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
}

if (is.na(file_name_code)) {
  stop("Dateiname der qmd nicht gesetzt")
}
if (!file.exists(file_name_code)) {
  stop("qmd existiert nicht. Dateiname falsch?")
}


file.copy(
  from = file_name_code,
  to = file.path(
    imagepath,
    paste0(
      today()[Datumsprefix_files],
      "_"[Datumsprefix_files],
      file_name_code
    )
  ),
  overwrite = TRUE
)
```


```{r}
#| label: set-graphic-parameters
#| output: false
options(scipen = 999) # set scientific notation to be off
SMC_theme_ggplot()

if (exists("caption_")) {
  stop("Caption wurde nicht angepasst")
}

format_SMC <- function(x, digits = 1) {
  small_space <- '<span style="font-size:50%;"> </span>'
  mapply(
    function(val) {
      if (is.na(val)) {
        return("keine Daten")
      }
      if (val == floor(val)) {
        formatC(
          val,
          format = "f",
          digits = 0,
          big.mark = small_space,
          decimal.mark = ","
        )
      } else {
        formatC(
          val,
          format = "f",
          digits = digits,
          big.mark = small_space,
          decimal.mark = ","
        )
      }
    },
    x,
    USE.NAMES = FALSE
  )
}
```

```{r}
#| label: load data
#| output: false
library(httr2)
library(arrow)
library(echarts4r)

source("helpers/api_fleet.R")
source("helpers/api_simulation.R")
source("helpers/sankey.R")
source("helpers/dauerlinie.R")
source("helpers/export_echart.R")

API_BASE <- Sys.getenv(
  "PLUMBER_PUBLIC_BACKEND_URL",
  unset = "http://localhost:9123"
)

fleet_raw <- fetch_fleet_data(API_BASE)
fleet_monthly <- aggregate_fleet_monthly(fleet_raw)
```

```{r}
current_datetime <- now()
```

::: m-news-single__ce

<!-- # Korrekturexemplar (Stand `r current_datetime`) -->

- Kraftwerksstrategie soll für ausreichend Back-up-Leistung nach dem Kohleausstieg sorgen 
- Referentenentwurf der Kraftwerksstrategie – jetzt StromVKG – sieht 11 GW zusätzliche Kapazitäten bis 2031 vor 
- SMC-Modell deutet darauf hin: Bis jetzt geplante Leistung dürfte für die Stabilität der Stromversorgung mindestens notwendig sein 

```{r}
#| label: Parameter-Definitionen 1
#| output: false
wind_onshore_ziel_2030 <- 115
solar_ziel_2030 <- 215

wind_offshore_ziel_2030 <- 30
wind_offshore_2030_realistisch <- 20 # genauer 19.8, # https://www.wind-energie.de/fileadmin/redaktion/dokumente/pressemitteilungen/2026/Status_des_Offshore-Windenergieausbaus_Jahr_2025.pdf

batterien_storage_capacity_in_gwh <- 27.6 # battery-charts
batterien_storage_charging_power_in_gw <- 18.12 # battery-charts

# https://energy-charts.info/charts/installed_power/chart.htm?l=de&c=DE&expansion=p_inst_storage - 2026
pumpspeicher_storage_charging_power_in_gw <- 9.7

# https://energy-charts.info/energy-charts_talks/Energy-Charts_Talks_51_Pumpspeicher.pdf - Kapazität nach Betriebsverlauf
pumpspeicher_storage_capacity_in_gwh <- 60

storage_capacity_in_gwh <- batterien_storage_capacity_in_gwh +
  pumpspeicher_storage_capacity_in_gwh
storage_charging_power_in_gw <- batterien_storage_charging_power_in_gw +
  pumpspeicher_storage_charging_power_in_gw

installierte_leistung_2031_01_01 <- fleet_monthly |>
  filter(
    Energietraeger %in%
      c(
        "Erdgas",
        "Steinkohle",
        "Braunkohle",
        # "Biomasse",
        "Mineralöl",
        # "Pumpspeicher",
        "Sonstige nicht erneuerbar"
      )
  ) |>
  filter(month == ymd("2031-01-01"))

summe_installierte_leistung_2031_01_01 <- installierte_leistung_2031_01_01 |>
  select(cumulative_GW) |>
  sum() |>
  round(1)
```

```{r}
#| label: Bruttostromverbrauch zu gesamter Nettostromverbrauch exkl. PSE
#| output: false
bruttostromverbrauch_zielwert <- 634 # TWh inkl. PSE ausgehend von EWI Bericht
anteil_kraftwerks_eigenverbauch <- 4.5 / 100 # ~ zwischen Status Quo und Mittel 2020-2025
pumparbeit <- 8 # TWh ~ Mittel historisch
gesamter_nettostromverbrauch_exkl_pse <- bruttostromverbrauch_zielwert *
  (1 - anteil_kraftwerks_eigenverbauch) -
  pumparbeit
```

Die Bundesregierung hat nun endlich einen ersten Plan für zukünftige Back-up-Kraftwerke vorgelegt. Diese Kraftwerke sollen flexibel dann einspringen können, wenn die Leistung von Windenergie und Photovoltaik (PV) nicht ausreicht und nicht mehr genug Kohlekraftwerke für den Ausgleich verfügbar sind. Die Diskussion hat damit aber noch nicht aufgehört, immer noch ist unklar, wie viel Leistung zukünftig wirklich notwendig ist – und mit welcher Technik diese bereitgestellt werden kann.

Das SMC hat bereits in der Vergangenheit ein einfaches Modell entwickelt und eingesetzt, um nachvollziehbar Größenordnungen zukünftiger Entwicklungen im Stromsektor zu zeigen. Wir testen derzeit, dieses Modell für die aktuellen Diskussionen zu nutzen. Herausforderung dabei ist, für ein Szenario lassen sich sehr viele Parameter einstellen. Das kann schnell zu unterschiedlichen Ergebnissen führen. Für die Aussage dieses Reports ist daher wichtig: Es kommt nicht auf einen genauen Wert an, sondern auf die Größenordnung. Es ist zum Beispiel unwichtig, ob eine Leistungslücke 7, 11 oder 15 Gigawatt (GW) groß ist – wichtig ist: Es gibt sie, und in einem eng gesteckten Parameterbereich bleibt ihre Größenordnung robust.

Für das folgende Szenario haben wir daher mit Annahmen für eine durchschnittliche Erzeugung von Windenergie- und PV-Anlagen sowie einem durchschnittlichen Stromverbrauch errechnet, welche Leistungen und Energiemengen ein Back-up voraussichtlich umfassen könnte. Anschließend testen wir mit einem kurzen, optimistischen Szenario – also unter der Annahme von mehr Stromerzeugung durch Windenergie und Photovoltaik sowie mehr Batterien und Flexibilitäten im System – ob die Größenordnung der Leistunglücke für 2031 in diesem Grenzfall noch plausibel ist.


### Die Ausgangslage

Anfang 2031 sollen in Deutschland Windenergieanlagen mit einer installierten Leistung von `r format_SMC(wind_onshore_ziel_2030)` GW und Photovoltaikanlagen mit einer installierten Leistung von `r format_SMC(solar_ziel_2030)` GW  Strom liefern. Auf See dürfte die installierte Leistung der Windenergieanlagen dann bei [voraussichtlich etwa `r format_SMC(wind_offshore_2030_realistisch)` GW](https://www.wind-energie.de/fileadmin/redaktion/dokumente/pressemitteilungen/2026/Status_des_Offshore-Windenergieausbaus_Jahr_2025.pdf) liegen. Ziel ist, dass diese Windenergie- und PV-Anlagen zusammen mit den anderen erneuerbaren Energien rund 80 Prozent des in Deutschland verbrauchten Stroms liefern sollen. Das heißt aber auch, dass die fehlenden 20 Prozent aus anderen Quellen geliefert werden müssten.

Wichtig ist, dass diese Quellen nicht von Wind und Tageslicht abhängig sind. Das trifft derzeit vor allem auf fossile Kraftwerke zu. Deren Leistung wird jedoch künftig deutlich sinken. Geht alles nach Plan, werden 2030 etwa die Braunkohlekraftwerke von RWE sowie weitere Steinkohlekraftwerke vom Netz gegangen sein. Ohne neue Anlagen werden in Deutschland fossile Kraftwerke zusammen auf eine installierte Leistung von  `r format_SMC(summe_installierte_leistung_2031_01_01)` GW kommen. 

Die Leistung von Biomasseanlagen oder Wasserkraftwerken kann zwar auch zumindest zum Teil als Back-up gesteuert werden, allerdings geschieht das derzeit eher nicht. Außerdem ist sie deutlich kleiner. Dieses Modell zählt ihre Stromerzeugung daher mit der von Windenergie- und PV-Anlagen zusammen.

[***Installierte Leistung steuerbarer fossiler Kraftwerke***]{.underline}

```{r}
#| label: baseline backupleistung timeline -> kvbg
#| fig-height: 5
CURSOR_DATE <- as.Date("2031-01-01")

# In the API: currently 662 MW Braunkohle for >= 2039-01
# Der /projected_plant_fleet-Endpoint zieht künftige Stilllegungen aus der KVBG-Anlage-2-Liste ab, die aber nur die großen Blöcke der LEAG/RWE/EnBW/Saale Energie umfasst — kleine Braunkohle-Einheiten in MaStR
#   (Brikettfabriken, industrielle KWK-Anlagen, ~470 MW) sind dort nicht enthalten und bleiben in der Projektion bis 2045 erhalten. Hinzu kommen ~225 MW Differenz, weil die in der Anlage 2 angegebenen MWel-netto-Werte
#   systematisch niedriger sind als die in Energy Charts/MaStR geführten Nettonennleistungen derselben Blöcke — beides zusammen ergibt das Residuum von 662 MW nach 2038.

fm_baseline <- prepare_fleet_chart_data(fleet_monthly, planned_plants = NULL) |>
  dplyr::mutate(
    base_GW = dplyr::if_else(
      Energietraeger == "Braunkohle" & month >= as.Date("2039-01-01"),
      0,
      base_GW
    ),
    total_GW = dplyr::if_else(
      Energietraeger == "Braunkohle" & month >= as.Date("2039-01-01"),
      0,
      total_GW
    )
  )

plot <- build_fleet_echart(
  fm = fm_baseline,
  cursor_date = CURSOR_DATE
  # title = "Szenario A: Kein StromVKG — Kraftwerksflotte 2020–2038"
)

plot
```

```{r}
#| label: fig_1_caption
filename <- "Kraftwerksflotte_ohne_StromVKG"

caption_kraftwerksflotte <- "Quelle: Energy-Charts.info, Marktstammdatenregister, KVBG\nBerechnungen/Darstellung: Science Media Center Germany."

data <- tibble(
  fileformat = c("csv", "csv"),
  filename_suffix = c("Kumulierte_Leistung", "Stilllegung_Braunkohle_nach_KVBG")
)

images <- tibble(
  fileformat = c("png", "svg"),
  filename_suffix = c("")
)

htmlpfad <- file.path(imagepath, paste0(filename, ".html"))
pngpfad <- file.path(imagepath, paste0(filename, ".png"))
svgpfad <- file.path(imagepath, paste0(filename, ".svg"))

datenpfad_kumulierte_leistung <- file.path(
  imagepath,
  paste0(filename, "_Kumulierte_Leistung.csv")
)

fleet_monthly |>
  write_csv(datenpfad_kumulierte_leistung)

# from energiewende-api
datenpfad_kvbg_anlage_2 <- file.path(
  imagepath,
  paste0(filename, "_Stilllegung_Braunkohle_nach_KVBG.csv")
)

export_echart_png_html_svg(plot, pngpfad, htmlpfad, svgpfad)


image_helper_light(
  filename = filename,
  filepath = imagepath,
  data = data,
  images = images,
  captions = caption_kraftwerksflotte
)
```


```{r}
#| label: grundlast anteil kohle
braunkohle_installierte_leistung_2031_01_01 <- installierte_leistung_2031_01_01 |>
  filter(Energietraeger == "Braunkohle") |>
  pull(cumulative_GW)

steinkohle_installierte_leistung_2031_01_01 <- installierte_leistung_2031_01_01 |>
  filter(Energietraeger == "Steinkohle") |>
  pull(cumulative_GW)

kohle_installierte_leistung_2031_01_01 <- braunkohle_installierte_leistung_2031_01_01 +
  steinkohle_installierte_leistung_2031_01_01

grundlast_anteil_braunkohle_in_prozent <- 51
grundlast_anteil_steinkohle_in_prozent <- 22

grundlast_braunkohle <- braunkohle_installierte_leistung_2031_01_01 *
  grundlast_anteil_braunkohle_in_prozent /
  100
grundlast_steinkohle <- steinkohle_installierte_leistung_2031_01_01 *
  grundlast_anteil_steinkohle_in_prozent /
  100


grundlast_kohle <- round(grundlast_braunkohle + grundlast_steinkohle, 1)
```


Der gesamte Nettostromverbrauch in Deutschland erreichte allerdings im Januar 2026 bereits eine Spitzenlast von über [83 GW](https://www.energy-charts.info/charts/power/chart.htm?l=de&c=DE&interval=month&month=01&year=2026&source=total). Im Jahr 2031, wenn der Jahresstromverbrauch höher liegen wird als in diesem Jahr, könnten Verbrauchsspitzen auch höher ausfallen. Das Problem wird dadurch verschärft, dass diese Verbrauchsspitzen vor allem im Winter auftreten, wenn zum Beispiel durch Flauten oder Nebel die Stromerzeugung durch Windenergie- und PV-Anlagen stark einbrechen kann (siehe [Dunkelflauten-Guide](https://dunkelflauten-guide.smc.page/) oder [Ausblick auf die Kraftwerksstrategie, Datenreport 2023](https://www.sciencemediacenter.de/angebote/das-erneuerbare-energiesystem--ausblick-auf-die-kraftwerksstrategie-23173)). Um den Bedarf dann zu decken, müssen nach heutiger Planung vor allem die fossilen Kraftwerke einspringen. Weil es davon voraussichtlich nicht genug geben wird, ist eine Lücke zu erwarten – und die soll das StromVKG ab 2031 schließen. 

### Simulation des mittleren Szenarios

Um einen groben Überblick zu gewinnen, in welcher Größenordnung diese Lücke ausfallen und welche Rolle die vorgesehenen Kraftwerkskapazitäten spielen könnten, hat das SMC bereits 2023 das einfache Modell entwickelt, mit dem sich auf der Basis der historischen Stromerzeugungsdaten Szenarien für künftige Stromerzeugungen mit anderen Kraftwerksparks und anderen Stromverbräuchen berechnen lassen. Ziel war dabei nicht, bessere Werte als in der Forschung zu erzielen, sondern mit einfachen Mitteln wahrscheinliche Größenordnungen aufzuzeigen. Dieses Modell haben wir weiterentwickelt und die Parameter nun so angepasst, dass es ein vereinfachtes Szenario für eine mögliche Stromerzeugung des Jahres 2031 berechnet. 

2031 haben wir gewählt, weil die Ausbauziele des [EEG 2027](https://table.media/assets/berlin/260420_referentenentwurf_novelle_eeg_2027.pdf#page=77) dann erreicht und viele Braunkohlekraftwerke bereits abgeschaltet sein sollen. Außerdem ist geplant, im Laufe des Jahres die ersten zusätzlichen Gaskraftwerke ans Netz gehen zu lassen. Da die Bundesregierung keine Aussage mehr über den erwarteten Verbrauch trifft, haben wir uns für einen Bruttojahresstromverbrauch von `r format_SMC(bruttostromverbrauch_zielwert)` TWh entschieden. Der Wert liegt im unteren Drittel der Szenarien des von der Bundesregierung 2025 in Auftrag gegebenen Gutachtens ([Energie Effizient Machen](https://www.ewi.uni-koeln.de/cms/wp-content/uploads/2025/09/EWI_BET_EnergiewendeEffizientMachen.pdf#page=12)) und passt zu [einer Äußerung](https://www.youtube.com/watch?v=6a3z16YHG-Q&t=4880s) der Bundeswirtschaftsministerin bei der Präsentation des Gutachtens. Als Zielgröße für unsere Simulation ergibt sich daraus ein gesamter Nettostromverbrauch (exklusive Pumpstromerzeugung) von `r format_SMC(gesamter_nettostromverbrauch_exkl_pse)` TWh.

Für das Durchschnitts-Szenario haben wir die Batterien auf dem heutigen Ausbauzustand belassen: Es ist zwar abzusehen, dass es in Zukunft sehr viel mehr Batteriespeicher geben wird – allerdings ist derzeit noch vollkommen unklar, in welcher Größenordnung sich der Zubau realistisch bewegen dürfte. Im optimistischen Szenario wird ein sehr hoher Zubau angenommen.


[***Simuliertes Energiemengen-Szenario 2031***]{.underline}

```{r}
#| label: baseline sankey
#| output: true
#| fig-height: 8
# #| fig-cap: "Durchschnittsjahr 2015–2025: Stromflüsse im Szenario A (Kein StromVKG, EEG-Ziele 2030). Quelle: eigene Simulation auf Basis Energy-Charts.info; Darstellung: Science Media Center Germany."

params_eeg2027 <- list(
  capacity_in_mw_wind_offshore = wind_offshore_2030_realistisch * 1000,
  capacity_in_mw_wind_onshore = wind_onshore_ziel_2030 * 1000,
  capacity_in_mw_solar = solar_ziel_2030 * 1000,
  efficiency_gain_wind_offshore = 1.00,
  efficiency_gain_wind_onshore = 1.00,
  efficiency_gain_solar = 1.00,
  flexibility_window_hours = 1,
  maximal_shift_in_mw = 5000,
  base_power_in_mw = grundlast_kohle * 1000,
  storage_capacity_in_mwh = storage_capacity_in_gwh * 1000, # batterien + pumpspeicher
  storage_charging_power_in_mw = storage_charging_power_in_gw * 1000, # batterien + pumpspeicher
  target_nettostromerzeugung_in_twh = gesamter_nettostromverbrauch_exkl_pse,
  only_wind_solar = FALSE,
  data_source = "gesamt"
)

# https://github.com/sciencemediacenter/ds-energiewende-api/commit/48ddd3c8767aacfc760c3c7b9d96b0764cef836b
sim_baseline_raw <- call_avg_year_simulation(API_BASE, params_eeg2027)
stats_baseline <- aggregate_avg_year_stats(
  sim_baseline_raw,
  base_power_gw = params_eeg2027$base_power_in_mw / 1000
)

m <- stats_baseline$means
mn <- stats_baseline$mins
mx <- stats_baseline$maxs
cap_on <- params_eeg2027$capacity_in_mw_wind_onshore
cap_off <- params_eeg2027$capacity_in_mw_wind_offshore
cap_sol <- params_eeg2027$capacity_in_mw_solar

sankey_plot <- build_sankey_echart(
  mode = "avg",
  nettostromerzeugung_in_twh = m$nettostromerzeugung_in_twh,
  wind_onshore_twh = m$wind_onshore_twh,
  wind_offshore_twh = m$wind_offshore_twh,
  solar_twh = m$solar_twh,
  biomass_twh = m$biomass_twh,
  hydro_twh = m$hydro_twh,
  backup_twh = m$backup_twh,
  surplus_twh = m$surplus_twh,
  storage_to_load_twh = m$storage_to_load_twh,
  direct_ee_to_load = m$direct_ee_to_load,
  total_ee_to_load = m$total_ee_to_load,
  ee_twh = m$ee_twh,
  base_power_gw = stats_baseline$base_power_gw,
  base_energy_twh = stats_baseline$base_energy_twh,
  backup_peak_gw = m$backup_peak_gw,
  backup_op_hours = m$backup_op_hours,
  co2_min = m$co2_min,
  co2_max = m$co2_max,
  co2_avg = m$co2_avg,
  cap_onshore_mw = cap_on,
  cap_offshore_mw = cap_off,
  cap_solar_mw = cap_sol,
  flh_onshore = m$wind_onshore_twh * 1e6 / cap_on,
  flh_offshore = m$wind_offshore_twh * 1e6 / cap_off,
  flh_solar = m$solar_twh * 1e6 / cap_sol,
  year_range = stats_baseline$year_range,
  means = m,
  mins = mn,
  maxs = mx
)

sankey_plot


anteil_erneuerbarer <- m$total_ee_to_load / m$nettostromerzeugung_in_twh * 100


bandbreite_stromerzeugung_erneuerbarer <- mx$total_ee_to_load -
  mn$total_ee_to_load

bandbreite_stromerzeugung_erneuerbarer_prozent <- bandbreite_stromerzeugung_erneuerbarer /
  m$nettostromerzeugung_in_twh *
  100

backup_prozent <- m$backup_twh /
  m$nettostromerzeugung_in_twh *
  100
kohlesockel_prozent <- stats_baseline$base_energy_twh /
  m$nettostromerzeugung_in_twh *
  100

nicht_erneuerbarer_strombedarf_prozent <- backup_prozent + kohlesockel_prozent
```

```{r}
#| label: fig_2_caption
filename <- "Stromfluesse_Szenario_A_2031"

caption_sankey <- "Quelle: SMC-Simulation auf Datenbasis von Energy-Charts.info\nBerechnungen/Darstellung: Science Media Center Germany."

data <- tibble(
  fileformat = c("csv"),
  filename_suffix = c("")
)

images <- tibble(
  fileformat = c("png", "svg"),
  filename_suffix = c("")
)

htmlpfad <- file.path(imagepath, paste0(filename, ".html"))
pngpfad <- file.path(imagepath, paste0(filename, ".png"))
svgpfad <- file.path(imagepath, paste0(filename, ".svg"))

datenpfad <- file.path(
  imagepath,
  paste0(filename, ".csv")
)

sankey_to_tibble(
  mode = "avg",
  nettostromerzeugung_in_twh = m$nettostromerzeugung_in_twh,
  wind_onshore_twh = m$wind_onshore_twh,
  wind_offshore_twh = m$wind_offshore_twh,
  solar_twh = m$solar_twh,
  biomass_twh = m$biomass_twh,
  hydro_twh = m$hydro_twh,
  backup_twh = m$backup_twh,
  surplus_twh = m$surplus_twh,
  storage_to_load_twh = m$storage_to_load_twh,
  direct_ee_to_load = m$direct_ee_to_load,
  total_ee_to_load = m$total_ee_to_load,
  ee_twh = m$ee_twh,
  base_power_gw = stats_baseline$base_power_gw,
  base_energy_twh = stats_baseline$base_energy_twh,
  backup_peak_gw = m$backup_peak_gw,
  backup_op_hours = m$backup_op_hours,
  co2_min = m$co2_min,
  co2_max = m$co2_max,
  co2_avg = m$co2_avg,
  cap_onshore_mw = cap_on,
  cap_offshore_mw = cap_off,
  cap_solar_mw = cap_sol,
  flh_onshore = m$wind_onshore_twh * 1e6 / cap_on,
  flh_offshore = m$wind_offshore_twh * 1e6 / cap_off,
  flh_solar = m$solar_twh * 1e6 / cap_sol,
  year_range = stats_baseline$year_range,
  means = m,
  mins = mn,
  maxs = mx
) |>
  write_csv(datenpfad)


export_echart_png_html_svg(sankey_plot, pngpfad, htmlpfad, svgpfad)

image_helper_light(
  filename = filename,
  filepath = imagepath,
  data = data,
  images = images,
  captions = caption_sankey
)
```

*Energiemengen-Szenario für das Durchschnittsjahr auf der Basis der historischen Stromerzeugung von 2015 bis 2025. Gewählte Parameter: `r format_SMC(bruttostromverbrauch_zielwert)` TWh Brutto-Jahresstromverbrauch, gesamter Nettostromverbrauch (exklusive Pumpstromerzeugung) `r format_SMC(gesamter_nettostromverbrauch_exkl_pse)` TWh, Ausbau Windenergie und PV erreicht, Biomasse-, Wasser-, Gas- und Pumpspeicher-Kraftwerke sowie Batterien und weitere Anlagen wie 2026, StromVKG nicht umgesetzt (siehe Tabelle im Anhang). Von nicht-herunterregelbarer Kohlekraftwerks-Leistung beigesteuerte Energie wird als Kohlesockel ausgewiesen.*

Alle erneuerbaren Energien zusammen erreichen in diesem Szenario einen Anteil von `r format_SMC(anteil_erneuerbarer)` Prozent am gesamten Nettostromverbrauch (die Werte werden beim Hovern über den farbigen Balken angezeigt). Dabei ist die Spannweite der möglichen Erträge breit: Das Modell berechnet neben einem Szenario für das Durchschnittsjahr auf der Basis der Stromerzeugung von 2015 bis 2025 auch Szenarien für jedes einzelne Jahr. Die tatsächlich genutzte Stromerzeugung der erneuerbaren Energien variiert um `r format_SMC(bandbreite_stromerzeugung_erneuerbarer)` TWh zwischen Minimum und Maximum – `r format_SMC(bandbreite_stromerzeugung_erneuerbarer_prozent)` Prozent des eingestellten gesamten Nettostromverbrauchs. Dass der Anteil der Erneuerbaren in diesem Szenario das 80-Prozent-Ziel verfehlt, ist für diesen Report nicht von zentraler Bedeutung.

`r format_SMC(backup_prozent)` Prozent des Strombedarfs werden in diesem Szenario durch zusätzliche Quellen als „Back-up“ bereitgestellt. Dazu kommt noch der „Kohlesockel“ mit `r format_SMC(kohlesockel_prozent)` Prozent: Das Modell berücksichtigt, dass sich Braun- und Steinkohlekraftwerke nicht so flexibel steuern lassen wie etwa Gaskraftwerke (die genauen Annahmen finden Sie im Anhang). Diese Energiemenge wird unabhängig von der Stromeinspeisung von Windenergie- und PV-Anlagen erzeugt. Wenn die Erneuerbaren zu wenig Energie liefern, kommt der Kohlesockel dem Back-up zugute. Wenn allerdings Erneuerbare genügend Energie liefern, erzeugen die Kohlekraftwerke trotzdem weiter Strom (siehe folgende Grafik). Das kann zu Überschussstrom und negativen Strompreisen beitragen, ist aber nicht Teil dieses Reports.   

An welchen Tagen und Stunden zusätzliche Stromlieferungen nötig wären, berechnet das Modell ebenfalls. Daraus lässt sich eine Jahresdauerlinie der Back-up-Kapazitäten erstellen. Jahresdauerlinien sind eine in der Energiewirtschaft verbreitete Darstellungsform der Auslastung von Anlagen. Sie zeigt hier, wie viele Stunden im Jahr wie viel Back-up-Leistung in den Szenarien nötig ist, um den Stromverbrauch vollständig zu decken. Stromspeicher gehören dabei nicht zur notwendigen Back-up-Leistung, weil ihr Einsatz bereits vorher berechnet wurde. Übersteigt der Leistungsbedarf die installierte Leistung der fossilen Kraftwerke, kann man das als Hinweis auf fehlende Kapazitäten interpretieren.

Aus einer Jahresdauerlinie kann man auch Rückschlüsse auf die Wirtschaftlichkeit ziehen, das ist aber hier nicht beabsichtigt. 

[***Simulierte Jahresdauerlinie der Back-up-Kapazitäten 2031***]{.underline}


```{r}
#| label: baseline jahresdauerlinie
#| output: true
# #| fig-cap: "Jahresdauerlinie des steuerbaren Backup-Bedarfs im Szenario A (Kein StromVKG, EEG-Ziele 2030). Durchschnitt 2015–2025, blauer Bereich: Min–Max-Schwankung zwischen Wetterjahren. Gestrichelte Linie: installierte steuerbare Leistung nach KVBG 2030. Quelle: eigene Simulation auf Basis Energy-Charts.info; Darstellung: Science Media Center Germany."
dauerlinie_baseline <- compute_dauerlinie_avg(
  sim_baseline_raw,
  base_power_gw = params_eeg2027$base_power_in_mw / 1000
)

installed_backup_gw_baseline <- fm_baseline |>
  dplyr::filter(
    month == lubridate::floor_date(CURSOR_DATE, "month"),
    as.character(Energietraeger) %in%
      c(
        "Erdgas",
        "Steinkohle",
        "Braunkohle",
        # "Biomasse",
        "Mineralöl",
        # "Pumpspeicher",
        "Sonstige nicht erneuerbar"
      )
  ) |>
  dplyr::summarise(total = sum(total_GW)) |>
  dplyr::pull(total)

# round(installed_backup_gw_baseline, 1) ==
#   round(summe_installierte_leistung_2031_01_01, 1)

# Simulation ohne Kohlesockel (für Overlay und zweite Dauerlinie)
params_no_base <- params_eeg2027
params_no_base$base_power_in_mw <- 0
sim_no_base_raw <- call_avg_year_simulation(API_BASE, params_no_base)
dauerlinie_no_base <- compute_dauerlinie_avg(sim_no_base_raw, base_power_gw = 0)

no_backup_needed_anymore <- dauerlinie_no_base |>
  filter(mean_gw == 0) |>
  pull(Stunden) |>
  min()

installed_backup_gw_kvbg <- installed_backup_gw_baseline -
  kohle_installierte_leistung_2031_01_01

dauerlinie_plot <- build_dauerlinie_echart(
  dauerlinie = dauerlinie_baseline,
  installed_backup_gw = installed_backup_gw_baseline,
  mode = "avg",
  n_years = length(2015:2025),
  min_source_year = 2015,
  max_source_year = 2025,
  base_power_gw = params_eeg2027$base_power_in_mw / 1000,
  overlay_gw = dauerlinie_no_base$mean_gw,
  installed_backup_gw_kvbg = installed_backup_gw_kvbg
)

dauerlinie_plot
```

```{r}
#| label: fig_3_caption
filename <- "Jahresdauerlinie_Szenario_A_2031"

caption_dauerlinie <- "Quelle: SMC-Simulation auf Datenbasis von Energy-Charts.info\nBerechnungen/Darstellung: Science Media Center Germany."

data <- tibble(
  fileformat = c("csv"),
  filename_suffix = c("Dauerlinie")
)

images <- tibble(
  fileformat = c("png", "svg"),
  filename_suffix = c("")
)

htmlpfad <- file.path(imagepath, paste0(filename, ".html"))
pngpfad <- file.path(imagepath, paste0(filename, ".png"))
svgpfad <- file.path(imagepath, paste0(filename, ".svg"))

datenpfad_dauerlinie <- file.path(
  imagepath,
  paste0(filename, "_Dauerlinie.csv")
)

dauerlinie_baseline |>
  write_csv(datenpfad_dauerlinie)

export_echart_png_html_svg(dauerlinie_plot, pngpfad, htmlpfad, svgpfad)

image_helper_light(
  filename = filename,
  filepath = imagepath,
  data = data,
  images = images,
  captions = caption_dauerlinie
)
```

*Die Jahresdauerlinie zeigt, für wie viele Stunden im Jahr wie viel Back-up-Leistung im Szenario erforderlich ist, um den Bedarf vollständig abzudecken. Ein Jahr hat 8760 Stunden. Die schwarze Linie gibt den Verlauf für das Durchschnittsjahr an, die blaue Fläche die Bandbreite, in der sich die Jahresdauerlinien für einzelne Erzeugungsjahre bewegen. Der Kohlesockel ist braun aufgetragen. Dieser folgt nicht der Einspeisung durch Erneuerbare und läuft daher bis zum Ende des Jahres durch. Die gestrichelte graue Linie zeigt, wie die Jahresdauerlinie ohne Kohlesockel verliefe, dann wäre nach `r format_SMC(no_backup_needed_anymore)` Stunden in diesem Szenario gar kein Back-up mehr nötig. Die gestrichelten roten Linien zeigen die installierte Leistung steuerbarer fossiler Kraftwerke Ende 2030 und nach dem Kohleausstieg Ende 2038. Überschuss-Erzeugung durch Erneuerbare wird nicht angezeigt.*

```{r}
#| label: baseline tabelle summary
#| output: false
m <- stats_baseline$means
mn <- stats_baseline$mins
mx <- stats_baseline$maxs

KSG_STROM_2030_MT <- 108 # Mio. t CO2, Sektorbudget Strom 2030, KSG Anlage 2a

luecke_mean <- m$backup_peak_gw +
  grundlast_kohle -
  installed_backup_gw_baseline
luecke_min <- mn$backup_peak_gw +
  grundlast_kohle -
  installed_backup_gw_baseline
luecke_max <- mx$backup_peak_gw +
  grundlast_kohle -
  installed_backup_gw_baseline

anzahl_stunden_zusaetlicher_bedarf <- dauerlinie_baseline |>
  filter(mean_gw > installed_backup_gw_baseline) |>
  pull(Stunden) |>
  max()

rotes_dreieck <- dauerlinie_baseline |>
  filter(mean_gw > installed_backup_gw_baseline) |>
  mutate(luecke_gw = mean_gw - installed_backup_gw_baseline)

# box <- 22 * 277 / 1000 # eine Box mit maximaler Lücke entspräche ~ 6 TWh

rotes_dreieck_twh <- sum(rotes_dreieck$luecke_gw) / 1000

backup_bedarf <- m$backup_twh + stats_baseline$base_energy_twh
maximale_backup_leistung <- m$backup_peak_gw + grundlast_kohle

hoher_backup_bedarf_wert <- 70 # GW
hoher_backup_bedarf_stunden <- dauerlinie_baseline |>
  filter(mean_gw > hoher_backup_bedarf_wert) |>
  pull(Stunden) |>
  max()


anzahl_stunden_zusaetlicher_bedarf_nach_stromkvg <- dauerlinie_baseline |>
  filter(mean_gw > installed_backup_gw_baseline + 11) |>
  pull(Stunden) |>
  max()

luecke_mean_nach_stromkvg <- luecke_mean - 11
```


Das Durchschnitts-Szenario zeigt als Größenordnung: Die meisten Stunden im Jahr wäre die Stromversorgung gesichert. Doch es würde immer wieder kritische Stunden geben, die sich ohne die geplanten zusätzlichen Kapazitäten durch die Kraftwerksstrategie auf `r format_SMC(anzahl_stunden_zusaetlicher_bedarf)` Stunden im Jahr aufsummieren können. Trotz der noch installierten Kohlekraftwerksleistung würden insgesamt `r format_SMC(rotes_dreieck_twh)` TWh fehlen, um den Bedarf in Deutschland zu decken. Wichtig dabei: Für `r format_SMC(hoher_backup_bedarf_stunden)` Stunden im Jahr kann die erforderliche Leistung bis auf über `r format_SMC(hoher_backup_bedarf_wert)` GW ansteigen, maximal fehlt eine Leistung bis zu `r format_SMC(luecke_mean)` GW, wenn auch nur für wenige Stunden. 

Durch den Zubau der geplanten Kapazitäten würde sich das Szenario für 2031 etwas entspannen: Die Zahl der ungedeckten Stunden sinkt dann auf `r format_SMC(anzahl_stunden_zusaetlicher_bedarf_nach_stromkvg)`. Dennoch fehlten noch weitere `r format_SMC(luecke_mean_nach_stromkvg)` GW, wenn auch nur für wenige Stunden im Jahr. Die Stabilität der Stromversorgung zu jeder Zeit müsste durch weitere Kapazitäten garantiert werden, wenn die Stromversorgung ohne Importe sichergestellt werden soll. In den Jahren nach 2031 würde sich die Lücke jedoch erheblich vergrößern, weil dann auch die letzten verbliebenen Kohlekraftwerke nach und nach abgeschaltet werden (siehe gestrichelte Linie „installierte Leistung nach Kohleausstieg“). 

```{r}
#| label: optimistisches Szenario
params_eeg2027_optimistisch <- list(
  capacity_in_mw_wind_offshore = wind_offshore_ziel_2030 * 1000,
  capacity_in_mw_wind_onshore = wind_onshore_ziel_2030 * 1000,
  capacity_in_mw_solar = solar_ziel_2030 * 1000,
  efficiency_gain_wind_offshore = 1.20,
  efficiency_gain_wind_onshore = 1.20,
  efficiency_gain_solar = 1.20,
  flexibility_window_hours = 48,
  maximal_shift_in_mw = 50000,
  base_power_in_mw = grundlast_kohle * 1000,
  storage_capacity_in_mwh = 500 * 1000, # vs 87
  storage_charging_power_in_mw = 150 * 1000, # vs. 27.82
  target_nettostromerzeugung_in_twh = gesamter_nettostromverbrauch_exkl_pse,
  only_wind_solar = FALSE,
  data_source = "gesamt"
)

sim_baseline_raw_optimistisch <- call_avg_year_simulation(
  API_BASE,
  params_eeg2027_optimistisch
)
stats_baseline_optimistisch <- aggregate_avg_year_stats(
  sim_baseline_raw_optimistisch,
  base_power_gw = params_eeg2027_optimistisch$base_power_in_mw / 1000
)

m_optimistisch <- stats_baseline_optimistisch$means
mn_optimistisch <- stats_baseline_optimistisch$mins
mx_optimistisch <- stats_baseline_optimistisch$maxs
cap_on_optimistisch <- params_eeg2027_optimistisch$capacity_in_mw_wind_onshore
cap_off_optimistisch <- params_eeg2027_optimistisch$capacity_in_mw_wind_offshore
cap_sol_optimistisch <- params_eeg2027_optimistisch$capacity_in_mw_solar

anteil_erneuerbarer_optimistisch <- m_optimistisch$direct_ee_to_load /
  m_optimistisch$nettostromerzeugung_in_twh *
  100

bandbreite_stromerzeugung_erneuerbarer_optimistisch <- mx_optimistisch$direct_ee_to_load -
  mn_optimistisch$direct_ee_to_load

bandbreite_stromerzeugung_erneuerbarer_prozent_optimistisch <- bandbreite_stromerzeugung_erneuerbarer_optimistisch /
  m_optimistisch$nettostromerzeugung_in_twh *
  100 # -> ~ 9%

# format_SMC(
#   bandbreite_stromerzeugung_erneuerbarer_prozent,
#   digits = 0
# )

nicht_erneuerbarer_strombedarf_prozent_optimistisch <- (m_optimistisch$backup_twh /
  m_optimistisch$nettostromerzeugung_in_twh *
  100) +
  (stats_baseline_optimistisch$base_energy_twh /
    m_optimistisch$nettostromerzeugung_in_twh *
    100)

dauerlinie_baseline_optimistisch <- compute_dauerlinie_avg(
  sim_baseline_raw_optimistisch,
  base_power_gw = params_eeg2027_optimistisch$base_power_in_mw / 1000
)

installed_backup_gw_baseline <- fm_baseline |>
  dplyr::filter(
    month == lubridate::floor_date(CURSOR_DATE, "month"),
    as.character(Energietraeger) %in%
      c(
        "Erdgas",
        "Steinkohle",
        "Braunkohle",
        # "Biomasse",
        "Mineralöl",
        # "Pumpspeicher",
        "Sonstige nicht erneuerbar"
      )
  ) |>
  dplyr::summarise(total = sum(total_GW)) |>
  dplyr::pull(total)


KSG_STROM_2030_MT <- 108 # Mio. t CO2, Sektorbudget Strom 2030, KSG Anlage 2a


###### schlechtestes Wetterjahr -> betrachte als max_gw und mx_optimistisch

# luecke_mean_optimistisch <- m_optimistisch$backup_peak_gw  + grundlast_kohle - installed_backup_gw_baseline
# luecke_min_optimistisch <- mn_optimistisch$backup_peak_gw  + grundlast_kohle - installed_backup_gw_baseline
luecke_max_optimistisch <- mx_optimistisch$backup_peak_gw +
  grundlast_kohle -
  installed_backup_gw_baseline


anzahl_stunden_zusaetlicher_bedarf_optimistisch <- dauerlinie_baseline_optimistisch |>
  filter(max_gw > installed_backup_gw_baseline) |>
  pull(Stunden) |>
  max()

backup_bedarf_optimistisch <- mx_optimistisch$backup_twh
maximale_backup_leistung <- mx_optimistisch$backup_peak_gw +
  grundlast_kohle

hoher_backup_bedarf_wert_optimistisch <- 70 # GW
hoher_backup_bedarf_stunden_optimistisch <- dauerlinie_baseline_optimistisch |>
  filter(max_gw > hoher_backup_bedarf_wert_optimistisch) |>
  pull(Stunden) |>
  max()

kraftwerksstrategie_backup_zubau <- 11 # GW
anzahl_stunden_zusaetlicher_bedarf_nach_stromkvg <- dauerlinie_baseline_optimistisch |>
  filter(
    max_gw > installed_backup_gw_baseline + kraftwerksstrategie_backup_zubau
  ) |>
  pull(Stunden) |>
  max()

luecke_max_nach_stromkvg <- luecke_max_optimistisch -
  kraftwerksstrategie_backup_zubau
```

### Ergebnis des optimistischen Szenarios

Für das optimistische Szenario, mit dem wir die Robustheit der eben ermittelten Lücke testen wollen, haben wir die Annahmen wie folgt geändert: Windenergie-Anlagen auf See kommen auf `r format_SMC(wind_offshore_ziel_2030)` GW statt `r format_SMC(wind_offshore_2030_realistisch)` GW, die Windenergie- und Solar-Anlagen liefern um den Faktor `r format_SMC(params_eeg2027_optimistisch$efficiency_gain_solar)` mehr Strom pro installierter Leistung als heute, Batterien haben deutlich höhere Werte (Leistung: `r format_SMC(params_eeg2027_optimistisch$storage_charging_power_in_mw / 1000)` GW, Kapazität: `r format_SMC(params_eeg2027_optimistisch$storage_capacity_in_mwh / 1000)` GWh, inklusive Pumpspeicher) als vorher (`r format_SMC(params_eeg2027$storage_charging_power_in_mw / 1000)` GW und `r format_SMC(params_eeg2027$storage_capacity_in_mwh / 1000)` GWh) und auch Flexibilitäten werden in sehr hohem Maße genutzt (Leistung: `r format_SMC(params_eeg2027_optimistisch$maximal_shift_in_mw / 1000)` GW, Zeitraum: `r format_SMC(params_eeg2027_optimistisch$flexibility_window_hours)` Stunden). 

In besseren Ertragsjahren tritt eine Leistungslücke unter den optimistischen Annahmen nicht auf. Das Modell zeigt jetzt nur im schlechtesten Ertragsjahr für Windenergie und Photovoltaik eine Leistungslücke bis zu `r format_SMC(luecke_max_optimistisch)` GW. Das liegt zwar leicht unterhalb der im StromVKG für 2031 geplanten Kapazitäten, die grobe Größenordnung bleibt aber bestehen. Zusätzlich muss man folgendes berücksichtigen: 

- Erstens, die Rechnung geht nur gerade eben so auf. In Wirklichkeit würde man auf jedenfall mehr Leistung installieren, als man unmittelbar braucht, weil immer wieder Kraftwerke durch Wartung oder Ausfälle für die Versorgung nicht zur Verfügung stehen.
- Zweitens, diese Annahmen sind sehr optimistisch. Es ist nicht sicher, ob sie sich bis 2031 tatsächlich umsetzen lassen.
- Drittens, es ist möglich das der Strombedarf 2031 auch höher liegt als wir angenommen haben (Bruttostromverbrauch: `r format_SMC(bruttostromverbrauch_zielwert)` TWh), zum Beispiel wenn die Sektorenkopplung Fahrt aufnimmt. Wenn das der Fall wäre, hätte das auch Auswirkungen auf die Größe der Lücke.
- Viertens, die Kohlekraftwerke werden in den kommenden Jahren abgeschaltet. Damit gehen bis Ende 2038 insgesamt `r format_SMC(kohle_installierte_leistung_2031_01_01)` GW steuerbare Leistung vom Netz und hinterlassen auf jeden Fall eine Lücke, die ungefähr in gleicher Größenordnung geschlossen werden muss. 

Mit Blick auf dieses Ergebnis erscheint der geplante Zubau von zusätzlichen Kapazitäten bis 2031, möglicherweise in Form von Gaskraftwerken, in der Größenordnung von 11 GW [durchaus sinnvoll](https://youtu.be/KcThS5c9D9s?t=3169).

Diskutiert wird, wie diese notwendigen Kapazitäten bereitgestellt werden sollen – zum Beispiel im aktuellen Press Briefing des SMC [zum geplanten StromVKG](https://www.sciencemediacenter.de/angebote/kraftwerksstrategie-welches-back-up-soll-kuenftig-solar--und-windenergie-ergaenzen-26094). In Frage kommen zusätzliche Gaskraftwerke, diskutiert wird aber auch ein gezielter Einsatz von Batterien oder Flexibilitäten, auch ein veränderter Einsatz von Biomasse oder sogar Wasserkraftwerken könnte möglich sein. Wird keine Lösung gefunden, könnte es aber auch nötig sein, den Kohleausstieg um wenige Jahre zu verschieben – auch diese Position wird vertreten.


### Anhang: Annahmen und Berechnungen der Simulation

**Grundlagen**: Das vom Bundeswirtschaftsministerium 2025 in Auftrag gegebene [Gutachten zur Energiewende](https://www.ewi.uni-koeln.de/cms/wp-content/uploads/2025/09/EWI_BET_EnergiewendeEffizientMachen.pdf) sieht für 2030 einen Bruttostrombedarf zwischen 600 und 700 TWh. Das Bundeswirtschaftsministerium geht dabei von einem Wert eher am unteren Ende dieser Spannweite aus. Da die Sektorenkopplung langsamer voranschreitet als erhofft und das Wirtschaftswachstum auch eher gering ausfällt, gehen wir von einem Anstieg im unteren Bereich der Spannweite des Gutachtens von ungefähr `r format_SMC(bruttostromverbrauch_zielwert)` TWh für das Jahr 2031 aus. Ferner haben wir für dieses Szenario die Werte für die Batteriespeicherkapazitäten auf dem Wert von 2026 belassen, weil uns Annahmen derzeit zu unsicher erscheinen. Auch die flexible Stromnachfrage haben wir für dieses Szenario konservativ angesetzt. Den Effekt hoher Werte haben wir im Datenreport [Ausblick auf die Kraftwerksstrategie](https://www.sciencemediacenter.de/angebote/das-erneuerbare-energiesystem--ausblick-auf-die-kraftwerksstrategie-23173) gezeigt. 


**Kohlesockel**: Die Werte für Braun- und Steinkohle ergeben sich aus dem [KVBG](https://www.gesetze-im-internet.de/kvbg/index.html). 2031 werden gemäß Ausstiegspfad `r format_SMC(braunkohle_installierte_leistung_2031_01_01)` GW Braunkohle am Netz sein, die Vorgaben für Steinkohle ergeben unter der Voraussetzung einer linearen Abnahme der installierten Kapazität einen Wert von `r format_SMC(steinkohle_installierte_leistung_2031_01_01)` GW. Diese Leistungen können aber nicht so flexibel eingesetzt werden wie die von Gaskraftwerken. Vor allem Braunkohlekraftwerke können ihre Leistung nicht beliebig reduzieren, weil die Verbrennung dann unter Umständen nicht mehr stabil läuft. Das Modell splittet daher die installierte Leistung von Kohle- und Gaskraftwerken in Back-up und Kohlesockel. Der Kohlesockel passt sich nicht der Einspeisung der Erneuerbaren an. Aufgrund der historischen Erzeugungsdaten nehmen wir an, dass im Jahresmittel `r format_SMC(grundlast_anteil_braunkohle_in_prozent)` Prozent der installierten Braunkohle-Kraftwerksleistung (`r format_SMC(grundlast_braunkohle, digits=1)` GW) und `r format_SMC(grundlast_anteil_steinkohle_in_prozent)` Prozent der installierten Steinkohle-Kraftwerksleistung (`r format_SMC(grundlast_steinkohle, digits=1)` GW) als Sockel kontinuierlich ins Netz eingespeist werden. Der Rest wird als Back-up eingesetzt und gezählt.

**Importe und Exporte**: Für die Aussage dieses Szenarios betrachten wir für Deutschland keine Stromimporte oder -exporte. Die historischen Stromerzeugungsdaten einiger europäischer Nachbarstaaten liegen aktuell nicht so umfangreich vor wie die für Deutschland, außerdem fehlen Werte zum Beispiel für im Ausland geplante Windenergie- oder PV-Ausbauziele.

[***Parameter für das mittlere Szenario im Jahr 2031 auf einen Blick***]{.underline}


```{r}
params_eeg2027 <- data.frame(
  Parameter = c(
    "Wind Onshore",
    "Wind Offshore",
    "Photovoltaik",
    "Bruttostromverbrauch",
    "Gesamter Nettostromverbrauch (exklusive Pumpstromerzeugung)",
    "Batteriespeicher (Kapazität)",
    "Batteriespeicher (Lade- und Entladeleistung)",
    "Pumpspeicher (Kapazität)",
    "Pumpspeicher (Lade- und Entladeleistung)",
    "Lastverschiebung (Zeitfenster)",
    "Lastverschiebung (max. Leistung)",
    "Steinkohle",
    "Braunkohle",
    "Neue Gaskraftwerke (StromVKG)"
  ),
  Wert = c(
    paste(format_SMC(wind_onshore_ziel_2030), "GW"),
    paste(format_SMC(wind_offshore_2030_realistisch), "GW"),
    paste(format_SMC(solar_ziel_2030), "GW"),
    paste(format_SMC(bruttostromverbrauch_zielwert), "TWh"),
    paste(format_SMC(gesamter_nettostromverbrauch_exkl_pse), "TWh"),
    paste(format_SMC(batterien_storage_capacity_in_gwh), "GWh"),
    paste(format_SMC(batterien_storage_charging_power_in_gw), "GW"),
    paste(format_SMC(pumpspeicher_storage_capacity_in_gwh), "GWh"),
    paste(format_SMC(pumpspeicher_storage_charging_power_in_gw), "GW"),
    "1 Stunde",
    "5 GW",
    paste(format_SMC(steinkohle_installierte_leistung_2031_01_01), "GW"),
    paste(format_SMC(braunkohle_installierte_leistung_2031_01_01), "GW"),
    "0 GW"
  ),
  Basis = c(
    '<a href="https://www.gesetze-im-internet.de/eeg_2014/__4.html" target="_blank">EEG §4</a>',
    '<a href="https://www.windguard.de/veroeffentlichungen.html?file=files/cto_layout/img/unternehmen/veroeffentlichungen/2026/Status%20des%20Offshore-Windenergieausbaus_Jahr%202025.pdf#page=5" target="_blank">WindGuard 2026</a>',
    '<a href="https://www.gesetze-im-internet.de/eeg_2014/__4.html" target="_blank">EEG §4</a>',
    "siehe oben",
    "siehe unten",
    '<a href="https://battery-charts.de/de/home-de/" target="_blank">Battery-Charts, April 2026</a>',
    '<a href="https://battery-charts.de/de/home-de/" target="_blank">Battery-Charts, April 2026</a>',
    '<a href="https://energy-charts.info/energy-charts_talks/Energy-Charts_Talks_51_Pumpspeicher.pdf" target="_blank">51. Energy-Charts Talks (01.09.2025)</a>',
    '<a href="https://www.energy-charts.info/charts/installed_power/chart.htm?l=de&c=DE&legendItems=1xcvt&expansion=p_inst_storage" target="_blank">Energy-Charts, 2026</a>',
    '1 Stunde Minimalflexibilität',
    'Schätzwert aufgrund von Experteninterviews',
    '<a href="https://www.gesetze-im-internet.de/kvbg/index.html" target="_blank">errechnet nach KVBG</a>',
    '<a href="https://www.gesetze-im-internet.de/kvbg/anlage_2.html" target="_blank">KVBG</a>',
    '<a href="https://table.media/assets/berlin/260420_stromvkg_entwurf_ressortabstimmung.pdf" target="_blank">StromVKG</a>'
  ),
  stringsAsFactors = FALSE
)

DT::datatable(
  params_eeg2027,
  rownames = FALSE,
  colnames = c("Parameter", "Wert", "Quelle"),
  options = list(
    # dom = "t",
    paging = FALSE,
    ordering = FALSE,
    searching = FALSE
    # columnDefs = list(
    #   list(width = "40%", targets = 0),
    #   list(width = "20%", targets = 1),
    #   list(width = "40%", targets = 2)
    # )
  ),
  escape = FALSE
  # class = "compact stripe"
)
```

<center></center>

**Modellierung**: Mithilfe der Stromerzeugung der zurückliegenden Jahre seit 2015, insbesondere der Auslastung der Anlagen, lässt sich abschätzen, welchen Anteil Wind- und Solarstrom unter diesen Bedingungen erreicht hätten. Wir gehen also in unserer Simulation von einer Wiederholung der beobachteten Wetterbedingungen aus und bewerten die Auswirkungen des Ausbaus von Windenergie- und Solaranlagen auf deren Anteil an der Deckung des Stromverbrauchs. Neben den simulierten Erzeugungswerten von Windenergie- und Solaranlagen werden in den Szenarien auch die historischen Erzeugungswerte von Biomasse- und Wasserkraftwerken sowie weiteren Quellen erneuerbarer Energie wie etwa Geothermie berücksichtigt. 

In der Wissenschaft werden Szenarien über zukünftige Stromerzeugungen mithilfe von aufwendigen Wetter- und Stromerzeugungsmodellen berechnet. Für unsere Absicht, eine fundierte Einschätzung über die Stromerzeugung mit Windenergie- und PV-Anlagen zu entwickeln und daraus Argumente für die Diskussion über die Ausgestaltung eines erneuerbaren Energiesystems abzuleiten, reicht es jedoch aus, ein Szenario auf Basis der historischen Stromerzeugungsdaten auf dem Wege eines Dreisatzes zu berechnen: Die historische Stromerzeugung pro installierter Leistung in Gigawatt wird mit der für die Zukunft angestrebten installierten Leistung multipliziert. 

Damit fließen auch Werte in die Modellierung ein, die sonst gesondert angenommen werden müssten, wie zum Beispiel Kraftwerksausfälle, geplante Abschaltungen wegen Wartung oder Abschaltauflagen für Windenergie-Anlagen.

Um den erhöhten Strombedarf zu berücksichtigen, wird die historische Lastkurve entsprechend nach oben verschoben. Die Lastkurve basiert auf der gesamten Netzlast, die den solaren Selbstverbrauch und industrielle Eigenversorgung einschließt, und entspricht damit dem gesamten Nettostromverbrauch. In unserer Simulation betrachten wir keine Stromimporte oder -exporte. Die integrierte Netzlast entspricht daher der gesamten Nettostromerzeugung. Wir passen die Lastkurve in diesem Szenario, wie oben erläutert, entsprechend an. Allerdings gibt das Gutachten der Bundesregierung Werte für den künftigen Strombedarf als Bruttostromverbrauch an. Der Wert ergibt sich aus der Bruttostromerzeugung, von der das Stromimportsaldo abgezogen wird (siehe Tabelle [AG Energiebilanzen Bericht 2024](https://ag-energiebilanzen.de/wp-content/uploads/AGEB_Jahresbericht2024_20250801_dt.pdf#page=37)). Von diesem Wert (`r format_SMC(bruttostromverbrauch_zielwert)` TWh) ziehen wir noch den Kraftwerkseigenverbrauch (Mittel zwischen 2020 und 2025 ~ 4,5 Prozent) und die Pumpstromerzeugung (Mittel zwischen 2020 und 2025 ~ 8 TWh) ab, um den gesamten Nettostromverbrauch von `r format_SMC(gesamter_nettostromverbrauch_exkl_pse)` TWh zu erhalten.


Der Strombedarf im Modell muss dabei zu jeder Stunde gedeckt sein. Um den Anteil von Windenergie- und PV-Anlagen zu simulieren, reicht es daher nicht aus, die historische Erzeugung für einen bestimmten Zeitraum auf den größeren Anlagenpark umzurechnen. 

Daher wird bei der Simulation für jede Stunde berechnet:  

- wie viel Strom Windenergie- und PV-Anlagen unter den Bedingungen des aktuellen Zeitraums mit den angestrebten Ausbauzielen für 2030 erzeugen könnten,  
- wie viele Überschüsse entstanden wären, 
- wie viel der Überschüsse durch Speicher aufgenommen werden könnte, 
- welchen Anteil des Bedarfs Windenergie- und PV-Anlagen (und weitere erneuerbare Energien) inklusive Speicher decken könnten, 
- wie groß die Lücke zwischen Erzeugung durch Windenergie- und PV-Anlagen (und weiteren erneuerbaren Energien) plus Speichern zum Bedarf ist, 
- wie die Lücke durch vorübergehendes Ab- und wieder Einschalten von Verbrauchern während eines Tages (Flexibilisierung) verringert werden kann. 

Flexibilisierung bezeichnet eine sehr wichtige Technik für ein vor allem auf Wind und Photovoltaik gestütztes Stromsystem. Die Idee dabei ist, dass bestimmte Verbraucher ohne Verlust von Komfort oder Funktion für eine begrenzte Zeit abgeschaltet und danach wieder eingeschaltet werden. Dazu können Kühlhäuser gehören, Wärmepumpen mit Speichern oder Ladevorgänge von Elektroautos. 

Die verbliebene Lücke müssten flexible Stromerzeuger schließen. 

Weil die Stromerzeugung durch Kohlekraftwerke nicht so flexibel gesteuert werden kann wie die durch Gaskraftwerke, verfährt das Modell bei der Berechnung wie oben unter den Erläuterungen zum Kohlesockel beschrieben.  

Bei den Erträgen von Windenergie- und PV-Anlagen geht die Forschung davon aus, dass durch größere und effizientere Anlagen vor allem bei der Windkraft die Auslastung steigen wird. Für 2030 wird eine Steigerung der Auslastung zwischen 11 Prozent ([AGORA](https://www.agora-energiewende.de/veroeffentlichungen/klimaneutrales-deutschland-2045/)) und 34 Prozent ([DENA](https://www.ewi.uni-koeln.de/cms/wp-content/uploads/2022/03/211005_EWI-Gutachterbericht_dena-Leitstudie-Aufbruch-Klimaneutralitaet.pdf)) für Onshore-Anlagen, zwischen 8 Prozent ([AGORA](https://www.agora-energiewende.de/veroeffentlichungen/klimaneutrales-deutschland-2045/)) und 25 Prozent ([ISE](https://www.ise.fraunhofer.de/de/veroeffentlichungen/studien/wege-zu-einem-klimaneutralen-energiesystem.html)) für Offshore-Anlagen und zwischen 4 Prozent ([DENA](https://www.ewi.uni-koeln.de/cms/wp-content/uploads/2022/03/211005_EWI-Gutachterbericht_dena-Leitstudie-Aufbruch-Klimaneutralitaet.pdf)) und 16 Prozent ([ISE](https://www.ise.fraunhofer.de/de/veroeffentlichungen/studien/wege-zu-einem-klimaneutralen-energiesystem.html)) für PV-Anlagen im Vergleich zur durchschnittlichen Auslastung der zurückliegenden acht Jahre angenommen.

Im Gegensatz dazu ist jedoch in den historischen Daten noch kein deutlicher Trend zu einer Steigerung der Auslastung zu erkennen ([Energy Charts](https://www.energy-charts.info/downloads/Stromerzeugung_2025.pdf), [Arbeitsentwurf EEG-2027](https://table.media/assets/climate/eeg-entwurf-20260226.pdf#page=373)). Daher nehmen wir für dieses Szenario noch keine Steigerung der Auslastungen an. 

In der Simulation werden Speicher – Batterien wie Pumpspeicherkraftwerke – ausschließlich dann geladen, wenn die erneuerbaren Energien mehr Strom erzeugen, als benötigt wird. Die Speicher werden zunächst vollständig entladen, bevor andere Quellen zur Deckung des Bedarfs herangezogen werden. Wir nehmen dabei vereinfacht an, dass die Speicher (vor allem kurzfristige Batteriespeicher) nahezu verlustfrei arbeiten. Es ist denkbar, dass sich die Batterien auch anders steuern ließen, um Lastspitzen optimaler abzufangen. In unserem optimistischen Szenario übernehmen das die großzügig genutzten Flexibilitäten.

### Datengrundlage und Code

Alle Daten zur gesamten Nettostromerzeugung, zur installierten Leistung und zur Netzlast stammen von den [Energy-Charts](https://energy-charts.info) des Fraunhofer-Instituts für Solare Energiesysteme (ISE). Daten zur Erzeugung und zur Last haben eine Auflösung von 15 Minuten und werden für die Simulation stündlich zusammengefasst. Die Daten zur installierten Leistung werden für Batterien, Biomasse, Solar und Windenergie monatlich aktualisiert, für die übrigen Stromerzeuger jährlich.

Für die Berechnung der Auslastung schreiben wir den aktuellen Wert für den laufenden Monat oder das laufende Jahr fort. Dies führt möglicherweise zu einer geringen Überschätzung der Auslastung, da der Erzeugung real eine etwas höhere Leistung zu Grunde liegt. Diese Abweichung ist aufgrund der geringen Ausbaugeschwindigkeit im Verhältnis zur bereits installierten Leistung sehr gering und für die qualitativen Aussagen des Reports nicht relevant.  

Den Code für diesen Data Report stellen wir [hier]( `r file.path(imagepath, paste0(today()[Datumsprefix_files], "_"[Datumsprefix_files], file_name_code))` ){target="_blank"} zur Verfügung. Neben Standard R-Paketen wird ein eigenes Paket verwendet, das [hier](https://github.com/sciencemediacenter/SMChelpR){target="_blank"} bereitgestellt wird.

### Ihre Ansprechpersonen in Redaktion und SMC Lab

Wenn Sie Fragen zu diesen Daten haben oder weitere Auswertungen erhalten möchten, kann das SMC Lab Auswertungen erzeugen.


*Redaktion*\
Sönke Gäthke, Redakteur für Energie und Mobilität
[redaktion\@sciencemediacenter.de](mailto:redaktion@sciencemediacenter.de){.email}

*Datenauswertung*\
Simon Essink
[lab\@sciencemediacenter.de](mailto:lab@sciencemediacenter.de){.email}


Telefon: +49 221 8888 25-0\
E-Mail Inhalt: [redaktion\@sciencemediacenter.de](mailto:redaktion@sciencemediacenter.de){.email}\
E-Mail Datenauswertung: [lab\@sciencemediacenter.de](mailto:lab@sciencemediacenter.de){.email}
:::
