Strona głównaArtykułyDynamika Płynów Obliczeniowa

Przepływ Lattice-Boltzmann: Dynamika Płynów z Teorii Kinetycznej

Omijaj bezpośrednie rozwiązywanie równań Naviera-Stokes — symuluj kolizje populacji cząstek na małej siatce i pozwól, aby ruch płynu wynik był emergentnym wynikiem.

mysimulator teamZaktualizowano — czerwiec 2026≈ 12 min czytania▶ Otwórz symulację

Przejście mezoskalowe wokół równań Naviera-Stokesa

Większość kodów obliczeniowej dynamiki płynów atakuje równania Naviera-Stokesa bezpośrednio: dyskretyzują pola makroskopowe – gęstość ρ, prędkość u, ciśnienie p – na siatce i posuwają je do przodu, co zwykle wymaga globalnego rozwiązania Laplace'a dla utrzymania zgodności z warunkiem wyporu ciśnienia co krok, aby utrzymać przepływ bez rozbieżności. Metoda Boltzmanna Latticzną (LBM) podąża zupełnie inną ścieżką, inspirowaną teorią kinetyczną: zamiast pól makroskopowych, śledzi populacje fikcyjnych cząstek przemieszczających się między sąsiednimi komórkami siatki i kolidujących lokalnie. Gęstość i prędkość odzyskuje się następnie jako proste sumy – zachowanie płynu nie jest narzucone, a ono wyłania się.

Kontynuacja równania Boltzmanna w postaci ciągłej, ∂f/∂t + ξ·∇f = Ω(f), dzieli ewolucję płynów na termin strumieniowy (cząstki poruszające się swobodnie) i termin kolizyjny Ω, który wypycha rozkład f z powrotem w kierunku równowagi lokalnej. Kluczową sztuczką LBM jest dyskretyzacja zarówno przestrzeni, jak i prędkości jednocześnie: przestrzeń staje się regularną siatką, a ciągły przestrzeń prędkości skumuluje się do niewielkiej liczby ustalonych kierunków na węźle. Pomimo drastycznego uproszczenia, rozwinięcie Chapman-Enskog pokazuje, że uzyskane aktualizacje odzyskuje inkompresybilne równania Naviera-Stokesa drugiego rzędu względem liczby Macha.

demo na żywo · powiązana symulacja● LIVE

D2Q9 – dziewięć kierunków na węźle

Najpopularniejszą siatką 2D nazywa się D2Q9: 2 wymiary, 9 dyskretnych kierunków prędkości na węźle – osiem kierunków kompasowych oraz pozostanie bez ruchu. Każdy z tych kierunków ma przypisany współczynnik, który zapewnia, że siatka poprawnie oddaje momenty masy i pędu ciągłej dystrybucji równowagi:

e0=(0,0) rest              w0 = 4/9
e1..4 = axis-aligned N/E/S/W    w1..4 = 1/9
e5..8 = diagonal NE/NW/SE/SW    w5..8 = 1/36

// Σ w_i = 1  → conserves mass
// speed of sound on the lattice: c_s² = 1/3

Kolizja, następnie strumień

W każdym kroku czasowym odbywa się dokładnie dwie rzeczy w każdym węźle. Po pierwsze, kolizja: każda z dziewięciu populacji f_i relaksuje się w kierunku wartości stanu równowagi lokalnej f_i^eq, ustalanej przez czas relaksacji τ — aproksymacja BGK (Bhatnagar-Gross-Krook), która zastępuje pełny całunek kolizji pojedynczą, liniową relakcją:

f_i* = f_i − (1/τ) · (f_i − f_i^eq) // kolizja f_i^eq = w_i · ρ · [1 + 3(e_i·u) + 4.5(e_i·u)² − 1.5·u²] kinematyczna lepkość: ν = (τ − 0.5) / 3 // τ ustawia lepkość bezpośrednio Po drugie, strumień: każda populacja f_i* po kolizji jest przesuwana dokładnie o jedno komórkę w jej własnym kierunku e_i, więc f_i(x + e_i, t+1) = f_i*(x, t). Krok kolizji jest całkowicie lokalny — każdy węzeł aktualizuje się niezależnie od sąsiadów, używając tylko swoich dziewięciu liczb — podczas gdy strumień potrzebuje jedynie danych pierwszego sąsiada. Ta lokalność jest właśnie powodem, dla którego LBM dobrze paralelizuje się na GPU: nie ma globalnego układu liniowego do rozwiązania w każdym punkcie pętli.

Czas relaksacji τ musi pozostać powyżej 0.5, aby zapewnić stabilność, a w praktyce prędkość bezwzględna |u|/c_s powinna również pozostawać komfortowo poniżej około 0.3 — przekroczenie któregokolwiek z tych limitów powoduje, że założenie o niskiej prędkości leżące u podstaw całego schematu ulega naruszeniu i symulacja się zawala.

f_i* = f_i − (1/τ) · (f_i − f_i^eq)         // collision

f_i^eq = w_i · ρ · [1 + 3(e_i·u) + 4.5(e_i·u)² − 1.5·u²]

