From: Daniel Arndt Date: Tue, 9 May 2017 11:56:34 +0000 (+0200) Subject: Restore an accidentally deleted definition X-Git-Tag: v9.0.0-rc1~1609^2~2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8bd2d34c81f36486992db424c2c2c0fafb683185;p=dealii.git Restore an accidentally deleted definition --- diff --git a/source/lac/trilinos_vector.cc b/source/lac/trilinos_vector.cc index 9fe2fd3ce3..ac96692027 100644 --- a/source/lac/trilinos_vector.cc +++ b/source/lac/trilinos_vector.cc @@ -284,6 +284,85 @@ namespace TrilinosWrappers + void + Vector::reinit (const BlockVector &v, + const bool import_data) + { + nonlocal_vector.reset(); + owned_elements.clear(); + owned_elements.set_size(v.size()); + + // In case we do not allow to have different maps, this call means that + // we have to reset the vector. So clear the vector, initialize our map + // with the map in v, and generate the vector. + if (v.n_blocks() == 0) + return; + + // create a vector that holds all the elements contained in the block + // vector. need to manually create an Epetra_Map. + size_type n_elements = 0, added_elements = 0, block_offset = 0; + for (size_type block=0; block global_ids (n_elements, -1); + for (size_type block=0; block actual_vec; + if ( import_data == true ) + actual_vec.reset (new Epetra_FEVector (new_map)); + else + { + vector.reset (new Epetra_FEVector (new_map)); + actual_vec = vector; + } + + TrilinosScalar *entries = (*actual_vec)[0]; + block_offset = 0; + for (size_type block=0; block(global_length(*actual_vec)) + == v.size(), + ExcDimensionMismatch (global_length(*actual_vec), + v.size())); + + Epetra_Import data_exchange (vector->Map(), actual_vec->Map()); + + const int ierr = vector->Import(*actual_vec, data_exchange, Insert); + AssertThrow (ierr == 0, ExcTrilinosError(ierr)); + + last_action = Insert; + } +#if defined(DEBUG) && defined(DEAL_II_WITH_MPI) + const Epetra_MpiComm *comm_ptr + = dynamic_cast(&(vector->Comm())); + Assert (comm_ptr != nullptr, ExcInternalError()); + const size_type n_elements_global + = Utilities::MPI::sum (owned_elements.n_elements(), comm_ptr->Comm()); + + Assert (has_ghosts || n_elements_global == size(), ExcInternalError()); +#endif + } + + + void Vector::reinit(const IndexSet &locally_owned_entries, const IndexSet &ghost_entries, const MPI_Comm &communicator,