From cf9fd22ef7e4940b3484e91e9892c7c4aad64a69 Mon Sep 17 00:00:00 2001 From: Lukas Hof Date: Tue, 9 Dec 2025 14:39:15 +0100 Subject: [PATCH 1/3] applying gravity to active particles only in 'clearAccelerations' --- SPlisHSPlasH/TimeStep.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SPlisHSPlasH/TimeStep.cpp b/SPlisHSPlasH/TimeStep.cpp index e331417c..a9f24e60 100644 --- a/SPlisHSPlasH/TimeStep.cpp +++ b/SPlisHSPlasH/TimeStep.cpp @@ -41,7 +41,7 @@ void TimeStep::clearAccelerations(const unsigned int fluidModelIndex) for (unsigned int i=0; i < count; i++) { // Clear accelerations of dynamic particles - if (model->getMass(i) != 0.0) + if (model->getMass(i) != 0.0 && model->getParticleState(i) == ParticleState::Active) { Vector3r &a = model->getAcceleration(i); a = grav; From 9c8b5a2fca888a27121788c0916d46724e2785d5 Mon Sep 17 00:00:00 2001 From: Lukas Hof Date: Mon, 16 Mar 2026 14:56:37 +0100 Subject: [PATCH 2/3] setting acceleration of non-active particles to zero --- SPlisHSPlasH/TimeStep.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SPlisHSPlasH/TimeStep.cpp b/SPlisHSPlasH/TimeStep.cpp index a9f24e60..9ec06e56 100644 --- a/SPlisHSPlasH/TimeStep.cpp +++ b/SPlisHSPlasH/TimeStep.cpp @@ -41,11 +41,15 @@ void TimeStep::clearAccelerations(const unsigned int fluidModelIndex) for (unsigned int i=0; i < count; i++) { // Clear accelerations of dynamic particles + Vector3r& a = model->getAcceleration(i); if (model->getMass(i) != 0.0 && model->getParticleState(i) == ParticleState::Active) { - Vector3r &a = model->getAcceleration(i); a = grav; } + else + { + a.setZero(); + } } } From 9c81a4c8c4e454bd0e61e9b8780e427951d71a9b Mon Sep 17 00:00:00 2001 From: Lukas Hof Date: Thu, 30 Apr 2026 18:34:36 +0200 Subject: [PATCH 3/3] fixed non-active particles advected in PF --- SPlisHSPlasH/PF/TimeStepPF.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/SPlisHSPlasH/PF/TimeStepPF.cpp b/SPlisHSPlasH/PF/TimeStepPF.cpp index 4bf2c94b..6fcc5b9c 100644 --- a/SPlisHSPlasH/PF/TimeStepPF.cpp +++ b/SPlisHSPlasH/PF/TimeStepPF.cpp @@ -183,9 +183,16 @@ void TimeStepPF::initialGuessForPositions(const unsigned int fluidModelIndex) for (int i = 0; i < (int)numParticles; i++) { m_simulationData.setOldPosition(fluidModelIndex, i, model->getPosition(i)); - const auto newPos = (model->getPosition(i) + h * model->getVelocity(i) + (h * h) * model->getAcceleration(i)).eval(); - model->setPosition(i, newPos); - m_simulationData.setS(fluidModelIndex, i, newPos); + if (model->getParticleState(i) == ParticleState::Active) + { + const auto newPos = (model->getPosition(i) + h * model->getVelocity(i) + (h * h) * model->getAcceleration(i)).eval(); + model->setPosition(i, newPos); + m_simulationData.setS(fluidModelIndex, i, newPos); + } + else + { + m_simulationData.setS(fluidModelIndex, i, model->getPosition(i)); + } } }