Jak działa symulacja płynów SPH: matematyka stojąca za cząstkami płynu

Prawdziwe płyny są ciągłe — nieskończenie wiele cząsteczek oddziałujących jednocześnie. SPH zamienia to w coś, z czym komputer sobie poradzi: skończony zbiór cząstek, z których każda niesie kawałek masy, pędu i energii płynu. Oto jak działa ta matematyka.

Problem z symulowaniem płynów

Zachowanie płynu jest rządzone równaniami Naviera-Stokesa — zestawem cząstkowych równań różniczkowych wiążących prędkość, ciśnienie, gęstość i lepkość w ośrodku ciągłym. Problem tkwi w słowie ciągłym. Prawdziwa woda zawiera około 3 × 1025 cząsteczek na litr. Symulowanie każdej z nich jest niemożliwe.

Istnieją dwie szerokie strategie radzenia sobie z tym. Metody siatkowe (podejścia eulerowskie) dzielą przestrzeń na stałe komórki i śledzą, jak płyn przepływa między nimi. Metody cząsteczkowe (podejścia lagrangeowskie) poruszają się razem z płynem, śledząc porcje masy, gdy przemieszczają się przez przestrzeń.

Hydrodynamika wygładzonych cząstek (SPH) to najszerzej stosowana metoda cząsteczkowa. Została pierwotnie wynaleziona w 1977 roku przez Lucy'ego i Gingolda & Monaghana do symulacji astrofizycznych, a później zaadaptowana do dynamiki płynów. Jej kluczową zaletą jest naturalna obsługa powierzchni swobodnych — granic między płynem a pustą przestrzenią — które są notorycznie trudne dla metod siatkowych.

Jądro SPH: rozprowadzanie mas punktowych na objętości

Główną matematyczną sztuczką w SPH jest funkcja jądra W(r, h), zwana też jądrem wygładzającym. Każda cząstka ma długość wygładzania h — promień wpływu. Jądro determinuje, jak właściwość niesiona w punkcie jest rozprowadzana po otaczającej objętości.

Jądro musi spełniać kilka właściwości:

Jądro sześciennego splajnu, wprowadzone przez Monaghana, jest najczęstszym wyborem. Jest gładkie, tanie obliczeniowo i dobrze zachowuje się numerycznie. Jądra Poly6 i Spiky, wprowadzone przez Müllera i in. w ich przełomowej pracy z 2003 roku o interaktywnym SPH, są używane specjalnie odpowiednio do obliczeń gęstości i ciśnienia — kluczowy wgląd, który dramatycznie poprawia stabilność symulacji.

Szacowanie wielkości z cząstek

Mając jądro, możesz oszacować dowolną wielkość skalarną lub wektorową A w punkcie r, sumując wkłady od wszystkich pobliskich cząstek j:

A(r) = Σⱼ mⱼ (Aⱼ / ρⱼ) W(r − rⱼ, h)

Gdzie mⱼ to masa cząstki j, Aⱼ to wartość A niesiona przez tę cząstkę, ρⱼ to jej gęstość, a W to jądro. Sama gęstość jest szacowana w ten sam sposób:

ρ(r) = Σⱼ mⱼ W(r − rⱼ, h)

Pochodne są obliczane analitycznie przez różniczkowanie jądra — bez potrzeby różnic skończonych. Gradient A w cząstce i wynosi:

∇A(rᵢ) = Σⱼ mⱼ (Aⱼ / ρⱼ) ∇W(rᵢ − rⱼ, h)

To jest matematyczna maszyneria, która przekłada ciągłe równania Naviera-Stokesa na dyskretny system cząsteczkowy.

Siła ciśnienia

Płyn opiera się kompresji. Gdy cząstki zbliżają się do siebie zbyt mocno, gęstość rośnie powyżej wartości spoczynkowej ρ₀, a siła przywracająca ciśnienie rozpycha je z powrotem. Jest to obliczane poprzez równanie stanu — najprostsze to prawo gazu doskonałego:

p = k(ρ − ρ₀)

Gdzie k to stała sztywności. Wyższe k czyni płyn bardziej nieściśliwym, ale może powodować niestabilność numeryczną (cząstki gwałtownie odbijają się). Prawdziwie nieściśliwe SPH używa bardziej wyrafinowanych solverów ciśnienia (PCISPH lub DFSPH), które iteracyjnie wymuszają zerową dywergencję, kosztem wyższej złożoności obliczeniowej.

