diff --git a/src/averagedistanceassembler.hh b/src/averagedistanceassembler.hh index 60ac52bb642f4425a822f3856aee0c27579cb8ed..6881c9facc619511c6a63b8cf075ac6e248602c1 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 <>