From 3cbb2b61023fe99ac8ff8d5b00a9f6ca9e6f54ad Mon Sep 17 00:00:00 2001 From: bangerth Date: Tue, 26 Mar 2013 02:51:59 +0000 Subject: [PATCH] Make sure we call the correct Trilinos function. git-svn-id: https://svn.dealii.org/branches/branch_bigger_global_dof_indices_4@29035 0785d39b-7218-0410-832d-ea1e28bc413d --- .../deal.II/lac/trilinos_sparse_matrix.h | 16 +++++- deal.II/source/lac/trilinos_block_vector.cc | 28 +++++++++-- deal.II/source/lac/trilinos_sparse_matrix.cc | 42 ++++++++++------ .../source/lac/trilinos_sparsity_pattern.cc | 32 +++++++++--- deal.II/source/lac/trilinos_vector.cc | 50 ++++++++++++------- 5 files changed, 123 insertions(+), 45 deletions(-) diff --git a/deal.II/include/deal.II/lac/trilinos_sparse_matrix.h b/deal.II/include/deal.II/lac/trilinos_sparse_matrix.h index c647fde6f6..cb66f17832 100644 --- a/deal.II/include/deal.II/lac/trilinos_sparse_matrix.h +++ b/deal.II/include/deal.II/lac/trilinos_sparse_matrix.h @@ -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(matrix->DomainMap().NumMyElements()), - static_cast(matrix->DomainMap().NumGlobalElements())); + static_cast(n_global_elements)); AssertDimension (dst.size(), static_cast(matrix->RangeMap().NumMyElements())); AssertDimension (src.size(), static_cast(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(matrix->DomainMap().NumMyElements()), - static_cast(matrix->DomainMap().NumGlobalElements())); + static_cast(n_global_elements)); AssertDimension (dst.size(), static_cast(matrix->DomainMap().NumMyElements())); AssertDimension (src.size(), static_cast(matrix->RangeMap().NumMyElements())); diff --git a/deal.II/source/lac/trilinos_block_vector.cc b/deal.II/source/lac/trilinos_block_vector.cc index a987be6015..aaa3eb830c 100644 --- a/deal.II/source/lac/trilinos_block_vector.cc +++ b/deal.II/source/lac/trilinos_block_vector.cc @@ -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; iblock_indices.reinit (block_sizes); @@ -213,7 +233,7 @@ namespace TrilinosWrappers std::vector block_sizes (no_blocks); for (size_type i=0; iblock_indices.reinit (block_sizes); diff --git a/deal.II/source/lac/trilinos_sparse_matrix.cc b/deal.II/source/lac/trilinos_sparse_matrix.cc index 909952bd22..3bf1ea3735 100644 --- a/deal.II/source/lac/trilinos_sparse_matrix.cc +++ b/deal.II/source/lac/trilinos_sparse_matrix.cc @@ -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(input_row_map.NumGlobalElements())); + static_cast(n_global_elements(input_row_map))); AssertDimension (sparsity_pattern.n_cols(), - static_cast(input_col_map.NumGlobalElements())); + static_cast(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(input_row_map.NumGlobalElements()) == n_rows, - ExcDimensionMismatch (input_row_map.NumGlobalElements(), + Assert (static_cast(n_global_elements(input_row_map)) == n_rows, + ExcDimensionMismatch (n_global_elements(input_row_map), n_rows)); -#else - Assert (static_cast(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 = diff --git a/deal.II/source/lac/trilinos_sparsity_pattern.cc b/deal.II/source/lac/trilinos_sparsity_pattern.cc index 5c5d4acf76..fe76eed3da 100644 --- a/deal.II/source/lac/trilinos_sparsity_pattern.cc +++ b/deal.II/source/lac/trilinos_sparsity_pattern.cc @@ -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(input_row_map.NumGlobalElements())); + static_cast(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(input_row_map.NumGlobalElements())); + static_cast(n_global_elements(input_row_map))); AssertDimension (sp.n_cols(), - static_cast(input_col_map.NumGlobalElements())); + static_cast(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(trilinos_i), + int ierr = graph->ExtractMyRowView(static_cast(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(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; } diff --git a/deal.II/source/lac/trilinos_vector.cc b/deal.II/source/lac/trilinos_vector.cc index be2e9666cb..4bdb8c558a 100644 --- a/deal.II/source/lac/trilinos_vector.cc +++ b/deal.II/source/lac/trilinos_vector.cc @@ -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(partitioning.size())) { Epetra_LocalMap map (static_cast(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)); -- 2.39.5