15 extern "C" void FOR_NAME(umat, UMAT)(
double * stress,
55 throw std::invalid_argument(
"This UMAT requires exactly two properties.");
59 double G = E / 2.0 / (1.0 + nu);
60 double lambda = 2.0 *
G * nu / (1.0 - 2.0 * nu);
65 for (
int i = 0; i < 6; i++)
66 eps[i] = stran[i] + dstran[i];
68 auto eps_trace =
eps[0] +
eps[1] +
eps[2];
70 for (
int i = 0; i < 3; i++)
72 stress[i] = lambda * eps_trace + 2.0 *
G *
eps[i];
73 stress[i + 3] =
G *
eps[i + 3];
76 Eigen::Matrix<double, 6, 6>
C;
79 for (
int i = 0; i < 6; i++)
80 for (
int j = 0;
j < 6;
j++)
81 ddsdde[6 * i +
j] = 0.0;
83 for (
int i = 0; i < 3; i++)
85 ddsdde[6 * i + 0] =
C(0, i);
86 ddsdde[6 * i + 1] =
C(1, i);
87 ddsdde[6 * i + 2] =
C(2, i);
88 ddsdde[6 * (i + 3) + (i + 3)] =
C(i + 3, i + 3);
void FOR_NAME(umat, UMAT)
static const std::string G
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
void buildStiffnessMatrix(Eigen::Ref< Eigen::Matrix< double, 6, 6 >> C, const double &G, const double &lambda)
build a 6x6 representation of the stiffness tensor in C from the shear modulus G and Lame's first par...
static const std::string C