Schienenverkehr (1A3c)

Bemerkung

This project and documentation is under active development!

Das Schienenverkehrsmodul in TREMOD berechnet Energieverbrauch, Treibhausgas- (THG) und Luftschadstoffemissionen des Schienenverkehrs in Deutschland für den Zeitraum 1960–2050. Es umfasst:

  • Personenfern- und -nahverkehr (z. B. ICE, Regionalzüge, S-Bahnen, U-Bahnen)

  • Güterverkehr (inkl. Rangierbetrieb)

  • Verkehrsleistungen (Personen- und Tonnenkilometer)

  • Betriebsleistungen (Zugkilometer)

  • Energieverbrauch (Strom, Diesel, Biodiesel, Festbrennstoffe wie Kohle in historischen Daten)

  • Direkte Abgasemissionen sowie Vorkettenemissionen für verschiedene Schadstoffe (z. B. NOₓ, CO₂, PM, SO₂).

1. Methodik

Die Berechnung basiert auf einem Bottom-up-Ansatz, bei dem Emissionen aus Verkehrsleistungen, Betriebsleistungen und spezifischen Emissionsfaktoren abgeleitet werden. Die Datenquellen umfassen Statistiken des Statistischen Bundesamts (DESTATIS), des Verbands Deutscher Verkehrsunternehmen (VDV) und der DB AG (u. a. Rail Environment Centre).

Die Eingangsdaten setzen sich zusammen aus:

  • Verkehrs- und Betriebsleistungen (z. B. Personenkilometer, Tonnenkilometer, Zugkilometer), die jährlich von DB AG und VDV erhoben und für TREMOD aufbereitet werden.

  • Energieverbrauch, differenziert nach Strom (für elektrifizierte Strecken) und Diesel (für Nicht-E-Strecken) sowie historischen Brennstoffen wie Kohle.

  • Emissionsfaktoren:

    • Für elektrischen Betrieb hängt der Faktor vom Jahresmittelwert des deutschen Strommix ab, inklusive Vorkettenemissionen (z. B. durch Stromerzeugung).

    • Für Dieselzüge basieren die Faktoren auf spezifischen Werten der Bahn, die im ISO-F-Zyklus gemessen und vom DB-Umweltzentrum jährlich bereitgestellt werden.

Die Aktualisierung erfolgt jährlich durch Anpassung der Leistungsdaten (z. B. durch DB AG oder VDV-Erhebungen) sowie der Verbrauchs- und Emissionsfaktoren. Für die Prognose bis 2050 werden Trendszenarien verwendet, die technologische Fortschritte (z. B. strengere Abgasgrenzwerte, Remotorisierung) und die Entwicklung des Fahrzeugparks berücksichtigen.

Die Einzelschritte werden im folgenden beschrieben. Die verwendeten Rechengrößen sind in folgender Tabelle dargestellt:

Größen

Symbol

Spaltenvariable

Bedeutung

\(E^{\text{dir}}\)

e_direkt

Direkter Energieverbrauch bzw. direkte Basisemission

\(E\)

e_direkt (Endwert)

Resultierende Emission je Schadstoff

\(\mathit{vl}\)

vl

Verkehrsleistung

\(\mathit{vlanteil}\)

vlanteil

Anteil der Verkehrsleistung

\(\mathit{baanteil}\)

baanteil

Anteil der Betriebsart

\(\mathit{alg}\)

alg

Auslastungsgrad

\(\mathit{bl}\)

bl / bl1 / bl2

Betriebsleistung

\(\mathit{evspez}\)

evspez

spezifischer Energieverbrauch

\(\mathit{aendfaktor}\)

aendfaktor

Änderungsfaktor (Energieverbrauch)

\(\mathit{efa}\)

efa

Emissionsfaktor

\(\mathit{emaendfaktor}\)

emaendfaktor

Änderungsfaktor (Emissionsfaktor)

\(\alpha^{\mathrm{hc}}\)

anteil

HC-Speziesanteil (NMHC-Differenzierung)

\(\alpha^{\mathrm{bio}}\)

anteil (Biofuels)

Biokraftstoffanteil

\(\mathit{efaspez\_tj}\)

efaspez_tj

spezifischer treibstoffabgeleiteter Emissionsfaktor

\(\mathit{factor}\)

factor

THG-/CO₂-Äquivalenzfaktor

\(\mathit{bc\_share}\)

bc_shares

Black-Carbon-Anteil an PM (Default 0,65)

Bemerkung

  • Für die Leistungsart-Fallunterscheidung gilt \(\mathit{vl}, \mathit{bl} = 0\), wenn \(l = 2\) (sonst die berechneten Werte).

  • Komponenten/Betriebsarten mit Nullemission (DZE) setzen \(E = 0\) für die betroffenen Kombinationen aus \(s, b, n\).

  • Die Skalierungen \(10^{6}\) und \(10^{3}\) ergeben sich aus der Einheitenumrechnung der jeweiligen Faktoren.

1.1 Betriebsleistung und Energieverbrauch

