AutoPas  3.0.0
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth > Class Template Reference

This class provides the base for traversals using base steps based on cell coloring. More...

#include <ColorBasedTraversal.h>

Inheritance diagram for autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >:
Inheritance graph
[legend]
Collaboration diagram for autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >:
Collaboration graph
[legend]

Public Member Functions

void initTraversal () override
 load Data Layouts required for this Traversal if cells have been set through setCellsToTraverse().
 
void endTraversal () override
 write Data to AoS if cells have been set through setCellsToTraverse().
 
- Public Member Functions inherited from autopas::CellTraversal< ParticleCell >
 CellTraversal (const std::array< unsigned long, 3 > &dims)
 Constructor of CellTraversal.
 
virtual ~CellTraversal ()=default
 Destructor of CellTraversal.
 
virtual void setCellsToTraverse (std::vector< ParticleCell > &cells)
 Sets the cells to iterate over.
 
virtual void setSortingThreshold (size_t sortingThreshold)=0
 Set the sorting-threshold for traversals that use the CellFunctor If the sum of the number of particles in two cells is greater or equal to that value, the CellFunctor creates a sorted view of the particles to avoid unnecessary distance checks.
 
- Public Member Functions inherited from autopas::TraversalInterface
virtual ~TraversalInterface ()=default
 Destructor of TraversalInterface.
 
 TraversalInterface (DataLayoutOption dataLayout, bool useNewton3)
 Constructor of the TraversalInterface.
 
virtual TraversalOption getTraversalType () const =0
 Return a enum representing the name of the traversal class.
 
virtual bool isApplicable () const =0
 Checks if the traversal is applicable to the current state of the domain.
 
virtual void initTraversal ()=0
 Initializes the traversal.
 
virtual void traverseParticles ()=0
 Traverse the particles by pairs, triplets etc.
 
virtual void endTraversal ()=0
 Finalizes the traversal.
 
bool getUseNewton3 () const
 Return whether the traversal uses newton 3.
 
DataLayoutOption getDataLayout () const
 Return the data layout option.
 

Protected Member Functions

 ColorBasedTraversal (const std::array< unsigned long, 3 > &dims, Functor *functor, const double interactionLength, const std::array< double, 3 > &cellLength, DataLayoutOption dataLayout, bool useNewton3)
 Constructor of the ColorBasedTraversal.
 
 ~ColorBasedTraversal () override=default
 Destructor of ColorBasedTraversal.
 
template<typename LoopBody >
void colorTraversal (LoopBody &&loopBody, const std::array< unsigned long, 3 > &end, const std::array< unsigned long, 3 > &stride, const std::array< unsigned long, 3 > &offset={0ul, 0ul, 0ul})
 The main traversal of the ColorBasedTraversal.
 
virtual void notifyColorChange (unsigned long newColor)
 This method is called when the color during the traversal has changed.
 

Protected Attributes

const double _interactionLength
 Interaction length (cutoff + skin).
 
const std::array< double, 3 > _cellLength
 cell length in CellBlock3D.
 
std::array< unsigned long, 3 > _overlap
 overlap of interacting cells.
 
- Protected Attributes inherited from autopas::CellTraversal< ParticleCell >
std::array< unsigned long, 3 > _cellsPerDimension
 The dimensions of the cellblock.
 
std::vector< ParticleCell > * _cells
 The cells to traverse.
 
- Protected Attributes inherited from autopas::TraversalInterface
DataLayoutOption _dataLayout
 The datalayout used by this traversal.
 
bool _useNewton3
 If this traversal makes use of newton3.
 

Detailed Description

template<class ParticleCell, class Functor, int collapseDepth = 3>
class autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >

This class provides the base for traversals using base steps based on cell coloring.

Template Parameters
ParticleCellthe type of cells
FunctorThe functor that defines the interaction between particles.
collapseDepthSet the depth of loop collapsion for OpenMP. Loop variables from outer to inner loop: z,y,x

Constructor & Destructor Documentation

◆ ColorBasedTraversal()

template<class ParticleCell , class Functor , int collapseDepth = 3>
autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >::ColorBasedTraversal ( const std::array< unsigned long, 3 > &  dims,
Functor functor,
const double  interactionLength,
const std::array< double, 3 > &  cellLength,
DataLayoutOption  dataLayout,
bool  useNewton3 
)
inlineexplicitprotected

Constructor of the ColorBasedTraversal.

Parameters
dimsThe dimensions of the cellblock, i.e. the number of cells in x, y and z direction.
functorThe functor that defines the interaction between particles.
interactionLengthInteraction length (cutoff + skin).
cellLengthcell length.
dataLayoutThe data layout with which this traversal should be initialized.
useNewton3Parameter to specify whether the traversal makes use of newton3 or not.

Member Function Documentation

◆ colorTraversal()

template<class ParticleCell , class Functor , int collapseDepth>
template<typename LoopBody >
void autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >::colorTraversal ( LoopBody &&  loopBody,
const std::array< unsigned long, 3 > &  end,
const std::array< unsigned long, 3 > &  stride,
const std::array< unsigned long, 3 > &  offset = {0ul, 0ul, 0ul} 
)
inlineprotected

The main traversal of the ColorBasedTraversal.

Template Parameters
LoopBodytype of the loop body
Parameters
loopBodyThe body of the loop as a function. Normally a lambda function, that takes as parameters (x,y,z). If you need additional input from outside, please use captures (by reference).
end3D index until interactions are processed (exclusive).
strideDistance (in cells) to the next cell of the same color.
offsetinitial offset (in cells) in which cell to start the traversal.

◆ endTraversal()

template<class ParticleCell , class Functor , int collapseDepth = 3>
void autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >::endTraversal ( )
inlineoverridevirtual

write Data to AoS if cells have been set through setCellsToTraverse().

Todo:
find a condition on when to use omp or when it is just overhead

Implements autopas::TraversalInterface.

◆ initTraversal()

template<class ParticleCell , class Functor , int collapseDepth = 3>
void autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >::initTraversal ( )
inlineoverridevirtual

load Data Layouts required for this Traversal if cells have been set through setCellsToTraverse().

Todo:
find a condition on when to use omp or when it is just overhead

Implements autopas::TraversalInterface.

◆ notifyColorChange()

template<class ParticleCell , class Functor , int collapseDepth = 3>
virtual void autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >::notifyColorChange ( unsigned long  newColor)
inlineprotectedvirtual

This method is called when the color during the traversal has changed.

Parameters
newColorThe new current color.

Reimplemented in autopas::C08TraversalColorChangeNotify< ParticleCell, PairwiseFunctor >.

Member Data Documentation

◆ _overlap

template<class ParticleCell , class Functor , int collapseDepth = 3>
std::array<unsigned long, 3> autopas::ColorBasedTraversal< ParticleCell, Functor, collapseDepth >::_overlap
protected

overlap of interacting cells.

Array allows asymmetric cell sizes.


The documentation for this class was generated from the following file: