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]; }
45 [[nodiscard]] Long numLocalRows () const {
46 int myproc = ParallelDescriptor::MyProc();
47 return m_ref->m_row[myproc+1] - m_ref->m_row[myproc];
48 }
50 [[nodiscard]] Long numGlobalRows () const { return m_ref->m_row.back(); }
52 [[nodiscard]] int numActiveProcs () const { return m_ref->m_n_active_procs; }
54 [[nodiscard]] int singleActiveProc () const { return m_ref->m_single_active_proc; }
55
57 [[nodiscard]] Long globalRowBegin () const {
58 return m_ref->m_row[ParallelDescriptor::MyProc()];
59 }
60
62 [[nodiscard]] Long globalRowEnd () const {
63 return m_ref->m_row[ParallelDescriptor::MyProc()+1];
64 }
65
67 [[nodiscard]] Vector<Long> const& dataVector () const { return m_ref->m_row; }
68
70 [[nodiscard]] bool operator== (AlgPartition const& rhs) const noexcept;
72 [[nodiscard]] bool operator!= (AlgPartition const& rhs) const noexcept;
73
74private:
75 struct Ref
76 {
77 friend class AlgPartition;
78 Ref () = default;
79 explicit Ref (Long global_size);
80 explicit Ref (Vector<Long> const& rows);
81 explicit Ref (Vector<Long>&& rows);
82 void define (Long global_size);
83 void define (Vector<Long> const& rows);
84 void define (Vector<Long>&& rows);
85 void update_n_active_procs ();
86
87 Vector<Long> m_row; // size: nprocs + 1
88 int m_n_active_procs = 0;
89 int m_single_active_proc = -1;
90 };
91
92 std::shared_ptr<Ref> m_ref;
93};
94
95}
96
97#endif
Definition AMReX_AlgPartition.H:21
Long numGlobalRows() const
Total number of rows covered by the partition.
Definition AMReX_AlgPartition.H:50
int singleActiveProc() const
The sole rank owning rows if numActiveProcs() is one, otherwise -1.
Definition AMReX_AlgPartition.H:54
AlgPartition()
Construct an empty partition that must be defined later.
Definition AMReX_AlgPartition.cpp:5
Long globalRowEnd() const
Exclusive global index end on this process.
Definition AMReX_AlgPartition.H:62
int numActiveProcs() const
Number of MPI ranks that own at least one row.
Definition AMReX_AlgPartition.H:52
bool operator==(AlgPartition const &rhs) const noexcept
Compare partitions for identical layouts.
Definition AMReX_AlgPartition.cpp:36
Long globalRowBegin() const
Inclusive global index begin on this process.
Definition AMReX_AlgPartition.H:57
bool empty() const
True if the partition contains no rows.
Definition AMReX_AlgPartition.H:40
Vector< Long > const & dataVector() const
Underlying array describing row offsets (size nproc+1).
Definition AMReX_AlgPartition.H:67
void define(Long global_size)
Recompute an even partition spanning global_size rows.
Definition AMReX_AlgPartition.cpp:21
Long numLocalRows() const
Number of local rows.
Definition AMReX_AlgPartition.H:45
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:29
amrex_long Long
Definition AMReX_INT.H:30
int MyProc() noexcept
Definition AMReX_ParallelDescriptor.H:128
Definition AMReX_Amr.cpp:50