From 4b154528d2cb7f63867c3b1bab3bd9b59ae772a6 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Tue, 21 Apr 2015 17:10:39 +0200
Subject: [PATCH] [Cleanup] Do not return a shared pointer

---
 dune/tectonic/globalfriction.hh          | 26 ++++++++----------------
 dune/tectonic/globalratestatefriction.hh |  4 ++--
 dune/tectonic/minimisation.hh            |  2 +-
 dune/tectonic/quadraticenergy.hh         |  5 ++---
 4 files changed, 14 insertions(+), 23 deletions(-)

diff --git a/dune/tectonic/globalfriction.hh b/dune/tectonic/globalfriction.hh
index 78ba058d..538eec78 100644
--- a/dune/tectonic/globalfriction.hh
+++ b/dune/tectonic/globalfriction.hh
@@ -27,8 +27,7 @@ template <class Matrix, class Vector> class GlobalFriction {
   double operator()(Vector const &x) const {
     double tmp = 0;
     for (size_t i = 0; i < x.size(); ++i) {
-      auto const res = restriction(i);
-      tmp += (*res)(x[i]);
+      tmp += restriction(i)(x[i]);
     }
     return tmp;
   }
@@ -36,14 +35,11 @@ template <class Matrix, class Vector> class GlobalFriction {
   /*
     Return a restriction of the outer function to the i'th node.
   */
-  std::shared_ptr<LocalFriction<block_size>> virtual restriction(
-      size_t i) const = 0;
+  Friction const virtual &restriction(size_t i) const = 0;
 
   void addHessian(Vector const &v, Matrix &hessian) const {
-    for (size_t i = 0; i < v.size(); ++i) {
-      auto const res = restriction(i);
-      res->addHessian(v[i], hessian[i][i]);
-    }
+    for (size_t i = 0; i < v.size(); ++i)
+      restriction(i).addHessian(v[i], hessian[i][i]);
   }
 
   void directionalDomain(Vector const &, Vector const &,
@@ -58,8 +54,7 @@ template <class Matrix, class Vector> class GlobalFriction {
     subdifferential[0] = subdifferential[1] = 0;
     for (size_t i = 0; i < u.size(); ++i) {
       Dune::Solvers::Interval<double> D;
-      auto const res = restriction(i);
-      res->directionalSubDiff(u[i], v[i], D);
+      restriction(i).directionalSubDiff(u[i], v[i], D);
       subdifferential[0] += D[0];
       subdifferential[1] += D[1];
     }
@@ -71,21 +66,18 @@ template <class Matrix, class Vector> class GlobalFriction {
   }
 
   void addGradient(Vector const &v, Vector &gradient) const {
-    for (size_t i = 0; i < v.size(); ++i) {
-      auto const res = restriction(i);
-      res->addGradient(v[i], gradient[i]);
-    }
+    for (size_t i = 0; i < v.size(); ++i)
+      restriction(i).addGradient(v[i], gradient[i]);
   }
 
   double regularity(size_t i, typename Vector::block_type const &x) const {
-    auto const res = restriction(i);
-    return res->regularity(x);
+    return restriction(i).regularity(x);
   }
 
   ScalarVector coefficientOfFriction(Vector const &x) const {
     ScalarVector ret(x.size());
     for (size_t i = 0; i < x.size(); ++i)
-      ret[i] = restriction(i)->coefficientOfFriction(x[i]);
+      ret[i] = restriction(i).coefficientOfFriction(x[i]);
     return ret;
   }
 
diff --git a/dune/tectonic/globalratestatefriction.hh b/dune/tectonic/globalratestatefriction.hh
index ea53d9fb..64684f2c 100644
--- a/dune/tectonic/globalratestatefriction.hh
+++ b/dune/tectonic/globalratestatefriction.hh
@@ -56,8 +56,8 @@ class GlobalRateStateFriction : public GlobalFriction<Matrix, Vector> {
   /*
     Return a restriction of the outer function to the i'th node.
   */
-  std::shared_ptr<Friction> restriction(size_t i) const override {
-    return restrictions[i];
+  Friction const &restriction(size_t i) const override {
+    return *restrictions[i];
   }
 
 private:
diff --git a/dune/tectonic/minimisation.hh b/dune/tectonic/minimisation.hh
index fcb9106e..7933b7d8 100644
--- a/dune/tectonic/minimisation.hh
+++ b/dune/tectonic/minimisation.hh
@@ -18,7 +18,7 @@ double lineSearch(Functional const &J,
                   typename Functional::LocalVector const &v,
                   Bisection const &bisection) {
   MyDirectionalConvexFunction<typename Functional::Nonlinearity> const JRest(
-      J.alpha * v.two_norm2(), J.b * v, *J.phi, x, v);
+      J.alpha * v.two_norm2(), J.b * v, J.phi, x, v);
   int count;
   return bisection.minimize(JRest, 0.0, 0.0, count);
 }
diff --git a/dune/tectonic/quadraticenergy.hh b/dune/tectonic/quadraticenergy.hh
index f724a1e8..9f3b8c9e 100644
--- a/dune/tectonic/quadraticenergy.hh
+++ b/dune/tectonic/quadraticenergy.hh
@@ -8,12 +8,11 @@ template <class NonlinearityTEMPLATE> class QuadraticEnergy {
   using Nonlinearity = NonlinearityTEMPLATE;
   using LocalVector = typename Nonlinearity::VectorType;
 
-  QuadraticEnergy(double alpha, LocalVector const &b,
-                  std::shared_ptr<Nonlinearity const> phi)
+  QuadraticEnergy(double alpha, LocalVector const &b, Nonlinearity const &phi)
       : alpha(alpha), b(b), phi(phi) {}
 
   double const alpha;
   LocalVector const &b;
-  std::shared_ptr<Nonlinearity const> const phi;
+  Nonlinearity const &phi;
 };
 #endif
-- 
GitLab