kinematic viscosity:  ν = (τ − 0.5) / 3      // τ sets viscosity directly

Odzyskiwanie gęstości i prędkości

Makroskopijne wielkości, które użytkownik w rzeczywistości obserwuje – gęstość i prędkość – to jedynie momenty z dziewięciu populacji znajdujących się na węźle, obliczone w jednym kroku przetworzenia lokalnych danych:

ρ(x,t) = Σ_i f_i(x,t) // zeroth moment: masa ρ·u_x(x,t) = Σ_i f_i(x,t) · e_ix // first moment: pęd ρ·u_y(x,t) = Σ_i f_i(x,t) · e_iy

ciśnienie (forma idealnego gazu, jednostki siatki): p = ρ·c_s² = ρ/3 Granice stałe wykorzystują najprostszy dostępny trik z odbijaniem – populacja przyjeżdżająca do węzła granicy jest odrzucana prosto w tym samym kierunku, z którego przyszła, co za pomocą jedynie operacji lokalnych reprodukuje zerową prędkość na granicy. Wloty i wyloty o zadanym ciśnieniu lub prędkości używają bardziej skomplikowanego schematu Zou-He, który analitycznie rozwiązuje nieznane populacje przychodzące do granicy.

ρ(x,t)    = Σ_i f_i(x,t)              // zeroth moment: mass
ρ·u_x(x,t) = Σ_i f_i(x,t) · e_ix       // first moment: momentum
ρ·u_y(x,t) = Σ_i f_i(x,t) · e_iy

pressure (ideal-gas form, lattice units): p = ρ·c_s² = ρ/3

Jak symulacja tutaj z niego korzysta

Symulacja na tym koncie uruchamia pełny cykl collide-stream na siatce D2Q9 każdego klatka, z solidnym przeszkoda umieszczoną w jednorodnym przepływie i odbijaniu się od jej brzegu. Przy umiarkanej rozdzielczości siatki cały pętla — kolizja, strumieniowanie, obsługa granic i renderowanie kolorów zależne od prędkości — działa komfortowo z 60 fps w prostym JavaScript-ie na tablicach typowych; nie jest potrzebny żaden przekaz obliczeniowy WebGL, dopóki siatka się nie zrobi znacznie większa. Obserwuj przepływ przy umiarkowanym liczbie Reynoldsa i zobaczysz klasową uliczkę Kármána pojawiającą się za przeszkodą — zamienne wiry odrywające się, całkowicie jako konsekwencja tego samego lokalnego prawa kolizji działającego na każdym węźle, bez gdziekolwiek napisanej logiki zrzutu wirów w kodzie.

Frequently asked questions

Dlaczego metoda Boltzmanna na siatce symuluje fikcyjne cząstki zamiast bezpośrednio rozwiązywać równania Navier-Stokes?

LBM działa na poziomie mezoskalowym, śledząc rozkłady populacji cząstek na małym, stałym zestawie kierunków siatki i pozwalając prostej lokalnej regule kolizji na relaksowanie ich w kierunku równowagi. Rozszerzenie Chapman-Enskog pokazuje, że to odzyskuje niezmienne (incompressible) równania Navier-Stokes jako konsekwencję emergentną, podczas gdy rzeczywiste obliczenia krok po kroku ograniczają się do lokalnych dodawania i wyszukiwań, które naturalnie lepiej paralelizują niż rozwiązywanie globalnej równości ciśnienia i Poissona na każdym kroku.

Co w zasadzie kontroluje czas relaksacji τ w kroku kolizji BGK?

τ ustawia kinematyczną lepkość symulowanego płynu, poprzez ν = (τ − 0.5)/3 w jednostkach siatki. Większy τ oznacza bardziej lepką, syropową ciecz; τ zbliżający się do 0.5 oznacza lepkość zbliżającą się do zera. Symulacja staje się numerycznie niestabilna, gdy τ zbliża się zbyt mocno do 0.5, zwłaszcza przy wyższych prędkościach przepływu, dlatego rzeczywiste implementacje utrzymują liczbę Macha małą i τ komfortowo powyżej tego ograniczenia.

Dlaczego stosuje się odbicie (bounce-back) dla ścian solidnych zamiast po prostu ustawiania prędkości na zero?

Odbicie (bounce-back) odzwierciedla każdą przychodzącą populację cząstek prosto w kierunku, z którego przyszła, na węźle ściany, co reprodukuje warunek bezślizgowy (zerową prędkość na ścianie) wyłącznie poprzez lokalne operacje pierwszego sąsiada, które pasują do struktury strumieniowania LBM. Bezpośrednie narzucanie prędkości wymagałoby rozwiązywania dla spójnych funkcji rozkładu na granicy, co robi schemat Zou-He, gdy konieczne jest wymuszenie określonej prędkości przepływu wejściowego lub wyjściowego zamiast prostej ściany.

Wypróbuj na żywo

Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz the simulation i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.

▶ Otwórz symulację the simulation

Co znalazłeś?

Dodaj kroki odtworzenia (opcjonalnie)