1#ifndef AMREX_NONLOCAL_BC_H_
2#define AMREX_NONLOCAL_BC_H_
3#include <AMReX_Config.H>
16template <
typename T,
typename... Args>
17using Inverse_t =
decltype(std::declval<T>().Inverse(std::declval<Args>()...));
25template <
class IndexMap>
27 :
Conjunction<IsCallableR<Dim3, IndexMap&, const Dim3&>,
28 HasInverseMemFn<const IndexMap&>> {};
53 int iv[3]{i.
x, i.y, i.z};
55 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
58 return Dim3{.
x = iv_new[0], .y = iv_new[1], .z = iv_new[2]};
68 int iv_new[3]{i.
x, i.y, i.z};
70 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
74 return Dim3{.
x = iv[0], .y = iv[1], .z = iv[2]};
83 for (
int i = 0; i < AMREX_SPACEDIM; ++i) {
102template <
typename DTOS>
120template <
typename DTOS>
129 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
130 smallEnd[d] = std::min(mapped_smallEnd[d], mapped_bigEnd[d]);
131 bigEnd[d] = std::max(mapped_smallEnd[d], mapped_bigEnd[d]);
133 return Box{smallEnd, bigEnd, box.
ixType()};
145template <
typename DTOS>
151 Box srcbox =
Image([&dtos](
Dim3 d) {
return dtos(d); }, box);
169template <
typename DTOS>
170requires (HasInverseMemFn<DTOS>::value)
174 return Apply([&dtos](
Dim3 i) {
return dtos.Inverse(i); }, iv);
186template <
typename DTOS>
191 return Image([&dtos](
Dim3 i) {
return dtos.Inverse(i); }, box);
203template <
typename DTOS>
208 return Image([&dtos](
auto&& i) {
return dtos.Inverse(i); }, box);
212static_assert(IsIndexMapping<MultiBlockIndexMapping>(),
213 "MultiBlockIndexMapping is expected to satisfy IndexMapping");
229 template <
typename DTOS>
232 const IntVect& ngrow, DTOS
const& dtos);
237 template <
typename DTOS>
267 template <
typename DTOS>
279template <
typename P, BaseFabType FAB>
281 :
IsCallableR<typename FAB::value_type, P, Array4<const typename FAB::value_type>, Dim3, int>
298 template <
typename T>
300 noexcept(noexcept(array(i.
x, i.
y, i.
z, comp))) {
301 return array(i.
x, i.
y, i.
z, comp);
309static_assert(
sizeof(Identity) == 1 );
310static_assert(std::is_trivially_default_constructible_v<Identity> );
311static_assert(std::is_trivially_copy_assignable_v<Identity> );
312static_assert(std::is_trivially_copy_constructible_v<Identity> );
313static_assert(IsIndexMapping<Identity>() );
314static_assert(IsFabProjection<Identity, FArrayBox>() );
327 "Base needs to be a callable function: (Array4<const T>, Dim3, i) -> auto.");
330 "Map needs to be a callable function: int -> int.");
335 template <
typename T>
338 noexcept(
noexcept(
base(array, i,
map(comp))))
340 return base(array, i,
map(comp));
344static_assert(std::is_trivially_copy_assignable<MapComponents<Identity>>() );
345static_assert(std::is_trivially_copy_constructible<MapComponents<Identity>>() );
346static_assert(IsFabProjection<MapComponents<Identity>,
FArrayBox>() );
357 static_assert(I >= 0 && J >= 0,
"I >= 0 && J >= 0");
363 const int map[2] = {I, J};
364 return i == I || i == J ? map[std::size_t(i == I)] : i;
369 static_assert(I >= 0,
"I >= 0");
373 const int map[2] = {I, J};
374 return i == I || i == J ? map[std::size_t(i == I)] : i;
379 static_assert(J >= 0,
"J >= 0");
383 const int map[2] = {I, J};
384 return i == I || i == J ? map[std::size_t(i == I)] : i;
392 const int map[2] = {I, J};
393 return i == I || i == J ? map[std::size_t(i == I)] : i;
401static_assert(
sizeof(SwapComponents<0, 1>) == 1 );
403static_assert(
sizeof(SwapComponents<0, -1>) ==
sizeof(
int) );
404static_assert(
sizeof(SwapComponents<-1, 1>) ==
sizeof(
int) );
405static_assert(std::is_trivially_default_constructible<MapComponents<Identity, SwapComponents<0, 1>>>() );
406static_assert(std::is_trivially_copy_assignable<MapComponents<Identity, SwapComponents<0, 1>>>() );
407static_assert(std::is_trivially_copy_constructible<MapComponents<Identity, SwapComponents<0, 1>>>() );
408static_assert(IsFabProjection<MapComponents<Identity, SwapComponents<0, 1>>,
FArrayBox>() );
410static_assert(swap_indices<0, 1>(0) == 1 );
411static_assert(swap_indices<0, 1>(1) == 0 );
412static_assert(swap_indices<0, 1>(2) == 2 );
444 std::uint64_t
id = std::numeric_limits<std::uint64_t>::max();
451 int n_components, std::size_t object_size, std::size_t align);
474template <
typename... Args>
477template <
typename... Args>
480template <
typename... Args>
483template <
typename... Args>
486template <
typename... Args>
490#if defined(AMREX_USE_CUDA) && defined(_WIN32)
491template <
typename DP, BaseFabType FAB>
struct IsDataPacking : std::true_type {};
493template <
typename DP, BaseFabType FAB>
496 IsDetected<LocalCopy_t, DP&, FabArray<FAB>&, const FabArray<FAB>&, const FabArrayBase::CopyComTagsContainer&>
498 ,IsDetected<PrepareSendBuffers_t, DP&, FabArray<FAB>&, const FabArray<FAB>&, CommData&, const FabArrayBase::MapOfCopyComTagContainers&>,
499 IsDetected<PrepareRecvBuffers_t, DP&, FabArray<FAB>&, const FabArray<FAB>&, CommData&, const FabArrayBase::MapOfCopyComTagContainers&>,
500 IsDetected<PackSendBuffers_t, DP&, const FabArray<FAB>&, CommData&>,
501 IsDetected<UnpackRecvBuffers_t, DP&, FabArray<FAB>&, CommData&>
506template <BaseFabType FAB,
class DTOS = Identity,
class Proj = Identity>
511 Proj
const& proj = Proj{})
noexcept;
514template <BaseFabType FAB,
class DTOS = Identity,
class Proj = Identity>
515requires (IsCallableR<Dim3, DTOS, Dim3>::value && IsFabProjection<Proj, FAB>::value)
520 DTOS
const& dtos = DTOS{}, Proj
const& proj = Proj{})
noexcept;
524template <BaseFabType FAB,
class DTOS = Identity,
class Proj = Identity>
525requires (IsCallableR<Dim3, DTOS, Dim3>::value && IsFabProjection<Proj, FAB>::value)
529 Proj
const& proj = Proj{})
noexcept;
532template <BaseFabType FAB,
class DTOS = Identity,
class Proj = Identity>
533requires (IsCallableR<Dim3, DTOS, Dim3>::value && IsFabProjection<Proj, FAB>::value)
539 DTOS
const& dtos = DTOS{}, Proj
const& proj = Proj{});
557template <BaseFabType FAB>
576template <BaseFabType FAB>
581 using T =
typename FAB::value_type;
587template <BaseFabType FAB>
592 using T =
typename FAB::value_type;
598template <BaseFabType FAB>
615template <BaseFabType FAB>
632static_assert(IsDataPacking<PackComponents, FArrayBox>(),
633 "PackComponents is expected to satisfy the concept DataPacking.");
641template <
typename DTOS = Identity,
typename FabProj = Identity>
645 : PackComponents(components),
dtos(std::move(dtos_)),
proj(std::move(proj_)) {}
655template <BaseFabType FAB,
typename DTOS,
typename FabProj>
675template <BaseFabType FAB,
typename DTOS,
typename FabProj>
695static_assert(IsDataPacking<ApplyDtosAndProjectionOnReciever<>,
FArrayBox>(),
696 "ApplyDtosAndProjectionOnReciever<> is expected to satisfy the DataPacking concept.");
725template <BaseFabType FAB,
typename DataPacking>
726requires (IsDataPacking<DataPacking, FAB>::value)
744 PostRecvs(handler.recv, handler.mpi_tag);
750 PostSends(handler.send, handler.mpi_tag);
782template <BaseFabType FAB,
typename DataPacking>
783requires (IsDataPacking<DataPacking, FAB>::value)
817template <BaseFabType FAB,
typename DataPacking>
818requires (IsDataPacking<DataPacking, FAB>::value)
837 amrex::Abort(
"NonLocalPC::ParallelCopy_finish failed with wrong message size");
869template <BaseFabType FAB,
typename DataPacking>
870requires (IsDataPacking<DataPacking, FAB>::value)
904template <BaseFabType FAB,
typename DTOS = Identity,
typename Proj = Identity>
910 PackComponents components{};
911 components.dest_component = destcomp.
i;
912 components.src_component = srccomp.
i;
913 components.n_components = numcomp.
n;
914#if defined(__GNUC__) && !defined(__clang__)
915#pragma GCC diagnostic push
916#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
918 ApplyDtosAndProjectionOnReciever<DTOS, Proj> packing{components, dtos, proj};
921#if defined(__GNUC__) && !defined(__clang__)
922#pragma GCC diagnostic pop
948template <BaseFabType FAB,
typename DTOS = Identity,
typename Proj = Identity>
949requires (IsCallableR<Dim3, DTOS, Dim3>::value && IsFabProjection<Proj, FAB>::value)
952 int srccomp,
int destcomp,
int numcomp, DTOS
const& dtos = DTOS{}, Proj
const& proj = Proj{})
954 ParallelCopy(dest, src, cmd, SrcComp(srccomp), DestComp(destcomp), NumComps(numcomp), dtos, proj);
986template <BaseFabType FAB,
typename DTOS = Identity,
typename Proj = Identity>
987requires (IsIndexMapping<DTOS>::value && IsFabProjection<Proj, FAB>::value)
988MultiBlockCommMetaData
990 DestComp destcomp,
NumComps numcomp,
const IntVect& ngrow, DTOS
const& dtos = DTOS{}, Proj
const& proj = Proj{})
992 MultiBlockCommMetaData cmd(dest, destbox, src, ngrow, dtos);
993 ParallelCopy(dest, src, cmd, srccomp, destcomp, numcomp, dtos, proj);
1026template <BaseFabType FAB,
typename DTOS = Identity,
typename Proj = Identity>
1027requires (IsIndexMapping<DTOS>::value && IsFabProjection<Proj, FAB>::value)
1028MultiBlockCommMetaData
1030 int destcomp,
int numcomp,
const IntVect& ngrow, DTOS
const& dtos = DTOS{}, Proj
const& proj = Proj{})
1032 return ParallelCopy(dest, destbox, src, SrcComp(srccomp), DestComp(destcomp), NumComps(numcomp), ngrow, dtos, proj);
1040template <BaseFabType FAB>
1044template <BaseFabType FAB>
1051template <BaseFabType FAB>
1055template <BaseFabType FAB>
1063template <BaseFabType FAB>
1067template <BaseFabType FAB>
1107template <BaseFabType FAB,
typename DTOS,
typename Proj = Identity>
1112 int scomp,
int ncomp, DTOS
const& dtos,
1113 Proj
const& proj = Proj{});
1150template <BaseFabType FAB,
typename DTOS,
typename Proj = Identity>
1155 int scomp,
int ncomp, DTOS
const& dtos,
1156 Proj
const& proj = Proj{});
1189template <BaseFabType FAB,
typename DTOS,
typename Proj = Identity>
1193 int scomp,
int ncomp, DTOS
const& dtos, Proj
const& proj = Proj{})
1214template <BaseFabType FAB,
typename DTOS>
1215requires (IsCallableR<Dim3,DTOS,Dim3>::value)
1217FabArrayBase::CommMetaData
1219 Geometry const& geom, DTOS
const& dtos);
1230 using NonLocalBC::SphThetaPhiRIndexMapping;
1231 using NonLocalBC::SphThetaPhiRComponentMapping;
#define BL_PROFILE(a)
Definition AMReX_BLProfiler.H:551
#define AMREX_ASSERT(EX)
Definition AMReX_BLassert.H:38
#define AMREX_NODISCARD
Definition AMReX_Extension.H:252
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:564
__host__ __device__ const IntVectND< dim > & bigEnd() const &noexcept
Return the inclusive upper bound of the box.
Definition AMReX_Box.H:124
__host__ __device__ IndexTypeND< dim > ixType() const noexcept
Return the indexing type.
Definition AMReX_Box.H:136
__host__ __device__ BoxND & setType(const IndexTypeND< dim > &t) noexcept
Set indexing type.
Definition AMReX_Box.H:513
__host__ __device__ const IntVectND< dim > & smallEnd() const &noexcept
Return the inclusive lower bound of the box.
Definition AMReX_Box.H:112
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:43
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:231
Base class for FabArray.
Definition AMReX_FabArrayBase.H:42
CopyComTag::CopyComTagsContainer CopyComTagsContainer
Definition AMReX_FabArrayBase.H:220
CopyComTag::MapOfCopyComTagContainers MapOfCopyComTagContainers
Definition AMReX_FabArrayBase.H:221
bool empty() const noexcept
Definition AMReX_FabArrayBase.H:89
An Array of FortranArrayBox(FAB)-like Objects.
Definition AMReX_FabArray.H:344
static void pack_send_buffer_cpu(FabArray< FAB > const &src, int scomp, int ncomp, Vector< char * > const &send_data, Vector< std::size_t > const &send_size, Vector< const CopyComTagsContainer * > const &send_cctc)
Definition AMReX_FBI.H:1373
static void pack_send_buffer_gpu(FabArray< FAB > const &src, int scomp, int ncomp, Vector< char * > const &send_data, Vector< std::size_t > const &send_size, Vector< const CopyComTagsContainer * > const &send_cctc, std::uint64_t id)
Definition AMReX_FBI.H:1113
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:75
__host__ __device__ constexpr Dim3 dim3() const noexcept
Definition AMReX_IntVect.H:262
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:29
bool inLaunchRegion() noexcept
Definition AMReX_GpuControl.H:88
Definition AMReX_NonLocalBC.cpp:39
decltype(UnpackRecvBuffers(std::declval< Args >()...)) UnpackRecvBuffers_t
Definition AMReX_NonLocalBC.H:484
IntVect Apply(DTOS const &dtos, const IntVect &iv)
Applies the Dim3 to Dim3 mapping onto IntVects.
Definition AMReX_NonLocalBC.H:105
void Rotate90(FabArray< FAB > &mf, int scomp, int ncomp, IntVect const &nghost, Box const &domain)
decltype(std::declval< T >().Inverse(std::declval< Args >()...)) Inverse_t
Return type of an InverseImage class member function.
Definition AMReX_NonLocalBC.H:17
FabArrayBase::CommMetaData makeFillBoundaryMetaData(FabArray< FAB > &mf, IntVect const &nghost, Geometry const &geom, DTOS const &dtos)
Make metadata for FillBoundary.
void unpack_recv_buffer_cpu(FabArray< FAB > &mf, int dcomp, int ncomp, Vector< char * > const &recv_data, Vector< std::size_t > const &recv_size, Vector< FabArrayBase::CopyComTagsContainer const * > const &recv_cctc, DTOS const &dtos=DTOS{}, Proj const &proj=Proj{}) noexcept
decltype(PackSendBuffers(std::declval< Args >()...)) PackSendBuffers_t
Definition AMReX_NonLocalBC.H:481
IntVect ApplyInverse(DTOS const &dtos, const IntVect &iv)
Applies the Dim3 to Dim3 invserse mapping onto IntVects.
Definition AMReX_NonLocalBC.H:172
void PrepareCommBuffers(CommData &comm, const FabArrayBase::MapOfCopyComTagContainers &cctc, int n_components, std::size_t object_size, std::size_t align)
Fill all class member variables of comm but the request and the stats vector.
Definition AMReX_NonLocalBC.cpp:43
Box InverseImage(DTOS const &dtos, const Box &box)
Applies the inverse Dim3 to Dim3 mapping onto Boxes without changing the index type.
Definition AMReX_NonLocalBC.H:189
void PackSendBuffers(const PackComponents &components, const FabArray< FAB > &src, CommData &send)
Serializes FAB data without any knowledge of a DTOS nor a projection.
Definition AMReX_NonLocalBC.H:600
CommHandler FillBoundary_nowait(FabArray< FAB > &mf, const FabArrayBase::CommMetaData &cmd, int scomp, int ncomp, DTOS const &dtos, Proj const &proj=Proj{})
Start communication to fill boundary.
decltype(LocalCopy(std::declval< Args >()...)) LocalCopy_t
Definition AMReX_NonLocalBC.H:487
void ParallelCopy_finish(FabArray< FAB > &dest, CommHandler handler, const FabArrayBase::CommMetaData &cmd, const DataPacking &data_packing)
Definition AMReX_NonLocalBC.H:821
void Rotate180(FabArray< FAB > &mf, int scomp, int ncomp, IntVect const &nghost, Box const &domain)
void LocalCopy(const PackComponents &components, FabArray< FAB > &dest, const FabArray< FAB > &src, const FabArrayBase::CopyComTagsContainer &local_tags)
Dispatch local copies to the default behaviour that knows no DTOS nor projection.
Definition AMReX_NonLocalBC.H:559
void PostSends(CommData &send, int mpi_tag)
Initiate all sends with MPI_Isend calls associated with tag mpi_tag.
Definition AMReX_NonLocalBC.cpp:125
void local_copy_cpu(FabArray< FAB > &dest, const FabArray< FAB > &src, int dcomp, int scomp, int ncomp, FabArrayBase::CopyComTagsContainer const &local_tags, DTOS const &dtos=DTOS{}, Proj const &proj=Proj{}) noexcept
static constexpr SwapComponents< I, J > swap_indices
Definition AMReX_NonLocalBC.H:399
void PostRecvs(CommData &recv, int mpi_tag)
Initiate all recvieves with MPI_Irecv calls associated with tag mpi_tag.
Definition AMReX_NonLocalBC.cpp:109
void FillBoundary_finish(CommHandler handler, FabArray< FAB > &mf, const FabArrayBase::CommMetaData &cmd, int scomp, int ncomp, DTOS const &dtos, Proj const &proj=Proj{})
Finish communication started by FillBoundary_nowait.
void FillPolar(FabArray< FAB > &mf, int scomp, int ncomp, IntVect const &nghost, Box const &domain)
void FillBoundary(FabArray< FAB > &mf, const FabArrayBase::CommMetaData &cmd, int scomp, int ncomp, DTOS const &dtos, Proj const &proj=Proj{})
Fill ghost cells for FabArray/MultiFab.
Definition AMReX_NonLocalBC.H:1192
void UnpackRecvBuffers(const PackComponents &components, FabArray< FAB > &dest, const CommData &recv)
De-serializes FAB data without any knowledge of a DTOS nor a projection.
Definition AMReX_NonLocalBC.H:617
static constexpr struct amrex::NonLocalBC::DoLocalCopy do_local_copy
decltype(PrepareSendBuffers(std::declval< Args >()...)) PrepareSendBuffers_t
Definition AMReX_NonLocalBC.H:475
void local_copy_gpu(FabArray< FAB > &dest, const FabArray< FAB > &src, int dcomp, int scomp, int ncomp, FabArrayBase::CopyComTagsContainer const &local_tags, DTOS const &dtos=DTOS{}, Proj const &proj=Proj{}) noexcept
template MultiBlockCommMetaData ParallelCopy(FabArray< FArrayBox > &dest, const Box &destbox, const FabArray< FArrayBox > &src, int destcomp, int srccomp, int numcomp, const IntVect &ngrow, MultiBlockIndexMapping const &, Identity const &)
CommHandler ParallelCopy_nowait(NoLocalCopy, FabArray< FAB > &dest, const FabArray< FAB > &src, const FabArrayBase::CommMetaData &cmd, const DataPacking &data_packing)
Definition AMReX_NonLocalBC.H:729
static constexpr Identity identity
Definition AMReX_NonLocalBC.H:307
Box Image(DTOS const &dtos, const Box &box)
Applies the Dim3 to Dim3 mapping onto Boxes but does not change the index type.
Definition AMReX_NonLocalBC.H:123
decltype(PrepareRecvBuffers(std::declval< Args >()...)) PrepareRecvBuffers_t
Definition AMReX_NonLocalBC.H:478
void PrepareRecvBuffers(const PackComponents &components, FabArray< FAB > &dest, const FabArray< FAB > &src, CommData &comm, const FabArrayBase::MapOfCopyComTagContainers &cctc)
Calls PrepareComBuffers.
Definition AMReX_NonLocalBC.H:589
static constexpr struct amrex::NonLocalBC::NoLocalCopy no_local_copy
void PrepareSendBuffers(const PackComponents &components, FabArray< FAB > &dest, const FabArray< FAB > &src, CommData &comm, const FabArrayBase::MapOfCopyComTagContainers &cctc)
Calls PrepareComBuffers.
Definition AMReX_NonLocalBC.H:578
SwapComponents<-1, -1 > DynamicSwapComponents
Definition AMReX_NonLocalBC.H:397
void unpack_recv_buffer_gpu(FabArray< FAB > &mf, int scomp, int ncomp, Vector< char * > const &recv_data, Vector< std::size_t > const &recv_size, Vector< FabArrayBase::CopyComTagsContainer const * > const &recv_cctc, DTOS const &dtos=DTOS{}, Proj const &proj=Proj{})
int NProcsSub() noexcept
number of ranks in current frame
Definition AMReX_ParallelContext.H:74
void Waitall(Vector< MPI_Request > &, Vector< MPI_Status > &)
Definition AMReX_ParallelDescriptor.cpp:1308
int SeqNum() noexcept
Returns sequential message sequence numbers, usually used as tags for send/recv.
Definition AMReX_ParallelDescriptor.H:678
Definition AMReX_Amr.cpp:50
__host__ __device__ void ignore_unused(const Ts &...)
This shuts up the compiler about unused variables.
Definition AMReX.H:139
void FillBoundary_finish(Vector< MF * > const &mf)
Wait for outstanding FillBoundary_nowait operations launched with the vector helper to complete.
Definition AMReX_FabArrayCommI.H:1115
std::unique_ptr< char, TheFaArenaDeleter > TheFaArenaPointer
Definition AMReX_FabArray.H:106
void FillBoundary_nowait(Vector< MF * > const &mf, Vector< int > const &scomp, Vector< int > const &ncomp, Vector< IntVect > const &nghost, Vector< Periodicity > const &period, Vector< int > const &cross={})
Launch FillBoundary_nowait across a vector of FabArrays.
Definition AMReX_FabArrayCommI.H:1069
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition AMReX.cpp:241
std::is_same< Expected, Detected_t< Op, Args... > > IsDetectedExact
Definition AMReX_TypeTraits.H:186
A multidimensional array accessor.
Definition AMReX_Array4.H:285
Logical traits let us combine multiple type requirements.
Definition AMReX_TypeTraits.H:232
Definition AMReX_BaseFab.H:77
int i
Definition AMReX_BaseFab.H:80
Definition AMReX_Dim3.H:13
int x
Definition AMReX_Dim3.H:13
int z
Definition AMReX_Dim3.H:13
int y
Definition AMReX_Dim3.H:13
Test if a given type T is callable with arguments of type Args...
Definition AMReX_TypeTraits.H:214
Test if a given type T is callable with arguments of type Args...
Definition AMReX_TypeTraits.H:208
This class specializes behaviour on local copies and unpacking receive buffers.
Definition AMReX_NonLocalBC.H:642
constexpr ApplyDtosAndProjectionOnReciever()=default
constexpr ApplyDtosAndProjectionOnReciever(const PackComponents &components, DTOS dtos_=DTOS{}, FabProj proj_=FabProj{})
Definition AMReX_NonLocalBC.H:644
FabProj proj
Definition AMReX_NonLocalBC.H:648
DTOS dtos
Definition AMReX_NonLocalBC.H:647
This class holds data buffers for either immediate MPI send or recv calls.
Definition AMReX_NonLocalBC.H:426
Vector< std::size_t > size
The size in bytes for each data transaction.
Definition AMReX_NonLocalBC.H:437
Vector< char * > data
Pointers to the_data that can be used for each single data transaction.
Definition AMReX_NonLocalBC.H:433
Vector< const FabArrayBase::CopyComTagsContainer * > cctc
For each request the copy comm tags for the corresponding data FABs.
Definition AMReX_NonLocalBC.H:443
Vector< MPI_Status > stats
For each request the corresponding MPI_status, used for debugging.
Definition AMReX_NonLocalBC.H:441
Vector< MPI_Request > request
The associated MPI_Request for each data transaction.
Definition AMReX_NonLocalBC.H:439
TheFaArenaPointer the_data
Holds 'em all in one data pointer.
Definition AMReX_NonLocalBC.H:429
std::uint64_t id
Definition AMReX_NonLocalBC.H:444
Vector< int > rank
Stores MPI ranks. For recvs it is the 'from' rank and for sends it is the 'to' rank.
Definition AMReX_NonLocalBC.H:431
Vector< std::size_t > offset
All offsets of data in the_data.
Definition AMReX_NonLocalBC.H:435
This class stores both recv and send buffers with an associated MPI tag.
Definition AMReX_NonLocalBC.H:463
CommData send
Definition AMReX_NonLocalBC.H:467
int mpi_tag
Definition AMReX_NonLocalBC.H:465
CommData recv
Definition AMReX_NonLocalBC.H:466
Definition AMReX_NonLocalBC.H:702
Type trait that tests if T has an InverseImage class member function.
Definition AMReX_NonLocalBC.H:21
This class acts as a default no-op operator.
Definition AMReX_NonLocalBC.H:291
constexpr Dim3 operator()(Dim3 i) const noexcept
The identity function for Dim3.
Definition AMReX_NonLocalBC.H:293
constexpr T operator()(Array4< const T > array, Dim3 i, int comp=0) const noexcept(noexcept(array(i.x, i.y, i.z, comp)))
Definition AMReX_NonLocalBC.H:299
constexpr int operator()(int i) const noexcept
The identity for int.
Definition AMReX_NonLocalBC.H:305
static constexpr Dim3 Inverse(Dim3 i) noexcept
The identity function for Dim3.
Definition AMReX_NonLocalBC.H:295
This type trait tests if a given type DP satisfies the DataPacking concept for type FAB.
Definition AMReX_NonLocalBC.H:503
This type trait tests if a type P is a projection for FAB.
Definition AMReX_NonLocalBC.H:282
Tests if a given type IndexMap is usable as an index mapping between two index based coordinate syste...
Definition AMReX_NonLocalBC.H:28
This class takes a projection and a component map and combines them to form a new projection.
Definition AMReX_NonLocalBC.H:325
Base base
Definition AMReX_NonLocalBC.H:332
Map map
Definition AMReX_NonLocalBC.H:333
constexpr decltype(auto) operator()(Array4< const T > array, Dim3 i, int comp) const noexcept(noexcept(base(array, i, map(comp))))
Definition AMReX_NonLocalBC.H:337
This struct describes an affine index transformation for two coordinate systems.
Definition AMReX_NonLocalBC.H:38
IndexType operator()(IndexType it) const noexcept
Definition AMReX_NonLocalBC.H:77
IntVect sign
A vector of 1 and -1 describing the orientation in each component.
Definition AMReX_NonLocalBC.H:44
__host__ __device__ Dim3 operator()(Dim3 i) const noexcept
Applies this mapping on the index from destination space and returns an index in the source space.
Definition AMReX_NonLocalBC.H:52
__host__ __device__ Dim3 Inverse(Dim3 i) const noexcept
The inverse function is given by rearringing all above terms.
Definition AMReX_NonLocalBC.H:67
IntVect offset
The offset in the source index space.
Definition AMReX_NonLocalBC.H:42
IntVect permutation
This vector needs to be a valid permutation.
Definition AMReX_NonLocalBC.H:40
IndexType Inverse(IndexType it) const noexcept
Definition AMReX_NonLocalBC.H:81
Definition AMReX_NonLocalBC.H:701
Contains information about which components take part of the data transaction.
Definition AMReX_NonLocalBC.H:550
int dest_component
Definition AMReX_NonLocalBC.H:551
int src_component
Definition AMReX_NonLocalBC.H:552
int n_components
Definition AMReX_NonLocalBC.H:553
Definition AMReX_NonLocalBC.H:388
int J
Definition AMReX_NonLocalBC.H:390
int I
Definition AMReX_NonLocalBC.H:389
constexpr int operator()(int i) const noexcept
Definition AMReX_NonLocalBC.H:391
constexpr int operator()(int i) const noexcept
Definition AMReX_NonLocalBC.H:382
int I
Definition AMReX_NonLocalBC.H:381
int J
Definition AMReX_NonLocalBC.H:371
constexpr int operator()(int i) const noexcept
Definition AMReX_NonLocalBC.H:372
This is a permutation where only two components are swapped.
Definition AMReX_NonLocalBC.H:356
constexpr int operator()(int i) const noexcept
Swaps indices I and J.
Definition AMReX_NonLocalBC.H:362
Definition AMReX_BaseFab.H:83
int n
Definition AMReX_BaseFab.H:86
Definition AMReX_BaseFab.H:71
int i
Definition AMReX_BaseFab.H:74