Zunächst werden Verkehrsleistung (vl) und Betriebsleistung (bl) auf Zugbetriebs- und Rangierebene berechnet, anschließend der direkte Energieverbrauch. Die Verkehrsleistung wird nach Zuggattungen (z. B. ICE, Regionalzug, Güterzug) und Betriebsarten (z. B. Zugbetrieb, Rangieren) differenziert. Die Betriebsleistung (z. B. Zugkilometer) ergibt sich aus der Verkehrsleistung, geteilt durch die mittlere Beladung (alg), d.h. Personen bzw. Tonnen pro Zug.

Zugbetrieb (Leistungsart 1)

Für den Zugbetrieb wird die Verkehrsleistung direkt aus den Eingangsdaten abgeleitet:

\[\begin{aligned} \mathit{vl1} &= \mathit{vl} \cdot \mathit{vlanteil} \cdot \mathit{baanteil}, &\qquad \mathit{bl1} &= \frac{\mathit{vl1}}{\mathit{alg}} \end{aligned}\]

Rangierbetrieb (Leistungsart 2)

Die Leistungen im Rangierbetrieb der DB AG (idunternehmen = 1) werden anteilig aus der Summe der Verkehrsleistungen im Zugbetrieb (\(\mathit{vl3}\)) abgeleitet:

\[\begin{split}\begin{aligned} \mathit{vl3} &= \sum \mathit{vl1}, &\qquad \mathit{bl3} &= \sum \mathit{bl1} \\[2pt] \mathit{vl1}_{\text{Rangier}} &= \mathit{vl3} \cdot \mathit{baanteil}_{\text{Rangier}}, &\qquad \mathit{bl1}_{\text{Rangier}} &= \mathit{bl3} \cdot \mathit{baanteil}_{\text{Rangier}} \end{aligned}\end{split}\]

Energieverbrauch

Der spezifische Energieverbrauch (evspez) ist abhängig von Zugtyp, Antrieb und Energieart. Er wird auf Basis der Betriebsleistung \(\mathit{bl1}\) berechnet. Der spezifische Energieverbrauch setzt sich aus einem Basisverbrauch und einem jährlichen Änderungsfaktor (Effizienzentwicklung) zusammen.

\[Ev_{\text{direkt}} = \frac{\mathit{evspez} \cdot \mathit{aendfaktor} \cdot \mathit{bl1}}{10^{6}}\]

Für die Berichterstattung wird zudem die Größe \(\mathit{vl2}\) und \(\mathit{bl2}\) ausgewiesen. Hierbei wird berücksichtigt, dass für Rangierbetrieb (Leistungsart = 2) keine Verkehrsleistung angesetzt wird, da Rangierfahrten keine Verkehrsleistung im klassischen Sinne erbringen.

\[\begin{split}\begin{aligned} \mathit{vl2} = \begin{cases} 0 & \text{wenn } \mathit{idleistungsart} = 2 \\[4pt] \mathit{vl1} & \text{sonst} \end{cases} \qquad \mathit{bl2} = \mathit{bl1} \end{aligned}\end{split}\]

Abhängige Variablen: vl, vlanteil, baanteil, alg, evspez (spezifischer Energieverbrauch), aendfaktor (Änderungsfaktor), differenziert nach den Parametern Szenario, Bezugsjahr, Unternehmen, Verkehrsart, Zuggattung, Betriebsart, Leistungsart und Energieträger.

1.2 Direkte Emissionen

Aus dem Energieverbrauch werden die direkten Emissionen für einzelne Schadstoffe (z. B. NOₓ, CO, HC, Partikel) über Emissionsfaktoren (efa) abgeleitet. CO₂ und SO₂ werden separat behandelt, da sie in erster Linie vom Energieträger und des Kraftstoffverbrauchs abhängen (siehe Abschnitt 1.3).

\[\begin{split}\begin{aligned} \mathit{efa}^{(1)} &= \mathit{efa} \cdot \mathit{emaendfaktor} \\[6pt] Em_{\text{direkt}}^{(1)} &= \begin{cases} 0 & \text{wenn } \mathit{efa}^{(1)} = \text{null} \\[4pt] \dfrac{Ev_{\text{direkt}} \cdot \mathit{efa}^{(1)}}{10^{3}} & \text{sonst} \end{cases} \end{aligned}\end{split}\]

Ferner werden die von HC abgeleiteten Schadstoffkomponenten über ihre jeweiligen Anteile an den Kohlenwasserstoff-Gesamtemissionen bestimmt.

\[Em_{\text{direkt}}^{(2)} = Em_{\text{direkt}}^{(1)} \cdot \mathit{anteil}\]

Für weitere Betriebsarten, z. B. elektrische Lokomotiven mit direkten Nullemissionen (DZE, idbetriebsart ∈ {11, 12, 13}), wird ein separater Datensatz mit Nullwerten erzeugt:

\[Em_{\text{direkt, DZE}}^{(1)} = 0\]

Die Teilergebnisse werden anschließend zu einer Tabelle vereinigt:

\[E_{\text{direkt}} = \bigl\{\, Ev_{\text{direkt}},\ Em_{\text{direkt}}^{(1)},\ Em_{\text{direkt}}^{(2)},\ Em_{\text{direkt, DZE}}^{(1)} \,\bigr\}\]

