]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Adjust all of the FiniteElement::fill_fe_*_values.
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Sun, 2 Aug 2015 22:07:40 +0000 (17:07 -0500)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Sun, 2 Aug 2015 22:07:40 +0000 (17:07 -0500)
Instead of a single FEValuesData object, they now get references to an
internal::FEValues::MappingRelatedData object (which is marked as const,
given that it is data that has previously been computed by the mapping) and
to internal::FEValues::FiniteElementRelatedData (which is non-const, and
which is where the finite elements put their results).

17 files changed:
include/deal.II/fe/fe.h
include/deal.II/fe/fe_dgp_nonparametric.h
include/deal.II/fe/fe_face.h
include/deal.II/fe/fe_nothing.h
include/deal.II/fe/fe_poly.h
include/deal.II/fe/fe_poly.templates.h
include/deal.II/fe/fe_poly_face.h
include/deal.II/fe/fe_poly_face.templates.h
include/deal.II/fe/fe_poly_tensor.h
include/deal.II/fe/fe_system.h
source/fe/fe_dgp_nonparametric.cc
source/fe/fe_face.cc
source/fe/fe_nothing.cc
source/fe/fe_poly.cc
source/fe/fe_poly_tensor.cc
source/fe/fe_system.cc
source/fe/fe_values.cc

index 1491521bd2176b499046bd10286becd8067f805e..700f10b5be0f69d752b73359dd4e3479d1830c56 100644 (file)
@@ -2051,54 +2051,39 @@ protected:
                     const Mapping<dim,spacedim>      &mapping,
                     const Quadrature<dim-1> &quadrature) const;
 
-  /**
-   * Fill the fields of FEValues. This function performs all the operations
-   * needed to compute the data of an FEValues object.
-   *
-   * The same function in @p mapping must have been called for the same cell
-   * first!
-   */
-  virtual void
+  virtual
+  void
   fill_fe_values (const Mapping<dim,spacedim>                               &mapping,
                   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                   const Quadrature<dim>                                     &quadrature,
-                  const typename Mapping<dim,spacedim>::InternalDataBase          &mapping_internal,
-                  const typename Mapping<dim,spacedim>::InternalDataBase          &fe_internal,
-                  FEValuesData<dim,spacedim>                                &data,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                  const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                  internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
                   const CellSimilarity::Similarity                           cell_similarity) const = 0;
 
-  /**
-   * Fill the fields of FEFaceValues. This function performs all the
-   * operations needed to compute the data of an FEFaceValues object.
-   *
-   * The same function in @p mapping must have been called for the same cell
-   * first!
-   */
-  virtual void
-  fill_fe_face_values (const Mapping<dim,spacedim>                   &mapping,
+  virtual
+  void
+  fill_fe_face_values (const Mapping<dim,spacedim>                               &mapping,
                        const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                       const unsigned int                    face_no,
-                       const Quadrature<dim-1>              &quadrature,
-                       const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_internal,
-                       const typename Mapping<dim,spacedim>::InternalDataBase       &fe_internal,
-                       FEValuesData<dim,spacedim>                    &data) const = 0;
+                       const unsigned int                                         face_no,
+                       const Quadrature<dim-1>                                   &quadrature,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                       const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const = 0;
 
-  /**
-   * Fill the fields of FESubfaceValues. This function performs all the
-   * operations needed to compute the data of an FESubfaceValues object.
-   *
-   * The same function in @p mapping must have been called for the same cell
-   * first!
-   */
-  virtual void
-  fill_fe_subface_values (const Mapping<dim,spacedim>                   &mapping,
+  virtual
+  void
+  fill_fe_subface_values (const Mapping<dim,spacedim>                               &mapping,
                           const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                          const unsigned int                    face_no,
-                          const unsigned int                    sub_no,
-                          const Quadrature<dim-1>              &quadrature,
-                          const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
-                          const typename Mapping<dim,spacedim>::InternalDataBase &fe_internal,
-                          FEValuesData<dim,spacedim>                    &data) const = 0;
+                          const unsigned int                                         face_no,
+                          const unsigned int                                         sub_no,
+                          const Quadrature<dim-1>                                   &quadrature,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                          const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                          internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const = 0;
 
   friend class InternalDataBase;
   friend class FEValuesBase<dim,spacedim>;
index 6dd38bdbd424f95958296dfecb655de397323271..079fb9006408c48874170d7d5548ed26f82ed387 100644 (file)
@@ -529,42 +529,39 @@ protected:
             const Mapping<dim,spacedim> &mapping,
             const Quadrature<dim> &quadrature) const;
 
-  /**
-   * Implementation of the same function in FiniteElement.
-   */
-  virtual void
-  fill_fe_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_values (const Mapping<dim,spacedim>                               &mapping,
                   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                  const Quadrature<dim>                                 &quadrature,
-                  const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                  const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                  FEValuesData<dim,spacedim>                            &data,
-                  const CellSimilarity::Similarity                       cell_similarity) const;
+                  const Quadrature<dim>                                     &quadrature,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                  const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                  internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                  const CellSimilarity::Similarity                           cell_similarity) const;
 
-  /**
-   * Implementation of the same function in FiniteElement.
-   */
-  virtual void
-  fill_fe_face_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_face_values (const Mapping<dim,spacedim>                               &mapping,
                        const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                       const unsigned int                    face_no,
-                       const Quadrature<dim-1>                &quadrature,
-                       const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                       const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                       FEValuesData<dim,spacedim> &data) const;
+                       const unsigned int                                         face_no,
+                       const Quadrature<dim-1>                                   &quadrature,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                       const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
-  /**
-   * Implementation of the same function in FiniteElement.
-   */
-  virtual void
-  fill_fe_subface_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_subface_values (const Mapping<dim,spacedim>                               &mapping,
                           const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                          const unsigned int                    face_no,
-                          const unsigned int                    sub_no,
-                          const Quadrature<dim-1>                &quadrature,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                          FEValuesData<dim,spacedim> &data) const;
+                          const unsigned int                                         face_no,
+                          const unsigned int                                         sub_no,
+                          const Quadrature<dim-1>                                   &quadrature,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                          const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                          internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
 private:
 
index da5f3ddc99b8c5040aa07fb3206f0b04ac5e6f27..31fb8f1d3a5239b2175bae0af15dd94b73b03af9 100644 (file)
@@ -243,33 +243,39 @@ protected:
                     const Mapping<1,spacedim> &mapping,
                     const Quadrature<0> &quadrature) const;
 
-  virtual void
-  fill_fe_values (const Mapping<1,spacedim>                           &mapping,
+  virtual
+  void
+  fill_fe_values (const Mapping<1,spacedim>                              &mapping,
                   const typename Triangulation<1,spacedim>::cell_iterator &cell,
-                  const Quadrature<1>                                 &quadrature,
-                  const typename Mapping<1,spacedim>::InternalDataBase      &mapping_internal,
-                  const typename Mapping<1,spacedim>::InternalDataBase      &fe_internal,
-                  FEValuesData<1,spacedim>                            &data,
-                  const CellSimilarity::Similarity                       cell_similarity) const;
+                  const Quadrature<1>                                     &quadrature,
+                  const typename Mapping<1,spacedim>::InternalDataBase    &mapping_internal,
+                  const typename Mapping<1,spacedim>::InternalDataBase    &fe_internal,
+                  const internal::FEValues::MappingRelatedData<1,spacedim> &mapping_data,
+                  internal::FEValues::FiniteElementRelatedData<1,spacedim> &output_data,
+                  const CellSimilarity::Similarity                          cell_similarity) const;
 
-  virtual void
-  fill_fe_face_values (const Mapping<1,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_face_values (const Mapping<1,spacedim>                               &mapping,
                        const typename Triangulation<1,spacedim>::cell_iterator &cell,
-                       const unsigned int                    face_no,
-                       const Quadrature<0>                &quadrature,
-                       const typename Mapping<1,spacedim>::InternalDataBase      &mapping_internal,
-                       const typename Mapping<1,spacedim>::InternalDataBase      &fe_internal,
-                       FEValuesData<1,spacedim> &data) const;
+                       const unsigned int                                         face_no,
+                       const Quadrature<0>                                   &quadrature,
+                       const typename Mapping<1,spacedim>::InternalDataBase    &mapping_internal,
+                       const typename Mapping<1,spacedim>::InternalDataBase    &fe_internal,
+                       const internal::FEValues::MappingRelatedData<1,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<1,spacedim> &output_data) const;
 
-  virtual void
-  fill_fe_subface_values (const Mapping<1,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_subface_values (const Mapping<1,spacedim>                               &mapping,
                           const typename Triangulation<1,spacedim>::cell_iterator &cell,
-                          const unsigned int                    face_no,
-                          const unsigned int                    sub_no,
-                          const Quadrature<0>                &quadrature,
-                          const typename Mapping<1,spacedim>::InternalDataBase      &mapping_internal,
-                          const typename Mapping<1,spacedim>::InternalDataBase      &fe_internal,
-                          FEValuesData<1,spacedim> &data) const;
+                          const unsigned int                                         face_no,
+                          const unsigned int                                         sub_no,
+                          const Quadrature<0>                                   &quadrature,
+                          const typename Mapping<1,spacedim>::InternalDataBase    &mapping_internal,
+                          const typename Mapping<1,spacedim>::InternalDataBase    &fe_internal,
+                          const internal::FEValues::MappingRelatedData<1,spacedim> &mapping_data,
+                          internal::FEValues::FiniteElementRelatedData<1,spacedim> &output_data) const;
 
 
   /**
index 880d8edcf61d4c11e0e31e94efbfd6aaf348f110..d41fc6a4cdf5e718faedc211371a7ddafb8b36a1 100644 (file)
@@ -147,57 +147,39 @@ public:
   double
   shape_value (const unsigned int i, const Point<dim> &p) const;
 
-  /**
-   * Fill the fields of FEValues. This function performs all the operations
-   * needed to compute the data of an FEValues object.
-   *
-   * In the current case, this function returns no meaningful information,
-   * since the element has no degrees of freedom.
-   */
   virtual
   void
-  fill_fe_values (const Mapping<dim,spacedim> &mapping,
+  fill_fe_values (const Mapping<dim,spacedim>                               &mapping,
                   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                  const Quadrature<dim> &quadrature,
-                  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-                  const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-                  FEValuesData<dim,spacedim> &data,
-                  const CellSimilarity::Similarity cell_similarity) const;
+                  const Quadrature<dim>                                     &quadrature,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                  const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                  internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                  const CellSimilarity::Similarity                           cell_similarity) const;
 
-  /**
-   * Fill the fields of FEFaceValues. This function performs all the
-   * operations needed to compute the data of an FEFaceValues object.
-   *
-   * In the current case, this function returns no meaningful information,
-   * since the element has no degrees of freedom.
-   */
   virtual
   void
-  fill_fe_face_values (const Mapping<dim,spacedim> &mapping,
+  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,
-                       const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-                       const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-                       FEValuesData<dim,spacedim> &data) const;
+                       const unsigned int                                         face_no,
+                       const Quadrature<dim-1>                                   &quadrature,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                       const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
-  /**
-   * Fill the fields of FESubFaceValues. This function performs all the
-   * operations needed to compute the data of an FESubFaceValues object.
-   *
-   * In the current case, this function returns no meaningful information,
-   * since the element has no degrees of freedom.
-   */
   virtual
   void
-  fill_fe_subface_values (const Mapping<dim,spacedim> &mapping,
+  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,
-                          const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-                          const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-                          FEValuesData<dim,spacedim> &data) const;
+                          const unsigned int                                         face_no,
+                          const unsigned int                                         sub_no,
+                          const Quadrature<dim-1>                                   &quadrature,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                          const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                          internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
   /**
    * Prepare internal data structures and fill in values independent of the
index b82cf5b530e15076d467105645de0dd5f7db7935..4097495eec21848854e4f29d0bdbe17f13eec0ec 100644 (file)
@@ -168,34 +168,39 @@ protected:
             const Mapping<dim,spacedim> &mapping,
             const Quadrature<dim> &quadrature) const;
 
-  virtual void
-  fill_fe_values (const Mapping<dim,spacedim>                           &mapping,
+  virtual
+  void
+  fill_fe_values (const Mapping<dim,spacedim>                               &mapping,
                   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                  const Quadrature<dim>                                 &quadrature,
-                  const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                  const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                  FEValuesData<dim,spacedim>                            &data,
-                  const CellSimilarity::Similarity                       cell_similarity) const;
+                  const Quadrature<dim>                                     &quadrature,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                  const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                  internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                  const CellSimilarity::Similarity                           cell_similarity) const;
 
-  virtual void
-  fill_fe_face_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_face_values (const Mapping<dim,spacedim>                               &mapping,
                        const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                       const unsigned int                    face_no,
-                       const Quadrature<dim-1>                &quadrature,
-                       const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                       const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                       FEValuesData<dim,spacedim> &data) const;
+                       const unsigned int                                         face_no,
+                       const Quadrature<dim-1>                                   &quadrature,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                       const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
-  virtual void
-  fill_fe_subface_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_subface_values (const Mapping<dim,spacedim>                               &mapping,
                           const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                          const unsigned int                    face_no,
-                          const unsigned int                    sub_no,
-                          const Quadrature<dim-1>                &quadrature,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                          FEValuesData<dim,spacedim> &data) const;
-
+                          const unsigned int                                         face_no,
+                          const unsigned int                                         sub_no,
+                          const Quadrature<dim-1>                                   &quadrature,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                          const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                          internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
   /**
    * Determine the values that need to be computed on the unit cell to be able
index 61b6e9fb02eb628978de04911f7fbedd6418d2b9..3379671e627ca066ab84a9171aca90028e2c14f3 100644 (file)
@@ -247,14 +247,15 @@ FE_Poly<POLY,dim,spacedim>::get_data (const UpdateFlags      update_flags,
 
 template <class POLY, int dim, int spacedim>
 void
-FE_Poly<POLY,dim,spacedim>::fill_fe_values
-(const Mapping<dim,spacedim>                      &mapping,
- const typename Triangulation<dim,spacedim>::cell_iterator &cell,
- const Quadrature<dim>                            &quadrature,
- const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
- const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
- FEValuesData<dim,spacedim>                       &data,
- const CellSimilarity::Similarity                  cell_similarity) const
+FE_Poly<POLY,dim,spacedim>::
+fill_fe_values (const Mapping<dim,spacedim>                      &mapping,
+                const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+                const Quadrature<dim>                            &quadrature,
+                const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
+                const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
+                const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                const CellSimilarity::Similarity                  cell_similarity) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -269,16 +270,18 @@ FE_Poly<POLY,dim,spacedim>::fill_fe_values
     {
       if (flags & update_values)
         for (unsigned int i=0; i<quadrature.size(); ++i)
-          data.shape_values(k,i) = fe_data.shape_values[k][i];
+          output_data.shape_values(k,i) = fe_data.shape_values[k][i];
 
       if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                          mapping_data, mapping_covariant);
+        mapping.transform(fe_data.shape_gradients[k],
+                          output_data.shape_gradients[k],
+                          mapping_internal, mapping_covariant);
     }
 
   if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
     this->compute_2nd (mapping, cell, QProjector<dim>::DataSetDescriptor::cell(),
-                       mapping_data, fe_data, data);
+                       mapping_internal, fe_data,
+                       output_data);
 }
 
 
@@ -290,9 +293,10 @@ 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,
-                     const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_data,
+                     const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_internal,
                      const typename Mapping<dim,spacedim>::InternalDataBase       &fedata,
-                     FEValuesData<dim,spacedim>                    &data) const
+                     const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                     internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -318,16 +322,17 @@ fill_fe_face_values (const Mapping<dim,spacedim>                   &mapping,
     {
       if (flags & update_values)
         for (unsigned int i=0; i<quadrature.size(); ++i)
-          data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
+          output_data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
 
       if (flags & update_gradients)
         mapping.transform(make_slice(fe_data.shape_gradients[k], offset, quadrature.size()),
-                          data.shape_gradients[k],
-                          mapping_data, mapping_covariant);
+                          output_data.shape_gradients[k],
+                          mapping_internal, mapping_covariant);
     }
 
   if (flags & update_hessians)
-    this->compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    this->compute_2nd (mapping, cell, offset, mapping_internal, fe_data,
+                       output_data);
 }
 
 
@@ -400,14 +405,16 @@ fill_fe_face_values (const Mapping<dim,spacedim>                   &mapping,
 
 template <class POLY, int dim, int spacedim>
 void
-FE_Poly<POLY,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,
-                                                    const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_data,
-                                                    const typename Mapping<dim,spacedim>::InternalDataBase       &fedata,
-                                                    FEValuesData<dim,spacedim>                    &data) const
+FE_Poly<POLY,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,
+                        const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_internal,
+                        const typename Mapping<dim,spacedim>::InternalDataBase       &fedata,
+                        const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                        internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -434,16 +441,17 @@ FE_Poly<POLY,dim,spacedim>::fill_fe_subface_values (const Mapping<dim,spacedim>
     {
       if (flags & update_values)
         for (unsigned int i=0; i<quadrature.size(); ++i)
-          data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
+          output_data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
 
       if (flags & update_gradients)
         mapping.transform(make_slice(fe_data.shape_gradients[k], offset, quadrature.size()),
-                          data.shape_gradients[k],
-                          mapping_data, mapping_covariant);
+                          output_data.shape_gradients[k],
+                          mapping_internal, mapping_covariant);
     }
 
   if (flags & update_hessians)
-    this->compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    this->compute_2nd (mapping, cell, offset, mapping_internal, fe_data,
+                       output_data);
 }
 
 
index 8f370c363f96157fdb4b69049fcf1f0970a8cae0..28f9d23cdc750f6a74c5af541604de7414017c4c 100644 (file)
@@ -156,34 +156,39 @@ protected:
                     const Mapping<dim,spacedim> &mapping,
                     const Quadrature<dim-1>& quadrature) const;
 
-  virtual void
-  fill_fe_values (const Mapping<dim,spacedim>                           &mapping,
+  virtual
+  void
+  fill_fe_values (const Mapping<dim,spacedim>                               &mapping,
                   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                  const Quadrature<dim>                                 &quadrature,
-                  const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                  const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                  FEValuesData<dim,spacedim>                            &data,
-                  const CellSimilarity::Similarity                       cell_similarity) const;
+                  const Quadrature<dim>                                     &quadrature,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                  const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                  internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                  const CellSimilarity::Similarity                           cell_similarity) const;
 
-  virtual void
-  fill_fe_face_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_face_values (const Mapping<dim,spacedim>                               &mapping,
                        const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                       const unsigned int                    face_no,
-                       const Quadrature<dim-1>                &quadrature,
-                       const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                       const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                       FEValuesData<dim,spacedim> &data) const;
+                       const unsigned int                                         face_no,
+                       const Quadrature<dim-1>                                   &quadrature,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                       const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
-  virtual void
-  fill_fe_subface_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_subface_values (const Mapping<dim,spacedim>                               &mapping,
                           const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                          const unsigned int                    face_no,
-                          const unsigned int                    sub_no,
-                          const Quadrature<dim-1>                &quadrature,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                          FEValuesData<dim,spacedim> &data) const;
-
+                          const unsigned int                                         face_no,
+                          const unsigned int                                         sub_no,
+                          const Quadrature<dim-1>                                   &quadrature,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                          const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                          internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
   /**
    * Determine the values that need to be computed on the unit cell to be able
index 22fe72a67264a98d1564c7fddfcd1c8158d610c2..8b21146eb10278362d945ed7f9e3e4ab6d843711 100644 (file)
@@ -1,6 +1,6 @@
 // ---------------------------------------------------------------------
 //
-// Copyright (C) 2009 - 2014 by the deal.II authors
+// Copyright (C) 2009 - 2015 by the deal.II authors
 //
 // This file is part of the deal.II library.
 //
@@ -171,14 +171,15 @@ FE_PolyFace<POLY,dim,spacedim>::get_subface_data (
 //---------------------------------------------------------------------------
 template <class POLY, int dim, int spacedim>
 void
-FE_PolyFace<POLY,dim,spacedim>::fill_fe_values
-(const Mapping<dim,spacedim> &,
- const typename Triangulation<dim,spacedim>::cell_iterator &,
- const Quadrature<dim> &,
- const typename Mapping<dim,spacedim>::InternalDataBase &,
- const typename Mapping<dim,spacedim>::InternalDataBase &,
- FEValuesData<dim,spacedim> &,
- const CellSimilarity::Similarity ) const
+FE_PolyFace<POLY,dim,spacedim>::
+fill_fe_values (const Mapping<dim,spacedim> &,
+                const typename Triangulation<dim,spacedim>::cell_iterator &,
+                const Quadrature<dim> &,
+                const typename Mapping<dim,spacedim>::InternalDataBase &,
+                const typename Mapping<dim,spacedim>::InternalDataBase &,
+                const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                internal::FEValues::FiniteElementRelatedData<dim,spacedim> &,
+                const CellSimilarity::Similarity ) const
 {
   // Do nothing, since we do not have
   // values in the interior
@@ -188,14 +189,15 @@ FE_PolyFace<POLY,dim,spacedim>::fill_fe_values
 
 template <class POLY, int dim, int spacedim>
 void
-FE_PolyFace<POLY,dim,spacedim>::fill_fe_face_values (
-  const Mapping<dim,spacedim> &,
-  const typename Triangulation<dim,spacedim>::cell_iterator &,
-  const unsigned int face,
-  const Quadrature<dim-1>& quadrature,
-  const typename Mapping<dim,spacedim>::InternalDataBase &,
-  const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-  FEValuesData<dim,spacedim> &data) const
+FE_PolyFace<POLY,dim,spacedim>::
+fill_fe_face_values (const Mapping<dim,spacedim> &,
+                     const typename Triangulation<dim,spacedim>::cell_iterator &,
+                     const unsigned int face,
+                     const Quadrature<dim-1>& quadrature,
+                     const typename Mapping<dim,spacedim>::InternalDataBase &,
+                     const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
+                     const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                     internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -210,7 +212,7 @@ FE_PolyFace<POLY,dim,spacedim>::fill_fe_face_values (
     for (unsigned int i=0; i<quadrature.size(); ++i)
       {
         for (unsigned int k=0; k<this->dofs_per_cell; ++k)
-          data.shape_values(k,i) = 0.;
+          output_data.shape_values(k,i) = 0.;
         switch (dim)
           {
           case 3:
@@ -220,7 +222,7 @@ FE_PolyFace<POLY,dim,spacedim>::fill_fe_face_values (
               {
                 const unsigned int foffset = this->first_quad_index + this->dofs_per_quad * face;
                 for (unsigned int k=0; k<this->dofs_per_quad; ++k)
-                  data.shape_values(foffset+k,i) = fe_data.shape_values[k+this->first_face_quad_index][i];
+                  output_data.shape_values(foffset+k,i) = fe_data.shape_values[k+this->first_face_quad_index][i];
               }
           }
           case 2:
@@ -232,7 +234,8 @@ FE_PolyFace<POLY,dim,spacedim>::fill_fe_face_values (
                 for (unsigned int line=0; line<GeometryInfo<dim>::lines_per_face; ++line)
                   {
                     for (unsigned int k=0; k<this->dofs_per_line; ++k)
-                      data.shape_values(foffset+GeometryInfo<dim>::face_to_cell_lines(face, line)*this->dofs_per_line+k,i) = fe_data.shape_values[k+(line*this->dofs_per_line)+this->first_face_line_index][i];
+                      output_data.shape_values(foffset+GeometryInfo<dim>::face_to_cell_lines(face, line)*this->dofs_per_line+k,i)
+                        = fe_data.shape_values[k+(line*this->dofs_per_line)+this->first_face_line_index][i];
                   }
               }
           }
@@ -241,7 +244,8 @@ FE_PolyFace<POLY,dim,spacedim>::fill_fe_face_values (
             // Fill data for vertex shape functions
             if (this->dofs_per_vertex != 0)
               for (unsigned int lvertex=0; lvertex<GeometryInfo<dim>::vertices_per_face; ++lvertex)
-                data.shape_values(GeometryInfo<dim>::face_to_cell_vertices(face, lvertex),i) = fe_data.shape_values[lvertex][i];
+                output_data.shape_values(GeometryInfo<dim>::face_to_cell_vertices(face, lvertex),i)
+                  = fe_data.shape_values[lvertex][i];
             break;
           }
           }
@@ -251,15 +255,16 @@ FE_PolyFace<POLY,dim,spacedim>::fill_fe_face_values (
 
 template <class POLY, int dim, int spacedim>
 void
-FE_PolyFace<POLY,dim,spacedim>::fill_fe_subface_values (
-  const Mapping<dim,spacedim> &,
-  const typename Triangulation<dim,spacedim>::cell_iterator &,
-  const unsigned int face,
-  const unsigned int subface,
-  const Quadrature<dim-1>& quadrature,
-  const typename Mapping<dim,spacedim>::InternalDataBase &,
-  const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-  FEValuesData<dim,spacedim> &data) const
+FE_PolyFace<POLY,dim,spacedim>::
+fill_fe_subface_values (const Mapping<dim,spacedim> &,
+                        const typename Triangulation<dim,spacedim>::cell_iterator &,
+                        const unsigned int face,
+                        const unsigned int subface,
+                        const Quadrature<dim-1>& quadrature,
+                        const typename Mapping<dim,spacedim>::InternalDataBase &,
+                        const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
+                        const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                        internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -277,9 +282,9 @@ FE_PolyFace<POLY,dim,spacedim>::fill_fe_subface_values (
     for (unsigned int i=0; i<quadrature.size(); ++i)
       {
         for (unsigned int k=0; k<this->dofs_per_cell; ++k)
-          data.shape_values(k,i) = 0.;
+          output_data.shape_values(k,i) = 0.;
         for (unsigned int k=0; k<fe_data.shape_values.size(); ++k)
-          data.shape_values(foffset+k,i) = fe_data.shape_values[k][i+offset];
+          output_data.shape_values(foffset+k,i) = fe_data.shape_values[k][i+offset];
       }
 
   Assert (!(flags & update_gradients), ExcNotImplemented());
index 15198386cb91b1c958a0f25f9771a3756171cff9..eeb4043a6af1e2022da7e9ea98b1860c109c8e87 100644 (file)
@@ -181,33 +181,39 @@ protected:
             const Mapping<dim,spacedim> &mapping,
             const Quadrature<dim> &quadrature) const;
 
-  virtual void
-  fill_fe_values (const Mapping<dim,spacedim>                       &mapping,
+  virtual
+  void
+  fill_fe_values (const Mapping<dim,spacedim>                               &mapping,
                   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                  const Quadrature<dim>                             &quadrature,
-                  const typename Mapping<dim,spacedim>::InternalDataBase  &mapping_internal,
-                  const typename Mapping<dim,spacedim>::InternalDataBase  &fe_internal,
-                  FEValuesData<dim,spacedim>                        &data,
-                  const CellSimilarity::Similarity                   cell_similarity) const;
+                  const Quadrature<dim>                                     &quadrature,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                  const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                  internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                  const CellSimilarity::Similarity                           cell_similarity) const;
 
-  virtual void
-  fill_fe_face_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_face_values (const Mapping<dim,spacedim>                               &mapping,
                        const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                       const unsigned int                                  face_no,
-                       const Quadrature<dim-1>                            &quadrature,
-                       const typename Mapping<dim,spacedim>::InternalDataBase   &mapping_internal,
-                       const typename Mapping<dim,spacedim>::InternalDataBase   &fe_internal,
-                       FEValuesData<dim,spacedim> &data) const;
+                       const unsigned int                                         face_no,
+                       const Quadrature<dim-1>                                   &quadrature,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                       const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
-  virtual void
-  fill_fe_subface_values (const Mapping<dim,spacedim> &mapping,
+  virtual
+  void
+  fill_fe_subface_values (const Mapping<dim,spacedim>                               &mapping,
                           const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                          const unsigned int                    face_no,
-                          const unsigned int                    sub_no,
-                          const Quadrature<dim-1>                &quadrature,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                          FEValuesData<dim,spacedim> &data) const;
+                          const unsigned int                                         face_no,
+                          const unsigned int                                         sub_no,
+                          const Quadrature<dim-1>                                   &quadrature,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                          const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                          internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
   /**
    * Fields of cell-independent data for FE_PolyTensor. Stores the values of
index 578fd8c38d76e12204c189105d8bdef994d66d68..9efbc1ef32aa356595d1341a08a2ef0458fcdc3d 100644 (file)
@@ -812,52 +812,39 @@ protected:
                     const Mapping<dim,spacedim>    &mapping,
                     const Quadrature<dim-1> &quadrature) const;
 
-  /**
-   * Implementation of the same function in FiniteElement.
-   *
-   * Passes on control to @p compute_fill that does the work for all three
-   * <tt>fill_fe*_values</tt> functions.
-   */
-  virtual void
-  fill_fe_values (const Mapping<dim,spacedim>                      &mapping,
+  virtual
+  void
+  fill_fe_values (const Mapping<dim,spacedim>                               &mapping,
                   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                  const Quadrature<dim>                            &quadrature,
-                  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-                  const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
-                  FEValuesData<dim,spacedim>                       &data,
-                  const CellSimilarity::Similarity                  cell_similarity) const;
+                  const Quadrature<dim>                                     &quadrature,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                  const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                  const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                  internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                  const CellSimilarity::Similarity                           cell_similarity) const;
 
