]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add second template parameter to FE_Nothing.
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Wed, 5 Nov 2014 17:09:43 +0000 (11:09 -0600)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Fri, 7 Nov 2014 05:19:27 +0000 (23:19 -0600)
For historical (and probably not very good) reasons, finite element classes
have a second template argument denoting the space dimension. FE_Nothing never
got this argument and so it wasn't possible to use it in codimension-one
situations. This patch adds the second argument to make it possible to use
it in these situations.

There is not much that one can test this element with, other than ensure that it
compiles. The next commit will actually use the element in a concrete situation.

doc/news/changes.h
include/deal.II/fe/fe_nothing.h
source/fe/fe_nothing.cc
source/fe/fe_nothing.inst.in

index cc7b71d160ec44cd8ed6fb2750b40fa6853ff6ce..8bc18b2d41a3e04807af6fa9eee08af387b981a9 100644 (file)
@@ -333,6 +333,14 @@ inconvenience this causes.
 <h3>Specific improvements</h3>
 
 <ol>
+  <li> New: The FE_Nothing class now has a second template argument
+  corresponding to the space dimension in which the mesh is embedded,
+  like many other classes. This allows to use this element in codimension
+  one cases as well now.
+  <br>
+  (Wolfgang Bangerth, 2014/11/05)
+  </li>
+
   <li> Fixed: Using the FEEvaluation framework did not work for 
   scalar elements in 1d because there were conflicting partial
   specializations. This is now fixed.
index 26a4234494c5ead1238dba5cd770e7768bf5fba8..e4ef19ccd408614109a959bb8cda00f78be62ea6 100644 (file)
@@ -76,8 +76,8 @@ DEAL_II_NAMESPACE_OPEN
  *
  * @author Joshua White, Wolfgang Bangerth
  */
