From ccd387c253d3f9eff6aa3b9e57d25b5813cd48b7 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Tue, 10 Jan 2012 15:33:46 +0100
Subject: [PATCH] grid: stack->heap

---
 src/one-body-sample.cc | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index e8e4dff0..0cc55e51 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -202,15 +202,15 @@ int main(int argc, char *argv[]) {
     typedef Dune::YaspGrid<dim> GridType;
     Dune::FieldVector<double, dim> const end_points(
         1); // nth dimension (zero-indexed) goes from 0 to end_points[n]
-    GridType grid(
+    auto grid = Dune::make_shared<GridType>(
         end_points,
         Dune::FieldVector<int, dim>(1), // number of elements in each direction
         Dune::FieldVector<bool, dim>(false), // non-periodic in each direction
         0);                                  // zero overlap (whatever that is)
-    grid.globalRefine(refinements);
+    grid->globalRefine(refinements);
 
     typedef GridType::LeafGridView GridView;
-    GridView const leafView = grid.leafView();
+    GridView const leafView = grid->leafView();
     // }}}
 
     // Set up bases
@@ -232,9 +232,11 @@ int main(int argc, char *argv[]) {
     EnergyNorm<OperatorType, VectorType> energyNorm(stiffnessMatrix);
 
     // Set up the boundary
-    Dune::BitSetVector<dim> ignoreNodes(grid.size(grid.maxLevel(), dim), false);
-    Dune::BitSetVector<1> neumannNodes(grid.size(grid.maxLevel(), dim), false);
-    Dune::BitSetVector<1> frictionalNodes(grid.size(grid.maxLevel(), dim),
+    Dune::BitSetVector<dim> ignoreNodes(grid->size(grid->maxLevel(), dim),
+                                        false);
+    Dune::BitSetVector<1> neumannNodes(grid->size(grid->maxLevel(), dim),
+                                       false);
+    Dune::BitSetVector<1> frictionalNodes(grid->size(grid->maxLevel(), dim),
                                           false);
     setup_boundary(leafView, end_points, ignoreNodes, neumannNodes,
                    frictionalNodes);
@@ -244,13 +246,13 @@ int main(int argc, char *argv[]) {
     GenericNonlinearGS<MyBlockProblemType> nonlinearGSStep;
     nonlinearGSStep.ignoreNodes_ = &ignoreNodes;
 
-    VectorType u1(grid.size(grid.maxLevel(), dim));
+    VectorType u1(grid->size(grid->maxLevel(), dim));
     u1 = 0.0; // Has to be zero!
     VectorType u2 = u1;
     VectorType u3 = u1;
     VectorType u4 = u1;
 
-    VectorType u1_diff(grid.size(grid.maxLevel(), dim));
+    VectorType u1_diff(grid->size(grid->maxLevel(), dim));
     u1_diff = 0.0; // Has to be zero!
     VectorType u2_diff = u1_diff;
     VectorType u3_diff = u1_diff;
@@ -271,7 +273,7 @@ int main(int argc, char *argv[]) {
     Dune::shared_ptr<Dune::GlobalNonlinearity<VectorType, OperatorType> const>
     myGlobalNonlinearity;
     assemble_nonlinearity<VectorType, OperatorType>(
-        grid.size(grid.maxLevel(), dim), parset, myGlobalNonlinearity,
+        grid->size(grid->maxLevel(), dim), parset, myGlobalNonlinearity,
         nodalIntegrals);
 
     // {{{ Set up TNNMG solver
@@ -299,7 +301,7 @@ int main(int argc, char *argv[]) {
         refinements);
     for (auto &x : transferOperators)
       x = new CompressedMultigridTransfer<VectorType>;
-    TransferOperatorAssembler<GridType>(grid)
+    TransferOperatorAssembler<GridType>(*grid)
         .assembleOperatorPointerHierarchy(transferOperators);
     linearIterationStep.setTransferOperators(transferOperators);
 
-- 
GitLab