v0.16.3
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
MoFEM::UmatInterface< MODEL_TYPE > Struct Template Reference

#include "src/materials/UmatInterface.hpp"

Collaboration diagram for MoFEM::UmatInterface< MODEL_TYPE >:
[legend]

Public Member Functions

 UmatInterface (int nstatv=0, int nprops=2)
 
 ~UmatInterface ()
 
MoFEMErrorCode initialise (const std::string &library_path="./umat.so", const std::string &material_name="UMAT")
 
MoFEMErrorCode setIdentityDeformationGradient ()
 
MoFEMErrorCode setIdentityRotationIncrement ()
 
MoFEMErrorCode setProperties (const std::vector< double > &properties)
 
MoFEMErrorCode storeStateVar (int n_state_var, const std::vector< double > &state_var_values)
 
MoFEMErrorCode setTimeData (double current_time, double time_increment)
 
MoFEMErrorCode setStepData (int step_number, int increment_number)
 
MoFEMErrorCode setDeformationGradient (const MatrixDouble &grad, bool use_deformation_gradient)
 
MoFEMErrorCode setStrainIncrementFromDeformationGradient ()
 
MoFEMErrorCode callUmat ()
 
MoFEMErrorCode getDeformationGradient (MatrixDouble &F) const
 
MoFEMErrorCode getCauchyStressTensor (MatrixDouble &sigma) const
 
MoFEMErrorCode getCauchyTangentTensor (MatrixDouble &cauchy_tangent) const
 

Public Attributes

boost::shared_ptr< MatOps::MatOpsDatamatOpsDataPtr
 
umat_f umat = nullptr
 
void * handle = nullptr
 
char filename [256] = {}
 
int ndi = NDI
 
int nshr = NSHR
 
int ntens = NTENS
 
int nstatv
 
int nprops
 
int noel = 1
 
int npt = 1
 
int layer = 1
 
int kspt = 1
 
int kstep = 1
 
int kinc = 1
 
std::vector< doubleprops
 
std::vector< doublestatev
 
std::array< double, NTENSstress {}
 
std::array< double, NTENSstran {}
 
std::array< double, NTENSdstran {}
 
std::array< double, NTANGENTddsdde {}
 
std::array< double, 9 > dfgrd0 {}
 
std::array< double, 9 > dfgrd1 {}
 
std::array< double, 9 > drot {}
 
double ddsddt [6]
 
double drplde [6]
 
double coords [3] = {}
 
char cmname [80]
 
double time [2] = {}
 
double dtime = 0.0
 
double temp = 0.0
 
double dtemp = 0.0
 
std::vector< doublepredef {0.0}
 
std::vector< doubledpred {0.0}
 
double pnewdt = 1.0
 
double celent = 0.0
 
double sse = 0.0
 
double spd = 0.0
 
double scd = 0.0
 
double rpl = 0.0
 
double drpldt = 0.0
 

Static Public Attributes

static constexpr int DIM
 
static constexpr int NTENS
 
static constexpr int NTANGENT = NTENS * NTENS
 
static constexpr int NDI
 
static constexpr int NSHR = (MODEL_TYPE == MatOps::MODEL_3D) ? 3 : 1
 

Detailed Description

template<int MODEL_TYPE>
struct MoFEM::UmatInterface< MODEL_TYPE >

Definition at line 30 of file UmatInterface.hpp.

Constructor & Destructor Documentation

◆ UmatInterface()

template<int MODEL_TYPE>
MoFEM::UmatInterface< MODEL_TYPE >::UmatInterface ( int  nstatv = 0,
int  nprops = 2 
)

Definition at line 36 of file UmatInterface.cpp.

◆ ~UmatInterface()

template<int MODEL_TYPE>
MoFEM::UmatInterface< MODEL_TYPE >::~UmatInterface ( )

Definition at line 39 of file UmatInterface.cpp.

39 {
40 if (handle) {
41 dlclose(handle);
42 handle = nullptr;
43 umat = nullptr;
44 }
45}

Member Function Documentation

◆ callUmat()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::callUmat ( )

