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