]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
VectorTools::interpolate with vector templates
authorguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 15 Oct 2001 07:09:18 +0000 (07:09 +0000)
committerguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 15 Oct 2001 07:09:18 +0000 (07:09 +0000)
git-svn-id: https://svn.dealii.org/trunk@5146 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/deal.II/include/numerics/vectors.h
deal.II/deal.II/source/numerics/vectors.cc

index 4fcf3abe4ffe34b1ce69232c6e20773ec72748ed..64401c6164ff8358cbaf4d9eee4497a2d0a32e9b 100644 (file)
@@ -325,21 +325,21 @@ class VectorTools
                                      * See the general documentation of this
                                      * class for further information.
                                      */
-    template <int dim>
+    template <int dim, class VECTOR>
     static void interpolate (const Mapping<dim>    &mapping,
                             const DoFHandler<dim> &dof,
                             const Function<dim>   &function,
-                            Vector<double>        &vec);
+                            VECTOR                &vec);
     
                                     /**
                                      * Calls the @p{interpolate}
                                      * function, see above, with
                                      * @p{mapping=MappingQ1<dim>()}.
                                      */
-    template <int dim>
-    static void interpolate (const DoFHandler<dim>    &dof,
-                            const Function<dim>      &function,
-                            Vector<double>           &vec);
+    template <int dim, class VECTOR>
+    static void interpolate (const DoFHandler<dim> &dof,
+                            const Function<dim>   &function,
+                            VECTOR                &vec);
 
                                     /**
                                      * Interpolate different finite
@@ -361,12 +361,12 @@ class VectorTools
                                      * make the result continuous
                                      * again.
                                      */
-    template <int dim>
+    template <int dim, class InVector, class OutVector>
     static void interpolate (const DoFHandler<dim>    &dof_1,
                             const DoFHandler<dim>    &dof_2,
                             const FullMatrix<double> &transfer,
-                            const Vector<double>     &data_1,
-                            Vector<double>           &data_2);
+                            const InVector           &data_1,
+                            OutVector                &data_2);
                          
                                     /**
                                      * Compute the projection of
index b859fea894a46c3aebd3c3f9996d6ae6fb36ae93..b7e7a5a954d7c48e2f8f97a2d3c2bdc53b4ca28c 100644 (file)
@@ -24,6 +24,7 @@
 #include <numerics/matrices.h>
 #include <dofs/dof_tools.h>
 #include <lac/vector.h>
+#include <lac/block_vector.h>
 #include <lac/sparse_matrix.h>
 #include <lac/precondition.h>
 #include <lac/solver_cg.h>
@@ -35,6 +36,7 @@
 #include <vector>
 #include <cmath>
 
+//TODO:[GK] Move templates containing vector arguments to vectors.templates.h
 
 // if necessary try to work around a bug in the IBM xlC compiler
 #ifdef XLC_WORK_AROUND_STD_BUG
@@ -60,11 +62,11 @@ inline double sqr_point (const Tensor<1,dim> &p)
 
 
 
-template <int dim>
+template <int dim, class VECTOR>
 void VectorTools::interpolate (const Mapping<dim>    &mapping,
                               const DoFHandler<dim> &dof,
                               const Function<dim>   &function,
-                              Vector<double>        &vec)
+                              VECTOR                &vec)
 {
   Assert (dof.get_fe().n_components() == function.n_components,
          ExcComponentMismatch());
@@ -221,10 +223,10 @@ void VectorTools::interpolate (const Mapping<dim>    &mapping,
 }
 
 
-template <int dim>
+template <int dim, class VECTOR>
 void VectorTools::interpolate (const DoFHandler<dim> &dof,
                               const Function<dim>   &function,
-                              Vector<double>        &vec)
+                              VECTOR                &vec)
 {
   Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
   static const MappingQ1<dim> mapping;
@@ -234,12 +236,13 @@ void VectorTools::interpolate (const DoFHandler<dim> &dof,
 
 
 
-template <int dim> void
+template <int dim, class InVector, class OutVector>
+void
 VectorTools::interpolate (const DoFHandler<dim>           &dof_1,
                          const DoFHandler<dim>           &dof_2,
                          const FullMatrix<double>        &transfer,
-                         const Vector<double>            &data_1,
-                         Vector<double>                  &data_2)
+                         const InVector                  &data_1,
+                         OutVector                       &data_2)
 {
   Vector<double> cell_data_1(dof_1.get_fe().dofs_per_cell);
   Vector<double> cell_data_2(dof_2.get_fe().dofs_per_cell);
@@ -1460,20 +1463,55 @@ VectorTools::compute_mean_value (const DoFHandler<dim> &dof,
 
 // explicit instantiations
 template
-void VectorTools::interpolate (const Mapping<deal_II_dimension>    &,
-                              const DoFHandler<deal_II_dimension> &,
-                              const Function<deal_II_dimension>   &,
-                              Vector<double>                      &);
+void VectorTools::interpolate (const Mapping<deal_II_dimension>&,
+                              const DoFHandler<deal_II_dimension>&,
+                              const Function<deal_II_dimension>&,
+                              Vector<double>&);
+template
+void VectorTools::interpolate (const DoFHandler<deal_II_dimension>&,
+                              const Function<deal_II_dimension>&,
+                              Vector<double>&);
+template
+void VectorTools::interpolate (const Mapping<deal_II_dimension>&,
+                              const DoFHandler<deal_II_dimension>&,
+                              const Function<deal_II_dimension>&,
+                              Vector<float>&);
+template
+void VectorTools::interpolate (const DoFHandler<deal_II_dimension>&,
+                              const Function<deal_II_dimension>&,
+                              Vector<float>&);
 template
-void VectorTools::interpolate (const DoFHandler<deal_II_dimension> &,
-                              const Function<deal_II_dimension>   &,
-                              Vector<double>                      &);
+void VectorTools::interpolate (const Mapping<deal_II_dimension>&,
+                              const DoFHandler<deal_II_dimension>&,
+                              const Function<deal_II_dimension>&,
+                              BlockVector<double>&);
 template
-void VectorTools::interpolate(const DoFHandler<deal_II_dimension> &,
-                             const DoFHandler<deal_II_dimension> &,
-                             const FullMatrix<double> &,
-                             const Vector<double>     &,
-                             Vector<double>           &);
+void VectorTools::interpolate (const DoFHandler<deal_II_dimension>&,
+                              const Function<deal_II_dimension>&,
+                              BlockVector<double>&);
+template
+void VectorTools::interpolate (const Mapping<deal_II_dimension>&,
+                              const DoFHandler<deal_II_dimension>&,
+                              const Function<deal_II_dimension>&,
+                              BlockVector<float>&);
+template
+void VectorTools::interpolate (const DoFHandler<deal_II_dimension>&,
+                              const Function<deal_II_dimension>&,
+                              BlockVector<float>&);
+
+template
+void VectorTools::interpolate(const DoFHandler<deal_II_dimension>&,
+                             const DoFHandler<deal_II_dimension>&,
+                             const FullMatrix<double>&,
+                             const Vector<double>&,
+                             Vector<double>&);
+template
+void VectorTools::interpolate(const DoFHandler<deal_II_dimension>&,
+                             const DoFHandler<deal_II_dimension>&,
+                             const FullMatrix<double>&,
+                             const BlockVector<double>&,
+                             BlockVector<double>&);
+
 template
 void VectorTools::project (const DoFHandler<deal_II_dimension>   &,
                           const ConstraintMatrix                &,

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.