]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Fixed a problem with a system of FE_RT when using CellSimilarity. Changed the calling...
authorkronbichler <kronbichler@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 10 Mar 2009 14:53:36 +0000 (14:53 +0000)
committerkronbichler <kronbichler@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 10 Mar 2009 14:53:36 +0000 (14:53 +0000)
git-svn-id: https://svn.dealii.org/trunk@18473 0785d39b-7218-0410-832d-ea1e28bc413d

23 files changed:
deal.II/deal.II/include/fe/fe.h
deal.II/deal.II/include/fe/fe_dgp_nonparametric.h
deal.II/deal.II/include/fe/fe_nedelec.h
deal.II/deal.II/include/fe/fe_poly.h
deal.II/deal.II/include/fe/fe_poly.templates.h
deal.II/deal.II/include/fe/fe_poly_tensor.h
deal.II/deal.II/include/fe/fe_system.h
deal.II/deal.II/include/fe/mapping.h
deal.II/deal.II/include/fe/mapping_cartesian.h
deal.II/deal.II/include/fe/mapping_q.h
deal.II/deal.II/include/fe/mapping_q1.h
deal.II/deal.II/include/fe/mapping_q1_eulerian.h
deal.II/deal.II/include/fe/mapping_q_eulerian.h
deal.II/deal.II/source/fe/fe_dgp_nonparametric.cc
deal.II/deal.II/source/fe/fe_nedelec.cc
deal.II/deal.II/source/fe/fe_poly_tensor.cc
deal.II/deal.II/source/fe/fe_system.cc
deal.II/deal.II/source/fe/fe_values.cc
deal.II/deal.II/source/fe/mapping_cartesian.cc
deal.II/deal.II/source/fe/mapping_q.cc
deal.II/deal.II/source/fe/mapping_q1.cc
deal.II/deal.II/source/fe/mapping_q1_eulerian.cc
deal.II/deal.II/source/fe/mapping_q_eulerian.cc

index 7fef35499f37a1f61164da7f876970a97459f61f..0d8a1a035fd0b4b135ed278e3f7d055d4dab7ebf 100644 (file)
@@ -2591,10 +2591,10 @@ class FiniteElement : public Subscriptor,
     fill_fe_values (const Mapping<dim,spacedim>                               &mapping,
                    const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                     &quadrature,
-                   const enum CellSimilarity::Similarity                      cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_internal,
                    typename Mapping<dim,spacedim>::InternalDataBase          &fe_internal,
-                   FEValuesData<dim,spacedim>                                &data) const = 0;
+                   FEValuesData<dim,spacedim>                                &data,
+                   enum CellSimilarity::Similarity                           &cell_similarity) const = 0;
     
                                     /**
                                      * Fill the fields of
index 98b0c4f9e0d38ad86c47474e3ad0359954868d43..75fe93f3904fd85e7fb52cf1157bdbf2b98ef768 100644 (file)
@@ -481,10 +481,10 @@ class FE_DGPNonparametric : public FiniteElement<dim,spacedim>
     fill_fe_values (const Mapping<dim,spacedim> &mapping,
                    const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                 &quadrature,
-                   const enum CellSimilarity::Similarity                  cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
                    typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                   FEValuesData<dim,spacedim>& data) const;
+                   FEValuesData<dim,spacedim>                            &data,
+                   enum CellSimilarity::Similarity                       &cell_similarity) const;
     
                                     /**
                                      * Implementation of the same
index 5270ded777880bf09f3fe92bd199e5ddf7df8667..ed790b721f8eb2fa7c10ffba914a919c3c9ef8e3 100644 (file)
@@ -415,10 +415,10 @@ class FE_Nedelec : public FiniteElement<dim,spacedim>
     fill_fe_values (const Mapping<dim,spacedim>                      &mapping,
                    const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                            &quadrature,
-                   const enum CellSimilarity::Similarity             cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
                    typename Mapping<dim,spacedim>::InternalDataBase &fe_internal,
-                   FEValuesData<dim,spacedim>& data) const;
+                   FEValuesData<dim,spacedim>                       &data,
+                   enum CellSimilarity::Similarity                  &cell_similarity) const;
     
                                     /**
                                      * Implementation of the same
index c014e6819a750b605d03c467c2a07dad5de156a1..a8f4228660dead07edb9cdd4bf1d214a409a0815 100644 (file)
@@ -221,10 +221,10 @@ class FE_Poly : public FiniteElement<dim,spacedim>
     fill_fe_values (const Mapping<dim,spacedim>                           &mapping,
                    const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                 &quadrature,
-                   const enum CellSimilarity::Similarity                  cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
                    typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                   FEValuesData<dim,spacedim>&                            data) const;
+                   FEValuesData<dim,spacedim>                            &data,
+                   enum CellSimilarity::Similarity                       &cell_similarity) const;
     
     virtual void
     fill_fe_face_values (const Mapping<dim,spacedim> &mapping,
index 9f979ba926b2ea1f76e6245dcaf7a72cc5b02410..d99571c01645250077eb3a2be7ce0b5ff41cbfdc 100644 (file)
@@ -239,13 +239,13 @@ template <>
 inline
 void
 FE_Poly<TensorProductPolynomials<1>,1,2>::fill_fe_values 
-  (const Mapping<1,2> &mapping,
+  (const Mapping<1,2>                        &mapping,
    const Triangulation<1,2>::cell_iterator   &/*cell*/,
    const Quadrature<1>                       &quadrature,
