Dune Core Modules (unstable)

localcoefficients.hh
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
3#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
4#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
5
6#include <cstddef>
7#include <vector>
8
9#include <dune/common/math.hh>
12
13#include <dune/localfunctions/common/localkey.hh>
14
15namespace Dune
16{
17
31 template<class D, class R, unsigned int dim, unsigned int order>
33 {
34 static constexpr unsigned int interiorDofs = dim*binomial(dim+order-2, order-2);
35 static constexpr unsigned int faceDofs = binomial(dim+order-2, order-1);
36
37 static constexpr std::size_t numFaces = 2*dim;
38 static constexpr std::size_t numDofs = numFaces*faceDofs + interiorDofs;
39
40 public:
43 {
44 for (auto j : range(numFaces))
45 for (auto i : range(faceDofs))
46 li[j*faceDofs + i] = LocalKey(j, 1, i);
47
48 for (auto i : range(interiorDofs))
49 li[numFaces*faceDofs + i] = LocalKey(0, 0, i);
50 }
51
53 std::size_t size () const { return numDofs; }
54
56 auto localKey (std::size_t i) const -> const LocalKey& { return li[i]; }
57
58 private:
59 std::vector<LocalKey> li;
60 };
61
62 template<class D, class R, unsigned int dim, unsigned int order>
63 constexpr unsigned int BDFMCubeLocalCoefficients<D, R, dim, order>::interiorDofs;
64
65 template<class D, class R, unsigned int dim, unsigned int order>
66 constexpr unsigned int BDFMCubeLocalCoefficients<D, R, dim, order>::faceDofs;
67
68 template<class D, class R, unsigned int dim, unsigned int order>
69 constexpr std::size_t BDFMCubeLocalCoefficients<D, R, dim, order>::numFaces;
70
71 // template<class D, class R, unsigned int dim, unsigned int order>
72 // constexpr std::size_t BDFMCubeLocalCoefficients<D, R, dim, order>::numDofs;
73
74
75#ifndef DOXYGEN
76 template<class D, class R, unsigned int dim>
77 class BDFMCubeLocalCoefficients<D, R, dim, 0>
78 {
79 static_assert( AlwaysFalse<D>::value,
80 "`BDFMCubeLocalCoefficients` not defined for order 0." );
81 };
82#endif // #ifndef DOXYGEN
83
84} // namespace Dune
85
86#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes.
Definition: localcoefficients.hh:33
BDFMCubeLocalCoefficients()
Standard constructor.
Definition: localcoefficients.hh:42
std::size_t size() const
number of coefficients
Definition: localcoefficients.hh:53
auto localKey(std::size_t i) const -> const LocalKey &
geth i'th index
Definition: localcoefficients.hh:56
Describe position of one degree of freedom.
Definition: localkey.hh:24
Some useful basic math stuff.
Dune namespace.
Definition: alignedallocator.hh:13
static constexpr T binomial(const T &n, const T &k) noexcept
calculate the binomial coefficient n over k as a constexpr
Definition: math.hh:131
Utilities for reduction like operations on ranges.
Traits for type conversions and type information.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Dec 21, 23:30, 2024)