Definition at line 84 of file UmatInterface.cpp.

84 {
86
87 if (!umat) {
88 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
89 "UMAT function pointer is not initialised");
90 }
91
92 umat(stress.data(), statev.data(), ddsdde.data(), &sse, &spd, &scd, &rpl,
93 ddsddt, drplde, &drpldt, stran.data(), dstran.data(), time, &dtime,
94 &temp, &dtemp, predef.data(), dpred.data(), cmname, &ndi, &nshr, &ntens,
95 &nstatv, props.data(), &nprops, coords, drot.data(), &pnewdt, &celent,
96 dfgrd0.data(), dfgrd1.data(), &noel, &npt, &layer, &kspt, &kstep, &kinc,
97 sizeof(cmname));
98
100}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_OPERATION_UNSUCCESSFUL
Definition definitions.h:34
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
std::array< double, NTENS > stran
std::array< double, 9 > dfgrd1
std::array< double, NTENS > stress
std::vector< double > predef
std::array< double, NTANGENT > ddsdde
std::vector< double > dpred
std::array< double, 9 > dfgrd0
std::array< double, NTENS > dstran
std::array< double, 9 > drot

◆ getCauchyStressTensor()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::getCauchyStressTensor ( MatrixDouble sigma) const

Definition at line 243 of file UmatInterface.cpp.

244 {
246 CHKERR resizeTensor2(sigma);
247 if constexpr (MODEL_TYPE == MatOps::MODEL_3D) {
248 sigma(0, 0) = stress[0];
249 sigma(1, 1) = stress[1];
250 sigma(2, 2) = stress[2];
251 sigma(0, 1) = sigma(1, 0) = stress[3];
252 sigma(0, 2) = sigma(2, 0) = stress[4];
253 sigma(1, 2) = sigma(2, 1) = stress[5];
254 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRAIN ||
255 MODEL_TYPE == MatOps::MODEL_AXISYMMETRIC) {
256 sigma(0, 0) = stress[0];
257 sigma(1, 1) = stress[1];
258 sigma(2, 2) = stress[2];
259 sigma(0, 1) = sigma(1, 0) = stress[3];
260 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRESS) {
261 sigma(0, 0) = stress[0];
262 sigma(1, 1) = stress[1];
263 sigma(0, 1) = sigma(1, 0) = stress[2];
264 } else {
265 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
266 "UMAT stress conversion is not implemented for this model type");
267 }
269}
@ MOFEM_NOT_IMPLEMENTED
Definition definitions.h:32
#define CHKERR
Inline error check.
@ MODEL_AXISYMMETRIC
Definition MatOps.hpp:196
@ MODEL_3D
Definition MatOps.hpp:193
@ MODEL_2D_PLANE_STRESS
Definition MatOps.hpp:195
@ MODEL_2D_PLANE_STRAIN
Definition MatOps.hpp:194
MoFEMErrorCode resizeTensor2(MatrixDouble &mat)

◆ getCauchyTangentTensor()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::getCauchyTangentTensor ( MatrixDouble cauchy_tangent) const

Definition at line 272 of file UmatInterface.cpp.

