SurgSim::Physics::FemRepresentation Class Referenceabstract

Finite Element Model (a.k.a FEM) is a deformable model (a set of nodes connected by FemElement). More...

`#include <SurgSim/Physics/FemRepresentation.h>`

Inheritance diagram for SurgSim::Physics::FemRepresentation:

## Public Member Functions

| FemRepresentation (const std::string &name)
| Constructor. More...
virtual | ~FemRepresentation ()
| Destructor. More...
virtual void | loadFem (const std::string &filename)=0
| Loads the FEM file into an Fem class data structure. More...
virtual void | setFemElementType (const std::string &type)
| Sets the FemElement type pulled from the object factory. More...
const std::string & | getFemElementType () const
| Gets the FemElement type pulled from the object factory. More...
void | addFemElement (const std::shared_ptr< FemElement > element)
| Adds a FemElement. More...
size_t | getNumFemElements () const
| Gets the number of FemElement. More...
std::shared_ptr< FemElement > | getFemElement (size_t femElementId)
| Retrieves a given FemElement from its id. More...
double | getTotalMass () const
| Gets the total mass of the fem. More...
double | getRayleighDampingStiffness () const
| Gets the Rayleigh stiffness parameter. More...
double | getRayleighDampingMass () const
| Gets the Rayleigh mass parameter. More...
void | setRayleighDampingStiffness (double stiffnessCoef)
| Sets the Rayleigh stiffness parameter. More...
void | setRayleighDampingMass (double massCoef)
| Sets the Rayleigh mass parameter. More...
bool | isValidCoordinate (const SurgSim::DataStructures::IndexedLocalCoordinate &coordinate) const
| Determines whether the associated coordinate is valid. More...
void | beforeUpdate (double dt) override
| Preprocessing done before the update call. More...
void | update (double dt) override
| Update the representation state to the current time step. More...
void | setComplianceWarping (bool useComplianceWarping)
| Set the compliance warping flag. More...
bool | getComplianceWarping () const
| Get the compliance warping flag (default = false) More...
Math::Matrix | applyCompliance (const Math::OdeState &state, const Math::Matrix &b) override
| Calculate the product C.b where C is the compliance matrix with boundary conditions. More...
const SurgSim::Math::Matrix & | getComplianceMatrix () const override
| Gets the compliance matrix associated with motion. More...
void | updateFMDK (const SurgSim::Math::OdeState &state, int options) override
| Update the OdeEquation (and support data) based on the given state. More...
Public Member Functions inherited from SurgSim::Physics::DeformableRepresentation
| DeformableRepresentation (const std::string &name)
| Constructor. More...
virtual | ~DeformableRepresentation ()
| Destructor. More...
void | resetState () override
| Reset the representation to its initial/default state. More...
virtual void | setInitialState (std::shared_ptr< SurgSim::Math::OdeState > initialState)
| Initialize the state variables to initialState. More...
virtual const std::shared_ptr< SurgSim::Math::OdeState > | getCurrentState () const
| Return the current state of the deformable representation. More...
virtual const std::shared_ptr< SurgSim::Math::OdeState > | getPreviousState () const
| Return the previous state of the deformable representation. More...
virtual const std::shared_ptr< SurgSim::Math::OdeState > | getFinalState () const
| Return the final state of the deformable representation. More...
virtual void | interpolatePreviousState (double t)
| Declare a new previous state by interpolating between the old previous state and the current state using parametric time variable t. More...
size_t | getNumDofPerNode () const
| Gets the number of degrees of freedom per node. More...
void | setIntegrationScheme (SurgSim::Math::IntegrationScheme integrationScheme)
| Sets the numerical integration scheme. More...
SurgSim::Math::IntegrationScheme | getIntegrationScheme () const
| Gets the numerical integration scheme. More...
std::shared_ptr< SurgSim::Math::OdeSolver > | getOdeSolver () const
void | setLinearSolver (SurgSim::Math::LinearSolver linearSolver)
| Sets the linear algebraic solver. More...
SurgSim::Math::LinearSolver | getLinearSolver () const
| Gets the linear algebraic solver. More...
virtual void | addExternalGeneralizedForce (std::shared_ptr< Localization > localization, const SurgSim::Math::Vector &generalizedForce, const SurgSim::Math::Matrix &K=SurgSim::Math::Matrix(), const SurgSim::Math::Matrix &D=SurgSim::Math::Matrix())=0
| Add an external generalized force applied on a specific localization. More...
const SurgSim::Math::Vector & | getExternalGeneralizedForce () const
const SurgSim::Math::SparseMatrix & | getExternalGeneralizedStiffness () const
const SurgSim::Math::SparseMatrix & | getExternalGeneralizedDamping () const
void | afterUpdate (double dt) override
| Postprocessing done after the update call This needs to be called from the outside usually from a Computation. More...
void | applyCorrection (double dt, const Eigen::VectorBlock< SurgSim::Math::Vector > &deltaVelocity) override
| Update the Representation's current position and velocity using a time interval, dt, and change in velocity, deltaVelocity. More...
void | deactivateAndReset ()
| Deactivate and call resetState. More...
void | setCollisionRepresentation (std::shared_ptr< SurgSim::Collision::Representation > representation) override
| Set the collision representation for this physics representation, when the collision object is involved in a collision, the collision should be resolved inside the dynamics calculation. More...
void | setLocalPose (const SurgSim::Math::RigidTransform3d &pose) override
| Set the pose of the representation with respect to the Scene Element. More...
Public Member Functions inherited from SurgSim::Physics::Representation
| Representation (const std::string &name)
| Constructor. More...
virtual | ~Representation ()
| Destructor. More...
size_t | getNumDof () const
| Query the object number of degrees of freedom. More...
void | setIsGravityEnabled (bool isGravityEnabled)
| Set the gravity enable flag. More...
bool | isGravityEnabled () const
| Get the gravity enable flag. More...
void | setIsDrivingSceneElementPose (bool isDrivingSceneElementPose)
| Set whether this Representation is controlling the pose of the SceneElement that it is part of. More...
bool | isDrivingSceneElementPose ()
| Query if this Representation is controlling the pose of the SceneElement that it is part of. More...
virtual std::shared_ptr< Localization > | createLocalization (const SurgSim::DataStructures::Location &location)
| Computes a localized coordinate w.r.t this representation, given a Location object. More...
std::shared_ptr< SurgSim::Collision::Representation > | getCollisionRepresentation () const
std::shared_ptr< ConstraintImplementation > | getConstraintImplementation (SurgSim::Physics::ConstraintType type)
| Get a constraint implementation of the given type for this representation. More...
Public Member Functions inherited from SurgSim::Framework::Representation
| Representation (const std::string &name)
| Constructor. 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
Public Member Functions inherited from SurgSim::Math::OdeEquation
virtual | ~OdeEquation ()
| Virtual destructor. More...
const std::shared_ptr< OdeState > | getInitialState () const
| Retrieves the ode initial conditions \((x0, v0)\) (i.e the initial state) More...
const Vector & | getF () const
const SparseMatrix & | getM () const
const SparseMatrix & | getD () const
const SparseMatrix & | getK () const

