16 #include <deal.II/base/config.h> 17 #include <deal.II/base/tensor_product_polynomials.h> 18 #include <deal.II/base/quadrature_lib.h> 19 #include <deal.II/base/qprojector.h> 20 #include <deal.II/fe/fe_poly_face.h> 21 #include <deal.II/fe/fe_q.h> 22 #include <deal.II/fe/fe_nothing.h> 23 #include <deal.II/fe/fe_tools.h> 24 #include <deal.II/fe/fe_trace.h> 30 DEAL_II_NAMESPACE_OPEN
34 template <
int dim,
int spacedim>
40 std::vector<bool>(1,true)),
44 ExcMessage (
"FE_Trace can only be used for polynomial degrees " 45 "greater than zero"));
58 template <
int dim,
int spacedim>
67 template <
int dim,
int spacedim>
75 std::ostringstream namebuf;
76 namebuf <<
"FE_TraceQ<" 78 <<
">(" << this->
degree <<
")";
85 template <
int dim,
int spacedim>
88 const unsigned int face_index)
const 91 ExcIndexRange (shape_index, 0, this->dofs_per_cell));
100 return fe_q.has_support_on_face (shape_index, face_index);
105 template <
int dim,
int spacedim>
106 std::pair<Table<2,bool>, std::vector<unsigned int> >
111 constant_modes(0,i) =
true;
112 return std::pair<Table<2,bool>, std::vector<unsigned int> >
113 (constant_modes, std::vector<unsigned int>(1, 0));
118 template <
int dim,
int spacedim>
119 std::vector<unsigned int>
126 std::vector<unsigned int> dpo(dim+1, 1U);
129 for (
unsigned int i=1; i<dim; ++i)
130 dpo[i] = dpo[i-1]*(deg-1);
136 template <
int dim,
int spacedim>
140 return fe_q.hp_constraints_are_implemented ();
144 template <
int dim,
int spacedim>
152 if (this->degree < fe_q_other->
degree)
153 return FiniteElementDomination::this_element_dominates;
154 else if (this->degree == fe_q_other->degree)
155 return FiniteElementDomination::either_element_can_dominate;
157 return FiniteElementDomination::other_element_dominates;
161 if (fe_nothing->is_dominating())
163 return FiniteElementDomination::other_element_dominates;
169 return FiniteElementDomination::no_requirements;
173 Assert (
false, ExcNotImplemented());
174 return FiniteElementDomination::neither_element_dominates;
179 template <
int dim,
int spacedim>
186 interpolation_matrix);
191 template <
int dim,
int spacedim>
195 const unsigned int subface,
200 ExcDimensionMismatch (interpolation_matrix.
n(),
203 ExcDimensionMismatch (interpolation_matrix.
m(),
210 fe_q.get_subface_interpolation_matrix (source_fe->fe_q, subface, interpolation_matrix);
218 ExcInterpolationNotImplemented()));
223 template <
int spacedim>
231 template <
int spacedim>
238 std::ostringstream namebuf;
239 namebuf <<
"FE_TraceQ<" 241 <<
">(" << this->
degree <<
")";
243 return namebuf.str();
249 #include "fe_trace.inst" 252 DEAL_II_NAMESPACE_CLOSE
static const unsigned int invalid_unsigned_int
FullMatrix< double > interface_constraints
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const
FE_TraceQ(unsigned int p)
::ExceptionBase & ExcMessage(std::string arg1)
const unsigned int degree
void set_numbering(const std::vector< unsigned int > &renumber)
#define AssertThrow(cond, exc)
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const
#define Assert(cond, exc)
std::vector< Point< dim-1 > > unit_face_support_points
FE_Q< dim, spacedim > fe_q
virtual bool hp_constraints_are_implemented() const
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const
std::string dim_string(const int dim, const int spacedim)
TensorProductPolynomials< dim-1 > poly_space
const unsigned int dofs_per_cell
virtual FiniteElementDomination::Domination compare_for_face_domination(const FiniteElement< dim, spacedim > &fe_other) const
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const
virtual FiniteElement< dim, spacedim > * clone() const
const unsigned int dofs_per_face
static std::vector< unsigned int > get_dpo_vector(const unsigned int deg)
virtual std::string get_name() const