template<class DataTypes>
class multithreading::component::forcefield::solidmechanics::fem::elastic::ParallelTetrahedronFEMForceField< DataTypes >
Parallel implementation of TetrahedronFEMForceField
This implementation is the most efficient when: 1) the number of tetrahedron is large (> 1000)
The following methods are executed in parallel:
|  | 
|  | SOFA_CLASS (SOFA_TEMPLATE(ParallelTetrahedronFEMForceField, DataTypes), SOFA_TEMPLATE(sofa::component::solidmechanics::fem::elastic::TetrahedronFEMForceField, DataTypes)) | 
|  | 
| void | init () override | 
|  | 
| void | addForce (const sofa::core::MechanicalParams *mparams, DataVecDeriv &d_f, const DataVecCoord &d_x, const DataVecDeriv &d_v) override | 
|  | 
| void | addDForce (const sofa::core::MechanicalParams *mparams, DataVecDeriv &d_df, const DataVecDeriv &d_dx) override | 
|  | 
| void | addKToMatrix (sofa::linearalgebra::BaseMatrix *mat, SReal kFactor, unsigned int &offset) override | 
|  | 
|  | SOFA_CLASS2 (SOFA_TEMPLATE(TetrahedronFEMForceField, DataTypes), SOFA_TEMPLATE(BaseLinearElasticityFEMForceField, DataTypes), SOFA_TEMPLATE(core::behavior::RotationFinder, DataTypes)) | 
|  | 
| Real | getRestVolume () | 
|  | 
| void | getRotation (Mat33 &R, Index nodeIdx) | 
|  | 
| void | getRotations (VecReal &vecR) | 
|  | 
| void | getRotations (linearalgebra::BaseMatrix *rotations, int offset=0) override | 
|  | 
| const type::vector< Mat33 > & | getRotations () override | 
|  | 
| void | setComputeGlobalMatrix (bool val) | 
|  | 
| const Transformation & | getActualTetraRotation (Index index) | 
|  | 
| const Transformation & | getInitialTetraRotation (Index index) | 
|  | 
| const MaterialStiffness & | getMaterialStiffness (TetrahedronID tetraId) | 
|  | 
| const StrainDisplacement & | getStrainDisplacement (TetrahedronID tetraId) | 
|  | 
| const type::fixed_array< Coord, 4 > & | getRotatedInitialElements (TetrahedronID tetraId) | 
|  | 
| void | setMethod (std::string methodName) | 
|  | 
| void | setMethod (int val) | 
|  | 
| void | setUpdateStiffnessMatrix (bool val) | 
|  | 
| void | reset () override | 
|  | 
| void | init () override | 
|  | 
| void | reinit () override | 
|  | 
| void | addForce (const core::MechanicalParams *mparams, DataVecDeriv &d_f, const DataVecCoord &d_x, const DataVecDeriv &d_v) override | 
|  | 
| void | addDForce (const core::MechanicalParams *mparams, DataVecDeriv &d_df, const DataVecDeriv &d_dx) override | 
|  | 
| SReal | getPotentialEnergy (const core::MechanicalParams *, const DataVecCoord &x) const override | 
|  | 
| void | addKToMatrix (sofa::linearalgebra::BaseMatrix *m, SReal kFactor, unsigned int &offset) override | 
|  | 
| void | buildStiffnessMatrix (core::behavior::StiffnessMatrix *matrix) override | 
|  | 
| void | buildDampingMatrix (core::behavior::DampingMatrix *) final | 
|  | 
| void | draw (const core::visual::VisualParams *vparams) override | 
|  | 
| void | computeBBox (const core::ExecParams *params, bool onlyVisible) override | 
|  | 
| void | getElementStiffnessMatrix (Real *stiffness, Index nodeIdx) | 
|  | 
|  | SOFA_CLASS (SOFA_TEMPLATE(BaseLinearElasticityFEMForceField, DataTypes), SOFA_TEMPLATE(core::behavior::ForceField, DataTypes)) | 
|  | 
|  | BaseLinearElasticityFEMForceField () | 
|  | 
| void | setPoissonRatio (Real val) | 
|  | 
| void | setYoungModulus (Real val) | 
|  | 
| Real | getYoungModulusInElement (sofa::Size elementId) const | 
|  | 
| Real | getPoissonRatioInElement (sofa::Size elementId) const | 
|  | 
|  | SOFA_CLASS2 (SOFA_TEMPLATE(ForceField, DataTypes), BaseForceField, SOFA_TEMPLATE(SingleStateAccessor, DataTypes)) | 
|  | 
| void | addForce (const MechanicalParams *mparams, MultiVecDerivId fId) override | 
|  | 
| virtual void | addForce (const MechanicalParams *, DataVecDeriv &f, const DataVecCoord &x, const DataVecDeriv &v)=0 | 
|  | 
| void | addDForce (const MechanicalParams *mparams, MultiVecDerivId dfId) override | 
|  | 
| virtual void | addDForce (const MechanicalParams *mparams, DataVecDeriv &df, const DataVecDeriv &dx)=0 | 
|  | 
| virtual void | addClambda (const MechanicalParams *mparams, DataVecDeriv &df, const DataVecDeriv &lambda, SReal cFactor)=delete | 
|  | 
| virtual void | addClambda (const MechanicalParams *, MultiVecDerivId, MultiVecDerivId, SReal)=delete | 
|  | 
| SReal | getPotentialEnergy (const MechanicalParams *mparams) const override | 
|  | 
| virtual SReal | getPotentialEnergy (const MechanicalParams *, const DataVecCoord &x) const =0 | 
|  | 
| void | addKToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix) override | 
|  | 
| void | addBToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix) override | 
|  | 
| virtual void | addBToMatrix (sofa::linearalgebra::BaseMatrix *matrix, SReal bFact, unsigned int &offset) | 
|  | 
| void | addToMatrix (sofa::linearalgebra::BaseMatrix *bm, unsigned offset, const IndexArray &nodeIndex, const ElementMat &em, SReal scale) | 
|  | 
| void | addForce (const MechanicalParams *mparams, MultiVecDerivId fId) override | 
|  | 
| virtual void | addForce (const MechanicalParams *, DataVecDeriv &f, const DataVecCoord &x, const DataVecDeriv &v)=0 | 
|  | 
| void | addDForce (const MechanicalParams *mparams, MultiVecDerivId dfId) override | 
|  | 
| virtual void | addDForce (const MechanicalParams *mparams, DataVecDeriv &df, const DataVecDeriv &dx)=0 | 
|  | 
| virtual void | addClambda (const MechanicalParams *mparams, DataVecDeriv &df, const DataVecDeriv &lambda, SReal cFactor)=delete | 
|  | 
| virtual void | addClambda (const MechanicalParams *, MultiVecDerivId, MultiVecDerivId, SReal)=delete | 
|  | 
| SReal | getPotentialEnergy (const MechanicalParams *mparams) const override | 
|  | 
| virtual SReal | getPotentialEnergy (const MechanicalParams *, const DataVecCoord &x) const =0 | 
|  | 
| void | addKToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix) override | 
|  | 
| void | addBToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix) override | 
|  | 
| virtual void | addBToMatrix (sofa::linearalgebra::BaseMatrix *matrix, SReal bFact, unsigned int &offset) | 
|  | 
| void | addToMatrix (sofa::linearalgebra::BaseMatrix *bm, unsigned offset, const IndexArray &nodeIndex, const ElementMat &em, SReal scale) | 
|  | 
|  | SOFA_ABSTRACT_CLASS (BaseForceField, StateAccessor) | 
|  | 
| bool | insertInNode (objectmodel::BaseNode *node) override | 
|  | 
| bool | removeInNode (objectmodel::BaseNode *node) override | 
|  | 
| virtual void | addForce (const MechanicalParams *mparams, MultiVecDerivId fId)=0 | 
|  | 
| virtual void | addDForce (const MechanicalParams *mparams, MultiVecDerivId dfId)=0 | 
|  | 
| virtual void | addMBKdx (const MechanicalParams *mparams, MultiVecDerivId dfId) | 
|  | 
| virtual SReal | getPotentialEnergy (const MechanicalParams *mparams=mechanicalparams::defaultInstance()) const=0 | 
|  | 
| virtual void | addKToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix)=0 | 
|  | 
| virtual void | addBToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix) | 
|  | 
| virtual void | addMBKToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix) | 
|  | 
| virtual const sofa::linearalgebra::BaseMatrix * | getComplianceMatrix (const MechanicalParams *)=delete | 
|  | 
| virtual void | addClambda (const MechanicalParams *, MultiVecDerivId, MultiVecDerivId, SReal)=delete | 
|  | 
| virtual void | addForce (const MechanicalParams *mparams, MultiVecDerivId fId)=0 | 
|  | 
| virtual void | addDForce (const MechanicalParams *mparams, MultiVecDerivId dfId)=0 | 
|  | 
| virtual void | addMBKdx (const MechanicalParams *mparams, MultiVecDerivId dfId) | 
|  | 
| virtual SReal | getPotentialEnergy (const MechanicalParams *mparams=mechanicalparams::defaultInstance()) const=0 | 
|  | 
| virtual void | addKToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix)=0 | 
|  | 
| virtual void | addBToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix) | 
|  | 
| virtual void | addMBKToMatrix (const MechanicalParams *mparams, const sofa::core::behavior::MultiMatrixAccessor *matrix) | 
|  | 
|  | SOFA_ABSTRACT_CLASS (StateAccessor, objectmodel::BaseObject) | 
|  | 
| virtual const MultiLink< StateAccessor, BaseMechanicalState, BaseLink::FLAG_DUPLICATE >::Container & | getMechanicalStates () const | 
|  | 
|  | SOFA_CLASS (BaseObject, Base) | 
|  | 
| void | setSrc (const std::string &v, std::vector< std::string > *attributeList=nullptr) | 
|  | 
| void | setSrc (const std::string &v, const BaseObject *loader, std::vector< std::string > *attributeList=nullptr) | 
|  | 
| Base * | findLinkDestClass (const BaseClass *destType, const std::string &path, const BaseLink *link) override | 
|  | 
| virtual std::string | getPathName () const override | 
|  | 
| SReal | getTime () const | 
|  | 
| const BaseContext * | getContext () const | 
|  | 
| BaseContext * | getContext () | 
|  | 
| const BaseObject * | getMaster () const | 
|  | 
| BaseObject * | getMaster () | 
|  | 
| const VecSlaves & | getSlaves () const | 
|  | 
| BaseObject * | getSlave (const std::string &name) const | 
|  | 
| virtual void | addSlave (BaseObject::SPtr s) | 
|  | 
| virtual void | removeSlave (BaseObject::SPtr s) | 
|  | 
| virtual void | handleTopologyChange (core::topology::Topology *t) | 
|  | 
| void | parse (BaseObjectDescription *arg) override | 
|  | 
| virtual void | bwdInit () | 
|  | 
| void | updateInternal () | 
|  | 
| virtual void | storeResetState () | 
|  | 
| virtual void | cleanup () | 
|  | 
| SReal | getTime () const | 
|  | 
| virtual const BaseClass * | getClass () const | 
|  | 
| void | addDeprecatedAttribute (lifecycle::DeprecatedData *attribute) | 
|  | 
| void | addUpdateCallback (const std::string &name, std::initializer_list< BaseData * > inputs, std::function< sofa::core::objectmodel::ComponentState(const DataTracker &)> function, std::initializer_list< BaseData * > outputs) | 
|  | 
| void | addOutputsToCallback (const std::string &name, std::initializer_list< BaseData * > outputs) | 
|  | 
| const std::string & | getName () const | 
|  | 
| void | setName (const std::string &n) | 
|  | 
| void | setName (const std::string &n, int counter) | 
|  | 
| std::string | getTypeName () const | 
|  | 
| virtual std::string | getClassName () const | 
|  | 
| virtual std::string | getTemplateName () const final | 
|  | 
| std::string | getNameSpaceName () const | 
|  | 
| void | setDefinitionSourceFileName (const std::string &sourceFileName) | 
|  | 
| const std::string & | getDefinitionSourceFileName () const | 
|  | 
| void | setDefinitionSourceFilePos (const int) | 
|  | 
| int | getDefinitionSourceFilePos () const | 
|  | 
| void | setInstanciationSourceFileName (const std::string &sourceFileName) | 
|  | 
| const std::string & | getInstanciationSourceFileName () const | 
|  | 
| void | setInstanciationSourceFilePos (const int) | 
|  | 
| int | getInstanciationSourceFilePos () const | 
|  | 
| void | addMessage (const sofa::helper::logging::Message &m) const | 
|  | 
| size_t | countLoggedMessages (sofa::helper::logging::Message::TypeSet t=sofa::helper::logging::Message::AnyTypes) const | 
|  | 
| const std::deque< sofa::helper::logging::Message > & | getLoggedMessages () const | 
|  | 
| const std::string | getLoggedMessagesAsString (sofa::helper::logging::Message::TypeSet t=sofa::helper::logging::Message::AnyTypes) const | 
|  | 
| void | clearLoggedMessages () const | 
|  | 
| bool | notMuted () const | 
|  | 
| const sofa::core::objectmodel::TagSet & | getTags () const | 
|  | 
| bool | hasTag (Tag t) const | 
|  | 
| void | addTag (Tag t) | 
|  | 
| void | removeTag (Tag t) | 
|  | 
| ComponentState | getComponentState () const | 
|  | 
| bool | isComponentStateValid () const | 
|  | 
| bool | isComponentStateInvalid () const | 
|  | 
|  | SOFA_ATTRIBUTE_DEPRECATED__TOBASECONSTRAINT () virtual const behavior | 
|  | 
| virtual bool | parseField (const std::string &attribute, const std::string &value) | 
|  | 
| virtual bool | hasField (const std::string &attribute) const | 
|  | 
| void | parseFields (const std::list< std::string > &str) | 
|  | 
| virtual void | parseFields (const std::map< std::string, std::string * > &str) | 
|  | 
| void | writeDatas (std::map< std::string, std::string * > &str)=delete | 
|  | 
| void | writeDatas (std::ostream &out, const std::string &separator=" ") | 
|  | 
| BaseData * | findData (const std::string &name) const | 
|  | 
| std::vector< BaseData * > | findGlobalField (const std::string &name) const | 
|  | 
| BaseLink * | findLink (const std::string &name) const | 
|  | 
| std::vector< BaseLink * > | findLinks (const std::string &name) const | 
|  | 
| virtual void | updateLinks (bool logErrors=true) | 
|  | 
| BaseData::BaseInitData | initData (::sofa::core::objectmodel::Data< T > *field, const char *name, const char *help, ::sofa::core::objectmodel::BaseData::DataFlags dataflags) | 
|  | 
| BaseData::BaseInitData | initData (Data< T > *field, const char *name, const char *help, bool isDisplayed=true, bool isReadOnly=false) | 
|  | 
| Data< T >::InitData | initData (Data< T > *field, const T &value, const char *name, const char *help, bool isDisplayed=true, bool isReadOnly=false) | 
|  | 
| void | addData (BaseData *f, const std::string &name) | 
|  | 
| void | addData (BaseData *f) | 
|  | 
| void | removeData (BaseData *f) | 
|  | 
| void | addAlias (BaseData *field, const char *alias) | 
|  | 
| void | addLink (BaseLink *l) | 
|  | 
| void | addAlias (BaseLink *link, const char *alias) | 
|  | 
| const VecData & | getDataFields () const | 
|  | 
| const MapData & | getDataAliases () const | 
|  | 
| const VecLink & | getLinks () const | 
|  | 
| const MapLink & | getLinkAliases () const | 
|  | 
| virtual bool | findDataLinkDest (BaseData *&ptr, const std::string &path, const BaseLink *link) | 
|  | 
| bool | findLinkDest (T *&ptr, const std::string &path, const BaseLink *link) | 
|  | 
| const sofa::core::objectmodel::TagSet & | getTags () const | 
|  | 
| bool | hasTag (Tag t) const | 
|  | 
| void | addTag (Tag t) | 
|  | 
| void | removeTag (Tag t) | 
|  | 
| ComponentState | getComponentState () const | 
|  | 
| bool | isComponentStateValid () const | 
|  | 
| bool | isComponentStateInvalid () const | 
|  | 
|  | SOFA_ATTRIBUTE_DEPRECATED__TOBASECONSTRAINT () virtual const behavior | 
|  | 
|  | SOFA_ABSTRACT_CLASS (SOFA_TEMPLATE(SingleStateAccessor, DataTypes), StateAccessor) | 
|  | 
| MechanicalState< DataTypes > * | getMState () | 
|  | 
| const MechanicalState< DataTypes > * | getMState () const | 
|  | 
|  | 
| template<class Function > | 
| void | addDForceGeneric (VecDeriv &df, const VecDeriv &dx, Real kFactor, const VecElement &indexedElements, Function f) | 
|  | 
| void | addDForceSmall (VecDeriv &df, const VecDeriv &dx, Real kFactor, const VecElement &indexedElements) | 
|  | 
| void | addDForceCorotational (VecDeriv &df, const VecDeriv &dx, Real kFactor, const VecElement &indexedElements) | 
|  | 
| void | drawTrianglesFromTetrahedra (const sofa::core::visual::VisualParams *vparams, bool showVonMisesStressPerElement, bool drawVonMisesStress, const VecCoord &x, const VecReal &youngModulus, bool heterogeneous, Real minVM, Real maxVM, sofa::helper::ReadAccessor< sofa::Data< sofa::type::vector< Real >>> vM) override | 
|  | 
|  | TetrahedronFEMForceField () | 
|  | 
|  | ~TetrahedronFEMForceField () override | 
|  | 
| void | computeStrainDisplacement (StrainDisplacement &J, Coord a, Coord b, Coord c, Coord d) | 
|  | 
| Real | peudo_determinant_for_coef (const type::Mat< 2, 3, Real > &M) | 
|  | 
| void | computeStiffnessMatrix (StiffnessMatrix &S, StiffnessMatrix &SR, const MaterialStiffness &K, const StrainDisplacement &J, const Transformation &Rot) | 
|  | 
| virtual void | computeMaterialStiffness (Index i, Index &a, Index &b, Index &c, Index &d) | 
|  | 
| void | computeForce (Displacement &F, const Displacement &Depl, VoigtTensor &plasticStrain, const MaterialStiffness &K, const StrainDisplacement &J) | 
|  | 
| void | computeForce (Displacement &F, const Displacement &Depl, const MaterialStiffness &K, const StrainDisplacement &J, SReal fact) | 
|  | 
| void | initSmall (Index i, Index &a, Index &b, Index &c, Index &d) | 
|  | 
| void | accumulateForceSmall (Vector &f, const Vector &p, typename VecElement::const_iterator elementIt, Index elementIndex) | 
|  | 
| void | applyStiffnessSmall (Vector &f, const Vector &x, Index i=0, Index a=0, Index b=1, Index c=2, Index d=3, SReal fact=1.0) | 
|  | 
| void | initLarge (Index i, Index &a, Index &b, Index &c, Index &d) | 
|  | 
| void | computeRotationLarge (Transformation &r, const Vector &p, const Index &a, const Index &b, const Index &c) | 
|  | 
| void | accumulateForceLarge (Vector &f, const Vector &p, typename VecElement::const_iterator elementIt, Index elementIndex) | 
|  | 
| void | initPolar (Index i, Index &a, Index &b, Index &c, Index &d) | 
|  | 
| void | accumulateForcePolar (Vector &f, const Vector &p, typename VecElement::const_iterator elementIt, Index elementIndex) | 
|  | 
| void | initSVD (Index i, Index &a, Index &b, Index &c, Index &d) | 
|  | 
| void | accumulateForceSVD (Vector &f, const Vector &p, typename VecElement::const_iterator elementIt, Index elementIndex) | 
|  | 
| void | applyStiffnessCorotational (Vector &f, const Vector &x, Index i=0, Index a=0, Index b=1, Index c=2, Index d=3, SReal fact=1.0) | 
|  | 
| void | handleTopologyChange () override | 
|  | 
| void | computeVonMisesStress () | 
|  | 
| bool | isComputeVonMisesStressMethodSet () | 
|  | 
| void | computeMinMaxFromYoungsModulus () | 
|  | 
| virtual void | drawTrianglesFromTetrahedra (const core::visual::VisualParams *vparams, bool showVonMisesStressPerElement, bool drawVonMisesStress, const VecCoord &x, const VecReal &youngModulus, bool heterogeneous, Real minVM, Real maxVM, helper::ReadAccessor< Data< type::vector< Real >>> vM) | 
|  | 
| virtual void | drawTrianglesFromRangeOfTetrahedra (const simulation::Range< VecElement::const_iterator > &range, const core::visual::VisualParams *vparams, bool showVonMisesStressPerElement, bool drawVonMisesStress, bool showWireFrame, const VecCoord &x, const VecReal &youngModulus, bool heterogeneous, Real minVM, Real maxVM, helper::ReadAccessor< Data< type::vector< Real >>> vM) | 
|  | 
| void | handleEvent (core::objectmodel::Event *event) override | 
|  | 
| void | checkPoissonRatio () | 
|  | 
| void | checkYoungModulus () | 
|  | 
| Real | getVecRealInElement (sofa::Size elementId, const Data< VecReal > &data, Real defaultValue) const | 
|  | 
|  | ForceField (MechanicalState< DataTypes > *mm=nullptr) | 
|  | 
|  | ~ForceField () override | 
|  | 
|  | BaseForceField () | 
|  | 
|  | ~BaseForceField () override=default | 
|  | 
|  | StateAccessor () | 
|  | 
|  | ~StateAccessor () override=default | 
|  | 
|  | BaseObject () | 
|  | 
|  | ~BaseObject () override | 
|  | 
| virtual void | doUpdateInternal () | 
|  | 
| void | changeContextLink (BaseContext *before, BaseContext *&after) | 
|  | 
| void | changeSlavesLink (BaseObject::SPtr ptr, std::size_t, bool add) | 
|  | 
| void | trackInternalData (const BaseData &data) | 
|  | 
| void | cleanTracker () | 
|  | 
| bool | hasDataChanged (const BaseData &data) | 
|  | 
|  | Base () | 
|  | 
| virtual | ~Base () | 
|  | 
| void | initData0 (BaseData *field, BaseData::BaseInitData &res, const char *name, const char *help, bool isDisplayed=true, bool isReadOnly=false) | 
|  | 
| void | initData0 (BaseData *field, BaseData::BaseInitData &res, const char *name, const char *help, BaseData::DataFlags dataFlags) | 
|  | 
| void | initData0 (Data< T > *field, typename Data< T >::InitData &res, const T &value, const char *name, const char *help, bool isDisplayed=true, bool isReadOnly=false) | 
|  | 
| virtual | ~IntrusiveObject ()=default | 
|  | 
|  | SingleStateAccessor (MechanicalState< DataTypes > *mm=nullptr) | 
|  | 
|  | ~SingleStateAccessor () override=default | 
|  | 
|  | TaskSchedulerUser () | 
|  | 
| void | initTaskScheduler () | 
|  | 
| void | reinitTaskScheduler () | 
|  | 
| void | stopTaskSchduler () | 
|  |