Caribou
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | List of all members
SofaCaribou::forcefield::HyperelasticForcefield< Element > Class Template Reference
Inheritance diagram for SofaCaribou::forcefield::HyperelasticForcefield< Element >:
SofaCaribou::forcefield::FictitiousGridHyperelasticForcefield< Element >

Classes

struct  GaussNode
 

Public Types

using DataTypes = typename SofaVecType< caribou::geometry::traits< Element >::Dimension >::Type
 
using Inherit = ForceField< DataTypes >
 
using VecCoord = typename DataTypes::VecCoord
 
using VecDeriv = typename DataTypes::VecDeriv
 
using Coord = typename DataTypes::Coord
 
using Deriv = typename DataTypes::Deriv
 
using Real = typename Coord::value_type
 
using LocalCoordinates = typename caribou::geometry::Element< Element >::LocalCoordinates
 
using WorldCoordinates = typename caribou::geometry::Element< Element >::WorldCoordinates
 
template<int nRows, int nColumns>
using Matrix = typename caribou::geometry::Element< Element >::template Matrix< nRows, nColumns >
 
template<int nRows, int nColumns, int Options = 0>
using MatrixI = typename caribou::geometry::Element< Element >::template MatrixI< nRows, nColumns >
 
template<int nRows, int nColumns>
using Map = Eigen::Map< const Matrix< nRows, nColumns > >
 
template<int nRows>
using Vector = typename caribou::geometry::Element< Element >::template Vector< nRows >
 
template<int nRows>
using MapVector = Eigen::Map< const Vector< nRows > >
 
using Mat33 = Matrix< 3, 3 >
 
using Vec3 = Vector< 3 >
 
template<typename ObjectType >
using Link = SingleLink< HyperelasticForcefield< Element >, ObjectType, BaseLink::FLAG_STRONGLINK >
 
using GaussContainer = typename GaussContainer< GaussNode, NumberOfGaussNodes >::Type
 

Public Member Functions

 SOFA_CLASS (SOFA_TEMPLATE(HyperelasticForcefield, Element), SOFA_TEMPLATE(ForceField, typename SofaVecType< caribou::geometry::traits< Element >::Dimension >::Type))
 
auto getTemplateName () const -> std::string override
 
void init () override
 
void addForce (const MechanicalParams *mparams, Data< VecDeriv > &d_f, const Data< VecCoord > &d_x, const Data< VecDeriv > &d_v) override
 
void addDForce (const MechanicalParams *, Data< VecDeriv > &, const Data< VecDeriv > &) override
 
SReal getPotentialEnergy (const MechanicalParams *, const Data< VecCoord > &) const override
 
void addKToMatrix (sofa::defaulttype::BaseMatrix *, SReal, unsigned int &) override
 
void computeBBox (const sofa::core::ExecParams *params, bool onlyVisible) override
 
void draw (const sofa::core::visual::VisualParams *vparams) override
 
virtual auto number_of_elements () const -> std::size_t
 Get the number of elements contained in this field.
 
auto gauss_nodes_of (std::size_t element_id) const -> const auto &
 Get the set of Gauss integration nodes of an element.
 
auto K () -> Eigen::SparseMatrix< Real >
 Get the complete tangent stiffness matrix as a compressed sparse matrix.
 
auto eigenvalues () -> const Vector< Eigen::Dynamic > &
 Get the eigen values of the tangent stiffness matrix.
 
auto cond () -> Real
 Get the condition number of the tangent stiffness matrix.
 
auto number_of_elements () const -> std::size_t
 
auto templateName (const HyperelasticForcefield< Triangle< _2D, Linear >> *) -> std::string
 
auto number_of_elements () const -> std::size_t
 
auto templateName (const HyperelasticForcefield< Quad< _2D, Linear >> *) -> std::string
 
auto number_of_elements () const -> std::size_t
 
auto templateName (const HyperelasticForcefield< Tetrahedron< Linear >> *) -> std::string
 
auto number_of_elements () const -> std::size_t
 
auto templateName (const HyperelasticForcefield< Hexahedron< Linear >> *) -> std::string
 
auto number_of_elements () const -> std::size_t
 
auto templateName (const HyperelasticForcefield< caribou::geometry::Tetrahedron< caribou::Linear >> *) -> std::string
 
auto number_of_elements () const -> std::size_t
 
auto templateName (const HyperelasticForcefield< caribou::geometry::Hexahedron< caribou::Linear >> *) -> std::string
 

Static Public Member Functions

static auto templateName (const HyperelasticForcefield< Element > *=nullptr) -> std::string
 
static auto canCreate (HyperelasticForcefield< Element > *o, BaseContext *context, BaseObjectDescription *arg) -> bool
 

Static Public Attributes

static constexpr INTEGER_TYPE Dimension = caribou::geometry::traits<Element>::Dimension
 
static constexpr INTEGER_TYPE NumberOfNodes = caribou::geometry::traits<Element>::NumberOfNodesAtCompileTime
 
static constexpr INTEGER_TYPE NumberOfGaussNodes = caribou::geometry::traits<Element>::NumberOfGaussNodesAtCompileTime
 

Protected Member Functions

auto mesh_is_compatible (const sofa::core::topology::BaseMeshTopology *topology) -> bool
 
auto mesh_is_compatible (const sofa::core::topology::BaseMeshTopology *topology) -> bool
 
auto mesh_is_compatible (const sofa::core::topology::BaseMeshTopology *topology) -> bool
 
auto mesh_is_compatible (const sofa::core::topology::BaseMeshTopology *topology) -> bool
 
auto mesh_is_compatible (const sofa::core::topology::BaseMeshTopology *topology) -> bool
 
auto mesh_is_compatible (const sofa::core::topology::BaseMeshTopology *topology) -> bool
 

Static Protected Member Functions

static auto mesh_is_compatible (const sofa::core::topology::BaseMeshTopology *) -> bool
 Return true if the mesh topology is compatible with the type Element. More...
 

Class Documentation

◆ SofaCaribou::forcefield::HyperelasticForcefield::GaussNode

struct SofaCaribou::forcefield::HyperelasticForcefield::GaussNode
Class Members
Matrix< NumberOfNodes, Dimension > dN_dx
Mat33 F
Real jacobian_determinant
Real weight

Member Function Documentation

◆ mesh_is_compatible()

template<typename Element >
static auto SofaCaribou::forcefield::HyperelasticForcefield< Element >::mesh_is_compatible ( const sofa::core::topology::BaseMeshTopology *  ) -> bool
inlinestaticprotected

Return true if the mesh topology is compatible with the type Element.

This internal function is used when the scene graph is created and no template is specified to this component. When a MeshTopology is found in the context node, this function will return true if the MeshTopology is a good hint of the element type that should be used. For example, if a TetrahedronSetTopologyContainer passed as parameter, than HyperelasticForcefield<Tetrahedron>::mesh_is_compatible(topology) will return true.


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