Dune-Fufem 2.11-git
Loading...
Searching...
No Matches
functionintegrator.hh
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright © DUNE-FUFEM Project contributors, see file AUTHORS.md
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
3
4#ifndef FUNCTIONINTEGRATOR_HH
5#define FUNCTIONINTEGRATOR_HH
6
8
10
13
15
20{
21 public:
22
34 template <class GridView, class FunctionType>
35 static auto integrate(const GridView& gv, const FunctionType& integrand, const int quad_order)
36 {
37 using GlobalDomain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate;
38 using LocalDomain = typename GridView::template Codim<0>::Geometry::LocalCoordinate;
40 using FieldType = typename Dune::template FieldTraits<RangeType>::field_type;
41
42 RangeType ret(0.0);
43 RangeType f_pos(0.0);
44
45 auto gridFunctionIntegrand = Dune::Functions::makeGridViewFunction(integrand, gv);
46 auto localIntegrand = localFunction(gridFunctionIntegrand);
47
48 for (const auto& element : elements(gv))
49 {
50 auto&& geometry = element.geometry();
51
52 localIntegrand.bind(element);
53
54 QuadratureRuleKey quadKey(element.type(), quad_order);
55
57
58 // loop over quadrature points
59 for (size_t pt=0; pt < quad.size(); ++pt)
60 {
61 // get quadrature point
62 const auto& quadPos = quad[pt].position();
63
64 // get integration factor
65 const double integrationElement = geometry.integrationElement(quadPos);
66
67 // compute values of function
68 f_pos = localIntegrand(quadPos);
69
70 // add to integral
71 ret.axpy(quad[pt].weight()*integrationElement, f_pos);
72 }
73 }
74
75 return ret;
76 }
77
90 template <class RangeType, class BasisType, class VectorType>
91 static auto integrateDiscreteFunction(const BasisType& basis, const VectorType& integrandCoeff, const int quad_order)
92 {
93 auto integrand = Dune::Functions::makeDiscreteGlobalBasisFunction<RangeType>(basis, integrandCoeff);
94 return integrate(basis.getGridView(), integrand, quad_order);
95 }
96};
97
98
99#endif
100
std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)
provides static methods for numerical integration
Definition functionintegrator.hh:20
static auto integrateDiscreteFunction(const BasisType &basis, const VectorType &integrandCoeff, const int quad_order)
numerically integrates a gridfunction given by a coefficient vector
Definition functionintegrator.hh:91
static auto integrate(const GridView &gv, const FunctionType &integrand, const int quad_order)
numerically integrates a given function
Definition functionintegrator.hh:35
A token that specifies a quadrature rule.
Definition quadraturerulecache.hh:39
static const Dune::QuadratureRule< coord_type, dim > & rule(const Dune::GeometryType &gt, const int order, int refinement)
Definition quadraturerulecache.hh:196