iMSTK
Interactive Medical Simulation Toolkit
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
imstkSphState.h
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 #pragma once
8 
9 #include "imstkMath.h"
10 
11 namespace imstk
12 {
13 template<typename T> class DataArray;
14 template<typename T, int N> class VecDataArray;
15 
22 {
23  Vec3d relativePos;
24  double density;
25 };
26 
32 class SphState
33 {
34 public:
35  SphState() = default;
36  SphState(const int numElements);
37  virtual ~SphState() = default;
38 
39 public:
43  void setBoundaryParticlePositions(std::shared_ptr<VecDataArray<double, 3>> positions) { m_boundaryParticlePositions = positions; }
44 
48  size_t getNumParticles() const;
49 
53  std::shared_ptr<VecDataArray<double, 3>> getPositions() const { return m_positions; }
54  void setPositions(std::shared_ptr<VecDataArray<double, 3>> positions) { m_positions = positions; }
56 
60  std::shared_ptr<VecDataArray<double, 3>> getFullStepVelocities() const { return m_fullStepVelocities; }
61 
65  std::shared_ptr<VecDataArray<double, 3>> getHalfStepVelocities() const { return m_halfStepVelocities; }
66 
70  std::shared_ptr<VecDataArray<double, 3>> getVelocities() const { return m_velocities; }
71  void setVelocities(std::shared_ptr<VecDataArray<double, 3>> velocities) { m_velocities = velocities; }
73 
77  std::shared_ptr<VecDataArray<double, 3>> getBoundaryParticlePositions() const { return m_boundaryParticlePositions; }
78 
82  std::shared_ptr<VecDataArray<double, 3>> getNormals() const { return m_normals; }
83 
87  std::shared_ptr<DataArray<double>> getDensities() const { return m_densities; }
88 
92  std::shared_ptr<VecDataArray<double, 3>> getAccelerations() const { return m_acceleration; }
93 
97  std::shared_ptr<VecDataArray<double, 3>> getDiffuseVelocities() const { return m_diffuseVelocities; }
98 
102  std::vector<std::vector<size_t>>& getFluidNeighborLists() { return m_neighborLists; }
103  const std::vector<std::vector<size_t>>& getFluidNeighborLists() const { return m_neighborLists; }
105 
109  std::vector<std::vector<size_t>>& getBoundaryNeighborLists() { return m_boundaryParticleNeighborLists; }
110  const std::vector<std::vector<size_t>>& getBoundaryNeighborLists() const { return m_boundaryParticleNeighborLists; }
112 
116  std::vector<std::vector<NeighborInfo>>& getNeighborInfo() { return m_neighborInfo; }
117  const std::vector<std::vector<NeighborInfo>>& getNeighborInfo() const { return m_neighborInfo; }
119 
123  void setState(std::shared_ptr<SphState> rhs);
124 
125 private:
126  std::shared_ptr<VecDataArray<double, 3>> m_positions;
127  std::shared_ptr<VecDataArray<double, 3>> m_fullStepVelocities;
128  std::shared_ptr<VecDataArray<double, 3>> m_halfStepVelocities;
129  std::shared_ptr<VecDataArray<double, 3>> m_velocities;
130 
131  std::shared_ptr<VecDataArray<double, 3>> m_boundaryParticlePositions;
132 
133  std::shared_ptr<DataArray<double>> m_densities;
134  std::shared_ptr<VecDataArray<double, 3>> m_normals;
135  std::shared_ptr<VecDataArray<double, 3>> m_acceleration;
136  std::shared_ptr<VecDataArray<double, 3>> m_diffuseVelocities;
137 
138  std::vector<std::vector<size_t>> m_neighborLists;
139  std::vector<std::vector<size_t>> m_boundaryParticleNeighborLists;
140  std::vector<std::vector<NeighborInfo>> m_neighborInfo;
141 };
142 } // namespace imstk
std::vector< std::vector< NeighborInfo > > & getNeighborInfo()
Returns the vector of neighbor information ( {relative position, density} ), which is cached for othe...
std::shared_ptr< VecDataArray< double, 3 > > getFullStepVelocities() const
Returns the vector of all particle velocities.
Definition: imstkSphState.h:60
void setBoundaryParticlePositions(std::shared_ptr< VecDataArray< double, 3 >> positions)
Set positions of the boundary (solid) particles.
Definition: imstkSphState.h:43
std::vector< std::vector< size_t > > & getFluidNeighborLists()
Returns the vector of neighbor fluid particles.
std::vector< std::vector< size_t > > & getBoundaryNeighborLists()
Returns the vector of neighbor of boundary particles.
std::shared_ptr< VecDataArray< double, 3 > > getDiffuseVelocities() const
Returns the vector of all velocity diffusion.
Definition: imstkSphState.h:97
std::shared_ptr< VecDataArray< double, 3 > > getHalfStepVelocities() const
Returns the vector of all particle velocities.
Definition: imstkSphState.h:65
std::shared_ptr< DataArray< double > > getDensities() const
Returns the vector of all particle densities.
Definition: imstkSphState.h:87
Compound Geometry.
std::shared_ptr< VecDataArray< double, 3 > > getPositions() const
Get/Set the vector of all particle positions.
Definition: imstkSphState.h:53
std::shared_ptr< VecDataArray< double, 3 > > getAccelerations() const
Returns the vector of all particle accelerations.
Definition: imstkSphState.h:92
std::shared_ptr< VecDataArray< double, 3 > > getNormals() const
Returns the vector of all particle surface normals.
Definition: imstkSphState.h:82
std::shared_ptr< VecDataArray< double, 3 > > getVelocities() const
Get/Set the vector of all particle velocities.
Definition: imstkSphState.h:70
double density
density of neighbor particle
Definition: imstkSphState.h:24
Vec3d relativePos
relative position
Definition: imstkSphState.h:23
Simulation states of SPH particles.
Definition: imstkSphState.h:32
The helper struct to store relative positions and densities of neighbor particlcles.
Definition: imstkSphState.h:21
std::shared_ptr< VecDataArray< double, 3 > > getBoundaryParticlePositions() const
Returns the vector of all particle positions.
Definition: imstkSphState.h:77