76 ref_case < RefinementCase<dim>::isotropic_refinement + 1;
79 const unsigned int nc =
82 for (
unsigned int i = 0; i < nc; ++i)
90 for (
unsigned int i = 0; i < GeometryInfo<dim>::max_children_per_face; ++i)
92 FETools::compute_face_embedding_matrices<dim, double>(*
this,
98 unsigned int target_row = 0;
99 for (
unsigned int d = 0; d < GeometryInfo<dim>::max_children_per_face; ++
d)
100 for (
unsigned int i = 0; i < face_embeddings[
d].m(); ++i)
102 for (
unsigned int j = 0; j < face_embeddings[
d].n(); ++j)
125 std::ostringstream namebuf;
126 namebuf <<
"FE_RaviartThomasNodal<" << dim <<
">(" << this->
degree - 1 <<
")";
128 return namebuf.str();
133 std::unique_ptr<FiniteElement<dim, dim>>
136 return std_cxx14::make_unique<FE_RaviartThomasNodal<dim>>(*this);
154 unsigned int current = 0;
164 QGauss<dim - 1> face_points(deg + 1);
170 for (
unsigned int k = 0;
175 0,
true,
false,
false, this->dofs_per_face));
177 current = this->dofs_per_face * GeometryInfo<dim>::faces_per_cell;
188 for (
unsigned int d = 0;
d < dim; ++
d)
190 std::unique_ptr<QAnisotropic<dim>> quadrature;
194 quadrature = std_cxx14::make_unique<QAnisotropic<dim>>(high);
197 quadrature = std_cxx14::make_unique<QAnisotropic<dim>>(
198 ((
d == 0) ? low : high), ((d == 1) ? low : high));
202 std_cxx14::make_unique<QAnisotropic<dim>>(((d == 0) ? low : high),
203 ((d == 1) ? low : high),
211 for (
unsigned int k = 0; k < quadrature->size(); ++k)
220 std::vector<unsigned int>
226 for (
unsigned int d = 1;
d < dim; ++
d)
227 dofs_per_face *= deg + 1;
230 const unsigned int interior_dofs = dim * deg *
dofs_per_face;
232 std::vector<unsigned int> dpo(dim + 1);
234 dpo[dim] = interior_dofs;
246 return std::vector<bool>();
258 for (
unsigned int d = 2;
d < dim; ++
d)
259 dofs_per_face *= deg + 1;
265 std::vector<bool> ret_val(dofs_per_cell,
false);
278 const unsigned int shape_index,
279 const unsigned int face_index)
const 287 const unsigned int support_face = shape_index / this->
degree;
308 std::vector<double> & nodal_values)
const 323 unsigned int fbase = 0;
325 for (; f < GeometryInfo<dim>::faces_per_cell;
330 nodal_values[fbase + i] = support_point_values[fbase + i](
337 const unsigned int istep = (this->
dofs_per_cell - fbase) / dim;
343 for (
unsigned int i = 0; i < istep; ++i)
345 nodal_values[fbase + i] = support_point_values[fbase + i](f);
370 std::vector<std::pair<unsigned int, unsigned int>>
380 return std::vector<std::pair<unsigned int, unsigned int>>();
382 return std::vector<std::pair<unsigned int, unsigned int>>();
386 return std::vector<std::pair<unsigned int, unsigned int>>();
393 std::vector<std::pair<unsigned int, unsigned int>>
407 return std::vector<std::pair<unsigned int, unsigned int>>();
428 const unsigned int p = this->
degree - 1;
429 const unsigned int q = fe_q_other->degree - 1;
431 std::vector<std::pair<unsigned int, unsigned int>> identities;
434 for (
unsigned int i = 0; i < p + 1; ++i)
435 identities.emplace_back(i, i);
437 else if (p % 2 == 0 && q % 2 == 0)
438 identities.emplace_back(p / 2, q / 2);
446 return std::vector<std::pair<unsigned int, unsigned int>>();
451 return std::vector<std::pair<unsigned int, unsigned int>>();
457 std::vector<std::pair<unsigned int, unsigned int>>
471 return std::vector<std::pair<unsigned int, unsigned int>>();
476 const unsigned int q = fe_q_other->dofs_per_quad;
478 std::vector<std::pair<unsigned int, unsigned int>> identities;
481 for (
unsigned int i = 0; i < p; ++i)
482 identities.emplace_back(i, i);
484 else if (p % 2 != 0 && q % 2 != 0)
485 identities.emplace_back(p / 2, q / 2);
493 return std::vector<std::pair<unsigned int, unsigned int>>();
498 return std::vector<std::pair<unsigned int, unsigned int>>();
507 const unsigned int codim)
const 517 if (this->degree < fe_rt_nodal_other->
degree)
519 else if (this->degree == fe_rt_nodal_other->degree)
527 if (fe_nothing->is_dominating())
575 &x_source_fe) !=
nullptr),
617 double eps = 2
e-13 * this->
degree * (dim - 1);
627 const Point<dim> &p = face_projection.point(i);
631 double matrix_entry =
645 interpolation_matrix(i, j) = matrix_entry;
659 sum += interpolation_matrix(j, i);
671 const unsigned int subface,
679 &x_source_fe) !=
nullptr),
721 double eps = 2
e-13 * this->
degree * (dim - 1);
732 const Point<dim> &p = subface_projection.point(i);
736 double matrix_entry =
750 interpolation_matrix(i, j) = matrix_entry;
764 sum += interpolation_matrix(j, i);
774 #include "fe_raviart_thomas_nodal.inst"
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_quad_dof_identities(const FiniteElement< dim > &fe_other) const override
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
static unsigned int n_polynomials(const unsigned int degree)
std::vector< Point< dim > > generalized_support_points
FullMatrix< double > interface_constraints
static void project_to_subface(const SubQuadrature &quadrature, const unsigned int face_no, const unsigned int subface_no, std::vector< Point< dim >> &q_points, const RefinementCase< dim - 1 > &ref_case=RefinementCase< dim - 1 >::isotropic_refinement)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
FE_RaviartThomasNodal(const unsigned int p)
#define AssertIndexRange(index, range)
const unsigned int dofs_per_quad
const unsigned int degree
const Point< dim > & point(const unsigned int i) const
virtual std::unique_ptr< FiniteElement< dim, dim > > clone() const override
virtual void convert_generalized_support_point_values_to_dof_values(const std::vector< Vector< double >> &support_point_values, std::vector< double > &nodal_values) const override
void invert(const FullMatrix< number2 > &M)
#define AssertThrow(cond, exc)
FullMatrix< double > inverse_node_matrix
std::vector< Point< dim - 1 > > generalized_face_support_points
static std::vector< unsigned int > get_dpo_vector(const unsigned int degree)
virtual bool hp_constraints_are_implemented() const override
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
std::vector< std::vector< FullMatrix< double > > > prolongation
T sum(const T &t, const MPI_Comm &mpi_communicator)
void reinit(const TableIndices< N > &new_size, const bool omit_default_initialization=false)
#define Assert(cond, exc)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
virtual void get_subface_interpolation_matrix(const FiniteElement< dim > &source, const unsigned int subface, FullMatrix< double > &matrix) const override
void initialize_support_points(const unsigned int rt_degree)
#define DEAL_II_NAMESPACE_CLOSE
virtual std::string get_name() const =0
Expression fabs(const Expression &x)
virtual unsigned int face_to_cell_index(const unsigned int face_dof_index, const unsigned int face, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false) const
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim > &fe_other) const override
const unsigned int dofs_per_cell
virtual void get_face_interpolation_matrix(const FiniteElement< dim > &source, FullMatrix< double > &matrix) const override
virtual std::string get_name() const override
static unsigned int n_children(const RefinementCase< dim > &refinement_case)
static Quadrature< dim > project_to_all_faces(const SubQuadrature &quadrature)
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
static void project_to_face(const SubQuadrature &quadrature, const unsigned int face_no, std::vector< Point< dim >> &q_points)
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim > &fe_other, const unsigned int codim=0) const override final
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
unsigned int n_components() const
#define DEAL_II_NAMESPACE_OPEN
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim > &fe_other) const override
const unsigned int dofs_per_face
static ::ExceptionBase & ExcNotImplemented()
static ::ExceptionBase & ExcInternalError()
static std::vector< bool > get_ria_vector(const unsigned int degree)
std::vector< MappingKind > mapping_kind