v0.16.0
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Friends | List of all members
MatOps::MatUmatImpl< DIM, MODEL_TYPE > Struct Template Reference

#include "src/materials/MatUmatImpl.hpp"

Inheritance diagram for MatOps::MatUmatImpl< DIM, MODEL_TYPE >:
[legend]
Collaboration diagram for MatOps::MatUmatImpl< DIM, MODEL_TYPE >:
[legend]

Public Types

using A = PhysicalEquations
 
using UmatInterfaceType = MoFEM::UmatInterface< MODEL_TYPE >
 
- Public Types inherited from MatOps::PhysicalEquations
using HookFunction = std::function< MoFEMErrorCode(boost::shared_ptr< MatOpsData >, int, EntityHandle, int)>
 

Public Member Functions

ForcesAndSourcesCore::UserDataOperatorcreateOp (boost::shared_ptr< PhysicalEquations > physical_ptr, bool eval_stress, bool eval_tangent, bool update) override
 
MoFEMErrorCode getOptions (MoFEM::Interface *m_field_ptr=nullptr) override
 
MoFEMErrorCode setParams (FEMethod *fe_ptr, int gg) override
 
MoFEMErrorCode recordTape () override
 
MoFEMErrorCode evaluateVariable (int, EntityHandle entity, int gg) override
 
MoFEMErrorCode evaluateDerivatives (int, EntityHandle entity, int gg) override
 
MoFEMErrorCode updateState (int, EntityHandle entity, int gg) override
 
 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)
 

Static Public Member Functions

static std::string getStateVariableTagName (const int index)
 

Static Public Attributes

static constexpr auto DFGRD0_TAG_NAME = "UMAT_DFGRD0"
 
static constexpr auto STRESS_TAG_NAME = "UMAT_STRESS"
 
static constexpr auto STATEV_TAG_NAME = "UMAT_STATEV"
 
static bool useDeformationGradient
 

Protected Member Functions

virtual MoFEMErrorCode bindAuxiliaryStateTags (MoFEM::Interface &m_field)
 
virtual MoFEMErrorCode recordAuxiliaryMatOpsData ()
 
virtual MoFEMErrorCode loadCoordinates (EntityHandle entity, int gg)
 
virtual MoFEMErrorCode loadPredef (EntityHandle entity, int gg)
 
MoFEMErrorCode loadPreviousDeformationGradient (EntityHandle entity, int gg)
 
MoFEMErrorCode storeCurrentDeformationGradient (EntityHandle entity, int gg)
 
MoFEMErrorCode loadPreviousStress (EntityHandle entity, int gg)
 
MoFEMErrorCode loadPreviousStateVariables (EntityHandle entity, int gg)
 
MoFEMErrorCode storeCurrentStress (EntityHandle entity, int gg)
 
MoFEMErrorCode storeCurrentStateVariables (EntityHandle entity, int gg)
 

Protected Attributes

MoFEM::InterfacemField = nullptr
 
std::unique_ptr< UmatInterfaceTypeumatInterfacePtr
 
std::string libraryPath = "./umat.so"
 
std::string materialName = "UMAT"
 
StrainType strainType = StrainType::SMALL
 
PetscInt currentTimeStep = 0
 
PetscReal currentTime = 0
 
PetscReal currentTimeIncrement = 0
 
double youngModulus = 1.0
 
double poissonRatio = 0.3
 
int numberStateVariables = 1
 
int numberMaterialProperties = 2
 
std::vector< doubledefaultMaterialParameters = {youngModulus, poissonRatio}
 
std::vector< doublecurrentMaterialParameters = defaultMaterialParameters
 
std::vector< doublestateVar = std::vector<double>(numberStateVariables, 0.0)
 
std::unique_ptr< StrainHandler< DIM, MODEL_TYPE > > strainHandler
 

Friends

struct SmallStrainHandler< DIM, MODEL_TYPE >
 
struct HenckyStrainHandler< DIM, MODEL_TYPE >
 
struct FiniteStrainHandler< DIM, 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< MatOpsDatamatOpsDataPtr
 

Detailed Description

template<int DIM, int MODEL_TYPE>
struct MatOps::MatUmatImpl< DIM, MODEL_TYPE >

