3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TEST_INTERPOLATETEST_HH
4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TEST_INTERPOLATETEST_HH
9#include <dune/common/test/testsuite.hh>
11#include <dune/common/hybridutilities.hh>
13#include <dune/functions/gridfunctions/discreteglobalbasisfunction.hh>
14#include <dune/functions/functionspacebases/interpolate.hh>
17double infinityDiff(
const double& x,
const double& y)
19 return std::fabs(x-y);
22double infinityDiff(
const bool& x,
const bool& y)
24 return std::fabs(x-y);
27template<
class X,
class Y>
28double infinityDiff(
const X& x,
const Y& y)
30 if (x.size() != y.size())
36 diff =
std::max(diff, infinityDiff(xi, yi));
41template<
class Range,
class Basis,
class C>
44 using Coefficients = std::decay_t<C>;
47 double coeffTol = 1e-10;
50 auto fGridFunction = Dune::Functions::makeDiscreteGlobalBasisFunction<Range>(basis, x);
54 const auto& f = fGridFunction;
58 suite.check(infinityDiff(x, y) < coeffTol)
59 <<
"Interpolation of DiscreteGlobalBasisFunction via local operator() differs from original coefficient vector" << std::endl;
A Simple helper class to organize your test suite.
Definition: testsuite.hh:31
Traits for type conversions and type information.
void interpolate(const F &f, const GFS &gfs, XG &xg)
interpolation from a given grid function
Definition: interpolate.hh:177
constexpr void forEach(Range &&range, F &&f)
Range based for loop.
Definition: hybridutilities.hh:256
constexpr auto max
Function object that returns the greater of the given values.
Definition: hybridutilities.hh:484
constexpr decltype(auto) elementAt(Container &&c, Index &&i)
Get element at given position from container.
Definition: hybridutilities.hh:126