4#include <AMReX_Config.H>
78 FAB const& operator[] (const
MFIter& mfi) const noexcept {
return m_mf[mfi]; }
117 [[nodiscard]]
Box fabbox (
int K)
const noexcept {
return m_mf.fabbox(K); }
120 [[nodiscard]]
int size () const noexcept {
return m_mf.size(); }
127 {
return m_mf.DistributionMap(); }
130 [[nodiscard]] MF &
multiFab () noexcept {
return m_mf; }
133 [[nodiscard]] MF
const&
multiFab () const noexcept {
return m_mf; }
136 [[nodiscard]]
int nComp () const noexcept {
return m_mf.nComp(); }
188 bool deterministic =
false);
200 void copyTo (MF& dest,
int ngrow,
int scomp,
int dcomp,
int ncomp,
213 void plusTo (MF& dest,
int ngrow,
int scomp,
int dcomp,
int ncomp,
233 int scomp,
int dcomp,
int ncomp);
250 int dcomp,
int ncomp,
int ngrow);
257 void write (
const std::string& name)
const;
264 void read (
const std::string& name);
283 template <
typename MF>
288template <
typename MF>
290 : m_mf(grids,dmap,ncomp,0)
293template <
typename MF>
297 m_mf.define(grids, dm, ncomp, 0);
300template <
typename MF>
306#pragma omp parallel if (Gpu::notInLaunchRegion())
309 const Box& bx = fsi.validbox();
310 auto const srcfab = src.
array(fsi);
311 auto dstfab = this->array(fsi);
314 dstfab(i,j,k,n+dcomp) = srcfab(i,j,k,n+scomp);
318 m_mf.ParallelCopy(src.m_mf,scomp,dcomp,ncomp);
323template <
typename MF>
329 m_mf.ParallelCopy(src,scomp,dcomp,ncomp,ngrow,0,period);
333template <
typename MF>
339#pragma omp parallel if (Gpu::notInLaunchRegion())
342 const Box& bx = fsi.validbox();
343 auto const srcfab = src.
array(fsi);
344 auto dstfab = this->array(fsi);
347 dstfab(i,j,k,n+dcomp) += srcfab(i,j,k,n+scomp);
351 amrex::Abort(
"FabSetT<MF>::plusFrom: parallel plusFrom not supported");
356template <
typename MF>
362 m_mf.ParallelCopy(src,scomp,dcomp,ncomp,
IntVect(ngrow),
IntVect(0),period,
367template <
typename MF>
373 dest.ParallelCopy(m_mf,scomp,dcomp,ncomp,0,ngrow,period);
376template <
typename MF>
385template <
typename MF>
389 const int ncomp =
nComp();
391#pragma omp parallel if (Gpu::notInLaunchRegion())
394 const Box& bx = fsi.validbox();
395 auto fab = this->array(fsi);
403template <
typename MF>
408#pragma omp parallel if (Gpu::notInLaunchRegion())
411 const Box& bx = fsi.validbox();
412 auto fab = this->array(fsi);
415 fab(i,j,k,n+comp) = val;
422template <
typename MF>
425 int scomp,
int dcomp,
int ncomp)
430#pragma omp parallel if (Gpu::notInLaunchRegion())
434 const Box& bx = fsi.validbox();
435 auto const srcfab = src.
array(fsi);
436 auto dstfab = this->array(fsi);
439 dstfab(i,j,k,n+dcomp) = a*dstfab(i,j,k,n+dcomp) + b*srcfab(i,j,k,n+scomp);
447template <
typename MF>
451 int dcomp,
int ncomp,
int ngrow)
454 BL_ASSERT(mfa.nGrowVect().allGE(ngrow) && mfb.nGrowVect().allGE(ngrow));
455 BL_ASSERT(mfa.boxArray() == mfb.boxArray());
464#pragma omp parallel if (Gpu::notInLaunchRegion())
468 const Box& bx = mfi.validbox();
469 auto afab = bdrya.array(mfi);
470 auto bfab = bdryb.array(mfi);
473 afab(i,j,k,n) = huge;
474 bfab(i,j,k,n) = huge;
478 bdrya.ParallelCopy(mfa,a_comp,0,ncomp,ngrow,0);
479 bdryb.ParallelCopy(mfb,b_comp,0,ncomp,ngrow,0);
482#pragma omp parallel if (Gpu::notInLaunchRegion())
486 const Box& bx = fsi.validbox();
487 auto const afab = bdrya.array(fsi);
488 auto const bfab = bdryb.array(fsi);
489 auto dfab = this->array(fsi);
492 dfab(i,j,k,n+dcomp) = a*afab(i,j,k,n) + b*bfab(i,j,k,n);
499template <
typename MF>
510template <
typename MF>
520template <
typename MF>
526 int ncomp = dst.
nComp();
528#pragma omp parallel if (Gpu::notInLaunchRegion())
531 const Box& bx = fsi.validbox();
532 auto const srcfab = src.
array(fsi);
533 auto dstfab = dst.
array(fsi);
536 dstfab(i,j,k,n) = srcfab(i,j,k,n);
#define BL_PROFILE(a)
Definition AMReX_BLProfiler.H:551
#define BL_ASSERT(EX)
Definition AMReX_BLassert.H:39
#define AMREX_HOST_DEVICE_PARALLEL_FOR_4D(...)
Definition AMReX_GpuLaunchMacrosC.nolint.H:111
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:568
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:43
@ ADD
Definition AMReX_FabArrayBase.H:394
Convenience iterator that reuses MFIter semantics for FabSet traversal.
Definition AMReX_FabSet.H:281
FabSetIter(const FabSetT< MF > &fs)
Definition AMReX_FabSet.H:284
A FabSet is a group of FArrayBox's. The grouping is designed specifically to represent regions along ...
Definition AMReX_FabSet.H:51
Array4< value_type const > const_array(const MFIter &mfi) const noexcept
Return a const Array4 view for iterator mfi.
Definition AMReX_FabSet.H:102
MultiArray4< value_type const > arrays() const noexcept
Return multi-fab const Array4 views to every FAB.
Definition AMReX_FabSet.H:108
int nComp() const noexcept
Number of components carried by each FAB.
Definition AMReX_FabSet.H:136
Array4< value_type const > const_array(int i) const noexcept
Return a const Array4 view for FAB index i.
Definition AMReX_FabSet.H:105
MF & multiFab() noexcept
Mutable access to the underlying MultiFab.
Definition AMReX_FabSet.H:130
Array4< value_type const > array(int i) const noexcept
Return an Array4 view for FAB index i (const).
Definition AMReX_FabSet.H:96
static void Copy(FabSetT< MF > &dst, const FabSetT< MF > &src)
Local copy function.
Definition AMReX_FabSet.H:522
FabSetT< MF > & copyFrom(const FabSetT< MF > &src, int scomp, int dcomp, int ncomp)
Copy components from another FabSet with identical layout.
Definition AMReX_FabSet.H:302
FabSetT< MF > & plusFrom(const FabSetT< MF > &src, int scomp, int dcomp, int ncomp)
Accumulate data from another FabSet with identical layout.
Definition AMReX_FabSet.H:335
void read(const std::string &name)
Read (used for reading from checkpoint).
Definition AMReX_FabSet.H:512
void clear()
Release storage and reset the internal MultiFab.
Definition AMReX_FabSet.H:139
FAB const & operator[](const MFIter &mfi) const noexcept
Access the FAB referenced by iterator mfi (const).
Definition AMReX_FabSet.H:78
void plusTo(MF &dest, int ngrow, int scomp, int dcomp, int ncomp, const Periodicity &period=Periodicity::NonPeriodic()) const
Add this boundary data back into a MultiFab.
Definition AMReX_FabSet.H:378
MultiArray4< value_type > arrays() noexcept
Return multi-fab mutable Array4 views to every FAB.
Definition AMReX_FabSet.H:111
FabSetT< MF > & linComb(value_type a, value_type b, const FabSetT< MF > &src, int scomp, int dcomp, int ncomp)
Linear combination: this := a*this + b*src.
Definition AMReX_FabSet.H:424
Box fabbox(int K) const noexcept
Get the bounding Box of FAB index K.
Definition AMReX_FabSet.H:117
Array4< value_type > array(int i) noexcept
Return an Array4 view for FAB index i (mutable).
Definition AMReX_FabSet.H:99
MultiArray4< value_type const > const_arrays() const noexcept
Return multi-fab const Array4 views (alias of arrays()).
Definition AMReX_FabSet.H:114
const BoxArray & boxArray() const noexcept
Return the BoxArray defining FAB locations.
Definition AMReX_FabSet.H:123
void write(const std::string &name) const
Write (used for writing to checkpoint).
Definition AMReX_FabSet.H:501
FabSetT() noexcept=default
The default constructor – you must later call define().
typename FabDataType< MF >::value_type value_type
Definition AMReX_FabSet.H:55
void setVal(value_type val)
Fill every component of every FAB with scalar value val.
Definition AMReX_FabSet.H:387
int size() const noexcept
Return number of FABs stored in this set.
Definition AMReX_FabSet.H:120
Array4< value_type const > array(const MFIter &mfi) const noexcept
Return an Array4 view for iterator mfi (const).
Definition AMReX_FabSet.H:90
typename FabDataType< MF >::fab_type FAB
Definition AMReX_FabSet.H:56
Array4< value_type > array(const MFIter &mfi) noexcept
Return an Array4 view for iterator mfi (mutable).
Definition AMReX_FabSet.H:93
const DistributionMapping & DistributionMap() const noexcept
Return the DistributionMapping describing FAB ownership.
Definition AMReX_FabSet.H:126
void define(const BoxArray &grids, const DistributionMapping &dmap, int ncomp)
Define a FabSetT<MF> constructed via default constructor on grids/dmap with ncomp components.
Definition AMReX_FabSet.H:295
MF const & multiFab() const noexcept
Const access to the underlying MultiFab.
Definition AMReX_FabSet.H:133
void copyTo(MF &dest, int ngrow, int scomp, int dcomp, int ncomp, const Periodicity &period=Periodicity::NonPeriodic()) const
Copy data from this boundary set back into a MultiFab.
Definition AMReX_FabSet.H:369
Flux Register.
Definition AMReX_FluxRegister.H:25
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:85
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition AMReX_MFIter.H:169
This provides length of period for periodic domains. 0 means it is not periodic in that direction....
Definition AMReX_Periodicity.H:17
static const Periodicity & NonPeriodic() noexcept
Definition AMReX_Periodicity.cpp:52
static void Read(FabArray< FArrayBox > &mf, const std::string &name, const char *faHeader=nullptr, int coordinatorProc=ParallelDescriptor::IOProcessorNumber(), int allow_empty_mf=0)
Read a FabArray<FArrayBox> from disk written using VisMF::Write(). If the FabArray<FArrayBox> fafab h...
Definition AMReX_VisMF.cpp:1583
static Long Write(const FabArray< FArrayBox > &mf, const std::string &name, VisMF::How how=NFiles, bool set_ghost=false)
Write a FabArray<FArrayBox> to disk in a "smart" way. Returns the total number of bytes written on th...
Definition AMReX_VisMF.cpp:979
static void AsyncWrite(const FabArray< FArrayBox > &mf, const std::string &mf_name, bool valid_cells_only=false)
Definition AMReX_VisMF.cpp:2314
bool UseAsyncOut()
Definition AMReX_AsyncOut.cpp:70
Definition AMReX_Amr.cpp:49
int nComp(FabArrayBase const &fa)
Definition AMReX_FabArrayBase.cpp:2851
DistributionMapping const & DistributionMap(FabArrayBase const &fa)
Definition AMReX_FabArrayBase.cpp:2866
bool match(const BoxArray &x, const BoxArray &y)
Note that two BoxArrays that match are not necessarily equal.
Definition AMReX_BoxArray.cpp:1934
IntVectND< 3 > IntVect
IntVect is an alias for amrex::IntVectND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:33
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition AMReX.cpp:240
BoxArray const & boxArray(FabArrayBase const &fa)
Definition AMReX_FabArrayBase.cpp:2861
A multidimensional array accessor.
Definition AMReX_Array4.H:283
Definition AMReX_FabDataType.H:9
FabArray memory allocation information.
Definition AMReX_FabArray.H:66
Definition AMReX_FabArray.H:153