Block-Structured AMR Software Framework
 
Loading...
Searching...
No Matches
AMReX_LayoutData.H
Go to the documentation of this file.
1#ifndef AMREX_LayoutData_H_
2#define AMREX_LayoutData_H_
3#include <AMReX_Config.H>
4
6#include <AMReX_MFIter.H>
7
8namespace amrex
9{
11 template <class T>
13 {
14 public:
15
17 LayoutData() = default;
18
19 LayoutData(const BoxArray & a_grids,
20 const DistributionMapping & a_dm)
21 {
22 define(a_grids, a_dm);
23 }
24
25 void define(const BoxArray & a_grids,
26 const DistributionMapping & a_dm)
27 {
28 FabArrayBase::define(a_grids, a_dm, 1, 0);
29 m_need_to_clear_bd = true;
30 addThisBD();
31 m_data.resize(local_size());
32 }
33
35
36 LayoutData (const LayoutData& rhs) noexcept
37 : FabArrayBase(rhs),
38 m_data(rhs.m_data),
39 m_need_to_clear_bd(rhs.m_need_to_clear_bd)
40 {
42 }
43
44 LayoutData (LayoutData&& rhs) noexcept
45 : FabArrayBase(static_cast<FabArrayBase&&>(rhs)),
46 m_data(std::move(rhs.m_data)),
47 m_need_to_clear_bd(rhs.m_need_to_clear_bd)
48 {
49 rhs.m_need_to_clear_bd = false;
50 }
51
52 LayoutData& operator= (const LayoutData& rhs) noexcept
53 {
54 if (&rhs != this)
55 {
56 m_data.clear();
58
60 m_data = rhs.m_data;
61 m_need_to_clear_bd = rhs.m_need_to_clear_bd;
62
64 }
65 return *this;
66 }
67
69 {
70 if (&rhs != this)
71 {
72 m_data.clear();
74
75 FabArrayBase::operator=(static_cast<FabArrayBase&&>(rhs));
76 m_data = std::move(rhs.m_data);
77 m_need_to_clear_bd = rhs.m_need_to_clear_bd;
78
79 rhs.m_need_to_clear_bd = false;
80 }
81 return *this;
82 }
83
84 T& operator[](const MFIter& a_mfi) noexcept
85 {
86 int local_index = a_mfi.LocalIndex();
87 BL_ASSERT(local_index >= 0 && local_index < m_data.size() &&
88 DistributionMap() == a_mfi.DistributionMap());
89 return m_data[local_index];
90 }
91
92
93 const T& operator[](const MFIter& a_mfi) const noexcept
94 {
95 int local_index = a_mfi.LocalIndex();
96 BL_ASSERT(local_index >= 0 && local_index < m_data.size() &&
97 DistributionMap() == a_mfi.DistributionMap());
98 return m_data[local_index];
99 }
100
101 T& operator[](int a_box_index) noexcept
102 {
103 int local_index = this->localindex(a_box_index);
104 BL_ASSERT(local_index >= 0 && local_index < m_data.size());
105 return m_data[local_index];
106 }
107
108
109 const T& operator[](int a_box_index) const noexcept
110 {
111 int local_index = this->localindex(a_box_index);
112 BL_ASSERT(local_index >= 0 && local_index < m_data.size());
113 return m_data[local_index];
114 }
115
116 const T* data () const noexcept { return m_data.data(); }
117 T* data () noexcept { return m_data.data(); }
118
119 private:
121 bool m_need_to_clear_bd = false;
122 };
123}
124#endif
#define BL_ASSERT(EX)
Definition AMReX_BLassert.H:39
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:550
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:41
Base class for FabArray.
Definition AMReX_FabArrayBase.H:41
void clearThisBD(bool no_assertion=false) const
clear BD count and caches associated with this BD, if no other is using this BD.
FabArrayBase()=default
void addThisBD()
add the current BD into BD count database
FabArrayBase & operator=(const FabArrayBase &rhs)=default
void define(const BoxArray &bxs, const DistributionMapping &dm, int nvar, int ngrow)
int localindex(int K) const noexcept
Return local index in the vector of FABs.
Definition AMReX_FabArrayBase.H:118
const DistributionMapping & DistributionMap() const noexcept
Return constant reference to associated DistributionMapping.
Definition AMReX_FabArrayBase.H:130
int local_size() const noexcept
Return the number of local FABs in the FabArray.
Definition AMReX_FabArrayBase.H:112
a one-thingy-per-box distributed object
Definition AMReX_LayoutData.H:13
LayoutData(LayoutData &&rhs) noexcept
Definition AMReX_LayoutData.H:44
T * data() noexcept
Definition AMReX_LayoutData.H:117
Vector< T > m_data
Definition AMReX_LayoutData.H:120
bool m_need_to_clear_bd
Definition AMReX_LayoutData.H:121
LayoutData()=default
LayoutData & operator=(const LayoutData &rhs) noexcept
Definition AMReX_LayoutData.H:52
const T * data() const noexcept
Definition AMReX_LayoutData.H:116
~LayoutData()
Definition AMReX_LayoutData.H:34
LayoutData(const LayoutData &rhs) noexcept
Definition AMReX_LayoutData.H:36
void define(const BoxArray &a_grids, const DistributionMapping &a_dm)
Definition AMReX_LayoutData.H:25
T & operator[](int a_box_index) noexcept
Definition AMReX_LayoutData.H:101
const T & operator[](int a_box_index) const noexcept
Definition AMReX_LayoutData.H:109
LayoutData(const BoxArray &a_grids, const DistributionMapping &a_dm)
Definition AMReX_LayoutData.H:19
const T & operator[](const MFIter &a_mfi) const noexcept
Definition AMReX_LayoutData.H:93
T & operator[](const MFIter &a_mfi) noexcept
Definition AMReX_LayoutData.H:84
Definition AMReX_MFIter.H:57
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:27
Definition AMReX_Amr.cpp:49