273 {
275 CHKERR resizeTensor4(cauchy_tangent);
276 if constexpr (MODEL_TYPE == MatOps::MODEL_3D) {
277 static const std::array<std::pair<int, int>, 6> pairs = {
278 std::pair<int, int>{0, 0}, {1, 1}, {2, 2}, {0, 1}, {0, 2}, {1, 2}};
279 for (int row = 0; row != 6; ++row) {
280 const auto [i, j] = pairs[row];
281 for (int col = 0; col != 6; ++col) {
282 const auto [k, l] = pairs[col];
283 const double value = ddsdde[row + 6 * col];
284 cauchy_tangent(tensorIndex(i, j), tensorIndex(k, l)) = value;
285 cauchy_tangent(tensorIndex(j, i), tensorIndex(k, l)) = value;
286 cauchy_tangent(tensorIndex(i, j), tensorIndex(l, k)) = value;
287 cauchy_tangent(tensorIndex(j, i), tensorIndex(l, k)) = value;
288 }
289 }
290 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRAIN ||
291 MODEL_TYPE == MatOps::MODEL_AXISYMMETRIC) {
292 static const std::array<std::pair<int, int>, 4> pairs = {
293 std::pair<int, int>{0, 0}, {1, 1}, {2, 2}, {0, 1}};
294 for (int row = 0; row != 4; ++row) {
295 const auto [i, j] = pairs[row];
296 for (int col = 0; col != 4; ++col) {
297 const auto [k, l] = pairs[col];
298 const double value = ddsdde[row + 4 * col];
299 cauchy_tangent(tensorIndex(i, j), tensorIndex(k, l)) = value;
300 cauchy_tangent(tensorIndex(j, i), tensorIndex(k, l)) = value;
301 cauchy_tangent(tensorIndex(i, j), tensorIndex(l, k)) = value;
302 cauchy_tangent(tensorIndex(j, i), tensorIndex(l, k)) = value;
303 }
304 }
305 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRESS) {
306 static const std::array<std::pair<int, int>, 3> pairs = {
307 std::pair<int, int>{0, 0}, {1, 1}, {0, 1}};
308 for (int row = 0; row != 3; ++row) {
309 const auto [i, j] = pairs[row];
310 for (int col = 0; col != 3; ++col) {
311 const auto [k, l] = pairs[col];
312 const double value = ddsdde[row + 3 * col];
313 cauchy_tangent(tensorIndex(i, j), tensorIndex(k, l)) = value;
314 cauchy_tangent(tensorIndex(j, i), tensorIndex(k, l)) = value;
315 cauchy_tangent(tensorIndex(i, j), tensorIndex(l, k)) = value;
316 cauchy_tangent(tensorIndex(j, i), tensorIndex(l, k)) = value;
317 }
318 }
319 } else {
320 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
321 "UMAT tangent conversion is not implemented for this model type");
322 }
324}
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
MoFEMErrorCode resizeTensor4(MatrixDouble &mat)
int tensorIndex(const int ii, const int jj)

◆ getDeformationGradient()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::getDeformationGradient ( MatrixDouble F) const

Definition at line 232 of file UmatInterface.cpp.

233 {
236 for (int row = 0; row != DIM; ++row)
237 for (int col = 0; col != DIM; ++col)
238 F(row, col) = dfgrd1[row + 3 * col];
240}
@ F
static constexpr int DIM

◆ initialise()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::initialise ( const std::string &  library_path = "./umat.so",
const std::string &  material_name = "UMAT" 
)

Definition at line 49 of file UmatInterface.cpp.

50 {
52
53 if (handle) {
54 dlclose(handle);
55 handle = nullptr;
56 umat = nullptr;
57 }
58
59 std::memset(filename, 0, sizeof(filename));
60 std::strncpy(filename, library_path.c_str(), sizeof(filename) - 1);
61
62 std::memset(cmname, ' ', sizeof(cmname));
63 const auto material_name_size = material_name.size() < sizeof(cmname)
64 ? material_name.size()
65 : sizeof(cmname);
66 std::memcpy(cmname, material_name.data(), material_name_size);
67
68 handle = dlopen(filename, RTLD_NOW | RTLD_LOCAL);
69 if (!handle) {
70 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
71 "Failed to open UMAT library %s: %s", filename, dlerror());
72 }
73
74 umat = (umat_f)dlsym(handle, "umat_");
75 if (!umat) {
76 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
77 "Failed to resolve symbol umat_ in %s: %s", filename, dlerror());
78 }
79
81}
void(*)(double *stress, double *statev, double *ddsdde, double *sse, double *spd, double *scd, double *rpl, double *ddsddt, double *drplde, double *drpldt, double *stran, double *dstran, double *time, double *dtime, double *temp, double *dtemp, double *predef, double *dpred, char *cmname, int *ndi, int *nshr, int *ntens, int *nstatv, double *props, int *nprops, double *coords, double *drot, double *pnewdt, double *celent, double *dfgrd0, double *dfgrd1, int *noel, int *npt, int *layer, int *kspt, int *kstep, int *kinc, std::size_t cmname_len) umat_f

