]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Provide inlined fast code path for Vector::reinit(Vector&) 14252/head
authorMartin Kronbichler <martin.kronbichler@uni-a.de>
Mon, 12 Sep 2022 07:06:14 +0000 (09:06 +0200)
committerMartin Kronbichler <martin.kronbichler@uni-a.de>
Mon, 12 Sep 2022 07:58:06 +0000 (09:58 +0200)
include/deal.II/lac/vector.h
include/deal.II/lac/vector.templates.h
source/lac/vector.cc
source/lac/vector.inst.in

index 2e43459f2a4fe96f4cf59e54aae8956fa6f5a88f..c049ce3898e2f41f33e340f81a5683888877840e 100644 (file)
@@ -1354,6 +1354,23 @@ Vector<Number>::update_ghost_values() const
 
 
 
+template <typename Number>
+template <typename Number2>
+inline void
+Vector<Number>::reinit(const Vector<Number2> &v,
+                       const bool             omit_zeroing_entries)
+{
+  // go to actual reinit functions in case we need to change something with
+  // the vector, else there is nothing to be done
+  if (!omit_zeroing_entries || size() != v.size())
+    {
+      do_reinit(v.size(), omit_zeroing_entries, false);
+      thread_loop_partitioner = v.thread_loop_partitioner;
+    }
+}
+
+
+
 // Moved from vector.templates.h as an inline function by Luca Heltai
 // on 2009/04/12 to prevent strange compiling errors, after making
 // swap virtual.
index 98b24bd7d0af242d4532ce19958023f6cad210a0..850603b3172234def0eb6e5af6ef76bdffdd4d4f 100644 (file)
@@ -242,18 +242,6 @@ Vector<Number>::grow_or_shrink(const size_type n)
 
 
 
-template <typename Number>
-template <typename Number2>
-void
-Vector<Number>::reinit(const Vector<Number2> &v,
-                       const bool             omit_zeroing_entries)
-{
-  do_reinit(v.size(), omit_zeroing_entries, false);
-  thread_loop_partitioner = v.thread_loop_partitioner;
-}
-
-
-
 template <typename Number>
 bool
 Vector<Number>::all_zero() const
index 09eb1facd99b5e586930f62c9ca0f3615808b8e9..fe893dcba4d16d52603dd828329c4c4f35e99c88 100644 (file)
@@ -33,9 +33,6 @@ Vector<double>::operator=<int>(const dealii::Vector<int> &);
 template bool
 Vector<int>::operator==<int>(dealii::Vector<int> const &) const;
 
-template void
-Vector<int>::reinit<double>(const Vector<double> &, const bool);
-
 // instantiate for long double manually because we use it in a few places:
 template class Vector<long double>;
 template long double
index 173d5f5ade5af2a50d81420631ae24f1007c48eb..23e5b47facf75f77775573ff70bfe233738c1630 100644 (file)
@@ -24,18 +24,15 @@ for (S1, S2 : REAL_SCALARS)
   {
     template bool Vector<S1>::operator==<S2>(const Vector<S2> &) const;
     template S1 Vector<S1>::operator*<S2>(const Vector<S2> &) const;
-    template void Vector<S1>::reinit<S2>(const Vector<S2> &, const bool);
   }
 
 for (S1, S2 : COMPLEX_SCALARS)
   {
     template bool Vector<S1>::operator==<S2>(const Vector<S2> &) const;
     template S1 Vector<S1>::operator*<S2>(const Vector<S2> &) const;
-    template void Vector<S1>::reinit<S2>(const Vector<S2> &, const bool);
   }
 
 for (S1 : COMPLEX_SCALARS; S2 : REAL_SCALARS)
   {
     template Vector<S1> &Vector<S1>::operator=<S2>(const Vector<S2> &);
-    template void Vector<S1>::reinit<S2>(const Vector<S2> &, const bool);
   }

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.