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
+10 -1
View File
@@ -395,6 +395,8 @@ TEST(ElementFactory, SolidBindingPreservesThreeComponentsAndReferenceMass) {
EXPECT_EQ(stiffness.Value().values.Rows(), 24U);
auto mass = solid->ComputeMass();
ASSERT_TRUE(mass.HasValue());
ASSERT_EQ(mass.Value().values.Rows(), 24U);
ASSERT_EQ(mass.Value().values.Columns(), 24U);
double total_mass = 0.0;
for (std::size_t a = 0U; a < 8U; ++a) {
for (std::size_t b = 0U; b < 8U; ++b) {
@@ -402,7 +404,14 @@ TEST(ElementFactory, SolidBindingPreservesThreeComponentsAndReferenceMass) {
}
}
EXPECT_NEAR(total_mass, 2.0, 1.0e-13);
EXPECT_NEAR(mass.Value().values(0U, 3U), 2.0 / 54.0, 1.0e-15);
for (std::size_t row = 0U; row < 24U; ++row) {
for (std::size_t column = 0U; column < 24U; ++column) {
if (row == column)
EXPECT_NEAR(mass.Value().values(row, column), 0.25, 1.0e-15);
else
EXPECT_DOUBLE_EQ(mass.Value().values(row, column), 0.0);
}
}
auto response = solid->EvaluateLinear(fesa::Vector{24U});
ASSERT_TRUE(response.HasValue());
for (std::size_t point = 0U; point < 8U; ++point) {