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:
135
136 // VerletListCells Traversals:
164
165 // PairwiseVerletLists Traversals - same traversals as VLC but with a new name for the pairwise container
189
196
197 // VarVerlet Traversals:
204 };
205
209 TraversalOption() = default;
210
215 constexpr TraversalOption(Value option) : _value(option) {}
216
221 constexpr operator Value() const { return _value; }
222
227 static std::set<TraversalOption> getDiscouragedOptions() {
229 }
230
235 static std::set<TraversalOption> getAllPairwiseOptions() { return getAllOptions(); }
236
241 static std::set<TraversalOption> getAllTriwiseOptions() {
243 }
244
249 static std::set<TraversalOption> getMostPairwiseOptions() {
250 std::set<TraversalOption> mostPairwiseOptions;
251 auto allOptions = getAllOptions();
252 auto discouragedOptions = getDiscouragedOptions();
253 std::set_difference(allOptions.begin(), allOptions.end(), discouragedOptions.begin(), discouragedOptions.end(),
254 std::inserter(mostPairwiseOptions, mostPairwiseOptions.begin()));
255 return mostPairwiseOptions;
256 }
257
262 static std::set<TraversalOption> getMostTriwiseOptions() {
263 std::set<TraversalOption> mostTriwiseOptions;
264 auto allOptions = getAllTriwiseOptions();
265 auto discouragedOptions = getDiscouragedOptions();
266 std::set_difference(allOptions.begin(), allOptions.end(), discouragedOptions.begin(), discouragedOptions.end(),
267 std::inserter(mostTriwiseOptions, mostTriwiseOptions.begin()));
268 return mostTriwiseOptions;
269 }
270
276 static std::set<TraversalOption> getAllOptionsOf(const autopas::InteractionTypeOption &interactionType) {
277 switch (interactionType) {
278 case autopas::InteractionTypeOption::pairwise:
279 return getAllPairwiseOptions();
280 case autopas::InteractionTypeOption::triwise:
281 return getAllTriwiseOptions();
282 default:
283 return {};
284 }
285 }
286
291 static std::map<TraversalOption, std::string> getOptionNames() {
292 return {
293 // DirectSum Traversals:
294 {TraversalOption::ds_sequential, "ds_sequential"},
295
296 // LinkedCell Traversals:
297 {TraversalOption::lc_sliced, "lc_sliced"},
298 {TraversalOption::lc_sliced_balanced, "lc_sliced_balanced"},
299 {TraversalOption::lc_sliced_c02, "lc_sliced_c02"},
300 {TraversalOption::lc_c01, "lc_c01"},
301 {TraversalOption::lc_c01_combined_SoA, "lc_c01_combined_SoA"},
302 {TraversalOption::lc_c04, "lc_c04"},
303 {TraversalOption::lc_c04_HCP, "lc_c04_HCP"},
304 {TraversalOption::lc_c04_combined_SoA, "lc_c04_combined_SoA"},
305 {TraversalOption::lc_c08, "lc_c08"},
306 {TraversalOption::lc_c18, "lc_c18"},
307
308 // VerletClusterLists Traversals:
309 {TraversalOption::vcl_cluster_iteration, "vcl_cluster_iteration"},
310 {TraversalOption::vcl_c06, "vcl_c06"},
311 {TraversalOption::vcl_c01_balanced, "vcl_c01_balanced"},
312 {TraversalOption::vcl_sliced, "vcl_sliced"},
313 {TraversalOption::vcl_sliced_c02, "vcl_sliced_c02"},
314 {TraversalOption::vcl_sliced_balanced, "vcl_sliced_balanced"},
315
316 // VerletList Traversals:
317 {TraversalOption::vl_list_iteration, "vl_list_iteration"},
318 {TraversalOption::vl_list_iteration_c27, "vl_list_iteration_c27"},
319
320 // VerletListCells Traversals:
321 {TraversalOption::vlc_sliced, "vlc_sliced"},
322 {TraversalOption::vlc_sliced_c02, "vlc_sliced_c02"},
323 {TraversalOption::vlc_c18, "vlc_c18"},
324 {TraversalOption::vlc_c01, "vlc_c01"},
325 {TraversalOption::vlc_c08, "vlc_c08"},
326 {TraversalOption::vlc_sliced_balanced, "vlc_sliced_balanced"},
327
328 // VarVerlet Traversals:
329 {TraversalOption::vvl_as_built, "vvl_as_built"},
330
331 // PairwiseVerlet Traversals:
332 {TraversalOption::vlp_sliced, "vlp_sliced"},
333 {TraversalOption::vlp_sliced_c02, "vlp_sliced_c02"},
334 {TraversalOption::vlp_c18, "vlp_c18"},
335 {TraversalOption::vlp_c01, "vlp_c01"},
336 {TraversalOption::vlp_sliced_balanced, "vlp_sliced_balanced"},
337 {TraversalOption::vlp_c08, "vlp_c08"},
338
339 // Octree Traversals:
340 {TraversalOption::ot_c18, "ot_c18"},
341 {TraversalOption::ot_c01, "ot_c01"},
342 };
343 };
344
345 private:
346 Value _value{Value(-1)};
347};
348} // namespace options
349} // 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:178
@ 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:153
@ 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:145
@ 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:188
@ vlp_sliced_balanced
VLPSlicedBalancedTraversal : Equivalent to LCSlicedBalancedTraversal.
Definition: TraversalOption.h:183
@ lc_c04
Definition: TraversalOption.h:47
@ vl_list_iteration_c27
VLListIterationC27Traversal : Distribute processing of neighbor lists dynamically to threads.
Definition: TraversalOption.h:134
@ vlp_c01
VLPC01Traversal : Equivalent to LCC01Traversal.
Definition: TraversalOption.h:170
@ 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:158
@ lc_sliced
Definition: TraversalOption.h:70
@ vlp_c08
VLPCellPairC08Traversal : based on LCC08Traversal.
Definition: TraversalOption.h:195
@ vlc_c01
VLCC01Traversal : Equivalent to LCC01Traversal.
Definition: TraversalOption.h:141
@ 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:163
@ 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:174
@ vvl_as_built
VVLAsBuildTraversal : Track which thread built what neighbor list and schedule them the same way for ...
Definition: TraversalOption.h:203
@ 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:149
@ 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:227
static std::set< TraversalOption > getMostPairwiseOptions()
Set of all pairwise traversals without discouraged options.
Definition: TraversalOption.h:249
constexpr TraversalOption(Value option)
Constructor from value.
Definition: TraversalOption.h:215
static std::set< TraversalOption > getAllPairwiseOptions()
Set of options that apply for pairwise interactions.
Definition: TraversalOption.h:235
static std::map< TraversalOption, std::string > getOptionNames()
Provides a way to iterate over the possible choices of TraversalOption.
Definition: TraversalOption.h:291
static std::set< TraversalOption > getAllTriwiseOptions()
Set of options that apply for triwise interactions.
Definition: TraversalOption.h:241
static std::set< TraversalOption > getMostTriwiseOptions()
Set of all triwise traversals without discouraged options.
Definition: TraversalOption.h:262
static std::set< TraversalOption > getAllOptionsOf(const autopas::InteractionTypeOption &interactionType)
Set of all options specific to an interaction type.
Definition: TraversalOption.h:276
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:34