v0.16.3
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Protected Attributes | Static Protected Attributes | List of all members
MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE > Struct Template Reference
Inheritance diagram for MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >:
[legend]
Collaboration diagram for MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >:
[legend]

Public Types

using A = MatPiolaResponseImpl< DIM >
 
using ResponsePtr = boost::shared_ptr< MatPiolaResponse >
 
- Public Types inherited from MatOps::PhysicalEquations
using HookFunction = std::function< MoFEMErrorCode(boost::shared_ptr< MatOpsData >, int, EntityHandle, int)>
 

Public Member Functions

 MatMetaPiolaResponse (boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
 
MoFEMErrorCode getOptions (MoFEM::Interface *m_field_ptr=nullptr) override
 
MoFEMErrorCode setParams (FEMethod *fe_ptr, int gg) override
 
MoFEMErrorCode recordTape () override
 
MoFEMErrorCode evaluateVariable (int tag, EntityHandle entity, int gg) override
 
MoFEMErrorCode evaluateDerivatives (int tag, EntityHandle entity, int gg) override
 
MoFEMErrorCode updateState (int tag, EntityHandle entity, int gg) override
 
std::map< int, ResponsePtr > & getMetaPiolaResponseMap ()
 
- Public Member Functions inherited from MatOps::MatPiolaResponseImpl< DIM >
ForcesAndSourcesCore::UserDataOperator * createOp (boost::shared_ptr< PhysicalEquations > physical_ptr, bool eval_stress, bool eval_tangent, bool update) override
 
ForcesAndSourcesCore::UserDataOperator * createOp (boost::shared_ptr< PhysicalEquations > physical_ptr, bool eval_stress, bool eval_tangent, bool update)
 
ForcesAndSourcesCore::UserDataOperator * createOp (boost::shared_ptr< PhysicalEquations > physical_ptr, bool eval_stress, bool eval_tangent, bool update)
 
- Public Member Functions inherited from MatOps::MatPiolaResponse
 PhysicalEquations ()=delete
 
 PhysicalEquations (boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag, boost::shared_ptr< std::map< int, Range > > tag_vs_range_ptr=nullptr)
 
- Public Member Functions inherited from MatOps::PhysicalEquations
 PhysicalEquations ()=delete
 
 PhysicalEquations (boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag, boost::shared_ptr< std::map< int, Range > > tag_vs_range_ptr=nullptr)
 
virtual ~PhysicalEquations ()=default
 
virtual MoFEMErrorCode addBlockParameters (MoFEM::Interface &m_field, const std::string &block_name, int block_id, const Range &block_entities, const std::vector< double > &block_data)
 

Protected Attributes

std::map< int, ResponsePtr > metaPiolaResponses
 

Static Protected Attributes

static constexpr int modelType = MODEL_TYPE
 

Additional Inherited Members

- Public Attributes inherited from MatOps::PhysicalEquations
HookFunction hookEvaluateVariable = AdolCEvaluation::evaluateVariable
 
HookFunction hookEvaluateDerivatives = AdolCEvaluation::evaluateDerivatives
 
HookFunction hookUpdateState = AdolCEvaluation::evaluateVariable
 
int tAg
 
boost::shared_ptr< std::map< int, Range > > tagVsRangePtr
 
std::vector< std::pair< Range, std::vector< double > > > paramVecByRange
 
boost::shared_ptr< MatOpsData > matOpsDataPtr
 
- Static Public Attributes inherited from MatOps::MatPiolaResponse
static bool useDeformationGradient
 Otherwise the displacement gradient is supplied and I is added.
 

Detailed Description

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
struct MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >

Definition at line 16 of file MatMetaPiolaResponse.cpp.

Member Typedef Documentation

◆ A

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
using MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::A = MatPiolaResponseImpl<DIM>

Definition at line 17 of file MatMetaPiolaResponse.cpp.

◆ ResponsePtr

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
using MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::ResponsePtr = boost::shared_ptr<MatPiolaResponse>

Definition at line 18 of file MatMetaPiolaResponse.cpp.

Constructor & Destructor Documentation

◆ MatMetaPiolaResponse()

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::MatMetaPiolaResponse ( boost::shared_ptr< MatOpsData >  mat_ops_data_ptr,
int  tag 
)
inline

Definition at line 20 of file MatMetaPiolaResponse.cpp.

21 : A(mat_ops_data_ptr, tag) {
22 const int default_tag = MatOpsTagsRegistry::setTagName("MetaPiolaResponse");
23 metaPiolaResponses.emplace(
24 default_tag,
25 boost::static_pointer_cast<MatPiolaResponse>(
26 createMatOpsPhysicalEquationsPtr<ELASTICITY::NEOHOOKEAN, modelType>(
27 this->matOpsDataPtr, default_tag)));
28
29 if constexpr (DIM == 3) {
30 const int mooney_tag =
31 MatOpsTagsRegistry::setTagName("MooneyRivlinWriggersEq63");
32 metaPiolaResponses.emplace(
33 mooney_tag, boost::static_pointer_cast<MatPiolaResponse>(
35 ELASTICITY::MOONEYRIVLINWRIGGERSEQ63, MODEL_3D>(
36 this->matOpsDataPtr, mooney_tag)));
37 }
38
39 const int stvenant_tag =
40 MatOpsTagsRegistry::setTagName("StVenantKirchhoff");
41 metaPiolaResponses.emplace(
42 stvenant_tag,
43 boost::static_pointer_cast<MatPiolaResponse>(
44 createMatOpsPhysicalEquationsPtr<ELASTICITY::STVENANTKIRCHHOFF,
46 stvenant_tag)));
47 }
@ MODEL_3D
Definition MatOps.hpp:209
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
MatPiolaResponseImpl< DIM > A
std::map< int, ResponsePtr > metaPiolaResponses
static int setTagName(std::string name, int tag=-1)
Definition MatOps.cpp:29
boost::shared_ptr< MatOpsData > matOpsDataPtr
Definition MatOps.hpp:176

