fix(elements): retain Hex8 Green strain precision at small deformation
This commit is contained in:
@@ -258,12 +258,11 @@ Result<Hex8Response> Hex8Element::Evaluate(const Vector& u,
|
||||
Tensor strain{};
|
||||
for (std::size_t i = 0; i < 3; ++i)
|
||||
for (std::size_t j = 0; j < 3; ++j) {
|
||||
if (nonlinear) {
|
||||
strain[i][j] = 0.5 * (gradient[i][j] + gradient[j][i]);
|
||||
// E = sym(H) + H^T*H/2 avoids subtracting I at tiny strain.
|
||||
if (nonlinear)
|
||||
for (std::size_t k = 0; k < 3; ++k)
|
||||
strain[i][j] += 0.5 * f[k][i] * f[k][j];
|
||||
if (i == j) strain[i][j] -= 0.5;
|
||||
} else
|
||||
strain[i][j] = 0.5 * (gradient[i][j] + gradient[j][i]);
|
||||
strain[i][j] += 0.5 * gradient[k][i] * gradient[k][j];
|
||||
}
|
||||
const double trace = strain[0][0] + strain[1][1] + strain[2][2];
|
||||
Tensor s{};
|
||||
|
||||
Reference in New Issue
Block a user