From 377fd2e5cd0210be7e054b26e1ff02d0027229f4 Mon Sep 17 00:00:00 2001 From: Bruno Turcksin Date: Mon, 15 Feb 2016 15:16:57 -0500 Subject: [PATCH] Fix an ownership problem with shared_ptr. --- include/deal.II/lac/la_vector.h | 2 +- include/deal.II/lac/la_vector.templates.h | 2 +- include/deal.II/lac/read_write_vector.h | 16 ++++++++-------- .../deal.II/lac/read_write_vector.templates.h | 18 +++++++++--------- include/deal.II/lac/trilinos_epetra_vector.h | 2 +- include/deal.II/lac/vector_space_vector.h | 2 +- source/lac/trilinos_epetra_vector.cc | 10 +++++----- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/include/deal.II/lac/la_vector.h b/include/deal.II/lac/la_vector.h index fbdb0a75c7..1cfb6cb4e3 100644 --- a/include/deal.II/lac/la_vector.h +++ b/include/deal.II/lac/la_vector.h @@ -137,7 +137,7 @@ namespace LinearAlgebra */ virtual void import(const ReadWriteVector &V, VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern = NULL) override; + std::shared_ptr communication_pattern = nullptr) override; /** * Add @p a to all components. Note that @p a is a scalar not a vector. diff --git a/include/deal.II/lac/la_vector.templates.h b/include/deal.II/lac/la_vector.templates.h index a6ea7c6b52..1544a5f06e 100644 --- a/include/deal.II/lac/la_vector.templates.h +++ b/include/deal.II/lac/la_vector.templates.h @@ -117,7 +117,7 @@ namespace LinearAlgebra template void Vector::import(const ReadWriteVector &, VectorOperation::values , - const CommunicationPatternBase *) + std::shared_ptr) { AssertThrow(false, ExcMessage("This function is not implemented.")); } diff --git a/include/deal.II/lac/read_write_vector.h b/include/deal.II/lac/read_write_vector.h index 197ead3db0..ef38613f2d 100644 --- a/include/deal.II/lac/read_write_vector.h +++ b/include/deal.II/lac/read_write_vector.h @@ -233,7 +233,7 @@ namespace LinearAlgebra */ void import(const PETScWrappers::MPI::Vector &petsc_vec, VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern = nullptr); + std::shared_ptr communication_pattern = nullptr); #endif #ifdef DEAL_II_WITH_TRILINOS @@ -247,7 +247,7 @@ namespace LinearAlgebra */ void import(const TrilinosWrappers::MPI::Vector &trilinos_vec, VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern = nullptr); + std::shared_ptr communication_pattern = nullptr); /** * Imports all the elements present in the vector's IndexSet from the input @@ -259,7 +259,7 @@ namespace LinearAlgebra */ void import(const EpetraWrappers::Vector &epetra_vec, VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern = nullptr); + std::shared_ptr communication_pattern = nullptr); #endif /** @@ -450,11 +450,11 @@ namespace LinearAlgebra * vector @p multivector. This is an helper function and it should not be * used directly. */ - void import(const Epetra_MultiVector &multivector, - const IndexSet &locally_owned_elements, - VectorOperation::values operation, - const MPI_Comm &mpi_comm, - const CommunicationPatternBase *communication_pattern); + void import(const Epetra_MultiVector &multivector, + const IndexSet &locally_owned_elements, + VectorOperation::values operation, + const MPI_Comm &mpi_comm, + std::shared_ptr communication_pattern); #endif /** diff --git a/include/deal.II/lac/read_write_vector.templates.h b/include/deal.II/lac/read_write_vector.templates.h index 26c0c360de..6da4a67284 100644 --- a/include/deal.II/lac/read_write_vector.templates.h +++ b/include/deal.II/lac/read_write_vector.templates.h @@ -180,7 +180,7 @@ namespace LinearAlgebra const IndexSet &source_elements, VectorOperation::values operation, const MPI_Comm &mpi_comm, - const CommunicationPatternBase *communication_pattern) + std::shared_ptr communication_pattern) { std_cxx11::shared_ptr epetra_comm_pattern; @@ -206,8 +206,8 @@ namespace LinearAlgebra } else { - epetra_comm_pattern.reset( - dynamic_cast (communication_pattern)); + epetra_comm_pattern = std::dynamic_pointer_cast ( + communication_pattern); AssertThrow(epetra_comm_pattern != nullptr, ExcMessage(std::string("The communication pattern is not of type ") + "LinearAlgebra::EpetraWrappers::CommunicationPattern.")); @@ -236,9 +236,9 @@ namespace LinearAlgebra template void - ReadWriteVector::import(const TrilinosWrappers::MPI::Vector &trilinos_vec, - VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern) + ReadWriteVector::import(const TrilinosWrappers::MPI::Vector &trilinos_vec, + VectorOperation::values operation, + std::shared_ptr communication_pattern) { import(trilinos_vec.trilinos_vector(), trilinos_vec.locally_owned_elements(), operation, trilinos_vec.get_mpi_communicator(), communication_pattern); @@ -248,9 +248,9 @@ namespace LinearAlgebra template void - ReadWriteVector::import(const LinearAlgebra::EpetraWrappers::Vector &trilinos_vec, - VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern) + ReadWriteVector::import(const LinearAlgebra::EpetraWrappers::Vector &trilinos_vec, + VectorOperation::values operation, + std::shared_ptr communication_pattern) { import(trilinos_vec.trilinos_vector(), trilinos_vec.locally_owned_elements(), operation, trilinos_vec.get_mpi_communicator(), communication_pattern); diff --git a/include/deal.II/lac/trilinos_epetra_vector.h b/include/deal.II/lac/trilinos_epetra_vector.h index b46e053009..2a29f1100b 100644 --- a/include/deal.II/lac/trilinos_epetra_vector.h +++ b/include/deal.II/lac/trilinos_epetra_vector.h @@ -101,7 +101,7 @@ namespace LinearAlgebra */ virtual void import(const ReadWriteVector &V, VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern = NULL) + std::shared_ptr communication_pattern = nullptr) override; /** diff --git a/include/deal.II/lac/vector_space_vector.h b/include/deal.II/lac/vector_space_vector.h index 577da9b9d2..8ccab81807 100644 --- a/include/deal.II/lac/vector_space_vector.h +++ b/include/deal.II/lac/vector_space_vector.h @@ -79,7 +79,7 @@ namespace LinearAlgebra */ virtual void import(const ReadWriteVector &V, VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern = NULL) = 0; + std::shared_ptr communication_pattern = nullptr) = 0; /** * Return the scalar product of two vectors. diff --git a/source/lac/trilinos_epetra_vector.cc b/source/lac/trilinos_epetra_vector.cc index b2b4cab8c6..7a8d8ae163 100644 --- a/source/lac/trilinos_epetra_vector.cc +++ b/source/lac/trilinos_epetra_vector.cc @@ -99,9 +99,9 @@ namespace LinearAlgebra - void Vector::import(const ReadWriteVector &V, - VectorOperation::values operation, - const CommunicationPatternBase *communication_pattern) + void Vector::import(const ReadWriteVector &V, + VectorOperation::values operation, + std::shared_ptr communication_pattern) { // If no communication pattern is given, create one. Otherwsie, use the // one given. @@ -120,8 +120,8 @@ namespace LinearAlgebra } else { - epetra_comm_pattern.reset( - dynamic_cast (communication_pattern)); + epetra_comm_pattern = + std::dynamic_pointer_cast (communication_pattern); AssertThrow(epetra_comm_pattern != nullptr, ExcMessage(std::string("The communication pattern is not of type ") + "LinearAlgebra::EpetraWrappers::CommunicationPattern.")); -- 2.39.5