-  /**
-   * Implementation of the same function in FiniteElement.
-   *
-   * Passes on control to @p compute_fill that does the work for all three
-   * <tt>fill_fe*_values</tt> functions.
-   */
-  virtual void
-  fill_fe_face_values (const Mapping<dim,spacedim>                   &mapping,
+  virtual
+  void
+  fill_fe_face_values (const Mapping<dim,spacedim>                               &mapping,
                        const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                       const unsigned int                    face_no,
-                       const Quadrature<dim-1>              &quadrature,
-                       const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_data,
-                       const typename Mapping<dim,spacedim>::InternalDataBase      &fe_data,
-                       FEValuesData<dim,spacedim>                    &data) const;
+                       const unsigned int                                         face_no,
+                       const Quadrature<dim-1>                                   &quadrature,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                       const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                       const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
-  /**
-   * Implementation of the same function in FiniteElement.
-   *
-   * Passes on control to @p compute_fill that does the work for all three
-   * <tt>fill_fe*_values</tt> functions.
-   */
-  virtual void
-  fill_fe_subface_values (const Mapping<dim,spacedim>                   &mapping,
+  virtual
+  void
+  fill_fe_subface_values (const Mapping<dim,spacedim>                               &mapping,
                           const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-                          const unsigned int                    face_no,
-                          const unsigned int                    sub_no,
-                          const Quadrature<dim-1>              &quadrature,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &mapping_data,
-                          const typename Mapping<dim,spacedim>::InternalDataBase      &fe_data,
-                          FEValuesData<dim,spacedim>                    &data) const;
-
+                          const unsigned int                                         face_no,
+                          const unsigned int                                         sub_no,
+                          const Quadrature<dim-1>                                   &quadrature,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &mapping_internal,
+                          const typename Mapping<dim,spacedim>::InternalDataBase    &fe_internal,
+                          const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                          internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
   /**
    * Do the work for the three <tt>fill_fe*_values</tt> functions.
@@ -876,9 +863,10 @@ protected:
                      const unsigned int                                sub_no,
                      const Quadrature<dim_1>                          &quadrature,
                      const CellSimilarity::Similarity                   cell_similarity,
-                     const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
+                     const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
                      const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
-                     FEValuesData<dim,spacedim>                       &data) const;
+                     const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                     internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
 private:
 
@@ -1044,16 +1032,16 @@ private:
    */
   template <int dim_1>
   void
-  compute_fill_one_base (
-    const Mapping<dim,spacedim>                      &mapping,
-    const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-    const std::pair<unsigned int,unsigned int>        face_sub_no,
-    const Quadrature<dim_1>                          &quadrature,
-    const CellSimilarity::Similarity                  cell_similarity,
-    const std::pair<const typename Mapping<dim,spacedim>::InternalDataBase *,
-    const typename Mapping<dim,spacedim>::InternalDataBase *> mapping_data,
-    const unsigned int                                base_element,
-    FEValuesData<dim,spacedim>                       &data) const;
+  compute_fill_one_base (const Mapping<dim,spacedim>                      &mapping,
+                         const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+                         const std::pair<unsigned int,unsigned int>        face_sub_no,
+                         const Quadrature<dim_1>                          &quadrature,
+                         const CellSimilarity::Similarity                  cell_similarity,
+                         const std::pair<const typename Mapping<dim,spacedim>::InternalDataBase *,
+                         const typename Mapping<dim,spacedim>::InternalDataBase *> mapping_internal,
+                         const unsigned int                                base_element,
+                         const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                         internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const;
 
   /**
    * Usually: Fields of cell-independent data.
index b8bf0faaa836e3c3cbca0d91867555636928be36..cfe74c284a38e02b501f8d92b6e59ff104431b05 100644 (file)
@@ -277,19 +277,20 @@ FE_DGPNonparametric<dim,spacedim>::get_data (
 
 template <int dim, int spacedim>
 void
-FE_DGPNonparametric<dim,spacedim>::fill_fe_values (
-  const Mapping<dim,spacedim> &,
-  const typename Triangulation<dim,spacedim>::cell_iterator &,
-  const Quadrature<dim> &,
-  const typename Mapping<dim,spacedim>::InternalDataBase &,
-  const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
-  FEValuesData<dim,spacedim> &data,
-  const CellSimilarity::Similarity /*cell_similarity*/) const
+FE_DGPNonparametric<dim,spacedim>::
+fill_fe_values (const Mapping<dim,spacedim> &,
+                const typename Triangulation<dim,spacedim>::cell_iterator &,
+                const Quadrature<dim> &,
+                const typename Mapping<dim,spacedim>::InternalDataBase &,
+                const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
+                const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                const CellSimilarity::Similarity /*cell_similarity*/) const
 {
   const UpdateFlags flags(fe_data.current_update_flags());
   Assert (flags & update_quadrature_points, ExcInternalError());
 
-  const unsigned int n_q_points = data.quadrature_points.size();
+  const unsigned int n_q_points = mapping_data.quadrature_points.size();
 
   std::vector<double> values(flags & update_values ? this->dofs_per_cell : 0);
   std::vector<Tensor<1,dim> > grads(flags & update_gradients ? this->dofs_per_cell : 0);
@@ -298,16 +299,16 @@ FE_DGPNonparametric<dim,spacedim>::fill_fe_values (
   if (flags & (update_values | update_gradients))
     for (unsigned int i=0; i<n_q_points; ++i)
       {
-        polynomial_space.compute(data.quadrature_points[i],
+        polynomial_space.compute(mapping_data.quadrature_points[i],
                                  values, grads, grad_grads);
         for (unsigned int k=0; k<this->dofs_per_cell; ++k)
           {
             if (flags & update_values)
-              data.shape_values[k][i] = values[k];
+              output_data.shape_values[k][i] = values[k];
             if (flags & update_gradients)
-              data.shape_gradients[k][i] = grads[k];
+              output_data.shape_gradients[k][i] = grads[k];
             if (flags & update_hessians)
-              data.shape_hessians[k][i] = grad_grads[k];
+              output_data.shape_hessians[k][i] = grad_grads[k];
           }
       }
 }
@@ -316,19 +317,20 @@ FE_DGPNonparametric<dim,spacedim>::fill_fe_values (
 
 template <int dim, int spacedim>
 void
-FE_DGPNonparametric<dim,spacedim>::fill_fe_face_values (
-  const Mapping<dim,spacedim> &,
-  const typename Triangulation<dim,spacedim>::cell_iterator &,
-  const unsigned int,
-  const Quadrature<dim-1>&,
-  const typename Mapping<dim,spacedim>::InternalDataBase &,
-  const typename Mapping<dim,spacedim>::InternalDataBase       &fe_data,
-  FEValuesData<dim,spacedim>                             &data) const
+FE_DGPNonparametric<dim,spacedim>::
+fill_fe_face_values (const Mapping<dim,spacedim> &,
+                     const typename Triangulation<dim,spacedim>::cell_iterator &,
+                     const unsigned int,
+                     const Quadrature<dim-1>&,
+                     const typename Mapping<dim,spacedim>::InternalDataBase &,
+                     const typename Mapping<dim,spacedim>::InternalDataBase       &fe_data,
+                     const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                     internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   const UpdateFlags flags(fe_data.update_once | fe_data.update_each);
   Assert (flags & update_quadrature_points, ExcInternalError());
 
-  const unsigned int n_q_points = data.quadrature_points.size();
+  const unsigned int n_q_points = mapping_data.quadrature_points.size();
 
   std::vector<double> values(flags & update_values ? this->dofs_per_cell : 0);
   std::vector<Tensor<1,dim> > grads(flags & update_gradients ? this->dofs_per_cell : 0);
@@ -337,16 +339,16 @@ FE_DGPNonparametric<dim,spacedim>::fill_fe_face_values (
   if (flags & (update_values | update_gradients))
     for (unsigned int i=0; i<n_q_points; ++i)
       {
-        polynomial_space.compute(data.quadrature_points[i],
+        polynomial_space.compute(mapping_data.quadrature_points[i],
                                  values, grads, grad_grads);
         for (unsigned int k=0; k<this->dofs_per_cell; ++k)
           {
             if (flags & update_values)
-              data.shape_values[k][i] = values[k];
+              output_data.shape_values[k][i] = values[k];
             if (flags & update_gradients)
-              data.shape_gradients[k][i] = grads[k];
+              output_data.shape_gradients[k][i] = grads[k];
             if (flags & update_hessians)
-              data.shape_hessians[k][i] = grad_grads[k];
+              output_data.shape_hessians[k][i] = grad_grads[k];
           }
       }
 }
@@ -355,20 +357,21 @@ FE_DGPNonparametric<dim,spacedim>::fill_fe_face_values (
 
 template <int dim, int spacedim>
 void
-FE_DGPNonparametric<dim,spacedim>::fill_fe_subface_values (
-  const Mapping<dim,spacedim> &,
-  const typename Triangulation<dim,spacedim>::cell_iterator &,
-  const unsigned int,
-  const unsigned int,
-  const Quadrature<dim-1>&,
-  const typename Mapping<dim,spacedim>::InternalDataBase &,
-  const typename Mapping<dim,spacedim>::InternalDataBase       &fe_data,
-  FEValuesData<dim,spacedim>                             &data) const
+FE_DGPNonparametric<dim,spacedim>::
+fill_fe_subface_values (const Mapping<dim,spacedim> &,
+                        const typename Triangulation<dim,spacedim>::cell_iterator &,
+                        const unsigned int,
+                        const unsigned int,
+                        const Quadrature<dim-1>&,
+                        const typename Mapping<dim,spacedim>::InternalDataBase &,
+                        const typename Mapping<dim,spacedim>::InternalDataBase       &fe_data,
+                        const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                        internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   const UpdateFlags flags(fe_data.update_once | fe_data.update_each);
   Assert (flags & update_quadrature_points, ExcInternalError());
 
-  const unsigned int n_q_points = data.quadrature_points.size();
+  const unsigned int n_q_points = mapping_data.quadrature_points.size();
 
   std::vector<double> values(flags & update_values ? this->dofs_per_cell : 0);
   std::vector<Tensor<1,dim> > grads(flags & update_gradients ? this->dofs_per_cell : 0);
@@ -377,16 +380,16 @@ FE_DGPNonparametric<dim,spacedim>::fill_fe_subface_values (
   if (flags & (update_values | update_gradients))
     for (unsigned int i=0; i<n_q_points; ++i)
       {
-        polynomial_space.compute(data.quadrature_points[i],
+        polynomial_space.compute(mapping_data.quadrature_points[i],
                                  values, grads, grad_grads);
         for (unsigned int k=0; k<this->dofs_per_cell; ++k)
           {
             if (flags & update_values)
-              data.shape_values[k][i] = values[k];
+              output_data.shape_values[k][i] = values[k];
             if (flags & update_gradients)
-              data.shape_gradients[k][i] = grads[k];
+              output_data.shape_gradients[k][i] = grads[k];
             if (flags & update_hessians)
-              data.shape_hessians[k][i] = grad_grads[k];
+              output_data.shape_hessians[k][i] = grad_grads[k];
           }
       }
 }
index 85b909dc1dd3be4a3741d3bb9161ce8697d03d1f..d3a63e71df642772293f1dd9f213bf4b6fd8e0bb 100644 (file)
@@ -517,14 +517,15 @@ FE_FaceQ<1,spacedim>::get_subface_data (
 
 template <int spacedim>
 void
-FE_FaceQ<1,spacedim>::fill_fe_values
-(const Mapping<1,spacedim> &,
- const typename Triangulation<1,spacedim>::cell_iterator &,
- const Quadrature<1> &,
- const typename Mapping<1,spacedim>::InternalDataBase &,
- const typename Mapping<1,spacedim>::InternalDataBase &,
- FEValuesData<1,spacedim> &,
- const CellSimilarity::Similarity ) const
+FE_FaceQ<1,spacedim>::
+fill_fe_values(const Mapping<1,spacedim> &,
+               const typename Triangulation<1,spacedim>::cell_iterator &,
+               const Quadrature<1> &,
+               const typename Mapping<1,spacedim>::InternalDataBase &,
+               const typename Mapping<1,spacedim>::InternalDataBase &,
+               const internal::FEValues::MappingRelatedData<1,spacedim> &,
+               internal::FEValues::FiniteElementRelatedData<1,spacedim> &,
+               const CellSimilarity::Similarity ) const
 {
   // Do nothing, since we do not have values in the interior
 }
@@ -533,14 +534,15 @@ FE_FaceQ<1,spacedim>::fill_fe_values
 
 template <int spacedim>
 void
-FE_FaceQ<1,spacedim>::fill_fe_face_values (
-  const Mapping<1,spacedim> &,
-  const typename Triangulation<1,spacedim>::cell_iterator &,
-  const unsigned int face,
-  const Quadrature<0> &,
-  const typename Mapping<1,spacedim>::InternalDataBase &,
-  const typename Mapping<1,spacedim>::InternalDataBase &fedata,
-  FEValuesData<1,spacedim> &data) const
+FE_FaceQ<1,spacedim>::
+fill_fe_face_values (const Mapping<1,spacedim> &,
+                     const typename Triangulation<1,spacedim>::cell_iterator &,
+                     const unsigned int face,
+                     const Quadrature<0> &,
+                     const typename Mapping<1,spacedim>::InternalDataBase &,
+                     const typename Mapping<1,spacedim>::InternalDataBase &fedata,
+                     const internal::FEValues::MappingRelatedData<1,spacedim> &,
+                     internal::FEValues::FiniteElementRelatedData<1,spacedim> &output_data) const
 {
   const UpdateFlags flags(fedata.update_once | fedata.update_each);
 
@@ -548,23 +550,24 @@ FE_FaceQ<1,spacedim>::fill_fe_face_values (
   if (flags & update_values)
     {
       for (unsigned int k=0; k<this->dofs_per_cell; ++k)
-        data.shape_values(k,0) = 0.;
-      data.shape_values(foffset,0) = 1;
+        output_data.shape_values(k,0) = 0.;
+      output_data.shape_values(foffset,0) = 1;
     }
 }
 
 
 template <int spacedim>
 void
-FE_FaceQ<1,spacedim>::fill_fe_subface_values (
-  const Mapping<1,spacedim> &,
-  const typename Triangulation<1,spacedim>::cell_iterator &,
-  const unsigned int ,
-  const unsigned int ,
-  const Quadrature<0> &,
-  const typename Mapping<1,spacedim>::InternalDataBase &,
-  const typename Mapping<1,spacedim>::InternalDataBase &,
-  FEValuesData<1,spacedim> &) const
+FE_FaceQ<1,spacedim>::
+fill_fe_subface_values (const Mapping<1,spacedim> &,
+                        const typename Triangulation<1,spacedim>::cell_iterator &,
+                        const unsigned int ,
+                        const unsigned int ,
+                        const Quadrature<0> &,
+                        const typename Mapping<1,spacedim>::InternalDataBase &,
+                        const typename Mapping<1,spacedim>::InternalDataBase &,
+                        const internal::FEValues::MappingRelatedData<1,spacedim> &,
+                        internal::FEValues::FiniteElementRelatedData<1,spacedim> &) const
 {
   Assert(false, ExcMessage("There are no sub-face values to fill in 1D!"));
 }
index 8ffc976137885f6aa31709792031569372971a8c..08a4b7cdd29c6503045b80b7e03e2a4bb90c5864 100644 (file)
@@ -122,7 +122,8 @@ fill_fe_values (const Mapping<dim,spacedim> & /*mapping*/,
                 const Quadrature<dim> & /*quadrature*/,
                 const typename Mapping<dim,spacedim>::InternalDataBase & /*mapping_data*/,
                 const typename Mapping<dim,spacedim>::InternalDataBase & /*fedata*/,
-                FEValuesData<dim,spacedim> & /*data*/,
+                const internal::FEValues::MappingRelatedData<dim,spacedim> &/*mapping_data*/,
+                internal::FEValues::FiniteElementRelatedData<dim,spacedim> &/*output_data*/,
                 const CellSimilarity::Similarity  /*cell_similarity*/) const
 {
   // leave data fields empty
@@ -139,7 +140,8 @@ fill_fe_face_values (const Mapping<dim,spacedim> & /*mapping*/,
                      const Quadrature<dim-1> & /*quadrature*/,
                      const typename Mapping<dim,spacedim>::InternalDataBase & /*mapping_data*/,
                      const typename Mapping<dim,spacedim>::InternalDataBase & /*fedata*/,
-                     FEValuesData<dim,spacedim> & /*data*/) const
+                     const internal::FEValues::MappingRelatedData<dim,spacedim> &/*mapping_data*/,
+                     internal::FEValues::FiniteElementRelatedData<dim,spacedim> &/*output_data*/) const
 {
   // leave data fields empty
 }
@@ -154,7 +156,8 @@ fill_fe_subface_values (const Mapping<dim,spacedim> & /*mapping*/,
                         const Quadrature<dim-1> & /*quadrature*/,
                         const typename Mapping<dim,spacedim>::InternalDataBase & /*mapping_data*/,
                         const typename Mapping<dim,spacedim>::InternalDataBase & /*fedata*/,
-                        FEValuesData<dim,spacedim> & /*data*/) const
+                        const internal::FEValues::MappingRelatedData<dim,spacedim> &/*mapping_data*/,
+                        internal::FEValues::FiniteElementRelatedData<dim,spacedim> &/*output_data*/) const
 {
   // leave data fields empty
 }
index cf31ba690fe9294fdfdf73a3ba7d8d47516bcf75..b36b543f743eeca45cd4bd046092e07f6c5995a7 100644 (file)
@@ -1,6 +1,6 @@
 // ---------------------------------------------------------------------
 //
-// Copyright (C) 2004 - 2014 by the deal.II authors
+// Copyright (C) 2004 - 2015 by the deal.II authors
 //
 // This file is part of the deal.II library.
 //
@@ -29,14 +29,15 @@ DEAL_II_NAMESPACE_OPEN
 
 template <>
 void
-FE_Poly<TensorProductPolynomials<1>,1,2>::fill_fe_values
-(const Mapping<1,2>                        &mapping,
- const Triangulation<1,2>::cell_iterator   &cell,
- const Quadrature<1>                       &quadrature,
- const Mapping<1,2>::InternalDataBase            &mapping_data,
- const Mapping<1,2>::InternalDataBase            &fedata,
- FEValuesData<1,2>                         &data,
- const CellSimilarity::Similarity           cell_similarity) const
+FE_Poly<TensorProductPolynomials<1>,1,2>::
+fill_fe_values (const Mapping<1,2>                        &mapping,
+                const Triangulation<1,2>::cell_iterator   &cell,
+                const Quadrature<1>                       &quadrature,
+                const Mapping<1,2>::InternalDataBase            &mapping_internal,
+                const Mapping<1,2>::InternalDataBase            &fedata,
+                const internal::FEValues::MappingRelatedData<1,2> &,
+                internal::FEValues::FiniteElementRelatedData<1,2> &output_data,
+                const CellSimilarity::Similarity           cell_similarity) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -51,30 +52,33 @@ FE_Poly<TensorProductPolynomials<1>,1,2>::fill_fe_values
     {
       if (flags & update_values)
         for (unsigned int i=0; i<quadrature.size(); ++i)
-          data.shape_values(k,i) = fe_data.shape_values[k][i];
+          output_data.shape_values(k,i) = fe_data.shape_values[k][i];
 
       if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                          mapping_data, mapping_covariant);
+        mapping.transform(fe_data.shape_gradients[k],
+                          output_data.shape_gradients[k],
+                          mapping_internal, mapping_covariant);
     }
 
   if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
     this->compute_2nd (mapping, cell, QProjector<1>::DataSetDescriptor::cell(),
-                       mapping_data, fe_data, data);
+                       mapping_internal, fe_data,
+                       output_data);
 }
 
 
 
 template <>
 void
-FE_Poly<TensorProductPolynomials<2>,2,3>::fill_fe_values
-(const Mapping<2,3>                      &mapping,
- const Triangulation<2,3>::cell_iterator &cell,
- const Quadrature<2>                     &quadrature,
- const Mapping<2,3>::InternalDataBase          &mapping_data,
- const Mapping<2,3>::InternalDataBase          &fedata,
- FEValuesData<2,3>                       &data,
- const CellSimilarity::Similarity         cell_similarity) const
+FE_Poly<TensorProductPolynomials<2>,2,3>::
+fill_fe_values (const Mapping<2,3>                      &mapping,
+                const Triangulation<2,3>::cell_iterator &cell,
+                const Quadrature<2>                     &quadrature,
+                const Mapping<2,3>::InternalDataBase          &mapping_internal,
+                const Mapping<2,3>::InternalDataBase          &fedata,
+                const internal::FEValues::MappingRelatedData<2,3> &,
+                internal::FEValues::FiniteElementRelatedData<2,3> &output_data,
+                const CellSimilarity::Similarity         cell_similarity) const
 {
 
   // assert that the following dynamics
@@ -88,29 +92,32 @@ FE_Poly<TensorProductPolynomials<2>,2,3>::fill_fe_values
     {
       if (flags & update_values)
         for (unsigned int i=0; i<quadrature.size(); ++i)
-          data.shape_values(k,i) = fe_data.shape_values[k][i];
+          output_data.shape_values(k,i) = fe_data.shape_values[k][i];
 
       if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                          mapping_data, mapping_covariant);
+        mapping.transform(fe_data.shape_gradients[k],
+                          output_data.shape_gradients[k],
+                          mapping_internal, mapping_covariant);
     }
 
   if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
     this->compute_2nd (mapping, cell, QProjector<2>::DataSetDescriptor::cell(),
-                       mapping_data, fe_data, data);
+                       mapping_internal, fe_data,
+                       output_data);
 }
 
 
 template <>
 void
-FE_Poly<PolynomialSpace<1>,1,2>::fill_fe_values (
-  const Mapping<1,2>                      &mapping,
-  const Triangulation<1,2>::cell_iterator &cell,
-  const Quadrature<1>                     &quadrature,
-  const Mapping<1,2>::InternalDataBase          &mapping_data,
-  const Mapping<1,2>::InternalDataBase          &fedata,
-  FEValuesData<1,2>                       &data,
-  const CellSimilarity::Similarity         cell_similarity) const
+FE_Poly<PolynomialSpace<1>,1,2>::
+fill_fe_values (const Mapping<1,2>                      &mapping,
+                const Triangulation<1,2>::cell_iterator &cell,
+                const Quadrature<1>                     &quadrature,
+                const Mapping<1,2>::InternalDataBase          &mapping_internal,
+                const Mapping<1,2>::InternalDataBase          &fedata,
+                const internal::FEValues::MappingRelatedData<1,2> &,
+                internal::FEValues::FiniteElementRelatedData<1,2> &output_data,
+                const CellSimilarity::Similarity         cell_similarity) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -126,29 +133,32 @@ FE_Poly<PolynomialSpace<1>,1,2>::fill_fe_values (
     {
       if (flags & update_values)
         for (unsigned int i=0; i<quadrature.size(); ++i)
-          data.shape_values(k,i) = fe_data.shape_values[k][i];
+          output_data.shape_values(k,i) = fe_data.shape_values[k][i];
 
       if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                          mapping_data, mapping_covariant);
+        mapping.transform(fe_data.shape_gradients[k],
+                          output_data.shape_gradients[k],
+                          mapping_internal, mapping_covariant);
     }
 
   if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
     this->compute_2nd (mapping, cell, QProjector<1>::DataSetDescriptor::cell(),
-                       mapping_data, fe_data, data);
+                       mapping_internal, fe_data,
+                       output_data);
 }
 
 
 template <>
 void
-FE_Poly<PolynomialSpace<2>,2,3>::fill_fe_values
-(const Mapping<2,3>                      &mapping,
- const Triangulation<2,3>::cell_iterator &cell,
- const Quadrature<2>                     &quadrature,
- const Mapping<2,3>::InternalDataBase          &mapping_data,
- const Mapping<2,3>::InternalDataBase          &fedata,
- FEValuesData<2,3>                       &data,
- const CellSimilarity::Similarity         cell_similarity) const
+FE_Poly<PolynomialSpace<2>,2,3>::
+fill_fe_values (const Mapping<2,3>                      &mapping,
+                const Triangulation<2,3>::cell_iterator &cell,
+                const Quadrature<2>                     &quadrature,
+                const Mapping<2,3>::InternalDataBase          &mapping_internal,
+                const Mapping<2,3>::InternalDataBase          &fedata,
+                const internal::FEValues::MappingRelatedData<2,3> &,
+                internal::FEValues::FiniteElementRelatedData<2,3> &output_data,
+                const CellSimilarity::Similarity         cell_similarity) const
 {
   Assert (dynamic_cast<const InternalData *> (&fedata) != 0, ExcInternalError());
   const InternalData &fe_data = static_cast<const InternalData &> (fedata);
@@ -159,17 +169,19 @@ FE_Poly<PolynomialSpace<2>,2,3>::fill_fe_values
     {
       if (flags & update_values)
         for (unsigned int i=0; i<quadrature.size(); ++i)
-          data.shape_values(k,i) = fe_data.shape_values[k][i];
+          output_data.shape_values(k,i) = fe_data.shape_values[k][i];
 
 
       if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                          mapping_data, mapping_covariant);
+        mapping.transform(fe_data.shape_gradients[k],
+                          output_data.shape_gradients[k],
+                          mapping_internal, mapping_covariant);
     }
 
   if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
     this->compute_2nd (mapping, cell, QProjector<2>::DataSetDescriptor::cell(),
-                       mapping_data, fe_data, data);
+                       mapping_internal, fe_data,
+                       output_data);
 }
 
 
index 99cb7a2fc735a6d3161bf4fadfcf75a238366cde..efebdd71f8f60f49b05380a2cfdf5086c4579dc4 100644 (file)
@@ -389,14 +389,15 @@ FE_PolyTensor<POLY,dim,spacedim>::get_data (
 
 template <class POLY, int dim, int spacedim>
 void
-FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
-  const Mapping<dim,spacedim>                      &mapping,
-  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-  const Quadrature<dim>                            &quadrature,
-  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-  const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-  FEValuesData<dim,spacedim>                       &data,
-  const CellSimilarity::Similarity                  cell_similarity) const
+FE_PolyTensor<POLY,dim,spacedim>::
+fill_fe_values (const Mapping<dim,spacedim>                      &mapping,
+                const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+                const Quadrature<dim>                            &quadrature,
+                const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
+                const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
+                const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                const CellSimilarity::Similarity                  cell_similarity) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -429,8 +430,8 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
 
   for (unsigned int i=0; i<this->dofs_per_cell; ++i)
     {
-      const unsigned int first = data.shape_function_to_row_table[i * this->n_components() +
-                                                                  this->get_nonzero_components(i).first_selected_component()];
+      const unsigned int first = output_data.shape_function_to_row_table[i * this->n_components() +
+                                 this->get_nonzero_components(i).first_selected_component()];
 
       // update the shape function values as necessary
       //
@@ -449,7 +450,7 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
           {
             for (unsigned int k=0; k<n_q_points; ++k)
               for (unsigned int d=0; d<dim; ++d)
-                data.shape_values(first+d,k) = fe_data.shape_values[i][k][d];
+                output_data.shape_values(first+d,k) = fe_data.shape_values[i][k][d];
             break;
           }
 
@@ -458,11 +459,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
           {
             std::vector<Tensor<1,dim> > shape_values (n_q_points);
             mapping.transform(fe_data.shape_values[i],
-                              shape_values, mapping_data, mapping_type);
+                              shape_values, mapping_internal, mapping_type);
 
             for (unsigned int k=0; k<n_q_points; ++k)
               for (unsigned int d=0; d<dim; ++d)
-                data.shape_values(first+d,k) = shape_values[k][d];
+                output_data.shape_values(first+d,k) = shape_values[k][d];
 
             break;
           }
@@ -472,10 +473,10 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
           {
             std::vector<Tensor<1,dim> > shape_values (n_q_points);
             mapping.transform(fe_data.shape_values[i], shape_values,
-                              mapping_data, mapping_piola);
+                              mapping_internal, mapping_piola);
             for (unsigned int k=0; k<n_q_points; ++k)
               for (unsigned int d=0; d<dim; ++d)
-                data.shape_values(first+d,k)
+                output_data.shape_values(first+d,k)
                   = sign_change[i] * shape_values[k][d];
             break;
           }
@@ -484,11 +485,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
           {
             std::vector<Tensor<1,dim> > shape_values (n_q_points);
             mapping.transform (fe_data.shape_values[i], shape_values,
-                               mapping_data, mapping_covariant);
+                               mapping_internal, mapping_covariant);
 
             for (unsigned int k = 0; k < n_q_points; ++k)
               for (unsigned int d = 0; d < dim; ++d)
-                data.shape_values(first+d,k) = sign_change[i] * shape_values[k][d];
+                output_data.shape_values(first+d,k) = sign_change[i] * shape_values[k][d];
 
             break;
           }
