fix: evaluate linear Hex8 response relative to translation
This commit is contained in:
@@ -230,8 +230,14 @@ Result<Hex8Response> Hex8Element::Evaluate(const Vector& u,
|
||||
if (!nonlinear) {
|
||||
response.material_tangent = stiffness_;
|
||||
response.tangent = stiffness_;
|
||||
response.internal_force = stiffness_.Multiply(u);
|
||||
response.strain_energy = 0.5 * u.Dot(response.internal_force);
|
||||
// K0 annihilates uniform translation. Use the same relative field as
|
||||
// strain recovery to avoid cancellation of a large rigid displacement.
|
||||
Vector relative{24U};
|
||||
for (std::size_t a = 0; a < 8; ++a)
|
||||
for (std::size_t i = 0; i < 3; ++i)
|
||||
relative[3U * a + i] = u[3U * a + i] - u[i];
|
||||
response.internal_force = stiffness_.Multiply(relative);
|
||||
response.strain_energy = 0.5 * relative.Dot(response.internal_force);
|
||||
}
|
||||
for (std::size_t g = 0; g < 8; ++g) {
|
||||
const auto& point = points_[g];
|
||||
|
||||
Reference in New Issue
Block a user