]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Introduce TrilinosWrappers::SparsityPattern::row_is_stored_locally 6968/head
authorDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Wed, 25 Jul 2018 09:46:25 +0000 (11:46 +0200)
committerDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Wed, 25 Jul 2018 09:46:25 +0000 (11:46 +0200)
include/deal.II/lac/trilinos_sparsity_pattern.h
source/lac/trilinos_sparsity_pattern.cc

index 0dc3bb4cbb911ae390e1e0c84e9c8a8073a8ee30..b93709d4e33196782873f29b7cf184e5a9654a41 100644 (file)
@@ -943,6 +943,13 @@ namespace TrilinosWrappers
     bool
     exists(const size_type i, const size_type j) const;
 
+    /**
+     * Return whether a given @p row is stored in the current object
+     * on this process.
+     */
+    bool
+    row_is_stored_locally(const size_type i) const;
+
     /**
      * Determine an estimate for the memory consumption (in bytes) of this
      * object. Currently not implemented for this class.
@@ -1230,11 +1237,6 @@ namespace TrilinosWrappers
      */
     std::unique_ptr<Epetra_CrsGraph> nonlocal_graph;
 
-    /**
-     * The set of locally owned rows.
-     */
-    IndexSet locally_owned_rows;
-
     friend class TrilinosWrappers::SparseMatrix;
     friend class SparsityPatternIterators::Accessor;
     friend class SparsityPatternIterators::Iterator;
@@ -1323,7 +1325,7 @@ namespace TrilinosWrappers
               const auto row_length =
                 accessor.sparsity_pattern->row_length(accessor.a_row);
               if (row_length == 0 ||
-                  !accessor.sparsity_pattern->locally_owned_rows.is_element(
+                  !accessor.sparsity_pattern->row_is_stored_locally(
                     accessor.a_row))
                 ++accessor.a_row;
               else
@@ -1506,7 +1508,7 @@ namespace TrilinosWrappers
     const int n_cols = static_cast<int>(end - begin);
 
     int ierr;
-    if (locally_owned_rows.is_element(row))
+    if (row_is_stored_locally(row))
       ierr = graph->InsertGlobalIndices(row, n_cols, col_index_ptr);
     else if (nonlocal_graph.get() != nullptr)
       {
index 905ca2d9212ef2fa56e07b74c62bcc6411184d1c..6c71e8af473baeefd5f2d6bbefd4e9b7bebfa6c9 100644 (file)
@@ -154,7 +154,6 @@ namespace TrilinosWrappers
     , column_space_map(std::move(other.column_space_map))
     , graph(std::move(other.graph))
     , nonlocal_graph(std::move(other.nonlocal_graph))
-    , locally_owned_rows(std::move(other.locally_owned_rows))
   {}
 
 
@@ -486,9 +485,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    locally_owned_rows.clear();
-    const auto range = this->local_range();
-    locally_owned_rows.add_range(range.first, range.second);
   }
 
 
@@ -504,8 +500,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    const auto range = this->local_range();
-    locally_owned_rows.add_range(range.first, range.second);
   }
 
 
@@ -520,8 +514,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    const auto range = this->local_range();
-    locally_owned_rows.add_range(range.first, range.second);
   }
 
 
@@ -537,8 +529,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    const auto range = this->local_range();
-    locally_owned_rows.add_range(range.first, range.second);
   }
 
 
@@ -552,7 +542,6 @@ namespace TrilinosWrappers
       parallel_partitioning.make_trilinos_map(communicator, false);
     reinit_sp(
       map, map, n_entries_per_row, column_space_map, graph, nonlocal_graph);
-    locally_owned_rows = parallel_partitioning;
   }
 
 
@@ -566,7 +555,6 @@ namespace TrilinosWrappers
       parallel_partitioning.make_trilinos_map(communicator, false);
     reinit_sp(
       map, map, n_entries_per_row, column_space_map, graph, nonlocal_graph);
-    locally_owned_rows = parallel_partitioning;
   }
 
 
@@ -587,7 +575,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    locally_owned_rows = row_parallel_partitioning;
   }
 
 
@@ -608,7 +595,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    locally_owned_rows = row_parallel_partitioning;
   }
 
 
@@ -630,7 +616,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    locally_owned_rows = row_parallel_partitioning;
 
     IndexSet nonlocal_partitioner = writable_rows;
     AssertDimension(nonlocal_partitioner.size(),
@@ -678,7 +663,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    locally_owned_rows = row_parallel_partitioning;
   }
 
 
@@ -700,7 +684,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    locally_owned_rows = parallel_partitioning;
   }
 
 
@@ -718,8 +701,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    const auto range = this->local_range();
-    locally_owned_rows.add_range(range.first, range.second);
   }
 
 
@@ -738,8 +719,6 @@ namespace TrilinosWrappers
               column_space_map,
               graph,
               nonlocal_graph);
-    const auto range = this->local_range();
-    locally_owned_rows.add_range(range.first, range.second);
     compress();
   }
 
@@ -759,7 +738,6 @@ namespace TrilinosWrappers
   {
     column_space_map = std_cxx14::make_unique<Epetra_Map>(*sp.column_space_map);
     graph            = std_cxx14::make_unique<Epetra_FECrsGraph>(*sp.graph);
-    locally_owned_rows = sp.locally_owned_rows;
 
     if (sp.nonlocal_graph.get() != nullptr)
       nonlocal_graph =
@@ -783,7 +761,6 @@ namespace TrilinosWrappers
 
     reinit_sp(
       rows, columns, sp, false, column_space_map, graph, nonlocal_graph);
-    locally_owned_rows = complete_index_set(sp.n_rows());
   }
 
 
@@ -855,10 +832,19 @@ namespace TrilinosWrappers
 
 
 
+  bool
+  SparsityPattern::row_is_stored_locally(const size_type i) const
+  {
+    return graph->RowMap().LID(
+             static_cast<TrilinosWrappers::types::int_type>(i)) != -1;
+  }
+
+
+
   bool
   SparsityPattern::exists(const size_type i, const size_type j) const
   {
-    if (!locally_owned_rows.is_element(i))
+    if (!row_is_stored_locally(i))
       {
         return false;
       }

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.