◆ setDeformationGradient()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::setDeformationGradient ( const MatrixDouble grad,
bool  use_deformation_gradient 
)

Definition at line 127 of file UmatInterface.cpp.

128 {
130
131 dfgrd1.fill(0);
132 for (int dd = 0; dd != 3; ++dd)
133 dfgrd1[dd + 3 * dd] = 1.0;
134
135 for (int row = 0; row != DIM; ++row) {
136 for (int col = 0; col != DIM; ++col) {
137 const double grad_value = grad(row, col);
138 dfgrd1[row + 3 * col] = use_deformation_gradient
139 ? grad_value
140 : grad_value + (row == col ? 1.0 : 0.0);
141 }
142 }
143
145}
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

◆ setIdentityDeformationGradient()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::setIdentityDeformationGradient ( )

Definition at line 104 of file UmatInterface.cpp.

104 {
106
107 dfgrd0.fill(0);
108 for (int dd = 0; dd != 3; ++dd)
109 dfgrd0[dd + 3 * dd] = 1.0;
110
112}

◆ setIdentityRotationIncrement()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::setIdentityRotationIncrement ( )

Definition at line 116 of file UmatInterface.cpp.

116 {
118
119 drot.fill(0);
120 for (int dd = 0; dd != 3; ++dd)
121 drot[dd + 3 * dd] = 1.0;
122
124}

◆ setProperties()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::setProperties ( const std::vector< double > &  properties)

◆ setStepData()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::setStepData ( int  step_number,
int  increment_number 
)

Definition at line 162 of file UmatInterface.cpp.

163 {
165
166 kstep = step_number;
167 kinc = increment_number;
168
170}

◆ setStrainIncrementFromDeformationGradient()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::setStrainIncrementFromDeformationGradient ( )

Definition at line 174 of file UmatInterface.cpp.

174 {
176
177 auto get_small_strain_voigt = [](const std::array<double, 9> &dfgrd,
178 auto &strain) {
179 std::array<double, 9> grad = dfgrd;
180 for (int dd = 0; dd != DIM; ++dd)
181 grad[dd + 3 * dd] -= 1.0;
182
183 if constexpr (MODEL_TYPE == MatOps::MODEL_3D) {
184 strain[0] = grad[0];
185 strain[1] = grad[4];
186 strain[2] = grad[8];
187 strain[3] = grad[1] + grad[3];
188 strain[4] = grad[2] + grad[6];
189 strain[5] = grad[5] + grad[7];
190 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRAIN) {
191 strain[0] = grad[0];
192 strain[1] = grad[4];
193 strain[2] = 0.0;
194 strain[3] = grad[1] + grad[3];
195 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRESS) {
196 strain[0] = grad[0];
197 strain[1] = grad[4];
198 strain[2] = grad[1] + grad[3];
199 } else if constexpr (MODEL_TYPE == MatOps::MODEL_AXISYMMETRIC) {
200 strain[0] = grad[0];
201 strain[1] = grad[4];
202 strain[2] = grad[8];
203 strain[3] = grad[1] + grad[3];
204 } else {
205 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
206 "UMAT strain increment is not implemented for this model type");
207 }
208 };
209
210 std::array<double, NTENS> reference_strain{};
211 std::array<double, NTENS> current_strain{};
212 get_small_strain_voigt(dfgrd0, reference_strain);
213 get_small_strain_voigt(dfgrd1, current_strain);
214
215 for (int ii = 0; ii != NTENS; ++ii) {
216 stran[ii] = reference_strain[ii];
217 dstran[ii] = current_strain[ii] - reference_strain[ii];
218 }
219
221}
static constexpr int NTENS

◆ setTimeData()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::setTimeData ( double  current_time,
double  time_increment 
)

Definition at line 149 of file UmatInterface.cpp.

150 {
152
153 time[1] = current_time;
154 dtime = time_increment;
155 time[0] = current_time - time_increment;
156
158}

◆ storeStateVar()

