32 std::vector<unsigned int>
35 std::vector<unsigned int> dpo(dim + 1);
62 std::vector<Point<dim>>
81 points.push_back(centroid);
91 for (
const auto face_vertex_no :
94 const auto vertex_no =
106 points.push_back(midpoint);
109 points.push_back(centroid);
122 std::vector<Point<0>>
125 std::vector<Point<0>> points;
126 points.emplace_back();
139 auto M = [](
const unsigned int d) {
160 c_bubble = c_bubble * M(vertex);
161 c_bubble = c_bubble / c_bubble.value(centroid);
163 std::vector<BarycentricPolynomial<dim>> bubble_functions;
166 bubble_functions.push_back(c_bubble);
176 for (
const auto face_vertex_no :
186 bubble_functions.push_back(
b -
187 b.value(centroid) * c_bubble);
190 bubble_functions.push_back(c_bubble);
195 const std::vector<Point<dim>> support_points =
196 unit_support_points<dim>(degree);
197 const std::vector<Point<dim>> bubble_support_points(
198 support_points.begin() + fe_p.n(), support_points.end());
199 Assert(bubble_support_points.size() == bubble_functions.size(),
201 const unsigned int n_bubbles = bubble_support_points.size();
204 std::vector<BarycentricPolynomial<dim>> lump_polys;
205 for (
unsigned int i = 0; i < fe_p.n(); ++i)
209 for (
unsigned int j = 0; j < n_bubbles; ++j)
212 p.
value(bubble_support_points[j]) * bubble_functions[j];
215 lump_polys.push_back(p);
218 for (
auto &p : bubble_functions)
219 lump_polys.push_back(std::move(p));
224 for (
const auto &p : lump_polys)
228 for (
unsigned int d = 0;
d < dim; ++
d)
254 const auto polys = get_basis<dim>(degree);
256 ReferenceCells::get_simplex<dim>(),
265 template <
int dim,
int spacedim>
267 const unsigned int degree)
275 , approximation_degree(degree)
280 template <
int dim,
int spacedim>
290 template <
int dim,
int spacedim>
291 std::unique_ptr<FiniteElement<dim, spacedim>>
294 return std::make_unique<FE_SimplexP_Bubbles<dim, spacedim>>(*this);
298 #include "fe_simplex_p_bubbles.inst"
Number value(const Point< dim > &point) const
static BarycentricPolynomial< dim, Number > monomial(const unsigned int d)
static BarycentricPolynomials< dim > get_fe_p_basis(const unsigned int degree)
FE_SimplexP_Bubbles(const unsigned int degree)
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
virtual std::string get_name() const override
const unsigned int degree
ReferenceCell reference_cell() const
const std::vector< Point< dim > > & get_unit_support_points() const
static constexpr unsigned char default_combined_face_orientation()
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcInternalError()
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotImplemented()
std::vector< Point< 0 > > unit_support_points< 0 >(const unsigned int)
BarycentricPolynomials< dim > get_basis(const unsigned int degree)
std::vector< unsigned int > get_dpo_vector(const unsigned int degree)
FiniteElementData< dim > get_fe_data(const unsigned int degree)
std::vector< Point< dim > > unit_support_points(const unsigned int degree)
void reference_cell(Triangulation< dim, spacedim > &tria, const ReferenceCell &reference_cell)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
std::string dim_string(const int dim, const int spacedim)