DUNE PDELab (git)

dualpq1factory.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 © 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_DUAL_P1_Q1_FACTORY_HH
6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
7
8#include <map>
9
10#include <dune/localfunctions/common/virtualinterface.hh>
11#include <dune/localfunctions/common/virtualwrappers.hh>
12
13#include <dune/localfunctions/dualmortarbasis.hh>
14
15namespace Dune {
16
17template<class D, class R, int dim, bool faceDual=false>
18class DualPQ1LocalFiniteElementCache
19{
20protected:
23 typedef typename DualP1::Traits::LocalBasisType::Traits T;
25 typedef std::map<Dune::GeometryType,FE*> FEMap;
26
27public:
29 typedef FE FiniteElementType;
30
31 ~DualPQ1LocalFiniteElementCache()
32 {
33 typename FEMap::iterator it = cache_.begin();
34 typename FEMap::iterator end = cache_.end();
35 for(; it!=end; ++it)
36 delete it->second;
37 }
38
40 static FE* create(const Dune::GeometryType& gt)
41 {
42 if (gt.isSimplex())
44 if (gt.isCube())
46 return 0;
47 }
48
50 const FiniteElementType& get(const Dune::GeometryType& gt) const
51 {
52 typename FEMap::const_iterator it = cache_.find(gt);
53 if (it==cache_.end())
54 {
55 FiniteElementType* fe = create(gt);
56
57 if (fe==0)
58 DUNE_THROW(Dune::NotImplemented,"No Dual P/Q1 like local finite element available for geometry type " << gt);
59
60 cache_[gt] = fe;
61 return *fe;
62 }
63 return *(it->second);
64 }
65
66protected:
67 mutable FEMap cache_;
68};
69
70} // namespace Dune
71
72#endif // DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
The local dual p1 finite element on simplices.
Definition: dualp1.hh:35
The local dual Q1 finite element on cubes.
Definition: dualq1.hh:42
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:114
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:225
Default exception for dummy implementations.
Definition: exceptions.hh:263
#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
constexpr auto get(std::integer_sequence< T, II... >, std::integral_constant< std::size_t, pos >={})
Return the entry at position pos of the given sequence.
Definition: integersequence.hh:22
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Nov 24, 23:30, 2024)