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