Dune-Functions 2.12-git
Loading...
Searching...
No Matches
hierarchicallagrangewithelementbubblebasis.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file AUTHORS.md
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
5#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HierarchicalLagrangeWOTHELEMENTBUBBLEBASIS_HH
6#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HierarchicalLagrangeWOTHELEMENTBUBBLEBASIS_HH
7
8#include <type_traits>
9
11#include <dune/common/math.hh>
12
15
18
19#include <dune/geometry/type.hh>
20
21namespace Dune {
22 namespace Functions {
23
24 // *****************************************************************************
25 // Implementation for Hierarchical Lagrange Basis (of order 1-2) with an
26 // element bubble function (of order dim+1).
27 //
28 // - currently only supports simplex grids
29 //
30 // *****************************************************************************
31
41 template<typename GV, int k, typename R=double>
43
44 template<typename GV, typename R>
46 : public LFEPreBasisMixin<GV, HierarchicalP1WithElementBubbleLocalFiniteElement<typename GV::ctype,R,GV::dimension>>
47 {
49 public:
51 Base(gridView, [](GeometryType gt, int) { return (gt.isVertex() || gt.dim() == GV::dimension) ? 1 : 0; })
52 {
53 for (auto gt : gridView.indexSet().types(0)) {
54 if (!gt.isSimplex())
56 "Hierarchical Lagrange basis only implemented for simplex grids.");
57 }
58 }
59 };
60
61 template<typename GV, typename R>
63 : public LFEPreBasisMixin<GV, HierarchicalP2WithElementBubbleLocalFiniteElement<typename GV::ctype,R,GV::dimension>>
64 {
66 public:
68 Base(gridView, [](GeometryType gt, int) { return (gt.dim() <= 1 || gt.dim() == GV::dimension) ? 1 : 0; })
69 {
70 for (auto gt : gridView.indexSet().types(0)) {
71 if (!gt.isSimplex())
73 "Hierarchical Lagrange basis only implemented for simplex grids.");
74 }
75 }
76 };
77
78
79 namespace BasisFactory {
80
89 template<int k, typename R=double>
91 {
92 static_assert(0 < k && k <= 2);
93 return [](const auto& gridView) {
94 return HierarchicalLagrangeWithElementBubblePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
95 };
96 }
97
99 template<typename R=double>
101 {
102 return hierarchicalLagrangeWithElementBubble<1,R>();
103 }
104
106 template<typename R=double>
108 {
109 return hierarchicalLagrangeWithElementBubble<2,R>();
110 }
111
112 } // end namespace BasisFactory
113
124 template<typename GV, int k, typename R=double>
126
127 } // end namespace Functions
128} // end namespace Dune
129
130#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HierarchicalLagrangeWOTHELEMENTBUBBLEBASIS_HH
auto hierarchicalLagrangeWithElementBubble()
A factory that can create a HierarchicalLagrangeWithElementBubble pre-basis.
Definition hierarchicallagrangewithelementbubblebasis.hh:90
auto hierarchicalP2B()
Explicit factory for k=2 for the HierarchicalLagrangeWithElementBubblePreBasis pre-basis.
Definition hierarchicallagrangewithelementbubblebasis.hh:107
auto hierarchicalP1B()
Explicit factory for k=1 for the HierarchicalLagrangeWithElementBubblePreBasis pre-basis.
Definition hierarchicallagrangewithelementbubblebasis.hh:100
#define DUNE_THROW(E,...)
Global basis for given pre-basis.
Definition defaultglobalbasis.hh:53
A pre-basis for a hierarchical basis.
Definition hierarchicallagrangewithelementbubblebasis.hh:42
HierarchicalLagrangeWithElementBubblePreBasis(const GV &gridView)
Definition hierarchicallagrangewithelementbubblebasis.hh:50
HierarchicalLagrangeWithElementBubblePreBasis(const GV &gridView)
Definition hierarchicallagrangewithelementbubblebasis.hh:67
A pre-basis mixin class parametrized with a local finite-element and a DOF layout.
Definition lfeprebasismixin.hh:57