37 template <
int dim,
int spacedim>
51 ExcMessage(
"FE_Trace can only be used for polynomial degrees " 52 "greater than zero"));
54 FETools::hierarchic_to_lexicographic_numbering<dim - 1>(degree));
72 template <
int dim,
int spacedim>
73 std::unique_ptr<FiniteElement<dim, spacedim>>
76 return std_cxx14::make_unique<FE_TraceQ<dim, spacedim>>(this->
degree);
81 template <
int dim,
int spacedim>
89 std::ostringstream namebuf;
98 template <
int dim,
int spacedim>
101 const unsigned int shape_index,
102 const unsigned int face_index)
const 112 return fe_q.has_support_on_face(shape_index, face_index);
117 template <
int dim,
int spacedim>
118 std::pair<Table<2, bool>, std::vector<unsigned int>>
123 constant_modes(0, i) =
true;
124 return std::pair<Table<2, bool>, std::vector<unsigned int>>(
125 constant_modes, std::vector<unsigned int>(1, 0));
128 template <
int dim,
int spacedim>
133 std::vector<double> & nodal_values)
const 144 nodal_values[i] = support_point_values[i](0);
149 template <
int dim,
int spacedim>
150 std::vector<unsigned int>
157 std::vector<unsigned int> dpo(dim + 1, 1
U);
160 for (
unsigned int i = 1; i < dim; ++i)
161 dpo[i] = dpo[i - 1] * (deg - 1);
167 template <
int dim,
int spacedim>
171 return fe_q.hp_constraints_are_implemented();
175 template <
int dim,
int spacedim>
179 const unsigned int codim)
const 189 if (this->degree < fe_traceq_other->
degree)
191 else if (this->degree == fe_traceq_other->degree)
199 if (fe_nothing->is_dominating())
214 template <
int dim,
int spacedim>
222 interpolation_matrix);
227 template <
int dim,
int spacedim>
231 const unsigned int subface,
245 fe_q.get_subface_interpolation_matrix(source_fe->fe_q,
247 interpolation_matrix);
249 else if (
dynamic_cast<const FE_Nothing<dim> *
>(&x_source_fe) !=
nullptr)
262 template <
int spacedim>
269 template <
int spacedim>
276 std::ostringstream namebuf;
280 return namebuf.str();
286 #include "fe_trace.inst" virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
static const unsigned int invalid_unsigned_int
#define AssertDimension(dim1, dim2)
FullMatrix< double > interface_constraints
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
FE_TraceQ(unsigned int p)
#define AssertIndexRange(index, range)
const unsigned int degree
void set_numbering(const std::vector< unsigned int > &renumber)
std::vector< Point< dim - 1 > > unit_face_support_points
#define AssertThrow(cond, exc)
static ::ExceptionBase & ExcInterpolationNotImplemented()
std::vector< Point< dim > > unit_support_points
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
static ::ExceptionBase & ExcMessage(std::string arg1)
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const override final
#define Assert(cond, exc)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
#define DEAL_II_NAMESPACE_CLOSE
FE_Q< dim, spacedim > fe_q
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
std::string dim_string(const int dim, const int spacedim)
TensorProductPolynomials< dim - 1 > poly_space
const unsigned int dofs_per_cell
const std::vector< Point< dim > > & get_unit_support_points() const
virtual bool hp_constraints_are_implemented() const override
#define DEAL_II_NAMESPACE_OPEN
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
const unsigned int dofs_per_face
static ::ExceptionBase & ExcNotImplemented()
static std::vector< unsigned int > get_dpo_vector(const unsigned int deg)
virtual std::string get_name() const override
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const override
void L2(Vector< number > &result, const FEValuesBase< dim > &fe, const std::vector< double > &input, const double factor=1.)
std::vector< Polynomial< double > > generate_complete_Lagrange_basis(const std::vector< Point< 1 >> &points)