Definition at line 179 of file MatUmatImpl.hpp.

Member Typedef Documentation

◆ A

template<int DIM, int MODEL_TYPE>
using MatOps::MatUmatImpl< DIM, MODEL_TYPE >::A = PhysicalEquations

Definition at line 181 of file MatUmatImpl.hpp.

◆ UmatInterfaceType

template<int DIM, int MODEL_TYPE>
using MatOps::MatUmatImpl< DIM, MODEL_TYPE >::UmatInterfaceType = MoFEM::UmatInterface<MODEL_TYPE>

Definition at line 182 of file MatUmatImpl.hpp.

Member Function Documentation

◆ bindAuxiliaryStateTags()

template<int DIM, int MODEL_TYPE>
virtual MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::bindAuxiliaryStateTags ( MoFEM::Interface m_field)
inlineprotectedvirtual

Definition at line 396 of file MatUmatImpl.hpp.

396 {
398 (void)m_field;
400 }
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...

◆ createOp()

template<int DIM, int MODEL_TYPE>
template ForcesAndSourcesCore::UserDataOperator * MatOps::MatUmatImpl< DIM, MODEL_TYPE >::createOp ( boost::shared_ptr< PhysicalEquations physical_ptr,
bool  eval_stress,
bool  eval_tangent,
bool  update 
)
overridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 21 of file MatUmat.cpp.

23 {
24 using EleOp = ForcesAndSourcesCore::UserDataOperator;
25 return createOpImpl<DIM, EleOp>(physical_ptr, eval_stress, eval_tangent,
26 update);
27}

◆ evaluateDerivatives()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::evaluateDerivatives ( int  ,
EntityHandle  entity,
int  gg 
)
inlineoverridevirtual

Reimplemented from MatOps::PhysicalEquations.

Definition at line 378 of file MatUmatImpl.hpp.

379 {
381 CHKERR strainHandler->runUmat(*this, entity, gg);
382 CHKERR strainHandler->convertTangent(*this, A::matOpsDataPtr);
384 }
#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.
std::unique_ptr< StrainHandler< DIM, MODEL_TYPE > > strainHandler
boost::shared_ptr< MatOpsData > matOpsDataPtr
Definition MatOps.hpp:164

◆ evaluateVariable()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::evaluateVariable ( int  ,
EntityHandle  entity,
int  gg 
)
inlineoverridevirtual

Reimplemented from MatOps::PhysicalEquations.

Definition at line 371 of file MatUmatImpl.hpp.

371 {
373 CHKERR strainHandler->runUmat(*this, entity, gg);
374 CHKERR strainHandler->convertStress(*this, A::matOpsDataPtr);
376 }

◆ getOptions()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::getOptions ( MoFEM::Interface m_field_ptr = nullptr)
inlineoverridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 198 of file MatUmatImpl.hpp.

