48 std::vector<
bool>(dim, true)))
54 "Lowest order RT_Bubbles element is degree 1, but you requested for degree 0"));
69 ref_case < RefinementCase<dim>::isotropic_refinement + 1;
72 const unsigned int nc =
75 for (
unsigned int i = 0; i < nc; ++i)
82 for (
unsigned int i = 0; i < GeometryInfo<dim>::max_children_per_face; ++i)
84 FETools::compute_face_embedding_matrices<dim, double>(*
this,
90 unsigned int target_row = 0;
91 for (
unsigned int d = 0; d < GeometryInfo<dim>::max_children_per_face; ++
d)
92 for (
unsigned int i = 0; i < face_embeddings[
d].
m(); ++i)
94 for (
unsigned int j = 0; j < face_embeddings[
d].
n(); ++j)
108 std::ostringstream namebuf;
109 namebuf <<
"FE_RT_Bubbles<" << dim <<
">(" << this->degree <<
")";
111 return namebuf.str();
117 std::unique_ptr<FiniteElement<dim, dim>>
120 return std_cxx14::make_unique<FE_RT_Bubbles<dim>>(*this);
134 this->generalized_support_points.resize(this->dofs_per_cell);
135 this->generalized_face_support_points.resize(this->dofs_per_face);
138 unsigned int current = 0;
147 for (
unsigned int k = 0; k < this->dofs_per_face; ++k)
148 this->generalized_face_support_points[k] = face_points.point(k);
151 for (
unsigned int k = 0;
154 this->generalized_support_points[k] =
156 0,
true,
false,
false, this->dofs_per_face));
167 std::vector<Point<1>> pts = high.
get_points();
168 pts.erase(pts.begin());
169 pts.erase(pts.end() - 1);
171 std::vector<double> wts(pts.size(), 1);
174 for (
unsigned int d = 0;
d < dim; ++
d)
176 std::unique_ptr<QAnisotropic<dim>> quadrature;
180 quadrature = std_cxx14::make_unique<QAnisotropic<dim>>(high);
183 quadrature = std_cxx14::make_unique<QAnisotropic<dim>>(
184 ((
d == 0) ? low : high), ((
d == 1) ? low : high));
188 std_cxx14::make_unique<QAnisotropic<dim>>(((
d == 0) ? low : high),
189 ((
d == 1) ? low : high),
197 for (
unsigned int k = 0; k < quadrature->size(); ++k)
198 this->generalized_support_points[current++] = quadrature->point(k);
206 std::vector<unsigned int>
210 unsigned int dofs_per_face = 1;
211 for (
unsigned int d = 1;
d < dim; ++
d)
212 dofs_per_face *= deg + 1;
215 const unsigned int interior_dofs =
218 std::vector<unsigned int> dpo(dim + 1);
219 dpo[dim - 1] = dofs_per_face;
220 dpo[dim] = interior_dofs;
232 return std::vector<bool>();
241 const unsigned int dofs_per_cell =
243 unsigned int dofs_per_face = deg + 1;
244 for (
unsigned int d = 2;
d < dim; ++
d)
245 dofs_per_face *= deg + 1;
249 std::vector<bool> ret_val(dofs_per_cell,
false);
264 std::vector<double> & nodal_values)
const
266 Assert(support_point_values.size() == this->generalized_support_points.size(),
268 this->generalized_support_points.size()));
269 Assert(nodal_values.size() == this->dofs_per_cell,
277 unsigned int fbase = 0;
279 for (; f < GeometryInfo<dim>::faces_per_cell;
280 ++f, fbase += this->dofs_per_face)
282 for (
unsigned int i = 0; i < this->dofs_per_face; ++i)
284 nodal_values[fbase + i] = support_point_values[fbase + i](
290 const unsigned int istep = (this->dofs_per_cell - fbase) / dim;
294 while (fbase < this->dofs_per_cell)
296 for (
unsigned int i = 0; i < istep; ++i)
298 nodal_values[fbase + i] = support_point_values[fbase + i](f);
309 #include "fe_rt_bubbles.inst"