Loading [MathJax]/extensions/tex2jax.js

DUNE-FUNCTIONS (unstable)

hierarchicallagrangewithelementbubblebasis.hh
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
16#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
17#include <dune/functions/functionspacebases/lfeprebasismixin.hh>
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>
62 class HierarchicalLagrangeWithElementBubblePreBasis<GV,2,R>
63 : public LFEPreBasisMixin<GV, HierarchicalP2WithElementBubbleLocalFiniteElement<typename GV::ctype,R,GV::dimension>>
64 {
65 using Base = LFEPreBasisMixin<GV, HierarchicalP2WithElementBubbleLocalFiniteElement<typename GV::ctype,R,GV::dimension>>;
66 public:
67 HierarchicalLagrangeWithElementBubblePreBasis (const GV& gridView) :
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>
100 auto hierarchicalP1B()
101 {
102 return hierarchicalLagrangeWithElementBubble<1,R>();
103 }
104
106 template<typename R=double>
107 auto hierarchicalP2B()
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
Global basis for given pre-basis.
Definition: defaultglobalbasis.hh:50
A pre-basis for a hierarchical basis.
Definition: hierarchicallagrangewithelementbubblebasis.hh:42
A pre-basis mixin class parametrized with a local finite-element and a DOF layout.
Definition: lfeprebasismixin.hh:57
auto hierarchicalLagrangeWithElementBubble()
A factory that can create a HierarchicalLagrangeWithElementBubble pre-basis.
Definition: hierarchicallagrangewithelementbubblebasis.hh:90
Definition: monomialset.hh:19
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Mar 12, 23:28, 2025)