198 {
200
201 mField = m_field_ptr;
202
203 MOFEM_LOG_CHANNEL("WORLD");
204
205 char umat_library[PETSC_MAX_PATH_LEN] = "./umat.so";
206 char umat_name[80] = "UMAT";
207 PetscInt nstatev = 0;
208 PetscInt nprops = 2;
209 const char *list_strain_type[] = {"small", "hencky", "finite"};
210 PetscInt choice_strain = StrainType::SMALL;
211 PetscOptionsBegin(PETSC_COMM_WORLD, "umat_", "", "none");
212 CHKERR PetscOptionsString("-library", "Path to UMAT shared library", "",
213 umat_library, umat_library, sizeof(umat_library),
214 PETSC_NULLPTR);
215 CHKERR PetscOptionsString("-name", "UMAT material name", "", umat_name,
216 umat_name, sizeof(umat_name), PETSC_NULLPTR);
217 CHKERR PetscOptionsInt("-nstatev", "Number of UMAT state variables", "",
218 nstatev, &nstatev, PETSC_NULLPTR);
219 CHKERR PetscOptionsInt("-nprops", "Number of UMAT material properties", "",
220 nprops, &nprops, PETSC_NULLPTR);
221 CHKERR PetscOptionsScalar("-young_modulus", "Default first property", "",
222 youngModulus, &youngModulus, PETSC_NULLPTR);
223 CHKERR PetscOptionsScalar("-poisson_ratio", "Default second property", "",
224 poissonRatio, &poissonRatio, PETSC_NULLPTR);
225 CHKERR PetscOptionsEList(
226 "-strain_type", "Strain type", "", list_strain_type, 3,
227 list_strain_type[choice_strain], &choice_strain, PETSC_NULLPTR);
228 PetscOptionsEnd();
229
230 strainType = static_cast<StrainType>(choice_strain);
231
232 switch (strainType) {
233 case SMALL:
234 strainHandler = std::make_unique<SmallStrainHandler<DIM, MODEL_TYPE>>();
235 break;
236 case HENCKY:
237 strainHandler = std::make_unique<HenckyStrainHandler<DIM, MODEL_TYPE>>();
238 break;
239 case FINITE:
240 strainHandler = std::make_unique<FiniteStrainHandler<DIM, MODEL_TYPE>>();
241 break;
242 default:
243 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
244 "Unsupported UMAT strain type");
245 }
246
247 if (nprops <= 0) {
248 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
249 "UMAT requires a positive number of properties");
250 }
251
252 if (nstatev < 0) {
253 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
254 "UMAT requires a non-negative number of state variables");
255 }
256
257 numberStateVariables = static_cast<int>(nstatev);
258 stateVar.resize(numberStateVariables, 0.0);
259 numberMaterialProperties = static_cast<int>(nprops);
260 materialName = umat_name;
261 libraryPath = umat_library;
262
268
269 MOFEM_TAG_AND_LOG("WORLD", Sev::inform, "Default Umat parameters:")
270 << " umat_library = " << libraryPath << " name = " << materialName
271 << " umat_nstatev = " << numberStateVariables
272 << " umat_nprops = " << numberMaterialProperties;
273
274 std::string block_name = "MAT_UMAT";
275 for (auto &m :
276 m_field_ptr->getInterface<MeshsetsManager>()->getCubitMeshsetPtr(
277 std::regex((boost::format("%s(.*)") % block_name).str()))) {
278 std::vector<double> block_data;
279 CHKERR m->getAttributes(block_data);
280 if ((int)block_data.size() < numberMaterialProperties) {
281 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
282 "MAT_UMAT block requires at least %d attributes", nprops);
283 }
284
285 auto get_block_ents = [&]() {
286 Range ents;
287 CHK_MOAB_THROW(m_field_ptr->get_moab().get_entities_by_handle(
288 m->meshset, ents, true),
289 "can not get block entities");
290 return ents;
291 };
292
293 A::paramVecByRange.push_back(
294 {get_block_ents(),
295 std::vector<double>(block_data.begin(),
296 block_data.begin() + numberMaterialProperties)});
297
298 std::ostringstream properties_stream;
299 properties_stream << "[";
300 for (int ii = 0; ii != numberMaterialProperties; ++ii) {
301 if (ii)
302 properties_stream << ", ";
303 properties_stream << block_data[ii];
304 }
305 properties_stream << "]";
306
307 MOFEM_TAG_AND_LOG("WORLD", Sev::inform, "MatBlock for Umat")
308 << *m << " properties = " << properties_stream.str();
309 }
310
311 umatInterfacePtr = std::make_unique<UmatInterfaceType>(
314
315 if (m_field_ptr) {
316 CHKERR A::matOpsDataPtr->bindStateTag(*m_field_ptr, DFGRD0_TAG_NAME,
317 DIM * DIM);
318 CHKERR A::matOpsDataPtr->bindStateTag(*m_field_ptr, STRESS_TAG_NAME,
320 if (numberStateVariables > 0) {
321 for (int ii = 0; ii != numberStateVariables; ++ii) {
322 CHKERR A::matOpsDataPtr->bindStateTag(*m_field_ptr,
324 }
325 }
326 CHKERR bindAuxiliaryStateTags(*m_field_ptr);
327 CHKERR A::matOpsDataPtr->setupStateData();
328 }
329
331 }
#define MOFEM_TAG_AND_LOG(channel, severity, tag)
Tag and log in channel.
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
FTensor::Index< 'm', 3 > m
static constexpr auto STRESS_TAG_NAME
static std::string getStateVariableTagName(const int index)
std::vector< double > defaultMaterialParameters
std::vector< double > currentMaterialParameters
std::unique_ptr< UmatInterfaceType > umatInterfacePtr
std::string materialName
static constexpr auto DFGRD0_TAG_NAME
std::string libraryPath
virtual MoFEMErrorCode bindAuxiliaryStateTags(MoFEM::Interface &m_field)
MoFEM::Interface * mField
std::vector< double > stateVar
std::vector< std::pair< Range, std::vector< double > > > paramVecByRange
Definition MatOps.hpp:162
virtual moab::Interface & get_moab()=0
static constexpr int NTENS

◆ getStateVariableTagName()

template<int DIM, int MODEL_TYPE>
static std::string MatOps::MatUmatImpl< DIM, MODEL_TYPE >::getStateVariableTagName ( const int  index)
inlinestatic

Definition at line 187 of file MatUmatImpl.hpp.

187 {
188 return (boost::format("%s_%d") % STATEV_TAG_NAME % index).str();
189 }
static constexpr auto STATEV_TAG_NAME

◆ loadCoordinates()

template<int DIM, int MODEL_TYPE>
virtual MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::loadCoordinates ( EntityHandle  entity,
int  gg 
)
inlineprotectedvirtual

Definition at line 409 of file MatUmatImpl.hpp.

409 {
411 (void)entity;
412 (void)gg;
413 for (int dd = 0; dd != 3; ++dd)
414 umatInterfacePtr->coords[dd] = 0.0;
416 }
const Tensor2_symmetric_Expr< const ddTensor0< T, Dim, i, j >, typename promote< T, double >::V, Dim, i, j > dd(const Tensor0< T * > &a, const Index< i, Dim > index1, const Index< j, Dim > index2, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)
Definition ddTensor0.hpp:33

◆ loadPredef()

template<int DIM, int MODEL_TYPE>
virtual MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::loadPredef ( EntityHandle  entity,
int  gg 
)
inlineprotectedvirtual

Definition at line 418 of file MatUmatImpl.hpp.

418 {
420 (void)entity;
421 (void)gg;
422 if (umatInterfacePtr->predef.empty()) {
423 umatInterfacePtr->predef.push_back(0.0);
424 }
425 if (umatInterfacePtr->dpred.empty()) {
426 umatInterfacePtr->dpred.push_back(0.0);
427 }
428 std::fill(umatInterfacePtr->predef.begin(), umatInterfacePtr->predef.end(),
429 0.0);
430 std::fill(umatInterfacePtr->dpred.begin(), umatInterfacePtr->dpred.end(),
431 0.0);
433 }

◆ loadPreviousDeformationGradient()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::loadPreviousDeformationGradient ( EntityHandle  entity,
int  gg 
)
inlineprotected

Definition at line 435 of file MatUmatImpl.hpp.

435 {
437
438 CHKERR umatInterfacePtr->setIdentityDeformationGradient();
439
440 auto state_ptr =
441 A::matOpsDataPtr->getStateDataPtr(DFGRD0_TAG_NAME, entity, gg);
442 bool has_stored_gradient = false;
443 for (int row = 0; row != DIM; ++row) {
444 for (int col = 0; col != DIM; ++col) {
445 const double value = (*state_ptr)(row * DIM + col, 0);
446 umatInterfacePtr->dfgrd0[row + 3 * col] = value;
447 has_stored_gradient = has_stored_gradient || std::abs(value) > 0;
448 }
449 }
450
451 if (!has_stored_gradient) {
452 CHKERR umatInterfacePtr->setIdentityDeformationGradient();
453 }
454
456 }

◆ loadPreviousStateVariables()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::loadPreviousStateVariables ( EntityHandle  entity,
int  gg 
)
inlineprotected

Definition at line 485 of file MatUmatImpl.hpp.

485 {
487
488 umatInterfacePtr->statev.assign(numberStateVariables, -1);
491 }
492
493 for (int ii = 0; ii != numberStateVariables; ++ii) {
494 auto state_ptr = A::matOpsDataPtr->getStateDataPtr(
495 getStateVariableTagName(ii), entity, gg);
496 umatInterfacePtr->statev[ii] = (*state_ptr)(0, 0);
497 }
498
500 }

◆ loadPreviousStress()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::loadPreviousStress ( EntityHandle  entity,
int  gg 
)
inlineprotected

Definition at line 473 of file MatUmatImpl.hpp.

473 {
475
476 auto state_ptr =
477 A::matOpsDataPtr->getStateDataPtr(STRESS_TAG_NAME, entity, gg);
478 for (int ii = 0; ii != UmatInterfaceType::NTENS; ++ii) {
479 umatInterfacePtr->stress[ii] = (*state_ptr)(ii, 0);
480 }
481
483 }

◆ PhysicalEquations() [1/2]

template<int DIM, int MODEL_TYPE>
MatOps::PhysicalEquations::PhysicalEquations ( )
delete

◆ PhysicalEquations() [2/2]

template<int DIM, int MODEL_TYPE>
MatOps::PhysicalEquations::PhysicalEquations ( boost::shared_ptr< MatOpsData mat_ops_data_ptr,
int  tag,
boost::shared_ptr< std::map< int, Range > >  tag_vs_range_ptr = nullptr 
)
inline

Definition at line 114 of file MatOps.hpp.

117 : tAg(tag), tagVsRangePtr(tag_vs_range_ptr),
118 matOpsDataPtr(mat_ops_data_ptr) {}
boost::shared_ptr< std::map< int, Range > > tagVsRangePtr
Definition MatOps.hpp:161

◆ recordAuxiliaryMatOpsData()

template<int DIM, int MODEL_TYPE>
virtual MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::recordAuxiliaryMatOpsData ( )
inlineprotectedvirtual

Definition at line 402 of file MatUmatImpl.hpp.

◆ recordTape()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::recordTape ( )
inlineoverridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 350 of file MatUmatImpl.hpp.

350 {
352
353 A::matOpsDataPtr->insertCommonData("grad", MatrixDouble());
354 A::matOpsDataPtr->insertCommonData("P", MatrixDouble());
355 A::matOpsDataPtr->insertCommonData("P_dF", MatrixDouble());
356
357 A::matOpsDataPtr->insertActiveData("F", MatrixDouble());
358 A::matOpsDataPtr->insertDependentData("P", MatrixDouble());
359 A::matOpsDataPtr->insertDependentDerivativesData("P_dF", MatrixDouble());
360
361 A::matOpsDataPtr->getActiveDataPtr("F")->resize(DIM, DIM, false);
362 A::matOpsDataPtr->getDependentDataPtr("P")->resize(DIM, DIM, false);
363 A::matOpsDataPtr->getDependentDerivativesDataPtr("P_dF")->resize(
364 DIM * DIM, DIM * DIM, false);
365
367
369 }
UBlasMatrix< double > MatrixDouble
Definition Types.hpp:77
virtual MoFEMErrorCode recordAuxiliaryMatOpsData()

◆ setParams()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::setParams ( FEMethod fe_ptr,
int  gg 
)
inlineoverridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 333 of file MatUmatImpl.hpp.

333 {
335 (void)gg;
336 currentTimeStep = fe_ptr->ts_step;
337 currentTime = fe_ptr->ts_t;
338 currentTimeIncrement = fe_ptr->ts_dt;
339 const auto ent = fe_ptr->getFEEntityHandle();
341 for (auto &[range, param_vec] : A::paramVecByRange) {
342 if (range.find(ent) != range.end()) {
343 currentMaterialParameters = param_vec;
344 break;
345 }
346 }
348 }
PhysicalEquations A
PetscReal currentTimeIncrement

◆ storeCurrentDeformationGradient()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::storeCurrentDeformationGradient ( EntityHandle  entity,
int  gg 
)
inlineprotected

Definition at line 458 of file MatUmatImpl.hpp.

458 {
460
461 auto state_ptr =
462 A::matOpsDataPtr->getStateDataPtr(DFGRD0_TAG_NAME, entity, gg);
463 for (int row = 0; row != DIM; ++row) {
464 for (int col = 0; col != DIM; ++col) {
465 (*state_ptr)(row *DIM + col, 0) =
466 umatInterfacePtr->dfgrd1[row + 3 * col];
467 }
468 }
469
471 }

◆ storeCurrentStateVariables()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::storeCurrentStateVariables ( EntityHandle  entity,
int  gg 
)
inlineprotected

Definition at line 514 of file MatUmatImpl.hpp.

514 {
516
519 }
520
521 for (int ii = 0; ii != numberStateVariables; ++ii) {
522 auto state_ptr = A::matOpsDataPtr->getStateDataPtr(
523 getStateVariableTagName(ii), entity, gg);
524 (*state_ptr)(0, 0) = umatInterfacePtr->statev[ii];
525 }
526
528 }