@@ -514,31 +515,31 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
             case mapping_none:
             {
               mapping.transform(fe_data.shape_grads[i], shape_grads1,
-                                mapping_data, mapping_covariant);
+                                mapping_internal, mapping_covariant);
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
               break;
             }
             case mapping_covariant:
             {
               mapping.transform(fe_data.shape_grads[i], shape_grads1,
-                                mapping_data, mapping_covariant_gradient);
+                                mapping_internal, mapping_covariant_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
 
               break;
             }
             case mapping_contravariant:
             {
               mapping.transform(fe_data.shape_grads[i], shape_grads1,
-                                mapping_data, mapping_contravariant_gradient);
+                                mapping_internal, mapping_contravariant_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
 
               break;
             }
@@ -552,11 +553,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
                 input[k] = fe_data.shape_grads[i][k];
 
               mapping.transform(input, shape_grads1,
-                                mapping_data, mapping_piola_gradient);
+                                mapping_internal, mapping_piola_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = sign_change[i] * shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = sign_change[i] * shape_grads1[k][d];
 
               break;
             }
@@ -577,11 +578,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
               for (unsigned int k=0; k<input.size(); ++k)
                 input[k] = fe_data.shape_grads[i][k];
               mapping.transform (input,shape_grads1,
-                                 mapping_data, mapping_covariant_gradient);
+                                 mapping_internal, mapping_covariant_gradient);
 
               for (unsigned int k = 0; k < n_q_points; ++k)
                 for (unsigned int d = 0; d < dim; ++d)
