CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
ConfigEnumEquivalents.cc
Go to the documentation of this file.
2 #include <algorithm>
3 #include "casm/casm_io/Log.hh"
5 #include "casm/clex/Supercell.hh"
8 
9 namespace CASM {
10 
11  namespace {
12 
13  struct MakeConfigInvariantSubgroup {
14 
15  MakeConfigInvariantSubgroup() {}
16 
17  template<typename PermuteOutputIterator>
18  PermuteOutputIterator operator()(const Configuration &config, PermuteIterator begin, PermuteIterator end, PermuteOutputIterator result) {
19  ConfigIsEquivalent f(config, config.crystallography_tol());
20  return std::copy_if(begin, end, result, f);
21  }
22 
23  };
24  }
25 
26  const std::string ConfigEnumEquivalents::enumerator_name = "ConfigEnumEquivalents";
27 
29  const Configuration &config) :
31  config,
32  config.get_supercell().permute_begin(),
33  config.get_supercell().permute_end()) {
34  }
35 
37  const Configuration &config,
38  PermuteIterator begin,
39  PermuteIterator end) :
40  EnumEquivalents<Configuration, PermuteIterator>(config.canonical_form(), begin, end, MakeConfigInvariantSubgroup()) {
41  }
42 
43 }
Main CASM namespace.
Definition: complete.cpp:8
ConfigEnumEquivalents(const Configuration &config)
Enumerate over all equivalents.
static const std::string enumerator_name
Enumerate all equivalent Configurations in a Supercell, as generated by Supercell factor group symmet...
A Configuration represents the values of all degrees of freedom in a Supercell.