AutoPas  3.0.0
Loading...
Searching...
No Matches
ParticleBinStructure.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <array>
10#include <vector>
11
12#include "ArrayMath.h"
13#include "ExceptionHandler.h"
15
16namespace autopas::utils {
35 public:
45 ParticleBinStructure(std::array<size_t, 3> numBinsPerDim, std::array<double, 3> binLength,
46 std::array<double, 3> boxMin, std::array<double, 3> boxMax, double cutoff);
47
57 ParticleBinStructure(size_t numBinsPerDim, std::array<double, 3> binLength, std::array<double, 3> boxMin,
58 std::array<double, 3> boxMax, double cutoff)
59 : ParticleBinStructure({numBinsPerDim, numBinsPerDim, numBinsPerDim}, binLength, boxMin, boxMax, cutoff){};
60
66 void countParticle(const std::array<double, 3> &particlePosition);
67
82
86 void resetCounters();
87
92 [[nodiscard]] const size_t &getTotalParticleCount() const;
93
98 [[nodiscard]] const std::vector<size_t> &getParticleCounts() const;
99
104 [[nodiscard]] const std::array<std::size_t, 3> &getNumBinsPerDim() const;
105
110 void setCellsPerDim(const std::array<std::size_t, 3> &numBinsPerDim);
111
116 [[nodiscard]] const std::array<double, 3> &getBinLength() const;
117
122 [[nodiscard]] const std::array<double, 3> &getBinLengthReciprocal() const;
123
128 void setBinLength(const std::array<double, 3> &binLength);
129
134 [[nodiscard]] const std::array<double, 3> &getBoxMin() const;
135
140 void setBoxMin(const std::array<double, 3> &boxMin);
141
146 [[nodiscard]] const std::array<double, 3> &getBoxMax() const;
147
152 void setBoxMax(const std::array<double, 3> &boxMax);
153
158 [[nodiscard]] std::size_t getNumberOfBins() const;
159
163 void resize();
164
169 [[nodiscard]] double getBinVolume() const;
170
177 [[nodiscard]] double getMeanParticlesPerBin() const;
178
185 [[nodiscard]] double getStdDevParticlesPerBin() const;
186
193 [[nodiscard]] double getRelStdDevParticlesPerBin() const;
194
201 [[nodiscard]] double getMeanDensity() const;
202
209 [[nodiscard]] double getStdDevDensity() const;
210
215 [[nodiscard]] double getMaxDensity() const;
216
223 [[nodiscard]] size_t getMaxParticlesPerBin() const;
224
231 [[nodiscard]] size_t getMinParticlesPerBin() const;
232
239 [[nodiscard]] size_t getMedianParticlesPerBin() const;
240
247 [[nodiscard]] size_t getLowerQuartileParticlesPerBin() const;
248
255 [[nodiscard]] size_t getUpperQuartileParticlesPerBin() const;
256
263 [[nodiscard]] size_t getNumEmptyBins() const;
264
273 [[nodiscard]] double getEstimatedNumberOfNeighborInteractions() const;
274
275 private:
279 std::vector<std::size_t> _particleCounts{0};
280
284 size_t _totalParticleCount{0};
285
289 std::array<std::size_t, 3> _numBinsPerDim{};
290
294 std::array<double, 3> _binLength{};
295
299 std::array<double, 3> _binLengthReciprocal{};
300
304 std::array<double, 3> _boxMin{};
305
309 std::array<double, 3> _boxMax{};
310
314 double _cutoff{};
315
320 bool _statisticsCalculated = false;
321
329 double _meanParticlesPerBin{};
330
334 double _meanDensity{};
335
339 double _stdDevParticlesPerBin{};
340
344 double _relStdDevParticlesPerBin{};
345
349 double _stdDevDensity{};
350
354 double _maxDensity{};
355
359 size_t _maxParticlesPerBin{};
360
364 size_t _minimumParticlesPerBin{};
365
369 size_t _medianParticlesPerBin{};
370
374 size_t _lowerQuartileParticlesPerBin{};
375
379 size_t _upperQuartileParticlesPerBin{};
380
384 size_t _numEmptyBins{};
385
393 double _estimatedNumberOfNeighborInteractions{};
394};
395} // namespace autopas::utils
Particle-counting bin structure.
Definition: ParticleBinStructure.h:34
size_t getMedianParticlesPerBin() const
Returns the median number of particles across all bins.
Definition: ParticleBinStructure.cpp:255
double getStdDevParticlesPerBin() const
Returns the standard deviation of the number of particles per bins.
Definition: ParticleBinStructure.cpp:206
size_t getMaxParticlesPerBin() const
Returns the maximum number of particles in a single bin.
Definition: ParticleBinStructure.cpp:241
double getMaxDensity() const
Returns the maximum density of any bin.
Definition: ParticleBinStructure.cpp:234
size_t getUpperQuartileParticlesPerBin() const
Returns the upper quartile (75th percentile) number of particles across all bins.
Definition: ParticleBinStructure.cpp:269
size_t getNumEmptyBins() const
Returns the number of empty bins.
Definition: ParticleBinStructure.cpp:276
ParticleBinStructure(size_t numBinsPerDim, std::array< double, 3 > binLength, std::array< double, 3 > boxMin, std::array< double, 3 > boxMax, double cutoff)
Constructor, for if there are the same number of bins in each dimension.
Definition: ParticleBinStructure.h:57
double getMeanDensity() const
Returns the mean density of particles per bins.
Definition: ParticleBinStructure.cpp:220
double getBinVolume() const
Getter for the volume of each bin.
Definition: ParticleBinStructure.cpp:197
const std::array< double, 3 > & getBinLengthReciprocal() const
Getter for the reciprocal of the dimensions of each bin.
Definition: ParticleBinStructure.cpp:177
const std::array< double, 3 > & getBoxMax() const
Getter for the box max.
Definition: ParticleBinStructure.cpp:189
size_t getLowerQuartileParticlesPerBin() const
Returns the lower quartile (25th percentile) number of particles across all bins.
Definition: ParticleBinStructure.cpp:262
std::size_t getNumberOfBins() const
Getter for the number of bins.
Definition: ParticleBinStructure.cpp:193
const std::vector< size_t > & getParticleCounts() const
Getter for the particle counts.
Definition: ParticleBinStructure.cpp:167
double getStdDevDensity() const
Returns the standard deviation of the density per bins.
Definition: ParticleBinStructure.cpp:227
void setBoxMax(const std::array< double, 3 > &boxMax)
Setter for the box max.
Definition: ParticleBinStructure.cpp:191
const size_t & getTotalParticleCount() const
Getter for the total number of particles counted.
Definition: ParticleBinStructure.cpp:165
const std::array< double, 3 > & getBoxMin() const
Getter for the box min.
Definition: ParticleBinStructure.cpp:185
double getEstimatedNumberOfNeighborInteractions() const
Returns the estimated number of neighbor interactions across all bins.
Definition: ParticleBinStructure.cpp:283
void calculateStatistics()
Calculates the following statistics:
Definition: ParticleBinStructure.cpp:84
size_t getMinParticlesPerBin() const
Returns the minimum number of particles in a single bin.
Definition: ParticleBinStructure.cpp:248
void countParticle(const std::array< double, 3 > &particlePosition)
Determines the appropriate bin for the particle based on its position, and increments the correspondi...
Definition: ParticleBinStructure.cpp:34
void setBoxMin(const std::array< double, 3 > &boxMin)
Setter for the box min.
Definition: ParticleBinStructure.cpp:187
void resize()
Resizes the particle count structure.
Definition: ParticleBinStructure.cpp:195
const std::array< double, 3 > & getBinLength() const
Getter for the dimensions of each bin.
Definition: ParticleBinStructure.cpp:175
void resetCounters()
Resets all counters to zero.
Definition: ParticleBinStructure.cpp:157
const std::array< std::size_t, 3 > & getNumBinsPerDim() const
Getter for the number of bins per dimension.
Definition: ParticleBinStructure.cpp:169
void setBinLength(const std::array< double, 3 > &binLength)
Setter for the dimension of each bin.
Definition: ParticleBinStructure.cpp:179
double getRelStdDevParticlesPerBin() const
Returns the standard deviation of the number of particles per bins relative to the mean.
Definition: ParticleBinStructure.cpp:213
void setCellsPerDim(const std::array< std::size_t, 3 > &numBinsPerDim)
Setter for the number of bins per dimension.
Definition: ParticleBinStructure.cpp:171
double getMeanParticlesPerBin() const
Returns the mean number of particles per bins.
Definition: ParticleBinStructure.cpp:199
In this namespace some helper classes and functions can be found used inside of AutoPas.
Definition: namespaces.h:44