template<int MODEL_TYPE>
MoFEMErrorCode MoFEM::UmatInterface< MODEL_TYPE >::storeStateVar ( int  n_state_var,
const std::vector< double > &  state_var_values 
)

Definition at line 224 of file UmatInterface.cpp.

225 {
227
229}

Member Data Documentation

◆ celent

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::celent = 0.0

Definition at line 106 of file UmatInterface.hpp.

◆ cmname

template<int MODEL_TYPE>
char MoFEM::UmatInterface< MODEL_TYPE >::cmname[80]

Definition at line 100 of file UmatInterface.hpp.

◆ coords

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::coords[3] = {}

Definition at line 99 of file UmatInterface.hpp.

99{};

◆ ddsdde

template<int MODEL_TYPE>
std::array<double, NTANGENT> MoFEM::UmatInterface< MODEL_TYPE >::ddsdde {}

Definition at line 91 of file UmatInterface.hpp.

91{};

◆ ddsddt

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::ddsddt[6]

Definition at line 97 of file UmatInterface.hpp.

◆ dfgrd0

template<int MODEL_TYPE>
std::array<double, 9> MoFEM::UmatInterface< MODEL_TYPE >::dfgrd0 {}

Definition at line 93 of file UmatInterface.hpp.

93{}; // F at start of increment

◆ dfgrd1

template<int MODEL_TYPE>
std::array<double, 9> MoFEM::UmatInterface< MODEL_TYPE >::dfgrd1 {}

Definition at line 94 of file UmatInterface.hpp.

94{}; // F at end of increment

◆ DIM

template<int MODEL_TYPE>
constexpr int MoFEM::UmatInterface< MODEL_TYPE >::DIM
staticconstexpr
Initial value:
= (MODEL_TYPE == MatOps::MODEL_3D ||
MODEL_TYPE == MatOps::MODEL_AXISYMMETRIC) ? 3 : 2

Definition at line 32 of file UmatInterface.hpp.

◆ dpred

template<int MODEL_TYPE>
std::vector<double> MoFEM::UmatInterface< MODEL_TYPE >::dpred {0.0}

Definition at line 105 of file UmatInterface.hpp.

105{0.0};

◆ drot

template<int MODEL_TYPE>
std::array<double, 9> MoFEM::UmatInterface< MODEL_TYPE >::drot {}

Definition at line 95 of file UmatInterface.hpp.

95{};

◆ drplde

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::drplde[6]

Definition at line 98 of file UmatInterface.hpp.

◆ drpldt

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::drpldt = 0.0

Definition at line 107 of file UmatInterface.hpp.

◆ dstran

template<int MODEL_TYPE>
std::array<double, NTENS> MoFEM::UmatInterface< MODEL_TYPE >::dstran {}

Definition at line 89 of file UmatInterface.hpp.

89{}; // strain increment

◆ dtemp

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::dtemp = 0.0

Definition at line 103 of file UmatInterface.hpp.

◆ dtime

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::dtime = 0.0

Definition at line 102 of file UmatInterface.hpp.

◆ filename

template<int MODEL_TYPE>
char MoFEM::UmatInterface< MODEL_TYPE >::filename[256] = {}

Definition at line 72 of file UmatInterface.hpp.

72{};

◆ handle

template<int MODEL_TYPE>
void* MoFEM::UmatInterface< MODEL_TYPE >::handle = nullptr

Definition at line 71 of file UmatInterface.hpp.

◆ kinc

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::kinc = 1

Definition at line 81 of file UmatInterface.hpp.

◆ kspt

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::kspt = 1

Definition at line 81 of file UmatInterface.hpp.

◆ kstep

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::kstep = 1

Definition at line 81 of file UmatInterface.hpp.

◆ layer

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::layer = 1

Definition at line 81 of file UmatInterface.hpp.

◆ matOpsDataPtr

template<int MODEL_TYPE>
boost::shared_ptr<MatOps::MatOpsData> MoFEM::UmatInterface< MODEL_TYPE >::matOpsDataPtr

Definition at line 68 of file UmatInterface.hpp.

◆ NDI

