SPH implementieren
-
Hallo
ich versuche mich grade daran, SPH mithilfe von C++ zu implementieren.
zu nächst noch in 2D. dummerweise sind die Formeln alles andere als einfach
zu verstehen...ich habe verstanden, dass ich einen kreisformigen bereich mit dem radius
"h" abtasten muss, und die partikel dadrin mithilfe einer kernelfunktion
zusammenzuaddieren. als kernel nehme ich die sigmoid-funktion (s(0)=1, s(h)=0).
das ergebnis sieht schon in maßen aus wie eine flüssigkeit, aber nur, wenn
ich alle gewichte (s(r)) zusammenaddiere und am ende durch das gesamtgewicht
teile. ist das richtig so?weiterhin fällt mir auf, das meine "flüssigkeit" eine zu große viskosität hat,
das zeug will nicht fließen. je kleiner ich "h" wähle, desto geringer wird
die viskosität, jedoch wird die simulation irgentwann instabil.zusätzlich fangen meine teilchen hin und wieder an, sich zusammenzukleben
float ax = 0.f; // beschleunigung x float ay = 0.f; // beschleunigung y float sw = 0.f; // summe der gewichte foreach(particles) { Particle *p = particles[i]; float diffx = x - p->x; // entfernung x-achse float diffy = y - p->y; // entfernung y-achse float rsq = diffx * diffx + diffy * diffy; // r² if (rsq <= h * h) // innerhalb des kernels { float w = W(sqrtf(rsq)); // sigmoid funktion, W(0)=1, W(h)=0 sw += w; // gewicht aufzummieren ax += w * p->vx; ay += w * p->vy; // partikel gewichten //////////////////// HIER if (rsq > 0.00001f) { ax += diffx * w * 3.f; ay += diffy * w * 3.f; } //////////////////// HIER } } vx = ax / sw; // neue geschwindigkeit vy = ay / sw;
wenn ich den markeirten bereich auskommentiere, pappen die parikel zusammen,
wenn ich ihn drinhabe, klappt es scheinbar. ich versuche damit nur, ein
partikel wegzustoßen, wenn es zu nah kommt.und:
wie bekomme ich die viskosität kleiner? es ist eher ein zähflüssiges
verschieben als ein fließen...MfG sph-mensch
danke euch allen im voraus und eine gute nacht
-
kann mir den einer einen hinweis, eine erklärung oder ein beispielcode zu
SPH geben? (bitte kein optimierter code, das bringt nichts).auch wäre es gut zu wissen, ob wenigstens der ansatz richtig ist
-
Hi,
ich weiß nicht welches Paper du als Grundlage verwendest, aber ich kann dir sehr dieses hier ans Herzen legen! Wieviel Partikel benutzt du momentan? Bei mir war das Problem, dass unter 5000 alles recht instabil war (in 3D).
mfG KaPtainCugel