1.3 Nachgelagerte Ergänzungen

Nach der Berechnung der direkten Emissionen werden multiplikative Faktoren für spezifische Anpassungen angewendet. Dies betrifft:

  • Biokraftstoffanteile

  • Emissionen, die auf Basis des Kraftstoffverbrauchs abgeleitet werden

  • Treibhausgasäquivalente

  • Black Carbon Emissionen.

Die Berechnung erfolgt sequentiell:

Biokraftstoffanteile

Die Emissionen werden mit dem Biokraftstoffanteil multipliziert. Da die Berechnung auf Basis des ursprünglichen direkten Emissionswerts \(Em_{\text{direkt}} \in \{Em_{\text{direkt}}^{(1)}, Em_{\text{direkt}}^{(2)}, Em_{\text{direkt, DZE}}^{(1)}\}\) erfolgt, ergibt sich:

\[Em_{\text{direkt}}^{(3)} = Em_{\text{direkt}} \cdot \mathit{anteil}_{\text{bio}}\]

Kraftstoffverbrauchsabhängige Emissionen

Für Emissionen, die auf Basis des Kraftstoffverbrauchs berechnet werden, erfolgt eine Umrechnung ausgehend von den biokraftstoffbereinigten Werten:

\[Em_{\text{direkt}}^{(4)} = Em_{\text{direkt}}^{(3)} \cdot \mathit{efaspez\_tj}\]

Treibhausgase (THG-Äquivalente)

Die Berechnung der \(\text{CO}_2\)-Äquivalente erfolgt durch Multiplikation mit dem entsprechenden THG-Faktor und anschließender Aufsummierung der \(\text{CO}_2\)-Äquivalente je Schadstoff (z.B: CO2, CH4, N2O):

\[Em_{\text{direkt}}^{(5)} = Em_{\text{direkt}} \cdot \mathit{factor}\]

Black Carbon (BC)

Black Carbon Emissionen (\(\text{idss} = 6\)) werden als Anteil von den Partikelemissionen (\(Em_{\text{direkt}}\)) abgeleitet:

\[Em_{\text{BC}} = Em_{\text{direkt}} \cdot \mathit{bc\_shares}, \qquad \mathit{bc\_shares} = 0{,}65\]

Abhängige Variablen: anteil (Biokraftstoffanteil), efaspez_tj (spez. treibstoffabgeleiteter EF), factor (THG-/CO₂-Äquivalenzfaktor), bc_shares (Black Carbon-Anteil an PM).

1.4 Gesamtberechnung

Die zusammenfassenden Formeln für Energieverbrauch und Emissionen basieren auf den zuvor beschriebenen Schritten. Sie berücksichtigen alle relevanten Indizes bzw. Differenzierungen (z. B. Szenario, Unternehmen, Verkehrsart) und Größen (z. B. Verkehrsleistung, Emissionsfaktoren).

Energieverbrauch

\[E^{\text{dir}}_{\,z,u,v,j,g,b,l,n} = \frac{ \mathit{evspez}_{\,l,b,g}\cdot\mathit{aendfaktor}_{\,j,l,b,g,u,z}\cdot\mathit{bl}_{\,z,u,v,j,g,b,l} }{10^{6}}\]

mit der Betriebsleistung

\[\mathit{bl}_{\,z,u,v,j,g,b,l} = \frac{\mathit{vl}_{\,z,v,j}\cdot\mathit{vlanteil}_{\,z,v,j,u}\cdot\mathit{baanteil}_{\,z,u,j,g,b}} {\mathit{alg}_{\,z,u,j,g,b,l}}\]

Emissionen

\[E_{\,z,u,v,j,g,b,l,n,s} = E^{\text{dir}}_{\,z,u,v,j,g,b,l,n} \cdot \frac{\mathit{efa}_{\,s,l,b,g}\cdot\mathit{emaendfaktor}_{\,s,l,b,g}}{10^{3}} \cdot \alpha^{\mathrm{hc}}_{\,s,n} \cdot \alpha^{\mathrm{bio}}_{\,z,j,n} \cdot k^{\mathrm{nach}}_{\,s}\]

wobei der nachgelagerte Faktor je nach Schadstoffpfad nur einen der folgenden Terme annimmt:

\[\begin{split}k^{\mathrm{nach}}_{\,s} = \begin{cases} \mathit{efaspez\_tj}_{\,j,n,L} & \text{treibstoffabgeleitet}\ (s=5)\\ \mathit{factor}_{\,s} & \text{THG- / CO}_2\text{-Äquivalente}\\ \mathit{bc\_share}\ (=0{,}65) & \text{Black Carbon}\ (s=6)\\ 1 & \text{sonst} \end{cases}\end{split}\]

Indizes

Index

Spaltenvariable

Bedeutung

\(z\)

idszenario / idszenbahn

Szenario / Bahnszenario

\(u\)

idunternehmen

Unternehmen

\(v\)

idverkehrsart

Verkehrsart

\(j\)

bezugsjahr

Bezugsjahr

\(g\)

idzuggattung

