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)); + } } } diff --git a/SPlisHSPlasH/TimeStep.cpp b/SPlisHSPlasH/TimeStep.cpp index e331417c..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 - if (model->getMass(i) != 0.0) + 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(); + } } }