perf(hex8): reuse geometric first products within each trial point
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user