Zuggattung

\(b\)

idbetriebsart

Betriebsart (z. B. Zug-/Rangierbetrieb)

\(l\)

idleistungsart

Leistungsart

\(n\)

idenergy

Energieträger

\(s\)

idss

Schadstoff / Komponente

\(L\)

idland

Land (nur treibstoffabgeleitet)

1.5 Energiebilanzkorrektur

Berechnung des TREMOD-Energieverbrauchs: Der Traktionsenergieverbrauch wird in TREMOD bottom-up aus Verkehrsleistungen, Betriebsleistungen und spezifischen Verbräuchen abgeleitet.

Vergleich mit der Energiebilanz: Die Summe der TREMOD-Ergebnisse für DB AG, Nichtbundeseigene Eisenbahnen (NE)-Bahnen und Hafen-/Werkbahnen (HWB) wird mit dem Wert aus der Energiebilanz der Arbeitsgemeinschaft Energiebilanzen (kurz AGEB) verglichen und hieraus ein Energiebilanzkorrekturfaktor berechnet. Der Faktor ergibt sich aus dem Verhältnis von AGEB-Wert zur TREMOD-Summe:

\[k_n = \frac{E_{\text{AGEB},n}}{E_{\text{TREMOD,Summe},n}}\]

mit:

  • \(E_{\text{AGEB},n}\): Energieverbrauch des Schienenverkehrs für Energieträger \(n\) laut AGEB.

  • \(E_{\text{TREMOD,Summe},n}\): Summe der berechneten Verbrauchswerte für DB AG, NE-Bahnen und HWB in TREMOD.

Falls der AGEB-Wert niedriger ist als die TREMOD-Summe, wird der Korrekturfaktor < 1 (Reduktion der TREMOD-Werte). Wenn jedoch der AGEB-Wert höher ist, wird der Faktor > 1 (Erhöhung der TREMOD-Werte).

Anwendung des Faktors: Die berechneten Energieverbrauchswerte in TREMOD werden mit dem Korrekturfaktor multipliziert, um die Übereinstimmung mit der Energiebilanz herzustellen. Die korrigierten Energieverbrauchswerte \(E_{\text{korr},n}\) für den Schienenverkehr ergeben sich aus:

\[E_{\text{korr},n} = E_{\text{TREMOD},n} \cdot k_n\]

wobei:

  • \(E_{\text{korr},n}\): Korrigierter Energieverbrauch des Schienenverkehrs für Energieträger \(n\) (Strom oder Diesel).

  • \(E_{\text{TREMOD},n}\): Berechneter Energieverbrauch in TREMOD für Energieträger \(n\).

  • \(k_n\): Korrekturfaktor für Energieträger \(n\).

Für die Ergebnisausgabe nach Energiebilanzprinzip und ZSE (siehe nächster Abschnitt) werden auch die Emissionen mit dem Korrekturfaktor multipliziert.

1.6 ZSE-Ausgabe

Die korrigierten Energieverbrauchsdaten bilden auch die Grundlage für die nationale Berichterstattung im zentralen System Emissionen (ZSE). TREMOD verfügt hierzu über eine eigene ZSE-Schnittstelle für den Verkehr.

Das ZSE unterscheidet im Schienenverkehr nach Kraftstoffart und Bezugsjahr. Dabei wird eine eigene Nomenklatur verwendet, welche in entsprechenden Zuordnungstabellen hinterlegt ist. Auch wird nur ein Teil der in TREMOD verfügbaren Schadstoffe für das ZSE berichtet.

Das ZSE beinhaltet folgende Kenngrößen:
  • Aktivitätsrate: für direkte Emissionen in Terajoule (TJ)

  • Emissionsfaktoren: für direkte Emissionen in kg/TJ

Die Emissionsfaktoren berechnen sich aus dem Quotient aus den Emissionen und dem Endenergieverbrauch je Bezugsjahr und ZSE-Kategorie. Die Ergebnisse nach Inlandsprinzip werden nicht korrigiert.

2. Implementierung

Sämtliche Abfragen und Berechnungen von TREMOD Rail (Schienenverkehr) sind in Python und der Bibliothek Polars umgesetzt. Die Datenhaltung in mehreren PostgreSQL-Datenbanken. Im folgenden werden die Datenschnittstellen, Eingangsdatenformate und Berechnungsschritte skizziert.

2.1 Datenschnittstellen

Alle Eingangsdaten und Definitionen sind als Tabellen in der SQL-Datenbank gespeichert und können dort verändert werden, z.B. für jährliche Updates. Sie werden über das Modul tableoperations aufgerufen und in die Berechnungen für TREMOD-Road integriert. Der Name der Datenbank setzt sich aus „tremod_rail“ + „Versionsnummer“ zusammen. Die Datentabellen können entweder aus einer lokalen SQLite-Datenbank oder über Remote-Zugriff (z.B. Postgres) abgerufen werden.

Alle für die Berechnungen des Schienenverkehrs verwendeten Tabellen werden über die Klasse PersistanceLayer im Modul tableoperations.py des Rechenmodells füe den Schienenverkehr definiert und vorgeladen.

Sie beinhaltet folgende Methoden, welche im folgenden kurz beschrieben werden:

Methoden der Klasse PersistanceLayer

Methode

Beschreibung

get_common

Verkehrsträgerübergreifende Daten, Definitionen und Emissionsfaktoren

get_base_data

Verkehrsleistungs- und Betriebsdaten im Schienenverkehr

get_emission_factors

Bahnspezifische Emissionsfaktoren

get_definitions

Definitionsdateien des Verkehrsträgers Schiene (z.B. Szenarien)

Die Hilfsmethoden get_results und write_to_db dienen dem Lesen und Schreiben der Ergebnisse zu Bestand, Fahr- und Verkehrsleistung sowie Emissionen in die Datenbank. convert_pol_dtypes dient zur Vereinheitlichung von Datentypen für die Berechnungen in Polars.

2.2 Eingangsdaten

Die Quellen zu den Eingangsdaten sind in den UBA-Berichten zur TREMOD-Aktualisierung dokumentiert. Daher wird hier nur auf die für die Emissionsberechnung wichtigsten Tabellen eingegangen, welche im Rahmen der jährlichen Updates angepasst werden.

Common data

Ergänzend siehe ggf. Tabellen, die bereits für den Straßenverkehr (1A3b) erläutert wurden.

Spezifische Emissionsfaktoren

Spaltenname

Datentyp

Beschreibung

idland

integer

siehe tg_land

idvtr

integer

siehe tg_vtraeger

idss

integer

Schadstoff

jahr

bigint

Bezugsjahr

idenergy

integer

siehe tg_energie

efaspez

double precision

Emissionsfaktor g/kg

efaspez_tj

double precision

Emissionsfaktor kg/TJ

ppm

double precision

Schwefelanteil Kraftstoff in ppm

com

text

Kommentar

Biokraftstoffanteile

Spaltenname

Datentyp

Beschreibung

idszenario

integer

siehe btg_szenario

bezugsjahr

integer

Bezugsjahr

idenergy

integer

siehe tg_energie

idenergy_bezug

integer

siehe tg_energie

anteil

real

Anteil in % (energetisch)

idvtr

integer

Verkehrsträger (Straße, Schiene, Binnenschiff, Luft)

Basisdaten (Aktivitätsdaten)

Verkehrsleistungsanteile

Spaltenname

Datentyp

Beschreibung

idvlantvar

integer

Identifikationsnummer Variante Verkehrsleistungsanteil

idunternehmen

integer

Identifikationsnummer Unternehmen

idverkehrsart

integer

Identifikationsnummer Verkehrsart

bezugsjahr

integer

Bezugsjahr

idzuggattung

integer

Identifikationsnummer Zuggattung

vlanteil

double precision

Verkehrsleistungsanteil

Betriebsartanteile

Spaltenname

Datentyp

Beschreibung

idbavar

integer

Identifikationsnummer Variante Betriebsart

idunternehmen

integer

Identifikationsnummer Unternehmen

bezugsjahr

integer

Bezugsjahr

idzuggattung

integer

Identifikationsnummer Zuggattung

idbetriebsart

integer

Identifikationsnummer Betriebsart

idleistungsart

integer

Identifikationsnummer Leistungsart

baanteil

double precision

Anteil Betriebsart

Auslastungsgrade

Spaltenname

Datentyp

Beschreibung

idalgvar

integer

Identifikationsnummer Variante Auslastungsgrad

idunternehmen

integer

Identifikationsnummer Unternehmen

bezugsjahr

integer

Bezugsjahr

idzuggattung

integer

Identifikationsnummer Zuggattung

idbetriebsart

integer

Identifikationsnummer Betriebsart

idleistungsart

integer

Identifikationsnummer Leistungsart

alg

double precision

Auslastungsgrad

Verkehrsleistungen

Spaltenname

Datentyp

Beschreibung

idvlvar

integer

Identifikationsnummer Variante Verkehrsleistung

idunternehmen

integer

Identifikationsnummer Unternehmen

idverkehrsart

integer

Identifikationsnummer Verkehrsart

bezugsjahr

integer

Bezugsjahr

vl

double precision

Verkehrsleistung

com

text

Anmerkung Verkehrsleistung

Emissionsfaktoren

Emissionsfaktoren

Spaltenname

Datentyp

Beschreibung

idzugart

integer

Identifikationsnummer Zugart

idbetriebsart

integer

Identifikationsnummer Betriebsart

idleistungsart

integer

Identifikationsnummer Leistungsart

idss

integer

Identifaktionsnummer Schadstoff

efa

double precision

Emissionsfaktor

com_efa

text

Anmerkung Emissionsfaktor

Energieverbrauchsfaktoren

Spaltenname

Datentyp

Beschreibung

idzuggattung

integer

Identifikationsnummer Zuggattung

idbetriebsart

integer

Identifikationsnummer Betriebsart

idleistungsart

integer

Identifikationsnummer Leistungsart

evspez

double precision

Spezifischer Energieverbrauch

com_evspez

text

Anmerkung zu spez. Energieverbrauch

Anpassungsfaktoren des Energieverbrauchs

