Zum Inhalt

Modulübersicht

Code-Dokumentation

Für eine zeilenweise kommentierte Darstellung jedes Skripts siehe die Code-Dokumentation. Dort werden die Kommentare im Quellcode als Fließtext dargestellt und der Code in erklärte Blöcke aufgeteilt.

WorldQual Lite besteht aus fünf Python-Modulen, die gemeinsam die Verarbeitungskette von Rohdaten zu Phosphorfrachten implementieren. Das folgende Diagramm zeigt die Abhängigkeiten zwischen den Modulen:

flowchart TD
    YAML["config.yaml"] --> CFG["config.py\n(YAML-Loader)"]
    CFG --> PP["Paths_and_params.py\n(Kompatibilitäts-Wrapper)"]
    PP --> WQ["WorldQual_Lite_TP.py\n(Hauptmodul)"]
    WQ --> BFH["BinaryFileHandler.py\n(UNF-Dateien lesen)"]
    WQ --> IDF["InputDataFetchFunctions.py\n(DB/CSV-Abfragen)"]
    ENV[".env"] --> IDF
    BD["BasinDelineation.py\n(eigenständig)"] -.->|"erzeugt\nEinzugsgebiets-CSV"| WQ

1. WorldQual_Lite_TP.py – Hauptmodul

Code-Dokumentation →

~850 Zeilen · Importiert: Paths_and_params, BinaryFileHandler, InputDataFetchFunctions

Dieses Modul bildet den Kern des Modells. Es definiert acht Berechnungsfunktionen (je eine pro Phosphorquelle) und steuert den gesamten Modelllauf über die Funktion Model().

Der Ablauf der Model()-Funktion gliedert sich in vier Schritte:

  1. Iteration über Jahre, Monate und Rasterzellen
  2. Aufruf aller acht Quellenfunktionen pro Zelle
  3. Anwendung der Erosions- und Retentionsfaktoren
  4. Aggregation der Ergebnisse auf Einzugsgebietsebene

Berechnungsfunktionen

Funktion Phosphorquelle Typ
DomesticSewered() Häusliches Abwasser (angeschlossene Bevölkerung) Punktquelle
DomesticNonsewered() Streusiedlungen (Klärgruben, Latrinen, offene Defäkation) Punktquelle
Manufacturing() Industrieabwässer Punktquelle
Inorganic_Fertilizer_new_method() Mineraldüngerapplikation Diffus
AgricultureLivestock() Viehwirtschaft (Exkremente) Diffus
BackgroundAtm() Atmosphärische P-Deposition Diffus
BackgroundCW() Chemische Verwitterung Diffus
UrbanSurfaceRunoff() Städtischer Oberflächenabfluss Diffus

Hilfsfunktionen

Funktion Beschreibung
Cell_Yearly_ErodedPortion() Berechnet den Erosionskoeffizienten nach Fink et al. — bestimmt den Anteil der diffusen Fracht, der das Gewässer erreicht
Load_After_Retention_factor() Berechnet den Retentionsfaktor nach Vollenweider — berücksichtigt die Rückhaltung in stehenden Gewässern
Cell_Yearly_to_monthly_Load_Converter() Disaggregiert Jahresfrachten auf Monatswerte proportional zum monatlichen Oberflächenabfluss

2. Paths_and_params.py – Konfigurationsmodul

Code-Dokumentation →

~60 Zeilen · Importiert: config.py

Stellt sämtliche Modellparameter als Modul-Attribute bereit: Lauftyp (historisch/Zukunft), Szenario (SSP/RCP/GCM), Simulationszeitraum, Ländercode, Kalibrierungsparameter und Dateipfade.

Technisch handelt es sich um einen Kompatibilitäts-Wrapper, der alle Werte aus config.py weiterleitet. Bestehender Code mit import Paths_and_params as PP bleibt dadurch funktionsfähig, obwohl die Parametrisierung nun über config.yaml erfolgt.

Hinweis für neuen Code

