From a6ad59e5e83d105bd72d6e61fae92fad7fc3f33b Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Thu, 28 Mar 2013 22:10:49 +0100
Subject: [PATCH] Template parameter can be inferred

---
 src/assemblers.cc      | 14 ++++++--------
 src/assemblers.hh      |  6 ++----
 src/assemblers_tmpl.cc |  4 ++--
 src/one-body-sample.cc |  9 ++++-----
 4 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/src/assemblers.cc b/src/assemblers.cc
index 005ec2ed..ecaf47d8 100644
--- a/src/assemblers.cc
+++ b/src/assemblers.cc
@@ -11,8 +11,7 @@
 #include "assemblers.hh"
 
 // Assembles Neumann boundary term in f
-template <class GridType, class GridView, class LocalVectorType,
-          class AssemblerType>
+template <class GridView, class LocalVectorType, class AssemblerType>
 void assemble_neumann(GridView const &gridView, AssemblerType const &assembler,
                       Dune::BitSetVector<1> const &neumannNodes,
                       Dune::BlockVector<LocalVectorType> &f,
@@ -25,23 +24,22 @@ void assemble_neumann(GridView const &gridView, AssemblerType const &assembler,
   SampleVector[1] = 0;
   ConstantFunction<LocalVectorType, LocalVectorType> const fNeumann(
       SampleVector);
-  NeumannBoundaryAssembler<GridType, LocalVectorType> neumannBoundaryAssembler(
-      fNeumann);
+  NeumannBoundaryAssembler<typename GridView::Grid, LocalVectorType>
+  neumannBoundaryAssembler(fNeumann);
   assembler.assembleBoundaryFunctional(neumannBoundaryAssembler, f,
                                        neumannBoundary);
 }
 
 // Assembles constant 1-function on frictional boundary in nodalIntegrals
-template <class GridType, class GridView, class LocalVectorType,
-          class AssemblerType>
+template <class GridView, class LocalVectorType, class AssemblerType>
 Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>>
 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);
   ConstantFunction<LocalVectorType, Singleton> const constantOneFunction(1);
-  NeumannBoundaryAssembler<GridType, Singleton> frictionalBoundaryAssembler(
-      constantOneFunction);
+  NeumannBoundaryAssembler<typename GridView::Grid, Singleton>
+  frictionalBoundaryAssembler(constantOneFunction);
 
   auto const nodalIntegrals = Dune::make_shared<Dune::BlockVector<Singleton>>();
   assembler.assembleBoundaryFunctional(frictionalBoundaryAssembler,
diff --git a/src/assemblers.hh b/src/assemblers.hh
index d37caf16..ceceddee 100644
--- a/src/assemblers.hh
+++ b/src/assemblers.hh
@@ -12,16 +12,14 @@
 
 #include <dune/tectonic/globalnonlinearity.hh>
 
-template <class GridType, class GridView, class LocalVectorType,
-          class AssemblerType>
+template <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 AssemblerType>
+template <class GridView, class LocalVectorType, class AssemblerType>
 Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>>
 assemble_frictional(GridView const &gridView, AssemblerType const &assembler,
                     Dune::BitSetVector<1> const &frictionalNodes);
diff --git a/src/assemblers_tmpl.cc b/src/assemblers_tmpl.cc
index e7f06cdd..1e42914d 100644
--- a/src/assemblers_tmpl.cc
+++ b/src/assemblers_tmpl.cc
@@ -20,14 +20,14 @@ typedef GridType::LeafGridView GridView;
 typedef P1NodalBasis<GridView, double> P1Basis;
 typedef Assembler<P1Basis, P1Basis> AssemblerType;
 
-template void assemble_neumann<GridType, GridView, SmallVector, AssemblerType>(
+template void assemble_neumann<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, AssemblerType>(
+assemble_frictional<GridView, SmallVector, AssemblerType>(
     GridView const &gridView, AssemblerType const &assembler,
     Dune::BitSetVector<1> const &frictionalNodes);
 
diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index dad7d5eb..ce2d5911 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -320,9 +320,8 @@ int main(int argc, char *argv[]) {
     SumNorm<VectorType> const velocityEnergyNorm(1.0, stiffnessMatrixNorm, 1.0,
                                                  massMatrixNorm);
 
-    auto const nodalIntegrals =
-        assemble_frictional<GridType, GridView, SmallVector>(
-            leafView, p1Assembler, frictionalNodes);
+    auto const nodalIntegrals = assemble_frictional<GridView, SmallVector>(
+        leafView, p1Assembler, frictionalNodes);
 
     // {{{ Initial conditions
     VectorType u_initial(finestSize);
@@ -374,8 +373,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>(leafView, p1Assembler, neumannNodes, _ell,
-                                 neumannFunction, _time);
+      assemble_neumann(leafView, p1Assembler, neumannNodes, _ell,
+                       neumannFunction, _time);
       _ell += gravityFunctional;
     };
 
-- 
GitLab