-template <int dim>
-class FE_Nothing : public FiniteElement<dim>
+template <int dim, int spacedim=dim>
+class FE_Nothing : public FiniteElement<dim,spacedim>
 {
 public:
 
@@ -86,7 +86,7 @@ public:
     * number of components to give this
     * finite element (default = 1).
     */
-  FE_Nothing (unsigned int n_components = 1);
+  FE_Nothing (const unsigned int n_components = 1);
 
   /**
    * A sort of virtual copy
@@ -100,7 +100,7 @@ public:
    * do so through this function.
    */
   virtual
-  FiniteElement<dim> *
+  FiniteElement<dim,spacedim> *
   clone() const;
 
   /**
@@ -190,12 +190,12 @@ public:
    */
   virtual
   void
-  fill_fe_values (const Mapping<dim> &mapping,
-                  const typename Triangulation<dim>::cell_iterator &cell,
+  fill_fe_values (const Mapping<dim,spacedim> &mapping,
+                  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                   const Quadrature<dim> &quadrature,
-                  typename Mapping<dim>::InternalDataBase &mapping_data,
-                  typename Mapping<dim>::InternalDataBase &fedata,
-                  FEValuesData<dim,dim> &data,
+                  typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
+                  typename Mapping<dim,spacedim>::InternalDataBase &fedata,
+                  FEValuesData<dim,spacedim> &data,
                   CellSimilarity::Similarity &cell_similarity) const;
 
   /**
@@ -212,13 +212,13 @@ public:
    */
   virtual
   void
-  fill_fe_face_values (const Mapping<dim> &mapping,
-                       const typename Triangulation<dim> :: cell_iterator &cell,
+  fill_fe_face_values (const Mapping<dim,spacedim> &mapping,
+                       const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                        const unsigned int face,
                        const Quadrature<dim-1> & quadrature,
-                       typename Mapping<dim> :: InternalDataBase &mapping_data,
-                       typename Mapping<dim> :: InternalDataBase &fedata,
-                       FEValuesData<dim,dim> &data) const;
+                       typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
+                       typename Mapping<dim,spacedim>::InternalDataBase &fedata,
+                       FEValuesData<dim,spacedim> &data) const;
 
   /**
    * Fill the fields of
@@ -234,14 +234,14 @@ public:
    */
   virtual
   void
-  fill_fe_subface_values (const Mapping<dim> &mapping,
-                          const typename Triangulation<dim>::cell_iterator &cell,
+  fill_fe_subface_values (const Mapping<dim,spacedim> &mapping,
+                          const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                           const unsigned int face,
                           const unsigned int subface,
                           const Quadrature<dim-1> & quadrature,
-                          typename Mapping<dim>::InternalDataBase &mapping_data,
-                          typename Mapping<dim>::InternalDataBase &fedata,
-                          FEValuesData<dim,dim> &data) const;
+                          typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
+                          typename Mapping<dim,spacedim>::InternalDataBase &fedata,
+                          FEValuesData<dim,spacedim> &data) const;
 
   /**
    * Prepare internal data
@@ -260,9 +260,9 @@ public:
    * element.
    */
   virtual
-  typename Mapping<dim>::InternalDataBase *
+  typename Mapping<dim,spacedim>::InternalDataBase *
   get_data (const UpdateFlags     update_flags,
-            const Mapping<dim>     &mapping,
+            const Mapping<dim,spacedim>     &mapping,
             const Quadrature<dim> &quadrature) const;
 
   /**
@@ -285,21 +285,21 @@ public:
    */
   virtual
   FiniteElementDomination::Domination
-  compare_for_face_domination (const FiniteElement<dim> &fe_other) const;
+  compare_for_face_domination (const FiniteElement<dim,spacedim> &fe_other) const;
 
 
 
   virtual
   std::vector<std::pair<unsigned int, unsigned int> >
-  hp_vertex_dof_identities (const FiniteElement<dim> &fe_other) const;
+  hp_vertex_dof_identities (const FiniteElement<dim,spacedim> &fe_other) const;
 
   virtual
   std::vector<std::pair<unsigned int, unsigned int> >
-  hp_line_dof_identities (const FiniteElement<dim> &fe_other) const;
+  hp_line_dof_identities (const FiniteElement<dim,spacedim> &fe_other) const;
 
   virtual
   std::vector<std::pair<unsigned int, unsigned int> >
-  hp_quad_dof_identities (const FiniteElement<dim> &fe_other) const;
+  hp_quad_dof_identities (const FiniteElement<dim,spacedim> &fe_other) const;
 
   virtual
   bool
@@ -321,7 +321,7 @@ public:
 
   virtual
   void
-  get_face_interpolation_matrix (const FiniteElement<dim> &source_fe,
+  get_face_interpolation_matrix (const FiniteElement<dim,spacedim> &source_fe,
                                  FullMatrix<double>       &interpolation_matrix) const;
 
 
@@ -341,7 +341,7 @@ public:
 
   virtual
   void
-  get_subface_interpolation_matrix (const FiniteElement<dim> &source_fe,
+  get_subface_interpolation_matrix (const FiniteElement<dim,spacedim> &source_fe,
                                     const unsigned int index,
                                     FullMatrix<double>  &interpolation_matrix) const;
 
index 0e5bcea5fb4ba4b7741a318f3215709a784ed4a0..d1e3e228c1af70fcac19f651a6ec25778c2e88b2 100644 (file)
@@ -27,10 +27,10 @@ namespace
 
 
 
-template <int dim>
-FE_Nothing<dim>::FE_Nothing (const unsigned int n_components)
+template <int dim, int spacedim>
+FE_Nothing<dim,spacedim>::FE_Nothing (const unsigned int n_components)
   :
-  FiniteElement<dim>
+  FiniteElement<dim,spacedim>
   (FiniteElementData<dim>(std::vector<unsigned>(dim+1,0),
                           n_components, 0,
                           FiniteElementData<dim>::unknown),
@@ -45,18 +45,18 @@ FE_Nothing<dim>::FE_Nothing (const unsigned int n_components)
 }
 
 
-template <int dim>
-FiniteElement<dim> *
-FE_Nothing<dim>::clone() const
+template <int dim, int spacedim>
+FiniteElement<dim,spacedim> *
+FE_Nothing<dim,spacedim>::clone() const
 {
-  return new FE_Nothing<dim>(*this);
+  return new FE_Nothing<dim,spacedim>(*this);
 }
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 std::string
-FE_Nothing<dim>::get_name () const
+FE_Nothing<dim,spacedim>::get_name () const
 {
   std::ostringstream namebuf;
   namebuf << "FE_Nothing<" << dim << ">(";
@@ -68,28 +68,28 @@ FE_Nothing<dim>::get_name () const
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 UpdateFlags
-FE_Nothing<dim>::update_once (const UpdateFlags /*flags*/) const
+FE_Nothing<dim,spacedim>::update_once (const UpdateFlags /*flags*/) const
 {
   return update_default;
 }
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 UpdateFlags
-FE_Nothing<dim>::update_each (const UpdateFlags /*flags*/) const
+FE_Nothing<dim,spacedim>::update_each (const UpdateFlags /*flags*/) const
 {
   return update_default;
 }
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 double
-FE_Nothing<dim>::shape_value (const unsigned int /*i*/,
-                              const Point<dim> & /*p*/) const
+FE_Nothing<dim,spacedim>::shape_value (const unsigned int /*i*/,
+                                       const Point<dim> & /*p*/) const
 {
   Assert(false,ExcMessage(zero_dof_message));
   return 0;
@@ -97,31 +97,31 @@ FE_Nothing<dim>::shape_value (const unsigned int /*i*/,
 
 
 
-template <int dim>
-typename Mapping<dim>::InternalDataBase *
-FE_Nothing<dim>::get_data (const UpdateFlags  /*flags*/,
-                           const Mapping<dim> & /*mapping*/,
-                           const Quadrature<dim> & /*quadrature*/) const
+template <int dim, int spacedim>
+typename Mapping<dim,spacedim>::InternalDataBase *
+FE_Nothing<dim,spacedim>::get_data (const UpdateFlags  /*flags*/,
+                                    const Mapping<dim,spacedim> & /*mapping*/,
+                                    const Quadrature<dim> & /*quadrature*/) const
 {
   // Create a default data object.  Normally we would then
   // need to resize things to hold the appropriate numbers
   // of dofs, but in this case all data fields are empty.
-  typename Mapping<dim>::InternalDataBase *data
-    = new typename FiniteElement<dim>::InternalDataBase();
+  typename Mapping<dim,spacedim>::InternalDataBase *data
+    = new typename FiniteElement<dim,spacedim>::InternalDataBase();
   return data;
 }
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 void
-FE_Nothing<dim>::
-fill_fe_values (const Mapping<dim> & /*mapping*/,
-                const typename Triangulation<dim>::cell_iterator & /*cell*/,
+FE_Nothing<dim,spacedim>::
+fill_fe_values (const Mapping<dim,spacedim> & /*mapping*/,
+                const typename Triangulation<dim,spacedim>::cell_iterator & /*cell*/,
                 const Quadrature<dim> & /*quadrature*/,
-                typename Mapping<dim>::InternalDataBase & /*mapping_data*/,
-                typename Mapping<dim>::InternalDataBase & /*fedata*/,
-                FEValuesData<dim,dim> & /*data*/,
+                typename Mapping<dim,spacedim>::InternalDataBase & /*mapping_data*/,
+                typename Mapping<dim,spacedim>::InternalDataBase & /*fedata*/,
+                FEValuesData<dim,spacedim> & /*data*/,
                 CellSimilarity::Similarity & /*cell_similarity*/) const
 {
   // leave data fields empty
@@ -129,49 +129,49 @@ fill_fe_values (const Mapping<dim> & /*mapping*/,
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 void
-FE_Nothing<dim>::
-fill_fe_face_values (const Mapping<dim> & /*mapping*/,
-                     const typename Triangulation<dim>::cell_iterator & /*cell*/,
+FE_Nothing<dim,spacedim>::
+fill_fe_face_values (const Mapping<dim,spacedim> & /*mapping*/,
+                     const typename Triangulation<dim,spacedim>::cell_iterator & /*cell*/,
                      const unsigned int /*face*/,
                      const Quadrature<dim-1> & /*quadrature*/,
-                     typename Mapping<dim>::InternalDataBase & /*mapping_data*/,
-                     typename Mapping<dim>::InternalDataBase & /*fedata*/,
-                     FEValuesData<dim,dim> & /*data*/) const
+                     typename Mapping<dim,spacedim>::InternalDataBase & /*mapping_data*/,
+                     typename Mapping<dim,spacedim>::InternalDataBase & /*fedata*/,
+                     FEValuesData<dim,spacedim> & /*data*/) const
 {
   // leave data fields empty
 }
 
-template <int dim>
+template <int dim, int spacedim>
 void
-FE_Nothing<dim>::
-fill_fe_subface_values (const Mapping<dim> & /*mapping*/,
-                        const typename Triangulation<dim>::cell_iterator & /*cell*/,
+FE_Nothing<dim,spacedim>::
+fill_fe_subface_values (const Mapping<dim,spacedim> & /*mapping*/,
+                        const typename Triangulation<dim,spacedim>::cell_iterator & /*cell*/,
                         const unsigned int /*face*/,
                         const unsigned int /*subface*/,
                         const Quadrature<dim-1> & /*quadrature*/,
-                        typename Mapping<dim>::InternalDataBase & /*mapping_data*/,
-                        typename Mapping<dim>::InternalDataBase & /*fedata*/,
-                        FEValuesData<dim,dim> & /*data*/) const
+                        typename Mapping<dim,spacedim>::InternalDataBase & /*mapping_data*/,
+                        typename Mapping<dim,spacedim>::InternalDataBase & /*fedata*/,
+                        FEValuesData<dim,spacedim> & /*data*/) const
 {
   // leave data fields empty
 }
 
 
-template <int dim>
+template <int dim, int spacedim>
 FiniteElementDomination::Domination
-FE_Nothing<dim> ::
-compare_for_face_domination (const FiniteElement<dim> &) const
+FE_Nothing<dim,spacedim> ::
+compare_for_face_domination (const FiniteElement<dim,spacedim> &) const
 {
   return FiniteElementDomination::no_requirements;
 }
 
 
-template <int dim>
+template <int dim, int spacedim>
 std::vector<std::pair<unsigned int, unsigned int> >
-FE_Nothing<dim> ::
-hp_vertex_dof_identities (const FiniteElement<dim> &/*fe_other*/) const
+FE_Nothing<dim,spacedim> ::
+hp_vertex_dof_identities (const FiniteElement<dim,spacedim> &/*fe_other*/) const
 {
   // the FE_Nothing has no
   // degrees of freedom, so there
@@ -181,10 +181,10 @@ hp_vertex_dof_identities (const FiniteElement<dim> &/*fe_other*/) const
 }
 
 
-template <int dim>
+template <int dim, int spacedim>
 std::vector<std::pair<unsigned int, unsigned int> >
-FE_Nothing<dim> ::
-hp_line_dof_identities (const FiniteElement<dim> &/*fe_other*/) const
+FE_Nothing<dim,spacedim> ::
+hp_line_dof_identities (const FiniteElement<dim,spacedim> &/*fe_other*/) const
 {
   // the FE_Nothing has no
   // degrees of freedom, so there
@@ -194,10 +194,10 @@ hp_line_dof_identities (const FiniteElement<dim> &/*fe_other*/) const
 }
 
 
-template <int dim>
+template <int dim, int spacedim>
 std::vector<std::pair<unsigned int, unsigned int> >
-FE_Nothing<dim> ::
-hp_quad_dof_identities (const FiniteElement<dim> &/*fe_other*/) const
+FE_Nothing<dim,spacedim> ::
+hp_quad_dof_identities (const FiniteElement<dim,spacedim> &/*fe_other*/) const
 {
   // the FE_Nothing has no
   // degrees of freedom, so there
@@ -207,19 +207,19 @@ hp_quad_dof_identities (const FiniteElement<dim> &/*fe_other*/) const
 }
 
 
-template <int dim>
+template <int dim, int spacedim>
 bool
-FE_Nothing<dim> ::
+FE_Nothing<dim,spacedim> ::
 hp_constraints_are_implemented () const
 {
   return true;
 }
 
 
-template <int dim>
+template <int dim, int spacedim>
 void
-FE_Nothing<dim>::
-get_face_interpolation_matrix (const FiniteElement<dim> &/*source_fe*/,
+FE_Nothing<dim,spacedim>::
+get_face_interpolation_matrix (const FiniteElement<dim,spacedim> &/*source_fe*/,
                                FullMatrix<double>       &interpolation_matrix) const
 {
   // since this element has no face dofs, the
@@ -234,10 +234,10 @@ get_face_interpolation_matrix (const FiniteElement<dim> &/*source_fe*/,
 }
 
 
-template <int dim>
+template <int dim, int spacedim>
 void
-FE_Nothing<dim>::
-get_subface_interpolation_matrix (const FiniteElement<dim> & /*source_fe*/,
+FE_Nothing<dim,spacedim>::
+get_subface_interpolation_matrix (const FiniteElement<dim,spacedim> & /*source_fe*/,
                                   const unsigned int /*index*/,
                                   FullMatrix<double>  &interpolation_matrix) const
 {
index f1a670baa90bad1389b82ecf5abcb885a4eb7ab8..228cf903ad0a8007a796ed5cdffb24d3c4266070 100644 (file)
 
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension, deal_II_space_dimension : DIMENSIONS)
   {
-    template class FE_Nothing<deal_II_dimension>;
+#if deal_II_dimension <= deal_II_space_dimension
+    template class FE_Nothing<deal_II_dimension,deal_II_space_dimension>;
+#endif
   }
 

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.