Dune Core Modules (2.9.0)

pqkfactory.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-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
7
8#include <map>
9
10#include <dune/geometry/type.hh>
11
12#include <dune/localfunctions/common/virtualinterface.hh>
13#include <dune/localfunctions/common/virtualwrappers.hh>
14
15#include <dune/localfunctions/lagrange/lagrangecube.hh>
16#include <dune/localfunctions/lagrange/lagrangeprism.hh>
17#include <dune/localfunctions/lagrange/lagrangepyramid.hh>
18#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
19#include <dune/localfunctions/lagrange/p0.hh>
20
21namespace Dune
22{
23
28 template<class D, class R, int d, int k>
30 {
32
35 {
36 return nullptr;
37 }
38 };
39
44 template<class D, class R, int k>
46 {
52
55 {
56 if ((gt.isPrism())and (k==1))
58 if ((gt.isPrism())and (k==2))
60 if ((gt.isPyramid())and (k==1))
62 if ((gt.isPyramid())and (k==2))
64 return nullptr;
65 }
66 };
67
68
72 template<class D, class R, int dim, int k>
74 {
80
81
84 {
85 if (k==0)
87
88 if (gt.isSimplex())
90
91 if (gt.isCube())
93
95 }
96 };
97
98
99
110 template<class D, class R, int dim, int k>
112 {
113 protected:
116 typedef typename std::map<GeometryType,FE*> FEMap;
117
118 public:
121
124
127 {
128 typename FEMap::iterator it = other.cache_.begin();
129 typename FEMap::iterator end = other.cache_.end();
130 for(; it!=end; ++it)
131 cache_[it->first] = (it->second)->clone();
132 }
133
135 {
136 typename FEMap::iterator it = cache_.begin();
137 typename FEMap::iterator end = cache_.end();
138 for(; it!=end; ++it)
139 delete it->second;
140 }
141
144 {
145 typename FEMap::const_iterator it = cache_.find(gt);
146 if (it==cache_.end())
147 {
149 if (fe==0)
150 DUNE_THROW(Dune::NotImplemented,"No Pk/Qk like local finite element available for geometry type " << gt << " and order " << k);
151
152 cache_[gt] = fe;
153 return *fe;
154 }
155 return *(it->second);
156 }
157
158 protected:
159 mutable FEMap cache_;
160
161 };
162
163}
164
165#endif
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:125
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition: lagrangecube.hh:711
Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order.
Definition: lagrangeprism.hh:652
Lagrange finite element for 3d pyramids with compile-time polynomial order.
Definition: lagrangepyramid.hh:812
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition: lagrangesimplex.hh:838
class for wrapping a finite element using the virtual interface
Definition: virtualwrappers.hh:240
virtual base class for local finite elements with functions
Definition: virtualinterface.hh:286
Default exception for dummy implementations.
Definition: exceptions.hh:263
The local p0 finite element on all types of reference elements.
Definition: p0.hh:25
A cache that stores all available Pk/Qk like local finite elements for the given dimension and order.
Definition: pqkfactory.hh:112
PQkLocalFiniteElementCache()
Default constructor.
Definition: pqkfactory.hh:123
FE FiniteElementType
Type of the finite elements stored in this cache.
Definition: pqkfactory.hh:120
const FiniteElementType & get(const GeometryType &gt) const
Get local finite element for given GeometryType.
Definition: pqkfactory.hh:143
PQkLocalFiniteElementCache(const PQkLocalFiniteElementCache &other)
Copy constructor.
Definition: pqkfactory.hh:126
#define DUNE_THROW(E, m)
Definition: exceptions.hh:218
bool gt(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
test if first greater than second
Definition: float_cmp.cc:158
Dune namespace.
Definition: alignedallocator.hh:13
static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &gt)
create finite element for given GeometryType
Definition: pqkfactory.hh:54
Factory that only creates dimension specific local finite elements.
Definition: pqkfactory.hh:30
static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &)
create finite element for given GeometryType
Definition: pqkfactory.hh:34
Factory to create any kind of Pk/Qk like element wrapped for the virtual interface.
Definition: pqkfactory.hh:74
static FiniteElementType * create(const GeometryType &gt)
create finite element for given GeometryType
Definition: pqkfactory.hh:83
A unique label for each type of element that can occur in a grid.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Dec 21, 23:30, 2024)