]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
co- and contravariant transformation simplified
authorguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 2 Jul 2002 16:12:36 +0000 (16:12 +0000)
committerguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 2 Jul 2002 16:12:36 +0000 (16:12 +0000)
git-svn-id: https://svn.dealii.org/trunk@6213 0785d39b-7218-0410-832d-ea1e28bc413d

14 files changed:
deal.II/common/scripts/build-test/configurations/ultra-gcc31-mt.cfg
deal.II/common/scripts/build-test/configurations/utwente-gcc.cfg
deal.II/common/scripts/build-test/template
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/source/fe/fe.cc
deal.II/deal.II/source/fe/fe_dgp.cc
deal.II/deal.II/source/fe/fe_dgq.cc
deal.II/deal.II/source/fe/fe_q.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

index 439027ff0d255200069384d8989dc43f55261a59..c9943fb5c5dee4f15195597f517a9055cc1df649 100644 (file)
@@ -14,7 +14,7 @@ s'CXX=.*'CXX=g++';
 s'CC=.*'CC=gcc';
 s'CVS=.*'CVS=cvs';
 s'MAKE=.*'MAKE="make"';
-s'MAIL=.*'MAIL=mail';
+s'MAIL=.*'MAIL="ssh1 atlas mail"';
 
 # Path variables
 
index 0acfdda34561b2c8e967bb469ce2261ac2131347..5f6b1babb0d9448a1663181ef47dd42e7ccaaab6 100644 (file)
@@ -5,14 +5,16 @@ s/\@Id\@/$id/;
 
 s'compiler=.*'compiler=gcc295';
 
+# it seems that we cannot get this from config.guess
+
+s!`./config.guess`!i686-pc-cygwin!;
+
 # Commands
 
 s'CXX=.*'CXX=g++';
 s'CC=.*'CC=gcc';
 s'CVS=.*'CVS=cvs';
 s'MAKE=.*'MAKE="make"';
-#s'MAIL=.*'MAIL="cat > "';
-s!\$MAIL build-(.*)\@dealii.org.*!cp log > ../../$1!;
 
 # Path variables
 
@@ -25,6 +27,4 @@ s'export CVSROOT=.*'export CVSROOT=:pserver:build@eris.iwr.uni-heidelberg.de:/ho
 
 # Work around missing mail
 
