]> https://gitweb.dealii.org/ - dealii.git/commitdiff
The size of owned_elemwnts has to match the size of the vector if asking for locally_...
authorDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Fri, 16 Sep 2016 12:37:40 +0000 (14:37 +0200)
committerDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Fri, 16 Sep 2016 13:16:42 +0000 (15:16 +0200)
include/deal.II/lac/trilinos_vector.h
include/deal.II/lac/trilinos_vector_base.h
source/lac/trilinos_vector.cc
source/lac/trilinos_vector_base.cc
tests/mpi/constraint_matrix_trilinos_bug.with_trilinos=true.mpirun=10.debug.output
tests/mpi/constraint_matrix_trilinos_bug.with_trilinos=true.mpirun=4.debug.output

index 6cb27c126bfbf34a489698bcd96616fd65dcb589..9196b94e66838964e944b8bad2e5143ec7df63b3 100644 (file)
@@ -513,7 +513,7 @@ namespace TrilinosWrappers
        *
        * In case the provided IndexSet forms an overlapping partitioning,
        * it it not clear which elements are owned by which process and
-       * locally_owned_elements will return an IndexSet of size zero.
+       * locally_owned_elements() will return an IndexSet of size zero.
        *
        * @see
        * @ref GlossGhostedVector "vectors with ghost elements"
index a37bbe961312f5f6e9f0f5d76ad91297e2da3ac4..d670f272dca437b41f06d3e87b73177504060f50 100644 (file)
@@ -1087,6 +1087,10 @@ namespace TrilinosWrappers
   IndexSet
   VectorBase::locally_owned_elements() const
   {
+    Assert(owned_elements.size()==size(),
+           ExcMessage("The locally owned elements have not been properly initialized!"
+                      " This happens for example if this object has been initialized"
+                      " with exactly one overlapping IndexSet."));
     return owned_elements;
   }
 
@@ -1204,7 +1208,7 @@ namespace TrilinosWrappers
     if (v.nonlocal_vector.get() != 0)
       nonlocal_vector.reset(new Epetra_MultiVector(v.nonlocal_vector->Map(), 1));
 
-    owned_elements = v.locally_owned_elements();
+    owned_elements = v.owned_elements;
   }
 
 
index 836f8c2b2061ca514f880c3715820d3277cd1e1e..0af4209e7f29939e860d6b515a940fd9396f0824 100644 (file)
@@ -122,7 +122,7 @@ namespace TrilinosWrappers
       last_action = Zero;
       vector.reset (new Epetra_FEVector(*v.vector));
       has_ghosts = v.has_ghosts;
-      owned_elements = v.locally_owned_elements();
+      owned_elements = v.owned_elements;
     }
 
 
@@ -318,7 +318,7 @@ namespace TrilinosWrappers
               vector.reset (new Epetra_FEVector(v.vector->Map()));
               has_ghosts = v.has_ghosts;
               last_action = Zero;
-              owned_elements = v.locally_owned_elements();
+              owned_elements = v.owned_elements;
             }
           else if (omit_zeroing_entries == false)
             {
@@ -395,7 +395,7 @@ namespace TrilinosWrappers
             my_global_elements(v.block(block).vector_partitioner());
           for (size_type i=0; i<v.block(block).local_size(); ++i)
             global_ids[added_elements++] = glob_elements[i] + block_offset;
-          owned_elements.add_indices(v.block(block).locally_owned_elements(),
+          owned_elements.add_indices(v.block(block).owned_elements,
                                      block_offset);
           block_offset += v.block(block).size();
         }
@@ -532,7 +532,7 @@ namespace TrilinosWrappers
           vector.reset (new Epetra_FEVector(*v.vector));
           last_action = Zero;
           has_ghosts = v.has_ghosts;
-          owned_elements = v.locally_owned_elements();
+          owned_elements = v.owned_elements;
         }
 
       if (v.nonlocal_vector.get() != 0)
@@ -732,7 +732,7 @@ namespace TrilinosWrappers
                                  v.vector->Map().IndexBase(),
                                  v.vector->Comm());
             vector.reset (new Epetra_FEVector(map));
-            owned_elements = v.locally_owned_elements();
+            owned_elements = v.owned_elements;
           }
         else if (omit_zeroing_entries)
           {
@@ -806,7 +806,7 @@ namespace TrilinosWrappers
                              v.vector->Map().IndexBase(),
                              v.vector->Comm());
         vector.reset (new Epetra_FEVector(map));
-        owned_elements = v.locally_owned_elements();
+        owned_elements = v.owned_elements;
       }
 
     const int ierr = vector->Update(1.0, *v.vector, 0.0);
index 7b69d1c7f1ff2b1813fc86f913b55ccfd0cb8b83..1f5d8d50f0233428a77a6635b25282aecba99e9d 100644 (file)
@@ -141,7 +141,7 @@ namespace TrilinosWrappers
         last_action = Zero;
         vector.reset (new Epetra_FEVector(*v.vector));
         has_ghosts = v.has_ghosts;
-        owned_elements = v.locally_owned_elements();
+        owned_elements = v.owned_elements;
       }
     else
       {
index 1a79b30795399c06c0199128487c0ed1a883e24b..120d14c2b59989189418b9fb912c9ee8e552d101 100644 (file)
@@ -1,2 +1,2 @@
 
-DEAL:0:2d::Exception: ExcGhostsPresent()
+DEAL:0:2d::Exception: ExcMessage("The locally owned elements have not been properly initialized!" " This happens for example if this object has been initialized" " with exactly one overlapping IndexSet.")
index 1a79b30795399c06c0199128487c0ed1a883e24b..120d14c2b59989189418b9fb912c9ee8e552d101 100644 (file)
@@ -1,2 +1,2 @@
 
-DEAL:0:2d::Exception: ExcGhostsPresent()
+DEAL:0:2d::Exception: ExcMessage("The locally owned elements have not been properly initialized!" " This happens for example if this object has been initialized" " with exactly one overlapping IndexSet.")

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.