Spaltenname

Datentyp

Beschreibung

idenergievar

integer

Identifikationsnummer Variante Energieträger

idunternehmen

integer

Identifikationsnummer Unternehmen

idzuggattung

integer

Identifikationsnummer Zuggattung

idbetriebsart

integer

Identifikationsnummer Betriebsart

idleistungsart

integer

Identifikationsnummer Leistungsart

bezugsjahr

integer

Bezugsjahr

aendfaktor

double precision

Änderungsfaktor Energieverbrauch

Änderungsfaktoren der Emissionen

Spaltenname

Datentyp

Beschreibung

idemvar

integer

Identifikationsnummer Variante Emission

idunternehmen

integer

Identifikationsnummer Unternehmen

idzugart

integer

Identifikationsnummer Zugart

idbetriebsart

integer

Identifikationsnummer Betriebsart

idleistungsart

integer

Identifikationsnummer Leistungsart

bezugsjahr

integer

Bezugsjahr

idss

integer

Identifikationsnummer Schadstoff

emaendfaktor

double precision

Änderungsfaktor Emission

Definitionen

Szenariendefinition

Spaltenname

Datentyp

Beschreibung

idszenbahn

integer

Identifikationsnummer Szenario

idverkehrsart

integer

Identifikationsnummer Verkehrsart

bezugsjahr

integer

Bezugsjahr der Szenariendefinition

idunternehmen

integer

Identifikationsnummer Unternehmen

idvlvar

integer

Identifikationsnummer Variante Verkehrsleistung

idvlantvar

integer

Identifikationsnummer Variante Verkehrsleistungsanteil

idalgvar

integer

Identifikationsnummer Variante Auslastungsgrad

idbavar

integer

Identifikationsnummer Variante Betriebsart

idenergievar

integer

Identifikationsnummer Variante Energieträger

idemvar

integer

Identifikationsnummer Variante Emissionen

idenergieerzvar

integer

Identifikationsnummer Variante Energieerzeugung

idland

integer

Identifikationsnummer Land

2.3 Berechnungen

Die eigentliche Emissionsberechnung des Schienenverkehrs ist in der Klasse RailEmissions im Modul rail.src.emissions gebündelt. Sie lädt beim Initialisieren die benötigten Eingangsdaten (Basis- bzw. Aktivitätsdaten, Energieverbrauchs- und Emissionsfaktoren, Definitionen sowie verkehrsträgerübergreifende Daten) über die Klasse PersistanceLayer und stellt darauf aufbauend die einzelnen Berechnungsschritte als Methoden bereit.

Das folgende Ablaufdiagramm gibt einen Überblick über das Zusammenspiel dieser Methoden und den Datenfluss zwischen ihnen. Ausgehend von den Eingangsdaten werden in der Methode calculate_tblsce_rail_sys_d_trend zunächst die direkten Emissionen über die gesamte interne Kette (Verkehrs- und Betriebsleistung, Energieverbrauch, Emissionsfaktoren, HC-Differenzierung und Nullemissions-Komponenten) berechnet und in direct_emissions abgelegt. Die nachgelagerten Methoden (z. B. Biokraftstoffanteile, treibstoffabgeleitete Emissionen, Treibhausgas-Äquivalente und Black Carbon) bauen auf diesem Zwischenergebnis bzw. auf merged_results auf und ergänzen die Gesamtergebnisse schrittweise.

Ablaufdiagramm der Emissionsberechnung

Code-Beschreibung:

Die nachfolgende Übersicht wurde aus den Docstrings des Moduls rail.src.emissions erzeugt und dokumentiert die Klasse RailEmissions mit allen öffentlichen Methoden. Sie beschreibt für jede Methode kurz ihre Aufgabe, die verarbeiteten Eingangsdaten sowie die zurückgegebenen Ergebnisse und bildet damit die konkrete Implementierung der zuvor dargestellten Berechnungsschritte ab. Die einzelnen Methoden sind in der Reihenfolge ihres Aufrufs im Ablaufdiagramm zu lesen.

class rail.src.emissions.RailEmissions(local=False, trmd_version='701')

Bases: object

static add_dze_comp_modes(energy_consumption: DataFrame, res_dze_comp_modes: DataFrame) DataFrame

Adds modes with zero direct emissions (DZE) to the energy consumption DataFrame by performing a left join with the DZE DataFrame. The method filters rows based on specific criteria and adds additional columns for further processing.

Parameter:
  • energy_consumption – A Polars DataFrame containing energy consumption data.

  • res_dze_comp_modes – A Polars DataFrame containing DZE modes.

Rückgabe:

A Polars DataFrame with the joined and processed data.

bc_emissions(bc_shares=0.65)
Calculates black carbon emissions based on predefined shares and

applies necessary transformations to generate updated emission data.

Verursacht:
  • KeyError – If expected, keys are missing in the self.definitions or bc_shares data structures.

  • ValueError – If data alignment issues occur during table join operations.

Rückgabe:

DataFrame containing the black carbon emissions, updated with weighted values based on specific shares and segments.

Rückgabetyp:

pd.DataFrame

biofuelshares()

