Regisztráció és bejelentkezés

Örvényalapú folyadékszimuláció

Az dolgozatom témája az örvényalapú folyadékszimuláció.

Az örvényalapú módszerek egyik nagy előnye, hogy képesek pontosabban és megbízhatóbban modellezni a valós világban lezajló fizikai folyamatokat, mint más szimulációs eljárások.

Az örvényalapú technika lényege, az hogy megpróbáljuk az örvénylésmezőt (vorticity field) diszkretizálni. Ez úgy történik, hogy a folytonos mezőt véges számú örvényrészecskével modellezzük. Ezeket az örvényrészecskéket (továbbiakban örvény) a pozíciójuk, valamint a vorticizásuk jellemzi.

Az örvények hatnak egymásra, mely miatt $O(n^2)$ lesz a komplexitása n örvényszám mellett a szimulációnak.

Könnyen belátható, hogy ez nagyobb részecskeszám mellett hatalmas terhet jelenthet a számítógépnek, valamint csökkenti a párhuzamosíthatóság hatékonyságát.

A probléma enyhítésére vezethetők be a nyomjelző-részecskék (tracer particle), melyekre hatnak az örvények, viszont ezeknek hatása nem érvényesül semmire.

Ezen részecskék kizárólag a megjelenítésben szerepelnek, és mivel a komplexitást csak lineárisan növelik, így számuk nagyságrendileg meghaladhatja az örvényrészecskék számát.

Az örvényalapú szimuláció egyik legfőbb tulajdonsága az, hogy az általa modellezett folyadék összenyomhatatlanul viselkedik, mely potenciálisan pontosabb viselkedést, és akár esztétikai többletet is nyújthat.

Egy másik tulajdonsága a divergenciamentesség, ami következik az összenyomhatatlanságból.

Ez azt jelenti, hogy a folyadék áramlásmezőjén vett sűrűség állandó.

Ennek eredményeképpen a folyadékból nem távolítódhat el anyag, de nem is adódhat hozzá.

Az örvények segítségével hatékonyan lehet pontos eredményeket, mivel viszonylag kisszámú örvény is optimális lehet megfelelő algoritmussal.

A módszer egyik legnagyobb kihívása az, hogy az örvények, valamint a nyomjelző-részecskék az idő múlásával összecsomósodhatnak, azaz egyetlen pozíció köré csoportosulhatnak, vagy éppen ellenkezőleg, eltávoladhatnak egymástól.

Erre a rendellenességre megoldás lehet a "remeshing", melynek lényege, hogy bizonyos feltételek teljesülése esetén (pl. adott idő elteltével, túl közel kerülnek egymáshoz) új örvényeket hozunk létre a régiek megtartása nélkül (áthelyezzük azokat).

Optimális esetben a remeshing során az örvénymezőben kis eltérés tapasztalható.

A remeshing az egyik legkritikusabb lépés a szimuláció során, és sokféle megoldás létezhet, melyek hatékonyságukban és pontosságukban eltérőek lehetnek.

Egy másik kihívás a határfeltételek esetén való viselkedés meghatározása és biztosítása. Ez nem triviális feladat, hiszen sokféleképpen járhatunk el.

Az implementálás során a Rust programnyelvet használom, a videókártyával való kommunikációra pedig az OpenGL grafikus API-t.

A részecskéket billboardokként jelenítem meg, és a kód esszenciális része pedig compute shader-en fut, hiszen párhuzamosítható.

szerző

  • Jakab Martin
    Villamosmérnöki szak, alapképzés
    alapképzés (BA/BSc)

konzulens

  • Dr. Szécsi László
    docens, Irányítástechnika és Informatika Tanszék