template<class DataTypes>
class multithreading::component::forcefield::solidmechanics::fem::elastic::ParallelHexahedronFEMForceField< DataTypes >
Parallel implementation of HexahedronFEMForceField
This implementation is the most efficient when: 1) the number of hexahedron is large (> 1000) 2) the global system matrix is not assembled. It is usually the case with a CGLinearSolver templated with GraphScattered types. 3) the method is 'large'. If the method is 'polar' or 'small', addForce is executed sequentially, but addDForce in parallel.
The following methods are executed in parallel:
- addForce for method 'large'.
- addDForce
The method addKToMatrix is not executed in parallel. This method is called with an assembled system, usually with a direct solver or a CGLinearSolver templated with types different from GraphScattered. In this case, the most time-consumming step is to invert the matrix. This is where efforts should be put to accelerate the simulation.
|
| SOFA_CLASS (SOFA_TEMPLATE(ParallelHexahedronFEMForceField, DataTypes), SOFA_TEMPLATE(sofa::component::solidmechanics::fem::elastic::HexahedronFEMForceField, DataTypes)) |
|
void | init () override |
|
void | addForce (const sofa::core::MechanicalParams *mparams, DataVecDeriv &f, const DataVecCoord &x, const DataVecDeriv &v) override |
|
void | addDForce (const sofa::core::MechanicalParams *mparams, DataVecDeriv &df, const DataVecDeriv &dx) override |
|
| SOFA_CLASS (SOFA_TEMPLATE(HexahedronFEMForceField, DataTypes), SOFA_TEMPLATE(BaseLinearElasticityFEMForceField, DataTypes)) |
|
void | setMethod (int val) |
|
void | setUpdateStiffnessMatrix (bool val) |
|
void | init () override |
|
void | reinit () override |
|
void | addForce (const core::MechanicalParams *mparams, DataVecDeriv &f, const DataVecCoord &x, const DataVecDeriv &v) override |
|
void | addDForce (const core::MechanicalParams *mparams, DataVecDeriv &df, const DataVecDeriv &dx) override |
|
SReal | getPotentialEnergy (const core::MechanicalParams *mparams, const DataVecCoord &x) const override |
|
const Transformation & | getElementRotation (const sofa::Index elemidx) |
|
void | getNodeRotation (Transformation &R, sofa::Index nodeIdx) |
|
void | getRotations (linearalgebra::BaseMatrix *rotations, int offset=0) override |
|
void | addKToMatrix (sofa::linearalgebra::BaseMatrix *matrix, SReal kFact, unsigned int &offset) override |
|
void | buildStiffnessMatrix (core::behavior::StiffnessMatrix *matrix) override |
|
void | buildDampingMatrix (core::behavior::DampingMatrix *) override |
|
void | computeBBox (const core::ExecParams *params, bool onlyVisible) override |
|
void | draw (const core::visual::VisualParams *vparams) override |
|
void | handleTopologyChange () override |
|
| 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 | handleEvent (Event *) |
|
virtual void | handleTopologyChange (core::topology::Topology *t) |
|
void | parse (BaseObjectDescription *arg) override |
|
virtual void | bwdInit () |
|
void | updateInternal () |
|
virtual void | storeResetState () |
|
virtual void | reset () |
|
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 |
|
|
void | computeTaskForceLarge (RDataRefVecCoord &p, sofa::Index elementId, const Element &elem, const VecElementStiffness &elementStiffnesses, SReal &OutPotentialEnery, sofa::type::Vec< 8, Deriv > &OutF) |
|
| HexahedronFEMForceField () |
|
const VecElement * | getIndexedElements () |
|
virtual void | computeElementStiffness (ElementStiffness &K, const MaterialStiffness &M, const type::Vec< 8, Coord > &nodes, const sofa::Index elementIndice, double stiffnessFactor=1.0) const |
|
void | computeMaterialStiffness (sofa::Index i) |
|
void | initLarge (sofa::Index i, const Element &elem) |
|
virtual void | accumulateForceLarge (WDataRefVecDeriv &f, RDataRefVecCoord &p, sofa::Index i, const Element &elem) |
|
void | initPolar (sofa::Index i, const Element &elem) |
|
void | computeRotationPolar (Transformation &r, type::Vec< 8, Coord > &nodes) |
|
virtual void | accumulateForcePolar (WDataRefVecDeriv &f, RDataRefVecCoord &p, sofa::Index i, const Element &elem) |
|
void | initSmall (sofa::Index i, const Element &elem) |
|
virtual void | accumulateForceSmall (WDataRefVecDeriv &f, RDataRefVecCoord &p, sofa::Index i, const Element &elem) |
|
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 () |
|