Architektur¶
Modulübersicht¶
config.yaml ← Zentrale Konfigurationsdatei (YAML)
│
▼
config.py ← Config-Loader (Validierung, Pfadauflösung)
│
▼
Paths_and_params.py ← Kompatibilitäts-Wrapper
│
▼
WorldQual_Lite_TP.py ← Hauptmodul (Frachtberechnung)
│
├── BinaryFileHandler.py ← UNF-Datei I/O
│
└── InputDataFetchFunctions.py ← DB/CSV-Datenzugriff
│
├── .env ← Datenbankzugangsdaten (nicht in Git)
└── MySQL oder CSV-Dateien
BasinDelineation.py ← Einzugsgebiets-Definition (eigenständig)
Datenfluss¶
[UNF-Dateien]──────────────┐
Oberflächenabfluss │
Urbaner Abfluss │ ┌─────────────────────┐
Viehdichte ├───►│ │
Korrekturfaktoren │ │ WorldQual_Lite_TP │
P-Raten, Cropland │ │ │
Zellfläche, Erosion, ... │ │ Für jede Zelle: │
│ │ ├─ DomesticSewered │──► CSV
[DB/CSV]────────────────────┤ │ ├─ Manufacturing │ (monatl./jährl.
Bevölkerung │ │ ├─ Fertilizer │ Frachten)
Emissionsfaktoren ├───►│ ├─ Livestock │
Kläranlagen-Raten │ │ ├─ Scattered │──► Plot
Entfernungsraten │ │ ├─ Atm. Deposition │ (Stacked Bar)
Konzentration Industrie │ │ ├─ Chem. Weather. │
Vieh-Exkretionsraten │ │ └─ Urban Runoff │──► RMSE, R²
│ │ │
[Einzugsgebiets-Zellenliste]─────────┘ └─────────────────────┘
Berechnungslogik¶
Hauptschleife¶
Das Modell iteriert über Jahre. Pro Jahr:
- Datenladen: UNF-Dateien für das aktuelle Jahr lesen (Abfluss, Vieh, Korrekturfaktoren, etc.)
- Zellschleife: Für jede Zelle im Einzugsgebiet und jeden Monat:
- 8 Frachtkomponenten berechnen
- Erosionsanteil anwenden (
Cell_Yearly_ErodedPortion) - Auf Einzugsgebiet aufsummieren
- Retention: Auf die Gesamtfracht den Retentionsfaktor anwenden (
Load_After_Retention_factor) - Output: CSV schreiben, Plot erzeugen
Erosionsmodell (Fink et al.)¶
Diffuse Quellen (Dünger, Vieh, Deposition, Verwitterung) unterliegen einem Erosionskoeffizienten:
Dabei ist:
- SR = Oberflächenabfluss [mm/a]
- Lmax, a, b, c = Kalibrierungsparameter
- SoilErosion = Bodenerosionsrate [kg/km²/a]
- P_input = P-Eintrag in den Boden
Retentionsmodell (Vollenweider)¶
Die Fracht am Einzugsgebietsauslass wird durch Retention in Wasserkörpern reduziert:
Dabei ist HL = Hydraulic Load = Q_out / Seefläche.
Behandlungseffizienz (Kläranlagen)¶
Für Punktquellen (Häuslich, Industrie):
Dabei werden 5 Behandlungsstufen unterschieden: unbehandelt, primär, sekundär, tertiär, quartär.
Streusiedlungen¶
Nicht angeschlossene Bevölkerung wird in 3 Kategorien aufgeteilt: - Behandelt (Kleinkläranlagen, Klärgruben) → Bodenentfernung angewandt - Hängende Latrinen → Direkter Eintrag - Offene Defäkation → Diffuser Eintrag über Abfluss
Vergleich mit WorldQual (Vollversion)¶
| Aspekt | Vollversion (C++) | Lite (Python) |
|---|---|---|
| Frachtberechnung (wq_load) | Ja, identische Logik | Ja, portiert |
| Instream-Transport (worldqual) | Ja, Routing, Abbau, Seen | Nein |
| Statistik (wq_stat) | Ja, Stationsvergleich | Eingeschränkt, nur RMSE am Auslass |
| Erosionsmodell | Ja, Fink et al. | Ja, identisch |
| Retentionsmodell | Ja, physikbasiert | Vereinfacht (Vollenweider) |
| Multi-Parameter | Ja, 6 Parameter | Nein, nur TP |
| Parallelisierung | Nein, Single-Core | Nein, Single-Core |