]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Get rid of the PolynomialType template argument of FE_Q_Base.
authorWolfgang Bangerth <bangerth@colostate.edu>
Thu, 4 Feb 2021 00:24:23 +0000 (17:24 -0700)
committerWolfgang Bangerth <bangerth@colostate.edu>
Thu, 4 Feb 2021 00:24:23 +0000 (17:24 -0700)
13 files changed:
include/deal.II/fe/fe_bernstein.h
include/deal.II/fe/fe_q.h
include/deal.II/fe/fe_q_base.h
include/deal.II/fe/fe_q_bubbles.h
include/deal.II/fe/fe_q_dg0.h
include/deal.II/fe/fe_q_iso_q1.h
source/fe/fe_bernstein.cc
source/fe/fe_q.cc
source/fe/fe_q_base.cc
source/fe/fe_q_base.inst.in
source/fe/fe_q_bubbles.cc
source/fe/fe_q_dg0.cc
source/fe/fe_q_iso_q1.cc

index b734bc5d66630cbed86289d00a35cb8a233c19ac..2064818ca986db32ecc77b088416272379e7d16c 100644 (file)
@@ -60,8 +60,7 @@ DEAL_II_NAMESPACE_OPEN
  */
 
 template <int dim, int spacedim = dim>
-class FE_Bernstein
-  : public FE_Q_Base<TensorProductPolynomials<dim>, dim, spacedim>
+class FE_Bernstein : public FE_Q_Base<dim, spacedim>
 {
 public:
   /**
index 967c26a9026a3faa4fe744248586e9dee9d9dfe8..099faf2511d387ce41d4de96e79d3c3c006ad79a 100644 (file)
@@ -545,7 +545,7 @@ DEAL_II_NAMESPACE_OPEN
  * <td align="center"> </td> </tr> </table>
  */
 template <int dim, int spacedim = dim>
-class FE_Q : public FE_Q_Base<TensorProductPolynomials<dim>, dim, spacedim>
+class FE_Q : public FE_Q_Base<dim, spacedim>
 {
 public:
   /**
index 1340d25ad417be31fc70c7ab4ed4f855fe385d72..b12f3fb3801b6d87276f0787b2ea9adf41faba89 100644 (file)
@@ -34,18 +34,16 @@ DEAL_II_NAMESPACE_OPEN
  * functional as a stand-alone. The completion of definitions is left to the
  * derived classes.
  */
-template <class PolynomialType,
-          int dim      = PolynomialType::dimension,
-          int spacedim = dim>
+template <int dim, int spacedim = dim>
 class FE_Q_Base : public FE_Poly<dim, spacedim>
 {
 public:
   /**
    * Constructor.
    */
-  FE_Q_Base(const PolynomialType &        poly_space,
-            const FiniteElementData<dim> &fe_data,
-            const std::vector<bool> &     restriction_is_additive_flags);
+  FE_Q_Base(const ScalarPolynomialsBase<dim> &poly_space,
+            const FiniteElementData<dim> &    fe_data,
+            const std::vector<bool> &         restriction_is_additive_flags);
 
   /**
    * Return the matrix interpolating from the given finite element to the
@@ -330,7 +328,7 @@ protected:
   struct Implementation;
 
   // Declare implementation friend.
-  friend struct FE_Q_Base<PolynomialType, dim, spacedim>::Implementation;
+  friend struct FE_Q_Base<dim, spacedim>::Implementation;
 
 private:
   /**
index fd54bfd8382dcf50d264cf611718b37bb7257d3d..753d1086e1c57977df2fd82847af48f7e0a3996c 100644 (file)
@@ -88,8 +88,7 @@ DEAL_II_NAMESPACE_OPEN
  * the bubble enrichments in the middle of the cell.
  */
 template <int dim, int spacedim = dim>
-class FE_Q_Bubbles
-  : public FE_Q_Base<TensorProductPolynomialsBubbles<dim>, dim, spacedim>
+class FE_Q_Bubbles : public FE_Q_Base<dim, spacedim>
 {
 public:
   /**
index d1ea8957b0d0ea6534d404c25ce3f580e6920ebb..889d1e8ff8c9ba890f56c381fafd94e23f1acc64 100644 (file)
@@ -235,8 +235,7 @@ DEAL_II_NAMESPACE_OPEN
  * </ul>
  */
 template <int dim, int spacedim = dim>
-class FE_Q_DG0
-  : public FE_Q_Base<TensorProductPolynomialsConst<dim>, dim, spacedim>
+class FE_Q_DG0 : public FE_Q_Base<dim, spacedim>
 {
 public:
   /**
index da212c964ad376f7fcb4bbae9e0f8e22e5bc5694..db8f9ba8d0d4c8f81c629f6428b661b2665d3fdc 100644 (file)
@@ -108,11 +108,7 @@ DEAL_II_NAMESPACE_OPEN
  * FE_Q_iso_Q1 with more than one subdivision does have less coupling.
  */
 template <int dim, int spacedim = dim>
-class FE_Q_iso_Q1
-  : public FE_Q_Base<
-      TensorProductPolynomials<dim, Polynomials::PiecewisePolynomial<double>>,
-      dim,
-      spacedim>
+class FE_Q_iso_Q1 : public FE_Q_Base<dim, spacedim>
 {
 public:
   /**
index 635e92e65f158c48c5d59c0caa1f8d386c587549..06f7b5bf6eeec1b1817c305c53d9c5d05c4a3808 100644 (file)
@@ -36,13 +36,13 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim, int spacedim>
 FE_Bernstein<dim, spacedim>::FE_Bernstein(const unsigned int degree)
-  : FE_Q_Base<TensorProductPolynomials<dim>, dim, spacedim>(
-      this->renumber_bases(degree),
-      FiniteElementData<dim>(this->get_dpo_vector(degree),
-                             1,
-                             degree,
-                             FiniteElementData<dim>::H1),
-      std::vector<bool>(1, false))
+  : FE_Q_Base<dim, spacedim>(this->renumber_bases(degree),
+                             FiniteElementData<dim>(this->get_dpo_vector(
+                                                      degree),
+                                                    1,
+                                                    degree,
+                                                    FiniteElementData<dim>::H1),
+                             std::vector<bool>(1, false))
 {}
 
 
index 607e267e3bfeb0d7f52d5f3911d23b300c2a9ec2..9be753fa616c0fbc92154312b93195436a13be37 100644 (file)
@@ -44,7 +44,7 @@ namespace internal
           return QGaussLobatto<1>(degree + 1).get_points();
         else
           {
-            using FEQ = dealii::FE_Q_Base<TensorProductPolynomials<1>, 1, 1>;
+            using FEQ = dealii::FE_Q_Base<1, 1>;
             AssertThrow(false, FEQ::ExcFEQCannotHaveDegree0());
           }
         return std::vector<Point<1>>();
@@ -57,7 +57,7 @@ namespace internal
 
 template <int dim, int spacedim>
 FE_Q<dim, spacedim>::FE_Q(const unsigned int degree)
-  : FE_Q_Base<TensorProductPolynomials<dim>, dim, spacedim>(
+  : FE_Q_Base<dim, spacedim>(
       TensorProductPolynomials<dim>(
         Polynomials::generate_complete_Lagrange_basis(
           internal::FE_Q::get_QGaussLobatto_points(degree))),
@@ -74,7 +74,7 @@ FE_Q<dim, spacedim>::FE_Q(const unsigned int degree)
 
 template <int dim, int spacedim>
 FE_Q<dim, spacedim>::FE_Q(const Quadrature<1> &points)
-  : FE_Q_Base<TensorProductPolynomials<dim>, dim, spacedim>(
+  : FE_Q_Base<dim, spacedim>(
       TensorProductPolynomials<dim>(
         Polynomials::generate_complete_Lagrange_basis(points.get_points())),
       FiniteElementData<dim>(this->get_dpo_vector(points.size() - 1),
index 77a219bca46b33cdf37ed38d54d874f00c5cd21f..25a4d0233f2ed670e9d08973e0d8bcacf013f99e 100644 (file)
@@ -82,8 +82,8 @@ namespace internal
  * A class with the same purpose as the similarly named class of the
  * Triangulation class. See there for more information.
  */
-template <class PolynomialType, int xdim, int xspacedim>
-struct FE_Q_Base<PolynomialType, xdim, xspacedim>::Implementation
+template <int xdim, int xspacedim>
+struct FE_Q_Base<xdim, xspacedim>::Implementation
 {
   /**
    * Initialize the hanging node constraints matrices. Called from the
@@ -92,7 +92,7 @@ struct FE_Q_Base<PolynomialType, xdim, xspacedim>::Implementation
   template <int spacedim>
   static void
   initialize_constraints(const std::vector<Point<1>> &,
-                         FE_Q_Base<PolynomialType, 1, spacedim> &)
+                         FE_Q_Base<1, spacedim> &)
   {
     // no constraints in 1d
   }
@@ -101,13 +101,13 @@ struct FE_Q_Base<PolynomialType, xdim, xspacedim>::Implementation
   template <int spacedim>
   static void
   initialize_constraints(const std::vector<Point<1>> & /*points*/,
-                         FE_Q_Base<PolynomialType, 2, spacedim> &fe)
+                         FE_Q_Base<2, spacedim> &fe)
   {
     const unsigned int dim = 2;
 
     unsigned int q_deg = fe.degree;
-    if (std::is_same<PolynomialType,
-                     TensorProductPolynomialsBubbles<dim>>::value)
+    if (dynamic_cast<const TensorProductPolynomialsBubbles<dim> *>(
+          &fe.get_poly_space()) != nullptr)
       q_deg = fe.degree - 1;
 
     // restricted to each face, the traces of the shape functions is an
@@ -212,13 +212,13 @@ struct FE_Q_Base<PolynomialType, xdim, xspacedim>::Implementation
   template <int spacedim>
   static void
   initialize_constraints(const std::vector<Point<1>> & /*points*/,
-                         FE_Q_Base<PolynomialType, 3, spacedim> &fe)
+                         FE_Q_Base<3, spacedim> &fe)
   {
     const unsigned int dim = 3;
 
     unsigned int q_deg = fe.degree;
-    if (std::is_same<PolynomialType,
-                     TensorProductPolynomialsBubbles<dim>>::value)
+    if (dynamic_cast<const TensorProductPolynomialsBubbles<dim> *>(
+          &fe.get_poly_space()) != nullptr)
       q_deg = fe.degree - 1;
 
     // For a detailed documentation of the interpolation see the
@@ -410,28 +410,27 @@ struct FE_Q_Base<PolynomialType, xdim, xspacedim>::Implementation
 
 
 
-template <class PolynomialType, int dim, int spacedim>
-FE_Q_Base<PolynomialType, dim, spacedim>::FE_Q_Base(
-  const PolynomialType &        poly_space,
-  const FiniteElementData<dim> &fe_data,
-  const std::vector<bool> &     restriction_is_additive_flags)
+template <int dim, int spacedim>
+FE_Q_Base<dim, spacedim>::FE_Q_Base(
+  const ScalarPolynomialsBase<dim> &poly_space,
+  const FiniteElementData<dim> &    fe_data,
+  const std::vector<bool> &         restriction_is_additive_flags)
   : FE_Poly<dim, spacedim>(
       poly_space,
       fe_data,
       restriction_is_additive_flags,
       std::vector<ComponentMask>(1, std::vector<bool>(1, true)))
-  , q_degree(std::is_same<PolynomialType,
-                          TensorProductPolynomialsBubbles<dim>>::value ?
+  , q_degree(dynamic_cast<const TensorProductPolynomialsBubbles<dim> *>(
+               &poly_space) != nullptr ?
                this->degree - 1 :
                this->degree)
 {}
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_Q_Base<PolynomialType, dim, spacedim>::initialize(
-  const std::vector<Point<1>> &points)
+FE_Q_Base<dim, spacedim>::initialize(const std::vector<Point<1>> &points)
 {
   Assert(points[0][0] == 0,
          ExcMessage("The first support point has to be zero."));
@@ -505,16 +504,15 @@ FE_Q_Base<PolynomialType, dim, spacedim>::initialize(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_Q_Base<PolynomialType, dim, spacedim>::get_interpolation_matrix(
+FE_Q_Base<dim, spacedim>::get_interpolation_matrix(
   const FiniteElement<dim, spacedim> &x_source_fe,
   FullMatrix<double> &                interpolation_matrix) const
 {
   // go through the list of elements we can interpolate from
-  if (const FE_Q_Base<PolynomialType, dim, spacedim> *source_fe =
-        dynamic_cast<const FE_Q_Base<PolynomialType, dim, spacedim> *>(
-          &x_source_fe))
+  if (const FE_Q_Base<dim, spacedim> *source_fe =
+        dynamic_cast<const FE_Q_Base<dim, spacedim> *>(&x_source_fe))
     {
       // ok, source is a Q element, so we will be able to do the work
       Assert(interpolation_matrix.m() == this->n_dofs_per_cell(),
@@ -604,9 +602,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::get_interpolation_matrix(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_Q_Base<PolynomialType, dim, spacedim>::get_face_interpolation_matrix(
+FE_Q_Base<dim, spacedim>::get_face_interpolation_matrix(
   const FiniteElement<dim, spacedim> &source_fe,
   FullMatrix<double> &                interpolation_matrix,
   const unsigned int                  face_no) const
@@ -620,9 +618,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::get_face_interpolation_matrix(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_Q_Base<PolynomialType, dim, spacedim>::get_subface_interpolation_matrix(
+FE_Q_Base<dim, spacedim>::get_subface_interpolation_matrix(
   const FiniteElement<dim, spacedim> &x_source_fe,
   const unsigned int                  subface,
   FullMatrix<double> &                interpolation_matrix,
@@ -633,9 +631,8 @@ FE_Q_Base<PolynomialType, dim, spacedim>::get_subface_interpolation_matrix(
                               x_source_fe.n_dofs_per_face(face_no)));
 
   // see if source is a Q element
-  if (const FE_Q_Base<PolynomialType, dim, spacedim> *source_fe =
-        dynamic_cast<const FE_Q_Base<PolynomialType, dim, spacedim> *>(
-          &x_source_fe))
+  if (const FE_Q_Base<dim, spacedim> *source_fe =
+        dynamic_cast<const FE_Q_Base<dim, spacedim> *>(&x_source_fe))
     {
       // have this test in here since a table of size 2x0 reports its size as
       // 0x0
@@ -722,22 +719,21 @@ FE_Q_Base<PolynomialType, dim, spacedim>::get_subface_interpolation_matrix(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 bool
-FE_Q_Base<PolynomialType, dim, spacedim>::hp_constraints_are_implemented() const
+FE_Q_Base<dim, spacedim>::hp_constraints_are_implemented() const
 {
   return true;
 }
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 std::vector<std::pair<unsigned int, unsigned int>>
-FE_Q_Base<PolynomialType, dim, spacedim>::hp_vertex_dof_identities(
+FE_Q_Base<dim, spacedim>::hp_vertex_dof_identities(
   const FiniteElement<dim, spacedim> &fe_other) const
 {
-  if (dynamic_cast<const FE_Q_Base<PolynomialType, dim, spacedim> *>(
-        &fe_other) != nullptr)
+  if (dynamic_cast<const FE_Q_Base<dim, spacedim> *>(&fe_other) != nullptr)
     {
       // there should be exactly one single DoF of each FE at a vertex, and they
       // should have identical value
@@ -776,16 +772,15 @@ FE_Q_Base<PolynomialType, dim, spacedim>::hp_vertex_dof_identities(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 std::vector<std::pair<unsigned int, unsigned int>>
-FE_Q_Base<PolynomialType, dim, spacedim>::hp_line_dof_identities(
+FE_Q_Base<dim, spacedim>::hp_line_dof_identities(
   const FiniteElement<dim, spacedim> &fe_other) const
 {
   // we can presently only compute these identities if both FEs are FE_Qs or
   // if the other one is an FE_Nothing
-  if (const FE_Q_Base<PolynomialType, dim, spacedim> *fe_q_other =
-        dynamic_cast<const FE_Q_Base<PolynomialType, dim, spacedim> *>(
-          &fe_other))
+  if (const FE_Q_Base<dim, spacedim> *fe_q_other =
+        dynamic_cast<const FE_Q_Base<dim, spacedim> *>(&fe_other))
     {
       // dofs are located along lines, so two dofs are identical if they are
       // located at identical positions. if we had only equidistant points, we
@@ -872,17 +867,16 @@ FE_Q_Base<PolynomialType, dim, spacedim>::hp_line_dof_identities(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 std::vector<std::pair<unsigned int, unsigned int>>
-FE_Q_Base<PolynomialType, dim, spacedim>::hp_quad_dof_identities(
+FE_Q_Base<dim, spacedim>::hp_quad_dof_identities(
   const FiniteElement<dim, spacedim> &fe_other,
   const unsigned int) const
 {
   // we can presently only compute these identities if both FEs are FE_Qs or
   // if the other one is an FE_Nothing
-  if (const FE_Q_Base<PolynomialType, dim, spacedim> *fe_q_other =
-        dynamic_cast<const FE_Q_Base<PolynomialType, dim, spacedim> *>(
-          &fe_other))
+  if (const FE_Q_Base<dim, spacedim> *fe_q_other =
+        dynamic_cast<const FE_Q_Base<dim, spacedim> *>(&fe_other))
     {
       // this works exactly like the line case above, except that now we have
       // to have two indices i1, i2 and j1, j2 to characterize the dofs on the
@@ -949,9 +943,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::hp_quad_dof_identities(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_Q_Base<PolynomialType, dim, spacedim>::initialize_unit_support_points(
+FE_Q_Base<dim, spacedim>::initialize_unit_support_points(
   const std::vector<Point<1>> &points)
 {
   const std::vector<unsigned int> &index_map_inverse =
@@ -974,9 +968,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::initialize_unit_support_points(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_Q_Base<PolynomialType, dim, spacedim>::initialize_unit_face_support_points(
+FE_Q_Base<dim, spacedim>::initialize_unit_face_support_points(
   const std::vector<Point<1>> &points)
 {
   // no faces in 1d, so nothing to do
@@ -1012,10 +1006,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::initialize_unit_face_support_points(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_Q_Base<PolynomialType, dim, spacedim>::
-  initialize_quad_dof_index_permutation()
+FE_Q_Base<dim, spacedim>::initialize_quad_dof_index_permutation()
 {
   // for 1D and 2D, do nothing
   if (dim < 3)
@@ -1098,14 +1091,13 @@ FE_Q_Base<PolynomialType, dim, spacedim>::
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 unsigned int
-FE_Q_Base<PolynomialType, dim, spacedim>::face_to_cell_index(
-  const unsigned int face_index,
-  const unsigned int face,
-  const bool         face_orientation,
-  const bool         face_flip,
-  const bool         face_rotation) const
+FE_Q_Base<dim, spacedim>::face_to_cell_index(const unsigned int face_index,
+                                             const unsigned int face,
+                                             const bool face_orientation,
+                                             const bool face_flip,
+                                             const bool face_rotation) const
 {
   AssertIndexRange(face_index, this->n_dofs_per_face(face));
   AssertIndexRange(face, GeometryInfo<dim>::faces_per_cell);
@@ -1214,12 +1206,11 @@ FE_Q_Base<PolynomialType, dim, spacedim>::face_to_cell_index(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 std::vector<unsigned int>
-FE_Q_Base<PolynomialType, dim, spacedim>::get_dpo_vector(
-  const unsigned int degree)
+FE_Q_Base<dim, spacedim>::get_dpo_vector(const unsigned int degree)
 {
-  using FEQ = FE_Q_Base<PolynomialType, dim, spacedim>;
+  using FEQ = FE_Q_Base<dim, spacedim>;
   AssertThrow(degree > 0, typename FEQ::ExcFEQCannotHaveDegree0());
   std::vector<unsigned int> dpo(dim + 1, 1U);
   for (unsigned int i = 1; i < dpo.size(); ++i)
@@ -1229,9 +1220,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::get_dpo_vector(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 void
-FE_Q_Base<PolynomialType, dim, spacedim>::initialize_constraints(
+FE_Q_Base<dim, spacedim>::initialize_constraints(
   const std::vector<Point<1>> &points)
 {
   Implementation::initialize_constraints(points, *this);
@@ -1239,9 +1230,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::initialize_constraints(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 const FullMatrix<double> &
-FE_Q_Base<PolynomialType, dim, spacedim>::get_prolongation_matrix(
+FE_Q_Base<dim, spacedim>::get_prolongation_matrix(
   const unsigned int         child,
   const RefinementCase<dim> &refinement_case) const
 {
@@ -1438,9 +1429,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::get_prolongation_matrix(
 
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 const FullMatrix<double> &
-FE_Q_Base<PolynomialType, dim, spacedim>::get_restriction_matrix(
+FE_Q_Base<dim, spacedim>::get_restriction_matrix(
   const unsigned int         child,
   const RefinementCase<dim> &refinement_case) const
 {
@@ -1582,9 +1573,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::get_restriction_matrix(
 //---------------------------------------------------------------------------
 
 
-template <class PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 bool
-FE_Q_Base<PolynomialType, dim, spacedim>::has_support_on_face(
+FE_Q_Base<dim, spacedim>::has_support_on_face(
   const unsigned int shape_index,
   const unsigned int face_index) const
 {
@@ -1684,9 +1675,9 @@ FE_Q_Base<PolynomialType, dim, spacedim>::has_support_on_face(
 
 
 
-template <typename PolynomialType, int dim, int spacedim>
+template <int dim, int spacedim>
 std::pair<Table<2, bool>, std::vector<unsigned int>>
-FE_Q_Base<PolynomialType, dim, spacedim>::get_constant_modes() const
+FE_Q_Base<dim, spacedim>::get_constant_modes() const
 {
   Table<2, bool> constant_modes(1, this->n_dofs_per_cell());
   // We here just care for the constant mode due to the polynomial space
index 339f449ce1896e99d886917966891739be628680..4fb9aabcbc58715b2d5aa422d9226b115ced6613 100644 (file)
 for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension : SPACE_DIMENSIONS)
   {
 #if deal_II_dimension <= deal_II_space_dimension
-    template class FE_Q_Base<TensorProductPolynomials<deal_II_dimension>,
-                             deal_II_dimension,
-                             deal_II_space_dimension>;
-    template class FE_Q_Base<TensorProductPolynomialsConst<deal_II_dimension>,
-                             deal_II_dimension,
-                             deal_II_space_dimension>;
-    template class FE_Q_Base<TensorProductPolynomialsBubbles<deal_II_dimension>,
-                             deal_II_dimension,
-                             deal_II_space_dimension>;
-    template class FE_Q_Base<
-      TensorProductPolynomials<deal_II_dimension,
-                               Polynomials::PiecewisePolynomial<double>>,
-      deal_II_dimension,
-      deal_II_space_dimension>;
+    template class FE_Q_Base<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
index 8625b8e0ad6db4559f5261926d4dba69b6739298..d449759f2e3fd37d61fd6904248b0960a2e56cb6 100644 (file)
@@ -186,15 +186,14 @@ namespace internal
 
 template <int dim, int spacedim>
 FE_Q_Bubbles<dim, spacedim>::FE_Q_Bubbles(const unsigned int q_degree)
-  : FE_Q_Base<TensorProductPolynomialsBubbles<dim>, dim, spacedim>(
-      TensorProductPolynomialsBubbles<dim>(
-        Polynomials::generate_complete_Lagrange_basis(
-          QGaussLobatto<1>(q_degree + 1).get_points())),
-      FiniteElementData<dim>(get_dpo_vector(q_degree),
-                             1,
-                             q_degree + 1,
-                             FiniteElementData<dim>::H1),
-      get_riaf_vector(q_degree))
+  : FE_Q_Base<dim, spacedim>(TensorProductPolynomialsBubbles<dim>(
+                               Polynomials::generate_complete_Lagrange_basis(
+                                 QGaussLobatto<1>(q_degree + 1).get_points())),
+                             FiniteElementData<dim>(get_dpo_vector(q_degree),
+                                                    1,
+                                                    q_degree + 1,
+                                                    FiniteElementData<dim>::H1),
+                             get_riaf_vector(q_degree))
   , n_bubbles((q_degree <= 1) ? 1 : dim)
 {
   Assert(q_degree > 0,
@@ -226,7 +225,7 @@ FE_Q_Bubbles<dim, spacedim>::FE_Q_Bubbles(const unsigned int q_degree)
 
 template <int dim, int spacedim>
 FE_Q_Bubbles<dim, spacedim>::FE_Q_Bubbles(const Quadrature<1> &points)
-  : FE_Q_Base<TensorProductPolynomialsBubbles<dim>, dim, spacedim>(
+  : FE_Q_Base<dim, spacedim>(
       TensorProductPolynomialsBubbles<dim>(
         Polynomials::generate_complete_Lagrange_basis(points.get_points())),
       FiniteElementData<dim>(get_dpo_vector(points.size() - 1),
@@ -455,8 +454,8 @@ FE_Q_Bubbles<dim, spacedim>::has_support_on_face(
   if (shape_index >= this->n_dofs_per_cell() - n_bubbles)
     return false;
   else
-    return FE_Q_Base<TensorProductPolynomialsBubbles<dim>, dim, spacedim>::
-      has_support_on_face(shape_index, face_index);
+    return FE_Q_Base<dim, spacedim>::has_support_on_face(shape_index,
+                                                         face_index);
 }
 
 
index 647f841f4f462e7bdae8f5effd2b23c0e92bf25b..30a91675e98aff474474ae6db25474bf8248d52b 100644 (file)
@@ -33,15 +33,14 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim, int spacedim>
 FE_Q_DG0<dim, spacedim>::FE_Q_DG0(const unsigned int degree)
-  : FE_Q_Base<TensorProductPolynomialsConst<dim>, dim, spacedim>(
-      TensorProductPolynomialsConst<dim>(
-        Polynomials::generate_complete_Lagrange_basis(
-          QGaussLobatto<1>(degree + 1).get_points())),
-      FiniteElementData<dim>(get_dpo_vector(degree),
-                             1,
-                             degree,
-                             FiniteElementData<dim>::L2),
-      get_riaf_vector(degree))
+  : FE_Q_Base<dim, spacedim>(TensorProductPolynomialsConst<dim>(
+                               Polynomials::generate_complete_Lagrange_basis(
+                                 QGaussLobatto<1>(degree + 1).get_points())),
+                             FiniteElementData<dim>(get_dpo_vector(degree),
+                                                    1,
+                                                    degree,
+                                                    FiniteElementData<dim>::L2),
+                             get_riaf_vector(degree))
 {
   Assert(degree > 0,
          ExcMessage("This element can only be used for polynomial degrees "
@@ -61,7 +60,7 @@ FE_Q_DG0<dim, spacedim>::FE_Q_DG0(const unsigned int degree)
 
 template <int dim, int spacedim>
 FE_Q_DG0<dim, spacedim>::FE_Q_DG0(const Quadrature<1> &points)
-  : FE_Q_Base<TensorProductPolynomialsConst<dim>, dim, spacedim>(
+  : FE_Q_Base<dim, spacedim>(
       TensorProductPolynomialsConst<dim>(
         Polynomials::generate_complete_Lagrange_basis(points.get_points())),
       FiniteElementData<dim>(get_dpo_vector(points.size() - 1),
@@ -226,8 +225,8 @@ FE_Q_DG0<dim, spacedim>::get_interpolation_matrix(
          ExcDimensionMismatch(interpolation_matrix.m(),
                               x_source_fe.n_dofs_per_cell()));
 
-  this->FE_Q_Base<TensorProductPolynomialsConst<dim>, dim, spacedim>::
-    get_interpolation_matrix(x_source_fe, interpolation_matrix);
+  this->FE_Q_Base<dim, spacedim>::get_interpolation_matrix(
+    x_source_fe, interpolation_matrix);
 }
 
 
@@ -267,8 +266,8 @@ FE_Q_DG0<dim, spacedim>::has_support_on_face(
   if (shape_index == this->n_dofs_per_cell() - 1)
     return true;
   else
-    return FE_Q_Base<TensorProductPolynomialsConst<dim>, dim, spacedim>::
-      has_support_on_face(shape_index, face_index);
+    return FE_Q_Base<dim, spacedim>::has_support_on_face(shape_index,
+                                                         face_index);
 }
 
 
index 23b99d0fe81dc88eae29453e1d0ed3eb85b08e27..ed2fb26a319406d084c710bc7bd5f9e304e5fc0b 100644 (file)
@@ -32,10 +32,7 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim, int spacedim>
 FE_Q_iso_Q1<dim, spacedim>::FE_Q_iso_Q1(const unsigned int subdivisions)
-  : FE_Q_Base<
-      TensorProductPolynomials<dim, Polynomials::PiecewisePolynomial<double>>,
-      dim,
-      spacedim>(
+  : FE_Q_Base<dim, spacedim>(
       TensorProductPolynomials<dim, Polynomials::PiecewisePolynomial<double>>(
         Polynomials::generate_complete_Lagrange_basis_on_subdivisions(
           subdivisions,

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.