![]() |
SphRepresentation is a Representation dedicated to Smoothed-Particles Hydrodynamics (SPH). More...
#include <SurgSim/Particles/SphRepresentation.h>
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... | |
![]() | |
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... | |
![]() | |
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... | |
![]() | |
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 |
![]() | |
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... | |
![]() | |
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... | |
![]() | |
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 | |
![]() | |
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 |
![]() | |
typedef ObjectFactory1< Component, std::string > | FactoryType |
![]() | |
static FactoryType & | getFactory () |
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.
|
explicit |
Constructor.
name | The representation's name |
|
virtual |
Destructor.
|
private |
Compute the Sph accelerations.
|
private |
Compute the density and pressure field.
|
private |
Compute the neighbors.
|
private |
Compute the normal field.
|
protected |
Compute the particles' velocity and position given a time step dt.
dt | The time step to advance the simulation too |
|
overrideprotectedvirtual |
Implementation of the specific collision handling of the particle system.
Implements SurgSim::Particles::Representation.
|
overrideprotectedvirtual |
Interface to be implemented by derived classes.
Reimplemented from SurgSim::Particles::Representation.
|
overrideprotectedvirtual |
Implementation of the specific behavior of the particle system.
Implements SurgSim::Particles::Representation.
double SurgSim::Particles::SphRepresentation::getDamping | ( | ) | const |
Get the particles damping when colliding.
double SurgSim::Particles::SphRepresentation::getDensity | ( | ) | const |
Get the density of the fluid.
double SurgSim::Particles::SphRepresentation::getFriction | ( | ) | const |
Get the sliding coefficient of friction for the particles during collisions.
double SurgSim::Particles::SphRepresentation::getGasStiffness | ( | ) | const |
Get the gas stiffness coefficient.
SurgSim::Math::Vector3d SurgSim::Particles::SphRepresentation::getGravity | ( | ) | const |
Get the gravity vector (default is (0 -9.81 0))
double SurgSim::Particles::SphRepresentation::getKernelSupport | ( | ) | const |
Get the kernel function support.
double SurgSim::Particles::SphRepresentation::getMassPerParticle | ( | ) | const |
Get the mass for each particle.
double SurgSim::Particles::SphRepresentation::getStiffness | ( | ) | const |
Get the particles stiffness when colliding.
double SurgSim::Particles::SphRepresentation::getSurfaceTension | ( | ) | const |
Get the surface tension.
double SurgSim::Particles::SphRepresentation::getViscosity | ( | ) | const |
Get the viscosity coefficient (default is 0.0)
void SurgSim::Particles::SphRepresentation::setDamping | ( | double | damping | ) |
Set the particles damping when colliding.
damping | The damping [Ns/m] |
void SurgSim::Particles::SphRepresentation::setDensity | ( | double | density | ) |
Set the density of the fluid.
density | of the fluid [Kg.m-3] |
An | exception SurgSim::Framework::AssertionFailure if the value is negative or null |
void SurgSim::Particles::SphRepresentation::setFriction | ( | double | friction | ) |
Set the sliding coefficient of friction for the particles during collisions.
friction | The sliding coefficient of friction |
void SurgSim::Particles::SphRepresentation::setGasStiffness | ( | double | stiffness | ) |
Set the gas stiffness coefficient.
stiffness | coefficient of the gas [N.m.Kg-1] |
An | exception SurgSim::Framework::AssertionFailure if the value is negative or null |
void SurgSim::Particles::SphRepresentation::setGravity | ( | const SurgSim::Math::Vector3d & | gravity | ) |
Set the gravity vector.
gravity | The 3d gravity vector [m] |
void SurgSim::Particles::SphRepresentation::setKernelSupport | ( | double | support | ) |
Set the kernel function support.
support | The length of the kernel support [m] |
An | exception SurgSim::Framework::AssertionFailure if the value is negative or null |
void SurgSim::Particles::SphRepresentation::setMassPerParticle | ( | double | particleMass | ) |
Set the mass for each particle.
particleMass | The mass that will be used for all particles [Kg] |
An | exception SurgSim::Framework::AssertionFailure if the value is negative or null |
void SurgSim::Particles::SphRepresentation::setStiffness | ( | double | stiffness | ) |
Set the particles stiffness when colliding.
stiffness | The stiffness [N/m] |
void SurgSim::Particles::SphRepresentation::setSurfaceTension | ( | double | surfaceTension | ) |
Set the surface tension.
surfaceTension | The surface tension [N.m-1] |
An | exception SurgSim::Framework::AssertionFailure if the value is negative |
void SurgSim::Particles::SphRepresentation::setViscosity | ( | double | viscosity | ) |
Set the viscosity coefficient.
viscosity | coefficient [N.s.m-2] |
An | exception SurgSim::Framework::AssertionFailure if the value is negative |
SurgSim::Particles::SphRepresentation::SURGSIM_CLASSNAME | ( | SurgSim::Particles::SphRepresentation | ) |
|
protected |
Particles' acceleration.
|
protected |
Collision damping.
|
protected |
Particles' density.
|
protected |
Density of the reference gas.
|
protected |
Collision sliding friction coefficient.
|
protected |
Stiffness of the gas considered.
|
protected |
3D Gravity vector
|
protected |
Grid acceleration to evaluate the kernels locally (storing the particles' index)
|
protected |
Kernels parameter (support length and its powers)
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Mass per particle (determine the density of particle per m3)
|
protected |
Particles' normal.
|
protected |
Particles' pressure.
|
protected |
Collision stiffness.
|
protected |
Surface tension.
|
protected |
Viscosity coefficient.