Calculates and integrates the share of biofuels in the energy mix based on given parameters stored in the instance’s attributes. Filters only relevant biofuels data, performs merging, and adjusts energy values proportional to the biofuel shares.

Verursacht:

KeyError – If required keys are missing during filtering, joining, or renaming operations.

Rückgabe:

Updated DataFrame where the energy values are adjusted to include biofuel shares, and unnecessary intermediate columns are dropped.

Rückgabetyp:

pol.DataFrame

static calc_em_excl_co2_so2(energy_consumption: DataFrame, ef_excl_co2_so2: DataFrame) DataFrame

Calculates emissions excluding CO2 and SO2 based on energy consumption and emission factors. This method joins the energy consumption DataFrame with the emission factors DataFrame based on specific keys, and computes adjusted emissions.

Parameter:
  • energy_consumption – The DataFrame contains energy consumption data.

  • ef_excl_co2_so2 – The DataFrame contains emission factors excluding CO2 and SO2.

Rückgabe:

A DataFrame with enriched and computed emission data.

Rückgabetyp:

pol.DataFrame

calc_em_hc_diff(em_excl_co2_so2: DataFrame) DataFrame

Calculates various hydrocarbon related emissions based on input emission data. Joins the em_excl_co2_so2 DataFrame with specific emission factor information and computes additional columns for the resulting dataset.

Parameter:

em_excl_co2_so2 – A Polars DataFrame containing emission data excluding CO2 and SO2. The input should include columns allowing an inner join with the emission factor DataFrame, such as idss and idenergy.

Rückgabe:

A Polars DataFrame containing the resulting dataset after processing, including relevant scenario, company, traffic type, and calculated emission data.

calc_energy_consumption(ops_merged: DataFrame) DataFrame

Calculates energy consumption for the provided dataset by merging energy-related data from multiple dataframes and performing necessary transformations.

Parameter:

ops_merged (pol.DataFrame) – The input DataFrame containing operational data that needs to be processed and enhanced with energy consumption details.

Rückgabe:

A DataFrame with the calculated energy consumption and various additional attributes derived through the joining and transformation steps.

Rückgabetyp:

pol.DataFrame

calculate_tblsce_rail_sys_d_trend() DataFrame

Calculates the rail system emissions trend data and prepares the resulting dataset.

This method processes train and shunting operation performances, computes energy consumption, and applies emission factors to estimate emissions excluding CO2 and SO2. It incorporates differential results for hydrocarbon-related emissions and identifies compensatory modes. The method merges all partial results into a final dataset, computes direct emissions, and returns the complete DataFrame.

Rückgabe:

A DataFrame containing the computed rail system direct emissions trend data.

Rückgabetyp:

pol.DataFrame

static compare_dtypes(df1, df2)

Compare the data types of two DataFrame objects.

This static method compares the data types of columns in two given DataFrame objects. It returns a dictionary indicating whether each column has matching data types across both DataFrames.

Parameter:
  • df1 (DataFrame) – The first DataFrame object to compare.

  • df2 (DataFrame) – The second DataFrame object to compare.

Rückgabe:

A dictionary where keys are column names and values are boolean flags indicating if the columns have different data types in both DataFrames.

Rückgabetyp:

dict

det_dze_comp_modes() DataFrame

Selection of components and operating modes with zero direct emissions.

Rückgabe:

A filtered and processed DataFrame containing operating modes with zero direct emissions.

Rückgabetyp:

pol.DataFrame

fuel_derived_emissions()

Calculates and retrieves fuel-derived emissions by applying specific emission factors to the corresponding fuel amounts. This function processes data by merging it with definitions, specific emission factors, and then calculates the resulting emission values. It updates the merged results with the processed data.

Parameter:

self – The instance of the class, used to access its attributes and other methods.

Rückgabe:

DataFrame containing the fuel-derived emissions after processing.

Rückgabetyp:

pandas.DataFrame

static get_direct_emission_results(mrgd_part_res: DataFrame) DataFrame

Extracts and transforms specific columns from the provided DataFrame to generate direct emission results. The method filters and renames selected columns from the input DataFrame to meet internal processing needs.

Parameter:

mrgd_part_res – The input DataFrame containing emission data along with other related attributes. It is expected to have columns such as ‚idszenario‘, ‚idunternehmen‘, ‚idverkehrsart‘, ‚bezugsjahr‘, ‚idzuggattung‘, ‚idbetriebsart‘, ‚idleistungsart‘, ‚idss‘, ‚idenergy‘, ‚vl2‘, ‚bl2‘, and ‚e_direkt‘.

Rückgabe:

A transformed DataFrame containing the selected and renamed columns for further processing. The column e_gesamt is included with a static value of 0.

Rückgabetyp:

pol.DataFrame

get_ef_excl_co2_so2() DataFrame

Computes and returns a filtered and joined dataset with emission factors for further analysis excluding CO2 and SO2. The function performs multiple joins on data tables, applies filters on specific columns, and computes a new column (efa1) as a product of existing columns.

Rückgabe:

A filtered dataset containing emission factors, excluding CO2 and SO2.

Rückgabetyp:

