v0.16.3
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 char 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::vector< std::string > vStateVariableTagNames
 
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 180 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 182 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 183 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 404 of file MatUmatImpl.hpp.

404 {
406 (void)m_field;
408 }
#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 386 of file MatUmatImpl.hpp.

387 {
389 CHKERR strainHandler->runUmat(*this, entity, gg);
390 CHKERR strainHandler->convertTangent(*this, A::matOpsDataPtr);
392 }
#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:176

◆ 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 379 of file MatUmatImpl.hpp.

379 {
381 CHKERR strainHandler->runUmat(*this, entity, gg);
382 CHKERR strainHandler->convertStress(*this, A::matOpsDataPtr);
384 }

◆ 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 202 of file MatUmatImpl.hpp.

202 {
204
205 mField = m_field_ptr;
206
207 MOFEM_LOG_CHANNEL("WORLD");
208
209 char umat_library[PETSC_MAX_PATH_LEN] = "./umat.so";
210 char umat_name[80] = "UMAT";
211 PetscInt nstatev = 0;
212 PetscInt nprops = 2;
213 const char *list_strain_type[] = {"small", "hencky", "finite"};
214 PetscInt choice_strain = StrainType::SMALL;
215 PetscOptionsBegin(PETSC_COMM_WORLD, "umat_", "", "none");
216 CHKERR PetscOptionsString("-library", "Path to UMAT shared library", "",
217 umat_library, umat_library, sizeof(umat_library),
218 PETSC_NULLPTR);
219 CHKERR PetscOptionsString("-name", "UMAT material name", "", umat_name,
220 umat_name, sizeof(umat_name), PETSC_NULLPTR);
221 CHKERR PetscOptionsInt("-nstatev", "Number of UMAT state variables", "",
222 nstatev, &nstatev, PETSC_NULLPTR);
223 CHKERR PetscOptionsInt("-nprops", "Number of UMAT material properties", "",
224 nprops, &nprops, PETSC_NULLPTR);
225 CHKERR PetscOptionsScalar("-young_modulus", "Default first property", "",
226 youngModulus, &youngModulus, PETSC_NULLPTR);
227 CHKERR PetscOptionsScalar("-poisson_ratio", "Default second property", "",
228 poissonRatio, &poissonRatio, PETSC_NULLPTR);
229 CHKERR PetscOptionsEList(
230 "-strain_type", "Strain type", "", list_strain_type, 3,
231 list_strain_type[choice_strain], &choice_strain, PETSC_NULLPTR);
232 PetscOptionsEnd();
233
234 strainType = static_cast<StrainType>(choice_strain);
235
236 switch (strainType) {
237 case SMALL:
238 strainHandler = std::make_unique<SmallStrainHandler<DIM, MODEL_TYPE>>();
239 break;
240 case HENCKY:
241 strainHandler = std::make_unique<HenckyStrainHandler<DIM, MODEL_TYPE>>();
242 break;
243 case FINITE:
244 strainHandler = std::make_unique<FiniteStrainHandler<DIM, MODEL_TYPE>>();
245 break;
246 default:
247 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
248 "Unsupported UMAT strain type");
249 }
250
251 if (nprops <= 0) {
252 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
253 "UMAT requires a positive number of properties");
254 }
255
256 if (nstatev < 0) {
257 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
258 "UMAT requires a non-negative number of state variables");
259 }
260
261 numberStateVariables = static_cast<int>(nstatev);
262 stateVar.resize(numberStateVariables, 0.0);
264 for (int ii = 0; ii != numberStateVariables; ++ii) {
266 }
267 numberMaterialProperties = static_cast<int>(nprops);
268 materialName = umat_name;
269 libraryPath = umat_library;
270
276
277 MOFEM_TAG_AND_LOG("WORLD", Sev::inform, "Default Umat parameters:")
278 << " umat_library = " << libraryPath << " name = " << materialName
279 << " umat_nstatev = " << numberStateVariables
280 << " umat_nprops = " << numberMaterialProperties;
281
282 std::string block_name = "MAT_UMAT";
283 for (auto &m :
284 m_field_ptr->getInterface<MeshsetsManager>()->getCubitMeshsetPtr(
285 std::regex((boost::format("%s(.*)") % block_name).str()))) {
286 std::vector<double> block_data;
287 CHKERR m->getAttributes(block_data);
288 if ((int)block_data.size() < numberMaterialProperties) {
289 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
290 "MAT_UMAT block requires at least %d attributes", nprops);
291 }
292
293 auto get_block_ents = [&]() {
294 Range ents;
295 CHK_MOAB_THROW(m_field_ptr->get_moab().get_entities_by_handle(
296 m->meshset, ents, true),
297 "can not get block entities");
298 return ents;
299 };
300
301 A::paramVecByRange.push_back(
302 {get_block_ents(),
303 std::vector<double>(block_data.begin(),
304 block_data.begin() + numberMaterialProperties)});
305
306 std::ostringstream properties_stream;
307 properties_stream << "[";
308 for (int ii = 0; ii != numberMaterialProperties; ++ii) {
309 if (ii)
310 properties_stream << ", ";
311 properties_stream << block_data[ii];
312 }
313 properties_stream << "]";
314
315 MOFEM_TAG_AND_LOG("WORLD", Sev::inform, "MatBlock for Umat")
316 << *m << " properties = " << properties_stream.str();
317 }
318
319 umatInterfacePtr = std::make_unique<UmatInterfaceType>(
322
323 if (m_field_ptr) {
324 CHKERR A::matOpsDataPtr->bindStateTag(*m_field_ptr, DFGRD0_TAG_NAME,
325 DIM * DIM);
326 CHKERR A::matOpsDataPtr->bindStateTag(*m_field_ptr, STRESS_TAG_NAME,
328 if (numberStateVariables > 0) {
329 for (int ii = 0; ii != numberStateVariables; ++ii) {
330 CHKERR A::matOpsDataPtr->bindStateTag(*m_field_ptr,
332 }
333 }
334 CHKERR bindAuxiliaryStateTags(*m_field_ptr);
335 CHKERR A::matOpsDataPtr->setupStateData();
336 }
337
339 }
#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::vector< std::string > vStateVariableTagNames
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:174
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 188 of file MatUmatImpl.hpp.

188 {
189 std::string tag_name(STATEV_TAG_NAME, sizeof(STATEV_TAG_NAME) - 1);
190 tag_name += '_';
191 tag_name += std::to_string(index);
192 return tag_name;
193 }
static constexpr char 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 417 of file MatUmatImpl.hpp.

417 {
419 (void)entity;
420 (void)gg;
421 for (int dd = 0; dd != 3; ++dd)
422 umatInterfacePtr->coords[dd] = 0.0;
424 }
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 426 of file MatUmatImpl.hpp.

426 {
428 (void)entity;
429 (void)gg;
430 if (umatInterfacePtr->predef.empty()) {
431 umatInterfacePtr->predef.push_back(0.0);
432 }
433 if (umatInterfacePtr->dpred.empty()) {
434 umatInterfacePtr->dpred.push_back(0.0);
435 }
436 std::fill(umatInterfacePtr->predef.begin(), umatInterfacePtr->predef.end(),
437 0.0);
438 std::fill(umatInterfacePtr->dpred.begin(), umatInterfacePtr->dpred.end(),
439 0.0);
441 }

◆ loadPreviousDeformationGradient()

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

Definition at line 443 of file MatUmatImpl.hpp.

443 {
445
446 CHKERR umatInterfacePtr->setIdentityDeformationGradient();
447
448 auto state_ptr =
449 A::matOpsDataPtr->getStateDataPtr(DFGRD0_TAG_NAME, entity, gg);
450 bool has_stored_gradient = false;
451 for (int row = 0; row != DIM; ++row) {
452 for (int col = 0; col != DIM; ++col) {
453 const double value = (*state_ptr)(row * DIM + col, 0);
454 umatInterfacePtr->dfgrd0[row + 3 * col] = value;
455 has_stored_gradient = has_stored_gradient || std::abs(value) > 0;
456 }
457 }
458
459 if (!has_stored_gradient) {
460 CHKERR umatInterfacePtr->setIdentityDeformationGradient();
461 }
462
464 }

◆ loadPreviousStateVariables()

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

Definition at line 493 of file MatUmatImpl.hpp.

493 {
495
496 umatInterfacePtr->statev.assign(numberStateVariables, -1);
499 }
500
501 for (int ii = 0; ii != numberStateVariables; ++ii) {
502 auto state_ptr = A::matOpsDataPtr->getStateDataPtr(
503 vStateVariableTagNames[ii], entity, gg);
504 umatInterfacePtr->statev[ii] = (*state_ptr)(0, 0);
505 }
506
508 }

◆ loadPreviousStress()

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

Definition at line 481 of file MatUmatImpl.hpp.

481 {
483
484 auto state_ptr =
485 A::matOpsDataPtr->getStateDataPtr(STRESS_TAG_NAME, entity, gg);
486 for (int ii = 0; ii != UmatInterfaceType::NTENS; ++ii) {
487 umatInterfacePtr->stress[ii] = (*state_ptr)(ii, 0);
488 }
489
491 }

◆ 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 126 of file MatOps.hpp.

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

◆ recordAuxiliaryMatOpsData()

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

Definition at line 410 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 358 of file MatUmatImpl.hpp.

358 {
360
361 A::matOpsDataPtr->insertCommonData("grad", MatrixDouble());
362 A::matOpsDataPtr->insertCommonData("P", MatrixDouble());
363 A::matOpsDataPtr->insertCommonData("P_dF", MatrixDouble());
364
365 A::matOpsDataPtr->insertActiveData("F", MatrixDouble());
366 A::matOpsDataPtr->insertDependentData("P", MatrixDouble());
367 A::matOpsDataPtr->insertDependentDerivativesData("P_dF", MatrixDouble());
368
369 A::matOpsDataPtr->getActiveDataPtr("F")->resize(DIM, DIM, false);
370 A::matOpsDataPtr->getDependentDataPtr("P")->resize(DIM, DIM, false);
371 A::matOpsDataPtr->getDependentDerivativesDataPtr("P_dF")->resize(
372 DIM * DIM, DIM * DIM, false);
373
375
377 }
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 341 of file MatUmatImpl.hpp.

341 {
343 (void)gg;
344 currentTimeStep = fe_ptr->ts_step;
345 currentTime = fe_ptr->ts_t;
346 currentTimeIncrement = fe_ptr->ts_dt;
347 const auto ent = fe_ptr->getFEEntityHandle();
349 for (auto &[range, param_vec] : A::paramVecByRange) {
350 if (range.find(ent) != range.end()) {
351 currentMaterialParameters = param_vec;
352 break;
353 }
354 }
356 }
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 466 of file MatUmatImpl.hpp.

466 {
468
469 auto state_ptr =
470 A::matOpsDataPtr->getStateDataPtr(DFGRD0_TAG_NAME, entity, gg);
471 for (int row = 0; row != DIM; ++row) {
472 for (int col = 0; col != DIM; ++col) {
473 (*state_ptr)(row *DIM + col, 0) =
474 umatInterfacePtr->dfgrd1[row + 3 * col];
475 }
476 }
477
479 }

◆ storeCurrentStateVariables()

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

Definition at line 522 of file MatUmatImpl.hpp.

522 {
524
527 }
528
529 for (int ii = 0; ii != numberStateVariables; ++ii) {
530 auto state_ptr = A::matOpsDataPtr->getStateDataPtr(
531 vStateVariableTagNames[ii], entity, gg);
532 (*state_ptr)(0, 0) = umatInterfacePtr->statev[ii];
533 }
534
536 }

