From 9580518cf57e07615c89c3ae53a3eff151fde3a9 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Mon, 19 Sep 2011 19:10:45 +0200 Subject: [PATCH] Make NiceFunction a proper (ctor-)parameter --- src/mynonlinearity.hh | 7 ++++--- src/samplefunctional.hh | 6 ++++-- src/test-gradient-method.cc | 9 ++++++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/mynonlinearity.hh b/src/mynonlinearity.hh index d4e4bc74..31bfb287 100644 --- a/src/mynonlinearity.hh +++ b/src/mynonlinearity.hh @@ -13,8 +13,7 @@ #include "nicefunction.hh" namespace Dune { -template <int dimension, class OuterFunction = Dune::TrivialFunction> -class MyNonlinearity { +template <int dimension> class MyNonlinearity { public: typedef Dune::FieldVector<double, dimension> SmallVector; typedef Dune::FieldMatrix<double, dimension, dimension> SmallMatrix; @@ -22,6 +21,8 @@ class MyNonlinearity { typedef SmallVector VectorType; typedef SmallMatrix MatrixType; + MyNonlinearity(NiceFunction const &func) : func_(func) {} + double operator()(VectorType const x) const { double ret; func_.evaluate(x.two_norm(), ret); @@ -65,7 +66,7 @@ class MyNonlinearity { } private: - OuterFunction func_; + NiceFunction const &func_; }; } #endif diff --git a/src/samplefunctional.hh b/src/samplefunctional.hh index 97fad3ed..65c0d9f7 100644 --- a/src/samplefunctional.hh +++ b/src/samplefunctional.hh @@ -20,9 +20,11 @@ class SampleFunctional { typedef Dune::FieldVector<double, dimension> SmallVector; typedef Dune::FieldMatrix<double, dimension, dimension> SmallMatrix; - typedef MyNonlinearity<dimension, Function> NonlinearityType; + typedef MyNonlinearity<dimension> NonlinearityType; - SampleFunctional(SmallMatrix _A, SmallVector _b) : A(_A), b(_b) {} + SampleFunctional(SmallMatrix _A, SmallVector _b, + MyNonlinearity<dimension> _phi) + : A(_A), b(_b), phi(_phi) {} double operator()(const SmallVector v) const { SmallVector y; diff --git a/src/test-gradient-method.cc b/src/test-gradient-method.cc index 72c243d4..d0aaa699 100644 --- a/src/test-gradient-method.cc +++ b/src/test-gradient-method.cc @@ -41,7 +41,8 @@ void testSampleFunction() { b[0] = 1; b[1] = 2; - SampleFunctional J(A, b); + Dune::SampleFunction f; + SampleFunctional J(A, b, Dune::MyNonlinearity<dim>(f)); SampleFunctional::SmallVector start = b; start *= 17; @@ -88,7 +89,8 @@ void testSampleFunctionNonsmooth() { b[0] = 1; b[1] = 2; - SampleFunctional J(A, b); + Dune::SampleFunction f; + SampleFunctional J(A, b, Dune::MyNonlinearity<dim>(f)); SampleFunctional::SmallVector start; SampleFunctional::SmallVector error; @@ -149,7 +151,8 @@ void testTrivialFunction() { b[0] = 1; b[1] = 2; - SampleFunctional J(A, b); + Dune::TrivialFunction f; + SampleFunctional J(A, b, Dune::MyNonlinearity<dim>(f)); SampleFunctional::SmallVector start = b; start *= 17; -- GitLab