Skip to content

Commit 7a36fa0

Browse files
authored
Fix frozen particles affected by gravity when using Projective Fluids (#373)
* applying gravity to active particles only in 'clearAccelerations' * setting acceleration of non-active particles to zero * fixed non-active particles advected in PF
1 parent c5a063d commit 7a36fa0

2 files changed

Lines changed: 16 additions & 5 deletions

File tree

SPlisHSPlasH/PF/TimeStepPF.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,16 @@ void TimeStepPF::initialGuessForPositions(const unsigned int fluidModelIndex)
183183
for (int i = 0; i < (int)numParticles; i++)
184184
{
185185
m_simulationData.setOldPosition(fluidModelIndex, i, model->getPosition(i));
186-
const auto newPos = (model->getPosition(i) + h * model->getVelocity(i) + (h * h) * model->getAcceleration(i)).eval();
187-
model->setPosition(i, newPos);
188-
m_simulationData.setS(fluidModelIndex, i, newPos);
186+
if (model->getParticleState(i) == ParticleState::Active)
187+
{
188+
const auto newPos = (model->getPosition(i) + h * model->getVelocity(i) + (h * h) * model->getAcceleration(i)).eval();
189+
model->setPosition(i, newPos);
190+
m_simulationData.setS(fluidModelIndex, i, newPos);
191+
}
192+
else
193+
{
194+
m_simulationData.setS(fluidModelIndex, i, model->getPosition(i));
195+
}
189196
}
190197
}
191198

SPlisHSPlasH/TimeStep.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,15 @@ void TimeStep::clearAccelerations(const unsigned int fluidModelIndex)
4141
for (unsigned int i=0; i < count; i++)
4242
{
4343
// Clear accelerations of dynamic particles
44-
if (model->getMass(i) != 0.0)
44+
Vector3r& a = model->getAcceleration(i);
45+
if (model->getMass(i) != 0.0 && model->getParticleState(i) == ParticleState::Active)
4546
{
46-
Vector3r &a = model->getAcceleration(i);
4747
a = grav;
4848
}
49+
else
50+
{
51+
a.setZero();
52+
}
4953
}
5054
}
5155

0 commit comments

Comments
 (0)