v0.16.0
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 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 = (MODEL_TYPE == MatOps::MODEL_3D) ? 3 : 2
 
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 226 of file UmatInterface.cpp.

227 {
229 CHKERR resizeTensor2(sigma);
230 if constexpr (MODEL_TYPE == MatOps::MODEL_3D) {
231 sigma(0, 0) = stress[0];
232 sigma(1, 1) = stress[1];
233 sigma(2, 2) = stress[2];
234 sigma(0, 1) = sigma(1, 0) = stress[3];
235 sigma(0, 2) = sigma(2, 0) = stress[4];
236 sigma(1, 2) = sigma(2, 1) = stress[5];
237 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRAIN) {
238 sigma(0, 0) = stress[0];
239 sigma(1, 1) = stress[1];
240 sigma(2, 2) = stress[2];
241 sigma(0, 1) = sigma(1, 0) = stress[3];
242 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRESS) {
243 sigma(0, 0) = stress[0];
244 sigma(1, 1) = stress[1];
245 sigma(0, 1) = sigma(1, 0) = stress[2];
246 } else {
247 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
248 "UMAT stress conversion is not implemented for this model type");
249 }
251}
@ MOFEM_NOT_IMPLEMENTED
Definition definitions.h:32
#define CHKERR
Inline error check.
@ MODEL_3D
Definition MatOps.hpp:181
@ MODEL_2D_PLANE_STRESS
Definition MatOps.hpp:183
@ MODEL_2D_PLANE_STRAIN
Definition MatOps.hpp:182
MoFEMErrorCode resizeTensor2(MatrixDouble &mat)

◆ getCauchyTangentTensor()

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

Definition at line 254 of file UmatInterface.cpp.

255 {
257 CHKERR resizeTensor4(cauchy_tangent);
258 if constexpr (MODEL_TYPE == MatOps::MODEL_3D) {
259 static const std::array<std::pair<int, int>, 6> pairs = {
260 std::pair<int, int>{0, 0}, {1, 1}, {2, 2}, {0, 1}, {0, 2}, {1, 2}};
261 for (int row = 0; row != 6; ++row) {
262 const auto [i, j] = pairs[row];
263 for (int col = 0; col != 6; ++col) {
264 const auto [k, l] = pairs[col];
265 const double value = ddsdde[row + 6 * col];
266 cauchy_tangent(tensorIndex(i, j), tensorIndex(k, l)) = value;
267 cauchy_tangent(tensorIndex(j, i), tensorIndex(k, l)) = value;
268 cauchy_tangent(tensorIndex(i, j), tensorIndex(l, k)) = value;
269 cauchy_tangent(tensorIndex(j, i), tensorIndex(l, k)) = value;
270 }
271 }
272 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRAIN) {
273 static const std::array<std::pair<int, int>, 4> pairs = {
274 std::pair<int, int>{0, 0}, {1, 1}, {2, 2}, {0, 1}};
275 for (int row = 0; row != 4; ++row) {
276 const auto [i, j] = pairs[row];
277 for (int col = 0; col != 4; ++col) {
278 const auto [k, l] = pairs[col];
279 const double value = ddsdde[row + 4 * col];
280 cauchy_tangent(tensorIndex(i, j), tensorIndex(k, l)) = value;
281 cauchy_tangent(tensorIndex(j, i), tensorIndex(k, l)) = value;
282 cauchy_tangent(tensorIndex(i, j), tensorIndex(l, k)) = value;
283 cauchy_tangent(tensorIndex(j, i), tensorIndex(l, k)) = value;
284 }
285 }
286 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRESS) {
287 static const std::array<std::pair<int, int>, 3> pairs = {
288 std::pair<int, int>{0, 0}, {1, 1}, {0, 1}};
289 for (int row = 0; row != 3; ++row) {
290 const auto [i, j] = pairs[row];
291 for (int col = 0; col != 3; ++col) {
292 const auto [k, l] = pairs[col];
293 const double value = ddsdde[row + 3 * col];
294 cauchy_tangent(tensorIndex(i, j), tensorIndex(k, l)) = value;
295 cauchy_tangent(tensorIndex(j, i), tensorIndex(k, l)) = value;
296 cauchy_tangent(tensorIndex(i, j), tensorIndex(l, k)) = value;
297 cauchy_tangent(tensorIndex(j, i), tensorIndex(l, k)) = value;
298 }
299 }
300 } else {
301 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
302 "UMAT tangent conversion is not implemented for this model type");
303 }
305}
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 215 of file UmatInterface.cpp.

216 {
219 for (int row = 0; row != DIM; ++row)
220 for (int col = 0; col != DIM; ++col)
221 F(row, col) = dfgrd1[row + 3 * col];
223}
@ 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 115 of file UmatInterface.cpp.

116 {
118
119 dfgrd1.fill(0);
120 for (int dd = 0; dd != 3; ++dd)
121 dfgrd1[dd + 3 * dd] = 1.0;
122
123 for (int row = 0; row != DIM; ++row) {
124 for (int col = 0; col != DIM; ++col) {
125 const double grad_value = grad(row, col);
126 dfgrd1[row + 3 * col] = use_deformation_gradient
127 ? grad_value
128 : grad_value + (row == col ? 1.0 : 0.0);
129 }
130 }
131
133}
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}

◆ 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 150 of file UmatInterface.cpp.

151 {
153
154 kstep = step_number;
155 kinc = increment_number;
156
158}

◆ setStrainIncrementFromDeformationGradient()

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

