Skip to content

Commit

Permalink
Continue
Browse files Browse the repository at this point in the history
  • Loading branch information
peterrum committed Nov 28, 2021
1 parent 26dea94 commit c3565f8
Showing 1 changed file with 126 additions and 135 deletions.
261 changes: 126 additions & 135 deletions include/deal.II/matrix_free/evaluation_kernels_hanging_nodes.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,16 @@ namespace internal
const Number *DEAL_II_RESTRICT weights,
Number *DEAL_II_RESTRICT values)
{
static constexpr unsigned int max_n_points_1D = 40;

static_assert(structdim == 1 || structdim == 2,
"Only 1D and 2D interpolation implemented");
Number temp[fe_degree != -1 ? fe_degree + 1 : 40];
Number temp[fe_degree != -1 ? fe_degree + 1 : max_n_points_1D];

const unsigned int points =
(fe_degree != -1 ? fe_degree : given_degree) + 1;

AssertIndexRange(points, 40);
AssertIndexRange(points, max_n_points_1D);

const unsigned int stride = Utilities::pow(points, direction);

Expand Down Expand Up @@ -481,8 +483,6 @@ namespace internal
dynamic
};

static constexpr unsigned int max_n_points_1D = 40;

template <typename T1, VectorizationTypes VT>
struct Trait;

Expand Down Expand Up @@ -779,6 +779,8 @@ namespace internal
*DEAL_II_RESTRICT weight,
Number *DEAL_II_RESTRICT values)
{
static constexpr unsigned int max_n_points_1D = 40;

typename Trait<Number, VectorizationType>::value_type
temp[fe_degree != -1 ? (fe_degree + 1) : max_n_points_1D];

Expand Down Expand Up @@ -833,6 +835,8 @@ namespace internal
*DEAL_II_RESTRICT weight,
Number *DEAL_II_RESTRICT values)
{
static constexpr unsigned int max_n_points_1D = 40;

typename Trait<Number, VectorizationType>::value_type
temp[fe_degree != -1 ? (fe_degree + 1) : max_n_points_1D];

Expand Down Expand Up @@ -892,6 +896,8 @@ namespace internal
*DEAL_II_RESTRICT weight,
Number *DEAL_II_RESTRICT values)
{
static constexpr unsigned int max_n_points_1D = 40;

typename Trait<Number, VectorizationType>::value_type
temp[fe_degree != -1 ? (fe_degree + 1) : max_n_points_1D];

Expand Down Expand Up @@ -1427,91 +1433,83 @@ namespace internal
}

private:
const std::array<std::array<std::array<unsigned int, 2>, 2>, 3>
line_array = {
{{{{{points * points * points - points, points *points - points}},
{{points * points * points - points * points, 0}}}},
{{{{points * points * points - points * points + points - 1,
points - 1}},
{{points * points * points - points * points, 0}}}},
{{{{points * points - 1, points - 1}},
{{points * points - points, 0}}}}}};

