v0.16.0
Loading...
Searching...
No Matches
Public Member Functions | List of all members
MatOps::SmallStrainHandler< DIM, MODEL_TYPE > Struct Template Reference

#include "src/materials/MatUmatImpl.hpp"

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

Public Member Functions

 SmallStrainHandler ()
 
MoFEMErrorCode runUmat (MatUmatImpl< DIM, MODEL_TYPE > &matUmatImpl, EntityHandle entity, int gg) override
 
MoFEMErrorCode convertStress (MatUmatImpl< DIM, MODEL_TYPE > &matUmatImpl, boost::shared_ptr< MatOpsData > mat_ops_data_ptr) override
 
MoFEMErrorCode convertTangent (MatUmatImpl< DIM, MODEL_TYPE > &matUmatImpl, boost::shared_ptr< MatOpsData > mat_ops_data_ptr) override
 
- Public Member Functions inherited from MatOps::StrainHandler< DIM, MODEL_TYPE >
virtual ~StrainHandler ()=default
 

Detailed Description

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

Definition at line 25 of file MatUmatImpl.hpp.

Constructor & Destructor Documentation

◆ SmallStrainHandler()

template<int DIM, int MODEL_TYPE>
MatOps::SmallStrainHandler< DIM, MODEL_TYPE >::SmallStrainHandler ( )
inline

Definition at line 27 of file MatUmatImpl.hpp.

27{};

Member Function Documentation

◆ convertStress()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::SmallStrainHandler< DIM, MODEL_TYPE >::convertStress ( MatUmatImpl< DIM, MODEL_TYPE > &  matUmatImpl,
boost::shared_ptr< MatOpsData mat_ops_data_ptr 
)
inlineoverridevirtual

Implements MatOps::StrainHandler< DIM, MODEL_TYPE >.

Definition at line 57 of file MatUmatImpl.hpp.

58 {
60 auto &umat = *matUmatImpl.umatInterfacePtr;
61 auto set_stress_from_umat_cauchy = [&]() {
63
64 auto t_P = getFTensor2FromPtr<DIM, DIM>(
65 mat_ops_data_ptr->getDependentDataPtr("P")->data().data());
66
67 MatrixDouble sigma;
68 CHKERR umat.getCauchyStressTensor(sigma);
69
70 for (int i = 0; i != DIM; ++i)
71 for (int Jidx = 0; Jidx != DIM; ++Jidx)
72 t_P(i, Jidx) = sigma(i, Jidx);
73
75 };
76
77 CHKERR set_stress_from_umat_cauchy();
79 }
#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.
FTensor::Index< 'i', SPACE_DIM > i
UBlasMatrix< double > MatrixDouble
Definition Types.hpp:77
subroutine umat(stress, statev, ddsdde, sse, spd, scd, rpl, ddsddt, drplde, drpldt, stran, dstran, time, dtime, temp, dtemp, predef, dpred, cmname, ndi, nshr, ntens, nstatv, props, nprops, coords, drot, pnewdt, celent, dfgrd0, dfgrd1, noel, npt, layer, kspt, kstep, kinc)

◆ convertTangent()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::SmallStrainHandler< DIM, MODEL_TYPE >::convertTangent ( MatUmatImpl< DIM, MODEL_TYPE > &  matUmatImpl,
boost::shared_ptr< MatOpsData mat_ops_data_ptr 
)
inlineoverridevirtual

Implements MatOps::StrainHandler< DIM, MODEL_TYPE >.

Definition at line 82 of file MatUmatImpl.hpp.

83 {
85 auto &umat = *matUmatImpl.umatInterfacePtr;
86 auto set_tangent_from_umat_cauchy = [&]() {
88
89 auto t_dP = getFTensor4FromPtr<DIM, DIM, DIM, DIM>(
90 mat_ops_data_ptr->getDependentDerivativesDataPtr("P_dF")
91 ->data()
92 .data());
93
94 MatrixDouble d_sigma_d_eps;
95 CHKERR umat.getCauchyTangentTensor(d_sigma_d_eps);
96
97 for (int i = 0; i != DIM; ++i)
98 for (int Jidx = 0; Jidx != DIM; ++Jidx)
99 for (int m = 0; m != DIM; ++m)
100 for (int N = 0; N != DIM; ++N)
101 t_dP(i, Jidx, m, N) = d_sigma_d_eps(umatTensorIndex(i, Jidx),
103
105 };
106
107 CHKERR set_tangent_from_umat_cauchy();
109 }
int umatTensorIndex(const int ii, const int jj)
FTensor::Index< 'm', 3 > m
const int N
Definition speed_test.cpp:3

◆ runUmat()

template<int DIM, int MODEL_TYPE>
MoFEMErrorCode MatOps::SmallStrainHandler< DIM, MODEL_TYPE >::runUmat ( MatUmatImpl< DIM, MODEL_TYPE > &  matUmatImpl,
EntityHandle  entity,
int  gg 
)
inlineoverridevirtual

Implements MatOps::StrainHandler< DIM, MODEL_TYPE >.

Definition at line 29 of file MatUmatImpl.hpp.

30 {
32 if (!matUmatImpl.umatInterfacePtr) {
33 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
34 "UMAT interface is not initialised");
35 }
36 auto &umat = *matUmatImpl.umatInterfacePtr;
37 umat.props = matUmatImpl.currentMaterialParameters;
38 umat.noel = static_cast<int>(entity);
39 umat.npt = gg + 1;
40 CHKERR umat.setTimeData(matUmatImpl.currentTime,
41 matUmatImpl.currentTimeIncrement);
42 CHKERR matUmatImpl.loadPreviousDeformationGradient(entity, gg);
43 CHKERR matUmatImpl.loadPreviousStress(entity, gg);
44 CHKERR matUmatImpl.loadPreviousStateVariables(entity, gg);
45 CHKERR umat.setDeformationGradient(
46 *matUmatImpl.matOpsDataPtr->getActiveDataPtr("F"),
47 matUmatImpl.useDeformationGradient);
48 CHKERR umat.setStrainIncrementFromDeformationGradient();
49 CHKERR matUmatImpl.loadCoordinates(entity, gg);
50 CHKERR matUmatImpl.loadPredef(entity, gg);
51
52 CHKERR umat.callUmat();
54 }
@ MOFEM_OPERATION_UNSUCCESSFUL
Definition definitions.h:34

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