From 7b3241de48f00efc4d65acef0ff23a91d4a80b97 Mon Sep 17 00:00:00 2001 From: Simon Praetorius <simon.praetorius@tu-dresden.de> Date: Thu, 19 Jul 2018 15:04:01 +0200 Subject: [PATCH] resize of gradient cache in local-assemblers added --- src/amdis/assembler/ConvectionDiffusionOperator.hpp | 3 ++- src/amdis/assembler/FirstOrderTestDivTrialvec.hpp | 3 ++- src/amdis/assembler/FirstOrderTestGradTrial.hpp | 3 ++- src/amdis/assembler/FirstOrderTestPartialTrial.hpp | 3 ++- src/amdis/assembler/FirstOrderTestvecGradTrial.hpp | 3 ++- src/amdis/assembler/SecondOrderDivTestvecDivTrialvec.hpp | 9 ++++++--- src/amdis/assembler/SecondOrderGradTestGradTrial.hpp | 9 ++++++--- .../assembler/SecondOrderPartialTestPartialTrial.hpp | 6 ++++-- src/amdis/assembler/StokesOperator.hpp | 3 ++- 9 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/amdis/assembler/ConvectionDiffusionOperator.hpp b/src/amdis/assembler/ConvectionDiffusionOperator.hpp index 388370ab..5a694cfc 100644 --- a/src/amdis/assembler/ConvectionDiffusionOperator.hpp +++ b/src/amdis/assembler/ConvectionDiffusionOperator.hpp @@ -94,7 +94,8 @@ namespace AMDiS // Compute the shape function gradients on the real element using WorldVector = FieldVector<RangeFieldType,Context::dow>; - thread_local std::vector<WorldVector> gradients(shapeGradients.size()); + thread_local std::vector<WorldVector> gradients; + gradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < gradients.size(); ++i) jacobian.mv(shapeGradients[i][0], gradients[i]); diff --git a/src/amdis/assembler/FirstOrderTestDivTrialvec.hpp b/src/amdis/assembler/FirstOrderTestDivTrialvec.hpp index 5cdbeab3..a49618b7 100644 --- a/src/amdis/assembler/FirstOrderTestDivTrialvec.hpp +++ b/src/amdis/assembler/FirstOrderTestDivTrialvec.hpp @@ -76,7 +76,8 @@ namespace AMDiS colLocalFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > colGradients(shapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > colGradients; + colGradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < colGradients.size(); ++i) jacobian.mv(shapeGradients[i][0], colGradients[i]); diff --git a/src/amdis/assembler/FirstOrderTestGradTrial.hpp b/src/amdis/assembler/FirstOrderTestGradTrial.hpp index bccf890d..55aaf203 100644 --- a/src/amdis/assembler/FirstOrderTestGradTrial.hpp +++ b/src/amdis/assembler/FirstOrderTestGradTrial.hpp @@ -74,7 +74,8 @@ namespace AMDiS colLocalFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > colGradients(shapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > colGradients; + colGradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < colGradients.size(); ++i) jacobian.mv(shapeGradients[i][0], colGradients[i]); diff --git a/src/amdis/assembler/FirstOrderTestPartialTrial.hpp b/src/amdis/assembler/FirstOrderTestPartialTrial.hpp index d69dcb68..5c316fb1 100644 --- a/src/amdis/assembler/FirstOrderTestPartialTrial.hpp +++ b/src/amdis/assembler/FirstOrderTestPartialTrial.hpp @@ -79,7 +79,8 @@ namespace AMDiS colLocalFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<RangeFieldType> colPartial(shapeGradients.size()); + thread_local std::vector<RangeFieldType> colPartial; + colPartial.resize(shapeGradients.size()); for (std::size_t i = 0; i < colPartial.size(); ++i) { colPartial[i] = jacobian[comp_][0] * shapeGradients[i][0][0]; for (std::size_t j = 1; j < jacobian.M(); ++j) diff --git a/src/amdis/assembler/FirstOrderTestvecGradTrial.hpp b/src/amdis/assembler/FirstOrderTestvecGradTrial.hpp index d06a44db..e3ffd44e 100644 --- a/src/amdis/assembler/FirstOrderTestvecGradTrial.hpp +++ b/src/amdis/assembler/FirstOrderTestvecGradTrial.hpp @@ -76,7 +76,8 @@ namespace AMDiS colLocalFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > colGradients(shapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > colGradients; + colGradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < colGradients.size(); ++i) jacobian.mv(shapeGradients[i][0], colGradients[i]); diff --git a/src/amdis/assembler/SecondOrderDivTestvecDivTrialvec.hpp b/src/amdis/assembler/SecondOrderDivTestvecDivTrialvec.hpp index 0e841d53..3b4c0c5b 100644 --- a/src/amdis/assembler/SecondOrderDivTestvecDivTrialvec.hpp +++ b/src/amdis/assembler/SecondOrderDivTestvecDivTrialvec.hpp @@ -94,11 +94,13 @@ namespace AMDiS colLocalFE.localBasis().evaluateJacobian(local, colShapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RowFieldType,Context::dow> > rowGradients(rowShapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RowFieldType,Context::dow> > rowGradients; + rowGradients.resize(rowShapeGradients.size()); for (std::size_t i = 0; i < rowGradients.size(); ++i) jacobian.mv(rowShapeGradients[i][0], rowGradients[i]); - thread_local std::vector<Dune::FieldVector<ColFieldType,Context::dow> > colGradients(colShapeGradients.size()); + thread_local std::vector<Dune::FieldVector<ColFieldType,Context::dow> > colGradients; + colGradients.resize(colShapeGradients.size()); for (std::size_t i = 0; i < colGradients.size(); ++i) jacobian.mv(colShapeGradients[i][0], colGradients[i]); @@ -145,7 +147,8 @@ namespace AMDiS localFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients(shapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients; + gradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < gradients.size(); ++i) jacobian.mv(shapeGradients[i][0], gradients[i]); diff --git a/src/amdis/assembler/SecondOrderGradTestGradTrial.hpp b/src/amdis/assembler/SecondOrderGradTestGradTrial.hpp index d8f6ea1d..b85e6a16 100644 --- a/src/amdis/assembler/SecondOrderGradTestGradTrial.hpp +++ b/src/amdis/assembler/SecondOrderGradTestGradTrial.hpp @@ -90,7 +90,8 @@ namespace AMDiS localFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients(shapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients; + gradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < gradients.size(); ++i) jacobian.mv(shapeGradients[i][0], gradients[i]); @@ -133,7 +134,8 @@ namespace AMDiS localFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients(shapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients; + gradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < gradients.size(); ++i) jacobian.mv(shapeGradients[i][0], gradients[i]); @@ -183,7 +185,8 @@ namespace AMDiS localFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients(shapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients; + gradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < gradients.size(); ++i) jacobian.mv(shapeGradients[i][0], gradients[i]); diff --git a/src/amdis/assembler/SecondOrderPartialTestPartialTrial.hpp b/src/amdis/assembler/SecondOrderPartialTestPartialTrial.hpp index 6539acf8..fe18b705 100644 --- a/src/amdis/assembler/SecondOrderPartialTestPartialTrial.hpp +++ b/src/amdis/assembler/SecondOrderPartialTestPartialTrial.hpp @@ -80,14 +80,16 @@ namespace AMDiS colLocalFE.localBasis().evaluateJacobian(local, colShapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<RowFieldType> rowPartial(rowShapeGradients.size()); + thread_local std::vector<RowFieldType> rowPartial; + rowPartial.resize(rowShapeGradients.size()); for (std::size_t i = 0; i < rowPartial.size(); ++i) { rowPartial[i] = jacobian[compTest_][0] * rowShapeGradients[i][0][0]; for (std::size_t j = 1; j < jacobian.cols(); ++j) rowPartial[i] += jacobian[compTest_][j] * rowShapeGradients[i][0][j]; } - thread_local std::vector<ColFieldType> colPartial(colShapeGradients.size()); + thread_local std::vector<ColFieldType> colPartial; + colPartial.resize(colShapeGradients.size()); for (std::size_t i = 0; i < colPartial.size(); ++i) { colPartial[i] = jacobian[compTrial_][0] * colShapeGradients[i][0][0]; for (std::size_t j = 1; j < jacobian.cols(); ++j) diff --git a/src/amdis/assembler/StokesOperator.hpp b/src/amdis/assembler/StokesOperator.hpp index b9dd5032..2bb0de76 100644 --- a/src/amdis/assembler/StokesOperator.hpp +++ b/src/amdis/assembler/StokesOperator.hpp @@ -74,7 +74,8 @@ namespace AMDiS velocityLocalFE.localBasis().evaluateJacobian(local, shapeGradients); // Compute the shape function gradients on the real element - thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients(shapeGradients.size()); + thread_local std::vector<Dune::FieldVector<RangeFieldType,Context::dow> > gradients; + gradients.resize(shapeGradients.size()); for (std::size_t i = 0; i < gradients.size(); ++i) jacobian.mv(shapeGradients[i][0], gradients[i]); -- GitLab