From e73ad88202f218b503c5ba652b8cc335c2891530 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Tue, 26 Mar 2013 11:01:28 +0100
Subject: [PATCH] Use assembleBoundaryFunctional()

---
 src/assemblers.cc      | 19 ++++++++++---------
 src/assemblers.hh      | 12 ++++++++----
 src/assemblers_tmpl.cc | 10 ++++++----
 src/one-body-sample.cc |  8 ++++----
 4 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/src/assemblers.cc b/src/assemblers.cc
index 3b5d298b..005ec2ed 100644
--- a/src/assemblers.cc
+++ b/src/assemblers.cc
@@ -5,15 +5,15 @@
 #include <dune/fufem/boundarypatch.hh>
 #include <dune/fufem/functions/constantfunction.hh>
 #include <dune/fufem/assemblers/localassemblers/neumannboundaryassembler.hh>
-#include <dune/fufem/assemblers/boundaryfunctionalassembler.hh>
 
 #include <dune/tectonic/globalruinanonlinearity.hh>
 
 #include "assemblers.hh"
 
 // Assembles Neumann boundary term in f
-template <class GridType, class GridView, class LocalVectorType, class FEBasis>
-void assemble_neumann(GridView const &gridView, FEBasis const &feBasis,
+template <class GridType, class GridView, class LocalVectorType,
+          class AssemblerType>
+void assemble_neumann(GridView const &gridView, AssemblerType const &assembler,
                       Dune::BitSetVector<1> const &neumannNodes,
                       Dune::BlockVector<LocalVectorType> &f,
                       Dune::VirtualFunction<double, double> const &neumann,
@@ -27,14 +27,15 @@ void assemble_neumann(GridView const &gridView, FEBasis const &feBasis,
       SampleVector);
   NeumannBoundaryAssembler<GridType, LocalVectorType> neumannBoundaryAssembler(
       fNeumann);
-  BoundaryFunctionalAssembler<FEBasis>(feBasis, neumannBoundary)
-      .assemble(neumannBoundaryAssembler, f, true);
+  assembler.assembleBoundaryFunctional(neumannBoundaryAssembler, f,
+                                       neumannBoundary);
 }
 
 // Assembles constant 1-function on frictional boundary in nodalIntegrals
-template <class GridType, class GridView, class LocalVectorType, class FEBasis>
+template <class GridType, class GridView, class LocalVectorType,
+          class AssemblerType>
 Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>>
-assemble_frictional(GridView const &gridView, FEBasis const &feBasis,
+assemble_frictional(GridView const &gridView, AssemblerType const &assembler,
                     Dune::BitSetVector<1> const &frictionalNodes) {
   typedef Dune::FieldVector<double, 1> Singleton;
   BoundaryPatch<GridView> const frictionalBoundary(gridView, frictionalNodes);
@@ -43,8 +44,8 @@ assemble_frictional(GridView const &gridView, FEBasis const &feBasis,
       constantOneFunction);
 
   auto const nodalIntegrals = Dune::make_shared<Dune::BlockVector<Singleton>>();
-  BoundaryFunctionalAssembler<FEBasis>(feBasis, frictionalBoundary)
-      .assemble(frictionalBoundaryAssembler, *nodalIntegrals, true);
+  assembler.assembleBoundaryFunctional(frictionalBoundaryAssembler,
+                                       *nodalIntegrals, frictionalBoundary);
   return nodalIntegrals;
 }
 
diff --git a/src/assemblers.hh b/src/assemblers.hh
index dd2a1cf2..d37caf16 100644
--- a/src/assemblers.hh
+++ b/src/assemblers.hh
@@ -8,18 +8,22 @@
 #include <dune/common/shared_ptr.hh>
 #include <dune/istl/bvector.hh>
 
+#include <dune/fufem/assemblers/assembler.hh>
+
 #include <dune/tectonic/globalnonlinearity.hh>
 
-template <class GridType, class GridView, class LocalVectorType, class FEBasis>
-void assemble_neumann(GridView const &gridView, FEBasis const &feBasis,
+template <class GridType, class GridView, class LocalVectorType,
+          class AssemblerType>
+void assemble_neumann(GridView const &gridView, AssemblerType const &assembler,
                       Dune::BitSetVector<1> const &neumannNodes,
                       Dune::BlockVector<LocalVectorType> &f,
                       Dune::VirtualFunction<double, double> const &neumann,
                       double time);
 
-template <class GridType, class GridView, class LocalVectorType, class FEBasis>
+template <class GridType, class GridView, class LocalVectorType,
+          class AssemblerType>
 Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>>
-assemble_frictional(GridView const &gridView, FEBasis const &feBasis,
+assemble_frictional(GridView const &gridView, AssemblerType const &assembler,
                     Dune::BitSetVector<1> const &frictionalNodes);
 
 template <class MatrixType, class VectorType>
diff --git a/src/assemblers_tmpl.cc b/src/assemblers_tmpl.cc
index 9418d1ba..e7f06cdd 100644
--- a/src/assemblers_tmpl.cc
+++ b/src/assemblers_tmpl.cc
@@ -18,15 +18,17 @@ typedef Dune::BlockVector<SmallVector> VectorType;
 typedef Dune::ALUGrid<DIM, DIM, Dune::simplex, Dune::nonconforming> GridType;
 typedef GridType::LeafGridView GridView;
 typedef P1NodalBasis<GridView, double> P1Basis;
+typedef Assembler<P1Basis, P1Basis> AssemblerType;
 
-template void assemble_neumann<GridType, GridView, SmallVector, P1Basis>(
-    GridView const &gridView, P1Basis const &feBasis,
+template void assemble_neumann<GridType, GridView, SmallVector, AssemblerType>(
+    GridView const &gridView, AssemblerType const &assembler,
     Dune::BitSetVector<1> const &neumannNodes,
     Dune::BlockVector<SmallVector> &f,
     Dune::VirtualFunction<double, double> const &neumann, double time);
+
 template Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>>
-assemble_frictional<GridType, GridView, SmallVector, P1Basis>(
-    GridView const &gridView, P1Basis const &feBasis,
+assemble_frictional<GridType, GridView, SmallVector, AssemblerType>(
+    GridView const &gridView, AssemblerType const &assembler,
     Dune::BitSetVector<1> const &frictionalNodes);
 
 template Dune::shared_ptr<
diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index b7e2a0fa..76b6424b 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -321,8 +321,8 @@ int main(int argc, char *argv[]) {
                                                  massMatrixNorm);
 
     auto const nodalIntegrals =
-        assemble_frictional<GridType, GridView, SmallVector, P1Basis>(
-            leafView, p1Basis, frictionalNodes);
+        assemble_frictional<GridType, GridView, SmallVector>(
+            leafView, p1Assembler, frictionalNodes);
 
     // {{{ Initial conditions
     VectorType u_initial(finestSize);
@@ -376,8 +376,8 @@ int main(int argc, char *argv[]) {
     auto const timesteps = parset.get<size_t>("timeSteps");
     auto const tau = parset.get<double>("endOfTime") / timesteps;
     auto const createRHS = [&](double _time, VectorType &_ell) {
-      assemble_neumann<GridType, GridView, SmallVector, P1Basis>(
-          leafView, p1Basis, neumannNodes, _ell, neumannFunction, _time);
+      assemble_neumann<GridType, GridView, SmallVector>(
+          leafView, p1Assembler, neumannNodes, _ell, neumannFunction, _time);
       _ell += gravityFunctional;
     };
 
-- 
GitLab