51 {0, 0}, {0, 0}, {1, 0}, {0, 1}, {0, 0},
52 {1, 0}, {0, 1}, {1, 1}, {0.5, 0}, {0, 0.5},
53 {0, 0}, {1, 0}, {0, 1}, {1, 1}, {1. / 3., 0},
54 {2. / 3., 0}, {0, 1. / 3.}, {0, 2. / 3.}, {0.5, 1}, {1, 0.5},
55 {0, 0}, {1, 0}, {0, 1}, {1, 1}, {0.25, 0},
56 {0.5, 0}, {0.75, 0}, {0, 0.25}, {0, 0.5}, {0, 0.75},
57 {1. / 3., 1}, {2. / 3., 1}, {1, 1. / 3.}, {1, 2. / 3.}, {0.5, 0.5}};
66 const double points3d[35][3] = {{0, 0, 0},
92 const double h = 1. /
k;
93 for (
unsigned int i = 0; i < p.size(); ++i)
104 for (
unsigned int i = 0; i < p.size(); ++i)
118 for (
unsigned int i = 0; i < p.size(); ++i)
177 namebuf <<
"FE_DGPMonomial<" << dim <<
">(" << this->degree <<
")";
185std::unique_ptr<FiniteElement<dim, dim>>
188 return std::make_unique<FE_DGPMonomial<dim>>(*this);
212 Assert(m == this->n_dofs_per_cell(),
217 const unsigned int min_mn =
222 for (
unsigned int i = 0; i <
min_mn; ++i)
227 std::vector<Point<dim>> unit_points(this->n_dofs_per_cell());
228 internal::FE_DGPMonomial::generate_unit_points(this->degree, unit_points);
232 for (
unsigned int j = 0;
j <
source_fe.n_dofs_per_cell(); ++
j)
233 for (
unsigned int k = 0;
k < unit_points.
size(); ++
k)
237 this->n_dofs_per_cell());
238 for (
unsigned int j = 0;
j < this->n_dofs_per_cell(); ++
j)
239 for (
unsigned int k = 0;
k < unit_points.
size(); ++
k)
241 this->poly_space->compute_value(
j, unit_points[
k]);
265std::vector<unsigned int>
268 std::vector<unsigned int>
dpo(dim + 1, 0U);
270 for (
unsigned int i = 1; i < dim; ++i)
284 const unsigned int)
const
312 const unsigned int)
const
344std::vector<std::pair<unsigned int, unsigned int>>
351 return std::vector<std::pair<unsigned int, unsigned int>>();
355 return std::vector<std::pair<unsigned int, unsigned int>>();
362std::vector<std::pair<unsigned int, unsigned int>>
369 return std::vector<std::pair<unsigned int, unsigned int>>();
373 return std::vector<std::pair<unsigned int, unsigned int>>();
380std::vector<std::pair<unsigned int, unsigned int>>
382 const unsigned int)
const
387 return std::vector<std::pair<unsigned int, unsigned int>>();
391 return std::vector<std::pair<unsigned int, unsigned int>>();
400 const unsigned int codim)
const
427 if (fe_nothing->is_dominating())
445 const unsigned int face_index)
const
447 return face_index == 1 || (face_index == 0 && this->degree == 0);
455 const unsigned int face_index)
const
458 if (face_index == 1 || face_index == 2)
465 const std::array<unsigned int, 2> degrees =
468 if ((face_index == 0 && degrees[1] == 0) ||
469 (face_index == 3 && degrees[0] == 0))
480 const unsigned int face_index)
const
483 if (face_index == 1 || face_index == 3 || face_index == 4)
490 const std::array<unsigned int, 3> degrees =
493 if ((face_index == 0 && degrees[1] == 0) ||
494 (face_index == 2 && degrees[2] == 0) ||
495 (face_index == 5 && degrees[0] == 0))
514#include "fe_dgp_monomial.inst"
virtual std::unique_ptr< FiniteElement< dim, dim > > clone() const override
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim > &fe_other) const override
static std::vector< unsigned int > get_dpo_vector(const unsigned int degree)
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_quad_dof_identities(const FiniteElement< dim > &fe_other, const unsigned int face_no=0) const override
FE_DGPMonomial(const unsigned int p)
virtual void get_subface_interpolation_matrix(const FiniteElement< dim > &source, const unsigned int subface, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
virtual void get_interpolation_matrix(const FiniteElement< dim > &source, FullMatrix< double > &matrix) const override
virtual void get_face_interpolation_matrix(const FiniteElement< dim > &source, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
virtual std::size_t memory_consumption() const override
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim > &fe_other, const unsigned int codim=0) const override final
virtual bool hp_constraints_are_implemented() const override
virtual std::string get_name() const override
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim > &fe_other) const override
void initialize_restriction()
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
const std::unique_ptr< ScalarPolynomialsBase< dim > > poly_space
std::vector< std::vector< FullMatrix< double > > > restriction
void reinit_restriction_and_prolongation_matrices(const bool isotropic_restriction_only=false, const bool isotropic_prolongation_only=false)
std::vector< std::vector< FullMatrix< double > > > prolongation
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
#define AssertThrow(cond, exc)
@ either_element_can_dominate
@ other_element_dominates
@ neither_element_dominates