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