Dune Core Modules (2.9.0)

localcoefficients.hh
1 // SPDX-FileCopyrightText: Copyright (C) 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 
15 namespace 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:
42  BDFMCubeLocalCoefficients () : li(numDofs)
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:23
Traits for type conversions and type information.
Some useful basic math stuff.
Dune namespace.
Definition: alignedallocator.hh:13
constexpr static 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.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (Apr 27, 22:29, 2024)