13#ifndef CD_KDPARTICLEMERGE_H
14#define CD_KDPARTICLEMERGE_H
31#include <CD_NamespaceHeader.H>
52template <
typename Packed>
54 Packed(
const Packed* a_payloads,
const Real* a_weights,
const std::size_t a_count)>;
134template <
typename Packed>
138 std::vector<KDLeaf>& a_leaves,
140 const Real a_weightMedianCellWidths,
141 const RealVect& a_dx,
142 const RealVect& a_probLo,
143 const FArrayBox& a_cellCounts)
noexcept;
226 typename PatchRegular>
229 EBAMRFAB& a_cellHistogram,
230 EBAMRFAB& a_leafQuota,
233 const Real a_weightMedianCellWidths,
235 const bool a_capWeights,
237 const Gather& a_gather,
238 const Combine& a_combine,
239 const Scatter& a_scatter,
240 const Allocator& a_allocateID,
241 const PosValid& a_isPositionValid,
242 const PatchRegular& a_isPatchRegular);
304 typename PatchRegular>
307 EBAMRFAB& a_cellHistogram,
308 EBAMRFAB& a_leafQuota,
311 const Real a_weightMedianCellWidths,
313 const bool a_capWeights,
315 const Gather& a_gather,
316 const Combine& a_combine,
317 const Scatter& a_scatter,
318 const Allocator& a_allocateID,
319 const PosValid& a_isPositionValid,
320 const PatchRegular& a_isPatchRegular);
390 typename PatchRegular>
394 EBAMRFAB& a_cellHistogram,
395 EBAMRFAB& a_leafQuota,
398 const Real a_weightMedianCellWidths,
400 const bool a_capWeights,
402 const Gather& a_gather,
403 const Combine& a_combine,
404 const Scatter& a_scatter,
405 const Allocator& a_allocateID,
406 const PosValid& a_isPositionValid,
407 const PatchRegular& a_isPatchRegular);
411#include <CD_NamespaceFooter.H>
Declaration of core class for handling AMR-related operations (with embedded boundaries)
Implementation of CD_KDParticleMerge.H.
Declaration of an AMR-hierarchy container that owns per-patch ParticleSoA leaves.
Namespace containing various particle management utilities.
Declaration of ParticleSoA, an arena-backed Struct-of-Arrays particle container.
Class for handling spatial operations.
Definition CD_AmrMesh.H:46
AMR-hierarchy container of computational particles, stored per patch in Struct-of-Arrays form.
Definition CD_ParticleContainer.H:123
std::vector< T > kdExchangeByRank(const std::vector< std::vector< T > > &a_sendByRank)
Generic Alltoallv-style exchange for a trivially-copyable record type: send a per-destination-rank bu...
Definition CD_KDParticleMergeImplem.H:43
void buildKDQuotaLeaves(std::vector< MergeParticle< Packed > > &a_particles, FArrayBox &a_used, std::vector< KDLeaf > &a_leaves, const int a_ppc, const Real a_weightMedianCellWidths, const RealVect &a_dx, const RealVect &a_probLo, const FArrayBox &a_cellCounts) noexcept
Build one whole-patch kd tree: partition a_particles by position into leaves, each of which becomes e...
Definition CD_KDParticleMergeImplem.H:474
Namespace for various particle management tools.
Definition CD_KDParticleMerge.H:33
std::function< Packed(const Packed *a_payloads, const Real *a_weights, const std::size_t a_count)> KDPayloadCombine
Illustrative signature of the N-ary combine callback: produce a merged particle's opaque payload from...
Definition CD_KDParticleMerge.H:54
KDSplitPlacement
Where the pieces of a split particle go.
Definition CD_ParticleManagement.H:65
void mergeKDInterior(ParticleContainer< P, Traits > &a_particles, ParticleContainer< P, Traits > &a_interior, EBAMRFAB &a_cellHistogram, EBAMRFAB &a_leafQuota, const AmrMesh &a_amr, const int a_ppc, const Real a_weightMedianCellWidths, const KDPlacement a_placement, const bool a_capWeights, const KDSplitPlacement a_splitPlacement, const Gather &a_gather, const Combine &a_combine, const Scatter &a_scatter, const Allocator &a_allocateID, const PosValid &a_isPositionValid, const PatchRegular &a_isPatchRegular)
Run the uncontested tier of the kd merge, splitting the input into merged and leftover.
Definition CD_KDParticleMergeImplem.H:1900
void mergeKDCarve(ParticleContainer< P, Traits > &a_particles, EBAMRFAB &a_cellHistogram, EBAMRFAB &a_leafQuota, const AmrMesh &a_amr, const int a_ppc, const Real a_weightMedianCellWidths, const KDPlacement a_placement, const bool a_capWeights, const KDSplitPlacement a_splitPlacement, const Gather &a_gather, const Combine &a_combine, const Scatter &a_scatter, const Allocator &a_allocateID, const PosValid &a_isPositionValid, const PatchRegular &a_isPatchRegular)
Run one non-iterative pass of the kd-tree carve merge over every patch this rank owns.
Definition CD_KDParticleMergeImplem.H:832
KDPlacement
Where a kd merge puts the particle a leaf reduces to.
Definition CD_ParticleManagement.H:80
void mergeKDPatch(ParticleContainer< P, Traits > &a_particles, EBAMRFAB &a_cellHistogram, EBAMRFAB &a_leafQuota, const AmrMesh &a_amr, const int a_ppc, const Real a_weightMedianCellWidths, const KDPlacement a_placement, const bool a_capWeights, const KDSplitPlacement a_splitPlacement, const Gather &a_gather, const Combine &a_combine, const Scatter &a_scatter, const Allocator &a_allocateID, const PosValid &a_isPositionValid, const PatchRegular &a_isPatchRegular)
Run one patch-local kd-tree merge over every patch this rank owns.
Definition CD_KDParticleMergeImplem.H:1848
Minimal, payload-agnostic description of one particle as input to a distributed merge.
Definition CD_ParticleManagement.H:519
One leaf of a kd tree: a contiguous index range into the (in-place reordered) particle buffer,...
Definition CD_KDParticleMerge.H:68
RealVect boxHi
High corner of this leaf's axis-aligned bounding box.
Definition CD_KDParticleMerge.H:87
std::size_t hi
End of this leaf's member range (exclusive) in the reordered particle buffer.
Definition CD_KDParticleMerge.H:77
RealVect boxLo
Low corner of this leaf's axis-aligned bounding box.
Definition CD_KDParticleMerge.H:82
std::size_t lo
Start of this leaf's member range (inclusive) in the reordered particle buffer.
Definition CD_KDParticleMerge.H:72
Traits class that a user specializes to describe the PAYLOAD columns of a particle type....
Definition CD_ParticleSoA.H:192