## Protected Member Functions

void | addRayleighDampingForce (SurgSim::Math::Vector *f, const SurgSim::Math::OdeState &state, bool useGlobalMassMatrix=false, bool useGlobalStiffnessMatrix=false, double scale=1.0)
| Adds the Rayleigh damping forces. More...
void | addFemElementsForce (SurgSim::Math::Vector *f, const SurgSim::Math::OdeState &state, double scale=1.0)
| Adds the FemElements forces to f (given a state) More...
void | addGravityForce (SurgSim::Math::Vector *f, const SurgSim::Math::OdeState &state, double scale=1.0)
| Adds the gravity force to f (given a state) More...
bool | doInitialize () override
| Interface to be implemented by derived classes. More...
void | updateComplianceMatrix (const SurgSim::Math::OdeState &state)
| Updates the compliance matrix using nodes transformation (useful for compliance warping) More...
virtual SurgSim::Math::Matrix | getNodeTransformation (const SurgSim::Math::OdeState &state, size_t nodeId)
| Retrieves a specific node transformation (useful for compliance warping) More...
bool | isInitialComplianceMatrixComputed () const
| Gets the flag keeping track of the initial compliance matrix calculation (compliance warping case) More...
void | setIsInitialComplianceMatrixComputed (bool flag)
| Sets the flag keeping track of the initial compliance matrix calculation (compliance warping case) More...
void | computeF (const SurgSim::Math::OdeState &state) override
| Evaluation of the RHS function \(f(x, v)\) for a given state. More...
void | computeM (const SurgSim::Math::OdeState &state) override
| Evaluation of the LHS matrix \(M(x,v)\) for a given state. More...
void | computeD (const SurgSim::Math::OdeState &state) override
| Evaluation of \(D = -\frac{\partial f}{\partial v}(x,v)\) for a given state. More...
void | computeK (const SurgSim::Math::OdeState &state) override
| Evaluation of \(K = -\frac{\partial f}{\partial x}(x,v)\) for a given state. More...
void | computeFMDK (const SurgSim::Math::OdeState &state) override
| Evaluation of \(f(x,v)\), \(M(x,v)\), \(D = -\frac{\partial f}{\partial v}(x,v)\) and \(K = -\frac{\partial f}{\partial x}(x,v)\). More...
Protected Member Functions inherited from SurgSim::Physics::DeformableRepresentation
bool | doWakeUp () override
| Interface to be implemented by derived classes. More...
virtual void | transformState (std::shared_ptr< SurgSim::Math::OdeState > state, const SurgSim::Math::RigidTransform3d &transform)=0
| Transform a state using a given transformation. More...
Protected Member Functions inherited from SurgSim::Physics::Representation
void | setNumDof (size_t numDof)
| Set the number of degrees of freedom. More...
const SurgSim::Math::Vector3d & | getGravity () const
| Get the gravity used by this Representation. More...
void | driveSceneElementPose (const SurgSim::Math::RigidTransform3d &pose)
| This conditionally updates that pose for the scenelement to the given pose The update gets exectuded if the representation actually has sceneelement and isDrivingScenElement() is true. 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

