9#include <compile_time_options.h>
11#include <deal.II/base/config.h>
13#include <deal.II/base/ndarray.h>
14#include <deal.II/base/polynomial.h>
15#include <deal.II/base/utilities.h>
16#include <deal.II/matrix_free/tensor_product_point_kernels.h>
18#include <deal.II/matrix_free/shape_info.h>
32 template <
int dim,
typename Number,
typename Number2,
bool add>
36 const dealii::Point<dim, Number> &p)
38 static_assert(dim >= 0 && dim <= 3,
"Only dim=0,1,2,3 implemented");
45 }
else if (dim == 1) {
46 const auto x0 = Number(1.) - p[0], x1 = p[0];
49 values[0] += value * x0;
50 values[1] += value * x1;
52 values[0] = value * x0;
53 values[1] = value * x1;
55 }
else if (dim == 2) {
56 const auto x0 = Number(1.) - p[0], x1 = p[0], y0 = Number(1.) - p[1],
59 const auto test_value_y0 = value * y0;
60 const auto test_value_y1 = value * y1;
63 values[0] += x0 * test_value_y0;
64 values[1] += x1 * test_value_y0;
65 values[2] += x0 * test_value_y1;
66 values[3] += x1 * test_value_y1;
68 values[0] = x0 * test_value_y0;
69 values[1] = x1 * test_value_y0;
70 values[2] = x0 * test_value_y1;
71 values[3] = x1 * test_value_y1;
73 }
else if (dim == 3) {
74 const auto x0 = Number(1.) - p[0], x1 = p[0], y0 = Number(1.) - p[1],
75 y1 = p[1], z0 = Number(1.) - p[2], z1 = p[2];
77 const auto test_value_z0 = value * z0;
78 const auto test_value_z1 = value * z1;
80 const auto test_value_y00 = test_value_z0 * y0;
81 const auto test_value_y01 = test_value_z0 * y1;
82 const auto test_value_y10 = test_value_z1 * y0;
83 const auto test_value_y11 = test_value_z1 * y1;
86 values[0] += x0 * test_value_y00;
87 values[1] += x1 * test_value_y00;
88 values[2] += x0 * test_value_y01;
89 values[3] += x1 * test_value_y01;
90 values[4] += x0 * test_value_y10;
91 values[5] += x1 * test_value_y10;
92 values[6] += x0 * test_value_y11;
93 values[7] += x1 * test_value_y11;
95 values[0] = x0 * test_value_y00;
96 values[1] = x1 * test_value_y00;
97 values[2] = x0 * test_value_y01;
98 values[3] = x1 * test_value_y01;
99 values[4] = x0 * test_value_y10;
100 values[5] = x1 * test_value_y10;
101 values[6] = x0 * test_value_y11;
102 values[7] = x1 * test_value_y11;
107 template <
bool is_linear,
int dim,
typename Number,
typename Number2>
109 const dealii::ndarray<Number, 2, dim> *shapes,
110 const unsigned int n_shapes,
111 const Number2 &value,
113 const dealii::Point<dim, Number> &p,
118 integrate_add_tensor_product_value_linear<dim, Number, Number2, true>(
121 dealii::internal::integrate_add_tensor_product_value_shapes<dim,
125 shapes, n_shapes, value, values);
131 false>(value, values, p);
133 dealii::internal::integrate_add_tensor_product_value_shapes<dim,
137 shapes, n_shapes, value, values);
void integrate_add_tensor_product_value_linear(const Number2 &value, Number2 *values, const dealii::Point< dim, Number > &p)
void integrate_tensor_product_value(const dealii::ndarray< Number, 2, dim > *shapes, const unsigned int n_shapes, const Number2 &value, Number2 *values, const dealii::Point< dim, Number > &p, const bool do_add)
DEAL_II_ALWAYS_INLINE FT add(const FT &flux_left_ij, const FT &flux_right_ij)