]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Make sure we call the correct Trilinos function.
authorbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 26 Mar 2013 02:51:59 +0000 (02:51 +0000)
committerbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 26 Mar 2013 02:51:59 +0000 (02:51 +0000)
git-svn-id: https://svn.dealii.org/branches/branch_bigger_global_dof_indices_4@29035 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/include/deal.II/lac/trilinos_sparse_matrix.h
deal.II/source/lac/trilinos_block_vector.cc
deal.II/source/lac/trilinos_sparse_matrix.cc
deal.II/source/lac/trilinos_sparsity_pattern.cc
deal.II/source/lac/trilinos_vector.cc

index c647fde6f64830412e9ada0979e638552fbcf9b8..cb66f1783235cb46f34d2928b40d48c3f59d53eb 100644 (file)
@@ -3746,8 +3746,14 @@ namespace TrilinosWrappers
     Assert (&src != &dst, ExcSourceEqualsDestination());
     Assert (matrix->Filled(), ExcMatrixNotCompressed());
 
+#ifndef DEAL_II_USE_LARGE_INDEX_TYPE
+    const int n_global_elements = matrix->DomainMap().NumGlobalElements();
+#else
+    const long long int n_global_elements = matrix->DomainMap().NumGlobalElements64();
+#endif
+
     AssertDimension (static_cast<size_type>(matrix->DomainMap().NumMyElements()),
-                     static_cast<size_type>(matrix->DomainMap().NumGlobalElements()));
+                     static_cast<size_type>(n_global_elements));
     AssertDimension (dst.size(), static_cast<size_type>(matrix->RangeMap().NumMyElements()));
     AssertDimension (src.size(), static_cast<size_type>(matrix->DomainMap().NumMyElements()));
 
@@ -3813,8 +3819,14 @@ namespace TrilinosWrappers
     Assert (&src != &dst, ExcSourceEqualsDestination());
     Assert (matrix->Filled(), ExcMatrixNotCompressed());
 
+#ifndef DEAL_II_USE_LARGE_INDEX_TYPE
+    const int n_global_elements = matrix->DomainMap().NumGlobalElements();
+#else
+    const long long int n_global_elements = matrix->DomainMap().NumGlobalElements64();
+#endif
+
     AssertDimension (static_cast<size_type>(matrix->DomainMap().NumMyElements()),
-                     static_cast<size_type>(matrix->DomainMap().NumGlobalElements()));
+                     static_cast<size_type>(n_global_elements));
     AssertDimension (dst.size(), static_cast<size_type>(matrix->DomainMap().NumMyElements()));
     AssertDimension (src.size(), static_cast<size_type>(matrix->RangeMap().NumMyElements()));
 
