25 char umat_library[PETSC_MAX_PATH_LEN] =
"";
27 "-umat_library", umat_library,
28 sizeof(umat_library), PETSC_NULLPTR);
30 if (umat_library[0] ||
35 metaElasticAtPts.insert(
37 createMatOpsPhysicalEquationsPtr<UMAT, modelType>(
42 for (
auto &
m : metaElasticAtPts) {
43 CHKERR m.second->getOptions(m_field_ptr);
45 A::tagVsRangePtr = boost::make_shared<std::map<int, Range>>();
46 for (
const auto &
m : metaElasticAtPts) {
47 A::tagVsRangePtr->insert(
49 for (
auto &rp :
m.second->paramVecByRange) {
50 A::tagVsRangePtr->at(
m.first).merge(
61 bool has_ranges =
false;
62 if (A::tagVsRangePtr) {
63 for (
const auto &tag_range : *A::tagVsRangePtr) {
64 has_ranges = has_ranges || !tag_range.second.empty();
69 for (
auto &
m : metaElasticAtPts) {
70 CHKERR m.second->setParams(fe_ptr, gg);
75 for (
auto &
m : metaElasticAtPts) {
76 if (A::tagVsRangePtr->at(
m.first).find(ent) !=
77 A::tagVsRangePtr->at(
m.first).end()) {
78 CHKERR m.second->setParams(fe_ptr, gg);
84 "Meta elastic material parameters not found for entity %lu",
85 static_cast<unsigned long>(ent));
91 for (
auto &
m : metaElasticAtPts) {
98 return metaElasticAtPts.at(tag)->evaluateVariable(tag, entity, gg);
102 return metaElasticAtPts.at(tag)->evaluateDerivatives(tag, entity, gg);
106 return metaElasticAtPts.at(tag)->updateState(tag, entity, gg);
110 return metaElasticAtPts;
114 static inline constexpr int modelType = MODEL_TYPE;
116 std::map<int, boost::shared_ptr<PhysicalEquations>> metaElasticAtPts = {
122 createMatOpsPhysicalEquationsPtr<ELASTICITY::NEOHOOKEAN, modelType>(
134 "MooneyRivlinWriggersEq63"))
151std::map<int, boost::shared_ptr<PhysicalEquations>> &
153 auto meta_elastic_3d_ptr =
154 boost::dynamic_pointer_cast<MatMetaElastic<3>>(meta_ptr);
155 if (meta_elastic_3d_ptr) {
156 return meta_elastic_3d_ptr->getMetaElasticMap();
158 auto meta_elastic_2d_ptr =
159 boost::dynamic_pointer_cast<MatMetaElastic<2>>(meta_ptr);
160 if (meta_elastic_2d_ptr) {
161 return meta_elastic_2d_ptr->getMetaElasticMap();
163 auto meta_elastic_axisymmetric_ptr = boost::dynamic_pointer_cast<
165 if (meta_elastic_axisymmetric_ptr) {
170 "Provided PhysicalEquations pointer is not of type MatMetaElastic");
171 static std::map<int, boost::shared_ptr<PhysicalEquations>> empty_map;
176boost::shared_ptr<PhysicalEquations>
178 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag) {
179 return boost::make_shared<MatMetaElastic<3>>(mat_ops_data_ptr, tag);
183boost::shared_ptr<PhysicalEquations>
185 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag) {
186 return boost::make_shared<MatMetaElastic<2>>(mat_ops_data_ptr, tag);
190boost::shared_ptr<PhysicalEquations>
192 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag) {
193 return boost::make_shared<MatMetaElastic<3, MODEL_AXISYMMETRIC>>(
194 mat_ops_data_ptr, tag);
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_OPERATION_UNSUCCESSFUL
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
MoFEMErrorCode getCubitMeshsetPtr(const int ms_id, const CubitBCType cubit_bc_type, const CubitMeshSets **cubit_meshset_ptr) const
get cubit meshset
std::map< int, boost::shared_ptr< PhysicalEquations > > & getMetaElasticMap(boost::shared_ptr< PhysicalEquations > meta_ptr)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< ELASTICITY::META, MODEL_AXISYMMETRIC >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< ELASTICITY::META, MODEL_2D_PLANE_STRAIN >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< ELASTICITY::META, MODEL_3D >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
PetscErrorCode PetscOptionsGetString(PetscOptions *, const char pre[], const char name[], char str[], size_t size, PetscBool *set)
FTensor::Index< 'm', 3 > m
Deprecated interface functions.
Structure for user loop methods on finite elements.
EntityHandle getFEEntityHandle() const
Get the entity handle of the current finite element.
Interface for managing meshsets containing materials and boundary conditions.