◆ storeCurrentStress()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::storeCurrentStress ( EntityHandle  entity,
int  gg 
)
inlineprotected

Definition at line 502 of file MatUmatImpl.hpp.

502 {
504
505 auto state_ptr =
506 A::matOpsDataPtr->getStateDataPtr(STRESS_TAG_NAME, entity, gg);
507 for (int ii = 0; ii != UmatInterfaceType::NTENS; ++ii) {
508 (*state_ptr)(ii, 0) = umatInterfacePtr->stress[ii];
509 }
510
512 }

◆ updateState()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::MatUmatImpl< DIM, MODEL_TYPE >::updateState ( int  ,
EntityHandle  entity,
int  gg 
)
inlineoverridevirtual

Reimplemented from MatOps::PhysicalEquations.

Definition at line 386 of file MatUmatImpl.hpp.

386 {
388 CHKERR strainHandler->runUmat(*this, entity, gg);
390 CHKERR storeCurrentStress(entity, gg);
393 }
MoFEMErrorCode storeCurrentDeformationGradient(EntityHandle entity, int gg)
MoFEMErrorCode storeCurrentStress(EntityHandle entity, int gg)
MoFEMErrorCode storeCurrentStateVariables(EntityHandle entity, int gg)

Friends And Related Symbol Documentation

