From 54678960896741f2f301dc190ff55823c1425370 Mon Sep 17 00:00:00 2001
From: Simon Praetorius <simon.praetorius@tu-dresden.de>
Date: Thu, 14 Mar 2019 11:32:36 +0100
Subject: [PATCH] make amdis compatible with dune 2.7, i.e. rewrite
 filleBoundaryCondition by passing a treepath additionally

---
 src/amdis/BoundaryCondition.hpp | 4 ++--
 src/amdis/DirichletBC.hpp       | 4 ++--
 src/amdis/DirichletBC.inc.hpp   | 8 ++++----
 src/amdis/PeriodicBC.hpp        | 4 ++--
 src/amdis/PeriodicBC.inc.hpp    | 4 ++--
 src/amdis/ProblemStat.inc.hpp   | 8 ++++----
 src/amdis/ProblemStatTraits.hpp | 1 -
 7 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/src/amdis/BoundaryCondition.hpp b/src/amdis/BoundaryCondition.hpp
index e3a231aa..1b10038f 100644
--- a/src/amdis/BoundaryCondition.hpp
+++ b/src/amdis/BoundaryCondition.hpp
@@ -26,8 +26,8 @@ namespace AMDiS
     template <class RowBasis, class ColBasis>
     void init(RowBasis const& rowBasis, ColBasis const& colBasis) { /* do nothing */ }
 
-    template <class Matrix, class X, class B, class RN, class CN>
-    void fillBoundaryCondition(Matrix& A, X& x, B& b, RN const& rowNode, CN const& colNode) { /* do nothing */ }
+    template <class Matrix, class X, class B, class RN, class RTP, class CN, class CTP>
+    void fillBoundaryCondition(Matrix& A, X& x, B& b, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath) { /* do nothing */ }
 
   protected:
     std::shared_ptr<BoundaryManagerBase const> boundaryManager_{nullptr};
diff --git a/src/amdis/DirichletBC.hpp b/src/amdis/DirichletBC.hpp
index df1947d1..c097c9bd 100644
--- a/src/amdis/DirichletBC.hpp
+++ b/src/amdis/DirichletBC.hpp
@@ -73,8 +73,8 @@ namespace AMDiS
      * \tparam RN   RowNode
      * \tparam CN   ColNode
      **/
-    template <class Mat, class Sol, class Rhs, class RN, class CN>
-    void fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode);
+    template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP>
+    void fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath);
 
   private:
     Dune::Std::optional<std::function<bool(Domain)>> predicate_;
diff --git a/src/amdis/DirichletBC.inc.hpp b/src/amdis/DirichletBC.inc.hpp
index 69f873cc..af7e85ff 100644
--- a/src/amdis/DirichletBC.inc.hpp
+++ b/src/amdis/DirichletBC.inc.hpp
@@ -28,15 +28,15 @@ init(RB const& rowBasis, CB const& colBasis)
 
 
 template <class D, class R>
-  template <class Mat, class Sol, class Rhs, class RN, class CN>
+  template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP>
 void DirichletBC<D,R>::
-fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode)
+fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath)
 {
   auto columns = Constraints<Mat>::dirichletBC(matrix, dirichletNodes_);
 
   Dune::Hybrid::ifElse(std::is_same<RangeType_t<RN>, R>{},
     [&](auto id) {
-      auto subBasis = Dune::Functions::subspaceBasis(rhs.basis(), rowNode.treePath());
+      auto subBasis = Dune::Functions::subspaceBasis(rhs.basis(), rowTreePath);
       Dune::Functions::interpolate(subBasis, rhs, values_, dirichletNodes_);
     });
 
@@ -46,7 +46,7 @@ fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, C
 
   Dune::Hybrid::ifElse(std::is_same<RangeType_t<CN>, R>{},
     [&](auto id) {
-      auto subBasis = Dune::Functions::subspaceBasis(solution.basis(), colNode.treePath());
+      auto subBasis = Dune::Functions::subspaceBasis(solution.basis(), colTreePath);
       Dune::Functions::interpolate(subBasis, solution, values_, dirichletNodes_);
     });
 }
diff --git a/src/amdis/PeriodicBC.hpp b/src/amdis/PeriodicBC.hpp
index 4b8229e5..c4253a2f 100644
--- a/src/amdis/PeriodicBC.hpp
+++ b/src/amdis/PeriodicBC.hpp
@@ -65,8 +65,8 @@ namespace AMDiS
     template <class RB, class CB>
     void init(RB const& rowBasis, CB const& colBasis);
 
-    template <class Mat, class Sol, class Rhs, class RN, class CN>
-    void fillBoundaryCondition(Mat& A, Sol& x, Rhs& b, RN const& rowNode, CN const& colNode);
+    template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP>
+    void fillBoundaryCondition(Mat& A, Sol& x, Rhs& b, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath);
 
     auto const& associations() const
     {
diff --git a/src/amdis/PeriodicBC.inc.hpp b/src/amdis/PeriodicBC.inc.hpp
index 7c5ebbf1..104b47f3 100644
--- a/src/amdis/PeriodicBC.inc.hpp
+++ b/src/amdis/PeriodicBC.inc.hpp
@@ -231,9 +231,9 @@ coords(Node const& tree, std::vector<std::size_t> const& localIndices) const
 
 
 template <class D, class MI>
-  template <class Mat, class Sol, class Rhs, class RN, class CN>
+  template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP>
 void PeriodicBC<D,MI>::
-fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode)
+fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath)
 {
   Constraints<Mat>::periodicBC(matrix, periodicNodes_, associations_);
 
diff --git a/src/amdis/ProblemStat.inc.hpp b/src/amdis/ProblemStat.inc.hpp
index a7786ad9..4e4f89bb 100644
--- a/src/amdis/ProblemStat.inc.hpp
+++ b/src/amdis/ProblemStat.inc.hpp
@@ -456,13 +456,13 @@ buildAfterAdapt(AdaptInfo& /*adaptInfo*/, Flag /*flag*/, bool asmMatrix, bool as
   systemMatrix_->finish(asmMatrix);
   rhs_->finish(asmVector);
 
-  for_each_node(localView.tree(), [&,this](auto const& rowNode, auto) {
-    for_each_node(localView.tree(), [&,this](auto const& colNode, auto) {
+  for_each_node(localView.tree(), [&,this](auto const& rowNode, auto row_tp) {
+    for_each_node(localView.tree(), [&,this](auto const& colNode, auto col_tp) {
       // finish boundary condition
       for (auto bc : dirichletBCs_[rowNode][colNode])
-        bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, colNode);
+        bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, row_tp, colNode, col_tp);
       for (auto bc : periodicBCs_[rowNode][colNode])
-        bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, colNode);
+        bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, row_tp, colNode, col_tp);
     });
   });
 
diff --git a/src/amdis/ProblemStatTraits.hpp b/src/amdis/ProblemStatTraits.hpp
index 27a4610d..432be6f0 100644
--- a/src/amdis/ProblemStatTraits.hpp
+++ b/src/amdis/ProblemStatTraits.hpp
@@ -4,7 +4,6 @@
 #include <dune/functions/functionspacebases/compositebasis.hh>
 #include <dune/functions/functionspacebases/lagrangebasis.hh>
 #include <dune/functions/functionspacebases/powerbasis.hh>
-#include <dune/functions/functionspacebases/pqknodalbasis.hh>
 #include <dune/grid/yaspgrid.hh>
 
 #include <amdis/common/Logical.hpp>
-- 
GitLab