-   const enum CellSimilarity::Similarity      cell_similarity,
    Mapping<1,2>::InternalDataBase            &mapping_data,
    Mapping<1,2>::InternalDataBase            &fedata,
-   FEValuesData<1,2>                         &data) const
+   FEValuesData<1,2>                         &data,
+   enum CellSimilarity::Similarity           &cell_similarity) const
 {
                                   // convert data object to internal
                                   // data for this class. fails with
@@ -282,13 +282,13 @@ template <>
 inline
 void
 FE_Poly<TensorProductPolynomials<2>,2,3>::fill_fe_values 
-  (const Mapping<2,3> &mapping,
+  (const Mapping<2,3>                      &mapping,
    const Triangulation<2,3>::cell_iterator &/* cell */,
-   const Quadrature<2> &quadrature,
-   const enum CellSimilarity::Similarity cell_similarity,
-   Mapping<2,3>::InternalDataBase & mapping_data,
-   Mapping<2,3>::InternalDataBase &fedata,
-   FEValuesData<2,3> &data) const
+   const Quadrature<2>                     &quadrature,
+   Mapping<2,3>::InternalDataBase          &mapping_data,
+   Mapping<2,3>::InternalDataBase          &fedata,
+   FEValuesData<2,3>                       &data,
+   enum CellSimilarity::Similarity         &cell_similarity) const
 {
 
                                   // assert that the following dynamics
@@ -324,13 +324,13 @@ template <>
 inline
 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 enum CellSimilarity::Similarity cell_similarity,
-  Mapping<1,2>::InternalDataBase& mapping_data,
-  Mapping<1,2>::InternalDataBase& fedata,
-  FEValuesData<1,2>& data) const
+  const Mapping<1,2>                      &mapping,
+  const Triangulation<1,2>::cell_iterator & /*cell*/,
+  const Quadrature<1>                     &quadrature,
+  Mapping<1,2>::InternalDataBase          &mapping_data,
+  Mapping<1,2>::InternalDataBase          &fedata,
+  FEValuesData<1,2>                       &data,
+  enum CellSimilarity::Similarity         &cell_similarity) const
 {
                                   // convert data object to internal
                                   // data for this class. fails with
@@ -369,13 +369,13 @@ template <>
 inline
 void
 FE_Poly<PolynomialSpace<2>,2,3>::fill_fe_values 
-  (const Mapping<2,3>mapping,
+  (const Mapping<2,3>                      &mapping,
    const Triangulation<2,3>::cell_iterator &/* cell */,
-   const Quadrature<2>quadrature,
-   const enum CellSimilarity::Similarity cell_similarity,
-   Mapping<2,3>::InternalDataBase& mapping_data,
-   Mapping<2,3>::InternalDataBase &fedata,
-   FEValuesData<2,3> &data) const
+   const Quadrature<2>                     &quadrature,
+   Mapping<2,3>::InternalDataBase          &mapping_data,
+   Mapping<2,3>::InternalDataBase          &fedata,
+   FEValuesData<2,3>                       &data,
+   enum CellSimilarity::Similarity         &cell_similarity) const
 {
   Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
   InternalData &fe_data = static_cast<InternalData &> (fedata);
@@ -411,10 +411,10 @@ 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 enum CellSimilarity::Similarity             cell_similarity,
    typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
    typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-   FEValuesData<dim,spacedim>                       &data) const
+   FEValuesData<dim,spacedim>                       &data,
+   enum CellSimilarity::Similarity                  &cell_similarity) const
 {
                                   // convert data object to internal
                                   // data for this class. fails with
index 7d641c4450612a112e0318e2ec9a9dbc39766aa3..afd36801c7096b30176322dea45acf6d310dfc1c 100644 (file)
@@ -234,21 +234,21 @@ class FE_PolyTensor : public FiniteElement<dim,spacedim>
              const Quadrature<dim>& quadrature) const ;
 
     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 enum CellSimilarity::Similarity                  cell_similarity,
