AutoPas  3.0.0
Loading...
Searching...
No Matches
TraversalOption.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <set>
10
13
14namespace autopas {
15inline namespace options {
19class TraversalOption : public Option<TraversalOption> {
20 public:
25 enum Value {
26 // DirectSum Traversals:
31
32 // LinkedCell Traversals:
81
82 // Octree Traversals:
92
93 // VerletClusterLists Traversals:
123
124 // VerletList Traversals:
130
131 // VerletListCells Traversals:
159
160 // PairwiseVerletLists Traversals - same traversals as VLC but with a new name for the pairwise container
184
191
192 // VarVerlet Traversals:
199 };
200
204 TraversalOption() = default;
205
210 constexpr TraversalOption(Value option) : _value(option) {}
211
216 constexpr operator Value() const { return _value; }
217
222 static std::set<TraversalOption> getDiscouragedOptions() {
224 }
225
230 static std::set<TraversalOption> getAllPairwiseOptions() { return getAllOptions(); }
231
236 static std::set<TraversalOption> getAllTriwiseOptions() { return {Value::ds_sequential, Value::lc_c01}; }
237
242 static std::set<TraversalOption> getMostPairwiseOptions() {
243 std::set<TraversalOption> mostPairwiseOptions;
244 auto allOptions = getAllOptions();
245 auto discouragedOptions = getDiscouragedOptions();
246 std::set_difference(allOptions.begin(), allOptions.end(), discouragedOptions.begin(), discouragedOptions.end(),
247 std::inserter(mostPairwiseOptions, mostPairwiseOptions.begin()));
248 return mostPairwiseOptions;
249 }
250
255 static std::set<TraversalOption> getMostTriwiseOptions() {
256 std::set<TraversalOption> mostTriwiseOptions;
257 auto allOptions = getAllTriwiseOptions();
258 auto discouragedOptions = getDiscouragedOptions();
259 std::set_difference(allOptions.begin(), allOptions.end(), discouragedOptions.begin(), discouragedOptions.end(),
260 std::inserter(mostTriwiseOptions, mostTriwiseOptions.begin()));
261 return mostTriwiseOptions;
262 }
263
269 static std::set<TraversalOption> getAllOptionsOf(const autopas::InteractionTypeOption &interactionType) {
270 switch (interactionType) {
271 case autopas::InteractionTypeOption::pairwise:
272 return getAllPairwiseOptions();
273 case autopas::InteractionTypeOption::triwise:
274 return getAllTriwiseOptions();
275 default:
276 return {};
277 }
278 }
279
284 static std::map<TraversalOption, std::string> getOptionNames() {
285 return {
286 // DirectSum Traversals:
287 {TraversalOption::ds_sequential, "ds_sequential"},
288
289 // LinkedCell Traversals:
290 {TraversalOption::lc_sliced, "lc_sliced"},
291 {TraversalOption::lc_sliced_balanced, "lc_sliced_balanced"},
292 {TraversalOption::lc_sliced_c02, "lc_sliced_c02"},
293 {TraversalOption::lc_c01, "lc_c01"},
294 {TraversalOption::lc_c01_combined_SoA, "lc_c01_combined_SoA"},
295 {TraversalOption::lc_c04, "lc_c04"},
296 {TraversalOption::lc_c04_HCP, "lc_c04_HCP"},
297 {TraversalOption::lc_c04_combined_SoA, "lc_c04_combined_SoA"},
298 {TraversalOption::lc_c08, "lc_c08"},
299 {TraversalOption::lc_c18, "lc_c18"},
300
301 // VerletClusterLists Traversals:
302 {TraversalOption::vcl_cluster_iteration, "vcl_cluster_iteration"},
303 {TraversalOption::vcl_c06, "vcl_c06"},
304 {TraversalOption::vcl_c01_balanced, "vcl_c01_balanced"},
305 {TraversalOption::vcl_sliced, "vcl_sliced"},
306 {TraversalOption::vcl_sliced_c02, "vcl_sliced_c02"},
307 {TraversalOption::vcl_sliced_balanced, "vcl_sliced_balanced"},
308
309 // VerletList Traversals:
310 {TraversalOption::vl_list_iteration, "vl_list_iteration"},
311
312 // VerletListCells Traversals:
313 {TraversalOption::vlc_sliced, "vlc_sliced"},
314 {TraversalOption::vlc_sliced_c02, "vlc_sliced_c02"},
315 {TraversalOption::vlc_c18, "vlc_c18"},
316 {TraversalOption::vlc_c01, "vlc_c01"},
317 {TraversalOption::vlc_c08, "vlc_c08"},
318 {TraversalOption::vlc_sliced_balanced, "vlc_sliced_balanced"},
319
320 // VarVerlet Traversals:
321 {TraversalOption::vvl_as_built, "vvl_as_built"},
322
323 // PairwiseVerlet Traversals:
324 {TraversalOption::vlp_sliced, "vlp_sliced"},
325 {TraversalOption::vlp_sliced_c02, "vlp_sliced_c02"},
326 {TraversalOption::vlp_c18, "vlp_c18"},
327 {TraversalOption::vlp_c01, "vlp_c01"},
328 {TraversalOption::vlp_sliced_balanced, "vlp_sliced_balanced"},
329 {TraversalOption::vlp_c08, "vlp_c08"},
330
331 // Octree Traversals:
332 {TraversalOption::ot_c18, "ot_c18"},
333 {TraversalOption::ot_c01, "ot_c01"},
334 };
335 };
336
337 private:
338 Value _value{Value(-1)};
339};
340} // namespace options
341} // namespace autopas
Base class for autopas options.
Definition: Option.h:25
static std::set< TraversalOption > getAllOptions()
Provides a way to iterate over the possible options.
Definition: Option.h:37
Class representing the traversal choices.
Definition: TraversalOption.h:19
TraversalOption()=default
Constructor.
Value
Possible choices for the cell traversal.
Definition: TraversalOption.h:25
@ vcl_cluster_iteration
VCLClusterIterationTraversal : Dynamically schedule ClusterTower to threads.
Definition: TraversalOption.h:108
@ ot_c01
OTC01Traversal : Simple DFS traversal without newton 3 optimization.
Definition: TraversalOption.h:86
@ lc_c08
LCC08Traversal : More compact form of LCC18Traversal.
Definition: TraversalOption.h:61
@ vlp_sliced
VLPSlicedTraversal : Equivalent to LCSlicedTraversal.
Definition: TraversalOption.h:173
@ lc_c01_combined_SoA
LCC01CombinedSoATraversal : Same as LCC01Traversal but SoAs are combined into a circular buffer and t...
Definition: TraversalOption.h:42
@ vcl_c06
VCLC06Traversal : Six-way coloring of the 2D ClusterTower grid in the c18 base step style.
Definition: TraversalOption.h:103
@ vlc_sliced
VLCSlicedTraversal : Equivalent to LCSlicedTraversal but with a c18 base-step.
Definition: TraversalOption.h:148
@ vcl_sliced_c02
VCLSlicedC02Traversal : 1D slicing with as many slices of minimal thickness as possible.
Definition: TraversalOption.h:122
@ lc_c01
Definition: TraversalOption.h:37
@ vlc_c18
VLCC18Traversal : Equivalent to LCC18Traversal.
Definition: TraversalOption.h:140
@ ds_sequential
Definition: TraversalOption.h:30
@ lc_sliced_balanced
LCSlicedBalancedTraversal : Same as lc_sliced but tries to balance slice thickness according to a giv...
Definition: TraversalOption.h:75
@ vlp_sliced_c02
VLPSlicedC02Traversal : Equivalent to LCSlicedC02Traversal.
Definition: TraversalOption.h:183
@ vlp_sliced_balanced
VLPSlicedBalancedTraversal : Equivalent to LCSlicedBalancedTraversal.
Definition: TraversalOption.h:178
@ lc_c04
LCC04Traversal : Four-way domain coloring using plus-shaped clusters of cells that are processed with...
Definition: TraversalOption.h:47
@ vlp_c01
VLPC01Traversal : Equivalent to LCC01Traversal.
Definition: TraversalOption.h:165
@ lc_c18
LCC18Traversal : More compact form of LCC01Traversal supporting Newton3 by only accessing forward nei...
Definition: TraversalOption.h:65
@ vlc_sliced_balanced
VLCSlicedBalancedTraversal : Equivalent to LCSlicedBalancedTraversal but with a c18 base-step.
Definition: TraversalOption.h:153
@ lc_sliced
LCSlicedTraversal : 1D equidistant slicing of the domain with one slice per thread.
Definition: TraversalOption.h:70
@ vlp_c08
VLPCellPairC08Traversal : based on LCC08Traversal.
Definition: TraversalOption.h:190
@ vlc_c01
VLCC01Traversal : Equivalent to LCC01Traversal.
Definition: TraversalOption.h:136
@ lc_c04_HCP
LCC04HCPTraversal : Same as LCC04Traversal but with only one block shape.
Definition: TraversalOption.h:51
@ vlc_sliced_c02
VLCSlicedC02Traversal : Equivalent to LCSlicedC02Traversal.
Definition: TraversalOption.h:158
@ vl_list_iteration
VLListIterationTraversal : Distribute processing of neighbor lists dynamically to threads.
Definition: TraversalOption.h:129
@ vlp_c18
VLPC18Traversal : Equivalent to LCC18Traversal.
Definition: TraversalOption.h:169
@ vvl_as_built
VVLAsBuildTraversal : Track which thread built what neighbor list and schedule them the same way for ...
Definition: TraversalOption.h:198
@ ot_c18
OTC18Traversal : DFS traversal with newton 3 optimization that checks whether a neighbor has already ...
Definition: TraversalOption.h:91
@ vcl_sliced
VCLSlicedTraversal : Equivalent to lc_sliced with slicing applied to the tower grid.
Definition: TraversalOption.h:112
@ lc_c04_combined_SoA
LCC04CombinedSoATraversal : Combination of LCC08Traversal and the combined SoA variant of LCC01Traver...
Definition: TraversalOption.h:56
@ vlc_c08
VLCC08Traversal : Equivalent to LCC08Traversal.
Definition: TraversalOption.h:144
@ vcl_c01_balanced
VCLC01BalancedTraversal : Assign a fixed set of towers to each thread balanced by number of contained...
Definition: TraversalOption.h:98
@ lc_sliced_c02
LCSlicedC02Traversal : 1D slicing with as many slices of minimal thickness as possible.
Definition: TraversalOption.h:80
@ vcl_sliced_balanced
VCLSlicedBalancedTraversal : Same as vcl_sliced but tries to balance slice thickness according to a g...
Definition: TraversalOption.h:117
static std::set< TraversalOption > getDiscouragedOptions()
Set of options that are very unlikely to be interesting.
Definition: TraversalOption.h:222
static std::set< TraversalOption > getMostPairwiseOptions()
Set of all pairwise traversals without discouraged options.
Definition: TraversalOption.h:242
constexpr TraversalOption(Value option)
Constructor from value.
Definition: TraversalOption.h:210
static std::set< TraversalOption > getAllPairwiseOptions()
Set of options that apply for pairwise interactions.
Definition: TraversalOption.h:230
static std::map< TraversalOption, std::string > getOptionNames()
Provides a way to iterate over the possible choices of TraversalOption.
Definition: TraversalOption.h:284
static std::set< TraversalOption > getAllTriwiseOptions()
Set of options that apply for triwise interactions.
Definition: TraversalOption.h:236
static std::set< TraversalOption > getMostTriwiseOptions()
Set of all triwise traversals without discouraged options.
Definition: TraversalOption.h:255
static std::set< TraversalOption > getAllOptionsOf(const autopas::InteractionTypeOption &interactionType)
Set of all options specific to an interaction type.
Definition: TraversalOption.h:269
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:32