Dune-Fufem 2.11-git
Loading...
Searching...
No Matches
compositequadraturerule.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 COMPOSITE_QUADRATURE_RULE_HH
5#define COMPOSITE_QUADRATURE_RULE_HH
6
13
14
17template <class ct, int dim>
19 public Dune::QuadratureRule<ct,dim>
20{
21 public:
27 {
28
29 typedef Dune::StaticRefinement<Dune::GeometryTypes::simplex(dim).id(),
30 ct,
31 Dune::GeometryTypes::simplex(dim).id(),
32 dim> Refinement;
33
34 int numberOfSubelements = (1<<(dim*refinement));
35 //ct volume = Dune::ReferenceElements<ct,dim>::general(quad.type()).volume()/numberOfSubelements;
36 ct volumeFraction = ct(1.0)/numberOfSubelements;
37
38 auto eSubEnd = Refinement::eEnd(Dune::refinementLevels(refinement));
39 auto eSubIt = Refinement::eBegin(Dune::refinementLevels(refinement));
40
41 for (; eSubIt != eSubEnd; ++eSubIt) {
42
43 for (size_t i=0; i<quad.size(); i++) {
44
45 const Dune::FieldVector<ct,dim>& quadPos = quad[i].position();
46
47 this->push_back(Dune::QuadraturePoint<ct,dim>(eSubIt.geometry().global(quadPos), volumeFraction*quad[i].weight()));
48
49 }
50
51 }
52
53 }
54
55};
56
57#endif
RefinementIntervals refinementLevels(int levels)
void push_back(const MemberType &item)
size_type dim() const
Construct composite quadrature rules for simplex elements.
Definition compositequadraturerule.hh:20
CompositeQuadratureRule(const Dune::QuadratureRule< ct, dim > &quad, int refinement)
Construct composite quadrature rule.
Definition compositequadraturerule.hh:26