version 3.11-dev
pq2hierarchicalfecache.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
12#ifndef DUMUX_DISCRETIZATION_PQ2_HIERARCHICAL_FECACHE_HH
13#define DUMUX_DISCRETIZATION_PQ2_HIERARCHICAL_FECACHE_HH
14
15#include <memory>
16
17#include <dune/common/exceptions.hh>
18#include <dune/geometry/type.hh>
19
20#include <dune/localfunctions/common/virtualinterface.hh>
21#include <dune/localfunctions/common/virtualwrappers.hh>
22
24
25namespace Dumux {
26
27template< class CoordScalar, class Scalar, unsigned int dim>
29{
30 static_assert(dim == 2 || dim == 3, "P2/Q2 hierarchical FE spaces only implemented for 2D and 3D grids");
31
32 using P2Hierarchical = Dumux::PQ2HierarchicalLocalFiniteElement<CoordScalar, Scalar, dim, Dune::GeometryTypes::simplex(dim).toId()>;
33 using Q2Hierarchical = Dumux::PQ2HierarchicalLocalFiniteElement<CoordScalar, Scalar, dim, Dune::GeometryTypes::cube(dim).toId()>;
34
35public:
36 using FiniteElementType = Dune::LocalFiniteElementVirtualInterface<typename P2Hierarchical::Traits::LocalBasisType::Traits>;
37
39 : p2HierarchicalBasis_(std::make_unique<Dune::LocalFiniteElementVirtualImp<P2Hierarchical>>(P2Hierarchical{}))
40 , q2HierarchicalBasis_(std::make_unique<Dune::LocalFiniteElementVirtualImp<Q2Hierarchical>>(Q2Hierarchical{}))
41 {}
42
44 const FiniteElementType& get(const Dune::GeometryType& gt) const
45 {
46 if (gt.isSimplex())
47 return *p2HierarchicalBasis_;
48 if (gt.isCube())
49 return *q2HierarchicalBasis_;
50 else
51 DUNE_THROW(Dune::NotImplemented, "P2/Q2 hierarchical local finite element for geometry type " << gt);
52 }
53
54private:
55 std::unique_ptr<FiniteElementType> p2HierarchicalBasis_;
56 std::unique_ptr<FiniteElementType> q2HierarchicalBasis_;
57};
58
59} // end namespace Dumux
60
61#endif
Definition: pq2hierarchicalfecache.hh:29
const FiniteElementType & get(const Dune::GeometryType &gt) const
Get local finite element for given GeometryType.
Definition: pq2hierarchicalfecache.hh:44
Dune::LocalFiniteElementVirtualInterface< typename P2Hierarchical::Traits::LocalBasisType::Traits > FiniteElementType
Definition: pq2hierarchicalfecache.hh:36
PQ2HierarchicalFECache()
Definition: pq2hierarchicalfecache.hh:38
Hierarchical P2/Q2 finite element.
Definition: pq2hierarchicallocalfiniteelement.hh:193
Definition: adapt.hh:17
Definition: common/pdesolver.hh:24
P2/Q2 hierarchical local finite element.