17 #ifndef dealii_matrix_free_vector_data_exchange_h
18 #define dealii_matrix_free_vector_data_exchange_h
47 namespace MatrixFreeFunctions
53 namespace VectorDataExchange
80 const unsigned int communication_channel,
85 std::vector<MPI_Request> & requests)
const = 0;
92 std::vector<MPI_Request> & requests)
const = 0;
97 const unsigned int communication_channel,
102 std::vector<MPI_Request> & requests)
const = 0;
111 std::vector<MPI_Request> & requests)
const = 0;
118 const unsigned int communication_channel,
123 std::vector<MPI_Request> & requests)
const = 0;
130 std::vector<MPI_Request> & requests)
const = 0;
135 const unsigned int communication_channel,
140 std::vector<MPI_Request> & requests)
const = 0;
149 std::vector<MPI_Request> & requests)
const = 0;
163 const std::shared_ptr<const Utilities::MPI::Partitioner>
181 size()
const override;
185 const unsigned int communication_channel,
190 std::vector<MPI_Request> & requests)
const override;
197 std::vector<MPI_Request> & requests)
const override;
202 const unsigned int communication_channel,
207 std::vector<MPI_Request> & requests)
const override;
216 std::vector<MPI_Request> & requests)
const override;
223 const unsigned int communication_channel,
228 std::vector<MPI_Request> & requests)
const override;
235 std::vector<MPI_Request> & requests)
const override;
240 const unsigned int communication_channel,
245 std::vector<MPI_Request> & requests)
const override;
254 std::vector<MPI_Request> & requests)
const override;
260 template <
typename Number>
264 const std::shared_ptr<const Utilities::MPI::Partitioner>
partitioner;
278 const std::shared_ptr<const Utilities::MPI::Partitioner> &partitioner,
279 const MPI_Comm &communicator_sm);
294 size()
const override;
301 const unsigned int communication_channel,
306 std::vector<MPI_Request> & requests)
const override;
313 std::vector<MPI_Request> & requests)
const override;
318 const unsigned int communication_channel,
323 std::vector<MPI_Request> & requests)
const override;
332 std::vector<MPI_Request> & requests)
const override;
339 const unsigned int communication_channel,
344 std::vector<MPI_Request> & requests)
const override;
351 std::vector<MPI_Request> & requests)
const override;
356 const unsigned int communication_channel,
361 std::vector<MPI_Request> & requests)
const override;
370 std::vector<MPI_Request> & requests)
const override;
376 template <
typename Number>
379 const unsigned int communication_channel,
384 std::vector<MPI_Request> & requests)
const;
386 template <
typename Number>
392 std::vector<MPI_Request> & requests)
const;
394 template <
typename Number>
398 const unsigned int communication_channel,
403 std::vector<MPI_Request> & requests)
const;
405 template <
typename Number>
413 std::vector<MPI_Request> & requests)
const;
415 template <
typename Number>
455 std::pair<std::vector<unsigned int>,
456 std::vector<std::pair<unsigned int, unsigned int>>>
481 std::pair<std::vector<unsigned int>,
482 std::vector<std::pair<unsigned int, unsigned int>>>
495 std::pair<std::vector<unsigned int>,
496 std::vector<std::pair<unsigned int, unsigned int>>>
503 std::pair<std::vector<unsigned int>,
504 std::vector<std::pair<unsigned int, unsigned int>>>
517 std::pair<std::vector<unsigned int>,
518 std::vector<std::pair<unsigned int, unsigned int>>>
525 std::pair<std::vector<unsigned int>,
526 std::vector<std::pair<unsigned int, unsigned int>>>
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 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_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
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 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 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 unsigned int n_import_sm_procs() 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 unsigned int n_ghost_indices() 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 reset_ghost_values(const ArrayView< double > &ghost_array) const =0
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_indices() const =0
std::vector< unsigned int > n_ghost_indices_in_larger_set_by_remote_rank
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
unsigned int locally_owned_size() const override
unsigned int n_ghost_indices() const override
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
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
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
const unsigned int n_local_elements
unsigned int n_import_indices() const override
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
std::vector< unsigned int > sm_ghost_ranks
Full(const std::shared_ptr< const Utilities::MPI::Partitioner > &partitioner, const MPI_Comm &communicator_sm)
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
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::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > sm_import_data
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
std::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > sm_import_data_this
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 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
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
PartitionerWrapper(const std::shared_ptr< const Utilities::MPI::Partitioner > &partitioner)
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
types::global_dof_index size() const override
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
unsigned int n_import_indices() const override
unsigned int locally_owned_size() const override
void reset_ghost_values_impl(const ArrayView< Number > &ghost_array) const
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
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
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
unsigned int global_dof_index