16 template <
typename ParticleContainer>
17 using PCParticle =
typename std::remove_pointer<typename ParticleContainer::value_type>::type;
66 template <
typename F,
typename Particle>
70 Particle& localParticle
72 { f(marker, localParticle) } -> std::same_as<void>;
75 template <
typename F,
typename Particle>
79 Particle& localParticle
81 { f(marker, localParticle) } -> std::same_as<void>;
178 template <
typename F,
typename LocalParticle,
typename ActiveParticle>
182 LocalParticle& localParticle,
183 ActiveParticle& activeParticle
185 { f(marker, localParticle, activeParticle) } -> std::same_as<void>;
197 namespace kernelrealisation {
281 template <auto ParticleOp, auto PredicateOp>
284 auto& assignedParticles,
285 int numberOfCoalescedAssignedParticles,
294 template <auto ParticleOp, auto PredicateOp>
297 auto& assignedParticles,
298 int numberOfCoalescedAssignedParticles,
406 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
409 auto& localParticles,
410 auto& activeParticles,
418 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
421 auto& localParticles,
422 auto& activeParticles,
426 template <auto ParticleOp, auto PredicateOp>
429 auto& assignedParticles,
430 int numberOfAssignedParticles,
435 template <auto ParticleOp, auto PredicateOp>
438 auto& localParticles,
439 const std::vector<int>& numberOfLocalParticles,
444 template <auto ParticleOp, auto PredicateOp>
447 auto& assignedParticles,
448 int numberOfAssignedParticles,
453 template <auto ParticleOp, auto PredicateOp>
456 auto& localParticles,
457 const std::vector<int>& numberOfLocalParticles,
462 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
465 auto& localParticles,
466 auto& activeParticles,
467 ::exaparty::kernels::kernelrealisation::
468 CoalescedMemoryActiveLocalRealisation realisation
471 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
474 auto& localParticles,
475 auto& activeParticles,
476 ::exaparty::kernels::kernelrealisation::
477 CoalescedMemoryActiveLocalOffloadRealisation realisation
480 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
483 auto& localParticles,
484 auto& activeParticles,
485 ::exaparty::kernels::kernelrealisation::
486 EvaluatePredicateInPrologueActiveLocalRealisation realisation
489 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
492 auto& localParticles,
493 auto& activeParticles,
494 ::exaparty::kernels::kernelrealisation::
495 EvaluatePredicateInPrologueLocalActiveRealisation realisation
599 auto LocalPredicateOp,
600 auto ParticlePairPredicateOp>
603 auto& localParticles,
604 auto& activeParticles,
605 ::exaparty::kernels::kernelrealisation::
606 CoalescedMemoryActiveLocalRealisation realisation
611 auto LocalPredicateOp,
612 auto ParticlePairPredicateOp>
615 auto& localParticles,
616 auto& activeParticles,
617 ::exaparty::kernels::kernelrealisation::
618 CoalescedMemoryLocalActiveRealisation realisation
623 auto LocalPredicateOp,
624 auto ParticlePairPredicateOp>
627 auto& localParticles,
628 auto& activeParticles,
629 ::exaparty::kernels::kernelrealisation::
630 CoalescedMemoryLocalActiveOffloadRealisation realisation
640 template <auto ParticleOp, auto PredicateOp>
643 auto& assignedParticles,
644 int numberOfCoalescedAssignedParticles,
645 ::exaparty::kernels::kernelrealisation::
646 EvaluatePredicateInPrologueRealisation
649 template <auto ParticleOp, auto PredicateOp>
652 auto& localParticles,
653 const std::vector<int>& numberOfCoalescedLocalParticles,
654 ::exaparty::kernels::kernelrealisation::
655 EvaluatePredicateInPrologueRealisation
665 template <
typename LocalParticleContainer,
typename ActiveParticleContainer>
668 auto& localParticles,
669 auto& activeParticles,
670 ::exaparty::kernels::kernelrealisation::
671 EvaluatePredicateInPrologueActiveLocalRealisation realisation
674 template <
typename LocalParticleContainer,
typename ActiveParticleContainer>
677 auto& localParticles,
678 auto& activeParticles,
679 ::exaparty::kernels::kernelrealisation::
680 EvaluatePredicateInPrologueLocalActiveRealisation realisation
703 typename LocalParticle,
704 typename ActiveParticle>
705 std::pair<std::bitset<SubChunkSize>, std::bitset<SubChunkSize>>
708 LocalParticle* localParticle,
709 ActiveParticle* firstActiveParticleInSubchunk,
710 int thisSubchunkSize,
712 particlePairPredicate
721 typename LocalParticle,
722 typename ActiveParticle>
723 std::pair<std::bitset<SubChunkSize>, std::bitset<SubChunkSize>>
726 LocalParticle* firstLocalParticleInSubchunk,
727 int thisSubchunkSize,
728 ActiveParticle* activeParticle,
730 particlePairPredicate
737#include "ParticleSetIterators.cpph"
Definition of particle-particle interaction.
Definition of particle update (unary operation)
tarch::multicore::BooleanSemaphore _multiscaleInteractionSemaphore
If particles on multiple levels interact, we have to be very careful and ensure that multiple subcell...
std::pair< std::bitset< SubChunkSize >, std::bitset< SubChunkSize > > identifyInteractingParticlesFixedLocalParticle(const peano4::datamanagement::CellMarker &marker, LocalParticle *localParticle, ActiveParticle *firstActiveParticleInSubchunk, int thisSubchunkSize, UpdateParticlePairWithinCellPredicate< LocalParticle > particlePairPredicate)
Identify interacting particles.
std::pair< std::bitset< SubChunkSize >, std::bitset< SubChunkSize > > identifyInteractingParticlesFixedActiveParticle(const peano4::datamanagement::CellMarker &marker, LocalParticle *firstLocalParticleInSubchunk, int thisSubchunkSize, ActiveParticle *activeParticle, UpdateParticlePairWithinCellPredicate< LocalParticle > particlePairPredicate)
Counterpart to other operations, but this time we loop over the local particle and keep the active on...
EvaluatePredicateInPrologueActiveLocalRealisation EvaluatePredicateInPrologueActiveLocal
CoalescedMemoryRealisation CoalescedMemory
GenericOffloadRealisation GenericOffload
CoalescedMemoryLocalActiveRealisation CoalescedMemoryLocalActive
CoalescedMemoryActiveLocalOffloadRealisation CoalescedMemoryActiveLocalOffload
EvaluatePredicateInPrologueLocalActiveRealisation EvaluatePredicateInPrologueLocalActive
CoalescedMemoryLocalActiveOffloadRealisation CoalescedMemoryLocalActiveOffload
EvaluatePredicateInPrologueRealisation EvaluatePredicateInPrologue
GenericRealisation Generic
CoalescedMemoryOffloadRealisation CoalescedMemoryOffload
CoalescedMemoryActiveLocalRealisation CoalescedMemoryActiveLocal
void forAllParticles(const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfCoalescedAssignedParticles, ::exaparty::kernels::kernelrealisation::GenericRealisation realisation)
Run over all particles and update them independent of each other.
std::function< bool(const peano4::datamanagement::CellMarker &marker, const Particle &localParticle, const Particle &activeParticle)> UpdateParticlePairWithinCellPredicate
typename std::remove_pointer< typename ParticleContainer::value_type >::type PCParticle
void forAllParticlePairs(const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::GenericRealisation realisation)
Run over all local particle-active particle combinations.
This file is part of the ExaParty project.
Vertex marker to provide information about selected vertex.