Go to the documentation of this file. 1 #pragma once // Ensure that file is included only once in a single compilation.
18 template <
unsigned int quad_deg>
32 unsigned int amount = 1;
33 for (; 2 * amount - 1 < quad_deg; ++amount)
42 template <
typename return_t>
53 template <
typename return_t>
72 template <
typename return_t =
double>
75 static_assert(
n_points() < 10,
"Amount of points needs to be smaller than 10!");
81 {-heron_root<return_t>(1. / 3.), heron_root<return_t>(1. / 3.)}));
84 std::array<return_t,
n_points()>({-heron_root<return_t>(3. / 5.),
static_cast<return_t
>(0.),
85 heron_root<return_t>(3. / 5.)}));
88 {-heron_root<return_t>(3. / 7. + 2. / 7. * heron_root<return_t>(6. / 5.)),
89 -heron_root<return_t>(3. / 7. - 2. / 7. * heron_root<return_t>(6. / 5.)),
90 heron_root<return_t>(3. / 7. - 2. / 7. * heron_root<return_t>(6. / 5.)),
91 heron_root<return_t>(3. / 7. + 2. / 7. * heron_root<return_t>(6. / 5.))}));
94 {
static_cast<return_t
>(-heron_root<return_t>(5. + 2. * heron_root<return_t>(10. / 7.)) /
96 static_cast<return_t
>(-heron_root<return_t>(5. - 2. * heron_root<return_t>(10. / 7.)) /
98 static_cast<return_t
>(0.),
99 static_cast<return_t
>(heron_root<return_t>(5. - 2. * heron_root<return_t>(10. / 7.)) / 3.),
100 static_cast<return_t
>(heron_root<return_t>(5. + 2. * heron_root<return_t>(10. / 7.)) /
104 {
static_cast<return_t
>(0.6612093864662645),
static_cast<return_t
>(-0.6612093864662645),
105 static_cast<return_t
>(-0.2386191860831969),
static_cast<return_t
>(0.2386191860831969),
106 static_cast<return_t
>(-0.9324695142031521),
static_cast<return_t
>(0.9324695142031521)}));
109 {
static_cast<return_t
>(0.0000000000000000),
static_cast<return_t
>(0.4058451513773972),
110 static_cast<return_t
>(-0.4058451513773972),
static_cast<return_t
>(-0.7415311855993945),
111 static_cast<return_t
>(0.7415311855993945),
static_cast<return_t
>(-0.9491079123427585),
112 static_cast<return_t
>(0.9491079123427585)}));
115 {
static_cast<return_t
>(-0.1834346424956498),
static_cast<return_t
>(0.1834346424956498),
116 static_cast<return_t
>(-0.5255324099163290),
static_cast<return_t
>(0.5255324099163290),
117 static_cast<return_t
>(-0.7966664774136267),
static_cast<return_t
>(0.7966664774136267),
118 static_cast<return_t
>(-0.9602898564975363),
static_cast<return_t
>(0.9602898564975363)}));
121 {
static_cast<return_t
>(0.0000000000000000),
static_cast<return_t
>(-0.8360311073266358),
122 static_cast<return_t
>(0.8360311073266358),
static_cast<return_t
>(-0.9681602395076261),
123 static_cast<return_t
>(0.9681602395076261),
static_cast<return_t
>(-0.3242534234038089),
124 static_cast<return_t
>(0.3123470770400029),
static_cast<return_t
>(0.2606106964029354),
125 static_cast<return_t
>(0.2606106964029354)}));
136 template <
typename return_t =
double>
139 static_assert(
n_points() < 10,
"Amount of points needs to be smaller than 10!");
145 std::array<return_t,
n_points()>({
static_cast<return_t
>(1.),
static_cast<return_t
>(1.)}));
148 static_cast<return_t
>(8. / 9.),
149 static_cast<return_t
>(5. / 9.)}));
152 {
static_cast<return_t
>(1. / 36. * (18. - heron_root<return_t>(30.))),
153 static_cast<return_t
>(1. / 36. * (18. + heron_root<return_t>(30.))),
154 static_cast<return_t
>(1. / 36. * (18. + heron_root<return_t>(30.))),
155 static_cast<return_t
>(1. / 36. * (18. - heron_root<return_t>(30.)))}));
158 {
static_cast<return_t
>(1. / 900. * (322. - 13. * heron_root<return_t>(70.))),
159 static_cast<return_t
>(1. / 900. * (322. + 13. * heron_root<return_t>(70.))),
160 static_cast<return_t
>(1. / 900. * (322. + 190.)),
161 static_cast<return_t
>(1. / 900. * (322. + 13. * heron_root<return_t>(70.))),
162 static_cast<return_t
>(1. / 900. * (322. - 13. * heron_root<return_t>(70.)))}));
165 {
static_cast<return_t
>(0.3607615730481386),
static_cast<return_t
>(0.3607615730481386),
166 static_cast<return_t
>(0.4679139345726910),
static_cast<return_t
>(0.4679139345726910),
167 static_cast<return_t
>(0.1713244923791704),
static_cast<return_t
>(0.1713244923791700)}));
170 {
static_cast<return_t
>(0.4179591836734694),
static_cast<return_t
>(0.3818300505051189),
171 static_cast<return_t
>(0.3818300505051189),
static_cast<return_t
>(0.2797053914892766),
172 static_cast<return_t
>(0.2797053914892766),
static_cast<return_t
>(0.1294849661688697),
173 static_cast<return_t
>(0.1294849661688697)}));
176 {
static_cast<return_t
>(0.3626837833783620),
static_cast<return_t
>(0.3626837833783620),
177 static_cast<return_t
>(0.3137066458778873),
static_cast<return_t
>(0.3137066458778873),
178 static_cast<return_t
>(0.2223810344533745),
static_cast<return_t
>(0.2223810344533745),
179 static_cast<return_t
>(0.1012285362903763),
static_cast<return_t
>(0.1012285362903763)}));
182 {
static_cast<return_t
>(0.3302393550012598),
static_cast<return_t
>(0.1806481606948574),
183 static_cast<return_t
>(0.1806481606948574),
static_cast<return_t
>(0.0812743883615744),
184 static_cast<return_t
>(0.0812743883615744),
static_cast<return_t
>(0.3123470770400029),
185 static_cast<return_t
>(0.3123470770400029),
static_cast<return_t
>(0.2606106964029354),
186 static_cast<return_t
>(0.2606106964029354)}));
constexpr std::array< unsigned short, 3 > dim3
Definition: lexicographic_03.cc:13
Tensor coordinates for a facet of dimension k in the complex of dimension n.
Definition: element.h:38
constexpr std::array< unsigned short, 4 > dim4
Definition: lexicographic_02.cc:13
void test(const TPCC::Slab< n, k, B, S, T > &slab)
Definition: slab_01.cc:16
void test(const TPCC::Slab< n, k, B, S, T > &slab)
Definition: slab_02.cc:13
constexpr std::array< unsigned short, 4 > dim4
Definition: lexicographic_03.cc:14
void test(const TPCC::Slab< n, k, B, S, T > &slab)
Definition: slab_03.cc:13
int main()
Definition: element_01.cc:49
constexpr std::enable_if<(kk > 0), Combination< n, k - 1, T > >::type eliminate(unsigned int i) const
The combination obtained by eliminating the ith element.
Definition: combinations.h:98
index
Definition: check_push_test.py:10
constexpr std::array< unsigned short, 2 > dim2
Definition: slab_03.cc:9
void print_debug(std::ostream &os) const
Print the content of this object for debugging.
Definition: combinations.h:176
constexpr std::array< unsigned short, 2 > dim2
Definition: slab_02.cc:9
const unsigned int block_sizes21[]
Definition: lexicographic_01.cc:14
constexpr std::array< unsigned short, 2 > dim2
Definition: slab_01.cc:12
const char * output_2[]
Definition: combination_02.cc:19
const char * output_2[]
Definition: combination_01.cc:15
void pascal(unsigned int padding=n)
Definition: binomial.cc:92
int main()
Definition: combination_01.cc:58
int main()
Definition: combination_02.cc:61
void test(const TPCC::Element< n, k, T1, T2 > &e)
Definition: element_01.cc:7
const unsigned int block_sizes30[]
Definition: lexicographic_01.cc:17
const char * combination_data_1[]
Definition: binomial.cc:23
const unsigned int block_sizes31[]
Definition: lexicographic_01.cc:18
constexpr std::array< unsigned short, 2 > dim2
Definition: lexicographic_02.cc:11
constexpr std::array< unsigned short, 2 > dim2
Definition: lexicographic_01.cc:23
static constexpr std::array< return_t, n_points()> transform_weights(std::array< return_t, n_points()> weights)
Transform array of quadrature weights for interval to .
Definition: one_dimensional.hxx:54
constexpr std::array< unsigned short, 2 > dim2
Definition: lexicographic_03.cc:12
static constexpr unsigned int index(const Combination< n, k, T > &combi)
The index of a combination within the lexicographic enumeration.
Definition: combinations.h:272
const char ** combination_data[]
Definition: binomial.cc:35
constexpr Bint block_size(Tint block) const
The number of elements in one direction.
Definition: lexicographic.h:128
int main()
Definition: binomial.cc:118
const char ** output_data[]
Definition: combination_02.cc:33
const char ** output_data[]
Definition: combination_01.cc:32
constexpr std::enable_if<(kk< n), Combination< n, k+1, T > >::type add(unsigned int i) const
The combination obtained by adding the element i.
Definition: combinations.h:130
const unsigned int block_sizes32[]
Definition: lexicographic_01.cc:19
unsigned int pascal_data[11][11]
Definition: binomial.cc:9
static constexpr std::array< return_t, n_points()> points()
Gauss–Legendre quadrature points on one-dimensional unit interval.
Definition: one_dimensional.hxx:73
constexpr Bint size() const
The number of elements in this set.
Definition: lexicographic.h:117
const unsigned int size2[]
Definition: lexicographic_01.cc:11
Gauss–Legendre quadrature points and weights in one spatial dimension.
Definition: one_dimensional.hxx:19
static void doit()
Definition: binomial.cc:57
int main()
Definition: lexicographic_03.cc:68
const char * combination_data_3[]
Definition: binomial.cc:28
int main()
Definition: lexicographic_02.cc:61
const char * output_4[]
Definition: combination_01.cc:26
int main()
Definition: lexicographic_01.cc:58
const unsigned int * block_sizes2[]
Definition: lexicographic_01.cc:16
const char * output_4[]
Definition: combination_02.cc:29
const unsigned int block_sizes20[]
Definition: lexicographic_01.cc:13
Contains the functionalities to evaluate and integrate tensor product type polynomials.
Definition: compile_time_tricks.hxx:7
std::ostream & operator<<(std::ostream &os, std::array< T, N > a)
Definition: binomial.cc:39
const unsigned int size3[]
Definition: lexicographic_01.cc:12
static constexpr std::array< return_t, n_points()> transform_points(std::array< return_t, n_points()> points)
Transform array of quadrature points in interval to .
Definition: one_dimensional.hxx:43
void print_mesh(const MESH &mesh)
Definition: lexicographic_03.cc:17
static std::array< unsigned int, n - k > dual(unsigned int index)
The array of numbers (of length n-k) of numbers not in the combination of the given index.
Definition: combinations.h:296
constexpr std::array< unsigned short, 1 > dim1
Definition: lexicographic_02.cc:10
const char * output_0[]
Definition: combination_02.cc:13
constexpr std::array< unsigned short, 1 > dim1
Definition: lexicographic_03.cc:11
void print_mesh(const MESH &mesh)
Definition: lexicographic_02.cc:16
Lexicographic enumeration of the k-dimensional faces in a tensor product chain complex of dimension n...
Definition: lexicographic.h:44
const char * output_5[]
Definition: combination_01.cc:30
static constexpr unsigned int size()
The number of such combinations.
Definition: combinations.h:240
void test_3()
Definition: lexicographic_02.cc:46
void test_3()
Definition: lexicographic_01.cc:43
void test_3()
Definition: lexicographic_03.cc:53
static constexpr unsigned int n_points()
Calculate the amount of quadrature points at compile time.
Definition: one_dimensional.hxx:30
void test()
Definition: combination_01.cc:35
void test()
Definition: combination_02.cc:36
void test_2()
Definition: lexicographic_03.cc:45
const char * combination_data_5[]
Definition: binomial.cc:33
void test_2()
Definition: lexicographic_02.cc:38
void test_2()
Definition: lexicographic_01.cc:27
const char * combination_data_4[]
Definition: binomial.cc:31
constexpr std::array< unsigned short, 1 > dim1
Definition: slab_03.cc:8
constexpr std::array< unsigned short, 1 > dim1
Definition: slab_02.cc:8
constexpr std::array< unsigned short, 1 > dim1
Definition: slab_01.cc:11
const char * combination_data_2[]
Definition: binomial.cc:25
const char * output_3[]
Definition: combination_01.cc:20
T out(unsigned int i) const
The ith element which is not part of the combination in descending order.
Definition: combinations.h:84
const char * output_3[]
Definition: combination_02.cc:25
const unsigned int * block_sizes3[]
Definition: lexicographic_01.cc:21
static std::array< unsigned int, k > value(unsigned int index)
The array of numbers (of length k) in the combination with given index.
Definition: combinations.h:284
const char * combination_data_0[]
Definition: binomial.cc:21
void test_4()
Definition: lexicographic_02.cc:54
void print_debug(std::ostream &os) const
Function for printing the data stored in the element.
Definition: element.h:112
void test_4()
Definition: lexicographic_03.cc:61
constexpr Bint block_size(Tint block) const
The number of elements in one direction.
Definition: slab.h:73
void test_1()
Definition: lexicographic_02.cc:30
constexpr unsigned int fibonacci(unsigned int i)
Definition: element_01.cc:20
void test_1()
Definition: lexicographic_03.cc:37
Definition: combinations.h:195
const unsigned int block_sizes22[]
Definition: lexicographic_01.cc:15
constexpr Element< n, k - 1, Sint, Tint > facet(Tint index) const
Enumeration of the boundary facets of the element.
Definition: element.h:136
static constexpr std::array< return_t, n_points()> weights()
Gauss–Legendre quadrature weights on one-dimensional unit interval.
Definition: one_dimensional.hxx:137
const char * output_1[]
Definition: combination_02.cc:15
constexpr T binomial(T n, T k)
Compute the binomial coefficient n over k.
Definition: combinations.h:17
const char * output_1[]
Definition: combination_01.cc:13
Definition: binomial.cc:55
constexpr std::array< unsigned short, 3 > dim3
Definition: slab_03.cc:10
constexpr std::array< unsigned short, 3 > dim3
Definition: slab_02.cc:10
constexpr std::array< unsigned short, 3 > dim3
Definition: slab_01.cc:13
int main(int, char *[])
Definition: slab_01.cc:69
int main(int, char *[])
Definition: slab_02.cc:63
constexpr Bint size() const
Definition: slab.h:68
constexpr std::array< unsigned short, 3 > dim3
Definition: lexicographic_01.cc:24
const unsigned int block_sizes33[]
Definition: lexicographic_01.cc:20
int main(int, char *[])
Definition: slab_03.cc:64
A slab of thickness one cell cut out of a tensor product chain complex.
Definition: element.h:9
constexpr std::array< unsigned short, 3 > dim3
Definition: lexicographic_02.cc:12