]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Instantiate LinearAlgebra::Vector.
authorBruno Turcksin <bruno.turcksin@gmail.com>
Fri, 9 Sep 2016 13:56:07 +0000 (09:56 -0400)
committerBruno Turcksin <bruno.turcksin@gmail.com>
Thu, 15 Sep 2016 12:29:18 +0000 (08:29 -0400)
32 files changed:
cmake/config/template-arguments.in
include/deal.II/lac/constraint_matrix.templates.h
include/deal.II/lac/la_parallel_vector.h
include/deal.II/lac/la_vector.h
include/deal.II/lac/la_vector.templates.h
include/deal.II/lac/trilinos_epetra_vector.h
include/deal.II/lac/vector_space_vector.h
include/deal.II/multigrid/multigrid.templates.h
include/deal.II/numerics/error_estimator.templates.h
include/deal.II/numerics/vector_tools.templates.h
source/algorithms/operator.cc
source/dofs/dof_accessor_get.cc
source/dofs/dof_accessor_set.cc
source/fe/fe_tools_interpolate.cc
source/fe/fe_values.cc
source/fe/mapping_fe_field.cc
source/fe/mapping_q1_eulerian.cc
source/fe/mapping_q_eulerian.cc
source/lac/constraint_matrix.cc
source/lac/solver.cc
source/lac/trilinos_epetra_vector.cc
source/lac/vector_memory.cc
source/meshworker/mesh_worker_vector_selector.cc
source/multigrid/mg_base.cc
source/multigrid/multigrid.cc
source/numerics/data_out_dof_data.cc
source/numerics/derivative_approximation.cc
source/numerics/dof_output_operator.cc
source/numerics/error_estimator_1d.cc
source/numerics/fe_field_function.cc
source/numerics/point_value_history.cc
source/numerics/solution_transfer.cc