Neuer Code sollte direkt from config import cfg verwenden statt import Paths_and_params as PP.


3. InputDataFetchFunctions.py – Datenbankschnittstelle

Code-Dokumentation →

~340 Zeilen · Importiert: mysql.connector, python-dotenv

Implementiert ca. 15 Funktionen für den Zugriff auf die MySQL-Datenbank. Jede Funktion kapselt eine spezifische SQL-Abfrage. Die Datenbankzugangsdaten werden über eine .env-Datei geladen und sind nicht im Quellcode enthalten.

Funktionsgruppen:

Gruppe Funktionen Rückgabewerte
Zell-Input CellInputs(), CellPopulation(), CellReturnFlows(), CellParameters() Bevölkerung, Return Flows, GDP, Landnutzung pro Rasterzelle
Länderdaten CountryPopulation(), CountryReturnFlows(), CountryConnectionToTreatment() Nationale Bevölkerungsdaten, Kläranlagen-Anschlussraten
Parameter CountryEmmisionFactor(), CountryConcInReturnFlows(), RemovalRate() Emissionsfaktoren, Konzentrationen in Rückläufen, Reinigungsleistungen
Landwirtschaft Fertilizer_P_ApplicationRate(), LivestockExcretionRate(), GeogenicBackgroundDeposition() Düngungsraten (21 Kulturtypen), Viehexkretionsraten (12 Kategorien), geogene Hintergrundwerte
Koordinaten Cell_ID_To_GCRC(), Crop_ID_From_GLCC(), IDFaoReg_from_Country_Id() Zell-ID-Umrechnung, Kulturtyp-Zuordnung, FAO-Regionszuordnung

4. BinaryFileHandler.py – UNF-Dateiverarbeitung

Code-Dokumentation →

~155 Zeilen · Importiert: struct, numpy, osgeo.gdal

Implementiert Lese- und Schreiboperationen für das proprietäre WaterGAP-UNF-Binärformat. Dieses Format speichert räumliche Rasterdaten als Big-Endian-Binärwerte (Float oder Integer).

Funktionsübersicht:

Funktion Beschreibung
getFileInfo() Ermittelt Datentyp und Layer-Anzahl aus dem Dateinamen (z.B. .12.UNF0 → 12 Monatsschichten, Float)
ReadBin() Liest eine UNF-Datei und gibt die Werte als Python-Liste zurück
FileToArray() Konvertiert UNF-Daten in ein NumPy-3D-Array (Layer × Zeilen × Spalten)
ArrayToRaster() Exportiert ein NumPy-Array als GeoTIFF (via GDAL)
writeBin() Schreibt Integer-Listen als UNF-Binärdatei
Path_Concatenate() Konstruiert Dateipfade durch Einfügen der Jahreszahl

Detaillierte Formatbeschreibung: Input-Daten Checkliste → UNF-Dateiformat Referenz


5. BasinDelineation.py – Einzugsgebietsabgrenzung

Code-Dokumentation →

~170 Zeilen · Importiert: geopandas, BinaryFileHandler

Identifiziert die Rasterzellen, die zum untersuchten Einzugsgebiet gehören. Dieses Modul wird vor dem eigentlichen Modelllauf ausgeführt und erzeugt die Einzugsgebiets-Zellenliste (CSV), die WorldQual_Lite_TP.py als Eingabe erwartet.

Implementierte Methoden:

Methode Verfahren Voraussetzungen Ergebnis
Routing-basiert Rückwärtsverfolgung aller Oberstrom-Zellen ausgehend von der Mündungszelle G_OUTFLC.UNF4 (Routing-Datei), Mündungszell-IDs Exakte hydrologische Abgrenzung
Shapefile-Overlay Räumliche Verschneidung eines Einzugsgebiets-Shapefiles mit dem WaterGAP-Raster Shapefile des Einzugsgebiets, WaterGAP-Referenzgitter (mother_eu.shp) Flächenanteil pro Rasterzelle