◆ FiniteStrainHandler< DIM, MODEL_TYPE >

template<int DIM, int MODEL_TYPE>
friend struct FiniteStrainHandler< DIM, MODEL_TYPE >
friend

Definition at line 544 of file MatUmatImpl.hpp.

◆ HenckyStrainHandler< DIM, MODEL_TYPE >

template<int DIM, int MODEL_TYPE>
friend struct HenckyStrainHandler< DIM, MODEL_TYPE >
friend

Definition at line 544 of file MatUmatImpl.hpp.

◆ SmallStrainHandler< DIM, MODEL_TYPE >

template<int DIM, int MODEL_TYPE>
friend struct SmallStrainHandler< DIM, MODEL_TYPE >
friend

Definition at line 544 of file MatUmatImpl.hpp.

Member Data Documentation

◆ currentMaterialParameters

template<int DIM, int MODEL_TYPE>
std::vector<double> MatOps::MatUmatImpl< DIM, MODEL_TYPE >::currentMaterialParameters = defaultMaterialParameters
protected

Definition at line 543 of file MatUmatImpl.hpp.

◆ currentTime

template<int DIM, int MODEL_TYPE>
PetscReal MatOps::MatUmatImpl< DIM, MODEL_TYPE >::currentTime = 0
protected

Definition at line 536 of file MatUmatImpl.hpp.

