feat: adopt lumped mass and reduced-coordinate shell HHT

Integrate Hex8 mass verification and fixed-null-basis shell dynamics with numerical and physics handoff evidence. Preserve interrupted reference and full-validation status; full integration validation is deferred until after performance optimization.
This commit is contained in:
KOKO\Mimi
2026-10-13 16:57:19 +09:00
parent ede137c6b4
commit eaa5cbeb21
110 changed files with 15274 additions and 971 deletions
+8 -5
View File
@@ -219,7 +219,7 @@ Result<ElementStiffnessContribution> Hex8Element::ComputeMass() const {
if (!density_)
return Result<ElementStiffnessContribution>::Failure(
Failure("Hex8 mass requires reference density."));
Matrix mass{24U, 24U};
Matrix consistent{24U, 24U};
for (const auto& point : points_)
for (std::size_t a = 0; a < 8; ++a)
for (std::size_t b = 0; b < 8; ++b) {
@@ -229,15 +229,18 @@ Result<ElementStiffnessContribution> Hex8Element::ComputeMass() const {
return Result<ElementStiffnessContribution>::Failure(
Failure("Hex8 reference mass is nonfinite."));
for (std::size_t i = 0; i < 3; ++i)
mass(3U * a + i, 3U * b + i) += value;
consistent(3U * a + i, 3U * b + i) += value;
}
Matrix mass{24U, 24U};
for (std::size_t i = 0; i < 24; ++i)
for (std::size_t j = 0; j < 24; ++j)
if (!std::isfinite(mass(i, j)))
for (std::size_t j = 0; j < 24; ++j) {
if (!std::isfinite(consistent(i, j)))
return Result<ElementStiffnessContribution>::Failure(
Failure("Hex8 accumulated reference mass is nonfinite."));
mass(i, i) += consistent(i, j);
}
for (std::size_t i = 0; i < 24; ++i)
if (mass(i, i) <= 0.0)
if (!std::isfinite(mass(i, i)) || mass(i, i) <= 0.0)
return Result<ElementStiffnessContribution>::Failure(Failure(
"Hex8 reference mass has an unrepresentable positive diagonal."));
return Result<ElementStiffnessContribution>::Success(