std::vector< double > | m_massPerNode
| Useful information per node. More...
std::vector< std::shared_ptr< FemElement > > | m_femElements
| FemElements. More...
std::string | m_femElementType
| The FemElement factory parameter invoked in doInitialize() when using a MeshAsset either with LoadFem(const std::stirng& filename) or setFem(std::shared_ptr<Asset> mesh) This ensures that when using a mesh Asset, a single FemElement type is used. More...
Protected Attributes inherited from SurgSim::Physics::DeformableRepresentation
std::shared_ptr< SurgSim::Math::OdeState > | m_previousState
| The previous state inside the calculation loop, this has no meaning outside of the loop. More...
std::shared_ptr< SurgSim::Math::OdeState > | m_currentState
| The currently calculated state inside the physics loop, after the whole calculation is done this will become m_finalState. More...
std::shared_ptr< SurgSim::Math::OdeState > | m_newState
| New state is a temporary variable to store the newly computed state. More...
std::shared_ptr< SurgSim::Math::OdeState > | m_finalState
| Last valid state (a.k.a final state) More...
size_t | m_numDofPerNode
| Number of degrees of freedom per node (varies per deformable model) More...
SurgSim::Math::IntegrationScheme | m_integrationScheme
| Numerical Integration scheme (dynamic explicit/implicit solver) More...
SurgSim::Math::LinearSolver | m_linearSolver
| Linear algebraic solver used. More...
std::shared_ptr< SurgSim::Math::OdeSolver > | m_odeSolver
| Ode solver (its type depends on the numerical integration scheme) More...
bool | m_hasExternalGeneralizedForce
| External generalized force, stiffness and damping applied on the deformable representation. More...
SurgSim::Math::Vector | m_externalGeneralizedForce
| External generalized force, stiffness and damping applied on the deformable representation. More...
SurgSim::Math::SparseMatrix | m_externalGeneralizedStiffness
| External generalized force, stiffness and damping applied on the deformable representation. More...
SurgSim::Math::SparseMatrix | m_externalGeneralizedDamping
| External generalized force, stiffness and damping applied on the deformable representation. More...
bool | m_previousHasExternalGeneralizedForce
| External generalized force, stiffness and damping applied on the deformable representation. More...
SurgSim::Math::SparseMatrix | m_previousExternalGeneralizedStiffness
| External generalized force, stiffness and damping applied on the deformable representation. More...
SurgSim::Math::SparseMatrix | m_previousExternalGeneralizedDamping
| External generalized force, stiffness and damping applied on the deformable representation. More...
Protected Attributes inherited from SurgSim::Physics::Representation
std::shared_ptr< SurgSim::Collision::Representation > | m_collisionRepresentation
| This entity's collision representation, these are usually very specific to the physics representation. More...
Protected Attributes inherited from SurgSim::Math::OdeEquation
std::shared_ptr< OdeState > | m_initialState
| The initial state (which defines the ODE initial conditions \((x0, v0)\)) More...
Vector | m_f
| The vector containing \(f(x, v)\). More...
SparseMatrix | m_M
| The matrix \(M(x,v)\). More...
SparseMatrix | m_D
| The The matrix \(D = -\frac{\partial f}{\partial v}(x,v)\). More...
SparseMatrix | m_K
| The The matrix \(K = -\frac{\partial f}{\partial x}(x,v)\). More...