Siła ciśnienia działająca na cząstkę i od jej sąsiadów j wynosi:

fᵢ_pressure = −mᵢ Σⱼ mⱼ ((pᵢ + pⱼ) / (2ρⱼ)) ∇W(rᵢ − rⱼ, h)

Symetryzowany człon ciśnienia (pᵢ + pⱼ)/2 jest ważny — zapewnia zachowanie trzeciej zasady dynamiki Newtona oraz zachowanie całkowitego pędu układu.

Siła lepkości

Prawdziwe płyny opierają się ścinaniu — to jest lepkość. Bez niej cząstki płynu przechodzące blisko siebie nie przekazują energii, a symulacja wygląda jak bąbelki, a nie woda. Człon lepkości SPH dodaje siłę tłumiącą proporcjonalną do różnicy prędkości między sąsiednimi cząstkami:

fᵢ_viscosity = μ Σⱼ mⱼ ((vⱼ − vᵢ) / ρⱼ) ∇²W(rᵢ − rⱼ, h)

Gdzie μ to współczynnik lepkości dynamicznej, a ∇²W to Laplasjan jądra. Müller i in. zaproponowali specjalne jądro dla tego członu, którego Laplasjan jest zawsze dodatni — unikając niestabilności związanych ze zmianą znaku, które dręczyły wcześniejsze implementacje.

Napięcie powierzchniowe

Woda tworzy krople, ponieważ molekuły wewnętrzne są przyciągane równomiernie we wszystkich kierunkach, podczas gdy molekuły powierzchniowe odczuwają netto skierowane do wewnątrz ciągnięcie. W SPH jest to modelowane za pomocą pola koloru — skalara, który wynosi 1 wewnątrz płynu i 0 na zewnątrz. Gradient tego pola wskazuje w kierunku powierzchni płynu; jego krzywizna determinuje siłę napięcia powierzchniowego.

Napięcie powierzchniowe jest tym, co czyni symulacje płynów SPH piękne: woda tworzy krople, krople się łączą, a cienkie warstwy naturalnie się rozrywają. Bez niego cząstki płynu rozpraszają się w bezkształtną chmurę.

Dlaczego SPH jest dobre do przepływów z powierzchnią swobodną

Metody siatkowe śledzą, które komórki siatki zawierają płyn, a które są puste. Gdy powierzchnia się porusza, komórki muszą być klasyfikowane, wypełniane i opróżniane — wyzwanie księgowe, które wymaga specjalnych metod, takich jak Volume of Fluid (VOF) czy podejścia Level Set.

SPH nie ma siatki. Cząstki płynem. Gdziekolwiek cząstki idą, powierzchnia płynu naturalnie podąża za nimi. Rozpryskiwanie, łączenie się, rozrywanie, formowanie kropel — wszystko to wyłania się automatycznie z dynamiki cząstek bez jakiegokolwiek jawnego śledzenia powierzchni.

To czyni SPH metodą z wyboru dla:

Zobacz SPH w akcji w przeglądarce — interaktywna symulacja pod adresem /fluid/ uruchamia tysiące cząstek w czasie rzeczywistym. Spróbuj wlewać płyn pod różnymi kątami lub dodawać przeszkody, by zobaczyć, jak przepływ się rozdziela i łączy z powrotem.

Wyzwanie wydajnościowe

Naiwny algorytm SPH sprawdza każdą cząstkę względem każdej innej cząstki, by znaleźć sąsiadów w promieniu 2h. To praca O(n²) — podwojenie liczby cząstek poczwórnie zwiększa obliczenia.

W praktyce wszystkie implementacje SPH w czasie rzeczywistym używają haszowania przestrzennego: dziel przestrzeń na komórki o rozmiarze 2h i przypisz każdą cząstkę do komórki. Zapytania o sąsiadów muszą sprawdzać tylko 27 otaczających komórek (w 3D). To redukuje złożoność do O(n) przeciętnie dla jednorodnie rozłożonych cząstek.

Mimo to tysiące cząstek na klatkę są bliskie limitowi CPU dla symulacji w czasie rzeczywistym. Nowoczesne wysokowierne SPH używa shaderów obliczeniowych GPU, by uruchamiać przeszukiwanie sąsiadów i obliczanie sił równolegle na tysiącach wątków GPU jednocześnie, umożliwiając miliony cząstek w tempie interaktywnym.

Najczęściej zadawane pytania

Czym jest hydrodynamika wygładzonych cząstek (SPH)?