index a9d69a2c2a96131f70b4ce0bc9ab28f6e64fa879..f2f37a3ecdb125b329e50636e1424c97393fa648 100644 (file)
@@ -23,6 +23,9 @@ SERIAL_VECTORS := { Vector<double>;
                     BlockVector<double>;
                     BlockVector<float>;
 
+                    LinearAlgebra::Vector<double>;
+                    LinearAlgebra::Vector<float> ;
+
                     LinearAlgebra::distributed::Vector<double>;
                     LinearAlgebra::distributed::Vector<float> ;
 
@@ -46,6 +49,9 @@ REAL_SERIAL_VECTORS := { Vector<double>;
                     BlockVector<double>;
                     BlockVector<float>;
 
+                    LinearAlgebra::Vector<double>;
+                    LinearAlgebra::Vector<float> ;
+
                     LinearAlgebra::distributed::Vector<double>;
                     LinearAlgebra::distributed::Vector<float> ;
 
index 4d9da589f85a8d6408243e51b25ae30a66b6de12..8c20a74d700c7dd651a17fb10d2fe1dc8af0440e 100644 (file)
@@ -26,6 +26,7 @@
 #include <deal.II/lac/sparse_matrix.h>
 #include <deal.II/lac/block_sparsity_pattern.h>
 #include <deal.II/lac/block_sparse_matrix.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_parallel_vector.h>
@@ -851,7 +852,12 @@ ConstraintMatrix::distribute (VectorType &vec) const
   // call compress() finally. the first case here is for the complicated case,
   // the last else is for the simple case (sequential vector)
   const IndexSet vec_owned_elements = vec.locally_owned_elements();
-  if (vec.supports_distributed_data == true)
+  if ((typeid(vec) != typeid(Vector<double>)) &&
+      (typeid(vec) != typeid(Vector<float>)) &&
+      (typeid(vec) != typeid(BlockVector<double>)) &&
+      (typeid(vec) != typeid(BlockVector<float>)) &&
+      (typeid(vec) != typeid(LinearAlgebra::Vector<double>)) &&
+      (typeid(vec) != typeid(LinearAlgebra::Vector<float>)))
     {
       // This processor owns only part of the vector. one may think that
       // every processor should be able to simply communicate those elements
index 8343077c6da6b1729c5bbac75552241e5bd7c8eb..6c1c2a1582354f918f2816506efd94f2a110b3a1 100644 (file)
@@ -890,7 +890,7 @@ namespace LinearAlgebra
       /**
        * Compute the mean value of all the entries in the vector.
        */
-      Number mean_value () const;
+      virtual Number mean_value () const;
 
       /**
        * $l_p$-norm of the vector. The pth root of the sum of the pth powers
index 5d82fcbbade6559eb83206d70837af187545b438..4d6b9830395ff341f4aeab64ce749a6b1485714d 100644 (file)
@@ -54,6 +54,7 @@ namespace LinearAlgebra
   {
   public:
     typedef types::global_dof_index size_type;
+    typedef typename ReadWriteVector<Number>::value_type value_type;
 
     /**
      * Constructor. Create a vector of dimension zero.
@@ -177,6 +178,11 @@ namespace LinearAlgebra
      */
     virtual void equ(const Number a, const VectorSpaceVector<Number> &V);
 
+    /**
+     * Return the mean value of the element of this vector.
+     */
+    virtual typename VectorSpaceVector<Number>::value_type mean_value() const;
+
     /**
      * Return the l<sub>1</sub> norm of the vector (i.e., the sum of the
      * absolute values of all entries).
index 1166458b0512e9d0ca48f98c466c9d319e55f0d9..d109eb4e337d4655640da5fabeb3eac673d2c019 100644 (file)
@@ -282,6 +282,21 @@ namespace LinearAlgebra
 
 
 
+  template <typename Number>
+  typename VectorSpaceVector<Number>::value_type Vector<Number>::mean_value() const
+  {
+    Assert (this->size(), ExcEmptyObject());
+
+    typedef typename VectorSpaceVector<Number>::real_type real_type;
+    value_type sum;
+    internal::MeanValue<Number> mean_value(this->val);
+    internal::parallel_reduce(mean_value, this->size(), sum, this->thread_loop_partitioner);
+
+    return sum/static_cast<real_type>(this->size());
+  }
+
+
+
   template <typename Number>
   typename VectorSpaceVector<Number>::real_type Vector<Number>::l1_norm() const
   {
index ac40ce846f0080cc98bbe3ad3232c271a1b02625..f8239aae579f775ee32346ae5ae30224e8f95fed 100644 (file)
@@ -168,6 +168,10 @@ namespace LinearAlgebra
        */
       virtual void equ(const double a, const VectorSpaceVector<double> &V);
 
+      /**
+       * Return the mean value of the element of this vector.
+       */
+      virtual double mean_value() const;
 
       /**
        * Return the l<sub>1</sub> norm of the vector (i.e., the sum of the
index de05d3e1e4f32e5d66ae72da8c655867063eb684..491104467f46c00f7cac9d0c6e0be50ca659c996 100644 (file)
@@ -128,6 +128,11 @@ namespace LinearAlgebra
      */
     virtual void equ(const Number a, const VectorSpaceVector<Number> &V) = 0;
 
+    /**
+     * Return the mean value of the element of this vector.
+     */
+    virtual value_type mean_value() const = 0;
+
     /**
      * Return the l<sub>1</sub> norm of the vector (i.e., the sum of the
      * absolute values of all entries among all processors).
@@ -166,6 +171,11 @@ namespace LinearAlgebra
                                const VectorSpaceVector<Number> &V,
                                const VectorSpaceVector<Number> &W) = 0;
 
+    /**
+     * This function does nothing and only exists for backward compatibility.
+     */
+    virtual void compress(VectorOperation::values) {}
+
     /**
      * Return the global size of the vector, equal to the sum of the number of
      * locally owned indices among all processors.
index e4f3befa504a8cd9637749d06fcdfcef3aecc9d4..0b9a562c01df60f87352b15b44a9a1f7d2420418 100644 (file)
@@ -279,7 +279,8 @@ Multigrid<VectorType>::level_step(const unsigned int level,
   // from two levels above in
   // defect2. This is subtracted from
   // the original defect.
-  t[level].equ(-1.,defect2[level],1.,defect[level]);
+  t[level].equ(-1.,defect2[level]);
+  t[level] += defect[level];
 
   if (debug>2)
     deallog << cychar << "-cycle defect norm    " << t[level].l2_norm()
@@ -357,7 +358,8 @@ Multigrid<VectorType>::level_step(const unsigned int level,
   if (edge_up != 0)
     edge_up->Tvmult(level, t[level], solution[level-1]);
 
-  t[level].sadd(-1.,-1.,defect2[level],1.,defect[level]);
+  t[level].sadd(-1.,-1.,defect2[level]);
+  t[level] += defect[level];
 
   if (debug>2)
     deallog << cychar << "-cycle  Defect norm    " << t[level].l2_norm()
index 3bb11b7d2011f41a81cb0ac068b7dbb37944f76d..e1d14072b9968b3233a657b8cb8c7560043d902a 100644 (file)
@@ -19,6 +19,7 @@
 #include <deal.II/base/quadrature_lib.h>
 #include <deal.II/base/work_stream.h>
 #include <deal.II/lac/vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/block_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
index 06dcfac1a14f76e1b2c1aaf4eaccff9dd0f37daa..eae1a44941277021a0866b62cbce11deb6911d6c 100644 (file)
@@ -23,6 +23,7 @@
 #include <deal.II/base/qprojector.h>
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
@@ -68,6 +69,7 @@
 #include <limits>
 #include <set>
 #include <list>
+#include <typeinfo>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -7220,7 +7222,13 @@ namespace VectorTools
     else
       {
         // This function is not implemented for distributed vectors.
-        Assert(!v.supports_distributed_data, ExcNotImplemented());
+        Assert(typeid(v) == typeid(Vector<double>) ||
+               typeid(v) == typeid(Vector<float>) ||
+               typeid(v) == typeid(BlockVector<double>) ||
+               typeid(v) == typeid(BlockVector<float>) ||
+               typeid(v) == typeid(LinearAlgebra::Vector<double>) ||
+               typeid(v) == typeid(LinearAlgebra::Vector<float>),
+               ExcNotImplemented());
 
         const unsigned int n = v.size();
 
index c147f2331c449329df8b5d53f158e77436f2e09c..9b6531b9875b069a3b1e9b4509a0bd1ac16fc0ac 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 2bc7ebe4bd8a12dc802e29612f6ad68c9b53d178..69c1046eec6ed6d0492579ee49b99ddf3ffc62cc 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 1748a5ffcf39ed43e7932af1cdae6338e5377b76..109907a6607f5e858f58a89e02809fbf7e48197d 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index f95e4e2a05ddcac39e6976a8e089a12addbc5031..170cd029d858b437e4a0442f1fad288d93c1498c 100644 (file)
@@ -19,6 +19,7 @@
 #include <deal.II/base/thread_management.h>
 #include <deal.II/base/utilities.h>
 #include <deal.II/lac/vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/block_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
@@ -615,7 +616,7 @@ namespace FETools
                                      OutVector &u1_difference)
       {
         back_interpolate(dof1, constraints1, u1, dof2, constraints2, u1_difference);
-        u1_difference.sadd(-1, u1);
+        u1_difference.sadd(-1., 1., u1);
       }
 
       // special version for Trilinos
index 5c5f0d82387b6faf0120640b684aa6ce6f4da24f..321916430ee7545257559fd932ae93f1e4d95844 100644 (file)
@@ -20,6 +20,7 @@
 #include <deal.II/base/std_cxx11/unique_ptr.h>
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 9f0c632616ad85f02de5277bca81def2613b4df6..754c144111ea318a98786a93bc88b5007d7b4f3b 100644 (file)
@@ -24,6 +24,7 @@
 #include <deal.II/lac/full_matrix.h>
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/parallel_vector.h>
 #include <deal.II/lac/parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 927edbcd10afa67babe1d8d7d0b9c7d1b7325cef..939cee24fc99ac786726e36b431672938b05790a 100644 (file)
@@ -17,8 +17,9 @@
 #include <deal.II/fe/mapping_q1_eulerian.h>
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
-#include <deal.II/lac/parallel_vector.h>
-#include <deal.II/lac/parallel_block_vector.h>
+#include <deal.II/lac/la_vector.h>
+#include <deal.II/lac/la_parallel_vector.h>
+#include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
 #include <deal.II/lac/petsc_block_vector.h>
 #include <deal.II/lac/trilinos_vector.h>
index 0e7ffc820e1bd622002f9deaec4d964c98f943dc..3b014ff33686cc7907002ef41f061c24c8e2737d 100644 (file)
@@ -17,6 +17,7 @@
 #include <deal.II/base/quadrature_lib.h>
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/parallel_vector.h>
 #include <deal.II/lac/parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 6a5f5a3af1f928999b6913c45d3063ed9eefe065..db04b3a4d2eff53d280110063e23521109cb1af4 100644 (file)
@@ -23,6 +23,7 @@
 #include <deal.II/lac/sparse_matrix_ez.h>
 #include <deal.II/lac/chunk_sparse_matrix.h>
 #include <deal.II/lac/block_sparse_matrix_ez.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index d7d803fba8ff750afc831244853a461620f3f6fb..fddc9db18d918db048baeafd002065840f5cd1e9 100644 (file)
@@ -18,6 +18,7 @@
 #include <deal.II/lac/vector_memory.h>
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/petsc_vector.h>
 #include <deal.II/lac/petsc_block_vector.h>
 #include <deal.II/lac/trilinos_vector.h>
index 58d3bae0f176622bbf7e41207112c4e60f50386d..8998d7c59d08d630dad9946cd78c56beaa767ad1 100644 (file)
@@ -352,6 +352,19 @@ namespace LinearAlgebra
 
 
 
+    double Vector::mean_value() const
+    {
+      double mean_value(0.);
+
+      int ierr = vector->MeanValue(&mean_value);
+      Assert(ierr==0, ExcTrilinosError(ierr));
+      (void) ierr;
+
+      return mean_value;
+    }
+
+
+
     double Vector::l1_norm() const
     {
       double norm(0.);
index 5330c0365e2458e4b09d02286b069dffb425936a..097db04807a387594eec9f498ca5ffe7f66b6dc8 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 111572ef517ca0fbee68c9d4ca1fa3fc30f5ab37..c230085686fb5c8df3b82ac01929b3c82440432a 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 64c3f71cbc53e00bb49fc00affdc356f5fd32273..a2a0d7354c2b0c032b741e37209a7b5723992e06 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 33658dcee147d7e79734c3ebc8154a32f58ac54c..dd69a7a25d9c4e9194c22f8e084802771446106c 100644 (file)
@@ -15,6 +15,7 @@
 
 
 #include <deal.II/lac/vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 6f424b6ec21f60b43aea6ffe1a90f8eabd52119d..c28967aeac5c5dd73e6f46e027d9bfb5e9329dbe 100644 (file)
@@ -18,6 +18,7 @@
 #include <deal.II/base/memory_consumption.h>
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 3b32bc1fbfa3ed81fff7702be35b84f443ad07d7..a7c0a00004f8902dc5bc3220f298f56c65aa5794 100644 (file)
@@ -17,6 +17,7 @@
 #include <deal.II/base/work_stream.h>
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index ce11b428a6cde7f153f3c5de219c5830ff424649..4905f1302e0740e846bf00cf1a66ccb7e4a3b6b6 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 88e335fcd942df5aa722996e2a3d350476de8dca..033573ce552784e64e5b381d53297f864d22ddaa 100644 (file)
@@ -18,6 +18,7 @@
 #include <deal.II/base/quadrature_lib.h>
 #include <deal.II/base/work_stream.h>
 #include <deal.II/lac/vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/block_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
index 3117a90d8c7804992d4d61d87701cccf9bf38d96..25b045206eecd90431232083a42e7506c0d9d1e5 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index ee6cf4ad2618b6a4ff19e8ecd09b316b6f6bf6eb..9af330e56fbe10b1001b7bb5697672cacfe702ce 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <deal.II/lac/vector.h>
 #include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/la_parallel_block_vector.h>
 #include <deal.II/lac/petsc_vector.h>
index 77deb0f9eb445e6f48e5fdb2729959ef24cdc885..a07d3df637a9dc99686c6f57f8761c7dc6876ba8 100644 (file)
@@ -22,6 +22,7 @@
 #include <deal.II/dofs/dof_accessor.h>
 #include <deal.II/fe/fe.h>
 #include <deal.II/lac/vector.h>
+#include <deal.II/lac/la_vector.h>
 #include <deal.II/lac/la_parallel_vector.h>
 #include <deal.II/lac/petsc_vector.h>
 #include <deal.II/lac/trilinos_vector.h>

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.