17#ifndef dealii_matrix_free_vector_data_exchange_h
18#define dealii_matrix_free_vector_data_exchange_h
30 namespace MatrixFreeFunctions
36 namespace VectorDataExchange
63 const unsigned int communication_channel,
68 std::vector<MPI_Request> & requests)
const = 0;
75 std::vector<MPI_Request> & requests)
const = 0;
80 const unsigned int communication_channel,
85 std::vector<MPI_Request> & requests)
const = 0;
94 std::vector<MPI_Request> & requests)
const = 0;
101 const unsigned int communication_channel,
106 std::vector<MPI_Request> & requests)
const = 0;
113 std::vector<MPI_Request> & requests)
const = 0;
118 const unsigned int communication_channel,
123 std::vector<MPI_Request> & requests)
const = 0;
132 std::vector<MPI_Request> & requests)
const = 0;
146 const std::shared_ptr<const Utilities::MPI::Partitioner>
164 size()
const override;
168 const unsigned int communication_channel,
173 std::vector<MPI_Request> & requests)
const override;
180 std::vector<MPI_Request> & requests)
const override;
185 const unsigned int communication_channel,
190 std::vector<MPI_Request> & requests)
const override;
199 std::vector<MPI_Request> & requests)
const override;
206 const unsigned int communication_channel,
211 std::vector<MPI_Request> & requests)
const override;
218 std::vector<MPI_Request> & requests)
const override;
223 const unsigned int communication_channel,
228 std::vector<MPI_Request> & requests)
const override;
237 std::vector<MPI_Request> & requests)
const override;
243 template <
typename Number>
247 const std::shared_ptr<const Utilities::MPI::Partitioner>
partitioner;
261 const std::shared_ptr<const Utilities::MPI::Partitioner> &partitioner,
277 size()
const override;
284 const unsigned int communication_channel,
289 std::vector<MPI_Request> & requests)
const override;
296 std::vector<MPI_Request> & requests)
const override;
301 const unsigned int communication_channel,
306 std::vector<MPI_Request> & requests)
const override;
315 std::vector<MPI_Request> & requests)
const override;
322 const unsigned int communication_channel,
327 std::vector<MPI_Request> & requests)
const override;
334 std::vector<MPI_Request> & requests)
const override;
339 const unsigned int communication_channel,
344 std::vector<MPI_Request> & requests)
const override;
353 std::vector<MPI_Request> & requests)
const override;
359 template <
typename Number>
362 const unsigned int communication_channel,
367 std::vector<MPI_Request> & requests)
const;
369 template <
typename Number>
375 std::vector<MPI_Request> & requests)
const;
377 template <
typename Number>
381 const unsigned int communication_channel,
386 std::vector<MPI_Request> & requests)
const;
388 template <
typename Number>
396 std::vector<MPI_Request> & requests)
const;
398 template <
typename Number>
438 std::pair<std::vector<unsigned int>,
439 std::vector<std::pair<unsigned int, unsigned int>>>
464 std::pair<std::vector<unsigned int>,
465 std::vector<std::pair<unsigned int, unsigned int>>>
478 std::pair<std::vector<unsigned int>,
479 std::vector<std::pair<unsigned int, unsigned int>>>
486 std::pair<std::vector<unsigned int>,
487 std::vector<std::pair<unsigned int, unsigned int>>>
500 std::pair<std::vector<unsigned int>,
501 std::vector<std::pair<unsigned int, unsigned int>>>
508 std::pair<std::vector<unsigned int>,
509 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
const MPI_Comm & get_sm_mpi_communicator() const
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
Full(const std::shared_ptr< const Utilities::MPI::Partitioner > &partitioner, const MPI_Comm &communicator_sm)
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
PartitionerWrapper(const std::shared_ptr< const Utilities::MPI::Partitioner > &partitioner)
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