index a987be6015d87f50fe4e99218dee434586758fcd..aaa3eb830cdbeb9b7221ab444d7d9c98960e58a8 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 2008, 2009, 2011, 2012 by the deal.II authors
+//    Copyright (C) 2008, 2009, 2011, 2012, 2013 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -23,6 +23,26 @@ DEAL_II_NAMESPACE_OPEN
 
 namespace TrilinosWrappers
 {
+  namespace
+  {
+    // define a helper function that queries the size of an Epetra_Map object
+    // by calling either the 32- or 64-bit function necessary, and returns the
+    // result in the correct data type so that we can use it in calling other
+    // Epetra member functions that are overloaded by index type
+#ifndef DEAL_II_USE_LARGE_INDEX_TYPE
+    int n_global_elements (const Epetra_BlockMap &map)
+    {
+      return map.NumGlobalElements();
+    }
+#else
+    long long int n_global_elements (const Epetra_BlockMap &map)
+    {
+      return map.NumGlobalElements64();
+    }
+#endif
+  }
+
+
   namespace MPI
   {
     BlockVector &
@@ -33,7 +53,7 @@ namespace TrilinosWrappers
     }
 
 
-                                   
+
     BlockVector &
     BlockVector::operator = (const BlockVector &v)
     {
@@ -78,7 +98,7 @@ namespace TrilinosWrappers
 
       for (size_type i=0; i<no_blocks; ++i)
         {
-          block_sizes[i] = input_maps[i].NumGlobalElements();
+          block_sizes[i] = n_global_elements(input_maps[i]);
         }
 
       this->block_indices.reinit (block_sizes);
@@ -213,7 +233,7 @@ namespace TrilinosWrappers
     std::vector<size_type> block_sizes (no_blocks);
 
     for (size_type i=0; i<no_blocks; ++i)
-      block_sizes[i] = input_maps[i].NumGlobalElements();
+      block_sizes[i] = n_global_elements(input_maps[i]);
 
 
     this->block_indices.reinit (block_sizes);
index 909952bd229bc7803d9f360de5db24c67405e792..3bf1ea37353b91a99220384d97398f304db54f30 100644 (file)
@@ -32,6 +32,26 @@ DEAL_II_NAMESPACE_OPEN
 
 namespace TrilinosWrappers
 {
+  namespace
+  {
+    // define a helper function that queries the size of an Epetra_Map object
+    // by calling either the 32- or 64-bit function necessary, and returns the
+    // result in the correct data type so that we can use it in calling other
+    // Epetra member functions that are overloaded by index type
+#ifndef DEAL_II_USE_LARGE_INDEX_TYPE
+    int n_global_elements (const Epetra_BlockMap &map)
+    {
+      return map.NumGlobalElements();
+    }
+#else
+    long long int n_global_elements (const Epetra_BlockMap &map)
+    {
+      return map.NumGlobalElements64();
+    }
+#endif
+  }
+
+
   namespace SparseMatrixIterators
   {
     void
@@ -419,9 +439,9 @@ namespace TrilinosWrappers
     if (input_row_map.Comm().MyPID() == 0)
       {
         AssertDimension (sparsity_pattern.n_rows(),
-                         static_cast<size_type>(input_row_map.NumGlobalElements()));
+                         static_cast<size_type>(n_global_elements(input_row_map)));
         AssertDimension (sparsity_pattern.n_cols(),
-                         static_cast<size_type>(input_col_map.NumGlobalElements()));
+                         static_cast<size_type>(n_global_elements(input_col_map)));
       }
 
     column_space_map.reset (new Epetra_Map (input_col_map));
@@ -580,20 +600,14 @@ namespace TrilinosWrappers
 
     const size_type n_rows = dealii_sparse_matrix.m();
 
-#ifndef DEAL_II_USE_LARGE_INDEX_TYPE
-    Assert (static_cast<size_type>(input_row_map.NumGlobalElements()) == n_rows,
-            ExcDimensionMismatch (input_row_map.NumGlobalElements(),
+    Assert (static_cast<size_type>(n_global_elements(input_row_map)) == n_rows,
+            ExcDimensionMismatch (n_global_elements(input_row_map),
                                   n_rows));
-#else
-    Assert (static_cast<size_type>(input_row_map.NumGlobalElements64()) == n_rows,
-            ExcDimensionMismatch (input_row_map.NumGlobalElements64(),
-                                  n_rows));
-#endif
-    Assert (input_row_map.NumGlobalElements() == (TrilinosWrappers::types::int_type)n_rows,
-            ExcDimensionMismatch (input_row_map.NumGlobalElements(),
+    Assert (n_global_elements(input_row_map) == (TrilinosWrappers::types::int_type)n_rows,
+            ExcDimensionMismatch (n_global_elements(input_row_map),
                                   n_rows));
-    Assert (input_col_map.NumGlobalElements() == (TrilinosWrappers::types::int_type)dealii_sparse_matrix.n(),
-            ExcDimensionMismatch (input_col_map.NumGlobalElements(),
+    Assert (n_global_elements(input_col_map) == (TrilinosWrappers::types::int_type)dealii_sparse_matrix.n(),
+            ExcDimensionMismatch (n_global_elements(input_col_map),
                                   dealii_sparse_matrix.n()));
 
     const ::dealii::SparsityPattern &sparsity_pattern =
index 5c5d4acf7656e8791e9dddfba64ce21e1b28349d..fe76eed3dab87966049f15dbc1671039f1e64b10 100644 (file)
@@ -26,6 +26,26 @@ DEAL_II_NAMESPACE_OPEN
 
 namespace TrilinosWrappers
 {
+  namespace
+  {
+    // define a helper function that queries the size of an Epetra_Map object
+    // by calling either the 32- or 64-bit function necessary, and returns the
+    // result in the correct data type so that we can use it in calling other
+    // Epetra member functions that are overloaded by index type
+#ifndef DEAL_II_USE_LARGE_INDEX_TYPE
+    int n_global_elements (const Epetra_BlockMap &map)
+    {
+      return map.NumGlobalElements();
+    }
+#else
+    long long int n_global_elements (const Epetra_BlockMap &map)
+    {
+      return map.NumGlobalElements64();
+    }
+#endif
+  }
+
+
   namespace SparsityPatternIterators
   {
     void
@@ -245,7 +265,7 @@ namespace TrilinosWrappers
     // release memory before reallocation
     graph.reset ();
     AssertDimension (n_entries_per_row.size(),
-                     static_cast<size_type>(input_row_map.NumGlobalElements()));
+                     static_cast<size_type>(n_global_elements(input_row_map)));
 
     column_space_map.reset (new Epetra_Map (input_col_map));
     compressed = false;
@@ -313,9 +333,9 @@ namespace TrilinosWrappers
     graph.reset ();
 
     AssertDimension (sp.n_rows(),
-                     static_cast<size_type>(input_row_map.NumGlobalElements()));
+                     static_cast<size_type>(n_global_elements(input_row_map)));
     AssertDimension (sp.n_cols(),
-                     static_cast<size_type>(input_col_map.NumGlobalElements()));
+                     static_cast<size_type>(n_global_elements(input_col_map)));
 
     column_space_map.reset (new Epetra_Map (input_col_map));
     compressed = false;
@@ -496,7 +516,7 @@ namespace TrilinosWrappers
             // Generate the view and make
             // sure that we have not generated
             // an error.
-            int ierr = graph->ExtractMyRowView(static_cast<int>(trilinos_i), 
+            int ierr = graph->ExtractMyRowView(static_cast<int>(trilinos_i),
                 nnz_extracted, col_indices);
             Assert (ierr==0, ExcTrilinosError(ierr));
 
@@ -504,7 +524,7 @@ namespace TrilinosWrappers
                     ExcDimensionMismatch(nnz_present, nnz_extracted));
 
             // Search the index
-            int *el_find = std::find(col_indices, col_indices + nnz_present, 
+            int *el_find = std::find(col_indices, col_indices + nnz_present,
                 static_cast<int>(trilinos_j));
 
             int local_col_index = (int)(el_find - col_indices);
@@ -557,7 +577,7 @@ namespace TrilinosWrappers
     if (graph->Filled() == true)
       n_cols = graph -> NumGlobalCols();
     else
-      n_cols = column_space_map->NumGlobalElements();
+      n_cols = n_global_elements(*column_space_map);
 
     return n_cols;
   }
index be2e9666cb5a91038fc72592b79e1c28a4580e66..4bdb8c558af0e8a1a52051e80215c3fdf2da7820 100644 (file)
@@ -28,6 +28,25 @@ DEAL_II_NAMESPACE_OPEN
 
 namespace TrilinosWrappers
 {
+  namespace
+  {
+    // define a helper function that queries the size of an Epetra_Map object
+    // by calling either the 32- or 64-bit function necessary, and returns the
+    // result in the correct data type so that we can use it in calling other
+    // Epetra member functions that are overloaded by index type
+#ifndef DEAL_II_USE_LARGE_INDEX_TYPE
+    int n_global_elements (const Epetra_BlockMap &map)
+    {
+      return map.NumGlobalElements();
+    }
+#else
+    long long int n_global_elements (const Epetra_BlockMap &map)
+    {
+      return map.NumGlobalElements64();
+    }
+#endif
+  }
+
   namespace MPI
   {
 
@@ -71,9 +90,9 @@ namespace TrilinosWrappers
       :
       VectorBase()
     {
-      AssertThrow (input_map.NumGlobalElements() == v.vector->Map().NumGlobalElements(),
-                   ExcDimensionMismatch (input_map.NumGlobalElements(),
-                                         v.vector->Map().NumGlobalElements()));
+      AssertThrow (n_global_elements(input_map) == n_global_elements(v.vector->Map()),
+                  ExcDimensionMismatch (n_global_elements(input_map),
+                                        n_global_elements(v.vector->Map())));
 
       last_action = Zero;
 
@@ -94,9 +113,9 @@ namespace TrilinosWrappers
       :
       VectorBase()
     {
-      AssertThrow ((int)parallel_partitioner.size() == v.vector->Map().NumGlobalElements(),
+      AssertThrow ((size_type)parallel_partitioner.size() == n_global_elements(v.vector->Map()),
                    ExcDimensionMismatch (parallel_partitioner.size(),
-                                         v.vector->Map().NumGlobalElements()));
+                                         n_global_elements(v.vector->Map())));
 
       last_action = Zero;
 
@@ -386,7 +405,7 @@ namespace TrilinosWrappers
   Vector::Vector (const Epetra_Map &input_map)
   {
     last_action = Zero;
-    Epetra_LocalMap map (input_map.NumGlobalElements(),
+    Epetra_LocalMap map (n_global_elements(input_map),
                          input_map.IndexBase(),
                          input_map.Comm());
     vector.reset (new Epetra_FEVector(map));
@@ -414,7 +433,7 @@ namespace TrilinosWrappers
   Vector::Vector (const VectorBase &v)
   {
     last_action = Zero;
-    Epetra_LocalMap map (v.vector->Map().NumGlobalElements(),
+    Epetra_LocalMap map (n_global_elements(v.vector->Map()),
                          v.vector->Map().IndexBase(),
                          v.vector->Map().Comm());
     vector.reset (new Epetra_FEVector(map));
@@ -460,9 +479,9 @@ namespace TrilinosWrappers
   Vector::reinit (const Epetra_Map &input_map,
                   const bool        fast)
   {
-    if (vector->Map().NumGlobalElements() != input_map.NumGlobalElements())
+    if (n_global_elements(vector->Map()) != n_global_elements(input_map))
       {
-        Epetra_LocalMap map (input_map.NumGlobalElements(),
+        Epetra_LocalMap map (n_global_elements(input_map),
                              input_map.IndexBase(),
                              input_map.Comm());
         vector.reset (new Epetra_FEVector (map));
@@ -487,7 +506,7 @@ namespace TrilinosWrappers
                   const MPI_Comm &communicator,
                   const bool      fast)
   {
-    if (vector->Map().NumGlobalElements() !=
+    if (n_global_elements(vector->Map()) !=
         static_cast<TrilinosWrappers::types::int_type>(partitioning.size()))
       {
         Epetra_LocalMap map (static_cast<TrilinosWrappers::types::int_type>(partitioning.size()),
@@ -586,7 +605,7 @@ namespace TrilinosWrappers
   {
     if (size() != v.size())
       {
-        Epetra_LocalMap map (v.vector->Map().NumGlobalElements(),
+        Epetra_LocalMap map (n_global_elements(v.vector->Map()),
                              v.vector->Map().IndexBase(),
                              v.vector->Comm());
         vector.reset (new Epetra_FEVector(map));
@@ -603,14 +622,7 @@ namespace TrilinosWrappers
   {
     if (size() != v.size())
       {
-#ifndef DEAL_II_USE_LARGE_INDEX_TYPE
-       const int n_global_elements
-         = v.vector->Map().NumGlobalElements();
-#else
-       const long long int n_global_elements
-         = v.vector->Map().NumGlobalElements64();
-#endif
-        Epetra_LocalMap map (n_global_elements,
+        Epetra_LocalMap map (n_global_elements(v.vector->Map()),
                              v.vector->Map().IndexBase(),
                              v.vector->Comm());
         vector.reset (new Epetra_FEVector(map));

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.