const std::array<std::array<unsigned int, 2>, 3> face_array = {
const dealii::ndarray<unsigned int, 3, 2, 2> line_array = {
{{{{{points * points * points - points, points *points - points}},
{{points * points * points - points * points, 0}}}},
{{{{points * points * points - points * points + points - 1,
points - 1}},
{{points * points * points - points * points, 0}}}},
{{{{points * points - 1, points - 1}},
{{points * points - points, 0}}}}}};

const dealii::ndarray<unsigned int, 3, 2> face_array = {
{{{points - 1, 0}},
{{points * points - points, 0}},
{{points * points * points - points * points, 0}}}};

const std::array<
std::array<std::array<std::array<unsigned int, 4>, 2>, 2>,
3>
lines_plane_array = {
{{{{{{{points * points - points,
points *points *points - points,
points - 1,
points *points *points - points *points + points - 1}},
{{0,
points *points *points - points *points,
points - 1,
points *points *points - points *points + points - 1}}}},
{{{{points * points - points,
points *points *points - points,
0,
points *points *points - points *points}},
{{0,
points *points *points - points *points,
0,
points *points *points - points *points}}}}}},
{{{{{{points * points * points - points * points,
points *points *points - points,
points - 1,
points *points - 1}},
{{0, points *points - points, points - 1, points *points - 1}}}},
{{{{points * points * points - points * points,
points *points *points - points,
0,
points *points - points}},
{{0, points *points - points, 0, points *points - points}}}}}},
{{{{{{points * points * points - points * points,
points *points *points - points *points + points - 1,
points * points - points,
points * points - 1}},
{{0, points - 1, points *points - points, points *points - 1}}}},
{{{{points * points * points - points * points,
points *points *points - points *points + points - 1,
0,
points - 1}},
{{0, points - 1, 0, points - 1}}}}}}}};

const std::
array<std::array<std::array<std::array<unsigned int, 3>, 2>, 2>, 3>
lines_array = {
{{{{{{{points * points - points,
points *points *points - points *points,
points *points *points - points}},
{{0,
points *points - points,
points *points *points - points}}}},
{{{{0,
points *points *points - points *points,
points *points *points - points}},
{{0,
points *points - points,
points *points *points - points *points}}}}}},
{{{{{{points - 1,
points *points *points - points *points,
points *points *points - points *points + points - 1}},
{{0,
points - 1,
points *points *points - points *points + points - 1}}}},
{{{{0,
points *points *points - points *points,
points *points *points - points *points + points - 1}},
{{0, points - 1, points *points *points - points *points}}}}}},
{{{{{{points - 1, points *points - points, points *points - 1}},
{{0, points - 1, points *points - 1}}}},
{{{{0, points *points - points, points *points - 1}},
{{0, points - 1, points *points - points}}}}}}}};
const dealii::ndarray<unsigned int, 3, 2, 2, 4> lines_plane_array = {
{{{{{{{points * points - points,
points *points *points - points,
points - 1,
points *points *points - points *points + points - 1}},
{{0,
points *points *points - points *points,
points - 1,
points *points *points - points *points + points - 1}}}},
{{{{points * points - points,
points *points *points - points,
0,
points *points *points - points *points}},
{{0,
points *points *points - points *points,
0,
points *points *points - points *points}}}}}},
{{{{{{points * points * points - points * points,
points *points *points - points,
points - 1,
points *points - 1}},
{{0, points *points - points, points - 1, points *points - 1}}}},
{{{{points * points * points - points * points,
points *points *points - points,
0,
points *points - points}},
{{0, points *points - points, 0, points *points - points}}}}}},
{{{{{{points * points * points - points * points,
points *points *points - points *points + points - 1,
points * points - points,
points * points - 1}},
{{0, points - 1, points *points - points, points *points - 1}}}},
{{{{points * points * points - points * points,
points *points *points - points *points + points - 1,
0,
points - 1}},
{{0, points - 1, 0, points - 1}}}}}}}};

const dealii::ndarray<unsigned int, 3, 2, 2, 3> lines_array = {
{{{{{{{points * points - points,
points *points *points - points *points,
points *points *points - points}},
{{0, points *points - points, points *points *points - points}}}},
{{{{0,
points *points *points - points *points,
points *points *points - points}},
{{0,
points *points - points,
points *points *points - points *points}}}}}},
{{{{{{points - 1,
points *points *points - points *points,
points *points *points - points *points + points - 1}},
{{0,
points - 1,
points *points *points - points *points + points - 1}}}},
{{{{0,
points *points *points - points *points,
points *points *points - points *points + points - 1}},
{{0, points - 1, points *points *points - points *points}}}}}},
{{{{{{points - 1, points *points - points, points *points - 1}},
{{0, points - 1, points *points - 1}}}},
{{{{0, points *points - points, points *points - 1}},
{{0, points - 1, points *points - points}}}}}}}};
};

