From cfe9bbc21078861a0f8d9051e5576e5b6573425b Mon Sep 17 00:00:00 2001 From: Matthias Maier Date: Wed, 8 Apr 2015 12:35:48 +0200 Subject: [PATCH] Add Specializations for BlockVector and vectors in TrilinosWrappers:: --- include/deal.II/lac/block_vector.h | 43 +++++++++++ include/deal.II/lac/trilinos_block_vector.h | 82 +++++++++++++++++++- include/deal.II/lac/trilinos_vector.h | 85 ++++++++++++++++++++- 3 files changed, 208 insertions(+), 2 deletions(-) diff --git a/include/deal.II/lac/block_vector.h b/include/deal.II/lac/block_vector.h index a39d0c89f4..d8cad92014 100644 --- a/include/deal.II/lac/block_vector.h +++ b/include/deal.II/lac/block_vector.h @@ -36,6 +36,9 @@ namespace TrilinosWrappers } #endif +// forward declaration +template class ReinitRangeFactory; +template class ReinitDomainFactory; /*! @addtogroup Vectors @@ -460,6 +463,46 @@ void swap (BlockVector &u, u.swap (v); } + +/** + * Specialization for BlockVector. + */ +template +class ReinitRangeFactory > +{ +public: + + template + std::function &, bool)> + operator()(const Matrix &matrix) + { + return [&matrix](BlockVector &v, bool fast) + { + v.reinit(matrix.get_row_indices(), fast); + }; + } +}; + + +/** + * Specialization for BlockVector. + */ +template +class ReinitDomainFactory > +{ +public: + + template + std::function &, bool)> + operator()(const Matrix &matrix) + { + return [&matrix](BlockVector &v, bool fast) + { + v.reinit(matrix.get_column_indices(), fast); + }; + } +}; + DEAL_II_NAMESPACE_CLOSE #endif diff --git a/include/deal.II/lac/trilinos_block_vector.h b/include/deal.II/lac/trilinos_block_vector.h index 422c54817e..4b3e2d610b 100644 --- a/include/deal.II/lac/trilinos_block_vector.h +++ b/include/deal.II/lac/trilinos_block_vector.h @@ -447,7 +447,87 @@ namespace TrilinosWrappers u.swap (v); } -} +} /* namespace TrilinosWrappers */ + + +/** + * Specialization for TrilinosWrappers::MPI::BlockVector. + */ +template<> +class ReinitRangeFactory +{ +public: + + template + std::function + operator()(const Matrix &matrix) + { + return [&matrix](TrilinosWrappers::MPI::BlockVector &v, bool fast) + { + v.reinit(matrix.range_partitioner(), fast); + }; + } +}; + + +/** + * Specialization for TrilinosWrappers::MPI::BlockVector. + */ +template<> +class ReinitDomainFactory +{ +public: + + template + std::function + operator()(const Matrix &matrix) + { + return [&matrix](TrilinosWrappers::MPI::BlockVector &v, bool fast) + { + v.reinit(matrix.domain_partitioner(), fast); + }; + } +}; + + +/** + * Specialization for TrilinosWrappers::BlockVector. + */ +template<> +class ReinitRangeFactory +{ +public: + + template + std::function + operator()(const Matrix &matrix) + { + return [&matrix](TrilinosWrappers::BlockVector &v, bool fast) + { + v.reinit(matrix.range_partitioner(), fast); + }; + } +}; + + +/** + * Specialization for TrilinosWrappers::BlockVector. + */ +template<> +class ReinitDomainFactory +{ +public: + + template + std::function + operator()(const Matrix &matrix) + { + return [&matrix](TrilinosWrappers::BlockVector &v, bool fast) + { + v.reinit(matrix.domain_partitioner(), fast); + }; + } +}; /*@}*/ diff --git a/include/deal.II/lac/trilinos_vector.h b/include/deal.II/lac/trilinos_vector.h index a9ad0a6b1a..f4d252ed41 100644 --- a/include/deal.II/lac/trilinos_vector.h +++ b/include/deal.II/lac/trilinos_vector.h @@ -40,6 +40,9 @@ DEAL_II_NAMESPACE_OPEN // forward declaration template class Vector; +template class ReinitRangeFactory; +template class ReinitDomainFactory; + /** * @addtogroup TrilinosWrappers * @{ @@ -936,7 +939,87 @@ namespace TrilinosWrappers #endif -} +} /* namespace TrilinosWrappers */ + + +/** + * Specialization for TrilinosWrappers::MPI::Vector. + */ +template<> +class ReinitRangeFactory +{ +public: + + template + std::function + operator()(const Matrix &matrix) + { + return [&matrix](TrilinosWrappers::MPI::Vector &v, bool fast) + { + v.reinit(matrix.range_partitioner(), fast); + }; + } +}; + + +/** + * Specialization for TrilinosWrappers::MPI::Vector. + */ +template<> +class ReinitDomainFactory +{ +public: + + template + std::function + operator()(const Matrix &matrix) + { + return [&matrix](TrilinosWrappers::MPI::Vector &v, bool fast) + { + v.reinit(matrix.domain_partitioner(), fast); + }; + } +}; + + +/** + * Specialization for TrilinosWrappers::MPI::Vector. + */ +template<> +class ReinitRangeFactory +{ +public: + + template + std::function + operator()(const Matrix &matrix) + { + return [&matrix](TrilinosWrappers::Vector &v, bool fast) + { + v.reinit(matrix.range_partitioner(), fast); + }; + } +}; + + +/** + * Specialization for TrilinosWrappers::MPI::Vector. + */ +template<> +class ReinitDomainFactory +{ +public: + + template + std::function + operator()(const Matrix &matrix) + { + return [&matrix](TrilinosWrappers::Vector &v, bool fast) + { + v.reinit(matrix.domain_partitioner(), fast); + }; + } +}; /*@}*/ -- 2.39.5