From 38f391a9f1ece1dbc837a05b794fcdbd3ca13d14 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Wed, 10 Feb 2010 21:12:53 +0000
Subject: [PATCH] start a generic implementation

[[Imported from SVN: r5527]]
---
 src/averagedistanceassembler.hh | 40 ++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/src/averagedistanceassembler.hh b/src/averagedistanceassembler.hh
index 60ac52bb..6881c9fa 100644
--- a/src/averagedistanceassembler.hh
+++ b/src/averagedistanceassembler.hh
@@ -7,7 +7,45 @@
 
 template <class TargetSpace>
 class AverageDistanceAssembler
-{};
+{
+    static const int size = TargetSpace::EmbeddedTangentVector::size;
+
+public:
+
+    AverageDistanceAssembler(const std::vector<TargetSpace>& coefficients,
+                             const std::vector<double>& weights)
+        : coefficients_(coefficients),
+          weights_(weights)
+    {}
+
+    double value(const TargetSpace& x) {
+
+        double result = 0;
+        for (size_t i=0; i<coefficients_.size(); i++) {
+            double dist = TargetSpace::distance(coefficients_[i], x);
+            result += 0.5*weights_[i]*dist*dist;
+        }
+
+        return result;
+    }
+
+    void assembleGradient(const TargetSpace& x,
+                          typename TargetSpace::EmbeddedTangentVector& gradient)
+    {
+        DUNE_THROW(Dune::NotImplemented, "assembleGradient");
+    }
+
+    void assembleMatrix(const TargetSpace& x,
+                        Dune::FieldMatrix<double,size,size>& matrix)
+    {
+        DUNE_THROW(Dune::NotImplemented, "assembleMatrix");
+    }
+
+    const std::vector<TargetSpace> coefficients_;
+
+    const std::vector<double> weights_;
+
+};
 
 
 template <>
-- 
GitLab