-                  data.shape_gradients[first + d][k] = sign_change[i] * shape_grads1[k][d];
+                  output_data.shape_gradients[first + d][k] = sign_change[i] * shape_grads1[k][d];
 
               break;
             }
@@ -602,21 +603,23 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
         || (mapping_type == mapping_nedelec))))
     this->compute_2nd (mapping, cell,
                        typename QProjector<dim>::DataSetDescriptor().cell(),
-                       mapping_data, fe_data, data);
+                       mapping_internal, fe_data,
+                       output_data);
 }
 
 
 
 template <class POLY, int dim, int spacedim>
 void
-FE_PolyTensor<POLY,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,
-  const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_data,
-  const typename Mapping<dim,spacedim>::InternalDataBase       &fedata,
-  FEValuesData<dim,spacedim>                    &data) const
+FE_PolyTensor<POLY,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,
+                     const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_internal,
+                     const typename Mapping<dim,spacedim>::InternalDataBase       &fedata,
+                     const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                     internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -657,8 +660,8 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
 
   for (unsigned int i=0; i<this->dofs_per_cell; ++i)
     {
-      const unsigned int first = data.shape_function_to_row_table[i * this->n_components() +
-                                                                  this->get_nonzero_components(i).first_selected_component()];
+      const unsigned int first = output_data.shape_function_to_row_table[i * this->n_components() +
+                                 this->get_nonzero_components(i).first_selected_component()];
 
       if (flags & update_values)
         {
@@ -668,7 +671,7 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
             {
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_values(first+d,k) = fe_data.shape_values[i][k+offset][d];
+                  output_data.shape_values(first+d,k) = fe_data.shape_values[i][k+offset][d];
               break;
             }
 
@@ -679,11 +682,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
               // for transformation
               std::vector<Tensor<1,dim> > shape_values (n_q_points);
               mapping.transform(make_slice(fe_data.shape_values[i], offset, n_q_points),
-                                shape_values, mapping_data, mapping_type);
+                                shape_values, mapping_internal, mapping_type);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_values(first+d,k) = shape_values[k][d];
+                  output_data.shape_values(first+d,k) = shape_values[k][d];
 
               break;
             }
