iMSTK
Interactive Medical Simulation Toolkit
imstkSphState.cpp
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #include "imstkSphState.h"
8 #include "imstkLogger.h"
9 #include "imstkVecDataArray.h"
10 
11 namespace imstk
12 {
13 SphState::SphState(const int numElements) :
14  m_positions(std::make_shared<VecDataArray<double, 3>>(numElements)),
15  m_fullStepVelocities(std::make_shared<VecDataArray<double, 3>>(numElements)),
16  m_halfStepVelocities(std::make_shared<VecDataArray<double, 3>>(numElements)),
17  m_velocities(std::make_shared<VecDataArray<double, 3>>(numElements)),
18  m_boundaryParticlePositions(std::make_shared<VecDataArray<double, 3>>()),
19  m_densities(std::make_shared<DataArray<double>>(numElements)),
20  m_normals(std::make_shared<VecDataArray<double, 3>>(numElements)),
21  m_acceleration(std::make_shared<VecDataArray<double, 3>>(numElements)),
22  m_diffuseVelocities(std::make_shared<VecDataArray<double, 3>>(numElements))
23 {
24  std::fill_n(m_densities->getPointer(), m_densities->size(), 1.0);
25  std::fill_n(m_acceleration->getPointer(), m_acceleration->size(), Vec3d(0, 0, 0));
26  std::fill_n(m_diffuseVelocities->getPointer(), m_diffuseVelocities->size(), Vec3d(0, 0, 0));
27  std::fill_n(m_velocities->getPointer(), m_velocities->size(), Vec3d(0.0, 0.0, 0.0));
28  std::fill_n(m_halfStepVelocities->getPointer(), m_halfStepVelocities->size(), Vec3d(0.0, 0.0, 0.0));
29  std::fill_n(m_fullStepVelocities->getPointer(), m_fullStepVelocities->size(), Vec3d(0.0, 0.0, 0.0));
30 
31  m_neighborInfo.resize(static_cast<size_t>(numElements));
32  m_neighborLists.resize(static_cast<size_t>(numElements));
33 }
34 
35 void
36 SphState::setState(std::shared_ptr<SphState> rhs)
37 {
38  *m_positions = *rhs->getPositions();
39  *m_velocities = *rhs->getVelocities();
40  *m_halfStepVelocities = *rhs->getHalfStepVelocities();
41  *m_fullStepVelocities = *rhs->getFullStepVelocities();
42  *m_boundaryParticlePositions = *rhs->getBoundaryParticlePositions();
43  *m_densities = *rhs->getDensities();
44  *m_normals = *rhs->getNormals();
45  *m_acceleration = *rhs->getAccelerations();
46  *m_diffuseVelocities = *rhs->getDiffuseVelocities();
47 
48  m_neighborLists = rhs->getFluidNeighborLists();
49  m_boundaryParticleNeighborLists = rhs->getBoundaryNeighborLists();
50  m_neighborInfo = rhs->getNeighborInfo();
51 
52  m_positions->postModified();
53 }
54 
55 size_t
57 {
58  return m_positions->size();
59 }
60 } // namespace imstk
size_t getNumParticles() const
Get number of particles.
Compound Geometry.
void setState(std::shared_ptr< SphState > rhs)
Set the state to a given one.