SPH
Particle.h
Go to the documentation of this file.
1 #pragma once
2 
5 #include "system/Settings.h"
6 
8 
9 class Storage;
10 enum class QuantityId;
11 
17 class Particle {
18  friend struct ParticleVisitor;
19 
20 private:
21  Size idx;
22 
23  struct InternalQuantityData {
24  Dynamic value;
25  Dynamic dt;
26  Dynamic d2t;
27  };
28 
30 
32 
33 public:
37  Particle() = default;
38 
42  explicit Particle(const Size idx)
43  : idx(idx) {}
44 
49  Particle(const Storage& storage, const Size idx);
50 
58  Particle(const QuantityId id, const Dynamic& value, const Size idx);
59 
60  Particle(const Particle& other);
61 
62  Particle(Particle&& other);
63 
64  Particle& operator=(const Particle& other);
65 
66  Particle& operator=(Particle&& other);
67 
73  Particle& addValue(const QuantityId id, const Dynamic& value);
74 
80  Particle& addDt(const QuantityId id, const Dynamic& value);
81 
88  Particle& addD2t(const QuantityId id, const Dynamic& value);
89 
94  Particle& addParameter(const BodySettingsId id, const Dynamic& value);
95 
97  INLINE Size getIndex() const {
98  return idx;
99  }
100 
104  Dynamic getValue(const QuantityId id) const;
105 
109  Dynamic getDt(const QuantityId id) const;
110 
115  Dynamic getD2t(const QuantityId id) const;
116 
120  Dynamic getParameter(const BodySettingsId id) const;
121 
125  struct QuantityData {
126 
129 
132 
135 
138 
141  };
142 
145  private:
147 
148  ActIterator iter;
149 
150  public:
155 
158 
160  QuantityData operator*() const;
161 
163  bool operator!=(const QuantityIterator& other) const;
164  };
165 
168  private:
169  QuantityIterator first;
170  QuantityIterator last;
171 
172  public:
174  QuantitySequence(const Particle& particle);
175 
177  QuantityIterator begin() const;
178 
180  QuantityIterator end() const;
181  };
182 
185 
187  struct ParamData {
188 
191 
194  };
195 
197  private:
199 
200  ActIterator iter;
201 
202  public:
206  ParamIterator(const ActIterator iterator, Badge<Particle>);
207 
210 
212  ParamData operator*() const;
213 
215  bool operator!=(const ParamIterator& other) const;
216  };
217 
220  private:
221  ParamIterator first;
222  ParamIterator last;
223 
224  public:
226  ParamSequence(const Particle& particle);
227 
229  ParamIterator begin() const;
230 
232  ParamIterator end() const;
233  };
234 
237 };
238 
NAMESPACE_SPH_BEGIN
Definition: BarnesHut.cpp:13
Object holding a single values of various types.
DynamicId
Enum representing a value type stored in a Value object.
Definition: Dynamic.h:18
Key-value associative container implemented as a sorted array.
uint32_t Size
Integral type used to index arrays (by default).
Definition: Globals.h:16
#define INLINE
Macros for conditional compilation based on selected compiler.
Definition: Object.h:31
#define NAMESPACE_SPH_END
Definition: Object.h:12
QuantityId
Unique IDs of basic quantities of SPH particles.
Definition: QuantityIds.h:19
Helper class used to allow calling a function only from within T.
Definition: Object.h:94
Convenient object for storing a single value of different types.
Definition: Dynamic.h:35
bool operator!=(const ParamIterator &other) const
Inequality operator.
Definition: Particle.cpp:184
ParamIterator & operator++()
Advances the iterator to next quantity.
Definition: Particle.cpp:175
ParamData operator*() const
Returns all data associated with currently referenced parameter.
Definition: Particle.cpp:180
ParamIterator(const ActIterator iterator, Badge< Particle >)
Constructs the iterator from internal type.
Definition: Particle.cpp:172
Helper for enumerating all stored parameters.
Definition: Particle.h:219
ParamIterator begin() const
Returns iterator pointing to the first parameter.
Definition: Particle.cpp:193
ParamSequence(const Particle &particle)
Creates a sequence of all material parameters of given particle.
Definition: Particle.cpp:189
ParamIterator end() const
Returns iterator pointing to the one-past-last parameter.
Definition: Particle.cpp:197
Iterator used to enumerate all stored quantities.
Definition: Particle.h:144
QuantityData operator*() const
Returns all data associated with currently referenced quantity.
Definition: Particle.cpp:134
bool operator!=(const QuantityIterator &other) const
Inequality operator.
Definition: Particle.cpp:151
QuantityIterator(const ActIterator iterator, Badge< Particle >)
Constructs the iterator from internal type.
Definition: Particle.cpp:126
QuantityIterator & operator++()
Advances the iterator to next quantity.
Definition: Particle.cpp:129
Helper for enumerating all stored quantities.
Definition: Particle.h:167
QuantityIterator end() const
Returns iterator pointing to the one-past-last quantity.
Definition: Particle.cpp:163
QuantityIterator begin() const
Returns iterator pointing to the first quantity.
Definition: Particle.cpp:159
QuantitySequence(const Particle &particle)
Creates a sequence of all quantities of given particle.
Definition: Particle.cpp:155
Object holding information about single particle.
Definition: Particle.h:17
QuantitySequence getQuantities() const
Returns a range for enumerating all stored quantities.
Definition: Particle.cpp:167
Dynamic getDt(const QuantityId id) const
Retrieves a quantity derivative of the particle.
Definition: Particle.cpp:107
INLINE Size getIndex() const
Returns the index of particle in the parent storage.
Definition: Particle.h:97
Particle()=default
Default constructor, defined only for convenient usage in containers, etc.
Dynamic getValue(const QuantityId id) const
Retrieves a quantity value of the particle.
Definition: Particle.cpp:101
Particle & operator=(const Particle &other)
Definition: Particle.cpp:54
Particle(const Size idx)
Constructs object given its index in parent storage, containing no particle data.
Definition: Particle.h:42
Particle & addD2t(const QuantityId id, const Dynamic &value)
Adds another quantity 2nd derivative or updates the 2nd derivative of quantity previously stored.
Definition: Particle.cpp:84
Dynamic getParameter(const BodySettingsId id) const
Retrieves a material parameter of the particle.
Definition: Particle.cpp:119
Particle & addParameter(const BodySettingsId id, const Dynamic &value)
Adds another material parameter or updates the one stored previously.
Definition: Particle.cpp:92
Dynamic getD2t(const QuantityId id) const
Retrieves a quantity 2nd derivative of the particle.
Definition: Particle.cpp:113
Particle & addValue(const QuantityId id, const Dynamic &value)
Adds another quantity value or updates the value of quantity previously stored.
Definition: Particle.cpp:68
ParamSequence getParameters() const
Returns a range for enumerating all stored parameters.
Definition: Particle.cpp:201
Particle & addDt(const QuantityId id, const Dynamic &value)
Adds another quantity derivative or updates the derivative of quantity previously stored.
Definition: Particle.cpp:76
Container storing all quantities used within the simulations.
Definition: Storage.h:230
Generic storage and input/output routines of settings.
BodySettingsId
Settings of a single body / gas phase / ...
Definition: Settings.h:1394
Stored info about a material parameter.
Definition: Particle.h:187
BodySettingsId id
Material parameter ID.
Definition: Particle.h:190
Dynamic value
Parameter value.
Definition: Particle.h:193
Stored info about a quantity.
Definition: Particle.h:125
Dynamic dt
First derivative of the quantity.
Definition: Particle.h:137
QuantityId id
Quantity ID.
Definition: Particle.h:128
Dynamic value
Quantity value.
Definition: Particle.h:134
DynamicId type
Value type of the quantity.
Definition: Particle.h:131
Dynamic d2t
Second derivative of the quantity.
Definition: Particle.h:140