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¶
~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:
- Iteration über Jahre, Monate und Rasterzellen
- Aufruf aller acht Quellenfunktionen pro Zelle
- Anwendung der Erosions- und Retentionsfaktoren
- 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¶
~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¶
~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¶
~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¶
~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 |