◆ currentTimeIncrement

template<int DIM, int MODEL_TYPE>
PetscReal MatOps::MatUmatImpl< DIM, MODEL_TYPE >::currentTimeIncrement = 0
protected

Definition at line 537 of file MatUmatImpl.hpp.

◆ currentTimeStep

template<int DIM, int MODEL_TYPE>
PetscInt MatOps::MatUmatImpl< DIM, MODEL_TYPE >::currentTimeStep = 0
protected

Definition at line 535 of file MatUmatImpl.hpp.

◆ defaultMaterialParameters

template<int DIM, int MODEL_TYPE>
std::vector<double> MatOps::MatUmatImpl< DIM, MODEL_TYPE >::defaultMaterialParameters = {youngModulus, poissonRatio}
protected

Definition at line 542 of file MatUmatImpl.hpp.

◆ DFGRD0_TAG_NAME

template<int DIM, int MODEL_TYPE>
constexpr auto MatOps::MatUmatImpl< DIM, MODEL_TYPE >::DFGRD0_TAG_NAME = "UMAT_DFGRD0"
staticconstexpr

Definition at line 183 of file MatUmatImpl.hpp.

◆ libraryPath

template<int DIM, int MODEL_TYPE>
std::string MatOps::MatUmatImpl< DIM, MODEL_TYPE >::libraryPath = "./umat.so"
protected

