|
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... | |
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 () |
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.
1.8.13