include/pops/mesh/boundary/halo_schedule.hpp File ReferenceΒΆ

adc_cpp: include/pops/mesh/boundary/halo_schedule.hpp File Reference
adc_cpp 0.3.0
Model-free C++23 core for coupled hyperbolic-elliptic systems on adaptive (AMR) meshes, with MPI and GPU (Kokkos) backends
halo_schedule.hpp File Reference

HaloSchedule: memoized intra-level halo-exchange plan for fill_boundary (ADC-260). More...

#include <pops/mesh/index/box2d.hpp>
#include <cstdint>
#include <memory>
#include <vector>
+ Include dependency graph for halo_schedule.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  pops::HaloJob
 One halo copy/transfer: the ghost region of box dst is filled from the shifted valid region of box src (shift sx, sy in cells for the periodic wrap; 0 for an interior neighbor). More...
 
struct  pops::HaloSchedule
 Memoized schedule for ONE (Periodicity, domain) over a fixed layout. More...
 
class  pops::HaloScheduleCache
 Small per-MultiFab cache of halo schedules, one entry per distinct (Periodicity, domain). More...
 

Namespaces

namespace  pops
 
namespace  pops::detail
 

Functions

std::int64_t pops::halo_schedule_build_count ()
 Number of times fill_boundary has BUILT (enumerated) a halo schedule.
 
void pops::reset_halo_schedule_build_count ()
 Resets the build counter (tests).
 

Detailed Description

HaloSchedule: memoized intra-level halo-exchange plan for fill_boundary (ADC-260).

fill_boundary_begin used to enumerate, on EVERY call, the neighbor-box job schedule: a BoxHash build plus a local (and, under MPI, a global) enumeration over the BoxArray. That schedule is a pure function of the LAYOUT (BoxArray, DistributionMapping, n_grow) and the per-call (Periodicity, domain); only the copy/pack/MPI/unpack of the LIVE data must rerun. This header holds the cacheable plan so the enumeration runs ONCE per (layout, Periodicity, domain). Jobs carry GLOBAL box indices (resolved to local fabs at replay), so a plan is valid for any MultiFab over the same layout. MPI-free: the in-flight buffers and MPI_Request stay in HaloExchange (fill_boundary.hpp).