Peano
Loading...
Searching...
No Matches
DependencyChecks.h
Go to the documentation of this file.
1#pragma once
2
4
5#include <string>
6#include <type_traits>
7
8
9namespace exaparty {
28 namespace dependencychecks {
43
44 std::string toString(Invariant policy);
45
46 // some templates for convenience and code readability.
47 template <typename ParticleContainer>
48 using PCParticle = typename std::remove_pointer<
49 typename ParticleContainer::value_type>::type;
50
51 template <typename ParticleContainer>
53 ParticleContainer>::DependencyChecksAlgorithmStepLastUpdated;
54
55 template <typename ParticleContainer>
57 ParticleContainer>::DependencyChecksInitStepLastUpdated;
58
59 template <typename ParticleContainer>
61 ParticleContainer>::DependencyChecksPeanoEventUsedBySwift;
62
63 template <typename Particle>
64 using PAlgorithmStepEnum = typename std::remove_pointer<
65 Particle>::type::DependencyChecksAlgorithmStepLastUpdated;
66
67 template <typename Particle>
68 using PInitStepEnum = typename std::remove_pointer<
69 Particle>::type::DependencyChecksInitStepLastUpdated;
70
71 template <typename Particle>
72 using PSweepStageEnum = typename std::remove_pointer<
73 Particle>::type::DependencyChecksPeanoEventUsedBySwift;
74
75
76 namespace internal {
85 bool isValid(
86 Invariant policy,
87 bool workOnParticle,
88 bool particleIsLocal,
89 int numberOfUpdates,
90 int numberOfMaskOuts
91 );
92
97
111 Invariant policy,
112 int numberOfSteps
113 );
114
166 template <typename Particle>
167 static std::string outputParticle(
168 const Particle* particle,
169 PAlgorithmStepEnum<Particle> algorithmStep,
170 PSweepStageEnum<Particle> sweepStageMarkerEnum,
171 const int errors
172 );
173
174 template <typename Particle>
175 static std::string outputParticle(
176 const Particle* particle,
177 PInitStepEnum<Particle> algorithmStep,
178 PSweepStageEnum<Particle> sweepStageMarkerEnum,
179 const int errors
180 );
181
202 Invariant policy,
203 bool isLocal,
204 const int currentStep,
205 const int currentStage,
206 const int nsteps,
207 const int nstages,
208 const int* sweepStateProgression
209 );
210
211
226 Invariant policy,
227 const int currentStep,
228 const int currentStage,
229 const int nsteps,
230 const int nstages,
231 const int* sweepStateProgression
232 );
233 } // namespace internal
234
235
270 template <typename ParticleContainer>
271 static void markAlgorithmStep(
272 const ParticleContainer& particles,
274 PCAlgorithmStepEnum<ParticleContainer> algorithmStepMarkerEnum,
275 PCSweepStageEnum<ParticleContainer> sweepStageMarkerEnum,
276 Invariant policy,
278 PCParticle<ParticleContainer>> workOnParticle,
279 int spacetreeId
280 );
281
282
289 template <typename ParticleContainer>
290 static void markAlgorithmStep(
291 const ParticleContainer& localParticles,
292 const ParticleContainer& activeParticles,
294 PCAlgorithmStepEnum<ParticleContainer> algorithmStepMarkerEnum,
295 PCSweepStageEnum<ParticleContainer> sweepStageMarkerEnum,
296 Invariant policy,
298 typename std::remove_pointer<
299 typename ParticleContainer::value_type>::type> workOnParticle,
300 int spacetreeId
301 );
302
303
326 template <typename ParticleContainer>
327 static void markInitStep(
328 const ParticleContainer& localParticles,
330 PCInitStepEnum<ParticleContainer> initStepMarkerEnum,
331 PCSweepStageEnum<ParticleContainer> sweepStageMarkerEnum,
332 Invariant policy,
334 PCParticle<ParticleContainer>> workOnParticle,
335 int spacetreeId
336 );
337
338
345 template <typename ParticleContainer>
346 static void markInitStep(
347 const ParticleContainer& localParticles,
348 const ParticleContainer& activeParticles,
350 PCInitStepEnum<ParticleContainer> initStepMarkerEnum,
351 PCSweepStageEnum<ParticleContainer> sweepStageMarkerEnum,
352 Invariant policy,
354 PCParticle<ParticleContainer>> workOnParticle,
355 int spacetreeId
356 );
357
358
385 template <typename ParticleContainer>
387 Invariant policy,
388 const ParticleContainer& localParticles,
389 const ParticleContainer& activeParticles,
391 PCAlgorithmStepEnum<ParticleContainer> algorithmStepMarkerEnum,
392 PCSweepStageEnum<ParticleContainer> sweepStageMarkerEnum,
394 PCParticle<ParticleContainer>> workOnParticle,
395 int spacetreeId
396 );
397
398
399 template <typename ParticleContainer>
401 Invariant policy,
402 const ParticleContainer& localParticles,
404 PCAlgorithmStepEnum<ParticleContainer> algorithmStepMarkerEnum,
405 PCSweepStageEnum<ParticleContainer> sweepStageMarkerEnum,
407 PCParticle<ParticleContainer>> workOnParticle,
408 int spacetreeId
409 );
410
411
437 template <typename ParticleContainer>
439 Invariant policy,
440 const ParticleContainer& assignedParticles,
441 PCAlgorithmStepEnum<ParticleContainer> algorithmStepMarkerEnum,
442 int spacetreeId
443 );
444
445
472 template <typename ParticleContainer>
473 static void checkInitStep(
474 Invariant policy,
475 const ParticleContainer& localParticles,
477 PCInitStepEnum<ParticleContainer> initStepMarkerEnum,
478 PCSweepStageEnum<ParticleContainer> sweepStageMarkerEnum,
480 PCParticle<ParticleContainer>> workOnParticle,
481 int spacetreeId
482 );
483
484
485 template <typename ParticleContainer>
486 static void checkInitStep(
487 Invariant policy,
488 const ParticleContainer& localParticles,
489 const ParticleContainer& activeParticles,
491 PCInitStepEnum<ParticleContainer> initStepMarkerEnum,
492 PCSweepStageEnum<ParticleContainer> sweepStageMarkerEnum,
494 PCParticle<ParticleContainer>> workOnParticle,
495 int spacetreeId
496 );
497
507 template <typename ParticleContainer>
509 Invariant policy,
510 const ParticleContainer& activeParticles,
511 PCInitStepEnum<ParticleContainer> initStepMarkerEnum,
512 int spacetreeId
513 );
514
515
523 template <typename ParticleContainer>
525 const ParticleContainer& localParticles
526 );
527
528
536 template <typename ParticleContainer>
538 const ParticleContainer& localParticles
539 );
540
541
542 } // namespace dependencychecks
543} // namespace exaparty
544
545
546#include "../dependencychecks/DependencyChecks.cpph"
int firstFutureStepThatHasToBeCleared(Invariant policy, int numberOfSteps)
Which future steps should be checked.
bool previousStepsAllHaveToAccessAtLeastOnce(Invariant policy)
Do all previous steps have to alter state at least once.
int checkPastStages(Invariant policy, bool isLocal, const int currentStep, const int currentStage, const int nsteps, const int nstages, const int *sweepStateProgression)
Check that all previous steps and stages.
static std::string outputParticle(const Particle *particle, PAlgorithmStepEnum< Particle > algorithmStep, PSweepStageEnum< Particle > sweepStageMarkerEnum, const int errors)
This function is meant to be called on a particle on which dependency issues in the main algorithm st...
bool isValid(Invariant policy, bool workOnParticle, bool particleIsLocal, int numberOfUpdates, int numberOfMaskOuts)
Is current state that's to be updated valid.
int checkFutureStages(Invariant policy, const int currentStep, const int currentStage, const int nsteps, const int nstages, const int *sweepStateProgression)
Check that all steps and stages after the current one have not been done yet.
static void checkAlgorithmStep(Invariant policy, const ParticleContainer &localParticles, const ParticleContainer &activeParticles, const peano4::datamanagement::CellMarker &marker, PCAlgorithmStepEnum< ParticleContainer > algorithmStepMarkerEnum, PCSweepStageEnum< ParticleContainer > sweepStageMarkerEnum, ::exaparty::kernels::UpdateParticlePairWithinCellPredicate< PCParticle< ParticleContainer > > workOnParticle, int spacetreeId)
Dependency Check: Verify that particles have completed all the algorithm steps and stages of the main...
std::string toString(Invariant policy)
Invariant
Different invariants that have to hold for the code.
@ TouchAtLeastOnce_AllPreviousStepsUpdateAtLeastOnce_FutureStagesMayUpdate
@ TouchAtLeastOnce_AllPreviousStepsUpdateAtLeastOnce_MayOverwritePreviousCellUpdatesFromSameSweep
@ TouchFirstUsage_MaskOutAfterwards_AllPreviousStepsUpdateAtLeastOnce_SweepMayRerun
@ TouchAtMostOnce_MaskOutOtherwise_AllPreviousStepsUpdateAtLeastOnce_SweepMayRerun
@ TouchAtLeastOnce_AllPreviousStepsUpdateAtLeastOnce_MayOverwritePreviousCellUpdatesFromSameSweep_FutureStagesMayUpdate
static void clearDependencyChecksInitStep(const ParticleContainer &localParticles)
Clear the dependency check counters of the initialisation step dependency checks.
static void checkParticlesAssignedToVertexInTouchLastTimeInitStep(Invariant policy, const ParticleContainer &activeParticles, PCInitStepEnum< ParticleContainer > initStepMarkerEnum, int spacetreeId)
Dependency Check: At the final stage of a sweep (TouchVertexLastTime), check that all ActiveParticles...
static void checkInitStep(Invariant policy, const ParticleContainer &localParticles, const peano4::datamanagement::VertexMarker &marker, PCInitStepEnum< ParticleContainer > initStepMarkerEnum, PCSweepStageEnum< ParticleContainer > sweepStageMarkerEnum, ::exaparty::kernels::UpdateParticleAssignedToVertexPredicate< PCParticle< ParticleContainer > > workOnParticle, int spacetreeId)
Dependency Check: Verify that particles have completed all the algorithm steps and stages of the init...
PCParticle< ParticleContainer >::DependencyChecksInitStepLastUpdated PCInitStepEnum
static void markAlgorithmStep(const ParticleContainer &particles, const peano4::datamanagement::VertexMarker &marker, PCAlgorithmStepEnum< ParticleContainer > algorithmStepMarkerEnum, PCSweepStageEnum< ParticleContainer > sweepStageMarkerEnum, Invariant policy, ::exaparty::kernels::UpdateParticleAssignedToVertexPredicate< PCParticle< ParticleContainer > > workOnParticle, int spacetreeId)
Mark a localParticle having entered a sweep stage in a main algorithm step.
typename std::remove_pointer< typename ParticleContainer::value_type >::type PCParticle
static void checkParticlesAssignedToVertexInTouchLastTimeAlgorithmStep(Invariant policy, const ParticleContainer &assignedParticles, PCAlgorithmStepEnum< ParticleContainer > algorithmStepMarkerEnum, int spacetreeId)
Dependency Check: At the final stage of a sweep, i.e.
typename std::remove_pointer< Particle >::type::DependencyChecksAlgorithmStepLastUpdated PAlgorithmStepEnum
PCParticle< ParticleContainer >::DependencyChecksAlgorithmStepLastUpdated PCAlgorithmStepEnum
static void markInitStep(const ParticleContainer &localParticles, const peano4::datamanagement::VertexMarker &marker, PCInitStepEnum< ParticleContainer > initStepMarkerEnum, PCSweepStageEnum< ParticleContainer > sweepStageMarkerEnum, Invariant policy, ::exaparty::kernels::UpdateParticleAssignedToVertexPredicate< PCParticle< ParticleContainer > > workOnParticle, int spacetreeId)
Mark a localParticle having entered a sweep stage in a initialisation algorithm step.
typename std::remove_pointer< Particle >::type::DependencyChecksInitStepLastUpdated PInitStepEnum
PCParticle< ParticleContainer >::DependencyChecksPeanoEventUsedBySwift PCSweepStageEnum
static void clearDependencyChecksAlgorithmStep(const ParticleContainer &localParticles)
Clear the dependency check counters of the main algorithm step dependency checks.
typename std::remove_pointer< Particle >::type::DependencyChecksPeanoEventUsedBySwift PSweepStageEnum
std::function< bool(const peano4::datamanagement::CellMarker &marker, const Particle &localParticle, const Particle &activeParticle)> UpdateParticlePairWithinCellPredicate
std::function< bool(const peano4::datamanagement::VertexMarker &marker, const Particle &localParticle)> UpdateParticleAssignedToVertexPredicate
This file is part of the ExaParty project.
Definition __init__.py:1
Vertex marker to provide information about selected vertex.