perf(hex8): reuse geometric first products within each trial point

This commit is contained in:
KOKO\Mimi
2026-10-14 17:19:25 +09:00
parent 6d709fd572
commit 774bfbcbdd
+7 -1
View File
@@ -216,6 +216,12 @@ Result<Hex8HighLowResponse> Hex8Element::EvaluateHighLow(
for (std::size_t i = 0; i < 3; ++i)
for (std::size_t k = 0; k < 3; ++k)
shear_fft[i][k] = HighLow{mu_} * fft[i][k];
std::array<Tensor, 8> gradient_stress{};
if (nonlinear)
for (std::size_t a = 0; a < 8; ++a)
for (std::size_t j = 0; j < 3; ++j)
for (std::size_t l = 0; l < 3; ++l)
gradient_stress[a][j][l] = gradients[a][j] * s[l][j];
for (std::size_t a = 0; a < 8; ++a)
for (std::size_t b = 0; b < 8; ++b) {
const auto dot = Dot(gradients[a], gradients[b]);
@@ -223,7 +229,7 @@ Result<Hex8HighLowResponse> Hex8Element::EvaluateHighLow(
if (nonlinear)
for (std::size_t j = 0; j < 3; ++j)
for (std::size_t l = 0; l < 3; ++l)
geo += gradients[a][j] * s[l][j] * gradients[b][l];
geo += gradient_stress[a][j][l] * gradients[b][l];
for (std::size_t i = 0; i < 3; ++i)
for (std::size_t k = 0; k < 3; ++k) {
const auto row = 3U * a + i;