donderdag 18 december 2008

PIC & FLIP met SPH

Hoe hebben we PIC & FLIP geïntegreerd met SPH? Even een algemeen overzicht van het algoritme dat uit 3 stappen bestaat:

Stap 1: mapping
Alle particles hebben een massa en een velocity. Elke particle mapped deze waarden op een gridstructuur:
  • Density: met behulp van SPH kernel. Te kleine waarden (bijvoorbeeld alles kleiner dan 1) en te grote waarden (groter dan de reference density of dus de densiteit van water) worden geclamped. Extreme waarden zorgen namelijk voor instabiliteit bij het berekenen van de krachten in stap 2.
  • Velocity [x y z]: met behulp van een gewogen gemiddelde van particles die binnen de smoothing range van het grid vallen. Eventueel zou dit ook met kernels kunnen maar dan moeten extreme waarden ook gefilterd worden.


Mapping van een particle density op het grid.

Stap 2: krachten tussen gridcellen uitrekenen
Deze waarden kunnen we nu gebruiken om de SPH krachten (druk, viscositeit en externe krachten) op het grid te berekenen. We gebruiken dezelfde smoothing length die we hadden voor de particles. De afstand tussen twee gridcellen nemen we namelijk (ongeveer) gelijk aan de afstand tussen twee particles. Een hogere gridresolutie is ook mogelijk, maar dan moeten we wel opletten dat de waarden die we in deze stap berekenen geschaald worden. We willen eigenlijk dat het aantal cellen die een kracht op een andere cel uitoefenen gelijk blijft ongeacht de gridresolutie. Hiertoe kunnen we een kleinere smoothing length nemen, maar dan smoothen we alles teveel uit. Het is beter om meer cellen te beschouwen en daarna te herschalen.
Om de SPH krachten uit te kunnen rekenen hebben we de massa nodig van een gridcell. Deze kunnen we berekenen aan de hand van het volume van een cell en de densiteit op het grid.

Stap 3: interpolatie naar particles
We interpoleren de gridkrachten trilineair terug naar de particles, waarna deze krachten geïntegreerd worden om de nieuwe snelheid te bepalen. In de FLIP methode moeten we enkel het verschil in snelheid terug interpoleren naar de particles om smoothing tussen het grid en de particles te beperken. Met SPH is dit inherent: via de krachten berekenen we eigenlijk de versnelling, of dus het verschil in snelheid.

Geen opmerkingen: