SurgSim::Particles::SphRepresentation Class Reference

SphRepresentation is a Representation dedicated to Smoothed-Particles Hydrodynamics (SPH). More...

`#include <SurgSim/Particles/SphRepresentation.h>`

Inheritance diagram for SurgSim::Particles::SphRepresentation:

## Public Member Functions

| SURGSIM_CLASSNAME (SurgSim::Particles::SphRepresentation)
| SphRepresentation (const std::string &name)
| Constructor. More...
virtual | ~SphRepresentation ()
| Destructor. More...
void | setMassPerParticle (double particleMass)
| Set the mass for each particle. More...
double | getMassPerParticle () const
| Get the mass for each particle. More...
void | setDensity (double density)
| Set the density of the fluid. More...
double | getDensity () const
| Get the density of the fluid. More...
void | setGasStiffness (double stiffness)
| Set the gas stiffness coefficient. More...
double | getGasStiffness () const
| Get the gas stiffness coefficient. More...
void | setSurfaceTension (double surfaceTension)
| Set the surface tension. More...
double | getSurfaceTension () const
| Get the surface tension. More...
void | setGravity (const SurgSim::Math::Vector3d &gravity)
| Set the gravity vector. More...
SurgSim::Math::Vector3d | getGravity () const
| Get the gravity vector (default is (0 -9.81 0)) More...
void | setViscosity (double viscosity)
| Set the viscosity coefficient. More...
double | getViscosity () const
| Get the viscosity coefficient (default is 0.0) More...
void | setKernelSupport (double support)
| Set the kernel function support. More...
double | getKernelSupport () const
| Get the kernel function support. More...
void | setStiffness (double stiffness)
| Set the particles stiffness when colliding. More...
double | getStiffness () const
| Get the particles stiffness when colliding. More...
void | setDamping (double damping)
| Set the particles damping when colliding. More...
double | getDamping () const
| Get the particles damping when colliding. More...
void | setFriction (double friction)
| Set the sliding coefficient of friction for the particles during collisions. More...
double | getFriction () const
| Get the sliding coefficient of friction for the particles during collisions. More...
Public Member Functions inherited from SurgSim::Particles::Representation
| Representation (const std::string &name)
| Constructor. More...
virtual | ~Representation ()
| Destructor. More...
void | setMaxParticles (size_t maxParticles)
| Set the maximum number of particles of this system. More...
size_t | getMaxParticles () const
bool | addParticle (const Particle &particle)
| Add a particle. More...
bool | addParticle (const Math::Vector3d &position, const Math::Vector3d &velocity, double lifetime)
| Add a particle. More...
void | removeParticle (size_t index)
| Remove a particle. More...
SurgSim::DataStructures::BufferedValue< Particles > & | getParticles ()
| Get the particles. More...
void | update (double dt)
| Update the particle system. More...
void | handleCollisions (double dt)
| Handle collisions with particle system. More...
void | setCollisionRepresentation (std::shared_ptr< SurgSim::Collision::Representation > representation)
| Set the collision representation for this Particle Representation. More...
std::shared_ptr< SurgSim::Collision::Representation > | getCollisionRepresentation () const
| Get the collision representation for this Particle Representation. More...
Public Member Functions inherited from SurgSim::Framework::Representation
| Representation (const std::string &name)
| Constructor. More...
virtual void | setLocalPose (const SurgSim::Math::RigidTransform3d &pose)
| Set the pose of the representation with respect to the Scene Element. More...
virtual SurgSim::Math::RigidTransform3d | getLocalPose () const
| Get the pose of the representation with respect to the Scene Element. More...
virtual SurgSim::Math::RigidTransform3d | getPose () const
| Get the pose of the representation in world coordinates. More...
Public Member Functions inherited from SurgSim::Framework::Component
| Component (const std::string &name)
| Constructor. More...
virtual | ~Component ()
| Destructor. More...
std::string | getName () const
| Gets component name. More...
std::string | getFullName () const
| Gets a string containing the name of the Component and (if it has one) its SceneElement. More...
void | setName (const std::string &name)
| Sets the name of component. More...
boost::uuids::uuid | getUuid () const
| Gets the id of the component. More...
bool | isInitialized () const
bool | initialize (const std::weak_ptr< Runtime > &runtime)
| Initialize this component, this needs to be called before wakeUp() can be called. More...
bool | isAwake () const
bool | wakeUp ()
| Wakeup this component, this will be called when the component is inserted into the ComponentManager that is responsible for handling this component. More...
void | retire ()
| Retire this component, this will be called when the component is removed from the ComponentManager that is responsible for handling this component. More...
void | setScene (std::weak_ptr< Scene > scene)
| Sets the scene. More...
std::shared_ptr< Scene > | getScene ()
| Gets the scene. More...
void | setSceneElement (std::weak_ptr< SceneElement > sceneElement)
| Sets the scene element. More...
std::shared_ptr< SceneElement > | getSceneElement ()
| Gets the scene element. More...
std::shared_ptr< const SceneElement > | getSceneElement () const
| Gets the scene element, constant version. More...
std::shared_ptr< Runtime > | getRuntime () const
| Get the runtime which contains this component. More...
virtual std::string | getClassName () const
| The class name for this class, this being the base class it should return SurgSim::Framework::Component but this would make missing implemenentations of this hard to catch, therefore this calls SURGSIM_FAILURE. More...
std::shared_ptr< Component > | getSharedPtr ()
| Gets a shared pointer to this component. More...
virtual void | doRetire ()
| Interface to be implemented by derived classes Has a default implementation, does nothing. More...
bool | isActive () const
virtual void | setLocalActive (bool val)
| Set the component's active state. More...
bool | isLocalActive () const
Public Member Functions inherited from SurgSim::Framework::Accessible
| Accessible ()
| Default Constructor. More...
| ~Accessible ()
| Destructor. More...
template<class T >
T | getValue (const std::string &name) const
| Retrieves the value with the name by executing the getter if it is found and tries to convert it to the given type. More...
boost::any | getValue (const std::string &name) const
| Retrieves the value with the name by executing the getter if it is found. More...
template<class T >
bool | getValue (const std::string &name, T *value) const
| Retrieves the value with the name by executing the getter if it is found, and converts it to the type of the output parameter. More...
void | setValue (const std::string &name, const boost::any &value)
| Sets a value of a property that has setter. More...
bool | isReadable (const std::string &name) const
| Check whether a property is readable. More...
bool | isWriteable (const std::string &name) const
| Check whether a property is writable. More...
void | setGetter (const std::string &name, GetterType func)
| Sets a getter for a given property. More...
void | setSetter (const std::string &name, SetterType func)
| Sets a setter for a given property. More...
void | setAccessors (const std::string &name, GetterType getter, SetterType setter)
| Sets the accessors getter and setter in one function. More...
void | removeAccessors (const std::string &name)
| Removes all the accessors (getter and setter) for a given property. More...
void | forwardProperty (const std::string &name, const Accessible &target, const std::string &targetProperty)
| Adds a property with the given name that uses the targets accessors, in effect forwarding the value to the target. More...
void | setSerializable (const std::string &name, EncoderType encoder, DecoderType decoder)
| Sets the functions used to convert data from and to a YAML::Node. More...
void | setDecoder (const std::string &name, DecoderType decoder)
| Sets the functions used to convert data from a YAML::Node. More...
YAML::Node | encode () const
| Encode this Accessible to a YAML::Node. More...
void | decode (const YAML::Node &node, const std::vector< std::string > &ignoredProperties=std::vector< std::string >())
| Decode this Accessible from a YAML::Node, will throw an exception if the data type cannot be converted. More...
template<>
boost::any | getValue (const std::string &name) const

## Protected Member Functions

bool | doInitialize () override
| Interface to be implemented by derived classes. More...
bool | doUpdate (double dt) override
| Implementation of the specific behavior of the particle system. More...
bool | doHandleCollisions (double dt, const SurgSim::Collision::ContactMapType &collisions) override
| Implementation of the specific collision handling of the particle system. More...
void | computeVelocityAndPosition (double dt)
| Compute the particles' velocity and position given a time step dt. More...
Protected Member Functions inherited from SurgSim::Framework::Component
virtual std::shared_ptr< PoseComponent > | getPoseComponent ()
| Get the PoseComponent for this component. More...
virtual std::shared_ptr< const PoseComponent > | getPoseComponent () const
| Get the PoseComponent for this component, constant access. More...

## Protected Attributes

Eigen::Matrix< double, Eigen::Dynamic, 3, Eigen::RowMajor > | m_normal
| Particles' normal. More...
Eigen::Matrix< double, Eigen::Dynamic, 3, Eigen::RowMajor > | m_acceleration
| Particles' acceleration. More...
Math::Vector | m_density
| Particles' density. More...
Math::Vector | m_pressure
| Particles' pressure. More...
double | m_mass
| Mass per particle (determine the density of particle per m3) More...
double | m_densityReference
| Density of the reference gas. More...
double | m_gasStiffness
| Stiffness of the gas considered. More...
double | m_surfaceTension
| Surface tension. More...
double | m_stiffness
| Collision stiffness. More...
double | m_damping
| Collision damping. More...
double | m_friction
| Collision sliding friction coefficient. More...
SurgSim::Math::Vector3d | m_gravity
| 3D Gravity vector More...
double | m_viscosity
| Viscosity coefficient. More...
double | m_h
| Kernels parameter (support length and its powers) More...
double | m_hSquared
double | m_kernelPoly6
double | m_kernelPoly6Gradient
double | m_kernelSpikyGradient
double | m_kernelViscosityLaplacian
double | m_kernelPoly6Laplacian
std::shared_ptr< SurgSim::DataStructures::Grid< size_t, 3 > > | m_grid
| Grid acceleration to evaluate the kernels locally (storing the particles' index) More...
Protected Attributes inherited from SurgSim::Particles::Representation
size_t | m_maxParticles
| Maximum amount of particles allowed in this particle system. More...
SurgSim::DataStructures::BufferedValue< Particles > | m_particles
| BufferedValue of particles. More...
std::shared_ptr< SurgSim::Framework::Logger > | m_logger
| Logger used by the particle system. More...
std::shared_ptr< SurgSim::Collision::Representation > | m_collisionRepresentation
| This entity's collision representation. More...

## Private Member Functions

void | computeNeighbors ()
| Compute the neighbors. More...
void | computeDensityAndPressureField ()
| Compute the density and pressure field. More...
void | computeNormalField ()
| Compute the normal field. More...
void | computeAccelerations ()
| Compute the Sph accelerations. More...

## Additional Inherited Members

Public Types inherited from SurgSim::Framework::Accessible
typedef std::function< boost::any(void)> | GetterType
typedef std::function< void(boost::any)> | SetterType
typedef std::function< YAML::Node(void)> | EncoderType
typedef std::function< void(const YAML::Node *)> | DecoderType
Public Types inherited from SurgSim::Framework::FactoryBase1< Component, std::string >
typedef ObjectFactory1< Component, std::string > | FactoryType
Static Public Member Functions inherited from SurgSim::Framework::FactoryBase1< Component, std::string >
static FactoryType & | getFactory ()

## Detailed Description

SphRepresentation is a Representation dedicated to Smoothed-Particles Hydrodynamics (SPH).

This class is mostly based on these papers: "Particle-Based Fluid Simulation for Interactive Applications", M. Muller, D. Charypar, M. Gross. In Proceedings of ACM SIGGRAPH Symposium on Computer Animation (SCA) 2003, pp 154-159. "Interactive Blood Simulation for Virtual Surgery Based on Smoothed Particle Hydrodynamics", M. Muller, S. Schirm, M. Teschner. Journal of Technology and Health Care, ISSN 0928-7329, IOS Press, Amsterdam.

## Constructor & Destructor Documentation

## SphRepresentation()

SurgSim::Particles::SphRepresentation::SphRepresentation | ( | const std::string & | name | ) |

explicit

Constructor.

Parameters

  name | The representation's name

## ~SphRepresentation()

SurgSim::Particles::SphRepresentation::~SphRepresentation | ( |  | ) |

virtual

Destructor.

## Member Function Documentation

## computeAccelerations()

void SurgSim::Particles::SphRepresentation::computeAccelerations | ( |  | ) |

private

Compute the Sph accelerations.

## computeDensityAndPressureField()

void SurgSim::Particles::SphRepresentation::computeDensityAndPressureField | ( |  | ) |

private

Compute the density and pressure field.

## computeNeighbors()

void SurgSim::Particles::SphRepresentation::computeNeighbors | ( |  | ) |

private

Compute the neighbors.

## computeNormalField()

void SurgSim::Particles::SphRepresentation::computeNormalField | ( |  | ) |

private

Compute the normal field.

## computeVelocityAndPosition()

void SurgSim::Particles::SphRepresentation::computeVelocityAndPosition | ( | double | dt | ) |

protected

Compute the particles' velocity and position given a time step dt.

Parameters

  dt | The time step to advance the simulation too

Note
  This method integrates the ODE equation of the SPH, computing velocities and positions from the
  accelerations and storing them in the state. Therefore computeAcceleration(dt) should be called before.

## doHandleCollisions()

bool SurgSim::Particles::SphRepresentation::doHandleCollisions | ( | double | dt,
|  | const SurgSim::Collision::ContactMapType & | collisions
| ) |  |

override protected virtual

Implementation of the specific collision handling of the particle system.

Returns
  True if succeeded, False otherwise.

Implements SurgSim::Particles::Representation.

## doInitialize()

bool SurgSim::Particles::SphRepresentation::doInitialize | ( |  | ) |

override protected virtual

Interface to be implemented by derived classes.

Returns
  True if component is initialized successfully; otherwise, false.

Reimplemented from SurgSim::Particles::Representation.

## doUpdate()

bool SurgSim::Particles::SphRepresentation::doUpdate | ( | double | dt | ) |

override protected virtual

Implementation of the specific behavior of the particle system.

Returns
  True if update succeeded, False otherwise.

Implements SurgSim::Particles::Representation.

## getDamping()

double SurgSim::Particles::SphRepresentation::getDamping | ( |  | ) | const

Get the particles damping when colliding.

Returns
  The damping [Ns/m]

## getDensity()

double SurgSim::Particles::SphRepresentation::getDensity | ( |  | ) | const

Get the density of the fluid.

Returns
  The density of the fluid [Kg.m-3]

## getFriction()

double SurgSim::Particles::SphRepresentation::getFriction | ( |  | ) | const

Get the sliding coefficient of friction for the particles during collisions.

Returns
  The sliding coefficient of friction

## getGasStiffness()

double SurgSim::Particles::SphRepresentation::getGasStiffness | ( |  | ) | const

Get the gas stiffness coefficient.

Returns
  The stiffness coefficient of the gas [N.m.Kg-1]

## getGravity()

SurgSim::Math::Vector3d SurgSim::Particles::SphRepresentation::getGravity | ( |  | ) | const

Get the gravity vector (default is (0 -9.81 0))

Returns
  The 3d gravity vector [m]

## getKernelSupport()

double SurgSim::Particles::SphRepresentation::getKernelSupport | ( |  | ) | const

Get the kernel function support.

Returns
  The length of the kernel support [m]

## getMassPerParticle()

double SurgSim::Particles::SphRepresentation::getMassPerParticle | ( |  | ) | const

Get the mass for each particle.

Returns
  The mass that is used for all particle [Kg]

## getStiffness()

double SurgSim::Particles::SphRepresentation::getStiffness | ( |  | ) | const

Get the particles stiffness when colliding.

Returns
  The stiffness [N/m]

## getSurfaceTension()

double SurgSim::Particles::SphRepresentation::getSurfaceTension | ( |  | ) | const

Get the surface tension.

Returns
  The surface tension [N.m-1]

## getViscosity()

double SurgSim::Particles::SphRepresentation::getViscosity | ( |  | ) | const

Get the viscosity coefficient (default is 0.0)

Returns
  The viscosity coefficient [N.s.m-2]

## setDamping()

void SurgSim::Particles::SphRepresentation::setDamping | ( | double | damping | ) |

Set the particles damping when colliding.

Parameters

  damping | The damping [Ns/m]

## setDensity()

void SurgSim::Particles::SphRepresentation::setDensity | ( | double | density | ) |

Set the density of the fluid.

Parameters

  density | of the fluid [Kg.m-3]

Exceptions

  An | exception SurgSim::Framework::AssertionFailure if the value is negative or null

## setFriction()

void SurgSim::Particles::SphRepresentation::setFriction | ( | double | friction | ) |

Set the sliding coefficient of friction for the particles during collisions.

Parameters

  friction | The sliding coefficient of friction

## setGasStiffness()

void SurgSim::Particles::SphRepresentation::setGasStiffness | ( | double | stiffness | ) |

Set the gas stiffness coefficient.

Parameters

  stiffness | coefficient of the gas [N.m.Kg-1]

Exceptions

  An | exception SurgSim::Framework::AssertionFailure if the value is negative or null

## setGravity()

void SurgSim::Particles::SphRepresentation::setGravity | ( | const SurgSim::Math::Vector3d & | gravity | ) |

Set the gravity vector.

Parameters

  gravity | The 3d gravity vector [m]

## setKernelSupport()

void SurgSim::Particles::SphRepresentation::setKernelSupport | ( | double | support | ) |

Set the kernel function support.

Parameters

  support | The length of the kernel support [m]

Exceptions

  An | exception SurgSim::Framework::AssertionFailure if the value is negative or null

## setMassPerParticle()

void SurgSim::Particles::SphRepresentation::setMassPerParticle | ( | double | particleMass | ) |

Set the mass for each particle.

Parameters

  particleMass | The mass that will be used for all particles [Kg]

Exceptions

  An | exception SurgSim::Framework::AssertionFailure if the value is negative or null

Note
  In the SPH model, a particle has a constant mass, but its volume and density vary
  (mass = volume * density).
  Example: If we want to simulate 1 liter of water (0.001 m3 at 1000kg.m-3)
  with 50 particles, we need each particle to have a mass of 1.0/50 = 0.02kg

## setStiffness()

void SurgSim::Particles::SphRepresentation::setStiffness | ( | double | stiffness | ) |

Set the particles stiffness when colliding.

Parameters

  stiffness | The stiffness [N/m]

## setSurfaceTension()

void SurgSim::Particles::SphRepresentation::setSurfaceTension | ( | double | surfaceTension | ) |

Set the surface tension.

Parameters

  surfaceTension | The surface tension [N.m-1]

Exceptions

  An | exception SurgSim::Framework::AssertionFailure if the value is negative

## setViscosity()

void SurgSim::Particles::SphRepresentation::setViscosity | ( | double | viscosity | ) |

Set the viscosity coefficient.

Parameters

  viscosity | coefficient [N.s.m-2]

Exceptions

  An | exception SurgSim::Framework::AssertionFailure if the value is negative

## SURGSIM_CLASSNAME()

SurgSim::Particles::SphRepresentation::SURGSIM_CLASSNAME | ( | SurgSim::Particles::SphRepresentation |  | ) |

## Member Data Documentation

## m_acceleration

Eigen::Matrix<double, Eigen::Dynamic, 3, Eigen::RowMajor> SurgSim::Particles::SphRepresentation::m_acceleration

protected

Particles' acceleration.

## m_damping

double SurgSim::Particles::SphRepresentation::m_damping

protected

Collision damping.

## m_density

Math::Vector SurgSim::Particles::SphRepresentation::m_density

protected

Particles' density.

## m_densityReference

double SurgSim::Particles::SphRepresentation::m_densityReference

protected

Density of the reference gas.

## m_friction

double SurgSim::Particles::SphRepresentation::m_friction

protected

Collision sliding friction coefficient.

## m_gasStiffness

double SurgSim::Particles::SphRepresentation::m_gasStiffness

protected

Stiffness of the gas considered.

## m_gravity

SurgSim::Math::Vector3d SurgSim::Particles::SphRepresentation::m_gravity

protected

3D Gravity vector

## m_grid

std::shared_ptr<SurgSim::DataStructures::Grid<size_t, 3> > SurgSim::Particles::SphRepresentation::m_grid

protected

Grid acceleration to evaluate the kernels locally (storing the particles' index)

## m_h

double SurgSim::Particles::SphRepresentation::m_h

protected

Kernels parameter (support length and its powers)

## m_hSquared

double SurgSim::Particles::SphRepresentation::m_hSquared

protected

## m_kernelPoly6

double SurgSim::Particles::SphRepresentation::m_kernelPoly6

protected

## m_kernelPoly6Gradient

double SurgSim::Particles::SphRepresentation::m_kernelPoly6Gradient

protected

## m_kernelPoly6Laplacian

double SurgSim::Particles::SphRepresentation::m_kernelPoly6Laplacian

protected

## m_kernelSpikyGradient

double SurgSim::Particles::SphRepresentation::m_kernelSpikyGradient

protected

## m_kernelViscosityLaplacian

double SurgSim::Particles::SphRepresentation::m_kernelViscosityLaplacian

protected

## m_mass

double SurgSim::Particles::SphRepresentation::m_mass

protected

Mass per particle (determine the density of particle per m3)

## m_normal

Eigen::Matrix<double, Eigen::Dynamic, 3, Eigen::RowMajor> SurgSim::Particles::SphRepresentation::m_normal

protected

Particles' normal.

## m_pressure

Math::Vector SurgSim::Particles::SphRepresentation::m_pressure

protected

Particles' pressure.

## m_stiffness

double SurgSim::Particles::SphRepresentation::m_stiffness

protected

Collision stiffness.

## m_surfaceTension

double SurgSim::Particles::SphRepresentation::m_surfaceTension

protected

Surface tension.

## m_viscosity

double SurgSim::Particles::SphRepresentation::m_viscosity

protected

Viscosity coefficient.

The documentation for this class was generated from the following files:

- SurgSim/Particles/SphRepresentation.h
- SurgSim/Particles/SphRepresentation.cpp