]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Remove template argument from FE_PolyTensor 8597/head
authorgrahambenharper <grahambenharper@gmail.com>
Sun, 18 Aug 2019 04:06:37 +0000 (22:06 -0600)
committergrahambenharper <grahambenharper@gmail.com>
Mon, 19 Aug 2019 23:16:59 +0000 (17:16 -0600)
18 files changed:
include/deal.II/fe/fe_abf.h
include/deal.II/fe/fe_bdm.h
include/deal.II/fe/fe_bernardi_raugel.h
include/deal.II/fe/fe_dg_vector.h
include/deal.II/fe/fe_dg_vector.templates.h
include/deal.II/fe/fe_nedelec.h
include/deal.II/fe/fe_poly_tensor.h
include/deal.II/fe/fe_raviart_thomas.h
include/deal.II/fe/fe_rt_bubbles.h
source/fe/fe_abf.cc
source/fe/fe_bdm.cc
source/fe/fe_bernardi_raugel.cc
source/fe/fe_nedelec.cc
source/fe/fe_poly_tensor.cc
source/fe/fe_poly_tensor.inst.in
source/fe/fe_raviart_thomas.cc
source/fe/fe_raviart_thomas_nodal.cc
source/fe/fe_rt_bubbles.cc

index 25c1fae511ab59541db61bd347ac923308bbfb28..3d26f0a9a3ef115980ed58d7c1e600b64aa84163 100644 (file)
@@ -100,7 +100,7 @@ DEAL_II_NAMESPACE_OPEN
  * Kanschat and Wolfgang Bangerth
  */
 template <int dim>