pol.DataFrame

get_merged_results(df_result)

Merges the direct emissions data with the provided result DataFrame.

Parameter:

df_result (pandas.DataFrame) – The DataFrame to merge with the direct emissions.

Rückgabe:

The merged DataFrame containing both direct emissions and the result data.

Rückgabetyp:

pandas.DataFrame

This method first checks whether the direct emissions data is empty. If so, it attempts to calculate them. It then ensures that biofuel shares have already been calculated and compares the columns in common between the direct emissions DataFrame and the provided input DataFrame. Finally, it returns a horizontally merged and aligned DataFrame.

ghg_emissions()

Calculates CO2-equivalents from CO2 and other greenhouse gases. This function processes data by merging it with definitions, specific emission factors, and then calculates the resulting emission values.

Parameter:

self – The instance of the class, used to access its attributes and other methods.

Rückgabe:

DataFrame containing the ghg emissions after processing.

Rückgabetyp:

pandas.DataFrame

static merge_ops(train_ops: DataFrame, shunt_ops: DataFrame) DataFrame

Merges train operations and shunt operations datasets into a single dataset by selecting specific columns and unifying them into a consistent structure. The method combines and deduplicates the data.

Parameter:
  • train_ops – A DataFrame containing train operations data.

  • shunt_ops – A DataFrame containing shunt operations data.

Rückgabe:

A consolidated DataFrame containing merged and unique records from train and shunt operations datasets.

merge_partial_results(energy_consumption: DataFrame, em_excl_co2_so2: DataFrame, res_em_hc_diff: DataFrame, mrgd_dze_comp_modes: DataFrame) DataFrame

Merges partial results from multiple dataframes into a single dataframe by selecting specific result columns and concatenating the data vertically while ensuring uniqueness of the resulting rows.

Parameter:
  • energy_consumption – The input dataframe containing energy consumption data with a specific structure. It needs to be processed to extract relevant columns.

  • em_excl_co2_so2 – The input dataframe containing emission data excluding CO2 and SO2 with a specific structure. Relevant columns will be selected for merging.

  • res_em_hc_diff – The input dataframe containing results of emission hydrocarbon differences. A specific column will be extracted for further merging.

  • mrgd_dze_comp_modes – The input dataframe with merged direct zero emission data. modes. Relevant columns are extracted for inclusion in the final result.

Rückgabe:

A concatenated dataframe combining all the relevant data from the input dataframes, with duplicate rows removed.

Rückgabetyp:

pol.DataFrame

static prep_shunt_ops_perf(train_ops: DataFrame) DataFrame

Prepares the operational shunting performance data by filtering, grouping, aggregating, and enriching the dataset for further analysis.

Parameter:

train_ops – A Polars DataFrame representing operational train data.

Rückgabe:

A Polars DataFrame containing the processed shunting performance dataset.

shunt_ops_perf(shunt_ops_prep: DataFrame) DataFrame

Performs operations on the given shunting operations preparation DataFrame by joining it with additional reference data tables, filtering based on specific criteria, performing calculations, and returning a processed DataFrame with unique rows.

Parameter:

shunt_ops_prep – A Polars DataFrame containing prepared shunting operations data to be transformed and processed.

Rückgabe:

A Polars DataFrame containing the processed shunting operations data

train_ops_perf() DataFrame

Computes operational performance statistics for train scenarios by joining and filtering multiple data sources and deriving new metrics.

The function processes data tables related to train scenarios, transportation types, operational modes, and other parameters. It combines the tables with relevant keys, applies necessary filters, and calculates derived metrics based on performance indicators. The final dataset includes metrics such as scenario ID, transportation type, operational type, and performance indicators.

Rückgabe:

A DataFrame containing calculated train operational performance metrics.

Rückgabetyp:

pol.DataFrame

2.4 Ergebnisausgabe

Die Ergebnisausgabe ist im Wesentlichen nach folgenden differenziert:

  • Szenario (z.B.: Realdaten Westdeutschland 1960-1993, Realdaten Ostdeutschland 1960-1993, Deutschland 1994-2050)

  • Bezugsjahr (z.B.: 1960 bis 2050)

  • Unternehmen (z.B.: Deutsche Bahn AG und Rechtsvorgänger, Nichtbundeseigene Eisenbahnen öffentlich, Kommunale Bahnen, Hafen- und Werksbahnen)

  • Verkehrsart (z.B. Personenverkehr, Güterverkehr)

  • Zuggattung (z.B. Personennahverkehrszug, Personenfernverkehrszug, Güterzug, Straßen-Stadt-U-Bahn, Hafen- Werksbahn, ICE, IC/EC, InterRegio)

  • Betriebsart (z.B. Elektrisch (Bahnstrom), Elektrisch (EVU-Strom), Diesel, Dampf/Kohle)

  • Leistungsart (z.B. Leistungen im Zugdienst, Rangierleistungen)

  • Schadstoff (z.B. Kohlenwasserstoffe total, Kohlenmonoxid, Stickoxide, Partikelmasse)

  • Energieträger (z.B. Strom, Diesel, Biodiesel u. Pflanzenöl)