44#include <boost/mpi/request.hpp>
119 std::unique_ptr<ExchangeBuffers>
owned;
void halo_exchange_finish(GhostExchange &st)
Complete a halo exchange: run same-rank copies (overlapping the in-flight messages),...
void halo_exchange(HaloPlan const &plan, BoxGeometry const &box, unsigned data_parts, ExchangeOp op, ExchangeBuffers &bufs)
Blocking wrapper using a caller-owned buffer pool (no per-call alloc after warm-up).
GhostExchange halo_exchange_start(HaloPlan const &plan, BoxGeometry const &box, unsigned data_parts, ExchangeOp op, ExchangeBuffers &bufs)
Begin a halo exchange using a caller-owned buffer pool.
Reusable particle packing/unpacking for ghost communications.
Persistent per-neighbor buffer pool for halo exchanges.
std::vector< CommBuf > send
Per-neighbor packed send buffers (index-aligned with plan->neighbors).
std::vector< std::size_t > slot_to_neighbor
Scratch index map for the Overwrite (wait_any) path in halo_exchange_finish: maps active request slot...
std::vector< CommBuf > recv
Per-neighbor recv buffers (index-aligned with plan->neighbors).
std::vector< std::vector< ParticleList * > > send_cells
Scratch cell-pointer arrays for the packing routines.
std::vector< std::vector< ParticleList * > > recv_cells
std::vector< boost::mpi::request > requests
Outstanding non-blocking send/recv requests (cleared before each use).
Opaque handle for one in-flight halo exchange.
ExchangeBuffers * bufs
Non-owning pointer to the active buffer pool (caller's or owned).
std::unique_ptr< ExchangeBuffers > owned
Non-null only when the no-pool overload allocated the buffer pool.