Block-Structured AMR Software Framework
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
AMReX_iMultiFab.H
Go to the documentation of this file.
1
2#ifndef BL_IMULTIFAB_H
3#define BL_IMULTIFAB_H
4#include <AMReX_Config.H>
5
6#include <AMReX_BLassert.H>
7#include <AMReX_IArrayBox.H>
8#include <AMReX_FabArray.H>
10#include <AMReX_Geometry.H>
11#include <memory>
12
13namespace amrex {
14
15/*
16* A Collection of IArrayBoxes
17*
18* The iMultiFab class is publicly derived from the
19* FabArray<int,IArrayBox> class. It is a collection (stored as an array) of
20* IArrayBoxes useful for storing integer data on a domain defined by
21* a union of rectangular regions embedded in a uniform index space. The
22* iMultiFab class extends the function of the underlying FabArray class just
23* as the IArrayBox class extends the function of BaseFab<int>. Additional
24* member functions are defined for I/O and simple arithmetic operations on
25* these aggregate objects.
26*
27* This class does NOT provide a copy constructor or assignment operator.
28*/
30 :
31 public FabArray<IArrayBox>
32{
33public:
34
40 iMultiFab () noexcept = default;
41
49 explicit iMultiFab (Arena* a) noexcept;
50
55 iMultiFab (const BoxArray& bxs,
56 const DistributionMapping& dm,
57 int ncomp,
58 int ngrow,
59#ifdef AMREX_STRICT_MODE
60 const MFInfo& info,
61 const FabFactory<IArrayBox>& factory);
62#else
63 const MFInfo& info = MFInfo(),
65#endif
66
67 iMultiFab (const BoxArray& bxs,
68 const DistributionMapping& dm,
69 int ncomp,
70 const IntVect& ngrow,
71#ifdef AMREX_STRICT_MODE
72 const MFInfo& info,
73 const FabFactory<IArrayBox>& factory);
74#else
75 const MFInfo& info = MFInfo(),
77#endif
78
90 iMultiFab (const iMultiFab& rhs, MakeType maketype, int scomp, int ncomp);
91
92 ~iMultiFab () = default;
93
94 iMultiFab (iMultiFab&& rhs) noexcept = default;
95 iMultiFab& operator= (iMultiFab&& rhs) noexcept = default;
96
97 iMultiFab (const iMultiFab& rhs) = delete;
98 iMultiFab& operator= (const iMultiFab& rhs) = delete;
99
100 iMultiFab& operator= (int r);
101
112 [[nodiscard]] int min (int comp,
113 int nghost = 0,
114 bool local = false) const;
115
125 [[nodiscard]] int min (const Box& region,
126 int comp,
127 int nghost = 0,
128 bool local = false) const;
129
140 [[nodiscard]] int max (int comp,
141 int nghost = 0,
142 bool local = false) const;
143
153 [[nodiscard]] int max (const Box& region,
154 int comp,
155 int nghost = 0,
156 bool local = false) const;
157
165 [[nodiscard]] Long sum (int comp, int nghost = 0, bool local = false) const;
166
170 [[nodiscard]] Long sum (Box const& region, int comp = 0, bool local = false) const;
171
185 void plus (int val,
186 int comp,
187 int num_comp,
188 int nghost = 0);
189
201 void plus (int val,
202 const Box& region,
203 int comp,
204 int num_comp,
205 int nghost = 0);
206
216 void plus (int val,
217 int nghost);
218
230 void plus (int val,
231 const Box& region,
232 int nghost);
233
247 void mult (int val,
248 int comp,
249 int num_comp,
250 int nghost = 0);
251
265 void mult (int val,
266 const Box& region,
267 int comp,
268 int num_comp,
269 int nghost = 0);
270
280 void mult (int val,
281 int nghost = 0);
282
294 void mult (int val,
295 const Box& region,
296 int nghost = 0);
297
309 void negate (int comp,
310 int num_comp,
311 int nghost = 0);
312
323 void negate (const Box& region,
324 int comp,
325 int num_comp,
326 int nghost = 0);
327
335 void negate (int nghost = 0);
336
346 void negate (const Box& region,
347 int nghost = 0);
348
349 [[nodiscard]] IntVect minIndex (int comp,
350 int nghost = 0) const;
351
352 [[nodiscard]] IntVect maxIndex (int comp,
353 int nghost = 0) const;
354
369 void plus (const iMultiFab& mf,
370 int strt_comp,
371 int num_comp,
372 int nghost);
373
388 void minus (const iMultiFab& mf,
389 int strt_comp,
390 int num_comp,
391 int nghost);
392
408 void divide (const iMultiFab& mf,
409 int strt_comp,
410 int num_comp,
411 int nghost);
412
424 static void Add (iMultiFab& dst,
425 const iMultiFab& src,
426 int srccomp,
427 int dstcomp,
428 int numcomp,
429 int nghost);
430
442 static void Copy (iMultiFab& dst,
443 const iMultiFab& src,
444 int srccomp,
445 int dstcomp,
446 int numcomp,
447 int nghost);
448
449 static void Copy (iMultiFab& dst,
450 const iMultiFab& src,
451 int srccomp,
452 int dstcomp,
453 int numcomp,
454 const IntVect& nghost);
455
467 static void Subtract (iMultiFab& dst,
468 const iMultiFab& src,
469 int srccomp,
470 int dstcomp,
471 int numcomp,
472 int nghost);
473
485 static void Multiply (iMultiFab& dst,
486 const iMultiFab& src,
487 int srccomp,
488 int dstcomp,
489 int numcomp,
490 int nghost);
491
503 static void Divide (iMultiFab& dst,
504 const iMultiFab& src,
505 int srccomp,
506 int dstcomp,
507 int numcomp,
508 int nghost);
509
510 void define (const BoxArray& bxs,
511 const DistributionMapping& dm,
512 int nvar,
513 const IntVect& ngrow,
514#ifdef AMREX_STRICT_MODE
515 const MFInfo& info,
516 const FabFactory<IArrayBox>& factory);
517#else
518 const MFInfo& info = MFInfo(),
520#endif
521
522 void define (const BoxArray& bxs,
523 const DistributionMapping& dm,
524 int nvar,
525 int ngrow,
526#ifdef AMREX_STRICT_MODE
527 const MFInfo& info,
528 const FabFactory<IArrayBox>& factory);
529#else
530 const MFInfo& info = MFInfo(),
532#endif
533
534 static void Initialize ();
535 static void Finalize ();
536};
537
538// ngrow != IntVect{0} is a special case that should not be used in normal cases,
539// because it may mark valid cells as non-owner and ghost cells as owners.
540std::unique_ptr<iMultiFab>
541OwnerMask (FabArrayBase const& mf, const Periodicity& period, const IntVect& ngrow=IntVect{0});
542
543}
544
545#endif /*BL_IMULTIFAB_H*/
A virtual base class for objects that manage their own dynamic memory allocation.
Definition AMReX_Arena.H:100
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:550
Definition AMReX_FabFactory.H:76
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:41
Base class for FabArray.
Definition AMReX_FabArrayBase.H:41
An Array of FortranArrayBox(FAB)-like Objects.
Definition AMReX_FabArray.H:344
Definition AMReX_FabFactory.H:50
This provides length of period for periodic domains. 0 means it is not periodic in that direction....
Definition AMReX_Periodicity.H:17
Definition AMReX_iMultiFab.H:32
static void Initialize()
Definition AMReX_iMultiFab.cpp:148
IntVect maxIndex(int comp, int nghost=0) const
Definition AMReX_iMultiFab.cpp:519
void define(const BoxArray &bxs, const DistributionMapping &dm, int nvar, const IntVect &ngrow, const MFInfo &info=MFInfo(), const FabFactory< IArrayBox > &factory=DefaultFabFactory< IArrayBox >())
Definition AMReX_iMultiFab.cpp:202
int max(int comp, int nghost=0, bool local=false) const
Returns the maximum value contained in component comp of the iMultiFab. The parameter nghost determin...
Definition AMReX_iMultiFab.cpp:308
Long sum(int comp, int nghost=0, bool local=false) const
Returns the sum in component comp.
Definition AMReX_iMultiFab.cpp:392
static void Finalize()
Definition AMReX_iMultiFab.cpp:158
int min(int comp, int nghost=0, bool local=false) const
Returns the minimum value contained in component comp of the iMultiFab. The parameter nghost determin...
Definition AMReX_iMultiFab.cpp:224
iMultiFab() noexcept=default
Constructs an empty iMultiFab. Data can be defined at a later time using the define member functions ...
iMultiFab & operator=(iMultiFab &&rhs) noexcept=default
static void Subtract(iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
Subtract src from dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying ...
Definition AMReX_iMultiFab.cpp:67
IntVect minIndex(int comp, int nghost=0) const
Definition AMReX_iMultiFab.cpp:511
iMultiFab(iMultiFab &&rhs) noexcept=default
void minus(const iMultiFab &mf, int strt_comp, int num_comp, int nghost)
This function subtracts the values of the cells in mf from the corresponding cells of this iMultiFab....
Definition AMReX_iMultiFab.cpp:527
static void Add(iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
Add src to dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArra...
Definition AMReX_iMultiFab.cpp:24
static void Divide(iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
Divide dst by src including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxA...
Definition AMReX_iMultiFab.cpp:97
void plus(int val, int comp, int num_comp, int nghost=0)
Adds the scalar value val to the value of each cell in the specified subregion of the iMultiFab....
Definition AMReX_iMultiFab.cpp:545
~iMultiFab()=default
void divide(const iMultiFab &mf, int strt_comp, int num_comp, int nghost)
This function divides the values of the cells in mf from the corresponding cells of this iMultiFab....
Definition AMReX_iMultiFab.cpp:536
static void Multiply(iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
Multiply dst by src including nghost ghost cells. The two iMultiFabs MUST have the same underlying Bo...
Definition AMReX_iMultiFab.cpp:82
void negate(int comp, int num_comp, int nghost=0)
Negates the value of each cell in the specified subregion of the iMultiFab. The subregion consists of...
Definition AMReX_iMultiFab.cpp:614
void mult(int val, int comp, int num_comp, int nghost=0)
Scales the value of each cell in the specified subregion of the iMultiFab by the scalar val (a[i] <- ...
Definition AMReX_iMultiFab.cpp:587
iMultiFab(const iMultiFab &rhs)=delete
static void Copy(iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
Copy from src to dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying B...
Definition AMReX_iMultiFab.cpp:39
Definition AMReX_Amr.cpp:49
MakeType
Definition AMReX_MakeType.H:7
std::unique_ptr< iMultiFab > OwnerMask(FabArrayBase const &mf, const Periodicity &period, const IntVect &ngrow)
Definition AMReX_iMultiFab.cpp:637
FabArray memory allocation information.
Definition AMReX_FabArray.H:66