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