From: Martin Kronbichler Date: Thu, 30 Jul 2015 11:54:31 +0000 (+0200) Subject: Performance optimization of Epetra_Map -> IndexSet conversion X-Git-Tag: v8.4.0-rc2~699^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F1215%2Fhead;p=dealii.git Performance optimization of Epetra_Map -> IndexSet conversion --- diff --git a/include/deal.II/base/index_set.h b/include/deal.II/base/index_set.h index 6e3560493c..8543b5ef00 100644 --- a/include/deal.II/base/index_set.h +++ b/include/deal.II/base/index_set.h @@ -1206,28 +1206,6 @@ IndexSet::IndexSet (const size_type size) - -#ifdef DEAL_II_WITH_TRILINOS -inline -IndexSet::IndexSet (const Epetra_Map &map) - : - is_compressed (true), - index_space_size (map.NumGlobalElements()), - largest_range (numbers::invalid_unsigned_int) -{ - const size_type n_indices = map.NumMyElements(); -#ifndef DEAL_II_WITH_64BIT_INDICES - unsigned int *indices = (unsigned int *)map.MyGlobalElements(); -#else - size_type *indices = (size_type *)map.MyGlobalElements64(); -#endif - add_indices(indices, indices+n_indices); - compress(); -} -#endif - - - inline void IndexSet::clear () diff --git a/source/base/index_set.cc b/source/base/index_set.cc index 92cdab2660..a43e8856a3 100644 --- a/source/base/index_set.cc +++ b/source/base/index_set.cc @@ -29,6 +29,38 @@ DEAL_II_NAMESPACE_OPEN +#ifdef DEAL_II_WITH_TRILINOS +IndexSet::IndexSet (const Epetra_Map &map) + : + is_compressed (true), + index_space_size (map.NumGlobalElements()), + largest_range (numbers::invalid_unsigned_int) +{ + // For a contiguous map, we do not need to go through the whole data... + if (map.LinearMap()) + { +#ifndef DEAL_II_WITH_64BIT_INDICES + add_range(size_type(map.MinMyGID()), size_type(map.MaxMyGID()+1)); +#else + add_range(size_type(map.MinMyGID64()), size_type(map.MaxMyGID64()+1)); +#endif + } + else + { + const size_type n_indices = map.NumMyElements(); +#ifndef DEAL_II_WITH_64BIT_INDICES + unsigned int *indices = (unsigned int *)map.MyGlobalElements(); +#else + size_type *indices = (size_type *)map.MyGlobalElements64(); +#endif + add_indices(indices, indices+n_indices); + } + compress(); +} +#endif + + + void IndexSet::add_range (const size_type begin, const size_type end)