chombo-discharge
Loading...
Searching...
No Matches
CD_ParticleLoops.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
50#ifndef CD_PARTICLELOOPS_H
51#define CD_PARTICLELOOPS_H
52
53// Std includes
54#include <cstddef>
55
56// Our includes
57#include <CD_Decorations.H>
58#include <CD_ParticleSoA.H>
59#include <CD_NamespaceHeader.H>
60
64namespace ParticleLoops {
65
85template <typename P, typename Traits, typename Functor>
86ALWAYS_INLINE void
87loop(const ParticleSoA<P, Traits>& a_soa, Functor&& a_kernel)
88{
89 const std::size_t numParticles = a_soa.size();
90
91 CD_PRAGMA_SIMD
92 for (std::size_t i = 0; i < numParticles; i++) {
93 a_kernel(i);
94 }
95}
96
120template <typename P, typename Traits, typename T, typename Functor>
121ALWAYS_INLINE T
122reduce(const ParticleSoA<P, Traits>& a_soa, T a_initial, Functor&& a_kernel)
123{
124 const std::size_t numParticles = a_soa.size();
125
126 for (std::size_t i = 0; i < numParticles; i++) {
127 a_initial = a_kernel(a_initial, i);
128 }
129
130 return a_initial;
131}
132
133} // namespace ParticleLoops
134
135#include <CD_NamespaceFooter.H>
136
137#endif
Declaration of various decoration macros.
Declaration of ParticleSoA, an arena-backed Struct-of-Arrays particle container.
Arena-backed Struct-of-Arrays particle container for a single grid patch.
Definition CD_ParticleSoA.H:655
std::size_t size() const noexcept
Number of particles currently stored.
Definition CD_ParticleSoA.H:882
Namespace for SIMD-decorated loops over SoA particles (particle analogue of BoxLoops).
Definition CD_ParticleLoops.H:64
ALWAYS_INLINE void loop(const ParticleSoA< P, Traits > &a_soa, Functor &&a_kernel)
Launch a kernel over every particle in a ParticleSoA, decorating the loop with CD_PRAGMA_SIMD.
Definition CD_ParticleLoops.H:87
ALWAYS_INLINE T reduce(const ParticleSoA< P, Traits > &a_soa, T a_initial, Functor &&a_kernel)
Fold a kernel over every particle in a ParticleSoA, accumulating a reduction value.
Definition CD_ParticleLoops.H:122