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 i = 0; i < 3; ++i)
|
||||||
for (std::size_t k = 0; k < 3; ++k)
|
for (std::size_t k = 0; k < 3; ++k)
|
||||||
shear_fft[i][k] = HighLow{mu_} * fft[i][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 a = 0; a < 8; ++a)
|
||||||
for (std::size_t b = 0; b < 8; ++b) {
|
for (std::size_t b = 0; b < 8; ++b) {
|
||||||
const auto dot = Dot(gradients[a], gradients[b]);
|
const auto dot = Dot(gradients[a], gradients[b]);
|
||||||
@@ -223,7 +229,7 @@ Result<Hex8HighLowResponse> Hex8Element::EvaluateHighLow(
|
|||||||
if (nonlinear)
|
if (nonlinear)
|
||||||
for (std::size_t j = 0; j < 3; ++j)
|
for (std::size_t j = 0; j < 3; ++j)
|
||||||
for (std::size_t l = 0; l < 3; ++l)
|
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 i = 0; i < 3; ++i)
|
||||||
for (std::size_t k = 0; k < 3; ++k) {
|
for (std::size_t k = 0; k < 3; ++k) {
|
||||||
const auto row = 3U * a + i;
|
const auto row = 3U * a + i;
|
||||||
|
|||||||
Reference in New Issue
Block a user