Reference documentation for deal.II version GIT relicensing-489-g2d48aca8cc 2024-04-28 17:30:02+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
vector_data_exchange.h
Go to the documentation of this file.
1// ------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4// Copyright (C) 2020 - 2023 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Part of the source code is dual licensed under Apache-2.0 WITH
9// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
10// governing the source code and code contributions can be found in
11// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
12//
13// ------------------------------------------------------------------------
14
15
16#ifndef dealii_matrix_free_vector_data_exchange_h
17#define dealii_matrix_free_vector_data_exchange_h
18
19
20#include <deal.II/base/config.h>
21
25
27
28#include <memory>
29
31
32namespace internal
33{
34 namespace MatrixFreeFunctions
35 {
40 namespace VectorDataExchange
41 {
45 class Base
46 {
47 public:
48 virtual ~Base() = default;
49
50 virtual unsigned int
51 locally_owned_size() const = 0;
52
53 virtual unsigned int
54 n_ghost_indices() const = 0;
55
56 virtual unsigned int
57 n_import_indices() const = 0;
58
59 virtual unsigned int
60 n_import_sm_procs() const = 0;
61
63 size() const = 0;
64
65 virtual void
67 const unsigned int communication_channel,
69 const std::vector<ArrayView<const double>> &shared_arrays,
72 std::vector<MPI_Request> &requests) const = 0;
73
74 virtual void
77 const std::vector<ArrayView<const double>> &shared_arrays,
79 std::vector<MPI_Request> &requests) const = 0;
80
81 virtual void
84 const unsigned int communication_channel,
86 const std::vector<ArrayView<const double>> &shared_arrays,
89 std::vector<MPI_Request> &requests) const = 0;
90
91 virtual void
95 const std::vector<ArrayView<const double>> &shared_arrays,
98 std::vector<MPI_Request> &requests) const = 0;
99
100 virtual void
102
103 virtual void
105 const unsigned int communication_channel,
107 const std::vector<ArrayView<const float>> &shared_arrays,
110 std::vector<MPI_Request> &requests) const = 0;
111
112 virtual void
115 const std::vector<ArrayView<const float>> &shared_arrays,
117 std::vector<MPI_Request> &requests) const = 0;
118
119 virtual void
122 const unsigned int communication_channel,
124 const std::vector<ArrayView<const float>> &shared_arrays,
127 std::vector<MPI_Request> &requests) const = 0;
128
129 virtual void
133 const std::vector<ArrayView<const float>> &shared_arrays,
136 std::vector<MPI_Request> &requests) const = 0;
137
138 virtual void
140 };
141
142
147 {
148 public:
150 const std::shared_ptr<const Utilities::MPI::Partitioner>
151 &partitioner);
152
153 virtual ~PartitionerWrapper() = default;
154
155 unsigned int
156 locally_owned_size() const override;
157
158 unsigned int
159 n_ghost_indices() const override;
160
161 unsigned int
162 n_import_indices() const override;
163
164 unsigned int
165 n_import_sm_procs() const override;
166
168 size() const override;
169
170 void
172 const unsigned int communication_channel,
174 const std::vector<ArrayView<const double>> &shared_arrays,
177 std::vector<MPI_Request> &requests) const override;
178
179 void
182 const std::vector<ArrayView<const double>> &shared_arrays,
184 std::vector<MPI_Request> &requests) const override;
185
186 void
189 const unsigned int communication_channel,
191 const std::vector<ArrayView<const double>> &shared_arrays,
194 std::vector<MPI_Request> &requests) const override;
195
196 void
200 const std::vector<ArrayView<const double>> &shared_arrays,
203 std::vector<MPI_Request> &requests) const override;
204
205 void
206 reset_ghost_values(const ArrayView<double> &ghost_array) const override;
207
208 void
210 const unsigned int communication_channel,
212 const std::vector<ArrayView<const float>> &shared_arrays,
215 std::vector<MPI_Request> &requests) const override;
216
217 void
220 const std::vector<ArrayView<const float>> &shared_arrays,
222 std::vector<MPI_Request> &requests) const override;
223
224 void
227 const unsigned int communication_channel,
229 const std::vector<ArrayView<const float>> &shared_arrays,
232 std::vector<MPI_Request> &requests) const override;
233
234 void
238 const std::vector<ArrayView<const float>> &shared_arrays,
241 std::vector<MPI_Request> &requests) const override;
242
243 void
244 reset_ghost_values(const ArrayView<float> &ghost_array) const override;
245
246 private:
247 template <typename Number>
248 void
250
251 const std::shared_ptr<const Utilities::MPI::Partitioner> partitioner;
252 };
253
254
255
261 class Full : public Base
262 {
263 public:
264 Full(
265 const std::shared_ptr<const Utilities::MPI::Partitioner> &partitioner,
266 const MPI_Comm communicator_sm);
267
268 unsigned int
269 locally_owned_size() const override;
270
271 unsigned int
272 n_ghost_indices() const override;
273
274 unsigned int
275 n_import_indices() const override;
276
277 virtual unsigned int
278 n_import_sm_procs() const override;
279
281 size() const override;
282
285
286 void
288 const unsigned int communication_channel,
290 const std::vector<ArrayView<const double>> &shared_arrays,
293 std::vector<MPI_Request> &requests) const override;
294
295 void
298 const std::vector<ArrayView<const double>> &shared_arrays,
300 std::vector<MPI_Request> &requests) const override;
301
302 void
305 const unsigned int communication_channel,
307 const std::vector<ArrayView<const double>> &shared_arrays,
310 std::vector<MPI_Request> &requests) const override;
311
312 void
316 const std::vector<ArrayView<const double>> &shared_arrays,
319 std::vector<MPI_Request> &requests) const override;
320
321 void
322 reset_ghost_values(const ArrayView<double> &ghost_array) const override;
323
324 void
326 const unsigned int communication_channel,
328 const std::vector<ArrayView<const float>> &shared_arrays,
331 std::vector<MPI_Request> &requests) const override;
332
333 void
336 const std::vector<ArrayView<const float>> &shared_arrays,
338 std::vector<MPI_Request> &requests) const override;
339
340 void
343 const unsigned int communication_channel,
345 const std::vector<ArrayView<const float>> &shared_arrays,
348 std::vector<MPI_Request> &requests) const override;
349
350 void
354 const std::vector<ArrayView<const float>> &shared_arrays,
357 std::vector<MPI_Request> &requests) const override;
358
359 void
360 reset_ghost_values(const ArrayView<float> &ghost_array) const override;
361
362 private:
363 template <typename Number>
364 void
366 const unsigned int communication_channel,
368 const std::vector<ArrayView<const Number>> &shared_arrays,
371 std::vector<MPI_Request> &requests) const;
372
373 template <typename Number>
374 void
377 const std::vector<ArrayView<const Number>> &shared_arrays,
379 std::vector<MPI_Request> &requests) const;
380
381 template <typename Number>
382 void
385 const unsigned int communication_channel,
387 const std::vector<ArrayView<const Number>> &shared_arrays,
390 std::vector<MPI_Request> &requests) const;
391
392 template <typename Number>
393 void
397 const std::vector<ArrayView<const Number>> &shared_arrays,
400 std::vector<MPI_Request> &requests) const;
401
402 template <typename Number>
403 void
405
406 private:
411
416
420 const unsigned int n_local_elements;
421
425 const unsigned int n_ghost_elements;
426
431
437
442 std::pair<std::vector<unsigned int>,
443 std::vector<std::pair<unsigned int, unsigned int>>>
445
450 std::vector<std::array<unsigned int, 3>> ghost_targets_data;
451
458 std::vector<std::array<unsigned int, 3>> import_targets_data;
459
468 std::pair<std::vector<unsigned int>,
469 std::vector<std::pair<unsigned int, unsigned int>>>
471
476 std::vector<unsigned int> sm_ghost_ranks;
477
482 std::pair<std::vector<unsigned int>,
483 std::vector<std::pair<unsigned int, unsigned int>>>
485
490 std::pair<std::vector<unsigned int>,
491 std::vector<std::pair<unsigned int, unsigned int>>>
493
498 std::vector<unsigned int> sm_import_ranks;
499
504 std::pair<std::vector<unsigned int>,
505 std::vector<std::pair<unsigned int, unsigned int>>>
507
512 std::pair<std::vector<unsigned int>,
513 std::vector<std::pair<unsigned int, unsigned int>>>
515 };
516
517 } // namespace VectorDataExchange
518 } // end of namespace MatrixFreeFunctions
519} // end of namespace internal
520
522
523#endif
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 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 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
void reset_ghost_values(const ArrayView< double > &ghost_array) const override
std::vector< std::array< unsigned int, 3 > > ghost_targets_data
std::pair< std::vector< unsigned int >, std::vector< std::pair< unsigned int, unsigned int > > > sm_export_data_this
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
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_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
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
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
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
void reset_ghost_values(const ArrayView< double > &ghost_array) 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
Definition config.h:502
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:503