17#ifndef dealii_matrix_free_vector_data_exchange_h
18#define dealii_matrix_free_vector_data_exchange_h
35 namespace MatrixFreeFunctions
41 namespace VectorDataExchange
68 const unsigned int communication_channel,
73 std::vector<MPI_Request> & requests)
const = 0;
80 std::vector<MPI_Request> & requests)
const = 0;
85 const unsigned int communication_channel,
90 std::vector<MPI_Request> & requests)
const = 0;
99 std::vector<MPI_Request> & requests)
const = 0;
106 const unsigned int communication_channel,
111 std::vector<MPI_Request> & requests)
const = 0;
118 std::vector<MPI_Request> & requests)
const = 0;
123 const unsigned int communication_channel,
128 std::vector<MPI_Request> & requests)
const = 0;
137 std::vector<MPI_Request> & requests)
const = 0;
151 const std::shared_ptr<const Utilities::MPI::Partitioner>
169 size()
const override;
173 const unsigned int communication_channel,
178 std::vector<MPI_Request> & requests)
const override;
185 std::vector<MPI_Request> & requests)
const override;
190 const unsigned int communication_channel,
195 std::vector<MPI_Request> & requests)
const override;
204 std::vector<MPI_Request> & requests)
const override;
211 const unsigned int communication_channel,
216 std::vector<MPI_Request> & requests)
const override;
223 std::vector<MPI_Request> & requests)
const override;
228 const unsigned int communication_channel,
233 std::vector<MPI_Request> & requests)
const override;
242 std::vector<MPI_Request> & requests)
const override;
248 template <
typename Number>
252 const std::shared_ptr<const Utilities::MPI::Partitioner>
partitioner;
266 const std::shared_ptr<const Utilities::MPI::Partitioner> &partitioner,
282 size()
const override;
289 const unsigned int communication_channel,
294 std::vector<MPI_Request> & requests)
const override;
301 std::vector<MPI_Request> & requests)
const override;
306 const unsigned int communication_channel,
311 std::vector<MPI_Request> & requests)
const override;
320 std::vector<MPI_Request> & requests)
const override;
327 const unsigned int communication_channel,
332 std::vector<MPI_Request> & requests)
const override;
339 std::vector<MPI_Request> & requests)
const override;
344 const unsigned int communication_channel,
349 std::vector<MPI_Request> & requests)
const override;
358 std::vector<MPI_Request> & requests)
const override;
364 template <
typename Number>
367 const unsigned int communication_channel,
372 std::vector<MPI_Request> & requests)
const;
374 template <
typename Number>
380 std::vector<MPI_Request> & requests)
const;
382 template <
typename Number>
386 const unsigned int communication_channel,
391 std::vector<MPI_Request> & requests)
const;
393 template <
typename Number>
401 std::vector<MPI_Request> & requests)
const;
403 template <
typename Number>
443 std::pair<std::vector<unsigned int>,
444 std::vector<std::pair<unsigned int, unsigned int>>>
469 std::pair<std::vector<unsigned int>,
470 std::vector<std::pair<unsigned int, unsigned int>>>
483 std::pair<std::vector<unsigned int>,
484 std::vector<std::pair<unsigned int, unsigned int>>>
491 std::pair<std::vector<unsigned int>,
492 std::vector<std::pair<unsigned int, unsigned int>>>
505 std::pair<std::vector<unsigned int>,
506 std::vector<std::pair<unsigned int, unsigned int>>>
513 std::pair<std::vector<unsigned int>,
514 std::vector<std::pair<unsigned int, unsigned int>>>
virtual void import_from_ghosted_array_start(const VectorOperation::values vector_operation, const unsigned int communication_channel, const ArrayView< const float > &locally_owned_array, const std::vector< ArrayView< const float > > &shared_arrays, const ArrayView< float > &ghost_array, const ArrayView< float > &temporary_storage, std::vector< MPI_Request > &requests) const =0
virtual unsigned int n_import_sm_procs() const =0
virtual unsigned int n_ghost_indices() const =0
virtual void export_to_ghosted_array_finish(const ArrayView< const float > &locally_owned_array, const std::vector< ArrayView< const float > > &shared_arrays, const ArrayView< float > &ghost_array, std::vector< MPI_Request > &requests) const =0
virtual void reset_ghost_values(const ArrayView< float > &ghost_array) const =0
virtual types::global_dof_index size() const =0
virtual unsigned int locally_owned_size() const =0
virtual void import_from_ghosted_array_finish(const VectorOperation::values vector_operation, const ArrayView< float > &locally_owned_storage, const std::vector< ArrayView< const float > > &shared_arrays, const ArrayView< float > &ghost_array, const ArrayView< const float > &temporary_storage, std::vector< MPI_Request > &requests) const =0
virtual void reset_ghost_values(const ArrayView< double > &ghost_array) const =0
virtual unsigned int n_import_indices() const =0
virtual void export_to_ghosted_array_start(const unsigned int communication_channel, const ArrayView< const float > &locally_owned_array, const std::vector< ArrayView< const float > > &shared_arrays, const ArrayView< float > &ghost_array, const ArrayView< float > &temporary_storage, std::vector< MPI_Request > &requests) const =0
virtual void import_from_ghosted_array_start(const VectorOperation::values vector_operation, const unsigned int communication_channel, const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< double > &temporary_storage, std::vector< MPI_Request > &requests) const =0
virtual void import_from_ghosted_array_finish(const VectorOperation::values vector_operation, const ArrayView< double > &locally_owned_storage, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< const double > &temporary_storage, std::vector< MPI_Request > &requests) const =0
virtual void export_to_ghosted_array_start(const unsigned int communication_channel, const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< double > &temporary_storage, std::vector< MPI_Request > &requests) const =0
virtual void export_to_ghosted_array_finish(const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, std::vector< MPI_Request > &requests) const =0
void export_to_ghosted_array_start(const unsigned int communication_channel, const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< double > &temporary_storage, std::vector< MPI_Request > &requests) const override
std::vector< unsigned int > n_ghost_indices_in_larger_set_by_remote_rank
unsigned int locally_owned_size() const override
unsigned int n_ghost_indices() const override
void reset_ghost_values(const ArrayView< double > &ghost_array) const override
std::vector< unsigned int > sm_import_ranks
std::vector< std::array< unsigned int, 3 > > ghost_targets_data
const unsigned int n_ghost_elements
std::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > sm_export_data_this
virtual unsigned int n_import_sm_procs() const override
void export_to_ghosted_array_finish(const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, std::vector< MPI_Request > &requests) const override
void import_from_ghosted_array_start(const VectorOperation::values vector_operation, const unsigned int communication_channel, const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< double > &temporary_storage, std::vector< MPI_Request > &requests) const override
const unsigned int n_local_elements
void export_to_ghosted_array_start_impl(const unsigned int communication_channel, const ArrayView< const Number > &locally_owned_array, const std::vector< ArrayView< const Number > > &shared_arrays, const ArrayView< Number > &ghost_array, const ArrayView< Number > &temporary_storage, std::vector< MPI_Request > &requests) const
unsigned int n_import_indices() const override
void import_from_ghosted_array_finish_impl(const VectorOperation::values vector_operation, const ArrayView< Number > &locally_owned_storage, const std::vector< ArrayView< const Number > > &shared_arrays, const ArrayView< Number > &ghost_array, const ArrayView< const Number > &temporary_storage, std::vector< MPI_Request > &requests) const
std::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > sm_export_data
std::vector< std::array< unsigned int, 3 > > import_targets_data
std::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > ghost_indices_subset_data
void import_from_ghosted_array_finish(const VectorOperation::values vector_operation, const ArrayView< double > &locally_owned_storage, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< const double > &temporary_storage, std::vector< MPI_Request > &requests) const override
std::vector< unsigned int > sm_ghost_ranks
MPI_Comm get_sm_mpi_communicator() const
void export_to_ghosted_array_finish_impl(const ArrayView< const Number > &locally_owned_array, const std::vector< ArrayView< const Number > > &shared_arrays, const ArrayView< Number > &ghost_array, std::vector< MPI_Request > &requests) const
std::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > sm_import_data
void import_from_ghosted_array_start_impl(const VectorOperation::values vector_operation, const unsigned int communication_channel, const ArrayView< const Number > &locally_owned_array, const std::vector< ArrayView< const Number > > &shared_arrays, const ArrayView< Number > &ghost_array, const ArrayView< Number > &temporary_storage, std::vector< MPI_Request > &requests) const
void reset_ghost_values_impl(const ArrayView< Number > &ghost_array) const
std::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > sm_import_data_this
const types::global_dof_index n_global_elements
virtual types::global_dof_index size() const override
std::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > import_indices_data
const std::shared_ptr< const Utilities::MPI::Partitioner > partitioner
void export_to_ghosted_array_finish(const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, std::vector< MPI_Request > &requests) const override
types::global_dof_index size() const override
unsigned int n_import_indices() const override
unsigned int locally_owned_size() const override
void export_to_ghosted_array_start(const unsigned int communication_channel, const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< double > &temporary_storage, std::vector< MPI_Request > &requests) const override
void reset_ghost_values_impl(const ArrayView< Number > &ghost_array) const
void import_from_ghosted_array_finish(const VectorOperation::values vector_operation, const ArrayView< double > &locally_owned_storage, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< const double > &temporary_storage, std::vector< MPI_Request > &requests) const override
virtual ~PartitionerWrapper()=default
void reset_ghost_values(const ArrayView< double > &ghost_array) const override
unsigned int n_ghost_indices() const override
unsigned int n_import_sm_procs() const override
void import_from_ghosted_array_start(const VectorOperation::values vector_operation, const unsigned int communication_channel, const ArrayView< const double > &locally_owned_array, const std::vector< ArrayView< const double > > &shared_arrays, const ArrayView< double > &ghost_array, const ArrayView< double > &temporary_storage, std::vector< MPI_Request > &requests) const override
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE