From 131f9cd61c345af56fa67ee3e5cbfda21b9b8c58 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Wed, 14 May 2014 12:14:39 +0000
Subject: [PATCH] Use the transfer operators to determine the sizes of the
 hasObstacle arrays

That works for fe spaces of all orders.

[[Imported from SVN: r9725]]
---
 dune/gfe/riemanniantrsolver.cc | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 5d8ea2c3..2834be94 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -132,25 +132,14 @@ setup(const GridType& grid,
     assembler_->getNeighborsPerVertex(indices);
     indices.exportIdx(*hessianMatrix_);
 
-    // //////////////////////////////////////////////////////////
-    //   Create obstacles
-    // //////////////////////////////////////////////////////////
+    // ////////////////////////////////////
+    //   Create the transfer operators
+    // ////////////////////////////////////
 
-    hasObstacle_.resize(numLevels);
 #if defined THIRD_ORDER || defined SECOND_ORDER
     BasisType basis(grid_->leafGridView());
-    hasObstacle_.back().resize(basis.size(), true);
-
-    for (int i=0; i<hasObstacle_.size()-1; i++)
-        hasObstacle_[i].resize(grid_->size(i+1, gridDim),true);
-#else
-    for (size_t i=0; i<hasObstacle_.size(); i++)
-        hasObstacle_[i].resize(grid_->size(i, gridDim),true);
 #endif
 
-    // ////////////////////////////////////
-    //   Create the transfer operators
-    // ////////////////////////////////////
     for (size_t k=0; k<mmgStep->mgTransfer_.size(); k++)
         delete(mmgStep->mgTransfer_[k]);
 
@@ -179,6 +168,15 @@ setup(const GridType& grid,
         mmgStep->mgTransfer_[i] = newTransferOp;
     }
 #endif
+
+    // //////////////////////////////////////////////////////////
+    //   Create obstacles
+    // //////////////////////////////////////////////////////////
+
+    hasObstacle_.resize(numLevels);
+    hasObstacle_.back().resize(basis.size(), true);
+    for (int i=0; i<hasObstacle_.size()-1; i++)
+        hasObstacle_[i].resize(dynamic_cast<TruncatedCompressedMGTransfer<CorrectionType>* >(mmgStep->mgTransfer_[i])->getMatrix().M(),true);
 }
 
 
-- 
GitLab