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 φ }; #endif -- GitLab