Napisałem program do symulacji płynów oparty na cząsteczkach. Trudno powiedzieć, czy otrzymam właściwy wynik. Wizualizowany wynik wydaje się rozsądny, ale jego część wygląda dziwnie. Nie wiem, czy to jest cecha płynu. Czy istnieje jakaś dokładna metoda sprawdzenia, czy mój program ma rację?
Zmiana niektórych szczegółów :
Mój program jest programem do symulacji cząstek 2D. Płyn jest ściśliwy. Implementacja jest prawie oparta na klasycznej pracy:
Müller, Matthias, David Charypar i Markus Gross. „Symulacja płynów oparta na cząsteczkach dla aplikacji interaktywnych”. Postępowanie w sprawie ACM SIGGRAPH 2003
Rozwiązałem równanie Naviera-Stokesa metodą iteracyjną. Uwzględniono jedynie nacisk, grawitację, lepkość i napięcie powierzchniowe.
physics
simulation
fluid-sim
Yyao
źródło
źródło
Odpowiedzi:
Porównaj to z czyimś oprogramowaniem. Przeprowadź standardowy test i sprawdź, czy otrzymujesz mniej więcej tę samą odpowiedź, co inne. Jeśli otrzymasz tę samą odpowiedź, prawdopodobieństwo poprawnego kodu jest dość wysokie.
Niektóre testy:
Przepłyń obok cylindra. W 2d weź prostokątną domenę, cylinder na środku, napływ po lewej, odpływ w walce i oblicz siłę na cylindrze. Oto test porównujący garść kodów.
Przepływ wyporu. Zamknięte pudełko, gorąca płyta na dole, zimna płyta na górze, gorący płyn zaczyna rosnąć z powodu siły wyporu. Oto punkt odniesienia .
Rosnąca bańka, punkt odniesienia .
Ale niestety porównanie tych kodów z kodami naukowymi może być dość trudne. Wydaje mi się, że wprowadziłeś coś takiego jak SPH lub stabilne płyny, które nie są stworzone dla dokładności, ale dla stabilności.
Weźmy na przykład przepływ obok cylindra. Rozpocząłbym test od bardzo małej liczby Reynoldsa, a następnie mierzyłem siłę działającą na cylinder w miarę zwiększania dokładności symulacji (niższy krok czasowy, zwiększenie podziału lub zwiększenie liczby cząstek). Czy siła zbiega się z jakąś liczbą? Jeśli nie, to masz problem, a jeśli tak, to spójrz na papier porównawczy i porównaj swój wynik z innymi.
Ta metoda jest bardzo podobna do tej, której używam do testowania mojego raytracera. Po prostu renderuję scenę testową za pomocą renderera innej osoby i porównuję ją z moim wynikiem. Czy zbliżają się do tego samego rezultatu? Jeśli tak, to mam rację, jeśli nie, to mam rację.
źródło