Definition at line 162 of file UmatInterface.cpp.

162 {
164
165 auto get_small_strain_voigt = [](const std::array<double, 9> &dfgrd,
166 auto &strain) {
167 std::array<double, 9> grad = dfgrd;
168 for (int dd = 0; dd != DIM; ++dd)
169 grad[dd + 3 * dd] -= 1.0;
170
171 if constexpr (MODEL_TYPE == MatOps::MODEL_3D) {
172 strain[0] = grad[0];
173 strain[1] = grad[4];
174 strain[2] = grad[8];
175 strain[3] = grad[1] + grad[3];
176 strain[4] = grad[2] + grad[6];
177 strain[5] = grad[5] + grad[7];
178 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRAIN) {
179 strain[0] = grad[0];
180 strain[1] = grad[4];
181 strain[2] = 0.0;
182 strain[3] = grad[1] + grad[3];
183 } else if constexpr (MODEL_TYPE == MatOps::MODEL_2D_PLANE_STRESS) {
184 strain[0] = grad[0];
185 strain[1] = grad[4];
186 strain[2] = grad[1] + grad[3];
187 } else {
188 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
189 "UMAT strain increment is not implemented for this model type");
190 }
191 };
192
193 std::array<double, NTENS> reference_strain{};
194 std::array<double, NTENS> current_strain{};
195 get_small_strain_voigt(dfgrd0, reference_strain);
196 get_small_strain_voigt(dfgrd1, current_strain);
197
198 for (int ii = 0; ii != NTENS; ++ii) {
199 stran[ii] = reference_strain[ii];
200 dstran[ii] = current_strain[ii] - reference_strain[ii];
201 }
202
204}
static constexpr int NTENS

◆ setTimeData()

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

Definition at line 137 of file UmatInterface.cpp.

138 {
140
141 time[1] = current_time;
142 dtime = time_increment;
143 time[0] = current_time - time_increment;
144
146}

◆ 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 207 of file UmatInterface.cpp.

208 {
210
212}

Member Data Documentation

◆ celent

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

Definition at line 104 of file UmatInterface.hpp.

◆ cmname

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

Definition at line 98 of file UmatInterface.hpp.

◆ coords

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

Definition at line 97 of file UmatInterface.hpp.

97{};

◆ ddsdde

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

Definition at line 89 of file UmatInterface.hpp.

89{};

◆ ddsddt

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

Definition at line 95 of file UmatInterface.hpp.

◆ dfgrd0

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

Definition at line 91 of file UmatInterface.hpp.

91{}; // F at start of increment

◆ dfgrd1

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

Definition at line 92 of file UmatInterface.hpp.

92{}; // F at end of increment

◆ DIM

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

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 103 of file UmatInterface.hpp.

103{0.0};

◆ drot

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

Definition at line 93 of file UmatInterface.hpp.

93{};

◆ drplde

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

Definition at line 96 of file UmatInterface.hpp.

◆ drpldt

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

Definition at line 105 of file UmatInterface.hpp.

◆ dstran

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

Definition at line 87 of file UmatInterface.hpp.

87{}; // strain increment

◆ dtemp

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

Definition at line 101 of file UmatInterface.hpp.

◆ dtime

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

Definition at line 100 of file UmatInterface.hpp.

◆ filename

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

Definition at line 70 of file UmatInterface.hpp.

70{};

◆ handle

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

Definition at line 69 of file UmatInterface.hpp.

◆ kinc

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

Definition at line 79 of file UmatInterface.hpp.

◆ kspt

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

Definition at line 79 of file UmatInterface.hpp.

◆ kstep

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

Definition at line 79 of file UmatInterface.hpp.

◆ layer

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

Definition at line 79 of file UmatInterface.hpp.

◆ matOpsDataPtr

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

Definition at line 66 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 72 of file UmatInterface.hpp.

◆ ndi

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

Definition at line 78 of file UmatInterface.hpp.

◆ noel

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

Definition at line 79 of file UmatInterface.hpp.

◆ nprops

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

Definition at line 78 of file UmatInterface.hpp.

◆ npt

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

Definition at line 79 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 76 of file UmatInterface.hpp.

◆ nshr

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

Definition at line 78 of file UmatInterface.hpp.

◆ nstatv

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

Definition at line 78 of file UmatInterface.hpp.

◆ NTANGENT

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

Definition at line 39 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 34 of file UmatInterface.hpp.

◆ ntens

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

Definition at line 78 of file UmatInterface.hpp.

◆ pnewdt

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

Definition at line 104 of file UmatInterface.hpp.

◆ predef

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

Definition at line 102 of file UmatInterface.hpp.

102{0.0};

◆ props

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

Definition at line 81 of file UmatInterface.hpp.

◆ rpl

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

Definition at line 105 of file UmatInterface.hpp.

◆ scd

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

Definition at line 105 of file UmatInterface.hpp.

◆ spd

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

Definition at line 105 of file UmatInterface.hpp.

◆ sse

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

Definition at line 105 of file UmatInterface.hpp.

◆ statev

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

Definition at line 82 of file UmatInterface.hpp.

◆ stran

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

Definition at line 86 of file UmatInterface.hpp.

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

◆ stress

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

Definition at line 85 of file UmatInterface.hpp.

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

◆ temp

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

Definition at line 101 of file UmatInterface.hpp.

◆ time

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

Definition at line 99 of file UmatInterface.hpp.

99{};

◆ umat

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

Definition at line 68 of file UmatInterface.hpp.


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