Hydrodynamika wygładzonych cząstek (SPH) to metoda obliczeniowej dynamiki płynów, która reprezentuje płyny jako zbiór dyskretnych cząstek zamiast stałej siatki. Każda cząstka niesie właściwości takie jak masa, gęstość, ciśnienie i prędkość, a interakcje są obliczane poprzez wygładzanie tych właściwości za pomocą funkcji jądra.

Jak działa siła ciśnienia w SPH?

W SPH ciśnienie w każdej cząstce jest obliczane z jej lokalnej gęstości za pomocą równania stanu. Siła gradientu ciśnienia popycha cząstki z obszarów wysokiego ciśnienia do niskiego, zapobiegając kompresji. Jest to przybliżane przez sumowanie ważonych wkładów od sąsiednich cząstek w promieniu jądra wygładzającego.

Czym jest jądro wygładzające w SPH?

Jądro wygładzające (nazywane też funkcją wagową lub funkcją jądra) definiuje, jak duży wpływ mają sąsiednie cząstki w zależności od odległości. Popularne wybory to jądro sześcienne spline i jądro Wendlanda. Jądro musi być symetryczne, znormalizowane i zbliżać się do delty Diraca, gdy długość wygładzania dąży do zera.

Jak modelowana jest lepkość w SPH?

Lepkość w SPH jest zwykle modelowana jako sztuczny człon lepkości dodawany do obliczenia siły między parami cząstek. Siła lepka opiera się względnemu ruchowi między sąsiednimi cząstkami, wygładzając różnice prędkości. Ten człon zapobiega wzajemnej penetracji cząstek i stabilizuje symulację.

Co determinuje liczbę cząstek w symulacji SPH?

Liczba cząstek to balans między dokładnością a kosztem obliczeniowym. Więcej cząstek daje wyższą rozdzielczość i płynniejsze wyniki, ale skaluje się jako O(N log N) dla wyszukiwania sąsiadów. Typowe symulacje interaktywne używają 1000–100 000 cząstek, podczas gdy symulacje produkcyjne dla filmów używają milionów.

Czym jest równanie ciągłości w symulacji płynów?

Równanie ciągłości mówi, że masa musi być zachowana — to, co wpływa, musi wypłynąć. W SPH rządzi ono tym, jak gęstość zmienia się w czasie na podstawie prędkości cząstek i ich sąsiadów. Zapewnia, że symulacja utrzymuje fizyczne zachowanie masy przez całe obliczenia.

Jak działa napięcie powierzchniowe w SPH?

Napięcie powierzchniowe w SPH jest modelowane za pomocą sił kohezyjnych między cząstkami na powierzchni płynu. Cząstki na granicy mają mniej sąsiadów niż cząstki wewnętrzne, co tworzy asymetrię pociągającą cząstki powierzchniowe do wewnątrz, naśladując siły molekularne odpowiedzialne za prawdziwe napięcie powierzchniowe.

Jakie są ograniczenia SPH dla symulacji płynów?

SPH zmaga się z niestabilnością rozciągania (sztuczne zbrylanie cząstek), utrzymaniem nieściśliwości (często wymaga małych kroków czasowych), warunkami brzegowymi (ściany są trudne do zaimplementowania) oraz kosztem obliczeniowym przy scenach wysokiej rozdzielczości. Techniki takie jak position-based fluids czy metody siatkowe często uzupełniają SPH w różnych scenariuszach.

Jaka jest różnica między SPH a symulacjami płynów opartymi na siatce?

Metody siatkowe (jak różnice skończone czy objętości skończone) rozwiązują równania płynów na stałych siatkach przestrzennych, co czyni je wydajnymi dla dużych jednorodnych regionów płynu. SPH jest lagrangeowskie — porusza się razem z płynem — co czyni je naturalnym dla powierzchni swobodnych, rozpryskiwania i dużych deformacji, ale mniej wydajnym dla masowych regionów płynu.

Jak optymalizuje się wyszukiwanie sąsiadów w SPH?

Naiwne wyszukiwanie sąsiadów jest O(N²), ponieważ każda cząstka musi sprawdzić każdą inną cząstkę. Symulacje SPH używają haszowania przestrzennego, siatek jednorodnych lub drzew k-d, by zredukować to do O(N log N) lub nawet O(N) w praktyce. Każda cząstka musi sprawdzić tylko sąsiadów w promieniu jądra wygładzającego h.