@@ -692,10 +695,10 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
             {
               std::vector<Tensor<1,dim> > shape_values (n_q_points);
               mapping.transform(make_slice(fe_data.shape_values[i], offset, n_q_points),
-                                shape_values, mapping_data, mapping_piola);
+                                shape_values, mapping_internal, mapping_piola);
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_values(first+d,k)
+                  output_data.shape_values(first+d,k)
                     = sign_change[i] * shape_values[k][d];
               break;
             }
@@ -704,11 +707,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
             {
               std::vector<Tensor<1,dim> > shape_values (n_q_points);
               mapping.transform (make_slice (fe_data.shape_values[i], offset, n_q_points),
-                                 shape_values, mapping_data, mapping_covariant);
+                                 shape_values, mapping_internal, mapping_covariant);
 
               for (unsigned int k = 0; k < n_q_points; ++k)
                 for (unsigned int d = 0; d < dim; ++d)
-                  data.shape_values(first+d,k) = sign_change[i] * shape_values[k][d];
+                  output_data.shape_values(first+d,k) = sign_change[i] * shape_values[k][d];
 
               break;
             }
@@ -729,31 +732,31 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
             case mapping_none:
             {
               mapping.transform(make_slice(fe_data.shape_grads[i], offset, n_q_points),
-                                shape_grads1, mapping_data, mapping_covariant);
+                                shape_grads1, mapping_internal, mapping_covariant);
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
               break;
             }
 
             case mapping_covariant:
             {
               mapping.transform(make_slice(fe_data.shape_grads[i], offset, n_q_points),
-                                shape_grads1, mapping_data, mapping_covariant_gradient);
+                                shape_grads1, mapping_internal, mapping_covariant_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
               break;
             }
             case mapping_contravariant:
             {
               mapping.transform(make_slice(fe_data.shape_grads[i], offset, n_q_points),
-                                shape_grads1, mapping_data, mapping_contravariant_gradient);
+                                shape_grads1, mapping_internal, mapping_contravariant_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
 
               break;
             }