template <bool transpose>
Expand Down Expand Up @@ -1549,16 +1547,14 @@ namespace internal
{
static constexpr unsigned int points = fe_degree + 1;

static constexpr std::array<std::array<std::array<unsigned int, 2>, 2>,
3>
line_array = {
{{{{{points * points * points - points, points * points - points}},
{{points * points * points - points * points, 0}}}},
{{{{points * points * points - points * points + points - 1,
points - 1}},
{{points * points * points - points * points, 0}}}},
{{{{points * points - 1, points - 1}},
{{points * points - points, 0}}}}}};
static constexpr dealii::ndarray<unsigned int, 3, 2, 2> line_array = {
{{{{{points * points * points - points, points * points - points}},
{{points * points * points - points * points, 0}}}},
{{{{points * points * points - points * points + points - 1,
points - 1}},
{{points * points * points - points * points, 0}}}},
{{{{points * points - 1, points - 1}},
{{points * points - points, 0}}}}}};

return line_array[i][j][k];
}
Expand All @@ -1568,10 +1564,10 @@ namespace internal
{
static constexpr unsigned int points = fe_degree + 1;

static constexpr std::array<std::array<unsigned int, 2>, 3> face_array =
{{{{points - 1, 0}},
{{points * points - points, 0}},
{{points * points * points - points * points, 0}}}};
static constexpr dealii::ndarray<unsigned int, 3, 2> face_array = {
{{{points - 1, 0}},
{{points * points - points, 0}},
{{points * points * points - points * points, 0}}}};

return face_array[i][j];
}
Expand All @@ -1584,9 +1580,7 @@ namespace internal
{
static constexpr unsigned int points = fe_degree + 1;

static constexpr std::array<
std::array<std::array<std::array<unsigned int, 4>, 2>, 2>,
3>
static constexpr dealii::ndarray<unsigned int, 3, 2, 2, 4>
lines_plane_array = {
{{{{{{{points * points - points,
points * points * points - points,
Expand Down Expand Up @@ -1645,38 +1639,35 @@ namespace internal
{
static constexpr unsigned int points = fe_degree + 1;

static constexpr std::array<
std::array<std::array<std::array<unsigned int, 3>, 2>, 2>,
3>
lines_array = {
{{{{{{{points * points - points,
points * points * points - points * points,
points * points * points - points}},
{{0,
points * points - points,
points * points * points - points}}}},
{{{{0,
points * points * points - points * points,
points * points * points - points}},
{{0,
points * points - points,
points * points * points - points * points}}}}}},
{{{{{{points - 1,
points * points * points - points * points,
points * points * points - points * points + points - 1}},
{{0,
points - 1,
points * points * points - points * points + points - 1}}}},
{{{{0,
points * points * points - points * points,
points * points * points - points * points + points - 1}},
{{0,
points - 1,
points * points * points - points * points}}}}}},
{{{{{{points - 1, points * points - points, points * points - 1}},
{{0, points - 1, points * points - 1}}}},
{{{{0, points * points - points, points * points - 1}},
{{0, points - 1, points * points - points}}}}}}}};
static constexpr dealii::ndarray<unsigned int, 3, 2, 2, 3> lines_array =
{{{{{{{{points * points - points,
points * points * points - points * points,
points * points * points - points}},
{{0,
points * points - points,
points * points * points - points}}}},
{{{{0,
points * points * points - points * points,
points * points * points - points}},
{{0,
points * points - points,
points * points * points - points * points}}}}}},
{{{{{{points - 1,
points * points * points - points * points,
points * points * points - points * points + points - 1}},
{{0,
points - 1,
points * points * points - points * points + points - 1}}}},
{{{{0,
points * points * points - points * points,
points * points * points - points * points + points - 1}},
{{0,
points - 1,
points * points * points - points * points}}}}}},
{{{{{{points - 1, points * points - points, points * points - 1}},
{{0, points - 1, points * points - 1}}}},
{{{{0, points * points - points, points * points - 1}},
{{0, points - 1, points * points - points}}}}}}}};

return lines_array[i][j][k][l];
}
Expand Down Expand Up @@ -1726,7 +1717,7 @@ namespace internal
static constexpr FEEvaluationImplHangingNodesRunnerTypes
used_runner_type()
{
return (fe_degree == -1 || fe_degree > 2) ?
return ((Number::size() > 2) && (fe_degree == -1 || fe_degree > 2)) ?
FEEvaluationImplHangingNodesRunnerTypes::vectorized :
FEEvaluationImplHangingNodesRunnerTypes::scalar;
}
Expand Down

0 comments on commit c3565f8

Please sign in to comment.