template<int MODEL_TYPE>
constexpr int MoFEM::UmatInterface< MODEL_TYPE >::NDI
staticconstexpr
Initial value:
= (MODEL_TYPE == MatOps::MODEL_3D) ? 3
: (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRESS)
? 2
: 3

Definition at line 74 of file UmatInterface.hpp.

◆ ndi

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::ndi = NDI

Definition at line 80 of file UmatInterface.hpp.

◆ noel

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::noel = 1

Definition at line 81 of file UmatInterface.hpp.

◆ nprops

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::nprops

Definition at line 80 of file UmatInterface.hpp.

◆ npt

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::npt = 1

Definition at line 81 of file UmatInterface.hpp.

◆ NSHR

template<int MODEL_TYPE>
constexpr int MoFEM::UmatInterface< MODEL_TYPE >::NSHR = (MODEL_TYPE == MatOps::MODEL_3D) ? 3 : 1
staticconstexpr

Definition at line 78 of file UmatInterface.hpp.

◆ nshr

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::nshr = NSHR

Definition at line 80 of file UmatInterface.hpp.

◆ nstatv

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::nstatv

Definition at line 80 of file UmatInterface.hpp.

◆ NTANGENT

template<int MODEL_TYPE>
constexpr int MoFEM::UmatInterface< MODEL_TYPE >::NTANGENT = NTENS * NTENS
staticconstexpr

Definition at line 40 of file UmatInterface.hpp.

◆ NTENS

template<int MODEL_TYPE>
constexpr int MoFEM::UmatInterface< MODEL_TYPE >::NTENS
staticconstexpr
Initial value:
= (MODEL_TYPE == MatOps::MODEL_3D) ? 6
: (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRESS)
? 3
: 4

Definition at line 35 of file UmatInterface.hpp.

◆ ntens

template<int MODEL_TYPE>
int MoFEM::UmatInterface< MODEL_TYPE >::ntens = NTENS

Definition at line 80 of file UmatInterface.hpp.

◆ pnewdt

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::pnewdt = 1.0

Definition at line 106 of file UmatInterface.hpp.

◆ predef

template<int MODEL_TYPE>
std::vector<double> MoFEM::UmatInterface< MODEL_TYPE >::predef {0.0}

Definition at line 104 of file UmatInterface.hpp.

104{0.0};

◆ props

template<int MODEL_TYPE>
std::vector<double> MoFEM::UmatInterface< MODEL_TYPE >::props

Definition at line 83 of file UmatInterface.hpp.

◆ rpl

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::rpl = 0.0

Definition at line 107 of file UmatInterface.hpp.

◆ scd

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::scd = 0.0

Definition at line 107 of file UmatInterface.hpp.

◆ spd

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::spd = 0.0

Definition at line 107 of file UmatInterface.hpp.

◆ sse

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::sse = 0.0

Definition at line 107 of file UmatInterface.hpp.

◆ statev

template<int MODEL_TYPE>
std::vector<double> MoFEM::UmatInterface< MODEL_TYPE >::statev

Definition at line 84 of file UmatInterface.hpp.

◆ stran

template<int MODEL_TYPE>
std::array<double, NTENS> MoFEM::UmatInterface< MODEL_TYPE >::stran {}

Definition at line 88 of file UmatInterface.hpp.

88{}; // total strain at start of increment

◆ stress

template<int MODEL_TYPE>
std::array<double, NTENS> MoFEM::UmatInterface< MODEL_TYPE >::stress {}

Definition at line 87 of file UmatInterface.hpp.

87{}; // Cauchy stress at end of step

◆ temp

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::temp = 0.0

Definition at line 103 of file UmatInterface.hpp.

◆ time

template<int MODEL_TYPE>
double MoFEM::UmatInterface< MODEL_TYPE >::time[2] = {}

Definition at line 101 of file UmatInterface.hpp.

101{};

◆ umat

template<int MODEL_TYPE>
umat_f MoFEM::UmatInterface< MODEL_TYPE >::umat = nullptr

Definition at line 70 of file UmatInterface.hpp.


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