-
-s'build-failure\@dealii.org'../../Failure';
-s'build-success\@dealii.org'../../Success';
+s!\$MAIL build-(.*)\@dealii.org < log 2>\&1!cp log ../../$1!;
index 385dc1c6f0592f1333aec7474b2bcfa6371e6bfe..077388478e2df6fbdc9c3d0501c1c38b54ea9ed9 100644 (file)
@@ -95,7 +95,7 @@ echo "BUILDING LIBRARY AT " `date '+%Y-%m-%d %T'` | tee -a log
 
 (if ($MAKE all -k 2>&1) ; then
        echo "CLEANING OBJECT FILES AT " `date '+%Y-%m-%d %T'` | tee -a log
-       $MAKE clean
+       $MAKE clean -k 2>&1
        echo "BUILDING EXAMPLES AT " `date '+%Y-%m-%d %T'` | tee -a log
         if (cd examples ; $MAKE -k 2>&1) ; then
                result=succeeded ;
index 41afb3822bfa84db03ba0fb53e008427352a3e2b..ec3f2f3c2002a4df3ea29b49ff9c0733b09033f6 100644 (file)
@@ -189,64 +189,42 @@ class Mapping : public Subscriptor
     
                                     /**
                                      * Tranform a field of covariant
-                                     * vectors.  There must be one
-                                     * vector for each quadrature
-                                     * point. Alternatively, for
-                                     * faces and subfaces, the number
-                                     * of the first quadrature point
-                                     * can be given as additional
-                                     * argument.
-                                     */
-    virtual void transform_covariant (typename std::vector<Tensor<1,dim> >       &dst,
-                                     const typename std::vector<Tensor<1,dim> > &src,
-                                     const InternalDataBase                     &internal,
-                                     const unsigned int                          src_offset) const = 0;
-    
-                                    /**
-                                     * Tranform a field of
-                                     * contravariant vectors.  There
-                                     * must be one vector for each
-                                     * quadrature
-                                     * point. Alternatively, for
-                                     * faces and subfaces, the number
-                                     * of the first quadrature point
-                                     * can be given as additional
-                                     * argument.
-                                     */
-    virtual
-    void
-    transform_contravariant (typename std::vector<Tensor<1,dim> >       &dst,
-                            const typename std::vector<Tensor<1,dim> > &src,
-                            const InternalDataBase                     &internal,
-                            const unsigned int                          src_offset) const = 0;
-    
-                                    /**
-                                     * Tranform a field of covariant vectors.
-                                     * There must be one vector for each quadrature
-                                     * point. Alternatively, for faces and subfaces,
-                                     * the first quadrature point can be
-                                     * given as additional argument.
+                                     * vectors. The vector spanned by
+                                     * @p{begin} and @p{end} must
+                                     * have as many elements as there
+                                     * are quadrature points (not
+                                     * tested inside the function).
+                                     *
+                                     * The vector @p{src} must
+                                     * contain at least as many
+                                     * elements.
                                      */
     virtual
     void
-    transform_covariant (typename std::vector<Point<dim> >       &dst,
-                        const typename std::vector<Point<dim> > &src,
-                        const InternalDataBase                  &internal,
-                        const unsigned int                       src_offset) const = 0;
+    transform_covariant (Tensor<1,dim>* begin,
+                        const Tensor<1,dim>* end,
+                        const Tensor<1,dim>* src,
+                        const InternalDataBase& internal) const = 0;
     
                                     /**
-                                     * Tranform a field of contravariant vectors.
-                                     * There must be one vector for each quadrature
-                                     * point. Alternatively, for faces and subfaces,
-                                     * the first quadrature point can be
-                                     * given as additional argument.
+                                     * Tranform a field of
+                                     * contravariant vectors. The
+                                     * vector spanned by @p{begin}
+                                     * and @p{end} must have as many
+                                     * elements as there are
+                                     * quadrature points (not tested
+                                     * inside the function).
+                                     *
+                                     * The vector @p{src} must
+                                     * contain at least as many
+                                     * elements.
                                      */
     virtual
     void
-    transform_contravariant (typename std::vector<Point<dim> >       &dst,
-                            const typename std::vector<Point<dim> > &src,
-                            const InternalDataBase                  &internal,
-                            const unsigned int                       src_offset) const = 0;
+    transform_contravariant (Tensor<1,dim>* begin,
+                            const Tensor<1,dim>* end,
+                            const Tensor<1,dim>* src,
+                            const InternalDataBase& internal) const = 0;
 
                                     /**
                                      * Indicate fields to be updated in the
index 587cad2965740d10d7fd3625cfe2e5771665805c..af5c50ec0000419c15f155994e6f0725585a96a2 100644 (file)
@@ -105,41 +105,21 @@ class MappingCartesian : public Mapping<dim>
                                      * @ref{Mapping}.
                                      */
     virtual void
-    transform_covariant (typename std::vector<Tensor<1,dim> >       &dst,
-                        const typename std::vector<Tensor<1,dim> > &src,
-                        const typename Mapping<dim>::InternalDataBase &mapping_data,
-                        const unsigned int src_offset) const;
+    transform_covariant (Tensor<1,dim>* begin,
+                        const Tensor<1,dim>* end,
+                        const Tensor<1,dim>* src,
+                        const typename Mapping<dim>::InternalDataBase &mapping_data) const;
     
                                     /**
                                      * Implementation of the interface in
                                      * @ref{Mapping}.
                                      */
     virtual void
-    transform_contravariant (typename std::vector<Tensor<1,dim> >       &dst,
-                            const typename std::vector<Tensor<1,dim> > &src,
-                            const typename Mapping<dim>::InternalDataBase &mapping_data,
-                            const unsigned int src_offset) const;
+    transform_contravariant (Tensor<1,dim>* begin,
+                        const Tensor<1,dim>* end,
+                        const Tensor<1,dim>* src,
+                        const typename Mapping<dim>::InternalDataBase &mapping_data) const;
 
-                                    /**
-                                     * Implementation of the interface in
-                                     * @ref{Mapping}.
-                                     */
-    virtual void
-    transform_covariant (typename std::vector<Point<dim> >       &dst,
-                        const typename std::vector<Point<dim> > &src,
-                        const typename Mapping<dim>::InternalDataBase &mapping_data,
-                        const unsigned int src_offset) const;
-    
-                                    /**
-                                     * Implementation of the interface in
-                                     * @ref{Mapping}.
-                                     */
-    virtual void
-    transform_contravariant (typename std::vector<Point<dim> >       &dst,
-                            const typename std::vector<Point<dim> > &src,
-                            const typename Mapping<dim>::InternalDataBase &mapping_data,
-                            const unsigned int src_offset) const;
-    
                                     /**
                                      * Transforms the point @p{p} on
                                      * the unit cell to the point
@@ -182,25 +162,6 @@ class MappingCartesian : public Mapping<dim>
     DeclException0 (ExcInvalidData);
 
   protected:
-                                    /**
-                                     * Implementation of the
-                                     * covariant transformation.
-                                     */
-    template <typename tensor_>
-    void covariant_transformation (typename std::vector<tensor_>       &dst,
-                                  const typename std::vector<tensor_> &src,
-                                  const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                  const unsigned int src_offset) const;
-    
-                                    /**
-                                     * Implementation of the
-                                     * contravariant transformation.
-                                     */
-    template <typename tensor_>
-    void contravariant_transformation (typename std::vector<tensor_>       &dst,
-                                      const typename std::vector<tensor_> &src,
-                                      const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                      const unsigned int src_offset) const;
 
                                     /** 
                                      * Storage for internal data of
index c11f052b8981584e92e2a04b0e00fd63112d0aea..82ba320cbdc98ab3e4a1bd5fb8f04226e36b6f4c 100644 (file)
@@ -83,40 +83,20 @@ class MappingQ : public MappingQ1<dim>
                                      * @ref{Mapping}.
                                      */
     virtual void
-    transform_covariant (typename std::vector<Tensor<1,dim> >       &dst,
-                        const typename std::vector<Tensor<1,dim> > &src,
-                        const typename Mapping<dim>::InternalDataBase &mapping_data,
-                        const unsigned int src_offset) const;
+    transform_covariant (Tensor<1,dim>* begin,
+                        const Tensor<1,dim>* end,
+                        const Tensor<1,dim>* src,
+                        const typename Mapping<dim>::InternalDataBase &mapping_data) const;
     
                                     /**
                                      * Implementation of the interface in
                                      * @ref{Mapping}.
                                      */
     virtual void
-    transform_contravariant (typename std::vector<Tensor<1,dim> >       &dst,
-                            const typename std::vector<Tensor<1,dim> > &src,
-                            const typename Mapping<dim>::InternalDataBase &mapping_data,
-                            const unsigned int src_offset) const;
-
-                                    /**
-                                     * Implementation of the interface in
-                                     * @ref{Mapping}.
-                                     */
-    virtual void
-    transform_covariant (typename std::vector<Point<dim> >       &dst,
-                        const typename std::vector<Point<dim> > &src,
-                        const typename Mapping<dim>::InternalDataBase &mapping_data,
-                        const unsigned int src_offset) const;
-    
-                                    /**
-                                     * Implementation of the interface in
-                                     * @ref{Mapping}.
-                                     */
-    virtual void
-    transform_contravariant (typename std::vector<Point<dim> >       &dst,
-                            const typename std::vector<Point<dim> > &src,
-                            const typename Mapping<dim>::InternalDataBase &mapping_data,
-                            const unsigned int src_offset) const;
+    transform_contravariant (Tensor<1,dim>* begin,
+                        const Tensor<1,dim>* end,
+                        const Tensor<1,dim>* src,
+                        const typename Mapping<dim>::InternalDataBase &mapping_data) const;    
 
                                     /**
                                      * Return the degree of the
index bbe2afd3781b6f8e1e522c1529bd99eb25c9f01d..a3c4d92aac23291d8a2074342f28b8ad0e37f5a4 100644 (file)
@@ -72,41 +72,20 @@ class MappingQ1 : public Mapping<dim>
                                      * @ref{Mapping}.
                                      */
     virtual void
-    transform_covariant (typename std::vector<Tensor<1,dim> >       &dst,
-                        const typename std::vector<Tensor<1,dim> > &src,
-                        const typename Mapping<dim>::InternalDataBase &mapping_data,
-                        const unsigned int src_offset) const;
+    transform_covariant (Tensor<1,dim>* begin,
+                        const Tensor<1,dim>* end,
+                        const Tensor<1,dim>* src,
+                        const typename Mapping<dim>::InternalDataBase &mapping_data) const;
     
                                     /**
                                      * Implementation of the interface in
                                      * @ref{Mapping}.
                                      */
     virtual void
-    transform_contravariant (typename std::vector<Tensor<1,dim> >       &dst,
-                            const typename std::vector<Tensor<1,dim> > &src,
-                            const typename Mapping<dim>::InternalDataBase &mapping_data,
-                            const unsigned int src_offset) const;
-
-                                    /**
-                                     * Implementation of the interface in
-                                     * @ref{Mapping}.
-                                     */
-    virtual void
-    transform_covariant (typename std::vector<Point<dim> >       &dst,
-                        const typename std::vector<Point<dim> > &src,
-                        const typename Mapping<dim>::InternalDataBase &mapping_data,
-                        const unsigned int src_offset) const;
-    
-                                    /**
-                                     * Implementation of the interface in
-                                     * @ref{Mapping}.
-                                     */
-    virtual void
-    transform_contravariant (typename std::vector<Point<dim> >       &dst,
-                            const typename std::vector<Point<dim> > &src,
-                            const typename Mapping<dim>::InternalDataBase &mapping_data,
-                            const unsigned int src_offset) const;
-    
+    transform_contravariant (Tensor<1,dim>* begin,
+                            const Tensor<1,dim>* end,
+                            const Tensor<1,dim>* src,
+                            const typename Mapping<dim>::InternalDataBase &mapping_data) const;
     
                                     /**
                                      * Implementation of the interface in
@@ -162,26 +141,6 @@ class MappingQ1 : public Mapping<dim>
                            typename std::vector<Tensor<1,dim> >        &boundary_form,
                            typename std::vector<Point<dim> >        &normal_vectors) const ;
     
-                                    /**
-                                     * Implementation of the
-                                     * covariant transformation.
-                                     */
-    template <typename tensor_>
-    void covariant_transformation (typename std::vector<tensor_>       &dst,
-                                  const typename std::vector<tensor_> &src,
-                                  const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                  const unsigned int src_offset) const;
-    
-                                    /**
-                                     * Implementation of the
-                                     * contravariant transformation.
-                                     */
-    template <typename tensor_>
-    void contravariant_transformation (typename std::vector<tensor_>       &dst,
-                                      const typename std::vector<tensor_> &src,
-                                      const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                      const unsigned int src_offset) const;
-
                                     /** 
                                      * Storage for internal data of
                                      * d-linear transformation.
index 50b0b86cf9314d585d623b45b1b704241632b54f..02f3981b3db6bbbb81b168a1071082228e8985a2 100644 (file)
@@ -465,8 +465,9 @@ compute_2nd (const Mapping<dim>                   &mapping,
                                       // cell
       for (unsigned int d=0; d<dim; ++d)
        {
-         mapping.transform_covariant (diff_quot2, diff_quot[d],
-                                      mapping_internal, offset);
+         mapping.transform_covariant (diff_quot2.begin(), diff_quot2.end(),
+                                      &diff_quot[d][offset],
+                                      mapping_internal);
 
          for (unsigned int q=0; q<n_q_points; ++q)
            for (unsigned int d1=0; d1<dim; ++d1)
index 77fd7a4d9fea5158d73163f6aa0097bb356fef27..d3fe59b8054c5c8e014fe05d09479aa5f1cc8988 100644 (file)
@@ -291,9 +291,10 @@ FE_DGP<dim>::fill_fe_values (const Mapping<dim>                   &mapping,
          data.shape_values(k,i) = fe_data.shape_values[k][i];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, 0);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   fe_data.shape_gradients[k].begin(),
+                                   mapping_data);
     }
   
   if (flags & update_second_derivatives)
@@ -334,9 +335,10 @@ FE_DGP<dim>::fill_fe_face_values (const Mapping<dim>                   &mapping,
          data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, offset);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   &fe_data.shape_gradients[k][offset],
+                                   mapping_data);
     }
 
   if (flags & update_second_derivatives)
@@ -379,9 +381,10 @@ FE_DGP<dim>::fill_fe_subface_values (const Mapping<dim>                   &mappi
          data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, offset);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   &fe_data.shape_gradients[k][offset],
+                                   mapping_data);
     }
   
   if (flags & update_second_derivatives)
index af9b968ecf5ae1980ce838b11a62b5a20c816f79..633e75f2a97d16b7e218cfb396fb5b9debf1c036 100644 (file)
@@ -491,9 +491,10 @@ FE_DGQ<dim>::fill_fe_values (const Mapping<dim>                   &mapping,
          data.shape_values(k,i) = fe_data.shape_values[k][i];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, 0);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   fe_data.shape_gradients[k].begin(),
+                                   mapping_data);
     }
   
   if (flags & update_second_derivatives)
@@ -534,9 +535,10 @@ FE_DGQ<dim>::fill_fe_face_values (const Mapping<dim>                   &mapping,
          data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, offset);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   &fe_data.shape_gradients[k][offset],
+                                   mapping_data);
     }
 
   if (flags & update_second_derivatives)
@@ -579,9 +581,10 @@ FE_DGQ<dim>::fill_fe_subface_values (const Mapping<dim>                   &mappi
          data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, offset);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   &fe_data.shape_gradients[k][offset],
+                                   mapping_data);
     }
   
   if (flags & update_second_derivatives)
index 991d38236ab9c04b37bf0db32a40828c2ada0d35..a63cb08ad82ed70f132b1c5405e0be38e737b804 100644 (file)
@@ -1183,9 +1183,10 @@ FE_Q<dim>::fill_fe_values (const Mapping<dim>                   &mapping,
          data.shape_values(k,i) = fe_data.shape_values[k][i];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, 0);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   fe_data.shape_gradients[k].begin(),
+                                   mapping_data);
     }
 
   if (flags & update_second_derivatives)
@@ -1226,9 +1227,10 @@ FE_Q<dim>::fill_fe_face_values (const Mapping<dim>                   &mapping,
          data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, offset);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   &fe_data.shape_gradients[k][offset],
+                                   mapping_data);
     }
 
   if (flags & update_second_derivatives)
@@ -1271,9 +1273,10 @@ FE_Q<dim>::fill_fe_subface_values (const Mapping<dim>                   &mapping
          data.shape_values(k,i) = fe_data.shape_values[k][i+offset];
       
       if (flags & update_gradients)
-       mapping.transform_covariant(data.shape_gradients[k],
-                                   fe_data.shape_gradients[k],
-                                   mapping_data, offset);
+       mapping.transform_covariant(data.shape_gradients[k].begin(),
+                                   data.shape_gradients[k].end(),
+                                   &fe_data.shape_gradients[k][offset],
+                                   mapping_data);
     }
   
   if (flags & update_second_derivatives)
index 6c08421476aeca7be8b75e9fe729456ff07c5db7..1a56f051f0c68872e809a6962046554592daa08d 100644 (file)
@@ -438,49 +438,58 @@ MappingCartesian<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator
 
 template <int dim>
 void
-MappingCartesian<dim>::transform_covariant (typename std::vector<Tensor<1,dim> >       &dst,
-                                           const typename std::vector<Tensor<1,dim> > &src,
-                                           const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                           const unsigned int src_offset) const
+MappingCartesian<dim>::transform_covariant (
+  Tensor<1,dim>* begin,
+  const Tensor<1,dim>* end,
+  const Tensor<1,dim>* src,
+  const typename Mapping<dim>::InternalDataBase &mapping_data) const
 {
-  covariant_transformation(dst, src, mapping_data, src_offset);
-}
-
+  const InternalData &data = dynamic_cast<const InternalData&> (mapping_data);
 
-template <int dim>
-void
-MappingCartesian<dim>::transform_covariant (typename std::vector<Point<dim> >       &dst,
-                                           const typename std::vector<Point<dim> > &src,
-                                           const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                           const unsigned int src_offset) const
-{
-  covariant_transformation(dst, src, mapping_data, src_offset);
+  Assert (data.update_flags & update_covariant_transformation,
+         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+  
+                                  // simply scale by inverse Jacobian
+                                  // (which is diagonal here)
+  while (begin!=end)
+    {
+      for (unsigned int d=0;d<dim;++d)
+       (*begin)[d] = (*src)[d]/data.length[d];
+      begin++;
+      src++;
+    }
 }
 
+
 template <int dim>
 void
-MappingCartesian<dim>::transform_contravariant (typename std::vector<Tensor<1,dim> >       &dst,
-                                               const typename std::vector<Tensor<1,dim> > &src,
-                                               const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                               const unsigned int src_offset) const
+MappingCartesian<dim>::transform_contravariant (
+  Tensor<1,dim>* begin,
+  const Tensor<1,dim>* end,
+  const Tensor<1,dim>* src,
+  const typename Mapping<dim>::InternalDataBase &mapping_data) const
 {
-  contravariant_transformation(dst, src, mapping_data, src_offset);
-}
-
+                                  // convert data object to internal
+                                  // data for this class. fails with
+                                  // an exception if that is not
+                                  // possible
+  const InternalData &data = dynamic_cast<const InternalData&> (mapping_data);
 
+  Assert (data.update_flags & update_contravariant_transformation,
+         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
 
-template <int dim>
-void
-MappingCartesian<dim>::transform_contravariant (typename std::vector<Point<dim> >       &dst,
-                                               const typename std::vector<Point<dim> > &src,
-                                               const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                               const unsigned int src_offset) const
-{
-  contravariant_transformation(dst, src, mapping_data, src_offset);
+                                  // simply scale by Jacobian
+                                  // (which is diagonal here)
+  while (begin!=end)
+    {
+      for (unsigned int d=0; d<dim; ++d)
+       (*begin)[d] = (*src)[d]*data.length[d];
+      ++begin;
+      ++src;
+    }
 }
 
 
-
 template <int dim>
 Point<dim> MappingCartesian<dim>::transform_unit_to_real_cell (
   const typename Triangulation<dim>::cell_iterator cell,
@@ -545,110 +554,7 @@ Point<dim> MappingCartesian<dim>::transform_real_to_unit_cell (
 }
 
 
-
-template <int dim>
-template <typename tensor_>
-void
-MappingCartesian<dim>::
-contravariant_transformation (typename std::vector<tensor_>       &dst,
-                             const typename std::vector<tensor_> &src,
-                             const typename Mapping<dim>::InternalDataBase &mapping_data,
-                             const unsigned int src_offset) const
-{
-  Assert(tensor_::dimension==dim && tensor_::rank==1, ExcInvalidData());
-
-                                  // convert data object to internal
-                                  // data for this class. fails with
-                                  // an exception if that is not
-                                  // possible
-  const InternalData &data = dynamic_cast<const InternalData&> (mapping_data);
-
-  Assert (data.update_flags & update_contravariant_transformation,
-         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-
-  typename std::vector<tensor_>::const_iterator vec    = src.begin() + src_offset;
-  typename std::vector<tensor_>::iterator       result = dst.begin();
-  typename std::vector<tensor_>::const_iterator end    = dst.end();
-  
-                                  // simply scale by Jacobian
-                                  // (which is diagonal here)
-  while (result!=end)
-    {
-      for (unsigned int d=0; d<dim; ++d)
-       (*result)[d] = (*vec)[d]*data.length[d];
-      ++vec;
-      ++result;
-    }
-}
-
-
-
-template <int dim>
-template <typename tensor_>
-void
-MappingCartesian<dim>::
-covariant_transformation (typename std::vector<tensor_>       &dst,
-                         const typename std::vector<tensor_> &src,
-                         const typename Mapping<dim>::InternalDataBase &mapping_data,
-                         const unsigned int src_offset) const
-{
-  Assert(tensor_::dimension==dim && tensor_::rank==1, ExcInvalidData());
-
-                                  // convert data object to internal
-                                  // data for this class. fails with
-                                  // an exception if that is not
-                                  // possible
-  const InternalData &data = dynamic_cast<const InternalData&> (mapping_data);
-
-  Assert (data.update_flags & update_covariant_transformation,
-         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-  
-  typename std::vector<tensor_>::const_iterator vec    = src.begin() + src_offset;
-  typename std::vector<tensor_>::iterator       result = dst.begin();
-  typename std::vector<tensor_>::const_iterator end    = dst.end();
-
-                                  // simply scale by inverse Jacobian
-                                  // (which is diagonal here)
-  while (result!=end)
-    {
-      for (unsigned int d=0;d<dim;++d)
-       (*result)[d] = (*vec)[d]/data.length[d];
-      vec++;
-      result++;
-    }
-}
-
-
-
 //----------------------------------------------------------------------//
 // explicit instantiations
 
 template class MappingCartesian<deal_II_dimension>;
-
-template void MappingCartesian<deal_II_dimension>::
-contravariant_transformation<Tensor<1,deal_II_dimension> > (
-  std::vector<Tensor<1,deal_II_dimension> >       &dst,
-  const std::vector<Tensor<1,deal_II_dimension> > &src,
-  const Mapping<deal_II_dimension>::InternalDataBase& internal,
-  const unsigned int src_offset) const;
-
-template void MappingCartesian<deal_II_dimension>::
-contravariant_transformation<Point<deal_II_dimension> > (
-  std::vector<Point<deal_II_dimension> >       &dst,
-  const std::vector<Point<deal_II_dimension> > &src,
-  const Mapping<deal_II_dimension>::InternalDataBase& internal,
-  const unsigned int src_offset) const;
-
-template void MappingCartesian<deal_II_dimension>::
-covariant_transformation<Tensor<1,deal_II_dimension> > (
-  std::vector<Tensor<1,deal_II_dimension> >       &dst,
-  const std::vector<Tensor<1,deal_II_dimension> > &src,
-  const Mapping<deal_II_dimension>::InternalDataBase& internal,
-  const unsigned int src_offset) const;
-
-template void MappingCartesian<deal_II_dimension>::
-covariant_transformation<Point<deal_II_dimension> > (
-  std::vector<Point<deal_II_dimension> >       &dst,
-  const std::vector<Point<deal_II_dimension> > &src,
-  const Mapping<deal_II_dimension>::InternalDataBase& internal,
-  const unsigned int src_offset) const;
index bdad90bbfe9b2c269358554a365d5fa003b2c655..98e5a36e23570b6c3adef1d598712549bc254b5d 100644 (file)
@@ -1068,113 +1068,67 @@ MappingQ<dim>::fill_quad_support_points_simple (const typename Triangulation<dim
 
 template <int dim>
 void
-MappingQ<dim>::transform_covariant (typename std::vector<Tensor<1,dim> >       &dst,
-                                   const typename std::vector<Tensor<1,dim> > &src,
-                                   const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                   const unsigned int src_offset) const
+MappingQ<dim>::transform_covariant (
+  Tensor<1,dim>* begin,
+  const Tensor<1,dim>* end,
+  const Tensor<1,dim>* src,
+  const typename Mapping<dim>::InternalDataBase &mapping_data) const
 {
-  const typename MappingQ1<dim>::InternalData *q1_data_ptr =
+  const typename MappingQ1<dim>::InternalData *q1_data =
     dynamic_cast<const typename MappingQ1<dim>::InternalData *> (&mapping_data);
-  Assert(q1_data_ptr!=0, ExcInternalError());
-  const typename MappingQ1<dim>::InternalData &q1_data=*q1_data_ptr;
+  Assert(q1_data!=0, ExcInternalError());
+  
+  typename std::vector<Tensor<2,dim> >::const_iterator tensor;
 
-  if (q1_data.is_mapping_q1_data)
-    covariant_transformation(dst, src, q1_data, src_offset);
+  if (q1_data->is_mapping_q1_data)
+    tensor = q1_data->covariant.begin();
   else
     {
-      const InternalData *data_ptr = dynamic_cast<const InternalData *> (q1_data_ptr);
-      Assert(data_ptr!=0, ExcInternalError());
-      const InternalData &data=*data_ptr;
+      const InternalData *data = dynamic_cast<const InternalData *> (q1_data);
+      Assert(data!=0, ExcInternalError());
 
-      if (data.use_mapping_q1_on_current_cell)
-       covariant_transformation(dst, src, data.mapping_q1_data, src_offset);
+      if (data->use_mapping_q1_on_current_cell)
+       tensor = data->mapping_q1_data.covariant.begin();
       else
-       covariant_transformation(dst, src, data, src_offset);    
+       tensor = data->covariant.begin();    
     }
-}
-
-
-template <int dim>
-void
-MappingQ<dim>::transform_covariant (typename std::vector<Point<dim> >       &dst,
-                                   const typename std::vector<Point<dim> > &src,
-                                   const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                   const unsigned int src_offset) const
-{
-  const typename MappingQ1<dim>::InternalData *q1_data_ptr =
-    dynamic_cast<const typename MappingQ1<dim>::InternalData *> (&mapping_data);
-  Assert(q1_data_ptr!=0, ExcInternalError());
-  const typename MappingQ1<dim>::InternalData &q1_data=*q1_data_ptr;
-
-  if (q1_data.is_mapping_q1_data)
-    covariant_transformation(dst, src, q1_data, src_offset);
-  else
+    while (begin!=end)
     {
-      const InternalData *data_ptr = dynamic_cast<const InternalData *> (q1_data_ptr);
-      Assert(data_ptr!=0, ExcInternalError());
-      const InternalData &data=*data_ptr;
-
-      if (data.use_mapping_q1_on_current_cell)
-       covariant_transformation(dst, src, data.mapping_q1_data, src_offset);
-      else
-       covariant_transformation(dst, src, data, src_offset);    
-    }  
+      contract (*(begin++), *(src++), *(tensor++));
+    }
 }
 
 
 template <int dim>
 void
-MappingQ<dim>::transform_contravariant (typename std::vector<Tensor<1,dim> >       &dst,
-                                       const typename std::vector<Tensor<1,dim> > &src,
-                                       const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                       const unsigned int src_offset) const
+MappingQ<dim>::transform_contravariant (
+  Tensor<1,dim>* begin,
+  const Tensor<1,dim>* end,
+  const Tensor<1,dim>* src,
+  const typename Mapping<dim>::InternalDataBase &mapping_data) const
 {
-  const typename MappingQ1<dim>::InternalData *q1_data_ptr =
+  const typename MappingQ1<dim>::InternalData *q1_data =
     dynamic_cast<const typename MappingQ1<dim>::InternalData *> (&mapping_data);
-  Assert(q1_data_ptr!=0, ExcInternalError());
-  const typename MappingQ1<dim>::InternalData &q1_data=*q1_data_ptr;
+  Assert(q1_data!=0, ExcInternalError());
+  
+  typename std::vector<Tensor<2,dim> >::const_iterator tensor;
 
-  if (q1_data.is_mapping_q1_data)
-    contravariant_transformation(dst, src, q1_data, src_offset);
+  if (q1_data->is_mapping_q1_data)
+    tensor = q1_data->contravariant.begin();
   else
     {
-      const InternalData *data_ptr = dynamic_cast<const InternalData *> (q1_data_ptr);
-      Assert(data_ptr!=0, ExcInternalError());
-      const InternalData &data=*data_ptr;
+      const InternalData *data = dynamic_cast<const InternalData *> (q1_data);
+      Assert(data!=0, ExcInternalError());
 
-      if (data.use_mapping_q1_on_current_cell)
-       contravariant_transformation(dst, src, data.mapping_q1_data, src_offset);
+      if (data->use_mapping_q1_on_current_cell)
+       tensor = data->mapping_q1_data.contravariant.begin();
       else
-       contravariant_transformation(dst, src, data, src_offset);    
+       tensor = data->contravariant.begin();    
     }
-}
-
-
-template <int dim>
-void
-MappingQ<dim>::transform_contravariant (typename std::vector<Point<dim> >       &dst,
-                                       const typename std::vector<Point<dim> > &src,
-                                       const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                       const unsigned int src_offset) const
-{
-  const typename MappingQ1<dim>::InternalData *q1_data_ptr =
-    dynamic_cast<const typename MappingQ1<dim>::InternalData *> (&mapping_data);
-  Assert(q1_data_ptr!=0, ExcInternalError());
-  const typename MappingQ1<dim>::InternalData &q1_data=*q1_data_ptr;
-
-  if (q1_data.is_mapping_q1_data)
-    contravariant_transformation(dst, src, q1_data, src_offset);
-  else
+    while (begin!=end)
     {
-      const InternalData *data_ptr = dynamic_cast<const InternalData *> (q1_data_ptr);
-      Assert(data_ptr!=0, ExcInternalError());
-      const InternalData &data=*data_ptr;
-
-      if (data.use_mapping_q1_on_current_cell)
-       contravariant_transformation(dst, src, data.mapping_q1_data, src_offset);
-      else
-       contravariant_transformation(dst, src, data, src_offset);    
-    }  
+      contract (*(begin++), *(tensor++), *(src++));
+    }
 }
 
 
index fce9cbfb5c557f7d1669315025f1a4fea4d8557d..54973f58a2e054b8b2789b7a2d267ef79c430457 100644 (file)
@@ -602,9 +602,10 @@ MappingQ1<dim>::compute_fill_face (const typename DoFHandler<dim>::cell_iterator
                ExcDimensionMismatch(JxW_values.size(), npts));
       
       
-      transform_contravariant(data.aux[0],
-                             data.unit_tangentials[face_no],
-                             data, 0);
+      transform_contravariant(data.aux[0].begin(),
+                             data.aux[0].end(),
+                             data.unit_tangentials[face_no].begin(),
+                             data);
 
       typename std::vector<Tensor<1,dim> >::iterator
        result = boundary_forms.begin();
@@ -624,10 +625,11 @@ MappingQ1<dim>::compute_fill_face (const typename DoFHandler<dim>::cell_iterator
 
          case 3:
          {
-           transform_contravariant(data.aux[1],
+           transform_contravariant(data.aux[1].begin(),
+                                   data.aux[1].end(),
                                    data.unit_tangentials[
-                                     face_no+GeometryInfo<dim>::faces_per_cell],
-                                   data, 0);
+                                     face_no+GeometryInfo<dim>::faces_per_cell].begin(),
+                                   data);
            typename std::vector<Tensor<1,dim> >::const_iterator
              tang2 = data.aux[1].begin();
            for (;result != end; ++result, ++tang1, ++tang2)
@@ -777,47 +779,54 @@ MappingQ1<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator &,
 
 template <int dim>
 void
-MappingQ1<dim>::transform_covariant (std::vector<Tensor<1,dim> >       &dst,
-                                    const std::vector<Tensor<1,dim> > &src,
-                                    const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                    const unsigned int src_offset) const
+MappingQ1<dim>::transform_covariant (
+  Tensor<1,dim>* begin,
+  const Tensor<1,dim>* end,
+  const Tensor<1,dim>* src,
+  const typename Mapping<dim>::InternalDataBase &mapping_data) const
 {
-  covariant_transformation(dst, src, mapping_data, src_offset);
-}
+  const InternalData *data_ptr = dynamic_cast<const InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  const InternalData &data=*data_ptr;
 
+  Assert (data.update_flags & update_covariant_transformation,
+         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
 
-template <int dim>
-void
-MappingQ1<dim>::transform_covariant (std::vector<Point<dim> >       &dst,
-                                    const std::vector<Point<dim> > &src,
-                                    const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                    const unsigned int src_offset) const
-{
-  covariant_transformation(dst, src, mapping_data, src_offset);
-}
+//TODO: [GK] Can we do a similar assertion?  
+//  Assert (dst.size() == data.contravariant.size(),
+//       ExcDimensionMismatch(dst.size() + src_offset, data.contravariant.size()));
 
-template <int dim>
-void
-MappingQ1<dim>::transform_contravariant (std::vector<Tensor<1,dim> >       &dst,
-                                        const std::vector<Tensor<1,dim> > &src,
-                                        const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                        const unsigned int src_offset) const
-{
-  contravariant_transformation(dst, src, mapping_data, src_offset);
+  typename std::vector<Tensor<2,dim> >::const_iterator tensor = data.covariant.begin();
+  
+  while (begin!=end)
+    {
+      contract (*(begin++), *(src++), *(tensor++));
+    }
 }
 
 
 template <int dim>
 void
-MappingQ1<dim>::transform_contravariant (std::vector<Point<dim> >       &dst,
-                                        const std::vector<Point<dim> > &src,
-                                        const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                        const unsigned int src_offset) const
+MappingQ1<dim>::transform_contravariant (
+  Tensor<1,dim>* begin,
+  const Tensor<1,dim>* end,
+  const Tensor<1,dim>* src,
+  const typename Mapping<dim>::InternalDataBase &mapping_data) const
 {
-  contravariant_transformation(dst, src, mapping_data, src_offset);
-}
+  const InternalData* data_ptr = dynamic_cast<const InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  const InternalData &data=*data_ptr;
 
+  Assert (data.update_flags & update_contravariant_transformation,
+         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
 
+  typename std::vector<Tensor<2,dim> >::const_iterator tensor = data.contravariant.begin();
+  
+  while (begin!=end)
+    {
+      contract (*(begin++), *(tensor++), *(src++));
+    }
+}
 
 template <int dim>
 Point<dim> MappingQ1<dim>::transform_unit_to_real_cell (
@@ -965,103 +974,6 @@ void MappingQ1<dim>::transform_real_to_unit_cell_internal (
     }
 }
 
-
-
-template <int dim>
-template <typename tensor_>
-void
-MappingQ1<dim>::contravariant_transformation (std::vector<tensor_>       &dst,
-                                             const std::vector<tensor_> &src,
-                                             const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                             const unsigned int src_offset) const
-{
-  Assert(tensor_::dimension==dim && tensor_::rank==1, Mapping<dim>::ExcInvalidData());
-  const InternalData* data_ptr = dynamic_cast<const InternalData *> (&mapping_data);
-  Assert(data_ptr!=0, ExcInternalError());
-  const InternalData &data=*data_ptr;
-
-  Assert (data.update_flags & update_contravariant_transformation,
-         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-  
-  Assert (src.size() + src_offset >= data.contravariant.size(),
-         ExcDimensionMismatch(src.size(), data.contravariant.size()));
-  Assert (dst.size() == data.contravariant.size(),
-         ExcDimensionMismatch(dst.size(), data.contravariant.size()));
-
-  typename std::vector<tensor_>::const_iterator vec = src.begin()+src_offset;
-  typename std::vector<Tensor<2,dim> >::const_iterator tensor = data.contravariant.begin();
-  typename std::vector<tensor_>::iterator result = dst.begin();
-  typename std::vector<tensor_>::const_iterator end = dst.end();
-  
-  while (result!=end)
-    {
-      contract (*(result++), *(tensor++), *(vec++));
-    }
-}
-
-
-template <int dim>
-template <typename tensor_>
-void
-MappingQ1<dim>::covariant_transformation (std::vector<tensor_>       &dst,
-                                         const std::vector<tensor_> &src,
-                                         const typename Mapping<dim>::InternalDataBase &mapping_data,
-                                         const unsigned int src_offset) const
-{
-  Assert(tensor_::dimension==dim && tensor_::rank==1, Mapping<dim>::ExcInvalidData());
-  const InternalData *data_ptr = dynamic_cast<const InternalData *> (&mapping_data);
-  Assert(data_ptr!=0, ExcInternalError());
-  const InternalData &data=*data_ptr;
-
-  Assert (data.update_flags & update_covariant_transformation,
-         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-  
-  Assert (src.size() + src_offset >= data.contravariant.size(),
-         ExcDimensionMismatch(src.size() + src_offset, data.contravariant.size()));
-  Assert (dst.size() == data.contravariant.size(),
-         ExcDimensionMismatch(dst.size() + src_offset, data.contravariant.size()));
-
-  typename std::vector<tensor_>::const_iterator vec = src.begin() + src_offset;
-  typename std::vector<Tensor<2,dim> >::const_iterator tensor = data.covariant.begin();
-  typename std::vector<tensor_>::iterator result = dst.begin();
-  const typename std::vector<tensor_>::const_iterator end = dst.end();
-  
-  while (result!=end)
-    {
-      contract (*(result++), *(vec++), *(tensor++));
-    }
-}
-
-
-
 //----------------------------------------------------------------------//
 
 template class MappingQ1<deal_II_dimension>;
-
-template void MappingQ1<deal_II_dimension>::
-contravariant_transformation<Tensor<1,deal_II_dimension> > (
-  std::vector<Tensor<1,deal_II_dimension> >       &dst,
-  const std::vector<Tensor<1,deal_II_dimension> > &src,
-  const Mapping<deal_II_dimension>::InternalDataBase& internal,
-  const unsigned int src_offset) const;
-
-template void MappingQ1<deal_II_dimension>::
-contravariant_transformation<Point<deal_II_dimension> > (
-  std::vector<Point<deal_II_dimension> >       &dst,
-  const std::vector<Point<deal_II_dimension> > &src,
-  const Mapping<deal_II_dimension>::InternalDataBase& internal,
-  const unsigned int src_offset) const;
-
-template void MappingQ1<deal_II_dimension>::
-covariant_transformation<Tensor<1,deal_II_dimension> > (
-  std::vector<Tensor<1,deal_II_dimension> >       &dst,
-  const std::vector<Tensor<1,deal_II_dimension> > &src,
-  const Mapping<deal_II_dimension>::InternalDataBase& internal,
-  const unsigned int src_offset) const;
-
-template void MappingQ1<deal_II_dimension>::
-covariant_transformation<Point<deal_II_dimension> > (
-  std::vector<Point<deal_II_dimension> >       &dst,
-  const std::vector<Point<deal_II_dimension> > &src,
-  const Mapping<deal_II_dimension>::InternalDataBase& internal,
-  const unsigned int src_offset) const;

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.