MCPcopy Create free account
hub / github.com/InteractiveComputerGraphics/SPlisHSPlasH / initModel

Method initModel

SPlisHSPlasH/FluidModel.cpp:285–327  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

283}
284
285void FluidModel::initModel(const std::string &id, const unsigned int nFluidParticles, Vector3r* fluidParticles, Vector3r* fluidVelocities, unsigned int* fluidObjectIds, const unsigned int nMaxEmitterParticles)
286{
287 m_id = id;
288 init();
289 releaseFluidParticles();
290 resizeFluidParticles(nFluidParticles + nMaxEmitterParticles);
291
292 // copy fluid positions
293 #pragma omp parallel default(shared)
294 {
295 #pragma omp for schedule(static)
296 for (int i = 0; i < (int)nFluidParticles; i++)
297 {
298 getPosition0(i) = fluidParticles[i];
299 getPosition(i) = fluidParticles[i];
300 getVelocity0(i) = fluidVelocities[i];
301 getVelocity(i) = fluidVelocities[i];
302 getAcceleration(i).setZero();
303 m_density[i] = 0.0;
304 m_particleId[i] = i;
305 m_objectId[i] = fluidObjectIds[i];
306 m_objectId0[i] = fluidObjectIds[i];
307 if (m_particleState[i] != ParticleState::Fixed)
308 m_particleState[i] = ParticleState::Active;
309 }
310 }
311 // set IDs for emitted particles
312 for (unsigned int i = nFluidParticles; i < (nFluidParticles + nMaxEmitterParticles); i++)
313 {
314 m_particleId[i] = i;
315 m_objectId[i] = 0;
316 }
317
318 // initialize masses
319 initMasses();
320
321 // Fluids
322 NeighborhoodSearch *neighborhoodSearch = Simulation::getCurrent()->getNeighborhoodSearch();
323 m_pointSetIndex = neighborhoodSearch->add_point_set(&getPosition(0)[0], nFluidParticles, true, true, true, this);
324
325 m_numActiveParticles0 = nFluidParticles;
326 m_numActiveParticles = m_numActiveParticles0;
327}
328
329
330void FluidModel::performNeighborhoodSearchSort()

Callers 1

addFluidModelMethod · 0.45

Calls 3

getNeighborhoodSearchMethod · 0.80
initFunction · 0.50
setZeroMethod · 0.45

Tested by

no test coverage detected