From f320e33d9cf3c32ebdb253351c8d760cd5ee2d11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Felix=20M=C3=BCller?= <felix.mueller2@mailbox.tu-dresden.de>
Date: Tue, 3 Apr 2018 14:15:22 +0200
Subject: [PATCH] replaced calls to leafGridView by globalBasis->gridView,
 estimator is now accessed by treepath

---
 src/amdis/Marker.cpp          |  1 +
 src/amdis/ProblemStat.hpp     | 22 ++++++++++++++--------
 src/amdis/ProblemStat.inc.hpp | 10 ++++++----
 3 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/src/amdis/Marker.cpp b/src/amdis/Marker.cpp
index 0679a99b..6f94cf2a 100644
--- a/src/amdis/Marker.cpp
+++ b/src/amdis/Marker.cpp
@@ -18,6 +18,7 @@ namespace AMDiS {
 
     switch (strategy) {
     case 0:  // no refinement/coarsening
+      marker = NULL;
       break;
     case 1:
       msg("Creating global refinement (GR) marker\n");
diff --git a/src/amdis/ProblemStat.hpp b/src/amdis/ProblemStat.hpp
index e0c67b81..221b7239 100644
--- a/src/amdis/ProblemStat.hpp
+++ b/src/amdis/ProblemStat.hpp
@@ -279,13 +279,19 @@ namespace AMDiS
       solution_ = std::make_shared<SystemVector>(*globalBasis_, "solution");
       rhs_ = std::make_shared<SystemVector>(*globalBasis_, "rhs");
 
-      estimates.resize(leafGridView().indexSet().size(0));
-      for (std::size_t i = 0; i < estimates.size(); i++) {
-        estimates[i].resize(nComponents);
-        for (std::size_t j = 0; j < estimates[i].size(); j++) {
+      systemMatrix = std::make_shared<SystemMatrix>(*globalBasis, *globalBasis, "mat");
+      solution = std::make_shared<SystemVector>(*globalBasis, "solution");
+
+      auto localView = globalBasis->localView();
+      forEachNode(localView.tree(), [&,this](auto const& node, auto treePath)
+      {
+        std::string i = to_string(treePath);
+        estimates[i].resize(globalBasis->gridView().indexSet().size(0));
+        for (std::size_t j = 0; j < estimates[i].size(); j++)
           estimates[i][j] = 0.0; // TODO: Remove when estimate() is implemented
-        }
-      }
+      });
+
+      rhs_ = std::make_shared<SystemVector>(*globalBasis_, "rhs");
     }
 
     void createSolver()
@@ -300,7 +306,7 @@ namespace AMDiS
     }
 
     void createEstimator()
-    {/*
+    {/* COPIED FROM AMDiS
       for (std::size_t i = 0, i < nComponents, i++) {
         std::string estName = "";
         Parameters::get(name + "->estimator->name[" + std::to_string(i) + "]", estName);
@@ -400,7 +406,7 @@ namespace AMDiS
 
     /// A vector with the local element error estimates
     /// reverse indexed by [component index][element index]
-    std::vector<std::vector<double> > estimates;
+    std::map<std::string, std::vector<double> > estimates;
 
     /// A block-vector (load-vector) corresponding to the right.hand side
     /// of the equation, filled during assembling
diff --git a/src/amdis/ProblemStat.inc.hpp b/src/amdis/ProblemStat.inc.hpp
index 5dc5787c..307d9cfc 100644
--- a/src/amdis/ProblemStat.inc.hpp
+++ b/src/amdis/ProblemStat.inc.hpp
@@ -142,9 +142,11 @@ void ProblemStat<Traits>::createMarker()
       return;
 
     int i = std::stoi(to_string(treePath)); // TODO: To be removed
-    // replace with treePath once supported
-    marker.push_back(Marker<Traits>::createMarker(
-      componentName, i, estimates[i], componentGrids[i]));
+    // replace i with treePath once supported
+    auto marker_ = Marker<Traits>::createMarker(
+      componentName, i, estimates[std::to_string(i)], componentGrids[i]);
+    if (marker_)
+      marker.push_back(marker_);
 
     // If there is more than one marker, and all components are defined
     // on the same grid, the maximum marking has to be enabled.
@@ -379,7 +381,7 @@ Flag ProblemStat<Traits>::refineMesh(AdaptInfo& adaptInfo)
 
   std::map<typename Grid::LocalIdSet::IdType, double> vertexData;
 //  std::map<typename Grid::LocalIdSet::IdType, double> elementData;
-  const auto& gridView = grid->leafGridView();
+  const auto& gridView = globalBasis->gridView();
   const auto& indexSet = gridView.indexSet();
   const auto& idSet = grid->localIdSet();
 
-- 
GitLab