← ← Wszystkie projekty

04 · czerwiec 2026

Numeryczne modelowanie spalania metanu

Trzy własne solwery w Pythonie do spalania metanu w powietrzu, bez bibliotek kinetycznych: temperatura adiabatyczna (Newton–Raphson), zapłon w reaktorze 0D (RK4) i profil płomienia laminarnego 1D (różnice skończone, Newton i algorytm Thomasa).

PythonNumPySpalanieMetody numeryczneMRSLaTeX

Parametry

Mieszanina
CH₄ + powietrze, φ = 0,5 – 1,0
Termodynamika
wielomiany NASA-7
Kinetyka
1-krokowa, Westbrook–Dryer
Metody numeryczne
Newton–Raphson · RK4 · MRS
Temperatura adiabatyczna
2326 K (φ = 1)
Pozorna energia aktywacji
175 kJ/mol

Cel projektu

Napisałem od zera trzy metody numeryczne do spalania metanu w powietrzu. Celowo nie użyłem gotowych bibliotek kinetycznych, takich jak Cantera. Bardziej niż sama fizyka spalania interesowała mnie strona numeryczna: dyskretyzacja, zbieżność i sprawdzenie, czy wynikom można ufać.

Globalna reakcja stechiometryczna:

CH₄ + 2 (O₂ + 3,76 N₂) → CO₂ + 2 H₂O + 7,52 N₂

Każda część to inny typ zadania numerycznego: równanie nieliniowe, układ równań różniczkowych zwyczajnych i równanie różniczkowe cząstkowe.

Część Zagadnienie Metoda numeryczna
1 Temperatura adiabatyczna Tad(φ) Newton–Raphson (równanie nieliniowe)
2 Zapłon w reaktorze 0D: T(t), Y(t) Runge–Kutta 4. rzędu (układ ODE)
3 Profil płomienia laminarnego 1D różnice skończone, Newton i algorytm Thomasa (PDE)

Metodologia

Część 1: temperatura adiabatyczna

Temperaturę wyznaczam z bilansu entalpii mieszaniny metodą Newtona–Raphsona. Ciepło właściwe cp i entalpię h liczę z siedmiowspółczynnikowych wielomianów NASA w formacie CHEMKIN, osobno dla niskich i wysokich temperatur.

Dla mieszaniny stechiometrycznej metoda zbiega się w 3–4 iteracjach. Residuum bilansu entalpii spada z rzędu 10⁵ J poniżej 10⁻⁸ J, czyli kwadratowo, tak jak przewiduje teoria.

Część 2: reaktor 0D

Zapłon modeluję w jednorodnym, adiabatycznym reaktorze o stałym ciśnieniu, z jednokrokową globalną kinetyką Arrheniusa według Westbrooka i Dryera (1981). Rząd reakcji względem paliwa wynosi −0,3, a względem tlenu 1,3. Układ równań na YCH₄, YO₂ i T całkuję jawną metodą Rungego–Kutty 4. rzędu z krokiem 1 µs.

Czas zwłoki zapłonu policzyłem dla siedmiu temperatur początkowych z zakresu 1200–1500 K. Z wykresu Arrheniusa, ln(τ) od 1000/T, wyznaczyłem dopasowaniem liniowym pozorną energię aktywacji.

Część 3: płomień laminarny 1D

Równanie reakcji i dyfuzji rozwiązuję w układzie związanym z frontem płomienia:

ρ cp Su dT/dx = d/dx (λ dT/dx) + q ω(T)

Dyskretyzuję je metodą różnic skończonych na równomiernej siatce: człon dyfuzyjny schematem centralnym, a konwekcyjny przeciwprądowym (upwind). Powstały układ nieliniowy rozwiązuję iteracją Newtona–Raphsona. Jakobian jest trójdiagonalny, więc algorytm Thomasa robi każdy krok w O(N) operacji, a nie w O(N³), jak pełna eliminacja Gaussa.

Rozwiązanie sprawdziłem badaniem zbieżności siatkowej dla 51, 101, 201 i 401 węzłów.

Wyniki

Wielkość Wynik
Temperatura adiabatyczna, φ = 1 2326 K
Iteracje Newtona do zbieżności 3–4
Czas zwłoki zapłonu, T₀ = 1300 K 18,3 ms
Pozorna energia aktywacji 175 kJ/mol
Grubość frontu płomienia, N = 201 0,060 mm

Pozorna energia aktywacji wyszła 175 kJ/mol, wyraźnie mniej niż 203 kJ/mol wpisane do modelu kinetycznego. Tego się spodziewałem: ujemny rząd reakcji względem paliwa spłaszcza zależność czasu zwłoki od temperatury.

Badanie siatkowe dało grubość frontu 0,090 / 0,070 / 0,060 / 0,055 mm dla 51, 101, 201 i 401 węzłów. Wartość maleje i zmienia się coraz wolniej, ale przy 401 węzłach jeszcze się nie ustaliła. Front płomienia mieści się na kilkunastu węzłach, więc wynik nadal zależy od gęstości siatki.

Ograniczenia modelu

Mechanizm jednokrokowy pomija dysocjację produktów, dlatego temperatura adiabatyczna wychodzi wyższa niż z pełnej równowagi chemicznej. Gdybym rozwijał projekt, zacząłbym od mechanizmu wielokrokowego. Potem dodałbym adaptacyjny krok całkowania dla układu sztywnego i wyznaczanie prędkości spalania laminarnego Su jako wartości własnej zagadnienia brzegowego.

Narzędzia

Python 3 (NumPy, Matplotlib) · LaTeX

Galeria wyników

Temperatura adiabatyczna w funkcji współczynnika nadmiaru paliwa i zbieżność metody Newtona dla φ = 1
Temperatura adiabatyczna w funkcji współczynnika nadmiaru paliwa i zbieżność metody Newtona dla φ = 1
Zapłon w reaktorze 0D: przebieg temperatury z zaznaczonym czasem zwłoki i ułamki masowe CH₄ oraz O₂
Zapłon w reaktorze 0D: przebieg temperatury z zaznaczonym czasem zwłoki i ułamki masowe CH₄ oraz O₂
Wykres Arrheniusa: czas zwłoki zapłonu dla 1200–1500 K z dopasowaną pozorną energią aktywacji
Wykres Arrheniusa: czas zwłoki zapłonu dla 1200–1500 K z dopasowaną pozorną energią aktywacji
Profil temperatury płomienia laminarnego 1D i jego gradient, grubość frontu δ = 0,060 mm
Profil temperatury płomienia laminarnego 1D i jego gradient, grubość frontu δ = 0,060 mm
Zbieżność siatkowa: grubość frontu płomienia dla N = 51, 101, 201 i 401 węzłów
Zbieżność siatkowa: grubość frontu płomienia dla N = 51, 101, 201 i 401 węzłów