Caribou
Public Types | Public Member Functions | Static Public Member Functions | List of all members
SofaCaribou::forcefield::FictitiousGridHyperelasticForcefield< Element > Class Template Reference

Detailed Description

template<typename Element>
class SofaCaribou::forcefield::FictitiousGridHyperelasticForcefield< Element >

Hyperelastic forcefield for cut hexahedral elements.

Template Parameters
ElementCan be either SubdividedGaussHexahedron or SubdividedVolumeHexahedron

#include <FictitiousGridHyperelasticForce.h>

Inheritance diagram for SofaCaribou::forcefield::FictitiousGridHyperelasticForcefield< Element >:
SofaCaribou::forcefield::HyperelasticForcefield< Element >

Public Types

using Base = HyperelasticForcefield< Element >
 
using FictitiousGrid = SofaCaribou::topology::FictitiousGrid< sofa::defaulttype::Vec3Types >
 
using GaussContainer = typename Base::GaussContainer
 
using Index = sofa::Index
 
template<typename ObjectType >
using Link = SingleLink< FictitiousGridHyperelasticForcefield< Element >, ObjectType, BaseLink::FLAG_STRONGLINK >
 
using Mat33 = Matrix< 3, 3 >
 
- Public Types inherited from SofaCaribou::forcefield::HyperelasticForcefield< Element >
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(FictitiousGridHyperelasticForcefield, Element), SOFA_TEMPLATE(HyperelasticForcefield, Element))
 
void init () override
 
auto number_of_elements () const -> std::size_t override
 Get the number of elements contained in this field.
 
auto templateName (const FictitiousGridHyperelasticForcefield< SubdividedGaussHexahedron > *) -> std::string
 
auto canCreate (FictitiousGridHyperelasticForcefield< SubdividedGaussHexahedron > *, BaseContext *, BaseObjectDescription *arg) -> bool
 
auto templateName (const FictitiousGridHyperelasticForcefield< SubdividedVolumeHexahedron > *) -> std::string
 
auto canCreate (FictitiousGridHyperelasticForcefield< SubdividedVolumeHexahedron > *, BaseContext *, BaseObjectDescription *arg) -> bool
 
auto templateName (const FictitiousGridHyperelasticForcefield< caribou::geometry::SubdividedVolumeHexahedron > *) -> std::string
 
auto canCreate (FictitiousGridHyperelasticForcefield< caribou::geometry::SubdividedVolumeHexahedron > *, BaseContext *, BaseObjectDescription *arg) -> bool
 
auto templateName (const FictitiousGridHyperelasticForcefield< caribou::geometry::SubdividedGaussHexahedron > *) -> std::string
 
auto canCreate (FictitiousGridHyperelasticForcefield< caribou::geometry::SubdividedGaussHexahedron > *, BaseContext *, BaseObjectDescription *arg) -> bool
 
- Public Member Functions inherited from SofaCaribou::forcefield::HyperelasticForcefield< Element >
 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
 
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 FictitiousGridHyperelasticForcefield< Element > *=nullptr) -> std::string
 
static auto canCreate (FictitiousGridHyperelasticForcefield< Element > *, BaseContext *, BaseObjectDescription *arg) -> bool
 
- Static Public Member Functions inherited from SofaCaribou::forcefield::HyperelasticForcefield< Element >
static auto templateName (const HyperelasticForcefield< Element > *=nullptr) -> std::string
 
static auto canCreate (HyperelasticForcefield< Element > *o, BaseContext *context, BaseObjectDescription *arg) -> bool
 

Additional Inherited Members

- Static Public Attributes inherited from SofaCaribou::forcefield::HyperelasticForcefield< Element >
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 inherited from SofaCaribou::forcefield::HyperelasticForcefield< Element >
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 inherited from SofaCaribou::forcefield::HyperelasticForcefield< Element >
static auto mesh_is_compatible (const sofa::core::topology::BaseMeshTopology *) -> bool
 Return true if the mesh topology is compatible with the type Element. More...
 

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