Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MatrixFree ShapeInfo: Move some code to UnivariateShapeData #15905

Merged
merged 1 commit into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
48 changes: 29 additions & 19 deletions include/deal.II/matrix_free/shape_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,35 @@ namespace internal
std::size_t
memory_consumption() const;

/**
* Evaluate the auxiliary polynomial space associated with the Lagrange
* polynomials in points of the given quadrature formula, filling the
* fields shape_[gradients,hessians]_collocation and related
* information.
*/
template <int dim, int spacedim>
void
evaluate_collocation_space(
const FiniteElement<dim, spacedim> &fe,
const Quadrature<1> & quad,
const std::vector<unsigned int> & lexicographic);

/**
* Check whether we have symmetries in the shape values. In that case,
* also fill the shape_???_eo fields.
*/
bool
check_and_set_shapes_symmetric();

/**
* Check whether symmetric 1d basis functions are such that the shape
* values form a diagonal matrix, i.e., the nodal points are collocated
* with the quadrature points. This allows for specialized algorithms
* that save some operations in the evaluation.
*/
bool
check_shapes_collocation() const;

/**
* Encodes the type of element detected at construction. FEEvaluation
* will select the most efficient algorithm based on the given element
Expand Down Expand Up @@ -578,25 +607,6 @@ namespace internal
* quadrature points to represent the correct order.
*/
dealii::Table<2, unsigned int> face_orientations_quad;

private:
/**
* Check whether we have symmetries in the shape values. In that case,
* also fill the shape_???_eo fields.
*/
bool
check_1d_shapes_symmetric(
UnivariateShapeData<Number> &univariate_shape_data);

/**
* Check whether symmetric 1d basis functions are such that the shape
* values form a diagonal matrix, i.e., the nodal points are collocated
* with the quadrature points. This allows for specialized algorithms
* that save some operations in the evaluation.
*/
bool
check_1d_shapes_collocation(
const UnivariateShapeData<Number> &univariate_shape_data) const;
};


Expand Down