]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add swap function to Tpetra vector
authorJan Philipp Thiele <thiele@wias-berlin.de>
Sat, 10 Feb 2024 12:44:58 +0000 (13:44 +0100)
committerJan Philipp Thiele <thiele@wias-berlin.de>
Sat, 10 Feb 2024 13:56:51 +0000 (14:56 +0100)
include/deal.II/lac/trilinos_tpetra_vector.h

index 5725daa0a9f4fd0cba0693968a69c189381f7785..d1241583941fececeaec5607a120b5c60c325bcc 100644 (file)
@@ -366,6 +366,24 @@ namespace LinearAlgebra
       reinit(const Vector<Number, MemorySpace> &V,
              const bool                         omit_zeroing_entries = false);
 
+      /**
+       * Swap the contents of this vector and the other vector @p v. One could do
+       * this operation with a temporary variable and copying over the data
+       * elements, but this function is significantly more efficient since it
+       * only swaps the pointers to the data of the two vectors and therefore
+       * does not need to allocate temporary storage and move data around.
+       *
+       * This function is analogous to the @p swap function of all C++
+       * standard containers. Also, there is a global function
+       * <tt>swap(u,v)</tt> that simply calls <tt>u.swap(v)</tt>, again in
+       * analogy to standard functions.
+       *
+       * This function is virtual in order to allow for derived classes to
+       * handle memory separately.
+       */
+      virtual void
+      swap(Vector &v);
+
       /**
        * Extract a range of elements all at once.
        */
@@ -923,6 +941,14 @@ namespace LinearAlgebra
 
     /* ------------------------- Inline functions ---------------------- */
 
+    template <typename Number, typename MemorySpace>
+    inline void
+    swap(Vector<Number, MemorySpace> &u, Vector<Number, MemorySpace> &v)
+    {
+      u.swap(v);
+    }
+
+
     template <typename Number, typename MemorySpace>
     inline bool
     Vector<Number, MemorySpace>::has_ghost_elements() const
@@ -939,6 +965,12 @@ namespace LinearAlgebra
       return compressed;
     }
 
+    template <typename Number, typename MemorySpace>
+    inline void
+    Vector<Number, MemorySpace>::swap(Vector<Number, MemorySpace> &v)
+    {
+      vector.swap(v.vector);
+    }
 
 
     template <typename Number, typename MemorySpace>

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.