@@ -765,11 +768,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
                 input[k] = fe_data.shape_grads[i][k];
 
               mapping.transform(make_slice(input, offset, n_q_points), shape_grads1,
-                                mapping_data, mapping_piola_gradient);
+                                mapping_internal, mapping_piola_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = sign_change[i] * shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = sign_change[i] * shape_grads1[k][d];
 
               break;
             }
@@ -790,11 +793,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
               for (unsigned int k=0; k<input.size(); ++k)
                 input[k] = fe_data.shape_grads[i][k];
               mapping.transform (make_slice (input, offset, n_q_points),
-                                 shape_grads1, mapping_data, mapping_covariant_gradient);
+                                 shape_grads1, mapping_internal, mapping_covariant_gradient);
 
               for (unsigned int k = 0; k < n_q_points; ++k)
                 for (unsigned int d = 0; d < dim; ++d)
-                  data.shape_gradients[first + d][k] = sign_change[i] * shape_grads1[k][d];
+                  output_data.shape_gradients[first + d][k] = sign_change[i] * shape_grads1[k][d];
 
               break;
             }
@@ -806,22 +809,24 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
     }
 
   if (flags & update_hessians)
-    this->compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    this->compute_2nd (mapping, cell, offset, mapping_internal, fe_data,
+                       output_data);
 }
 
 
 
 template <class POLY, int dim, int spacedim>
 void
-FE_PolyTensor<POLY,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,
-  const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_data,
-  const typename Mapping<dim,spacedim>::InternalDataBase       &fedata,
-  FEValuesData<dim,spacedim>                    &data) const
+FE_PolyTensor<POLY,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,
+                        const typename Mapping<dim,spacedim>::InternalDataBase       &mapping_internal,
+                        const typename Mapping<dim,spacedim>::InternalDataBase       &fedata,
+                        const internal::FEValues::MappingRelatedData<dim,spacedim> &,
+                        internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   // convert data object to internal
   // data for this class. fails with
@@ -866,8 +871,8 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
 
   for (unsigned int i=0; i<this->dofs_per_cell; ++i)
     {
-      const unsigned int first = data.shape_function_to_row_table[i * this->n_components() +
-                                                                  this->get_nonzero_components(i).first_selected_component()];
+      const unsigned int first = output_data.shape_function_to_row_table[i * this->n_components() +
+                                 this->get_nonzero_components(i).first_selected_component()];
 
       if (flags & update_values)
         {
@@ -877,7 +882,7 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
             {
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_values(first+d,k) = fe_data.shape_values[i][k+offset][d];
+                  output_data.shape_values(first+d,k) = fe_data.shape_values[i][k+offset][d];
               break;
             }
 
@@ -888,11 +893,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
               // transformation
               std::vector<Tensor<1,dim> > shape_values (n_q_points);
               mapping.transform(make_slice(fe_data.shape_values[i], offset, n_q_points),
-                                shape_values, mapping_data, mapping_type);
+                                shape_values, mapping_internal, mapping_type);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_values(first+d,k) = shape_values[k][d];
+                  output_data.shape_values(first+d,k) = shape_values[k][d];
 
               break;
             }
@@ -901,10 +906,10 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
             {
               std::vector<Tensor<1,dim> > shape_values (n_q_points);
               mapping.transform(make_slice(fe_data.shape_values[i], offset, n_q_points),
-                                shape_values, mapping_data, mapping_piola);
+                                shape_values, mapping_internal, mapping_piola);
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_values(first+d,k)
+                  output_data.shape_values(first+d,k)
                     = sign_change[i] * shape_values[k][d];
               break;
             }
@@ -912,11 +917,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
             {
               std::vector<Tensor<1,dim> > shape_values (n_q_points);
               mapping.transform (make_slice (fe_data.shape_values[i], offset, n_q_points),
-                                 shape_values, mapping_data, mapping_covariant);
+                                 shape_values, mapping_internal, mapping_covariant);
 
               for (unsigned int k = 0; k < n_q_points; ++k)
                 for (unsigned int d = 0; d < dim; ++d)
-                  data.shape_values(first+d,k) = sign_change[i] * shape_values[k][d];
+                  output_data.shape_values(first+d,k) = sign_change[i] * shape_values[k][d];
 
               break;
             }
@@ -935,32 +940,32 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
             case mapping_none:
             {
               mapping.transform(make_slice(fe_data.shape_grads[i], offset, n_q_points),
-                                shape_grads1, mapping_data, mapping_covariant);
+                                shape_grads1, mapping_internal, mapping_covariant);
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
               break;
             }
 
             case mapping_covariant:
             {
               mapping.transform(make_slice(fe_data.shape_grads[i], offset, n_q_points),
-                                shape_grads1, mapping_data, mapping_covariant_gradient);
+                                shape_grads1, mapping_internal, mapping_covariant_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
               break;
             }
 
             case mapping_contravariant:
             {
               mapping.transform(make_slice(fe_data.shape_grads[i], offset, n_q_points),
-                                shape_grads1, mapping_data, mapping_contravariant_gradient);
+                                shape_grads1, mapping_internal, mapping_contravariant_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = shape_grads1[k][d];
 
               break;
             }
@@ -974,11 +979,11 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
                 input[k] = fe_data.shape_grads[i][k];
 
               mapping.transform(make_slice(input, offset, n_q_points), shape_grads1,
-                                mapping_data, mapping_piola_gradient);
+                                mapping_internal, mapping_piola_gradient);
 
               for (unsigned int k=0; k<n_q_points; ++k)
                 for (unsigned int d=0; d<dim; ++d)
-                  data.shape_gradients[first+d][k] = sign_change[i] * shape_grads1[k][d];
+                  output_data.shape_gradients[first+d][k] = sign_change[i] * shape_grads1[k][d];
 
               break;
             }
@@ -999,12 +1004,12 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
                 input[k] = fe_data.shape_grads[i][k];
 
               mapping.transform (make_slice (input, offset, n_q_points),
-                                 shape_grads1, mapping_data, mapping_covariant_gradient);
+                                 shape_grads1, mapping_internal, mapping_covariant_gradient);
 
 
               for (unsigned int k = 0; k < n_q_points; ++k)
                 for (unsigned int d = 0; d < dim; ++d)
-                  data.shape_gradients[first + d][k] = sign_change[i] * shape_grads1[k][d];
+                  output_data.shape_gradients[first + d][k] = sign_change[i] * shape_grads1[k][d];
 
               break;
             }
@@ -1016,7 +1021,8 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
     }
 
   if (flags & update_hessians)
-    this->compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    this->compute_2nd (mapping, cell, offset, mapping_internal, fe_data,
+                       output_data);
 }
 
 
index b0d3bab9fe901cccbc4b677e79d6bb442a32a1a7..f880a0a70e03d48aa5736134e5eb70aec0f7f542 100644 (file)
@@ -1033,34 +1033,38 @@ FESystem<dim,spacedim>::get_subface_data (
 
 template <int dim, int spacedim>
 void
-FESystem<dim,spacedim>::fill_fe_values (
-  const Mapping<dim,spacedim>                      &mapping,
-  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-  const Quadrature<dim>                            &quadrature,
-  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-  const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
-  FEValuesData<dim,spacedim>                       &data,
-  const CellSimilarity::Similarity                  cell_similarity) const
+FESystem<dim,spacedim>::
+fill_fe_values (const Mapping<dim,spacedim>                      &mapping,
+                const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+                const Quadrature<dim>                            &quadrature,
+                const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
+                const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
+                const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data,
+                const CellSimilarity::Similarity                  cell_similarity) const
 {
   compute_fill(mapping, cell, invalid_face_number, invalid_face_number,
-               quadrature, cell_similarity, mapping_data, fe_data, data);
+               quadrature, cell_similarity, mapping_internal, fe_data,
+               mapping_data, output_data);
 }
 
 
 
 template <int dim, int spacedim>
 void