◆ storeCurrentStress()

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

Definition at line 510 of file MatUmatImpl.hpp.

510 {
512
513 auto state_ptr =
514 A::matOpsDataPtr->getStateDataPtr(STRESS_TAG_NAME, entity, gg);
515 for (int ii = 0; ii != UmatInterfaceType::NTENS; ++ii) {
516 (*state_ptr)(ii, 0) = umatInterfacePtr->stress[ii];
517 }
518
520 }

◆ 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 394 of file MatUmatImpl.hpp.

394 {
396 CHKERR strainHandler->runUmat(*this, entity, gg);
398 CHKERR storeCurrentStress(entity, gg);
401 }
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 553 of file MatUmatImpl.hpp.

◆ HenckyStrainHandler< DIM, MODEL_TYPE >

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

Definition at line 553 of file MatUmatImpl.hpp.

◆ SmallStrainHandler< DIM, MODEL_TYPE >

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

Definition at line 553 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 551 of file MatUmatImpl.hpp.

◆ currentTime

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

Definition at line 544 of file MatUmatImpl.hpp.

◆ currentTimeIncrement

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

Definition at line 545 of file MatUmatImpl.hpp.

◆ currentTimeStep

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

Definition at line 543 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 550 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 184 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 540 of file MatUmatImpl.hpp.

◆ materialName

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

Definition at line 541 of file MatUmatImpl.hpp.

◆ mField

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

Definition at line 538 of file MatUmatImpl.hpp.

◆ numberMaterialProperties

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

Definition at line 549 of file MatUmatImpl.hpp.

◆ numberStateVariables

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

Definition at line 548 of file MatUmatImpl.hpp.

◆ poissonRatio

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

Definition at line 547 of file MatUmatImpl.hpp.

◆ STATEV_TAG_NAME

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

Definition at line 186 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 552 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 557 of file MatUmatImpl.hpp.

◆ strainType

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

Definition at line 542 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 185 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 539 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 195 of file MatUmatImpl.hpp.

◆ vStateVariableTagNames

template<int DIM, int MODEL_TYPE>
std::vector<std::string> MatOps::MatUmatImpl< DIM, MODEL_TYPE >::vStateVariableTagNames
protected

Definition at line 553 of file MatUmatImpl.hpp.

◆ youngModulus

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

Definition at line 546 of file MatUmatImpl.hpp.


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