AutoPas  3.0.0
Loading...
Searching...
No Matches
Public Member Functions | List of all members
autopas::VerletListsCells< Particle_T, NeighborList > Class Template Reference

Linked Cells with Verlet Lists container. More...

#include <VerletListsCells.h>

Inheritance diagram for autopas::VerletListsCells< Particle_T, NeighborList >:
Inheritance graph
[legend]
Collaboration diagram for autopas::VerletListsCells< Particle_T, NeighborList >:
Collaboration graph
[legend]

Public Member Functions

 VerletListsCells (const std::array< double, 3 > &boxMin, const std::array< double, 3 > &boxMax, const double cutoff, const double skin=0, const unsigned int rebuildFrequency=2, const double cellSizeFactor=1.0, const LoadEstimatorOption loadEstimator=LoadEstimatorOption::squaredParticlesPerCell, typename VerletListsCellsHelpers::VLCBuildType dataLayoutDuringListRebuild=VerletListsCellsHelpers::VLCBuildType::soaBuild)
 Constructor of the VerletListsCells class.
 
ContainerOption getContainerType () const override
 Get the ContainerType.
 
BalancedTraversal::EstimatorFunction getLoadEstimatorFunction ()
 Generates the load estimation function depending on _loadEstimator.
 
void computeInteractions (TraversalInterface *traversal) override
 Iterates over all particle multiples (e.g.
 
size_t getNumberOfPartners (const Particle_T *particle) const
 Gets the number of neighbors over all neighbor lists that belong to this particle.
 
void rebuildNeighborListsC08 ()
 Special case of building the neighbor lists in c08 style where all lists that belong to one base step are stored together.
 
void rebuildNeighborLists (TraversalInterface *traversal) override
 Rebuilds the neighbor lists for the next traversals.
 
const std::array< double, 3 > & getCellLength () const
 Return the cell length of the underlying linked cells structure, normally needed only for unit tests.
 
- Public Member Functions inherited from autopas::VerletListsLinkedBase< Particle_T >
 VerletListsLinkedBase (const std::array< double, 3 > &boxMin, const std::array< double, 3 > &boxMax, const double cutoff, const double skin, const unsigned int rebuildFrequency, const std::set< TraversalOption > &applicableTraversals, const double cellSizeFactor)
 Constructor of the VerletListsLinkedBase class.
 
CellType getParticleCellTypeEnum () const override
 Get the ParticleCell type as an Enum.
 
void setStepsSinceLastRebuild (size_t stepsSinceLastRebuild) override
 Set the number of time-steps since last neighbor list rebuild.
 
void reserve (size_t numParticles, size_t numParticlesHaloEstimate) override
 Reserve memory for a given number of particles in the container and logic layers.
 
void addParticleImpl (const Particle_T &p) override
 Adds a particle to the container.
 
void addHaloParticleImpl (const Particle_T &haloParticle) override
 Adds a particle to the container that lies in the halo region of the container.
 
size_t size () const override
 Get the total number of particles saved in the container (owned + halo + dummy).
 
size_t getNumberOfParticles (IteratorBehavior behavior) const override
 Get the number of particles with respect to the specified IteratorBehavior.
 
void deleteHaloParticles () override
 Deletes all halo particles.
 
void deleteAllParticles () override
 Deletes all particles.
 
std::tuple< const Particle_T *, size_t, size_t > getParticle (size_t cellIndex, size_t particleIndex, IteratorBehavior iteratorBehavior, const std::array< double, 3 > &boxMin, const std::array< double, 3 > &boxMax) const override
 Fetch the pointer to a particle, identified via a cell and particle index.
 
std::tuple< const Particle_T *, size_t, size_t > getParticle (size_t cellIndex, size_t particleIndex, IteratorBehavior iteratorBehavior) const override
 Fetch the pointer to a particle, identified via a cell and particle index.
 
template<bool regionIter>
std::tuple< const Particle_T *, size_t, size_t > getParticleImpl (size_t cellIndex, size_t particleIndex, IteratorBehavior iteratorBehavior, const std::array< double, 3 > &boxMin, const std::array< double, 3 > &boxMax) const
 Container specific implementation for getParticle.
 
bool deleteParticle (Particle_T &particle) override
 Deletes the given particle as long as this does not compromise the validity of the container.
 
bool deleteParticle (size_t cellIndex, size_t particleIndex) override
 Deletes the particle at the given index positions as long as this does not compromise the validity of the container.
 
std::vector< Particle_T > updateContainer (bool keepNeighborListsValid) override
 Updates the container.
 
bool updateHaloParticle (const Particle_T &haloParticle) override
 Searches the provided halo particle and updates the found particle.
 
ContainerIterator< Particle_T, true, false > begin (IteratorBehavior behavior=IteratorBehavior::ownedOrHalo, typename ContainerIterator< Particle_T, true, false >::ParticleVecType *additionalVectors=nullptr) override
 Iterate over all particles using for(auto iter = container.begin(); iter.isValid(); ++iter) .
 
ContainerIterator< Particle_T, false, false > begin (IteratorBehavior behavior=IteratorBehavior::ownedOrHalo, typename ContainerIterator< Particle_T, false, false >::ParticleVecType *additionalVectors=nullptr) const override
 Iterate over all particles using for(auto iter = container.begin(); iter.isValid(); ++iter) .
 
template<typename Lambda >
void forEach (Lambda forEachLambda, IteratorBehavior behavior)
 Execute code on all particles in this container as defined by a lambda function.
 
template<typename Lambda , typename A >
void reduce (Lambda reduceLambda, A &result, IteratorBehavior behavior)
 Reduce properties of particles as defined by a lambda function.
 
ContainerIterator< Particle_T, true, true > getRegionIterator (const std::array< double, 3 > &lowerCorner, const std::array< double, 3 > &higherCorner, IteratorBehavior behavior, typename ContainerIterator< Particle_T, true, true >::ParticleVecType *additionalVectors=nullptr) override
 Iterate over all particles in a specified region for(auto iter = container.getRegionIterator(lowCorner, highCorner);iter.isValid();++iter) .
 
ContainerIterator< Particle_T, false, true > getRegionIterator (const std::array< double, 3 > &lowerCorner, const std::array< double, 3 > &higherCorner, IteratorBehavior behavior, typename ContainerIterator< Particle_T, false, true >::ParticleVecType *additionalVectors=nullptr) const override
 Iterate over all particles in a specified region for(auto iter = container.getRegionIterator(lowCorner, highCorner);iter.isValid();++iter) .
 
template<typename Lambda >
void forEachInRegion (Lambda forEachLambda, const std::array< double, 3 > &lowerCorner, const std::array< double, 3 > &higherCorner, IteratorBehavior behavior)
 Execute code on all particles in this container in a certain region as defined by a lambda function.
 
template<typename Lambda , typename A >
void reduceInRegion (Lambda reduceLambda, A &result, const std::array< double, 3 > &lowerCorner, const std::array< double, 3 > &higherCorner, IteratorBehavior behavior)
 Execute code on all particles in this container in a certain region as defined by a lambda function.
 
const std::array< std::size_t, 3 > & getCellsPerDimension () const
 Get the dimension of the used cellblock including the haloboxes.
 
TraversalSelectorInfo getTraversalSelectorInfo () const override
 Generates a traversal selector info for this container.
 
const std::array< double, 3 > & getBoxMax () const final
 Get the upper corner of the container without halo.
 
const std::array< double, 3 > & getBoxMin () const final
 Get the lower corner of the container without halo.
 
double getCutoff () const final
 Return the cutoff of the container.
 
void setCutoff (double cutoff) final
 Set the cutoff of the container.
 
double getVerletSkin () const final
 Return the verletSkin of the container verletSkin.
 
double getInteractionLength () const final
 Return the interaction length (cutoff+skin) of the container.
 
- Public Member Functions inherited from autopas::ParticleContainerInterface< Particle_T >
virtual CellType getParticleCellTypeEnum () const =0
 Get the ParticleCell type as an Enum.
 
 ParticleContainerInterface (double skin)
 Constructor.
 
virtual ~ParticleContainerInterface ()=default
 Destructor of ParticleContainerInterface.
 
 ParticleContainerInterface (const ParticleContainerInterface &obj)=delete
 Delete the copy constructor to prevent unwanted copies.
 
ParticleContainerInterfaceoperator= (const ParticleContainerInterface &other)=delete
 Delete the copy assignment operator to prevent unwanted copies.
 
virtual ContainerOption getContainerType () const =0
 Get the ContainerType.
 
virtual void reserve (size_t numParticles, size_t numParticlesHaloEstimate)=0
 Reserve memory for a given number of particles in the container and logic layers.
 
template<bool checkInBox = true>
void addParticle (const Particle_T &p)
 Adds a particle to the container.
 
template<bool checkInBox = true>
void addHaloParticle (const Particle_T &haloParticle)
 Adds a particle to the container that lies in the halo region of the container.
 
virtual bool updateHaloParticle (const Particle_T &haloParticle)=0
 Update a halo particle of the container with the given haloParticle.
 
virtual void rebuildNeighborLists (TraversalInterface *traversal)=0
 Rebuilds the neighbor lists for the next traversals.
 
virtual void deleteHaloParticles ()=0
 Deletes all halo particles.
 
virtual void deleteAllParticles ()=0
 Deletes all particles.
 
virtual size_t getNumberOfParticles (IteratorBehavior behavior=IteratorBehavior::owned) const =0
 Get the number of particles with respect to the specified IteratorBehavior.
 
virtual size_t size () const =0
 Get the total number of particles saved in the container (owned + halo + dummy).
 
virtual ContainerIterator< ParticleType, true, false > begin (IteratorBehavior behavior=autopas::IteratorBehavior::ownedOrHalo, typename ContainerIterator< ParticleType, true, false >::ParticleVecType *additionalVectors=nullptr)=0
 Iterate over all particles using for(auto iter = container.begin(); iter.isValid(); ++iter) .
 
virtual ContainerIterator< ParticleType, false, false > begin (IteratorBehavior behavior=autopas::IteratorBehavior::ownedOrHalo, typename ContainerIterator< ParticleType, false, false >::ParticleVecType *additionalVectors=nullptr) const =0
 Iterate over all particles using for(auto iter = container.begin(); iter.isValid(); ++iter) .
 
virtual ContainerIterator< ParticleType, false, false > cbegin (IteratorBehavior behavior=autopas::IteratorBehavior::ownedOrHalo, typename ContainerIterator< ParticleType, false, false >::ParticleVecType *additionalVectors=nullptr) const final
 Iterate over all particles using for(auto iter = container.begin(); iter.isValid(); ++iter) .
 
virtual ContainerIterator< ParticleType, true, true > getRegionIterator (const std::array< double, 3 > &lowerCorner, const std::array< double, 3 > &higherCorner, IteratorBehavior behavior, typename ContainerIterator< ParticleType, true, true >::ParticleVecType *additionalVectors=nullptr)=0
 Iterate over all particles in a specified region for(auto iter = container.getRegionIterator(lowCorner, highCorner);iter.isValid();++iter) .
 
virtual ContainerIterator< ParticleType, false, true > getRegionIterator (const std::array< double, 3 > &lowerCorner, const std::array< double, 3 > &higherCorner, IteratorBehavior behavior, typename ContainerIterator< ParticleType, false, true >::ParticleVecType *additionalVectors=nullptr) const =0
 Iterate over all particles in a specified region for(auto iter = container.getRegionIterator(lowCorner, highCorner);iter.isValid();++iter) .
 
constexpr bool end () const
 Dummy to make range-based for loops work.
 
virtual void computeInteractions (TraversalInterface *traversal)=0
 Iterates over all particle multiples (e.g.
 
virtual const std::array< double, 3 > & getBoxMax () const =0
 Get the upper corner of the container without halo.
 
virtual const std::array< double, 3 > & getBoxMin () const =0
 Get the lower corner of the container without halo.
 
virtual double getCutoff () const =0
 Return the cutoff of the container.
 
virtual void setCutoff (double cutoff)=0
 Set the cutoff of the container.
 
virtual double getVerletSkin () const =0
 Return the verletSkin of the container verletSkin.
 
virtual size_t getStepsSinceLastRebuild () const
 Return the number of time-steps since last neighbor list rebuild.
 
virtual void setStepsSinceLastRebuild (size_t stepsSinceLastRebuild)
 Set the number of time-steps since last neighbor list rebuild.
 
virtual double getInteractionLength () const =0
 Return the interaction length (cutoff+skin) of the container.
 
virtual std::vector< ParticleTypeupdateContainer (bool keepNeighborListsValid)=0
 Updates the container.
 
virtual TraversalSelectorInfo getTraversalSelectorInfo () const =0
 Generates a traversal selector info for this container.
 
std::set< TraversalOption > getAllTraversals (const InteractionTypeOption interactionType) const
 Generates a list of all traversals that are theoretically applicable to this container.
 
virtual std::tuple< const Particle_T *, size_t, size_t > getParticle (size_t cellIndex, size_t particleIndex, IteratorBehavior iteratorBehavior) const =0
 Fetch the pointer to a particle, identified via a cell and particle index.
 
virtual std::tuple< const Particle_T *, size_t, size_t > getParticle (size_t cellIndex, size_t particleIndex, IteratorBehavior iteratorBehavior, const std::array< double, 3 > &boxMin, const std::array< double, 3 > &boxMax) const =0
 Fetch the pointer to a particle, identified via a cell and particle index.
 
std::tuple< Particle_T *, size_t, size_t > getParticle (size_t cellIndex, size_t particleIndex, IteratorBehavior iteratorBehavior, const std::array< double, 3 > &boxMin, const std::array< double, 3 > &boxMax)
 Fetch the pointer to a particle, identified via a cell and particle index.
 
std::tuple< Particle_T *, size_t, size_t > getParticle (size_t cellIndex, size_t particleIndex, IteratorBehavior iteratorBehavior)
 Fetch the pointer to a particle, identified via a cell and particle index.
 
virtual bool deleteParticle (Particle_T &particle)=0
 Deletes the given particle as long as this does not compromise the validity of the container.
 
virtual bool deleteParticle (size_t cellIndex, size_t particleIndex)=0
 Deletes the particle at the given index positions as long as this does not compromise the validity of the container.
 

Additional Inherited Members

- Public Types inherited from autopas::ParticleContainerInterface< Particle_T >
using ParticleType = Particle_T
 Type of the Particle.
 
virtual void addParticleImpl (const Particle_T &p)=0
 Adds a particle to the container.
 
virtual void addHaloParticleImpl (const Particle_T &haloParticle)=0
 Adds a particle to the container that lies in the halo region of the container.
 
- Protected Attributes inherited from autopas::VerletListsLinkedBase< Particle_T >
LinkedCells< Particle_T > _linkedCells
 internal linked cells storage, handles Particle storage and used to build verlet lists
 
std::atomic< bool > _neighborListIsValid {false}
 specifies if the neighbor list is currently valid
 
bool _verletBuiltNewton3 {false}
 specifies if the current verlet list was built for newton3
 
- Protected Attributes inherited from autopas::ParticleContainerInterface< Particle_T >
size_t _stepsSinceLastRebuild {0}
 Stores the number of time-steps since last neighbor list rebuild.
 
double _skin
 Skin distance a particle is allowed to move in one time-step.
 

Detailed Description

template<class Particle_T, class NeighborList>
class autopas::VerletListsCells< Particle_T, NeighborList >

Linked Cells with Verlet Lists container.

The VerletListsCells class uses neighborhood lists for each cell to calculate pairwise interactions of particles. It is optimized for a constant, i.e. particle independent, cutoff radius of the interaction. Cells are created using a cell size of at least cutoff + skin.

Template Parameters
Particle_T
NeighborListThe neighbor list used by this container.

Constructor & Destructor Documentation

◆ VerletListsCells()

template<class Particle_T , class NeighborList >
autopas::VerletListsCells< Particle_T, NeighborList >::VerletListsCells ( const std::array< double, 3 > &  boxMin,
const std::array< double, 3 > &  boxMax,
const double  cutoff,
const double  skin = 0,
const unsigned int  rebuildFrequency = 2,
const double  cellSizeFactor = 1.0,
const LoadEstimatorOption  loadEstimator = LoadEstimatorOption::squaredParticlesPerCell,
typename VerletListsCellsHelpers::VLCBuildType  dataLayoutDuringListRebuild = VerletListsCellsHelpers::VLCBuildType::soaBuild 
)
inline

Constructor of the VerletListsCells class.

The neighbor lists are build using a search radius of cutoff + skin*rebuildfrequency.

Parameters
boxMinThe lower corner of the domain.
boxMaxThe upper corner of the domain.
cutoffThe cutoff radius of the interaction.
rebuildFrequencyThe rebuild Frequency.
skinThe skin radius.
cellSizeFactorCell size factor relative to cutoff.
loadEstimatorLoad estimation algorithm for balanced traversals.
dataLayoutDuringListRebuildData layout during the list generation. Has no influence on list layout.

Member Function Documentation

◆ computeInteractions()

template<class Particle_T , class NeighborList >
void autopas::VerletListsCells< Particle_T, NeighborList >::computeInteractions ( TraversalInterface traversal)
inlineoverridevirtual

Iterates over all particle multiples (e.g.

pairs, triplets) in the container using the given traversal.

Parameters
traversalThe traversal to use for the iteration.

Implements autopas::ParticleContainerInterface< Particle_T >.

◆ getCellLength()

template<class Particle_T , class NeighborList >
const std::array< double, 3 > & autopas::VerletListsCells< Particle_T, NeighborList >::getCellLength ( ) const
inline

Return the cell length of the underlying linked cells structure, normally needed only for unit tests.

Returns

◆ getContainerType()

template<class Particle_T , class NeighborList >
ContainerOption autopas::VerletListsCells< Particle_T, NeighborList >::getContainerType ( ) const
inlineoverridevirtual

Get the ContainerType.

Returns
ContainerOption of the type of this container.

Implements autopas::ParticleContainerInterface< Particle_T >.

◆ getLoadEstimatorFunction()

template<class Particle_T , class NeighborList >
BalancedTraversal::EstimatorFunction autopas::VerletListsCells< Particle_T, NeighborList >::getLoadEstimatorFunction ( )
inline

Generates the load estimation function depending on _loadEstimator.

Returns
load estimator function object.

◆ getNumberOfPartners()

template<class Particle_T , class NeighborList >
size_t autopas::VerletListsCells< Particle_T, NeighborList >::getNumberOfPartners ( const Particle_T *  particle) const
inline

Gets the number of neighbors over all neighbor lists that belong to this particle.

Parameters
particle
Returns
the size of the neighbor list(s) of this particle

◆ rebuildNeighborLists()

template<class Particle_T , class NeighborList >
void autopas::VerletListsCells< Particle_T, NeighborList >::rebuildNeighborLists ( TraversalInterface traversal)
inlineoverridevirtual

Rebuilds the neighbor lists for the next traversals.

Parameters
traversalThe used traversal.

Implements autopas::ParticleContainerInterface< Particle_T >.


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