Member Function Documentation

◆ evaluateDerivatives()

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
MoFEMErrorCode MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::evaluateDerivatives ( int  tag,
EntityHandle  entity,
int  gg 
)
inlineoverridevirtual

Reimplemented from MatOps::PhysicalEquations.

Definition at line 130 of file MatMetaPiolaResponse.cpp.

131 {
132 return metaPiolaResponses.at(tag)->evaluateDerivatives(tag, entity, gg);
133 }

◆ evaluateVariable()

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
MoFEMErrorCode MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::evaluateVariable ( int  tag,
EntityHandle  entity,
int  gg 
)
inlineoverridevirtual

Reimplemented from MatOps::PhysicalEquations.

Definition at line 125 of file MatMetaPiolaResponse.cpp.

126 {
127 return metaPiolaResponses.at(tag)->evaluateVariable(tag, entity, gg);
128 }

◆ getMetaPiolaResponseMap()

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
std::map< int, ResponsePtr > & MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::getMetaPiolaResponseMap ( )
inline

Definition at line 139 of file MatMetaPiolaResponse.cpp.

139 {
140 return metaPiolaResponses;
141 }

◆ getOptions()

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
MoFEMErrorCode MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::getOptions ( MoFEM::Interface *  m_field_ptr = nullptr)
inlineoverridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 49 of file MatMetaPiolaResponse.cpp.

