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 = MatPiolaResponse
 
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::UserDataOperator * createOp (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
 
- 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)
 

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 Public Attributes inherited from MatOps::MatPiolaResponse
static bool useDeformationGradient
 Otherwise the displacement gradient is supplied and I is added.
 

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::Interface * mField = nullptr
 
std::unique_ptr< UmatInterfaceType > umatInterfacePtr
 
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< double > defaultMaterialParameters = {youngModulus, poissonRatio}
 
std::vector< double > currentMaterialParameters = defaultMaterialParameters
 
std::vector< double > stateVar = 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< MatOpsData > matOpsDataPtr
 

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 = MatPiolaResponse

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

401 {
403 (void)m_field;
405 }
#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 383 of file MatUmatImpl.hpp.

384 {
386 CHKERR strainHandler->runUmat(*this, entity, gg);
387 CHKERR strainHandler->convertTangent(*this, A::matOpsDataPtr);
389 }
#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 376 of file MatUmatImpl.hpp.

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

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

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

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

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

◆ loadPreviousDeformationGradient()

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

Definition at line 440 of file MatUmatImpl.hpp.

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

◆ loadPreviousStateVariables()

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

Definition at line 490 of file MatUmatImpl.hpp.

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

◆ loadPreviousStress()

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

Definition at line 478 of file MatUmatImpl.hpp.

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

◆ recordAuxiliaryMatOpsData()

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

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

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

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

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

◆ storeCurrentStateVariables()

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

Definition at line 519 of file MatUmatImpl.hpp.

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

◆ storeCurrentStress()

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

Definition at line 507 of file MatUmatImpl.hpp.

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

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

391 {
393 CHKERR strainHandler->runUmat(*this, entity, gg);
395 CHKERR storeCurrentStress(entity, gg);
398 }
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 550 of file MatUmatImpl.hpp.

◆ HenckyStrainHandler< DIM, MODEL_TYPE >

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

Definition at line 550 of file MatUmatImpl.hpp.

◆ SmallStrainHandler< DIM, MODEL_TYPE >

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

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

◆ currentTime

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

Definition at line 541 of file MatUmatImpl.hpp.

◆ currentTimeIncrement

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

Definition at line 542 of file MatUmatImpl.hpp.

◆ currentTimeStep

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

Definition at line 540 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 547 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 537 of file MatUmatImpl.hpp.

◆ materialName

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

Definition at line 538 of file MatUmatImpl.hpp.

◆ mField

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

Definition at line 535 of file MatUmatImpl.hpp.

◆ numberMaterialProperties

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

Definition at line 546 of file MatUmatImpl.hpp.

◆ numberStateVariables

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

Definition at line 545 of file MatUmatImpl.hpp.

◆ poissonRatio

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

Definition at line 544 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 549 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 554 of file MatUmatImpl.hpp.

◆ strainType

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

Definition at line 539 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 536 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 550 of file MatUmatImpl.hpp.

◆ youngModulus

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

Definition at line 543 of file MatUmatImpl.hpp.


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