Dune-Functions 2.11
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
10#include <dune/common/exceptions.hh>
11#include <dune/common/math.hh>
12
13#include <dune/localfunctions/hierarchical/hierarchicalp1withelementbubble.hh>
14#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble.hh>
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())
55 DUNE_THROW(Dune::NotImplemented,
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())
72 DUNE_THROW(Dune::NotImplemented,
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>
104
106 template<typename R=double>
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
DefaultGlobalBasis< HierarchicalLagrangeWithElementBubblePreBasis< GV, k, R > > HierarchicalLagrangeWithElementBubbleBasis
Basis of a Hierarchical Lagrange finite element space with element bubble functions.
Definition hierarchicallagrangewithelementbubblebasis.hh:125
Definition monomialset.hh:19
Definition monomialset.hh:19
Definition argyrisbasis.hh:926
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
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