-                   typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                   typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
-                   FEValuesData<dim,spacedim>& data) const;
+                   const Quadrature<dim>                             &quadrature,
+                   typename Mapping<dim,spacedim>::InternalDataBase  &mapping_internal,
+                   typename Mapping<dim,spacedim>::InternalDataBase  &fe_internal,
+                   FEValuesData<dim,spacedim>                        &data,
+                   enum CellSimilarity::Similarity                   &cell_similarity) const;
     
     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,
-                        typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
-                        typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
+                        const unsigned int                                  face_no,
+                        const Quadrature<dim-1>                            &quadrature,
+                        typename Mapping<dim,spacedim>::InternalDataBase   &mapping_internal,
+                        typename Mapping<dim,spacedim>::InternalDataBase   &fe_internal,
                         FEValuesData<dim,spacedim>& data) const ;
     
     virtual void
index 336f74e7ccaef87b920b1b686bec4fad7652824e..349c0ae07201506011eddb1011e4f5045e72ba2a 100644 (file)
@@ -612,10 +612,10 @@ class FESystem : public FiniteElement<dim,spacedim>
     fill_fe_values (const Mapping<dim,spacedim>                      &mapping,
                    const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                            &quadrature,
-                   const enum CellSimilarity::Similarity             cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
                    typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
-                   FEValuesData<dim,spacedim>                       &data) const;
+                   FEValuesData<dim,spacedim>                       &data,
+                   enum CellSimilarity::Similarity                  &cell_similarity) const;
 
                                     /**
                                      * Implementation of the same
@@ -685,7 +685,7 @@ class FESystem : public FiniteElement<dim,spacedim>
                       const unsigned int                                face_no,
                       const unsigned int                                sub_no,
                       const Quadrature<dim_1>                          &quadrature,
-                      const enum CellSimilarity::Similarity             cell_similarity,
+                      enum CellSimilarity::Similarity                   cell_similarity,
                       typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
                       typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
                       FEValuesData<dim,spacedim>                       &data) const ;
index 334d2bff0eac6c6149b4f3f844aaa18215ec1b30..ca4b219cd252bca323db298662c4bd0380486706 100644 (file)
@@ -546,14 +546,14 @@ class Mapping : public Subscriptor
     virtual void
     fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                     &quadrature,
-                   enum CellSimilarity::Similarity                           &cell_similarity,
                    InternalDataBase                                          &internal,
                    std::vector<Point<spacedim> >                             &quadrature_points,
                    std::vector<double>                                       &JxW_values,
                    std::vector<Tensor<2,spacedim> >                          &jacobians,
                    std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
                    std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-                   std::vector<Point<spacedim> >                             &cell_normal_vectors
+                   std::vector<Point<spacedim> >                             &cell_normal_vectors,
+                   enum CellSimilarity::Similarity                           &cell_similarity
                   ) const=0;
 
 
index 2645ad8d3fa4be6cbb6186bcf99ba9fa046ce2f2..709a830abcbbeb5933d583161203dae51eb55d3f 100644 (file)
@@ -61,14 +61,14 @@ class MappingCartesian : public Mapping<dim,spacedim>
     virtual void
     fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                     &quadrature,
-                   enum CellSimilarity::Similarity                           &cell_similarity,
                    typename Mapping<dim, spacedim>::InternalDataBase         &mapping_data,
                    std::vector<Point<spacedim> >                             &quadrature_points,
                    std::vector<double>                                       &JxW_values,
                    std::vector<Tensor<2,spacedim> >                          &jacobians,
                    std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
                    std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-                   std::vector<Point<spacedim> >   &) const ;
+                   std::vector<Point<spacedim> >   &,
+                   enum CellSimilarity::Similarity                           &cell_similarity) const ;
 
 
     virtual void
index 9ca37164123b744e22b688cf47493b75eb097d55..3860fac6c4456fc3e9da9a9cea982bbbcefcdc25 100644 (file)
@@ -205,14 +205,14 @@ class MappingQ : public MappingQ1<dim,spacedim>
     virtual void
     fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                     &quadrature,
-                   enum CellSimilarity::Similarity                           &cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
                    typename std::vector<Point<spacedim> >                    &quadrature_points,
                    std::vector<double>                                       &JxW_values,
                    std::vector<Tensor<2,spacedim> >                          &jacobians,
                    std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
                    std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-                    std::vector<Point<spacedim> >                             &cell_normal_vectors) const ;
+                    std::vector<Point<spacedim> >                             &cell_normal_vectors,
+                   enum CellSimilarity::Similarity                           &cell_similarity) const ;
 
                                     /**
                                      * Implementation of the interface in
index 8a8ee2f0a633c6421d73d528e7b369092c369c1b..ea81d72fd2e887bfe0456adbbbda476fac1fc064 100644 (file)
@@ -295,14 +295,14 @@ class MappingQ1 : public Mapping<dim,spacedim>
     virtual void
     fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                     &quadrature,
-                   enum CellSimilarity::Similarity                           &cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
                    typename std::vector<Point<spacedim> >                    &quadrature_points,
                    std::vector<double>                                       &JxW_values,
                    std::vector<Tensor<2,spacedim> >                          &jacobians,
                    std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
                    std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-                   std::vector<Point<spacedim> >                             &cell_normal_vectors) const;
+                   std::vector<Point<spacedim> >                             &cell_normal_vectors,
+                   enum CellSimilarity::Similarity                           &cell_similarity) const;
 
                                     /**
                                      * Implementation of the interface in
index ff2635e7cf786bd5f469eda5fe7f90708a80ce0b..4fb9edd62711ccb94ad574af516b9b175e7b7d0e 100644 (file)
@@ -152,14 +152,14 @@ class MappingQ1Eulerian : public MappingQ1<dim,spacedim>
     virtual void
     fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                     &quadrature,
-                   enum CellSimilarity::Similarity                           &cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
                    typename std::vector<Point<spacedim> >                    &quadrature_points,
                    std::vector<double>                                       &JxW_values,
                    std::vector<Tensor<2,spacedim> >                          &jacobians,
                    std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
                    std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-                   std::vector<Point<spacedim> >                             &cell_normal_vectors) const;
+                   std::vector<Point<spacedim> >                             &cell_normal_vectors,
+                   enum CellSimilarity::Similarity                           &cell_similarity) const;
 
                                     /**
                                      * Reference to the vector of
index c1c5454e63bab12135009a85bdc85c4faeb315a5..6bb053388e78ad6b5f61321ac21e7ec105b63a57 100644 (file)
@@ -155,14 +155,14 @@ class MappingQEulerian : public MappingQ<dim, spacedim>
     virtual void
     fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                    const Quadrature<dim>                                     &quadrature,
-                   enum CellSimilarity::Similarity                           &cell_similarity,
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
                    typename std::vector<Point<spacedim> >                    &quadrature_points,
                    std::vector<double>                                       &JxW_values,
                    std::vector<Tensor<2,spacedim> >                          &jacobians,
                    std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
                    std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-                   std::vector<Point<spacedim> >                             &cell_normal_vectors) const;
+                   std::vector<Point<spacedim> >                             &cell_normal_vectors,
+                   enum CellSimilarity::Similarity                           &cell_similarity) const;
 
                                      /**
                                       * Reference to the vector of
index e80074c73a96778de9d86d13edd3c517a62c9de9..f87013a4c4a7b7009db6421c7beb145c625e48a9 100644 (file)
@@ -289,10 +289,10 @@ FE_DGPNonparametric<dim,spacedim>::fill_fe_values (
   const Mapping<dim,spacedim>&,
   const typename Triangulation<dim,spacedim>::cell_iterator&,
   const Quadrature<dim>&,
-  const enum CellSimilarity::Similarity cell_similarity,
   typename Mapping<dim,spacedim>::InternalDataBase&,
   typename Mapping<dim,spacedim>::InternalDataBase& fedata,
-  FEValuesData<dim,spacedim>& data) const
+  FEValuesData<dim,spacedim>&data,
+  enum CellSimilarity::Similarity &cell_similarity) const
 {
                                   // convert data object to internal
                                   // data for this class. fails with
index 75ad0b8d5a3590698e2343f1e6b77a5ce366fe62..9582125302892feaa3103ff60d728c7eb3c2c95b 100644 (file)
@@ -994,10 +994,10 @@ FE_Nedelec<dim,spacedim>::fill_fe_values
   (const Mapping<dim,spacedim>                      &mapping,
    const typename Triangulation<dim,spacedim>::cell_iterator &cell,
    const Quadrature<dim>                            &quadrature,
-   const enum CellSimilarity::Similarity             cell_similarity,
    typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
    typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-   FEValuesData<dim,spacedim>                       &data) const
+   FEValuesData<dim,spacedim>                       &data,
+   enum CellSimilarity::Similarity                  &cell_similarity) const
 {
                                   // convert data object to internal
                                   // data for this class. fails with
index ebc257d682f79ede7c9c1ebd84129d7163b420e8..a6cc1f226b9135bfbb14dc72d699613f456b0757 100644 (file)
@@ -362,10 +362,10 @@ 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 enum CellSimilarity::Similarity             cell_similarity,
   typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
   typename Mapping<dim,spacedim>::InternalDataBase &fedata,
-  FEValuesData<dim,spacedim>                       &data) const
+  FEValuesData<dim,spacedim>                       &data,
+  enum CellSimilarity::Similarity                  &cell_similarity) const
 {
                                   // convert data object to internal
                                   // data for this class. fails with
@@ -390,13 +390,23 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
   // between two faces.
   std::vector<double> sign_change (this->dofs_per_cell, 1.0);
   get_face_sign_change (cell, this->dofs_per_face, sign_change);
+
+                                  // for Piola mapping, the similarity
+                                  // concept cannot be used because of
+                                  // possible sign changes from one cell to
+                                  // the next.
+  if (mapping_type == mapping_piola)
+    if (cell_similarity == CellSimilarity::translation)
+      cell_similarity = CellSimilarity::none;
   
   for (unsigned int i=0; i<this->dofs_per_cell; ++i)
     {
       const unsigned int first = data.shape_function_to_row_table[i];
       
-      if (flags & update_values)
+      if (flags & update_values && cell_similarity != CellSimilarity::translation)
        {
+         if (cell_similarity == 1)
+           std::cout << "hier";
          switch (mapping_type)
            {
              case mapping_none:
@@ -437,7 +447,7 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
            }
        }
       
-      if (flags & update_gradients)
+      if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
        {
          std::vector<Tensor<2,dim> > shape_grads1 (n_q_points);
          std::vector<Tensor<2,dim> > shape_grads2 (n_q_points);
@@ -493,7 +503,7 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
        }
     }
   
-  if (flags & update_hessians)
+  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
     this->compute_2nd (mapping, cell,
                       typename QProjector<dim>::DataSetDescriptor().cell(),
                       mapping_data, fe_data, data);
index 53917b353d2dba4e8d49ff80ea4f05ca11218a6b..d6915d0cee20a3b3884780cfc8918edcb4586d84 100644 (file)
@@ -667,10 +667,10 @@ FESystem<dim,spacedim>::
 fill_fe_values (const Mapping<dim,spacedim>                      &mapping,
                 const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                 const Quadrature<dim>                            &quadrature,
-               const enum CellSimilarity::Similarity             cell_similarity,
                 typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
                 typename Mapping<dim,spacedim>::InternalDataBase &fe_data,
-                FEValuesData<dim,spacedim>                       &data) const
+                FEValuesData<dim,spacedim>                       &data,
+               enum CellSimilarity::Similarity                  &cell_similarity) const
 {
   compute_fill(mapping, cell, invalid_face_number, invalid_face_number,
               quadrature, cell_similarity, mapping_data, fe_data, data);
@@ -723,7 +723,7 @@ compute_fill (const Mapping<dim,spacedim>                      &mapping,
               const unsigned int                                face_no,
               const unsigned int                                sub_no,
               const Quadrature<dim_1>                          &quadrature,
-             const enum CellSimilarity::Similarity             cell_similarity,
+             enum CellSimilarity::Similarity                   cell_similarity,
               typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
               typename Mapping<dim,spacedim>::InternalDataBase &fedata,
               FEValuesData<dim,spacedim>                       &data) const
@@ -838,7 +838,8 @@ compute_fill (const Mapping<dim,spacedim>                      &mapping,
                                           // to correctly map the RT space from
                                           // the reference element to the global
                                           // coordinate system.
-         base_data.JxW_values = data.JxW_values;
+         if (cell_similarity != CellSimilarity::translation)
+           base_data.JxW_values = data.JxW_values;
 
 
                                            // Make sure that in the
@@ -857,8 +858,8 @@ compute_fill (const Mapping<dim,spacedim>                      &mapping,
                                            // therefore use
                                            // base_fe_data.update_flags.
          if (face_no==invalid_face_number)
-           base_fe.fill_fe_values(mapping, cell, *cell_quadrature, cell_similarity
-                                  mapping_data, base_fe_data, base_data);
+           base_fe.fill_fe_values(mapping, cell, *cell_quadrature, mapping_data
+                                  base_fe_data, base_data, cell_similarity);
          else if (sub_no==invalid_face_number)
            base_fe.fill_fe_face_values(mapping, cell, face_no,
                                        *face_quadrature, mapping_data, base_fe_data, base_data);
index b3ff22769419696cf0c667917267b61a666200bc..f35821185747489a131971bca04c2a9dba092635 100644 (file)
@@ -3266,7 +3266,7 @@ FEValuesBase<dim,spacedim>::check_cell_similarity
 
   const typename Triangulation<dim,spacedim>::cell_iterator & present_cell = 
     *this->present_cell;
-
                                   // test for translation
   {
                                   // otherwise, go through the vertices and
@@ -3280,10 +3280,11 @@ FEValuesBase<dim,spacedim>::check_cell_similarity
                                   // others have the same.
     bool is_translation = true;
     const Point<spacedim> dist = cell->vertex(0) - present_cell->vertex(0);
+    const double tolerance = 1e-30 * dist.norm_square();
     for (unsigned int i=1; i<GeometryInfo<dim>::vertices_per_cell; ++i)
       {
        Point<spacedim> dist_new = cell->vertex(i) - present_cell->vertex(i) - dist;
-       if (dist_new.norm_square() > 1e-30)
+       if (dist_new.norm_square() > tolerance)
          {
            is_translation = false;
            break;
@@ -3548,22 +3549,22 @@ void FEValues<dim,spacedim>::do_reinit ()
 {
   this->get_mapping().fill_fe_values(*this->present_cell,
                                     quadrature,
-                                    this->cell_similarity,
                                     *this->mapping_data,
                                     this->quadrature_points,
                                     this->JxW_values,
                                     this->jacobians,
                                     this->jacobian_grads,
                                     this->inverse_jacobians,
-                                    this->cell_normal_vectors);
-  
+                                    this->cell_normal_vectors,
+                                    this->cell_similarity);
+
   this->get_fe().fill_fe_values(this->get_mapping(),
                                *this->present_cell,
                                quadrature,
-                               this->cell_similarity,
                                *this->mapping_data,
                                *this->fe_data,
-                               *this);
+                               *this,
+                               this->cell_similarity);
 
   this->fe_data->clear_first_cell ();
   this->mapping_data->clear_first_cell ();
@@ -3862,7 +3863,7 @@ void FEFaceValues<dim,spacedim>::do_reinit (const unsigned int face_no)
                                          this->JxW_values,
                                          this->boundary_forms,
                                          this->normal_vectors);
-  
+
   this->get_fe().fill_fe_face_values(this->get_mapping(),
                                     *this->present_cell, face_no,
                                     this->quadrature,
index c5e55981e2719087289e4adaf81befa90728f436..acdfc8b32f100485ed0d1863bb19e732306f45bd 100644 (file)
@@ -303,14 +303,14 @@ void
 MappingCartesian<dim, spacedim>::
 fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator& cell,
                 const Quadrature<dim>& q, 
-               enum CellSimilarity::Similarity& cell_similarity,
                typename Mapping<dim,spacedim>::InternalDataBase& mapping_data,
                 std::vector<Point<spacedim> >& quadrature_points,
                 std::vector<double>& JxW_values,
                std::vector<Tensor<2,spacedim> >& jacobians,
                std::vector<Tensor<3,spacedim> >& jacobian_grads,
                std::vector<Tensor<2,spacedim> >& inverse_jacobians,
-               std::vector<Point<spacedim> >       &) const
+               std::vector<Point<spacedim> >       &,
+               enum CellSimilarity::Similarity& cell_similarity) const
 {
                                   // convert data object to internal
                                   // data for this class. fails with
index 65ea8d8b6e5b6f4c34205fd26e708044558a59b1..0cb43f683ab73dc398b0fe8f22a2b83ab680340e 100644 (file)
@@ -307,14 +307,14 @@ void
 MappingQ<dim,spacedim>::fill_fe_values (
   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
   const Quadrature<dim>                                     &q,
-  enum CellSimilarity::Similarity                           &cell_similarity,
   typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
   std::vector<Point<spacedim> >                             &quadrature_points,
   std::vector<double>                                       &JxW_values,
   std::vector<Tensor<2,spacedim> >                          &jacobians,
   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-  std::vector<Point<spacedim> >                             &cell_normal_vectors) const
+  std::vector<Point<spacedim> >                             &cell_normal_vectors,
+  enum CellSimilarity::Similarity                           &cell_similarity) const
 {
                                   // convert data object to internal
                                   // data for this class. fails with
@@ -354,10 +354,10 @@ MappingQ<dim,spacedim>::fill_fe_values (
       cell_similarity = CellSimilarity::invalid_next_cell;
     }
   
-  MappingQ1<dim,spacedim>::fill_fe_values(cell, q, cell_similarity, *p_data,
+  MappingQ1<dim,spacedim>::fill_fe_values(cell, q, *p_data,
                                          quadrature_points, JxW_values,
                                          jacobians, jacobian_grads, inverse_jacobians,
-                                         cell_normal_vectors);
+                                         cell_normal_vectors, cell_similarity);
 }
 
 
index 90741b0ad7b21c079dbf1c608e76c327b306cc39..9309dca69f30cafe8c9339b9a6e1960af1dc35ea 100644 (file)
@@ -739,14 +739,14 @@ void
 MappingQ1<dim,spacedim>::fill_fe_values (
   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
   const Quadrature<dim>                                     &q,
-  enum CellSimilarity::Similarity                           &cell_similarity,
   typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
   std::vector<Point<spacedim> >                             &quadrature_points,
   std::vector<double>                                       &JxW_values,
   std::vector<Tensor<2,spacedim> >                          &jacobians,
   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-  std::vector<Point<spacedim> >                             &cell_normal_vectors) const
+  std::vector<Point<spacedim> >                             &cell_normal_vectors,
+  enum CellSimilarity::Similarity                           &cell_similarity) const
 {
   // ensure that the following cast is really correct:
   Assert (dynamic_cast<InternalData *>(&mapping_data) != 0, 
@@ -1363,7 +1363,7 @@ transform_real_to_unit_cell (const typename Triangulation<dim,spacedim>::cell_it
                                      point_quadrature)));
 
   MappingQ1<dim,spacedim>::compute_mapping_support_points (cell,
-                                                  mdata->mapping_support_points);
+                                                          mdata->mapping_support_points);
   Assert(mdata->mapping_support_points.size() ==
          GeometryInfo<dim>::vertices_per_cell,
         ExcInternalError());
index d6dfaf9e66eda91e543c47e5ee1b8839f1559f4b..15cb638043dc6d58f574ed5996cfcbfa60e9940a 100644 (file)
@@ -120,23 +120,23 @@ void
 MappingQ1Eulerian<dim,EulerVectorType,spacedim>::fill_fe_values (
   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
   const Quadrature<dim>                                     &q,
-  enum CellSimilarity::Similarity                           &cell_similarity,
   typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
   std::vector<Point<spacedim> >                             &quadrature_points,
   std::vector<double>                                       &JxW_values,
   std::vector<Tensor<2,spacedim> >                          &jacobians,
   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-  std::vector<Point<spacedim> >                             &cell_normal_vectors) const
+  std::vector<Point<spacedim> >                             &cell_normal_vectors,
+  enum CellSimilarity::Similarity                           &cell_similarity) const
 {
                                   // disable any previously detected
-                                  // similarity and hand on to the
+                                  // similarity and then enter the
                                   // respective function of the base class.
   cell_similarity = CellSimilarity::invalid_next_cell;
-  MappingQ1<dim,spacedim>::fill_fe_values (cell, q, cell_similarity, mapping_data,
+  MappingQ1<dim,spacedim>::fill_fe_values (cell, q, mapping_data,
                                           quadrature_points, JxW_values, jacobians,
                                           jacobian_grads, inverse_jacobians,
-                                          cell_normal_vectors);
+                                          cell_normal_vectors, cell_similarity);
 }
 
 
index 1431787d1257614aa0dbe5e033e7dac3aa74656e..568f9845fb33f91e348ed7d5811a47395da5b369 100644 (file)
@@ -187,23 +187,23 @@ void
 MappingQEulerian<dim,EulerVectorType,spacedim>::fill_fe_values (
   const typename Triangulation<dim,spacedim>::cell_iterator &cell,
   const Quadrature<dim>                                     &q,
-  enum CellSimilarity::Similarity                           &cell_similarity,
   typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
   std::vector<Point<spacedim> >                             &quadrature_points,
   std::vector<double>                                       &JxW_values,
   std::vector<Tensor<2,spacedim> >                          &jacobians,
   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-  std::vector<Point<spacedim> >                             &cell_normal_vectors) const
+  std::vector<Point<spacedim> >                             &cell_normal_vectors,
+  enum CellSimilarity::Similarity                           &cell_similarity) const
 {
                                   // disable any previously detected
                                   // similarity and hand on to the respective
                                   // function of the base class.
   cell_similarity = CellSimilarity::invalid_next_cell;
-  MappingQ<dim,spacedim>::fill_fe_values (cell, q, cell_similarity, mapping_data,
+  MappingQ<dim,spacedim>::fill_fe_values (cell, q, mapping_data,
                                          quadrature_points, JxW_values, jacobians,
                                          jacobian_grads, inverse_jacobians,
-                                         cell_normal_vectors);
+                                         cell_normal_vectors, cell_similarity);
 }
 
 

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.