49 {
51
52 // Activate UMAT only for an explicit library or material block.
53 char umat_library[PETSC_MAX_PATH_LEN] = "";
54 CHKERR PetscOptionsGetString(PETSC_NULLPTR, PETSC_NULLPTR, "-umat_library",
55 umat_library, sizeof(umat_library),
56 PETSC_NULLPTR);
57
58 if (umat_library[0] ||
59 (m_field_ptr &&
60 !m_field_ptr->getInterface<MeshsetsManager>()
61 ->getCubitMeshsetPtr(std::regex("MAT_UMAT(.*)"))
62 .empty())) {
63 const int umat_tag = MatOpsTagsRegistry::setTagName("Umat");
64 metaPiolaResponses.insert(
65 {umat_tag, boost::static_pointer_cast<MatPiolaResponse>(
66 createMatOpsPhysicalEquationsPtr<UMAT, modelType>(
67 this->matOpsDataPtr, umat_tag))});
68 }
69
70 for (auto &m : metaPiolaResponses) {
71 CHKERR m.second->getOptions(m_field_ptr);
72 }
73 A::tagVsRangePtr = boost::make_shared<std::map<int, Range>>();
74 for (const auto &m : metaPiolaResponses) {
75 A::tagVsRangePtr->insert(
76 {m.first, Range()}); // Initialize with empty range
77 for (auto &rp : m.second->paramVecByRange) {
78 A::tagVsRangePtr->at(m.first).merge(
79 rp.first); // Merge ranges for the same tag
80 }
81 }
83 }
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
PetscErrorCode PetscOptionsGetString(PetscOptions *, const char pre[], const char name[], char str[], size_t size, PetscBool *set)
FTensor::Index< 'm', 3 > m
std::vector< std::pair< Range, std::vector< double > > > paramVecByRange
Definition MatOps.hpp:174
boost::shared_ptr< std::map< int, Range > > tagVsRangePtr
Definition MatOps.hpp:173
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.

◆ recordTape()

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
MoFEMErrorCode MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::recordTape ( )
inlineoverridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 117 of file MatMetaPiolaResponse.cpp.

117 {
119 for (auto &m : metaPiolaResponses) {
120 CHKERR m.second->recordTape();
121 }
123 }

◆ setParams()

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
MoFEMErrorCode MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::setParams ( FEMethod *  fe_ptr,
int  gg 
)
inlineoverridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 85 of file MatMetaPiolaResponse.cpp.

85 {
87 const auto ent = fe_ptr->getFEEntityHandle();
88
89 bool has_ranges = false;
90 if (A::tagVsRangePtr) {
91 for (const auto &tag_range : *A::tagVsRangePtr) {
92 has_ranges = has_ranges || !tag_range.second.empty();
93 }
94 }
95
96 if (!has_ranges) {
97 for (auto &m : metaPiolaResponses) {
98 CHKERR m.second->setParams(fe_ptr, gg);
99 }
101 }
102
103 for (auto &m : metaPiolaResponses) {
104 if (A::tagVsRangePtr->at(m.first).find(ent) !=
105 A::tagVsRangePtr->at(m.first).end()) {
106 CHKERR m.second->setParams(fe_ptr, gg);
108 }
109 }
110
111 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
112 "Meta Piola-response parameters not found for entity %lu",
113 static_cast<unsigned long>(ent));
115 }
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31

◆ updateState()

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
MoFEMErrorCode MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::updateState ( int  tag,
EntityHandle  entity,
int  gg 
)
inlineoverridevirtual

Reimplemented from MatOps::PhysicalEquations.

Definition at line 135 of file MatMetaPiolaResponse.cpp.

135 {
136 return metaPiolaResponses.at(tag)->updateState(tag, entity, gg);
137 }

Member Data Documentation

◆ metaPiolaResponses

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
std::map<int, ResponsePtr> MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::metaPiolaResponses
protected

Definition at line 146 of file MatMetaPiolaResponse.cpp.

◆ modelType

template<int DIM, int MODEL_TYPE = (DIM == 3) ? MatOps::MODEL_3D : MatOps::MODEL_2D_PLANE_STRAIN>
constexpr int MatOps::MatMetaPiolaResponse< DIM, MODEL_TYPE >::modelType = MODEL_TYPE
inlinestaticconstexprprotected

Definition at line 144 of file MatMetaPiolaResponse.cpp.


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