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() {
238 }
239
244 static std::set<TraversalOption> getMostPairwiseOptions() {
245 std::set<TraversalOption> mostPairwiseOptions;
246 auto allOptions = getAllOptions();
247 auto discouragedOptions = getDiscouragedOptions();
248 std::set_difference(allOptions.begin(), allOptions.end(), discouragedOptions.begin(), discouragedOptions.end(),
249 std::inserter(mostPairwiseOptions, mostPairwiseOptions.begin()));
250 return mostPairwiseOptions;
251 }
252
257 static std::set<TraversalOption> getMostTriwiseOptions() {
258 std::set<TraversalOption> mostTriwiseOptions;
259 auto allOptions = getAllTriwiseOptions();
260 auto discouragedOptions = getDiscouragedOptions();
261 std::set_difference(allOptions.begin(), allOptions.end(), discouragedOptions.begin(), discouragedOptions.end(),
262 std::inserter(mostTriwiseOptions, mostTriwiseOptions.begin()));
263 return mostTriwiseOptions;
264 }
265
271 static std::set<TraversalOption> getAllOptionsOf(const autopas::InteractionTypeOption &interactionType) {
272 switch (interactionType) {
273 case autopas::InteractionTypeOption::pairwise:
274 return getAllPairwiseOptions();
275 case autopas::InteractionTypeOption::triwise:
276 return getAllTriwiseOptions();
277 default:
278 return {};
279 }
280 }
281
286 static std::map<TraversalOption, std::string> getOptionNames() {
287 return {
288 // DirectSum Traversals:
289 {TraversalOption::ds_sequential, "ds_sequential"},
290
291 // LinkedCell Traversals:
292 {TraversalOption::lc_sliced, "lc_sliced"},
293 {TraversalOption::lc_sliced_balanced, "lc_sliced_balanced"},
294 {TraversalOption::lc_sliced_c02, "lc_sliced_c02"},
295 {TraversalOption::lc_c01, "lc_c01"},
296 {TraversalOption::lc_c01_combined_SoA, "lc_c01_combined_SoA"},
297 {TraversalOption::lc_c04, "lc_c04"},
298 {TraversalOption::lc_c04_HCP, "lc_c04_HCP"},
299 {TraversalOption::lc_c04_combined_SoA, "lc_c04_combined_SoA"},
300 {TraversalOption::lc_c08, "lc_c08"},
301 {TraversalOption::lc_c18, "lc_c18"},
302
303 // VerletClusterLists Traversals:
304 {TraversalOption::vcl_cluster_iteration, "vcl_cluster_iteration"},
305 {TraversalOption::vcl_c06, "vcl_c06"},
306 {TraversalOption::vcl_c01_balanced, "vcl_c01_balanced"},
307 {TraversalOption::vcl_sliced, "vcl_sliced"},
308 {TraversalOption::vcl_sliced_c02, "vcl_sliced_c02"},
309 {TraversalOption::vcl_sliced_balanced, "vcl_sliced_balanced"},
310
311 // VerletList Traversals:
312 {TraversalOption::vl_list_iteration, "vl_list_iteration"},
313
314 // VerletListCells Traversals:
315 {TraversalOption::vlc_sliced, "vlc_sliced"},
316 {TraversalOption::vlc_sliced_c02, "vlc_sliced_c02"},
317 {TraversalOption::vlc_c18, "vlc_c18"},
318 {TraversalOption::vlc_c01, "vlc_c01"},
319 {TraversalOption::vlc_c08, "vlc_c08"},
320 {TraversalOption::vlc_sliced_balanced, "vlc_sliced_balanced"},
321
322 // VarVerlet Traversals:
323 {TraversalOption::vvl_as_built, "vvl_as_built"},
324
325 // PairwiseVerlet Traversals:
326 {TraversalOption::vlp_sliced, "vlp_sliced"},
327 {TraversalOption::vlp_sliced_c02, "vlp_sliced_c02"},
328 {TraversalOption::vlp_c18, "vlp_c18"},
329 {TraversalOption::vlp_c01, "vlp_c01"},
330 {TraversalOption::vlp_sliced_balanced, "vlp_sliced_balanced"},
331 {TraversalOption::vlp_c08, "vlp_c08"},
332
333 // Octree Traversals:
334 {TraversalOption::ot_c18, "ot_c18"},
335 {TraversalOption::ot_c01, "ot_c01"},
336 };
337 };
338
339 private:
340 Value _value{Value(-1)};
341};
342} // namespace options
343} // namespace autopas
Base class for autopas options.
Definition: Option.h:26
static std::set< TraversalOption > getAllOptions()
Provides a way to iterate over the possible options.
Definition: Option.h:38
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
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
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
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
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:244
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:286
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:257
static std::set< TraversalOption > getAllOptionsOf(const autopas::InteractionTypeOption &interactionType)
Set of all options specific to an interaction type.
Definition: TraversalOption.h:271
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:34