Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_AlgPartition.H
Go to the documentation of this file.
1#ifndef AMREX_ALG_PARTITION_H_
2#define AMREX_ALG_PARTITION_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_INT.H>
7#include <AMReX_Vector.H>
8
9#include <memory>
10
11namespace amrex {
12
21{
22public:
24 AlgPartition ();
26 explicit AlgPartition (Long global_size);
28 explicit AlgPartition (Vector<Long> const& rows);
30 explicit AlgPartition (Vector<Long>&& rows) noexcept;
31
33 void define (Long global_size);
35 void define (Vector<Long> const& rows);
37 void define (Vector<Long>&& rows);
38
40 [[nodiscard]] bool empty () const { return m_ref->m_row.empty(); }
41
43 [[nodiscard]] Long operator[] (int i) const { return m_ref->m_row[i]; }
47 [[nodiscard]] Long numGlobalRows () const { return m_ref->m_row.back(); }
49 [[nodiscard]] int numActiveProcs () const { return m_ref->m_n_active_procs; }
50
52 [[nodiscard]] Vector<Long> const& dataVector () const { return m_ref->m_row; }
53
55 [[nodiscard]] bool operator== (AlgPartition const& rhs) const noexcept;
57 [[nodiscard]] bool operator!= (AlgPartition const& rhs) const noexcept;
58
59private:
60 struct Ref
61 {
62 friend class AlgPartition;
63 Ref () = default;
64 explicit Ref (Long global_size);
65 explicit Ref (Vector<Long> const& rows);
66 explicit Ref (Vector<Long>&& rows);
67 void define (Long global_size);
68 void define (Vector<Long> const& rows);
69 void define (Vector<Long>&& rows);
70 void update_n_active_procs ();
71
72 Vector<Long> m_row; // size: nprocs + 1
73 int m_n_active_procs = 0;
74 };
75
76 std::shared_ptr<Ref> m_ref;
77};
78
79}
80
81#endif
Definition AMReX_AlgPartition.H:21
Long numGlobalRows() const
Total number of rows covered by the partition.
Definition AMReX_AlgPartition.H:47
AlgPartition()
Construct an empty partition that must be defined later.
Definition AMReX_AlgPartition.cpp:5
int numActiveProcs() const
Number of MPI ranks that own at least one row.
Definition AMReX_AlgPartition.H:49
bool operator==(AlgPartition const &rhs) const noexcept
Compare partitions for identical layouts.
Definition AMReX_AlgPartition.cpp:36
bool empty() const
True if the partition contains no rows.
Definition AMReX_AlgPartition.H:40
Vector< Long > const & dataVector() const
Underlying prefix array describing row offsets (size nproc+1).
Definition AMReX_AlgPartition.H:52
void define(Long global_size)
Recompute an even partition spanning global_size rows.
Definition AMReX_AlgPartition.cpp:21
bool operator!=(AlgPartition const &rhs) const noexcept
Negation of operator==.
Definition AMReX_AlgPartition.cpp:41
Long operator[](int i) const
Starting global row index owned by rank i.
Definition AMReX_AlgPartition.H:43
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:28
amrex_long Long
Definition AMReX_INT.H:30
Definition AMReX_Amr.cpp:49