-FESystem<dim,spacedim>::fill_fe_face_values (
-  const Mapping<dim,spacedim>                   &mapping,
-  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-  const unsigned int                    face_no,
-  const Quadrature<dim-1>              &quadrature,
-  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-  const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
-  FEValuesData<dim,spacedim>                    &data) const
+FESystem<dim,spacedim>::
+fill_fe_face_values (const Mapping<dim,spacedim>                   &mapping,
+                     const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+                     const unsigned int                    face_no,
+                     const Quadrature<dim-1>              &quadrature,
+                     const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
+                     const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
+                     const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                     internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   compute_fill (mapping, cell, face_no, invalid_face_number, quadrature,
-                CellSimilarity::none, mapping_data, fe_data, data);
+                CellSimilarity::none, mapping_internal, fe_data,
+                mapping_data, output_data);
 }
 
 
@@ -1068,18 +1072,20 @@ FESystem<dim,spacedim>::fill_fe_face_values (
 
 template <int dim, int spacedim>
 void
-FESystem<dim,spacedim>::fill_fe_subface_values (
-  const Mapping<dim,spacedim>                      &mapping,
-  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-  const unsigned int                                face_no,
-  const unsigned int                                sub_no,
-  const Quadrature<dim-1>                          &quadrature,
-  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-  const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
-  FEValuesData<dim,spacedim>                       &data) const
+FESystem<dim,spacedim>::
+fill_fe_subface_values (const Mapping<dim,spacedim>                      &mapping,
+                        const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+                        const unsigned int                                face_no,
+                        const unsigned int                                sub_no,
+                        const Quadrature<dim-1>                          &quadrature,
+                        const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
+                        const typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
+                        const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                        internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   compute_fill (mapping, cell, face_no, sub_no, quadrature,
-                CellSimilarity::none, mapping_data, fe_data, data);
+                CellSimilarity::none, mapping_internal, fe_data,
+                mapping_data, output_data);
 }
 
 
@@ -1087,18 +1093,19 @@ FESystem<dim,spacedim>::fill_fe_subface_values (
 template <int dim, int spacedim>
 template <int dim_1>
 void
-FESystem<dim,spacedim>::compute_fill_one_base (
-  const Mapping<dim,spacedim>                      &mapping,
-  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-  const std::pair<unsigned int, unsigned int>       face_sub_no,
-  const Quadrature<dim_1>                          &quadrature,
-  const CellSimilarity::Similarity                  cell_similarity,
-  const std::pair<const typename Mapping<dim,spacedim>::InternalDataBase *,
-  const typename Mapping<dim,spacedim>::InternalDataBase *> mapping_data,
-  const unsigned int                                base_no,
-  FEValuesData<dim,spacedim>                       &data) const
+FESystem<dim,spacedim>::
+compute_fill_one_base (const Mapping<dim,spacedim>                      &mapping,
+                       const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+                       const std::pair<unsigned int, unsigned int>       face_sub_no,
+                       const Quadrature<dim_1>                          &quadrature,
+                       const CellSimilarity::Similarity                  cell_similarity,
+                       const std::pair<const typename Mapping<dim,spacedim>::InternalDataBase *,
+                       const typename Mapping<dim,spacedim>::InternalDataBase *> mapping_internal,
+                       const unsigned int                                base_no,
+                       const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+                       internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
-  const InternalData &fe_data = static_cast<const InternalData &> (*mapping_data.second);
+  const InternalData &fe_data = static_cast<const InternalData &> (*mapping_internal.second);
   const unsigned int n_q_points = quadrature.size();
 
   const FiniteElement<dim,spacedim> &
@@ -1141,13 +1148,13 @@ FESystem<dim,spacedim>::compute_fill_one_base (
   // that we store here into the corresponding objects we pass down
   // to the various base elements. some of these arrays may be empty,
   // in which case copying is cheap
-  base_data.JxW_values        = data.JxW_values;
-  base_data.jacobians         = data.jacobians;
-  base_data.jacobian_grads    = data.jacobian_grads;
-  base_data.inverse_jacobians = data.inverse_jacobians;
-  base_data.quadrature_points = data.quadrature_points;
-  base_data.normal_vectors    = data.normal_vectors;
-  base_data.boundary_forms    = data.boundary_forms;
+  base_data.JxW_values        = mapping_data.JxW_values;
+  base_data.jacobians         = mapping_data.jacobians;
+  base_data.jacobian_grads    = mapping_data.jacobian_grads;
+  base_data.inverse_jacobians = mapping_data.inverse_jacobians;
+  base_data.quadrature_points = mapping_data.quadrature_points;
+  base_data.normal_vectors    = mapping_data.normal_vectors;
+  base_data.boundary_forms    = mapping_data.boundary_forms;
 
   // Make sure that in the case of fill_fe_values the data is only
   // copied from base_data to data if base_data is changed. therefore
@@ -1157,14 +1164,14 @@ FESystem<dim,spacedim>::compute_fill_one_base (
   // copied from base_data to data on each face, therefore use
   // base_fe_data.update_flags.
   if (face_sub_no.first==invalid_face_number)
-    base_fe.fill_fe_values(mapping, cell, *cell_quadrature, *mapping_data.first,
-                           base_fe_data, base_data, cell_similarity);
+    base_fe.fill_fe_values(mapping, cell, *cell_quadrature, *mapping_internal.first,
+                           base_fe_data, base_data, base_data, cell_similarity);
   else if (face_sub_no.second==invalid_face_number)
     base_fe.fill_fe_face_values(mapping, cell, face_sub_no.first,
-                                *face_quadrature, *mapping_data.first, base_fe_data, base_data);
+                                *face_quadrature, *mapping_internal.first, base_fe_data, base_data, base_data);
   else
     base_fe.fill_fe_subface_values(mapping, cell, face_sub_no.first, face_sub_no.second,
-                                   *face_quadrature, *mapping_data.first, base_fe_data, base_data);
+                                   *face_quadrature, *mapping_internal.first, base_fe_data, base_data, base_data);
 
   // now data has been generated, so copy it. we used to work by
   // looping over all base elements (i.e. this outer loop), then over
@@ -1215,12 +1222,12 @@ FESystem<dim,spacedim>::compute_fill_one_base (
             {
               if (base_flags & update_values)
                 for (unsigned int q=0; q<n_q_points; ++q)
-                  data.shape_values[out_index+s][q] =
+                  output_data.shape_values[out_index+s][q] =
                     base_data.shape_values(in_index+s,q);
 
               if (base_flags & update_gradients)
                 for (unsigned int q=0; q<n_q_points; ++q)
-                  data.shape_gradients[out_index+s][q]=
+                  output_data.shape_gradients[out_index+s][q] =
                     base_data.shape_gradients[in_index+s][q];
 
               // _we_ handle computation of second derivatives, so the
@@ -1236,16 +1243,17 @@ FESystem<dim,spacedim>::compute_fill_one_base (
 template <int dim, int spacedim>
 template <int dim_1>
 void
-FESystem<dim,spacedim>::compute_fill (
-  const Mapping<dim,spacedim>                      &mapping,
-  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
-  const unsigned int                                face_no,
-  const unsigned int                                sub_no,
-  const Quadrature<dim_1>                          &quadrature,
-  const CellSimilarity::Similarity                   cell_similarity,
-  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
-  const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-  FEValuesData<dim,spacedim>                       &data) const
+FESystem<dim,spacedim>::
+compute_fill (const Mapping<dim,spacedim>                      &mapping,
+              const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+              const unsigned int                                face_no,
+              const unsigned int                                sub_no,
+              const Quadrature<dim_1>                          &quadrature,
+              const CellSimilarity::Similarity                   cell_similarity,
+              const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
+              const typename Mapping<dim,spacedim>::InternalDataBase &fedata,
+              const internal::FEValues::MappingRelatedData<dim,spacedim> &mapping_data,
+              internal::FEValues::FiniteElementRelatedData<dim,spacedim> &output_data) const
 {
   const unsigned int n_q_points = quadrature.size();
 
@@ -1282,7 +1290,7 @@ FESystem<dim,spacedim>::compute_fill (
 
               // compute update flags ...
               const UpdateFlags base_update_flags
-                = mapping_data.update_flags | base_fe_data.update_flags;
+                = mapping_internal.update_flags | base_fe_data.update_flags;
 
               // Initialize the FEValuesDatas for the base elements.
               FEValuesData<dim,spacedim> &base_data=fe_data.get_fe_values_data(base_no);
@@ -1302,10 +1310,11 @@ FESystem<dim,spacedim>::compute_fill (
                                                            std::make_pair(face_no, sub_no),
                                                            std_cxx11::cref(quadrature),
                                                            CellSimilarity::none,
-                                                           std::make_pair(&mapping_data,
+                                                           std::make_pair(&mapping_internal,
                                                                &fedata),
                                                            base_no,
-                                                           std_cxx11::ref(data))));
+                                                           std_cxx11::ref(mapping_data),
+                                                           std_cxx11::ref(output_data))));
       task_group.join_all();
     }
 
@@ -1331,7 +1340,8 @@ FESystem<dim,spacedim>::compute_fill (
                              cell->subface_case(face_no));
         }
 
-      this->compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+      this->compute_2nd (mapping, cell, offset, mapping_internal, fe_data,
+                         output_data);
     }
 }
 
index 49792db89b8110d78df22141663f63bf1f561e23..f54eefa0361bec45a9817f9d2fb637909aeafdb9 100644 (file)
@@ -3559,6 +3559,7 @@ void FEValues<dim,spacedim>::do_reinit ()
                                 *this->mapping_data,
                                 *this->fe_data,
                                 *this,
+                                *this,
                                 this->cell_similarity);
 
   this->fe_data->clear_first_cell ();
@@ -3754,6 +3755,7 @@ void FEFaceValues<dim,spacedim>::do_reinit (const unsigned int face_no)
                                      this->quadrature,
                                      *this->mapping_data,
                                      *this->fe_data,
+                                     *this,
                                      *this);
 
   this->fe_data->clear_first_cell ();
@@ -3987,6 +3989,7 @@ void FESubfaceValues<dim,spacedim>::do_reinit (const unsigned int face_no,
                                         this->quadrature,
                                         *this->mapping_data,
                                         *this->fe_data,
+                                        *this,
                                         *this);
 
   this->fe_data->clear_first_cell ();

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.