56 throw std::invalid_argument(
"This UMAT requires exactly two properties.");
60 double G = E / 2.0 / (1.0 + nu);
61 double lambda = 2.0 * G * nu / (1.0 - 2.0 * nu);
66 for (
int i = 0; i < 6; i++)
67 eps[i] = stran[i] + dstran[i];
69 auto eps_trace =
eps[0] +
eps[1] +
eps[2];
71 for (
int i = 0; i < 3; i++)
73 stress[i] = lambda * eps_trace + 2.0 * G *
eps[i];
74 stress[i + 3] = G *
eps[i + 3];
77 Eigen::Matrix<double, 6, 6> C;
80 for (
int i = 0; i < 6; i++)
81 for (
int j = 0; j < 6; j++)
82 ddsdde[6 * i + j] = 0.0;
84 for (
int i = 0; i < 3; i++)
86 ddsdde[6 * i + 0] = C(0, i);
87 ddsdde[6 * i + 1] = C(1, i);
88 ddsdde[6 * i + 2] = C(2, i);
89 ddsdde[6 * (i + 3) + (i + 3)] = C(i + 3, i + 3);
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...