17namespace autopas::compatibleTraversals {
29std::set<TraversalOption>
filterAllOptions(
const std::string &prefix,
const InteractionTypeOption &interactionType) {
30 const auto allOpts = TraversalOption::getAllOptionsOf(interactionType);
31 std::set<TraversalOption> retSet;
33 std::copy_if(allOpts.begin(), allOpts.end(), std::inserter(retSet, retSet.begin()),
34 [&](
const auto &option) { return option.to_string().substr(0, prefix.length()) == prefix; });
44 static const auto s = filterAllOptions(
"ds_", InteractionTypeOption::pairwise);
53 static const auto s = filterAllOptions(
"ds_", InteractionTypeOption::triwise);
62 static const auto s = filterAllOptions(
"lc_", InteractionTypeOption::pairwise);
71 static const auto s = filterAllOptions(
"lc_", InteractionTypeOption::triwise);
89 static const auto s = filterAllOptions(
"vcl_", InteractionTypeOption::pairwise);
98 static const auto s = filterAllOptions(
"vl_", InteractionTypeOption::pairwise);
107 static const auto s = filterAllOptions(
"vlc_", InteractionTypeOption::pairwise);
116 static const auto s = filterAllOptions(
"vvl_", InteractionTypeOption::pairwise);
125 static const auto s = filterAllOptions(
"vlp_", InteractionTypeOption::pairwise);
134 static const auto s = filterAllOptions(
"ot_", InteractionTypeOption::pairwise);
143 return {TraversalOption::lc_c01,
144 TraversalOption::lc_c01_combined_SoA,
145 TraversalOption::ot_c01,
146 TraversalOption::vcl_c01_balanced,
147 TraversalOption::vcl_cluster_iteration,
148 TraversalOption::vl_list_iteration,
149 TraversalOption::vlc_c01,
150 TraversalOption::vlp_c01};
158 TraversalOption::ot_c18,
172 TraversalOption::lc_c01_combined_SoA,
173 TraversalOption::lc_c04_combined_SoA,
184 ContainerOption containerOption,
const InteractionTypeOption interactionTypeOption) {
185 switch (interactionTypeOption) {
187 case InteractionTypeOption::pairwise: {
188 switch (containerOption) {
189 case ContainerOption::linkedCells: {
192 case ContainerOption::directSum: {
195 case ContainerOption::verletClusterLists: {
198 case ContainerOption::verletLists: {
201 case ContainerOption::verletListsCells: {
204 case ContainerOption::varVerletListsAsBuild: {
207 case ContainerOption::linkedCellsReferences: {
210 case ContainerOption::pairwiseVerletLists: {
213 case ContainerOption::octree: {
219 case InteractionTypeOption::triwise: {
220 switch (containerOption) {
221 case ContainerOption::directSum: {
224 case ContainerOption::linkedCells: {
228 static const std::set<TraversalOption> s{};
233 case InteractionTypeOption::all: {
235 interactionTypeOption.to_string());
240 "CompatibleTraversals: Unknown container option {} or unsupported interaction type {}!",
241 containerOption.to_string(), interactionTypeOption.to_string());
243 static const std::set<TraversalOption> s{};
253 std::set<ContainerOption> result{};
255 for (
const auto &container : ContainerOption::getAllOptions()) {
256 for (
const auto &interactionType : InteractionTypeOption::getMostOptions()) {
257 auto allCompatible = compatibleTraversals::allCompatibleTraversals(container, interactionType);
258 if (allCompatible.find(traversalOption) != allCompatible.end()) {
259 result.insert(container);
static const std::set< TraversalOption > & allVLCCompatibleTraversals()
Lists all traversal options applicable for the Verlet Lists Cells container.
Definition: CompatibleTraversals.h:106
static const std::set< TraversalOption > & allDSCompatibleTraversals3B()
Lists all triwise traversal options applicable for the Direct Sum container.
Definition: CompatibleTraversals.h:52
static std::set< TraversalOption > allTraversalsSupportingOnlyAoS()
Provides a set of all traversals that only support DataLayout AoS.
Definition: CompatibleTraversals.h:165
static const std::set< TraversalOption > & allVLCompatibleTraversals()
Lists all traversal options applicable for the Verlet Lists container.
Definition: CompatibleTraversals.h:97
static const std::set< TraversalOption > & allDSCompatibleTraversals()
Lists all traversal options applicable for the Direct Sum container.
Definition: CompatibleTraversals.h:43
static const std::set< TraversalOption > & allRLCCompatibleTraversals()
Lists all traversal options applicable for the Reference Linked Cells container.
Definition: CompatibleTraversals.h:80
static const std::set< TraversalOption > & allLCCompatibleTraversals3B()
Lists all triwise traversal options applicable for the Linked Cells container.
Definition: CompatibleTraversals.h:70
static const std::set< TraversalOption > & allLCCompatibleTraversals()
Lists all traversal options applicable for the Linked Cells container.
Definition: CompatibleTraversals.h:61
static const std::set< TraversalOption > & allVLPCompatibleTraversals()
Lists all traversal options applicable for the Pairwise Verlet Lists container.
Definition: CompatibleTraversals.h:124
static std::set< ContainerOption > allCompatibleContainers(TraversalOption traversalOption)
Lists all container options which given traversal can be applied to.
Definition: CompatibleTraversals.h:252
static std::set< TraversalOption > allTraversalsSupportingOnlySoA()
Provides a set of all traversals that only support DataLayout SoA.
Definition: CompatibleTraversals.h:170
static const std::set< TraversalOption > & allOTCompatibleTraversals()
Lists all traversal options applicable for the Octree container.
Definition: CompatibleTraversals.h:133
static const std::set< TraversalOption > & allVarVLAsBuildCompatibleTraversals()
Lists all traversal options applicable for the Var Verlet Lists As Build container.
Definition: CompatibleTraversals.h:115
static std::set< TraversalOption > allTraversalsSupportingOnlyNewton3Enabled()
Provides a set of all traversals that only support Newton3 mode enabled.
Definition: CompatibleTraversals.h:156
static const std::set< TraversalOption > & allCompatibleTraversals(ContainerOption containerOption, const InteractionTypeOption interactionTypeOption)
Lists all traversal options applicable for the given container.
Definition: CompatibleTraversals.h:183
static const std::set< TraversalOption > & allVCLCompatibleTraversals()
Lists all traversal options applicable for the Verlet Cluster Lists container.
Definition: CompatibleTraversals.h:88
static std::set< TraversalOption > allTraversalsSupportingOnlyNewton3Disabled()
Provides a set of all traversals that only support Newton3 mode disabled.
Definition: CompatibleTraversals.h:142
static void exception(const Exception e)
Handle an exception derived by std::exception.
Definition: ExceptionHandler.h:63
std::set< TraversalOption > filterAllOptions(const std::string &prefix, const InteractionTypeOption &interactionType)
Helper function to filter all traversal options for a given prefix and interaction type.
Definition: CompatibleTraversals.h:29