Peano
Loading...
Searching...
No Matches
ParticleSetIterators.h
Go to the documentation of this file.
1// This file is part of the ExaParty project. For conditions of distribution and
2// use, please see the copyright notice at www.peano-framework.org
3#pragma once
4
5
10
11
12namespace exaparty {
13 namespace kernels {
14
15 // template for convenience and code legibility.
16 template <typename ParticleContainer>
17 using PCParticle = typename std::remove_pointer<typename ParticleContainer::value_type>::type;
18
66 template <typename F, typename Particle>
68 F f,
70 Particle& localParticle
71 ) {
72 { f(marker, localParticle) } -> std::same_as<void>;
73 };
74
75 template <typename F, typename Particle>
76 concept ParticleUnaryOperatorOnCell = requires(
77 F f,
79 Particle& localParticle
80 ) {
81 { f(marker, localParticle) } -> std::same_as<void>;
82 };
83
178 template <typename F, typename LocalParticle, typename ActiveParticle>
179 concept ParticleBinaryOperator = requires(
180 F f,
182 LocalParticle& localParticle,
183 ActiveParticle& activeParticle
184 ) {
185 { f(marker, localParticle, activeParticle) } -> std::same_as<void>;
186 };
187
226
281 template <auto ParticleOp, auto PredicateOp>
284 auto& assignedParticles,
285 int numberOfCoalescedAssignedParticles,
287 );
288
289
294 template <auto ParticleOp, auto PredicateOp>
297 auto& assignedParticles,
298 int numberOfCoalescedAssignedParticles,
300 );
301
406 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
408 const exaparty::CellMetaData& cellMetaData,
409 auto& localParticles,
410 auto& activeParticles,
412 );
413
418 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
420 const exaparty::CellMetaData& cellMetaData,
421 auto& localParticles,
422 auto& activeParticles,
424 );
425
426 template <auto ParticleOp, auto PredicateOp>
429 auto& assignedParticles,
430 int numberOfAssignedParticles,
432 realisation
433 );
434
435 template <auto ParticleOp, auto PredicateOp>
438 auto& localParticles,
439 const std::vector<int>& numberOfLocalParticles,
441 realisation
442 );
443
444 template <auto ParticleOp, auto PredicateOp>
447 auto& assignedParticles,
448 int numberOfAssignedParticles,
450 realisation
451 );
452
453 template <auto ParticleOp, auto PredicateOp>
456 auto& localParticles,
457 const std::vector<int>& numberOfLocalParticles,
459 realisation
460 );
461
462 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
464 const exaparty::CellMetaData& cellMetaData,
465 auto& localParticles,
466 auto& activeParticles,
467 ::exaparty::kernels::kernelrealisation::
468 CoalescedMemoryActiveLocalRealisation realisation
469 );
470
471 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
473 const exaparty::CellMetaData& cellMetaData,
474 auto& localParticles,
475 auto& activeParticles,
476 ::exaparty::kernels::kernelrealisation::
477 CoalescedMemoryActiveLocalOffloadRealisation realisation
478 );
479
480 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
482 const exaparty::CellMetaData& cellMetaData,
483 auto& localParticles,
484 auto& activeParticles,
485 ::exaparty::kernels::kernelrealisation::
486 EvaluatePredicateInPrologueActiveLocalRealisation realisation
487 );
488
489 template <auto PairOperator, auto LocalPredicate, auto PairPredicate>
491 const exaparty::CellMetaData& cellMetaData,
492 auto& localParticles,
493 auto& activeParticles,
494 ::exaparty::kernels::kernelrealisation::
495 EvaluatePredicateInPrologueLocalActiveRealisation realisation
496 );
497
597 template <
598 auto ParticlePairOp,
599 auto LocalPredicateOp,
600 auto ParticlePairPredicateOp>
602 const exaparty::CellMetaData& cellMetaData,
603 auto& localParticles,
604 auto& activeParticles,
605 ::exaparty::kernels::kernelrealisation::
606 CoalescedMemoryActiveLocalRealisation realisation
607 );
608
609 template <
610 auto ParticlePairOp,
611 auto LocalPredicateOp,
612 auto ParticlePairPredicateOp>
614 const exaparty::CellMetaData& cellMetaData,
615 auto& localParticles,
616 auto& activeParticles,
617 ::exaparty::kernels::kernelrealisation::
618 CoalescedMemoryLocalActiveRealisation realisation
619 );
620
621 template <
622 auto ParticlePairOp,
623 auto LocalPredicateOp,
624 auto ParticlePairPredicateOp>
626 const exaparty::CellMetaData& cellMetaData,
627 auto& localParticles,
628 auto& activeParticles,
629 ::exaparty::kernels::kernelrealisation::
630 CoalescedMemoryLocalActiveOffloadRealisation realisation
631 );
632
640 template <auto ParticleOp, auto PredicateOp>
643 auto& assignedParticles,
644 int numberOfCoalescedAssignedParticles,
645 ::exaparty::kernels::kernelrealisation::
646 EvaluatePredicateInPrologueRealisation
647 );
648
649 template <auto ParticleOp, auto PredicateOp>
652 auto& localParticles,
653 const std::vector<int>& numberOfCoalescedLocalParticles,
654 ::exaparty::kernels::kernelrealisation::
655 EvaluatePredicateInPrologueRealisation
656 );
657
665 template <typename LocalParticleContainer, typename ActiveParticleContainer>
667 const exaparty::CellMetaData& cellMetaData,
668 auto& localParticles,
669 auto& activeParticles,
670 ::exaparty::kernels::kernelrealisation::
671 EvaluatePredicateInPrologueActiveLocalRealisation realisation
672 );
673
674 template <typename LocalParticleContainer, typename ActiveParticleContainer>
676 const exaparty::CellMetaData& cellMetaData,
677 auto& localParticles,
678 auto& activeParticles,
679 ::exaparty::kernels::kernelrealisation::
680 EvaluatePredicateInPrologueLocalActiveRealisation realisation
681 );
682
683 namespace internal {
690
691
701 template <
702 int SubChunkSize,
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
713 );
714
719 template <
720 int SubChunkSize,
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
731 );
732 } // namespace internal
733 } // namespace kernels
734} // namespace exaparty
735
736
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
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.
Definition __init__.py:1
Provide meta data around ExaParty cell.
Vertex marker to provide information about selected vertex.