## Private Attributes

struct {
double massCoefficient
double stiffnessCoefficient
} | m_rayleighDamping
| Rayleigh damping parameters (massCoefficient and stiffnessCoefficient) D = massCoefficient.M + stiffnessCoefficient.K Matrices: D = damping, M = mass, K = stiffness. More...
bool | m_useComplianceWarping
| Are we using Compliance Warping or not ? More...
bool | m_isInitialComplianceMatrixComputed
| For compliance warping: Is the initial compliance matrix computed ? More...
SurgSim::Math::Matrix | m_complianceWarpingMatrix
| The compliance warping matrix if compliance warping in use. More...
Eigen::SparseMatrix< double > | m_complianceWarpingTransformation
| The system-size transformation matrix. It contains nodes transformation on the diagonal blocks. 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

Finite Element Model (a.k.a FEM) is a deformable model (a set of nodes connected by FemElement).

Note
  A fem is a DeformableRepresentation (Physics::Representation and Math::OdeEquation), therefore it defines a dynamic system \(M.a=F(x,v)\)
  + The model handles damping through the Rayleigh damping (it is a combination of mass and stiffness)
  + The model handles compliance warping (optional) from the paper:
  "Efficient Contact Modeling using Compliance Warping", G Saupin, C Duriez, S Cotin, L Grisoni; Computer Graphics International (CGI), Istanbul, Turkey, june 2008.
  To use compliance warping, it needs to be turned on by calling setComplianceWarping(true) and the method updateNodesRotations() needs to be overloaded properly.

## Constructor & Destructor Documentation

## FemRepresentation()

SurgSim::Physics::FemRepresentation::FemRepresentation | ( | const std::string & | name | ) |

explicit

Constructor.

Parameters

  name | The name of the FemRepresentation

## ~FemRepresentation()

SurgSim::Physics::FemRepresentation::~FemRepresentation | ( |  | ) |

virtual

Destructor.

## Member Function Documentation

## addFemElement()

void SurgSim::Physics::FemRepresentation::addFemElement | ( | const std::shared_ptr< FemElement > | element | ) |

Adds a FemElement.

Parameters

  element | The FemElement to add to the representation

## addFemElementsForce()

void SurgSim::Physics::FemRepresentation::addFemElementsForce | ( | SurgSim::Math::Vector * | f,
|  | const SurgSim::Math::OdeState & | state,
|  | double | scale = `1.0`
| ) |  |

protected

Adds the FemElements forces to f (given a state)

Parameters

  [in,out] | f | The force vector to cumulate the FemElements forces into
  | state | The state vector containing positions and velocities
  | scale | A scaling factor to scale the FemElements forces with

## addGravityForce()

void SurgSim::Physics::FemRepresentation::addGravityForce | ( | SurgSim::Math::Vector * | f,
|  | const SurgSim::Math::OdeState & | state,
|  | double | scale = `1.0`
| ) |  |

protected

Adds the gravity force to f (given a state)