Definition at line 532 of file MatUmatImpl.hpp.

◆ materialName

template<int DIM, int MODEL_TYPE>
std::string MatOps::MatUmatImpl< DIM, MODEL_TYPE >::materialName = "UMAT"
protected

Definition at line 533 of file MatUmatImpl.hpp.

◆ mField

template<int DIM, int MODEL_TYPE>
MoFEM::Interface* MatOps::MatUmatImpl< DIM, MODEL_TYPE >::mField = nullptr
protected

Definition at line 530 of file MatUmatImpl.hpp.

◆ numberMaterialProperties

template<int DIM, int MODEL_TYPE>
int MatOps::MatUmatImpl< DIM, MODEL_TYPE >::numberMaterialProperties = 2
protected

Definition at line 541 of file MatUmatImpl.hpp.

◆ numberStateVariables

template<int DIM, int MODEL_TYPE>
int MatOps::MatUmatImpl< DIM, MODEL_TYPE >::numberStateVariables = 1
protected

Definition at line 540 of file MatUmatImpl.hpp.

◆ poissonRatio

template<int DIM, int MODEL_TYPE>
double MatOps::MatUmatImpl< DIM, MODEL_TYPE >::poissonRatio = 0.3
protected

Definition at line 539 of file MatUmatImpl.hpp.

◆ STATEV_TAG_NAME

template<int DIM, int MODEL_TYPE>
constexpr auto MatOps::MatUmatImpl< DIM, MODEL_TYPE >::STATEV_TAG_NAME = "UMAT_STATEV"
staticconstexpr

Definition at line 185 of file MatUmatImpl.hpp.

◆ stateVar

template<int DIM, int MODEL_TYPE>
std::vector<double> MatOps::MatUmatImpl< DIM, MODEL_TYPE >::stateVar = std::vector<double>(numberStateVariables, 0.0)
protected

Definition at line 544 of file MatUmatImpl.hpp.

◆ strainHandler

template<int DIM, int MODEL_TYPE>
std::unique_ptr<StrainHandler<DIM, MODEL_TYPE> > MatOps::MatUmatImpl< DIM, MODEL_TYPE >::strainHandler
protected

Definition at line 548 of file MatUmatImpl.hpp.

◆ strainType

template<int DIM, int MODEL_TYPE>
StrainType MatOps::MatUmatImpl< DIM, MODEL_TYPE >::strainType = StrainType::SMALL
protected

Definition at line 534 of file MatUmatImpl.hpp.

◆ STRESS_TAG_NAME

template<int DIM, int MODEL_TYPE>
constexpr auto MatOps::MatUmatImpl< DIM, MODEL_TYPE >::STRESS_TAG_NAME = "UMAT_STRESS"
staticconstexpr

Definition at line 184 of file MatUmatImpl.hpp.

◆ umatInterfacePtr

template<int DIM, int MODEL_TYPE>
std::unique_ptr<UmatInterfaceType> MatOps::MatUmatImpl< DIM, MODEL_TYPE >::umatInterfacePtr
protected

Definition at line 531 of file MatUmatImpl.hpp.

◆ useDeformationGradient

template<int DIM, int MODEL_TYPE>
bool MatOps::MatUmatImpl< DIM, MODEL_TYPE >::useDeformationGradient
inlinestatic
Initial value:
=
false

Definition at line 191 of file MatUmatImpl.hpp.

◆ youngModulus

template<int DIM, int MODEL_TYPE>
double MatOps::MatUmatImpl< DIM, MODEL_TYPE >::youngModulus = 1.0
protected

Definition at line 538 of file MatUmatImpl.hpp.


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