From 6f607e34f77fbdab59e63ec75b7ca1d9105063ae Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Tue, 31 Jul 2012 22:40:12 +0200 Subject: [PATCH] Simplify NiceFunction::evaluate() --- dune/tectonic/localnonlinearity.hh | 4 +--- dune/tectonic/nicefunction.hh | 4 ++-- src/test-gradient-method-nicefunction.hh | 22 ++++++++++------------ 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/dune/tectonic/localnonlinearity.hh b/dune/tectonic/localnonlinearity.hh index ee3d8164..bb1edb7c 100644 --- a/dune/tectonic/localnonlinearity.hh +++ b/dune/tectonic/localnonlinearity.hh @@ -21,9 +21,7 @@ template <int dimension> class LocalNonlinearity { LocalNonlinearity(shared_ptr<NiceFunction const> func) : func(func) {} double operator()(VectorType const &x) const { - double ret; - func->evaluate(x.two_norm(), ret); - return ret; + return func->evaluate(x.two_norm()); } double regularity(VectorType const &x) const { diff --git a/dune/tectonic/nicefunction.hh b/dune/tectonic/nicefunction.hh index 2c5e793b..39df709b 100644 --- a/dune/tectonic/nicefunction.hh +++ b/dune/tectonic/nicefunction.hh @@ -23,7 +23,7 @@ class NiceFunction { // Whether H(|.|) is smooth at zero bool virtual smoothesNorm() const { return false; } - void virtual evaluate(double const &x, double &y) const { + double virtual evaluate(double x) const { DUNE_THROW(NotImplemented, "evaluation not implemented"); } }; @@ -83,7 +83,7 @@ class RuinaFunction : public NiceFunction { class TrivialFunction : public NiceFunction { public: - void virtual evaluate(double const &x, double &y) const { y = 0; } + double virtual evaluate(double) const { return 0; } double virtual leftDifferential(double) const { return 0; } diff --git a/src/test-gradient-method-nicefunction.hh b/src/test-gradient-method-nicefunction.hh index 7ef9e642..bb80dc7b 100644 --- a/src/test-gradient-method-nicefunction.hh +++ b/src/test-gradient-method-nicefunction.hh @@ -19,7 +19,7 @@ class MyFunction : public NiceFunction { }; class Parabola : public MyFunction { - void virtual evaluate(double const &x, double &y) const { y = x * x; } + double virtual evaluate(double x) const { return x * x; } double virtual leftDifferential(double s) const { return 2 * s; } @@ -36,9 +36,7 @@ class LinearFunction : public MyFunction { public: LinearFunction(double a) : coefficient(a) {} - void virtual evaluate(double const &x, double &y) const { - y = coefficient * x; - } + double virtual evaluate(double x) const { return coefficient * x; } double virtual leftDifferential(double s) const { return coefficient; } @@ -54,8 +52,8 @@ class LinearFunction : public MyFunction { template <int slope> class SampleFunction : public MyFunction { public: - void virtual evaluate(double const &x, double &y) const { - y = (x < 1) ? x : (slope * (x - 1) + 1); + double virtual evaluate(double x) const { + return (x < 1) ? x : (slope * (x - 1) + 1); } double virtual leftDifferential(double s) const { @@ -69,7 +67,7 @@ template <int slope> class SampleFunction : public MyFunction { class SteepFunction : public MyFunction { public: - void virtual evaluate(double const &x, double &y) const { y = 100 * x; } + double virtual evaluate(double x) const { return 100 * x; } double virtual leftDifferential(double s) const { return 100; } @@ -79,10 +77,10 @@ class SteepFunction : public MyFunction { // slope in [n-1,n] is n class HorribleFunction : public MyFunction { public: - void virtual evaluate(double const &x, double &y) const { + double virtual evaluate(double x) const { double const fl = floor(x); double const sum = fl * (fl + 1) / 2; - y = sum + (fl + 1) * (x - fl); + return sum + (fl + 1) * (x - fl); } double virtual leftDifferential(double x) const { @@ -105,14 +103,14 @@ class HorribleFunction : public MyFunction { // slope in [n-1,n] is log(n+1) class HorribleFunctionLogarithmic : public MyFunction { public: - void virtual evaluate(double const &x, double &y) const { - y = 0; + double virtual evaluate(double x) const { + double y = 0; size_t const fl = floor(x); for (size_t i = 1; i <= fl;) y += std::log( ++i); // factorials grow to fast so we compute this incrementally - y += std::log(fl + 2) * (x - fl); + return y + std::log(fl + 2) * (x - fl); } double virtual leftDifferential(double x) const { -- GitLab