Parameters

  [in,out] | f | The force vector to cumulate the gravity force into
  | state | The state vector containing positions and velocities
  | scale | A scaling factor to scale the gravity force with

Note
  This method does not do anything if gravity is disabled

## addRayleighDampingForce()

void SurgSim::Physics::FemRepresentation::addRayleighDampingForce | ( | SurgSim::Math::Vector * | f,
|  | const SurgSim::Math::OdeState & | state,
|  | bool | useGlobalMassMatrix = `false`,
|  | bool | useGlobalStiffnessMatrix = `false`,
|  | double | scale = `1.0`
| ) |  |

protected

Adds the Rayleigh damping forces.

Parameters

  [in,out] | f | The force vector to cumulate the Rayleigh damping force into
  | state | The state vector containing positions and velocities
  | useGlobalMassMatrix,useGlobalStiffnessMatrix | True indicates that the global mass and stiffness matrices should be used (F = -c.M.v - d.K.v)
  | scale | A scaling factor to apply on the damping force

Note
  Damping matrix D = c.M + d.K (Rayleigh damping definition)
  F = - D.v = -c.M.v - d.K.v
  If {useGlobalMassMatrix | useGlobalStiffnessMatrix} is True, {M | K} will be used
  If {useGlobalMassMatrix | useGlobalStiffnessMatrix} is False
  the {mass|stiffness} component will be computed FemElement by FemElement

## applyCompliance()

Math::Matrix SurgSim::Physics::FemRepresentation::applyCompliance | ( | const Math::OdeState & | state,
|  | const Math::Matrix & | b
| ) |  |

override virtual

Calculate the product C.b where C is the compliance matrix with boundary conditions.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the various terms with
  b | The input matrix b

Returns
  Returns the matrix \(C.b\)

Reimplemented from SurgSim::Physics::DeformableRepresentation.

## beforeUpdate()

void SurgSim::Physics::FemRepresentation::beforeUpdate | ( | double | dt | ) |

override virtual

Preprocessing done before the update call.

Parameters

  dt | The time step (in seconds)

Reimplemented from SurgSim::Physics::Representation.

## computeD()

void SurgSim::Physics::FemRepresentation::computeD | ( | const SurgSim::Math::OdeState & | state | ) |

override protected virtual

Evaluation of \(D = -\frac{\partial f}{\partial v}(x,v)\) for a given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the Jacobian matrix with

Implements SurgSim::Math::OdeEquation.

## computeF()

void SurgSim::Physics::FemRepresentation::computeF | ( | const SurgSim::Math::OdeState & | state | ) |

override protected virtual

Evaluation of the RHS function \(f(x, v)\) for a given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the function \(f(x,v)\) with

Implements SurgSim::Math::OdeEquation.

## computeFMDK()

void SurgSim::Physics::FemRepresentation::computeFMDK | ( | const SurgSim::Math::OdeState & | state | ) |

override protected virtual

Evaluation of \(f(x,v)\), \(M(x,v)\), \(D = -\frac{\partial f}{\partial v}(x,v)\) and \(K = -\frac{\partial f}{\partial x}(x,v)\).

When all the terms are needed, this method can perform optimization in evaluating everything together

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the various terms with

Note
  computeF(), computeM(), computeD(), computeK()

Implements SurgSim::Math::OdeEquation.

## computeK()

void SurgSim::Physics::FemRepresentation::computeK | ( | const SurgSim::Math::OdeState & | state | ) |

override protected virtual

Evaluation of \(K = -\frac{\partial f}{\partial x}(x,v)\) for a given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the Jacobian matrix with

Implements SurgSim::Math::OdeEquation.

## computeM()

void SurgSim::Physics::FemRepresentation::computeM | ( | const SurgSim::Math::OdeState & | state | ) |

override protected virtual

Evaluation of the LHS matrix \(M(x,v)\) for a given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the matrix \(M(x,v)\) with

Implements SurgSim::Math::OdeEquation.

## doInitialize()

bool SurgSim::Physics::FemRepresentation::doInitialize | ( |  | ) |

override protected virtual

Interface to be implemented by derived classes.

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

Reimplemented from SurgSim::Physics::DeformableRepresentation.

