From 774bfbcbdd4707c47126724c48feb1b8a4fbef34 Mon Sep 17 00:00:00 2001 From: "KOKO\\Mimi" Date: Wed, 14 Oct 2026 17:19:25 +0900 Subject: [PATCH] perf(hex8): reuse geometric first products within each trial point --- src/fesa/elements/hex8_high_low.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/fesa/elements/hex8_high_low.cpp b/src/fesa/elements/hex8_high_low.cpp index 93c7acd..26c6b8b 100644 --- a/src/fesa/elements/hex8_high_low.cpp +++ b/src/fesa/elements/hex8_high_low.cpp @@ -216,6 +216,12 @@ Result 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 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 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;