36template<
typename T,
typename PARTICLETYPE,
typename F>
40 if constexpr (std::is_invocable_v<F,Particle<T,PARTICLETYPE>&>){
54template<
typename T,
typename PARTICLETYPE,
typename PCONDITION=conditions::val
id_particles,
typename F>
60 if constexpr (PCONDITION::dynamic){
61 if ( PCONDITION::template value<T,PARTICLETYPE>(particle) ){
68 if constexpr (PCONDITION::value){
81template<
typename T,
typename PARTICLETYPE,
typename PCONDITION=conditions::val
id_particles,
typename F>
87 if constexpr (PCONDITION::dynamic){
89 if constexpr (std::is_invocable_v<
decltype(PCONDITION::template value<T,PARTICLETYPE>),
91 if ( PCONDITION::template value<T,PARTICLETYPE>(particle,globiC) ){
92 if constexpr (std::is_invocable_v<F,Particle<T,PARTICLETYPE>&>){
100 if ( PCONDITION::template value<T,PARTICLETYPE>(particle) ){
108 if constexpr (PCONDITION::value){
117template<
typename T,
typename PARTICLETYPE,
typename PCONDITION=conditions::val
id_particles,
typename F>
122 for (std::size_t iP=0; iP<particleSystem.
size(); ++iP) {
123 auto particle = particleSystem.
get(iP);
125 doWhenMeetingCondition<T,PARTICLETYPE,PCONDITION>( particle,
134template<
typename T,
typename PARTICLETYPE,
typename PCONDITION=conditions::val
id_particles,
typename F>
139 for (std::size_t iP=0; iP<particleSystem.
size(); ++iP) {
140 auto particle = particleSystem.
get(iP);
142 doWhenMeetingCondition<T,PARTICLETYPE,PCONDITION>( particle,
150namespace communication {
153template<
typename T,
typename PARTICLETYPE,
typename F>
161 for (
int iC=0; iC<loadBalancer.size(); ++iC){
162 int globiC = loadBalancer.glob(iC);
165 auto& particleSystem = *bParticleSystems[iC];
166 f( particleSystem, iC, globiC );
172template<
typename T,
typename PARTICLETYPE,
typename PCONDITION=conditions::val
id_particles,
typename F>
181 forParticlesInParticleSystem<T,PARTICLETYPE,PCONDITION>( particleSystem,
183 if constexpr (std::is_invocable_v<F,
186 f( particle, particleSystem, globiC );
197template<
typename T,
typename PARTICLETYPE,
typename F>
205 if (rank==loadBalancer.rank(locator.
globiC)){
208 auto& particleSystem = *bParticleSystems[loadBalancer.loc(locator.
globiC)];
210 auto particle = particleSystem.get(locator.
localID);
226template<
typename T,
typename PARTICLETYPE,
typename PCONDITION=conditions::val
id_particles,
typename F>
231 if constexpr( access::providesParallelization<PARTICLETYPE>() ){
236 forParticlesInParticleSystem<T,PARTICLETYPE,PCONDITION>( particleSystem,
238 if constexpr (std::is_invocable_v<F,
241 f( particle, particleSystem, globiC );
249 forParticlesInParticleSystem<T,PARTICLETYPE,PCONDITION>( xParticleSystem,
251 if constexpr (std::is_invocable_v<F,
254 f( particle, xParticleSystem, 0 );
LoadBalancer< T > & getLoadBalancer()
Read and write access to the load balancer.
auto & get()
Expose container.
constexpr std::size_t size()
Size of ParticleSystem.
SuperStructure< T, PARTICLETYPE::d > & getSuperStructure()
std::vector< ParticleSystem< T, PARTICLETYPE > * > & getBlockParticleSystems()
int getRank() const
Returns the process ID.
void forSystemsInSuperParticleSystem(SuperParticleSystem< T, PARTICLETYPE > &sParticleSystem, F f)
void doForParticle(SuperParticleSystem< T, PARTICLETYPE > &sParticleSystem, ParallelParticleLocator &locator, F f)
void forParticlesInSuperParticleSystem(SuperParticleSystem< T, PARTICLETYPE > &sParticleSystem, F f)
std::conditional_t< PARTICLETYPE::template providesNested< descriptors::PARALLELIZATION >(), SuperParticleSystem< T, PARTICLETYPE >, ParticleSystem< T, PARTICLETYPE > > XParticleSystem
void doForParticle(Particle< T, PARTICLETYPE > &particle, F f)
void doWhenMeetingCondition(Particle< T, PARTICLETYPE > &particle, F f)
void forParticlesInParticleSystem(ParticleSystem< T, PARTICLETYPE > &particleSystem, F f, int globiC)
void forParticlesInXParticleSystem(XParticleSystem< T, PARTICLETYPE > &xParticleSystem, F f)
Iterate over particles in x particle system.
Top level namespace for all of OpenLB.