## getComplianceMatrix()

const SurgSim::Math::Matrix & SurgSim::Physics::FemRepresentation::getComplianceMatrix | ( |  | ) | const

override virtual

Gets the compliance matrix associated with motion.

Reimplemented from SurgSim::Physics::DeformableRepresentation.

## getComplianceWarping()

bool SurgSim::Physics::FemRepresentation::getComplianceWarping | ( |  | ) | const

Get the compliance warping flag (default = false)

Returns
  True if compliance warping is used, False otherwise

## getFemElement()

std::shared_ptr< FemElement > SurgSim::Physics::FemRepresentation::getFemElement | ( | size_t | femElementId | ) |

Retrieves a given FemElement from its id.

Parameters

  femElementId | The FemElement id for which the FemElement is requested

Returns
  The FemElement for the given femElementId

Note
  The FemElement is returned with read/write access
  Out of range femElementId will raise an exception

## getFemElementType()

const std::string & SurgSim::Physics::FemRepresentation::getFemElementType | ( |  | ) | const

Gets the FemElement type pulled from the object factory.

Returns
  A string of the full registered OSS class name in the factory

## getNodeTransformation()

SurgSim::Math::Matrix SurgSim::Physics::FemRepresentation::getNodeTransformation | ( | const SurgSim::Math::OdeState & | state,
|  | size_t | nodeId
| ) |  |

protected virtual

Retrieves a specific node transformation (useful for compliance warping)

Parameters

  state | The state to extract the node transformation from
  nodeId | The node to update the rotation for

Returns
  The node transformation. i.e. a numDofPerNode x numDofPerNode matrix

## getNumFemElements()

size_t SurgSim::Physics::FemRepresentation::getNumFemElements | ( |  | ) | const

Gets the number of FemElement.

Returns
  the number of FemElement

## getRayleighDampingMass()

double SurgSim::Physics::FemRepresentation::getRayleighDampingMass | ( |  | ) | const

Gets the Rayleigh mass parameter.

Returns
  The Rayleigh mass parameter

## getRayleighDampingStiffness()

double SurgSim::Physics::FemRepresentation::getRayleighDampingStiffness | ( |  | ) | const

Gets the Rayleigh stiffness parameter.

Returns
  The Rayleigh stiffness parameter

## getTotalMass()

double SurgSim::Physics::FemRepresentation::getTotalMass | ( |  | ) | const

Gets the total mass of the fem.

Returns
  The total mass of the fem (in Kg)

## isInitialComplianceMatrixComputed()

bool SurgSim::Physics::FemRepresentation::isInitialComplianceMatrixComputed | ( |  | ) | const

protected

Gets the flag keeping track of the initial compliance matrix calculation (compliance warping case)

Returns
  True if the initial compliance matrix has been computed, False otherwise

## isValidCoordinate()

bool SurgSim::Physics::FemRepresentation::isValidCoordinate | ( | const SurgSim::DataStructures::IndexedLocalCoordinate & | coordinate | ) | const

Determines whether the associated coordinate is valid.

Parameters

  coordinate | Coordinate to check

Returns
  True if coordinate is valid

## loadFem()

virtual void SurgSim::Physics::FemRepresentation::loadFem | ( | const std::string & | filename | ) |

pure virtual

Loads the FEM file into an Fem class data structure.

Parameters

  filename | The file to load

Implemented in SurgSim::Physics::Fem1DRepresentation, SurgSim::Physics::Fem3DRepresentation, and SurgSim::Physics::Fem2DRepresentation.

## setComplianceWarping()

void SurgSim::Physics::FemRepresentation::setComplianceWarping | ( | bool | useComplianceWarping | ) |

Set the compliance warping flag.

Parameters

  useComplianceWarping | True to use compliance warping, False otherwise

Exceptions

  SurgSim::Framework::AssertionFailure | If the call is done after initialization

Note
  Compliance warping is currently disabled in this version.

## setFemElementType()

void SurgSim::Physics::FemRepresentation::setFemElementType | ( | const std::string & | type | ) |

virtual

Sets the FemElement type pulled from the object factory.

Parameters

  type | A string of the full registered OSS class name in the factory

