ADM1-Implementierung und Substratmodellierung¶
Diese Seite beschreibt die technischen Details des in PyADM1ODE umgesetzten ADM1-Modells und wie landwirtschaftliche Substrate in das Modell integriert werden.
PyADM1ODE implementiert ADM1da (Schlattmann 2011) — eine landwirtschaftliche Adaption des ursprünglichen ADM1 (Batstone et al. 2002, IWA Task Group). Im Vergleich zur klassischen Formulierung enthält dieses Modell eine Sub-Fraktionierung der Desintegration, temperaturabhängige Kinetiken sowie modifizierte Inhibitionskinetiken für agrarische Co-Vergärung. Die Umsetzung reproduziert das Referenzverhalten von SIMBA# biogas 4.2 (ifak Magdeburg) quantitativ (siehe die Validierungs-Seite). Wo die veröffentlichte ADM1da-Literatur bei einer konkreten stöchiometrischen oder kinetischen Wahl mehrdeutig ist, wird die in PyADM1ODE getroffene Konvention auf dieser Seite explizit angegeben.
ADM1 als reines ODE-System¶
Im Gegensatz zum Standard-ADM1, das oft als System differentiell-algebraischer Gleichungen (DAE) formuliert wird, ist diese Implementierung ein reines System gewöhnlicher Differentialgleichungen (ODE).
Hauptmerkmale¶
- Kinetisches Säure-Base-Gleichgewicht: Die ionisierten Spezies (Acetat-,
Propionat-, Butyrat-, Valerat-Ion, \(\text{HCO}_3^-\), \(\text{NH}_3\)) werden als dynamische Zustandsvariablen mit einer sehr hohen Reaktionsrate \(k_{A,B} = 10^8\,\text{m}^3\,\text{kmol}^{-1}\,\text{d}^{-1}\) geführt. Dadurch verfolgen sie das thermodynamische Gleichgewicht praktisch direkt, ohne dass innerhalb des ODE-Schritts ein algebraischer Solver aufgerufen werden muss. - Kinetischer Gas-Flüssig-Transfer: \(\text{H}_2\), \(\text{CH}_4\),
\(\text{CO}_2\) und \(\text{NH}_3\) werden über \(k_L a\)-Raten in die Gasphase überführt — keine algebraische Henry-Gleichgewichtsbedingung. - 41 Zustandsvariablen: Das Modell führt 41 Variablen in fünf Blöcken:
| Block | Indizes | Anzahl | Inhalt |
|---|---|---|---|
| Gelöste Komponenten | 0–11 | 12 | \(S_{su}, S_{aa}, S_{fa}, S_{va}, S_{bu}, S_{pro}, S_{ac}, S_{h2}, S_{ch4}, S_{IC}, S_{IN}, S_{I}\) |
| Partikuläre Sub-Fraktionen | 12–21 | 10 | \(X_{PS\_ch/pr/li}\) (langsam), \(X_{PF\_ch/pr/li}\) (schnell), \(X_{S\_ch/pr/li}\) (hydrolisierbar), \(X_I\) |
| Biomasse | 22–28 | 7 | \(X_{su}, X_{aa}, X_{fa}, X_{c4}, X_{pro}, X_{ac}, X_{h2}\) |
| Säure-Base / Ladungsbilanz | 29–36 | 8 | \(S_{cat}, S_{an}\), ionisierte Formen \(S_{va^-}, S_{bu^-}, S_{pro^-}, S_{ac^-}, S_{HCO_3^-}, S_{NH_3}\) |
| Gasphase | 37–40 | 4 | \(p_{H_2}, p_{CH_4}, p_{CO_2}, p_{tot}\) |
pH-Wert-Berechnung¶
Der pH-Wert wird in jedem Auswertungsschritt über die Ladungsbilanz und ein Newton–Raphson-Verfahren bestimmt:
Da alle Beiträge zur linken Seite Zustandsvariablen sind, ist diese Ladungsbilanz innerhalb des ODE-Schritts eine rein punktweise Funktion des aktuellen Zustands und liefert in 5–10 Newton-Iterationen \([H^+]\) mit hoher Genauigkeit. Die schnelle Equilibrierung der ionisierten Spezies über \(k_{A,B}\) stellt sicher, dass der berechnete pH konsistent mit den thermodynamischen Säure-Base-Konstanten bleibt.
Sub-Fraktionierung der Desintegration¶
Der wichtigste Unterschied zum klassischen ADM1 ist die zwei-Pool-Desintegration anstelle der monolithischen Verbundstoff-Variable \(X_c\):
Substratzulauf
│
┌─────────────────┼─────────────────┐
│ │ │
X_PS_ch/pr/li X_PF_ch/pr/li X_I (inert)
(slow pool) (fast pool)
│ │
│ k_dis_PS=0.04 │ k_dis_PF=0.4
│ d⁻¹ │ d⁻¹
▼ ▼
X_S_ch/pr/li (hydrolisierbar)
│
│ k_hyd ≈ 4 d⁻¹
▼
S_su / S_aa / S_fa
Routing der Eingangs-COD auf die Pools (via Feedstock._calc_concentrations):
| Pool | Substratquelle (Weender + Sub-Fraktionierungs-Parameter) |
|---|---|
| \(X_{PS}\) | Rohfaser (immer langsamer Pool) plus der Anteil \(f_{sOTS}\) der NFE-Kohlenhydrate, Proteine und Fette |
| \(X_{PF}\) | Anteil \(f_{fOTS}\) der NFE-Kohlenhydrate, Proteine und Fette |
| \(X_S\) | Wird durch Desintegration aus \(X_{PS}\) und \(X_{PF}\) erzeugt; nicht direkt aus dem Substrat |
| \(X_I\) | Anteil \(a_{XI}\) der gesamten organischen Roh-COD |
| \(S_I\) | Anteil \(a_{Si}\) der gesamten organischen Roh-COD (gelöste Inerte, treten direkt im Zulauf auf) |
Damit lässt sich beispielsweise leichtabbaubare Stärke (NFE) gezielt in den schnellen Pool routen, während Lignocellulose (Rohfaser) automatisch in den langsamen Pool fällt — ohne Modellumbau.
Routing der Biomasse-Zerfallsprodukte¶
Wenn eine Biomasse-Population \(X_i\) zerfällt, wird die zugehörige COD in den hydrolisierbaren Pool \(X_S\) und in den inerten Pool \(X_I\) umgeleitet — nicht in den langsamen Desintegrationspool \(X_{PS}\). Dies folgt der Biomasse-Zerfallsstöchiometrie von ADM1da (Schlattmann 2011), bei der alle sieben Biomasse-Populationen in dieselbe Kombination aus hydrolisierbarem und inertem Pool zerfallen. Die COD-basierten Routing-Anteile lauten
mit \(f_{BM,CH} = 0{,}20\), \(f_{BM,PR} = 0{,}70\), \(f_{BM,LI} = 0{,}10\) (Massenanteile in der Biomasse) und \(M_{Xch} = 0{,}9375\), \(M_{Xpr} = 0{,}7736\), \(M_{Xli} = 0{,}3474\) (Masse-COD-Verhältnisse). Ein Anteil \(f_P = 0{,}20\) geht in den Inertpool \(X_I\); die restlichen \((1 - f_P) = 0{,}80\) werden über die obigen COD-Anteile auf die \(X_{S,*}\)-Pools verteilt. Die Hydrolyserate \(k_{hyd} = 4\,\text{d}^{-1}\) ist 100× schneller als \(k_{dis,PS} = 0{,}04\,\text{d}^{-1}\), sodass zerfallene Biomasse auf der Hydrolyse-Zeitskala wieder in die Substratkette eintritt.
Temperaturabhängige Kinetiken¶
Die ADM1da-Variante korrigiert sämtliche kinetischen Raten gegenüber der 35 °C-Referenz mit einer Arrhenius-θ-Funktion:
mit gruppenspezifischen Exponenten (Werte nach Schlattmann 2011):
| Prozessgruppe | \(\theta_{\exp}\) |
|---|---|
| Desintegration & Hydrolyse | 0,024 |
| \(X_{su}, X_{aa}, X_{h2}\) (Wachstum & Zerfall) | 0,069 |
| \(X_{fa}, X_{c4}, X_{pro}, X_{ac}\) (Wachstum & Zerfall) | 0,055 |
| \(K_{I,NH_3,X_{pro}}\) | 0,061 |
| \(K_{I,NH_3,X_{ac}}\) | 0,086 |
| \(K_{I,H_2,X_{fa}/X_{c4}/X_{pro}}\) | 0,080 |
Die Korrektur wird einmalig beim Anlegen des ADM1-Objekts auf alle relevanten
Raten angewandt (ADMParams.apply_temperature_corrections) und im internen
_kinetic-Dict zwischengespeichert.
Modifizierte Inhibitionskinetiken¶
Gegenüber dem Standard-ADM1 weist das ADM1da-Modell folgende Anpassungen auf —
alle in ADM1.ADM_ODE umgesetzt und folgen den ADM1da-Aufnahme-Prozessraten
(Schlattmann 2011), wobei die NH₃-Inhibitionsformen aus Siegrist et al. (2002)
übernommen sind:
| Inhibition | Standard-ADM1 | ADM1da (diese Implementierung) |
|---|---|---|
| pH-Inhibition \(X_{fa}/X_{c4}/X_{pro}\) | Hill, \(n=1\) | Hill, \(n=2\) (steilerer Cut-Off) |
| pH-Inhibition \(X_{ac}\) | Hill, \(n=1\) | Hill, \(n=3\) |
| pH-Inhibition \(X_{h2}\) | Hill, \(n=1\) | Hill, \(n=3\) |
| N-Limitation | \(S_{NH4}\) allein | \(S_{IN} = S_{NH4} + S_{NH3}\) |
| \(\text{NH}_3\)-Inhibition \(X_{ac}\) | linear in \(S_{NH3}\) | quadratischer Hill: \(K_I^2/(K_I^2 + S_{NH3}^2)\), T-korrigiert mit \(\theta=0{,}086\) |
| \(\text{NH}_3\)-Inhibition \(X_{pro}\) | nicht enthalten | quadratischer Hill mit eigenem \(K_{I,nh3,pro}\), T-korrigiert mit \(\theta=0{,}061\) |
| Undissoziiertes Propionat \(X_{pro}\) | nicht enthalten | \(K_{IH,pro}/(K_{IH,pro} + S_{pro} - S_{pro^-})\) |
| Undissoziiertes Acetat \(X_{ac}\) | nicht enthalten | \(K_{IH,ac}/(K_{IH,ac} + S_{ac} - S_{ac^-})\) |
| \(\text{CO}_2\)-Limitation \(X_{h2}\) | nicht enthalten | quadratische Hill-Sättigung: \(S_{CO2}^2/(K_S^2 + S_{CO2}^2)\) |
Anwendungsbereich der Inhibition
Die ADM1da-Kinetik in Schlattmann (2011) führt zusätzlich eine Inhibition durch Acetat bzw. undissoziierte Säuren auf \(X_{fa}\) und \(X_{c4}\) auf. Die SIMBA#-Referenzimplementierung und PyADM1ODE wenden diese Terme nur auf \(X_{pro}\) und \(X_{ac}\) an, wo sie experimentell gut belegt sind; \(X_{fa}\) und \(X_{c4}\) werden nur durch pH, N-Limitation und gelöstes H₂ inhibiert.
Diese Erweiterungen reproduzieren das in landwirtschaftlichen Anlagen typische Verhalten: schärferer pH-Abfall bei Säureakkumulation, ausgeprägtere \(\text{NH}_3\)-Hemmung bei thermophilem Betrieb auf Güllebasis und realistischere Propionatdynamik.
Säure-Base-Subsystem¶
Die Säure-Base-Reaktionen der sechs dissoziierenden Spezies (\(\text{NH}_4^+ / \text{NH}_3\), \(\text{CO}_2 / \text{HCO}_3^-\) sowie die vier VFA-Paare) sind als kinetische Reaktionen folgender Form implementiert:
mit derselben kinetischen Kopplung für \(\text{CO}_2 / \text{HCO}_3^-\) und \(\text{NH}_4^+ / \text{NH}_3\). Die Reaktionsratenkonstante \(k_{A,B} = 10^8\,\text{d}^{-1}\) sorgt für eine Sub-Sekunden-Equilibrierung. Die Säuredissoziationskonstanten werden gegenüber der 35 °C-Referenz mittels van't Hoff mit den Enthalpien aus Batstone 2002 T-korrigiert:
Gas-Flüssig-Transfer (Henry-Gesetz mit van't Hoff-Korrektur)¶
Die vier Gasphasenspezies \(\text{H}_2\), \(\text{CH}_4\), \(\text{CO}_2\) und \(\text{NH}_3\) werden zwischen Flüssig- und Gasphase über
mit einer van't Hoff-Temperaturkorrektur der Henry-Konstante (Schlattmann 2011 / Batstone et al. 2002 Enthalpien) transferiert:
| Gas | \(H_{F,35°C}\) [mol/(L·bar)] | \(\Delta H^\circ_F\) [J/mol] | \(k_L a_F\) [d⁻¹] |
|---|---|---|---|
| CO₂ | 0,0271 | 19 410 | 200 |
| CH₄ | 0,00116 | 14 240 | 200 |
| H₂ | 7,38·10⁻⁴ | 4 180 | 200 |
| NH₃ | 60 (bei 25 °C Referenz) | 36 584 | 200 |
Vorzeichenkonvention: Die Lösung ist exotherm, daher sinkt \(H_F\) mit steigender Temperatur — bei höherer Betriebstemperatur bleibt weniger Gas gelöst.
Schlammvolumenbilanz und HRT¶
Da ein erheblicher Anteil der Substrat-COD den Reaktor als Gas verlässt, ist das Schlammvolumen nicht erhalten. Die dynamische Schlammvolumenbilanz folgt der biochemisch-ratenbasierten Variante ("Ansatz 2") des ADM1da-Reaktormodells (Schlattmann 2011):
Die hydraulische Verweilzeit folgt einer Verzögerung erster Ordnung (Schlattmann 2011):
Der Ablauf wird über ein Überlaufwehr bei \(V_{liq,max}\) mit kleiner Zeitkonstante \(\tau_{out}\) getrieben:
In der Praxis hält \(\tau_{out} = 0{,}05\,\text{d}\) \(V_S\) auf ~1 m³ am Sollwert und reproduziert damit das nahezu instantane Wehrverhalten von SIMBA#.
Bei dynamic_volume=False (Default zur Rückwärtskompatibilität) wird \(V_S\)
konstant gehalten und \(\dot{q}_{S,out} = \dot{q}_{S,in} - \dot{q}_{S,loss}\)
direkt aus dem Massenverlustterm berechnet.
Substratcharakterisierung via Weender-Analyse¶
Substrate werden über praxisübliche Laborparameter definiert und als
YAML-Dateien unter data/substrates/ gespeichert. Eine Beispielstruktur:
name: Maissilage (Milchreife)
TS: 330.0 # kg/m^3 FM Trockensubstanz
NH4: 0.8 # kg N/m^3 FM Ammoniumstickstoff
BGP: 670.0 # Nm^3/t VS Biogaspotenzial
BMP: 356.8 # Nm^3 CH4/t VS Biomethanpotenzial
aXI: 0.1029 # partikulär inerter Anteil der abbaubaren COD
fOTSrf: 0.95 # abbaubarer Anteil der Rohfaser
fsOTS: 0.0 # Anteil abbaubarer VS in den langsamen Pool (XPS)
ffOTS: 1.0 # Anteil abbaubarer VS in den schnellen Pool (XPF)
aSi: 0.0 # gelöst-inerter Anteil der abbaubaren COD
fRF: 0.235 # Rohfaser (Anteil der TS)
fRP: 0.09 # Rohprotein
fRFe: 0.03 # Rohfett
fRA: 0.10 # Rohasche
Temp: 20.0 # degC
pH: 4.0
KS43: 0.0 # mol/m^3 Säurekapazität bis pH 4,3
FFS: 5.0 # kg HAc/m^3 VFA als Essigsäure-Äquivalent
Dieselbe Datei kann alternativ als XML oder TOML geschrieben werden; der
Loader wählt das Format anhand der Endung. Side-by-Side-Beispiele in allen
drei Formaten finden sich in
data/substrates/examples/.
load_substrate() liefert eine SubstrateParams-Dataclass; die
Feedstock-Klasse berechnet daraus den vollständigen 38-spaltigen ADM1-
Zulaufstrom (37 flüssige Zustandsspalten + Q):
- Frischmasse-Dichte \(\rho_{FM}\) aus den Komponentendichten
(Mischungsregel auf spezifischem Volumen). - Organische COD-Konzentrationen \(X_{ch}, X_{pr}, X_{li}\) in
\(\text{kg COD/m}^3\) über die COD-Umrechnungsfaktoren \(M_{Xch}, M_{Xpr}, M_{Xli}\). - Routing in die Sub-Fraktionen \(X_{PS}/X_{PF}\) via \(f_{sOTS}, f_{fOTS}\)
und \(f_{OTSrf}\) (siehe Tabelle oben). - Dissoziation beim Substrat-pH: ionisierte VFA, \(\text{HCO}_3^-\),
\(\text{NH}_3\). - Ladungsbilanz für die Ionen. Konventionsgemäß wird \(S_{cation}\) für
jeden Substrattyp auf null gesetzt (gemäß der ADM1da-Substratcharakterisierung, Schlattmann 2011), und \(S_{anion}\) ergibt sich aus der Ladungsbilanz — wobei es für nettokationische Substrate auch negativ werden darf.
Volumetrische ADM1da-Konvention für Q¶
Die Substrat-Volumenströme \(Q_i\) werden standardmäßig als massenäquivalente Ströme interpretiert. Intern wird
berechnet. Für flüssige Substrate (\(\rho_{FM} \approx 1000\)) ist das ein
No-Op; für Maissilage (\(\rho_{FM} \approx 1134\,\text{kg/m}^3\)) reduziert
sich der tatsächliche Volumenstrom etwa um 12 %. Damit ist Parität zu
ADM1da-Referenzergebnissen gegeben. Über simba_q_convention=False lässt
sich diese Skalierung abschalten, falls \(Q\) direkt als tatsächliches Reaktor
volumen interpretiert werden soll.
Co-Vergärung: gewichtete Mischung¶
Bei Multi-Substrat-Zuläufen werden die Konzentrationen volumetrisch
flussgewichtet gemischt (Feedstock._blended_concentrations). Die Anzahl
gleichzeitig beschickter Substrate ist nicht begrenzt — Feedstock
akzeptiert eine beliebig lange Liste von XML-IDs.
Messgrößen¶
PyADM1ODE liefert die standardmäßigen ADM1da-Messgrößen (Schlattmann 2011) für die Anlagenüberwachung.
Flüchtige Fettsäuren (VFA)¶
Der aggregierte VFA-Wert in g HAc/L ist das COD-gewichtete Essigsäure-Äquivalent der vier VFA-Spezies:
mit \(M_{HAc} = 60\,\text{g/mol}\) und den COD-pro-mol-Verhältnissen pro VFA (va = 208, bu = 160, pro = 112, ac = 64 g COD/mol).
Säurekapazität (TAC)¶
Die pH-5-Titrationskapazität (TAC, in g CaCO₃/L) ist
Vorfaktor 50 vs 100
Die TAC-Formel in Schlattmann (2011) verwendet die Molmasse von CaCO₃ (100 kg/kmol) als Vorfaktor. Der physikalisch korrekte Wert ist das Äquivalentgewicht 50 kg/keq, da ein Mol CaCO₃ zwei H⁺-Äquivalente säureneutralisierende Kapazität trägt — die übliche Alkalinitäts konvention. PyADM1ODE verwendet den Äquivalentgewichtsvorfaktor, was mit dem Referenz-Output des SIMBA#-Reaktormoduls übereinstimmt.
Referenzen¶
Die Implementierung basiert auf folgenden Primärquellen (übereinstimmend mit der Literaturliste des PyADM1ODE–SIMBA#-Validierungsberichts):
- Batstone, D. J., Keller, J., Angelidaki, I., Kalyuzhnyi, S. V.,
Pavlostathis, S. G., Rozzi, A., Sanders, W. T. M., Siegrist, H., Vavilin, V. A. (2002). Anaerobic Digestion Model No. 1 (ADM1). IWA Scientific and Technical Report No. 13. IWA Publishing, London. - Henneberg, W., Strohmann, F. (1864). Beiträge zur Begründung einer
rationellen Fütterung der Wiederkäuer. Schwetschke, Braunschweig. (Ursprung der Weender Futtermittelanalyse, die der Substratcharakterisierung zugrunde liegt.) - Schlattmann, M. (2011). Weiterentwicklung des Anaerobic Digestion
Model No. 1 (ADM1) zur Anwendung auf landwirtschaftliche Substrate. Dissertation, Technische Universität München. - Siegrist, H., Vogt, D., Garcia-Heras, J. L., Gujer, W. (2002).
Mathematical Model for Meso- and Thermophilic Anaerobic Sewage Sludge Digestion. Environmental Science & Technology 36(5), 1113–1123.
Technische Umsetzung¶
Das gesamte Modell ist pure Python:
| Modul | Zweck |
|---|---|
pyadm1.core.adm1 |
ADM1-Klasse mit ADM_ODE, Newton–Raphson-pH, Gasausgang |
pyadm1.core.adm_params |
Stöchiometrie, Kinetiken, Inhibition, \(\theta\)-Korrekturen |
pyadm1.core.solver |
Wrapper um scipy.integrate.solve_ivp (BDF, adaptive) |
pyadm1.substrates.feedstock |
XML-Parser, Sub-Fraktionierungs-Routing, Mischung |
pyadm1.components.biological.digester |
Komponenten-Wrapper inkl. Gasspeicher, Schlammvolumen und HRT-Logik |
Damit läuft die Simulation in jeder Standard-Python-Umgebung und auch in Containern, Web-Notebooks (Colab) und CI-Pipelines problemlos.