31template <
class Particle_T>
36 using ParticleType = Particle_T;
67 VerletLists(
const std::array<double, 3> &boxMin,
const std::array<double, 3> &boxMax,
const double cutoff,
69 const double cellSizeFactor = 1.0)
71 _buildVerletListType(buildVerletListType) {}
76 [[nodiscard]] ContainerOption
getContainerType()
const override {
return ContainerOption::verletLists; }
81 if (verletTraversalInterface) {
110 if (not _soaListIsValid and traversal->
getDataLayout() == DataLayoutOption::soa) {
127 DataLayoutOption dataLayout;
129 dataLayout = DataLayoutOption::aos;
131 dataLayout = DataLayoutOption::soa;
134 _buildVerletListType);
139 this->
_linkedCells.getCellBlock().getCellLength(), dataLayout, useNewton3);
142 _soaListIsValid =
false;
151 size_t numParticles = 0;
152 _aosNeighborLists.clear();
155 for (
auto iter = this->
begin(IteratorBehavior::ownedOrHaloOrDummy); iter.isValid(); ++iter, ++numParticles) {
157 _aosNeighborLists[&(*iter)];
168 _soaNeighborLists.resize(_aosNeighborLists.size());
170 _particlePtr2indexMap.clear();
172 _particlePtr2indexMap.reserve(_aosNeighborLists.size());
177 for (
auto iter = this->
begin(IteratorBehavior::ownedOrHaloOrDummy); iter.isValid(); ++iter, ++index) {
179 _particlePtr2indexMap[&(*iter)] = index;
181 size_t accumulatedListSize = 0;
182 for (
const auto &[particlePtr, neighborPtrVector] : _aosNeighborLists) {
183 accumulatedListSize += neighborPtrVector.size();
184 size_t i_id = _particlePtr2indexMap[particlePtr];
186 _soaNeighborLists[i_id].resize(neighborPtrVector.size());
188 for (
auto &neighborPtr : neighborPtrVector) {
189 _soaNeighborLists[i_id][j] = _particlePtr2indexMap[neighborPtr];
195 "VerletLists::generateSoAListFromAoSVerletLists: average verlet list "
197 static_cast<double>(accumulatedListSize) / _aosNeighborLists.size());
198 _soaListIsValid =
true;
211 std::unordered_map<const Particle_T *, size_t> _particlePtr2indexMap;
217 std::vector<std::vector<size_t, AlignedAllocator<size_t>>> _soaNeighborLists;
222 bool _soaListIsValid{
false};
#define AutoPasLog(lvl, fmt,...)
Macro for logging providing common meta information without filename.
Definition: Logger.h:24
This class handles the storage of particles in their full form.
Definition: FullParticleCell.h:26
This class provides the lc_c08 traversal.
Definition: LCC08Traversal.h:28
This interface serves as a common parent class for all traversals.
Definition: TraversalInterface.h:18
virtual void endTraversal()=0
Finalizes the traversal.
virtual void traverseParticles()=0
Traverse the particles by pairs, triplets etc.
virtual void initTraversal()=0
Initializes the traversal.
DataLayoutOption getDataLayout() const
Return the data layout option.
Definition: TraversalInterface.h:69
bool getUseNewton3() const
Return whether the traversal uses newton 3.
Definition: TraversalInterface.h:63
This class provides the Traversal Interface for the verlet lists container.
Definition: VLTraversalInterface.h:22
virtual void setCellsAndNeighborLists(std::vector< LinkedParticleCell > &cells, typename VerletListHelpers< typename LinkedParticleCell::ParticleType >::NeighborListAoSType &aosNeighborLists, std::vector< std::vector< size_t, autopas::AlignedAllocator< size_t > > > &soaNeighborLists)
Sets the information the traversal needs for the iteration.
Definition: VLTraversalInterface.h:35
This functor can generate verlet lists using the typical pairwise traversal.
Definition: VerletListHelpers.h:31
std::unordered_map< Particle_T *, std::vector< Particle_T * > > NeighborListAoSType
Neighbor list AoS style.
Definition: VerletListHelpers.h:26
Base class for Verlet lists which use an underlying linked cells container.
Definition: VerletListsLinkedBase.h:25
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) .
Definition: VerletListsLinkedBase.h:206
bool _verletBuiltNewton3
specifies if the current verlet list was built for newton3
Definition: VerletListsLinkedBase.h:330
double getVerletSkin() const final
Return the verletSkin of the container verletSkin.
Definition: VerletListsLinkedBase.h:315
double getInteractionLength() const final
Return the interaction length (cutoff+skin) of the container.
Definition: VerletListsLinkedBase.h:320
std::atomic< bool > _neighborListIsValid
specifies if the neighbor list is currently valid
Definition: VerletListsLinkedBase.h:327
LinkedCells< Particle_T > _linkedCells
internal linked cells storage, handles Particle storage and used to build verlet lists
Definition: VerletListsLinkedBase.h:324
double getCutoff() const final
Return the cutoff of the container.
Definition: VerletListsLinkedBase.h:305
Verlet Lists container.
Definition: VerletLists.h:32
VerletLists(const std::array< double, 3 > &boxMin, const std::array< double, 3 > &boxMax, const double cutoff, const double skin, const BuildVerletListType buildVerletListType=BuildVerletListType::VerletSoA, const double cellSizeFactor=1.0)
Constructor of the VerletLists class.
Definition: VerletLists.h:67
BuildVerletListType
Enum that specifies how the verlet lists should be build.
Definition: VerletLists.h:46
@ VerletSoA
Build it using AoS.
Definition: VerletLists.h:54
@ VerletAoS
Build it using AoS.
Definition: VerletLists.h:50
virtual void updateVerletListsAoS(bool useNewton3)
Update the verlet lists for AoS usage.
Definition: VerletLists.h:121
size_t generateAoSNeighborLists()
Clears and then generates the AoS neighbor lists.
Definition: VerletLists.h:150
ContainerOption getContainerType() const override
Get the ContainerType.
Definition: VerletLists.h:76
void rebuildNeighborLists(TraversalInterface *traversal) override
Rebuilds the verlet lists, marks them valid and resets the internal counter.
Definition: VerletLists.h:104
void computeInteractions(TraversalInterface *traversal) override
Iterates over all particle multiples (e.g.
Definition: VerletLists.h:78
void generateSoAListFromAoSVerletLists()
Fills SoA neighbor list with particle indices.
Definition: VerletLists.h:166
VerletListHelpers< Particle_T >::NeighborListAoSType & getVerletListsAoS()
get the actual neighbor list
Definition: VerletLists.h:97
static void exception(const Exception e)
Handle an exception derived by std::exception.
Definition: ExceptionHandler.h:63
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:32