-class FE_ABF : public FE_PolyTensor<PolynomialsABF<dim>, dim>
+class FE_ABF : public FE_PolyTensor<dim>
 {
 public:
   /**
index 498e6a73bed12738836c0fcb34ccd034432f24fb..ccec16b47f903a144e42a7967cbd0efe32e5bc91 100644 (file)
@@ -56,7 +56,7 @@ DEAL_II_NAMESPACE_OPEN
  * @ingroup fe
  */
 template <int dim>
-class FE_BDM : public FE_PolyTensor<PolynomialsBDM<dim>, dim>
+class FE_BDM : public FE_PolyTensor<dim>
 {
 public:
   /**
index ca3c94c8b9d444e775c974f64259950b8bbb8c7f..6a4349f31e74a5333fd6b2661f8c21351d83d28d 100644 (file)
@@ -84,8 +84,7 @@ DEAL_II_NAMESPACE_OPEN
  *
  */
 template <int dim>
-class FE_BernardiRaugel
-  : public FE_PolyTensor<PolynomialsBernardiRaugel<dim>, dim>
+class FE_BernardiRaugel : public FE_PolyTensor<dim>
 {
 public:
   /**
index 9e0ff6eee7a3fe44f540a335e6ee66b9adb00be5..f2c871d664a3f35907d42b242f12f236e6d4cec1 100644 (file)
@@ -52,7 +52,7 @@ DEAL_II_NAMESPACE_OPEN
  * @date 2010
  */
 template <class PolynomialType, int dim, int spacedim = dim>
-class FE_DGVector : public FE_PolyTensor<PolynomialType, dim, spacedim>
+class FE_DGVector : public FE_PolyTensor<dim, spacedim>
 {
 public:
   /**
index 05c0622a994bed584587b8c44784fa3a7ec2d757..edba144969ac6bab0a7d6040ddaf4100baf3f0b3 100644 (file)
@@ -33,8 +33,8 @@ DEAL_II_NAMESPACE_OPEN
 template <class PolynomialType, int dim, int spacedim>
 FE_DGVector<PolynomialType, dim, spacedim>::FE_DGVector(const unsigned int deg,
                                                         MappingKind        map)
-  : FE_PolyTensor<PolynomialType, dim, spacedim>(
-      deg,
+  : FE_PolyTensor<dim, spacedim>(
+      PolynomialType(deg),
       FiniteElementData<dim>(get_dpo_vector(deg),
                              dim,
                              deg + 1,
@@ -69,7 +69,7 @@ std::string
 FE_DGVector<PolynomialType, dim, spacedim>::get_name() const
 {
   std::ostringstream namebuf;
-  namebuf << "FE_DGVector_" << this->poly_space.name() << "<" << dim << ">("
+  namebuf << "FE_DGVector_" << this->poly_space->name() << "<" << dim << ">("
           << this->degree - 1 << ")";
   return namebuf.str();
 }
index 93c1541f5c72efcf19dd4f67a3c132b1e86d600d..65f3f0adbe758376e0dcbe74e378c8941c7738c2 100644 (file)
@@ -110,7 +110,7 @@ DEAL_II_NAMESPACE_OPEN
  * @date 2009, 2010, 2011
  */
 template <int dim>
-class FE_Nedelec : public FE_PolyTensor<PolynomialsNedelec<dim>, dim>
+class FE_Nedelec : public FE_PolyTensor<dim>
 {
 public:
   /**
index 4010161cb58ca05b4170135084971e9511c8acd9..1fa69c4156788879e06cb69a9b0f1d878281b822 100644 (file)
@@ -22,6 +22,7 @@
 #include <deal.II/base/derivative_form.h>
 #include <deal.II/base/quadrature.h>
 #include <deal.II/base/std_cxx14/memory.h>
+#include <deal.II/base/tensor_polynomials_base.h>
 #include <deal.II/base/thread_management.h>
 
 #include <deal.II/fe/fe.h>
@@ -142,21 +143,24 @@ DEAL_II_NAMESPACE_OPEN
  * @author Guido Kanschat
  * @date 2005
  */
-template <class PolynomialType, int dim, int spacedim = dim>
+template <int dim, int spacedim = dim>
 class FE_PolyTensor : public FiniteElement<dim, spacedim>
 {
 public:
   /**
    * Constructor.
-   *
-   * @arg @c degree: constructor argument for poly. May be different from @p
-   * fe_data.degree.
    */
-  FE_PolyTensor(const unsigned int                degree,
+  FE_PolyTensor(const TensorPolynomialsBase<dim> &polynomials,
                 const FiniteElementData<dim> &    fe_data,
                 const std::vector<bool> &         restriction_is_additive_flags,
                 const std::vector<ComponentMask> &nonzero_components);
 
+
+  /**
+   * Copy constructor.
+   */
+  FE_PolyTensor(const FE_PolyTensor &fe);
+
   // for documentation, see the FiniteElement base class
   virtual UpdateFlags
   requires_update_flags(const UpdateFlags update_flags) const override;
@@ -318,12 +322,12 @@ protected:
     if (update_flags & (update_values | update_gradients))
       for (unsigned int k = 0; k < n_q_points; ++k)
         {
-          poly_space.compute(quadrature.point(k),
-                             values,
-                             grads,
-                             grad_grads,
-                             third_derivatives,
-                             fourth_derivatives);
+          poly_space->compute(quadrature.point(k),
+                              values,
+                              grads,
+                              grad_grads,
+                              third_derivatives,
+                              fourth_derivatives);
 
           if (update_flags & update_values)
             {
@@ -471,7 +475,7 @@ protected:
    * The polynomial space. Its type is given by the template parameter
    * PolynomialType.
    */
-  PolynomialType poly_space;
+  std::unique_ptr<TensorPolynomialsBase<dim>> poly_space;
 
   /**
    * The inverse of the matrix <i>a<sub>ij</sub></i> of node values
index dd4c284a6804f7a6b35aa20d8321b7ec1cabb7ae..ea5371ad59de864fa505f6e47ac6dfe126e0149a 100644 (file)
@@ -102,8 +102,7 @@ DEAL_II_NAMESPACE_OPEN
  * @author Guido Kanschat, 2005, based on previous work by Wolfgang Bangerth.
  */
 template <int dim>
-class FE_RaviartThomas
-  : public FE_PolyTensor<PolynomialsRaviartThomas<dim>, dim>
+class FE_RaviartThomas : public FE_PolyTensor<dim>
 {
 public:
   /**
@@ -244,8 +243,7 @@ private:
  * @author Guido Kanschat, 2005, Zhu Liang, 2008
  */
 template <int dim>
-class FE_RaviartThomasNodal
-  : public FE_PolyTensor<PolynomialsRaviartThomas<dim>, dim>
+class FE_RaviartThomasNodal : public FE_PolyTensor<dim>
 {
 public:
   /**
index ef537cba0518383cca1e69e0ad0ba5cf1fc5add5..f0cacf22380086f067421e9cf3dd9d6f105f1240 100644 (file)
@@ -87,7 +87,7 @@ DEAL_II_NAMESPACE_OPEN
  * @author Eldar Khattatov, 2018
  */
 template <int dim>
-class FE_RT_Bubbles : public FE_PolyTensor<PolynomialsRT_Bubbles<dim>, dim>
+class FE_RT_Bubbles : public FE_PolyTensor<dim>
 {
 public:
   /**
index df9e67520f5eb81883d26769bd67dee9c52f71a8..6a62cd7788557452df8a29e28dd8e4a90dcef0cf 100644 (file)
@@ -46,8 +46,8 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim>
 FE_ABF<dim>::FE_ABF(const unsigned int deg)
-  : FE_PolyTensor<PolynomialsABF<dim>, dim>(
-      deg,
+  : FE_PolyTensor<dim>(
+      PolynomialsABF<dim>(deg),
       FiniteElementData<dim>(get_dpo_vector(deg),
                              dim,
                              deg + 2,
index 63bbd947e01f35a40b0dd6d38f386c4595992ed0..c80345675b51809612f825b2a0f8dff506e42af4 100644 (file)
@@ -38,8 +38,8 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim>
 FE_BDM<dim>::FE_BDM(const unsigned int deg)
-  : FE_PolyTensor<PolynomialsBDM<dim>, dim>(
-      deg,
+  : FE_PolyTensor<dim>(
+      PolynomialsBDM<dim>(deg),
       FiniteElementData<dim>(get_dpo_vector(deg),
                              dim,
                              deg + 1,
index 6e30098e84f49d34d061291cbd444f229806b452..f4fbd7874bd4b1ae7452320588d015b073639e65 100644 (file)
@@ -38,8 +38,8 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim>
 FE_BernardiRaugel<dim>::FE_BernardiRaugel(const unsigned int p)
-  : FE_PolyTensor<PolynomialsBernardiRaugel<dim>, dim>(
-      p,
+  : FE_PolyTensor<dim>(
+      PolynomialsBernardiRaugel<dim>(p),
       FiniteElementData<dim>(get_dpo_vector(),
                              dim,
                              2,
index 81ce3afe431c4bde5f5ee01515a0721fd226e2d8..c92aeed119ffda0da11dc8271ab993bdb68481c0 100644 (file)
@@ -69,8 +69,8 @@ namespace internal
 
 template <int dim>
 FE_Nedelec<dim>::FE_Nedelec(const unsigned int order)
-  : FE_PolyTensor<PolynomialsNedelec<dim>, dim>(
-      order,
+  : FE_PolyTensor<dim>(
+      PolynomialsNedelec<dim>(order),
       FiniteElementData<dim>(get_dpo_vector(order),
                              dim,
                              order + 1,
index 2cb944c3861cb6650c2bf60f8afe44d4af1a999f..c7222ae526b56e7fdc671c43766ea24b47046d31 100644 (file)
@@ -166,9 +166,9 @@ namespace internal
 
 
 
-template <class PolynomialType, int dim, int spacedim>
-FE_PolyTensor<PolynomialType, dim, spacedim>::FE_PolyTensor(
-  const unsigned int                degree,
+template <int dim, int spacedim>
+FE_PolyTensor<dim, spacedim>::FE_PolyTensor(
+  const TensorPolynomialsBase<dim> &polynomials,
   const FiniteElementData<dim> &    fe_data,
   const std::vector<bool> &         restriction_is_additive_flags,
   const std::vector<ComponentMask> &nonzero_components)
@@ -176,7 +176,7 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::FE_PolyTensor(
                                  restriction_is_additive_flags,
                                  nonzero_components)
   , mapping_kind({MappingKind::mapping_none})
-  , poly_space(PolynomialType(degree))
+  , poly_space(polynomials.clone())
 {
   cached_point(0) = -1;
   // Set up the table converting
@@ -192,19 +192,28 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::FE_PolyTensor(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
+FE_PolyTensor<dim, spacedim>::FE_PolyTensor(const FE_PolyTensor &fe)
+  : FiniteElement<dim, spacedim>(fe)
+  , mapping_kind(fe.mapping_kind)
+  , poly_space(fe.poly_space->clone())
+  , inverse_node_matrix(fe.inverse_node_matrix)
+{}
+
+
+
+template <int dim, int spacedim>
 bool
-FE_PolyTensor<PolynomialType, dim, spacedim>::single_mapping_kind() const
+FE_PolyTensor<dim, spacedim>::single_mapping_kind() const
 {
   return mapping_kind.size() == 1;
 }
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 MappingKind
-FE_PolyTensor<PolynomialType, dim, spacedim>::get_mapping_kind(
-  const unsigned int i) const
+FE_PolyTensor<dim, spacedim>::get_mapping_kind(const unsigned int i) const
 {
   if (single_mapping_kind())
     return mapping_kind[0];
@@ -215,11 +224,10 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::get_mapping_kind(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 double
-FE_PolyTensor<PolynomialType, dim, spacedim>::shape_value(
-  const unsigned int,
-  const Point<dim> &) const
+FE_PolyTensor<dim, spacedim>::shape_value(const unsigned int,
+                                          const Point<dim> &) const
 
 {
   Assert(false, (typename FiniteElement<dim, spacedim>::ExcFENotPrimitive()));
@@ -228,9 +236,9 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_value(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 double
-FE_PolyTensor<PolynomialType, dim, spacedim>::shape_value_component(
+FE_PolyTensor<dim, spacedim>::shape_value_component(
   const unsigned int i,
   const Point<dim> & p,
   const unsigned int component) const
@@ -243,11 +251,11 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_value_component(
   if (cached_point != p || cached_values.size() == 0)
     {
       cached_point = p;
-      cached_values.resize(poly_space.n());
+      cached_values.resize(poly_space->n());
 
       std::vector<Tensor<4, dim>> dummy1;
       std::vector<Tensor<5, dim>> dummy2;
-      poly_space.compute(
+      poly_space->compute(
         p, cached_values, cached_grads, cached_grad_grads, dummy1, dummy2);
     }
 
@@ -262,11 +270,10 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_value_component(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 Tensor<1, dim>
-FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad(
-  const unsigned int,
-  const Point<dim> &) const
+FE_PolyTensor<dim, spacedim>::shape_grad(const unsigned int,
+                                         const Point<dim> &) const
 {
   Assert(false, (typename FiniteElement<dim, spacedim>::ExcFENotPrimitive()));
   return Tensor<1, dim>();
@@ -274,9 +281,9 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 Tensor<1, dim>
-FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad_component(
+FE_PolyTensor<dim, spacedim>::shape_grad_component(
   const unsigned int i,
   const Point<dim> & p,
   const unsigned int component) const
@@ -289,11 +296,11 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad_component(
   if (cached_point != p || cached_grads.size() == 0)
     {
       cached_point = p;
-      cached_grads.resize(poly_space.n());
+      cached_grads.resize(poly_space->n());
 
       std::vector<Tensor<4, dim>> dummy1;
       std::vector<Tensor<5, dim>> dummy2;
-      poly_space.compute(
+      poly_space->compute(
         p, cached_values, cached_grads, cached_grad_grads, dummy1, dummy2);
     }
 
@@ -309,11 +316,10 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad_component(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 Tensor<2, dim>
-FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad_grad(
-  const unsigned int,
-  const Point<dim> &) const
+FE_PolyTensor<dim, spacedim>::shape_grad_grad(const unsigned int,
+                                              const Point<dim> &) const
 {
   Assert(false, (typename FiniteElement<dim, spacedim>::ExcFENotPrimitive()));
   return Tensor<2, dim>();
@@ -321,9 +327,9 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad_grad(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 Tensor<2, dim>
-FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad_grad_component(
+FE_PolyTensor<dim, spacedim>::shape_grad_grad_component(
   const unsigned int i,
   const Point<dim> & p,
   const unsigned int component) const
@@ -336,11 +342,11 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad_grad_component(
   if (cached_point != p || cached_grad_grads.size() == 0)
     {
       cached_point = p;
-      cached_grad_grads.resize(poly_space.n());
+      cached_grad_grads.resize(poly_space->n());
 
       std::vector<Tensor<4, dim>> dummy1;
       std::vector<Tensor<5, dim>> dummy2;
-      poly_space.compute(
+      poly_space->compute(
         p, cached_values, cached_grads, cached_grad_grads, dummy1, dummy2);
     }
 
@@ -359,9 +365,9 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::shape_grad_grad_component(
 // Fill data of FEValues
 //---------------------------------------------------------------------------
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_PolyTensor<PolynomialType, dim, spacedim>::fill_fe_values(
+FE_PolyTensor<dim, spacedim>::fill_fe_values(
   const typename Triangulation<dim, spacedim>::cell_iterator &cell,
   const CellSimilarity::Similarity                            cell_similarity,
   const Quadrature<dim> &                                     quadrature,
@@ -934,9 +940,9 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::fill_fe_values(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_PolyTensor<PolynomialType, dim, spacedim>::fill_fe_face_values(
+FE_PolyTensor<dim, spacedim>::fill_fe_face_values(
   const typename Triangulation<dim, spacedim>::cell_iterator &cell,
   const unsigned int                                          face_no,
   const Quadrature<dim - 1> &                                 quadrature,
@@ -1559,9 +1565,9 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::fill_fe_face_values(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_PolyTensor<PolynomialType, dim, spacedim>::fill_fe_subface_values(
+FE_PolyTensor<dim, spacedim>::fill_fe_subface_values(
   const typename Triangulation<dim, spacedim>::cell_iterator &cell,
   const unsigned int                                          face_no,
   const unsigned int                                          sub_no,
@@ -2177,9 +2183,9 @@ FE_PolyTensor<PolynomialType, dim, spacedim>::fill_fe_subface_values(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 UpdateFlags
-FE_PolyTensor<PolynomialType, dim, spacedim>::requires_update_flags(
+FE_PolyTensor<dim, spacedim>::requires_update_flags(
   const UpdateFlags flags) const
 {
   UpdateFlags out = update_default;
index 7501ece4f9a2f2b66032aa05d443a6ce3a981245..13e1c27634b925bb410bda1a09766eb3ce69e850 100644 (file)
 
 for (deal_II_dimension : DIMENSIONS)
   {
-    template class FE_PolyTensor<PolynomialsRaviartThomas<deal_II_dimension>,
-                                 deal_II_dimension>;
-    template class FE_PolyTensor<PolynomialsRT_Bubbles<deal_II_dimension>,
-                                 deal_II_dimension>;
-    template class FE_PolyTensor<PolynomialsABF<deal_II_dimension>,
-                                 deal_II_dimension>;
-    template class FE_PolyTensor<PolynomialsBernardiRaugel<deal_II_dimension>,
-                                 deal_II_dimension>;
-    template class FE_PolyTensor<PolynomialsBDM<deal_II_dimension>,
-                                 deal_II_dimension>;
-    template class FE_PolyTensor<PolynomialsNedelec<deal_II_dimension>,
-                                 deal_II_dimension>;
+    template class FE_PolyTensor<deal_II_dimension, deal_II_dimension>;
   }
index 022e33a9f44ae4abfa2de635071b1d2be288c5c1..7007d543b59a5b80a160641d745e251e509d9125 100644 (file)
@@ -45,8 +45,8 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim>
 FE_RaviartThomas<dim>::FE_RaviartThomas(const unsigned int deg)
-  : FE_PolyTensor<PolynomialsRaviartThomas<dim>, dim>(
-      deg,
+  : FE_PolyTensor<dim>(
+      PolynomialsRaviartThomas<dim>(deg),
       FiniteElementData<dim>(get_dpo_vector(deg),
                              dim,
                              deg + 1,
index 0e6dc86d7c006bda660d5eabd413ce4591153875..802979994b8f16c60476c349f91db58d229fd605 100644 (file)
@@ -38,16 +38,15 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim>
 FE_RaviartThomasNodal<dim>::FE_RaviartThomasNodal(const unsigned int deg)
-  : FE_PolyTensor<PolynomialsRaviartThomas<dim>, dim>(
-      deg,
-      FiniteElementData<dim>(get_dpo_vector(deg),
-                             dim,
-                             deg + 1,
-                             FiniteElementData<dim>::Hdiv),
-      get_ria_vector(deg),
-      std::vector<ComponentMask>(PolynomialsRaviartThomas<dim>::compute_n_pols(
-                                   deg),
-                                 std::vector<bool>(dim, true)))
+  : FE_PolyTensor<dim>(PolynomialsRaviartThomas<dim>(deg),
+                       FiniteElementData<dim>(get_dpo_vector(deg),
+                                              dim,
+                                              deg + 1,
+                                              FiniteElementData<dim>::Hdiv),
+                       get_ria_vector(deg),
+                       std::vector<ComponentMask>(
+                         PolynomialsRaviartThomas<dim>::compute_n_pols(deg),
+                         std::vector<bool>(dim, true)))
 {
   Assert(dim >= 2, ExcImpossibleInDim(dim));
   const unsigned int n_dofs = this->dofs_per_cell;
index 74ad3afba43028f48b8fedf5fccfaf43035abd89..7319cf29e454cd8d6f19da9ba3a3d02290802cbf 100644 (file)
@@ -37,16 +37,15 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim>
 FE_RT_Bubbles<dim>::FE_RT_Bubbles(const unsigned int deg)
-  : FE_PolyTensor<PolynomialsRT_Bubbles<dim>, dim>(
-      deg,
-      FiniteElementData<dim>(get_dpo_vector(deg),
-                             dim,
-                             deg + 1,
-                             FiniteElementData<dim>::Hdiv),
-      get_ria_vector(deg),
-      std::vector<ComponentMask>(PolynomialsRT_Bubbles<dim>::compute_n_pols(
-                                   deg),
-                                 std::vector<bool>(dim, true)))
+  : FE_PolyTensor<dim>(PolynomialsRT_Bubbles<dim>(deg),
+                       FiniteElementData<dim>(get_dpo_vector(deg),
+                                              dim,
+                                              deg + 1,
+                                              FiniteElementData<dim>::Hdiv),
+                       get_ria_vector(deg),
+                       std::vector<ComponentMask>(
+                         PolynomialsRT_Bubbles<dim>::compute_n_pols(deg),
+                         std::vector<bool>(dim, true)))
 {
   Assert(dim >= 2, ExcImpossibleInDim(dim));
   Assert(

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.