## setIsInitialComplianceMatrixComputed()

void SurgSim::Physics::FemRepresentation::setIsInitialComplianceMatrixComputed | ( | bool | flag | ) |

protected

Sets the flag keeping track of the initial compliance matrix calculation (compliance warping case)

Parameters

  flag | True if the initial compliance matrix is computed, False otherwise

## setRayleighDampingMass()

void SurgSim::Physics::FemRepresentation::setRayleighDampingMass | ( | double | massCoef | ) |

Sets the Rayleigh mass parameter.

Parameters

  massCoef | The Rayleigh mass parameter

## setRayleighDampingStiffness()

void SurgSim::Physics::FemRepresentation::setRayleighDampingStiffness | ( | double | stiffnessCoef | ) |

Sets the Rayleigh stiffness parameter.

Parameters

  stiffnessCoef | The Rayleigh stiffness parameter

## update()

void SurgSim::Physics::FemRepresentation::update | ( | double | dt | ) |

override virtual

Update the representation state to the current time step.

Parameters

  dt | The time step (in seconds)

Reimplemented from SurgSim::Physics::DeformableRepresentation.

## updateComplianceMatrix()

void SurgSim::Physics::FemRepresentation::updateComplianceMatrix | ( | const SurgSim::Math::OdeState & | state | ) |

protected

Updates the compliance matrix using nodes transformation (useful for compliance warping)

Parameters

  state | The state to compute the nodes transformation from

Note
  This computes the diagonal block matrix m_complianceWarpingTransformation and transforms the initial compliance matrix with it.

## updateFMDK()

void SurgSim::Physics::FemRepresentation::updateFMDK | ( | const SurgSim::Math::OdeState & | state,
|  | int | options
| ) |  |

override virtual

Update the OdeEquation (and support data) based on the given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the various terms with
  options | Flag to specify which of F, M, D, K needs to be updated.

Reimplemented from SurgSim::Math::OdeEquation.

## Member Data Documentation

## m_complianceWarpingMatrix

SurgSim::Math::Matrix SurgSim::Physics::FemRepresentation::m_complianceWarpingMatrix

private

The compliance warping matrix if compliance warping in use.

## m_complianceWarpingTransformation

Eigen::SparseMatrix<double> SurgSim::Physics::FemRepresentation::m_complianceWarpingTransformation

private

The system-size transformation matrix. It contains nodes transformation on the diagonal blocks.

## m_femElements

std::vector<std::shared_ptr<FemElement> > SurgSim::Physics::FemRepresentation::m_femElements

protected

FemElements.

## m_femElementType

std::string SurgSim::Physics::FemRepresentation::m_femElementType

protected

The FemElement factory parameter invoked in doInitialize() when using a MeshAsset either with LoadFem(const std::stirng& filename) or setFem(std::shared_ptr<Asset> mesh) This ensures that when using a mesh Asset, a single FemElement type is used.

Therefore we do not need to define this type in the ply file, but rather is part of the Representation properties (YAML).

## m_isInitialComplianceMatrixComputed

bool SurgSim::Physics::FemRepresentation::m_isInitialComplianceMatrixComputed

private

For compliance warping: Is the initial compliance matrix computed ?

## m_massPerNode

std::vector<double> SurgSim::Physics::FemRepresentation::m_massPerNode

protected

Useful information per node.

Useful in setting up the gravity force F=mg

## m_rayleighDamping

struct { ... } SurgSim::Physics::FemRepresentation::m_rayleighDamping

Rayleigh damping parameters (massCoefficient and stiffnessCoefficient) D = massCoefficient.M + stiffnessCoefficient.K Matrices: D = damping, M = mass, K = stiffness.

## m_useComplianceWarping

bool SurgSim::Physics::FemRepresentation::m_useComplianceWarping

private

Are we using Compliance Warping or not ?

## massCoefficient

double SurgSim::Physics::FemRepresentation::massCoefficient

## stiffnessCoefficient

double SurgSim::Physics::FemRepresentation::stiffnessCoefficient

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

- SurgSim/Physics/FemRepresentation.h
- SurgSim/Physics/FemRepresentation.cpp