From 109bc227613d00d162e6c942f18618f997c7494f Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Thu, 8 Sep 2011 18:00:17 +0200
Subject: [PATCH] Do not inherit from Nonlinearity

Necessitates implementation of directionDomain
---
 src/mynonlinearity.cc | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/src/mynonlinearity.cc b/src/mynonlinearity.cc
index 243baa4e..7c068104 100644
--- a/src/mynonlinearity.cc
+++ b/src/mynonlinearity.cc
@@ -7,24 +7,24 @@
 #include <dune/common/fvector.hh>
 #include <dune/common/fmatrix.hh>
 
-#include <dune/istl/bcrsmatrix.hh>
 #include <dune/istl/bvector.hh>
 
 #include <dune/fufem/interval.hh>
 
-#include <dune/tnnmg/problem-classes/nonlinearity.hh>
-
 #include "properscalarincreasingconvexfunction.hh"
 
+#include <limits>
+
 template <int dimension, class OuterFunction = TrivialFunction>
-class MyNonlinearity
-    : public Nonlinearity<Dune::FieldVector<double, dimension>,
-                          Dune::FieldMatrix<double, dimension, dimension>> {
+class MyNonlinearity {
 public:
   typedef Dune::FieldVector<double, dimension> SmallVector;
   typedef Dune::FieldMatrix<double, dimension, dimension> SmallMatrix;
 
-  void directionalSubDiff(SmallVector u, SmallVector v, Interval<double> &D) {
+  typedef Dune::BlockVector<SmallVector> VectorType;
+  typedef Dune::BlockVector<SmallMatrix> MatrixType;
+
+  void directionalSubDiff(SmallVector u, SmallVector v, Interval<double>& D) {
     if (u == SmallVector(0.0)) {
       D[0] = D[1] = func_.rightDifferential(0);
     } else if (u * v > 0) {
@@ -36,17 +36,11 @@ class MyNonlinearity
     }
   }
 
-  double operator()(const Dune::BlockVector<SmallVector> &) const { return 3; }
-  void addGradient(const Dune::BlockVector<SmallVector> &,
-                   Dune::BlockVector<SmallVector> &) const {}
-  void addHessian(const Dune::BlockVector<SmallVector> &,
-                  Dune::BCRSMatrix<SmallMatrix> &) const {}
-  void addHessianIndices(Dune::MatrixIndexSet &) const {}
-  void setVector(const Dune::BlockVector<SmallVector> &) {}
-  void updateEntry(int, double, int) {}
-  void subDiff(int, double, Interval<double> &, int) const {}
-  double regularity(int, double, int) const { return 3; }
-  void domain(int, Interval<double> &, int) const {}
+  void directionalDomain(const VectorType&, const VectorType&,
+                         Interval<double>& dom) const {
+    dom[0] = std::numeric_limits<double>::min();
+    dom[1] = std::numeric_limits<double>::max();
+  }
 
   OuterFunction func_;
 };
-- 
GitLab