CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
Supercell.hh
Go to the documentation of this file.
1 #ifndef SUPERCELL_HH
2 #define SUPERCELL_HH
3 
10 #include "casm/clex/ConfigDoF.hh"
12 
13 namespace CASM {
14 
15 
16  template<typename T, typename U> class ConfigIterator;
17  class PermuteIterator;
18  class PrimClex;
19  class Clexulator;
20 
22 
23  bool operator()(const Configuration *A, const Configuration *B) const {
24  return *A < *B;
25  }
26 
27  };
28 
35  class Supercell : public Comparisons<Supercell> {
38 
39  public:
40 
41  typedef boost::container::stable_vector<Configuration> ConfigList;
42  //typedef boost::container::stable_vector<Transition> TransitionList;
43 
46  //typedef ConfigIterator<Transition, PrimClex> transition_iterator;
47  //typedef ConfigIterator<const Transition, const PrimClex> transition_const_iterator;
49 
50  private:
51  // pointer to Primcell containing all the cluster expansion data
53 
54  // lattice of supercell in real space
56 
57  // reciprocal of real_super_lattice (grid of recip scell lattice)
59 
61  //Grid in reciprocal space of the supercell that perfectly tiles
62  //the prim cell
64 
65  // m_perm_symrep_ID is the ID of the SymGroupRep of get_prim().factor_group() that describes how
66  // operations of m_factor_group permute sites of the Supercell.
67  // NOTE: The permutation representation is for (*this).get_prim().factor_group(), which may contain
68  // more operations than m_factor_group, so the Permutation SymGroupRep may have 'gaps' at the
69  // operations that aren't in m_factor_group. You should access elements of the SymGroupRep using
70  // the the Supercel::factor_group_permute(int) method, so that you don't encounter the gaps
71  // OR, see note for Supercell::permutation_symrep() below.
73 
74  // m_factor_group is factor group of the super cell, found by identifying the subgroup of
75  // (*this).get_prim().factor_group() that leaves the supercell lattice vectors unchanged
76  // if (*this).get_prim() is actually primitive, then m_factor_group.size() <= 48
77  // NOTE: This is different from the SymGroup found by doing (*this).superstruc().factor_group()
78  // if Tprim is the translation group formed by the primitive cell lattice vectors, then
79  // m_factor_group is the group formed by the cosets of Tprim in the supercell space group
80  // if Tsuper is the translation group formed by the supercell lattice vectors, then,
81  // m_occupation(init_config.get_occupation()),
82  // m_displacement(init_config.get_displacement()),
83  // m_strain(init_config.get_supercell().strain
84  // (*this).superstruc().factor_group() is the group formed by the cosets of Tsuper in the supercell space group
86 
88  mutable std::string m_name;
89 
90 
100  Eigen::MatrixXcd m_fourier_matrix;
101 
108  Eigen::MatrixXcd m_phase_factor;
109 
123 
128 
132  void generate_phase_factor(const Eigen::MatrixXd &shift_vectors, const Array<bool> &is_commensurate, const bool &override);
134 
137 
141 
144 
145  // Could hold either enumerated configurations or any 'saved' configurations
146  ConfigList config_list;
147 
148  // Improve performance of 'contains_config' by sorting Configuration
149  std::map<const Configuration *, Index, ConfigMapCompare> m_config_map;
150 
151  Eigen::Matrix3i transf_mat;
152 
153  double scaling;
154 
157 
158  public:
159 
160  //The current 'state' of the supercell in real space
161  //Configuration curr_state;
162 
163  // **** Constructors ****
164 
165  //Supercell(PrimClex *_prim);
166  Supercell(const Supercell &RHS);
167  Supercell(PrimClex *_prim, const Lattice &superlattice);
168  Supercell(PrimClex *_prim, const Eigen::Ref<const Eigen::Matrix3i> &superlattice_matrix);
169 
170 
171  // **** Coordinates ****
172  Index get_linear_index(const Site &site, double tol = TOL) const;
173  Index get_linear_index(const Coordinate &coord, double tol = TOL) const;
174  Index find(const UnitCellCoord &bijk) const;
175  Coordinate coord(const UnitCellCoord &bijk) const;
176  Coordinate coord(Index linear_ind) const;
177 
178  // returns maximum allowed occupation bitstring -- used for initializing enumeration counters
180 
181  Configuration configuration(const BasicStructure<Site> &structure_to_config, double tol = TOL);
182 
183  // return Structure corresponding to this supercell
184  // w/ basis site occupation as per primclex.prim
185  Structure superstructure() const;
186  // w/ basis site occupation as per config
187  Structure superstructure(const Configuration &config) const; //This should be private
189  Structure superstructure(Index config_index) const;
190  // w/ basis site occupation as per config
191  // and itself as prim, not primclex->prim
192 
193  //Structure structure(const Configuration &config) const;
194  //Routines that generate real and reciprocal coordinates
195  //for *this supercell
198 
199  // **** Accessors ****
200 
202  return *primclex;
203  }
204 
205  const PrimGrid &prim_grid() const {
206  return m_prim_grid;
207  }
208 
209  const Structure &get_prim() const;
210 
212  Index volume()const {
213  return m_prim_grid.size();
214  };
215 
216  Index basis_size() const {
217  return get_prim().basis.size();
218  }
219 
220  Index num_sites()const {
221  return volume() * basis_size();
222  };
223 
225  UnitCellCoord t_bijk = m_prim_grid.uccoord(i % volume());
226  t_bijk[0] = get_b(i);
227  return t_bijk;
228  };
229  const Eigen::MatrixXcd &fourier_matrix() const {
230  return m_fourier_matrix;
231  }
232 
233  const Eigen::MatrixXcd &phase_factor() const {
234  return m_phase_factor;
235  }
236 
237  const Eigen::MatrixXd &k_mesh() const {
238  return m_k_mesh;
239  }
240 
241  // the permutation_symrep is the SymGroupRep of get_prim().factor_group() that describes how
242  // operations of m_factor_group permute sites of the Supercell.
243  // NOTE: The permutation representation is for (*this).get_prim().factor_group(), which may contain
244  // more operations than m_factor_group, so the Permutation SymGroupRep may have 'gaps' at the
245  // operations that aren't in m_factor_group. You should access elements of the SymGroupRep using
246  // SymGroupRep::get_representation(m_factor_group[i]) or SymGroupRep::get_permutation(m_factor_group[i]),
247  // so that you don't encounter the gaps (i.e., the representation can be indexed using the
248  // SymOps of m_factor_group
250  if(m_perm_symrep_ID.empty())
252  return m_perm_symrep_ID;
253  }
254 
257  }
258 
259  Index get_b(Index i) const {
260  return i / volume();
261  }
262 
263  const Eigen::Matrix3i &get_transf_mat() const {
264  return transf_mat;
265  };
266 
268  return real_super_lattice;
269  };
270 
272  return recip_prim_lattice;
273  };
274 
276  const SuperNeighborList &nlist() const;
277 
278 
279  ConfigList &get_config_list() {
280  return config_list;
281  };
282 
283  const ConfigList &get_config_list() const {
284  return config_list;
285  };
286 
287  const Configuration &get_config(Index i) const {
288  return config_list[i];
289  };
290 
292  return config_list[i];
293  }
294 
295  // begin and end iterators for iterating over configurations
296  config_iterator config_begin();
297  config_iterator config_end();
298 
299  // begin and end const_iterators for iterating over configurations
300  config_const_iterator config_cbegin() const;
301  config_const_iterator config_cend() const;
302 
303  Index get_id() const {
304  return m_id;
305  }
306 
308  std::string get_name() const;
309 
310  // Populates m_factor_group (if necessary) and returns it.
311  const SymGroup &factor_group() const;
312 
313  // Returns the permutation representation of the i'th element of m_factor_group
314  const Permutation &factor_group_permute(Index i) const;
315 
316  // Returns the i'th element of m_trans_permute
317  // Populates m_trans_permute if needed
318  const Permutation &translation_permute(Index i) const;
319 
320  // Const access of m_trans_permute
321  // Populates m_trans_permute if needed
323 
325  permute_const_iterator translate_begin() const;
326 
328  permute_const_iterator translate_end() const;
329 
330  // begin and end iterators for iterating over translation and factor group permutations
331  permute_const_iterator permute_begin() const;
332  permute_const_iterator permute_end() const;
333  permute_const_iterator permute_it(Index fg_index, Index trans_index) const;
334 
336  fs::path get_path() const;
337 
339  Index amount_selected() const;
340 
341  bool is_canonical() const;
342 
343  SymOp to_canonical() const;
344 
345  SymOp from_canonical() const;
346 
347  Supercell &canonical_form() const;
348 
349  bool is_equivalent(const Supercell &B) const;
350 
351  bool operator<(const Supercell &B) const;
352 
353  // **** Mutators ****
354 
355  void set_id(Index id) {
356  m_id = id;
357  }
358 
359  // **** Generating functions ****
360 
361  // Populate m_factor_group -- probably should be private
362  void generate_factor_group() const;
363 
364  // Populate m_trans_permute -- probably should be private
365  void generate_permutations() const;
366 
368  void generate_reference_config_props(Index config_index);
371 
373  void generate_delta_config_props(Index config_index);
376 
382  void populate_structure_factor(const Index &config_index);
383 
384  // **** Enumerating functions ****
385 
386  //Functions for enumerating configurations that are perturbations of a 'background' structure
387  void enumerate_perturb_configurations(const std::string &background, fs::path CSPECS, double tol = TOL, bool verbose = false, bool print = false);
388  void enumerate_perturb_configurations(Configuration background_config, fs::path CSPECS, double tol = TOL, bool verbose = false, bool print = false);
389  void enumerate_perturb_configurations(const Structure &background, fs::path CSPECS, double tol = TOL, bool verbose = false, bool print = false);
390 
391  void enumerate_perturb_configurations(Configuration background_config,
392  const SiteOrbitree &background_tree,
393  Array< Array< Array<Index> > > &config_index,
394  Array< Array< Array<permute_const_iterator> > > &config_symop_index,
395  jsonParser &jsonsrc,
396  double tol = TOL);
397 
398  bool contains_config(const Configuration &config) const;
399  bool contains_config(const Configuration &config, Index &index) const;
400  bool add_config(const Configuration &config);
402  bool add_canon_config(const Configuration &config, Index &index);
403 
404  std::pair<config_const_iterator, bool> insert_config(const Configuration &config);
405  std::pair<config_const_iterator, bool> insert_canon_config(const Configuration &config);
406  config_const_iterator find(const Configuration &config) const;
407 
408  void read_config_list(const jsonParser &json);
409 
410  template<typename ConfigIterType>
411  void add_unique_canon_configs(ConfigIterType it_begin, ConfigIterType it_end);
412 
413  template<typename ConfigIterType>
414  void add_configs(ConfigIterType it_begin, ConfigIterType it_end);
415 
416  // **** Other ****
417  // Reads a relaxed structure and calculates the strains and stretches using the reference structure
418  void read_relaxed_structure(Index configNum, const Lattice &home_lattice);
419  void read_relaxed_structure(Index configNum);
420  void read_clex_relaxations(const Lattice &home_lattice);
421 
422  bool is_supercell_of(const Structure &structure) const;
423  bool is_supercell_of(const Structure &structure, Eigen::Matrix3d &multimat) const;
424  ReturnArray<int> vacant()const;
425 
426  // **** Printing ****
427 
428  void print_bijk(std::ostream &stream);
429  // void print_clex_correlations(std::ostream &corrFile);
431  // void print_global_correlations_simple(std::ostream &corrstream) const;
432  void print_sublat_to_comp(std::ostream &stream);
433  void print_PERTURB_json(std::ofstream &file,
434  const Configuration &background_config,
435  const Array< Array< Array<Index > > > &perturb_config_index,
436  const Array< Array< Array<permute_const_iterator> > > &perturb_config_symop_index,
437  bool print_config_name) const;
438 
441 
442  void printUCC(std::ostream &stream, COORD_TYPE mode, UnitCellCoord ucc, char term = 0, int prec = 7, int pad = 5) const;
443  //\Michael 241013
444 
445  private:
446 
448 
449  bool _eq(const Supercell &B) const;
450 
451  void _add_canon_config(const Configuration &config);
452 
453  void _generate_name() const;
454 
455  };
456 
457  Supercell &apply(const SymOp &op, Supercell &scel);
458 
459  Supercell copy_apply(const SymOp &op, const Supercell &scel);
460 
461 
462  //*******************************************************************************
463  // Warning: Assumes configurations are in canonical form
464  template<typename ConfigIterType>
465  void Supercell::add_unique_canon_configs(ConfigIterType it_begin, ConfigIterType it_end) {
466  // Remember existing configs, to avoid duplicates
467  // Enumerated configurations are added after existing configurations
468  Index N_existing = config_list.size();
469  Index N_existing_enumerated = 0;
470  Index index;
471  //std::cout << "ADDING CONFIGS TO SUPERCELL; N_exiting: " << N_existing << " N_enumerated: " << N_existing_enumerated << "\n";
472  //std::cout << "beginning iterator: " << it_begin->occupation() << "\n";
473  // Loops through all possible configurations
474  for(; it_begin != it_end; ++it_begin) {
475  //std::cout << "Attempting to add configuration: " << it_begin->occupation() << "\n";
476  // Adds the configuration to the list, if not among previously existing configurations
477 
478  bool add = true;
479  if(N_existing_enumerated != N_existing) {
480  if(contains_config(*it_begin, index)) {
481  config_list[index].push_back_source(it_begin->source());
482  add = false;
483  N_existing_enumerated++;
484  }
485  }
486  if(add) {
487  _add_canon_config(*it_begin);
488  }
489  }
490 
491  }
492 
493  //*******************************************************************************
494 
495  template<typename ConfigIterType>
496  void Supercell::add_configs(ConfigIterType it_begin, ConfigIterType it_end) {
497  for(; it_begin != it_end; ++it_begin) {
498  add_config(*it_begin);
499  }
500  }
501 
502  std::string generate_name(const Eigen::Matrix3i &transf_mat);
503 
505 }
506 #endif
const Configuration & get_config(Index i) const
Definition: Supercell.hh:287
const Array< Permutation > & translation_permute() const
Definition: Supercell.cc:154
Eigen::MatrixXd MatrixXd
const PrimGrid & prim_grid() const
Definition: Supercell.hh:205
Supercell(const Supercell &RHS)
Definition: Supercell.cc:694
SymOp from_canonical() const
Definition: Supercell.cc:902
Eigen::MatrixXd pad(const Eigen::MatrixXd &M, int n)
Construct a matrix consisting of blocks M and Identity(n,n)
Definition: PCA.hh:88
Coordinate coord(const UnitCellCoord &bijk) const
Definition: Supercell.cc:45
void _add_canon_config(const Configuration &config)
Definition: Supercell.cc:638
std::string get_name() const
Return supercell name.
Definition: Supercell.cc:123
ConfigIterator< const Configuration, const PrimClex > config_const_iterator
Definition: Supercell.hh:45
Eigen::MatrixXcd m_fourier_matrix
Definition: Supercell.hh:100
ReturnArray< int > max_allowed_occupation() const
Definition: Supercell.cc:61
void generate_factor_group() const
Definition: Supercell.cc:821
std::string m_name
unique name of the supercell based on hermite normal form (see _generate_name() ) ...
Definition: Supercell.hh:88
PermuteIterator permute_const_iterator
Definition: Supercell.hh:48
std::map< const Configuration *, Index, ConfigMapCompare > m_config_map
Definition: Supercell.hh:149
std::pair< config_const_iterator, bool > insert_config(const Configuration &config)
Insert a configuration that may be non-canonical.
Definition: Supercell.cc:611
const Lattice & get_recip_prim_lattice() const
Definition: Supercell.hh:271
Index size() const
Definition: Array.hh:145
SymGroupRep const & permutation_symrep() const
Definition: Supercell.hh:255
void read_clex_relaxations(const Lattice &home_lattice)
Type-safe ID object for communicating and accessing Symmetry representation info. ...
void generate_all_delta_config_props()
Calculate delta properties for each configuration in *this (see above)
bool empty() const
Returns true if SymGroupRepID has not been initialized with valid group_index or rep_index.
const Eigen::MatrixXcd & fourier_matrix() const
Definition: Supercell.hh:229
Eigen::Matrix3i transf_mat
Definition: Supercell.hh:151
std::string generate_name(const Eigen::Matrix3i &transf_mat)
Definition: Supercell.cc:1276
const Structure & get_prim() const
Definition: Supercell.cc:74
PrimGrid m_prim_grid
Definition: Supercell.hh:60
Structure specifies the lattice and atomic basis of a crystal.
Definition: Structure.hh:29
Object copy_apply(const Transform &f, Object obj, Args &&...args)
void generate_delta_config_props(Index config_index)
Calculate delta properties for a configuration (must have read in calculated and reference properties...
Configuration configuration(const BasicStructure< Site > &structure_to_config, double tol=TOL)
Definition: Supercell.cc:955
SymGroupRepID permutation_symrep_ID() const
Definition: Supercell.hh:249
Unit Cell Coordinates.
void _generate_name() const
Definition: Supercell.cc:858
notstd::cloneable_ptr< SuperNeighborList > m_nlist
Definition: Supercell.hh:136
const Lattice & get_real_super_lattice() const
Definition: Supercell.hh:267
const Eigen::MatrixXd & k_mesh() const
Definition: Supercell.hh:237
SymOp to_canonical() const
Definition: Supercell.cc:894
const ConfigList & get_config_list() const
Definition: Supercell.hh:283
Supercell & canonical_form() const
Definition: Supercell.cc:910
void generate_permutations() const
Definition: Supercell.cc:829
ConfigList & get_config_list()
Definition: Supercell.hh:279
bool operator()(const Configuration *A, const Configuration *B) const
Definition: Supercell.hh:23
Main CASM namespace.
Definition: complete.cpp:8
PrimGrid recip_grid
Definition: Supercell.hh:63
const double TOL
Supercell * m_canonical
Store a pointer to the canonical equivalent Supercell.
Definition: Supercell.hh:143
Represents a supercell of the primitive parent crystal structure.
Definition: Supercell.hh:37
config_const_iterator config_cend() const
Definition: Supercell.cc:113
Lattice recip_prim_lattice
Definition: Supercell.hh:58
void generate_fourier_matrix()
Structure Factor.
Definition: Supercell.cc:1168
bool contains_config(const Configuration &config) const
Definition: Supercell.cc:522
PrimClex & get_primclex() const
Definition: Supercell.hh:201
Index basis_size() const
Definition: Supercell.hh:216
void read_config_list(const jsonParser &json)
Definition: Supercell.cc:654
void read_relaxed_structure(Index configNum, const Lattice &home_lattice)
jsonParser & write_config_list(jsonParser &json)
Call Configuration::write out every configuration in supercell.
Definition: Supercell.cc:758
fs::path get_path() const
Return path to supercell directory.
Definition: Supercell.cc:865
The SuperNeighborList gives the linear indices of neighboring sites and unitcells in a particular Sup...
SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operatio...
Definition: SymGroup.hh:33
double tol
void generate_phase_factor(const Eigen::MatrixXd &shift_vectors, const Array< bool > &is_commensurate, const bool &override)
Definition: Supercell.cc:1210
permute_const_iterator permute_begin() const
Definition: Supercell.cc:179
Lattice real_super_lattice
Definition: Supercell.hh:55
boost::container::stable_vector< Configuration > ConfigList
Definition: Supercell.hh:41
void print_PERTURB_json(std::ofstream &file, const Configuration &background_config, const Array< Array< Array< Index > > > &perturb_config_index, const Array< Array< Array< permute_const_iterator > > > &perturb_config_symop_index, bool print_config_name) const
Definition: Supercell.cc:775
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
Definition: SymOp.hh:28
const MasterSymGroup & factor_group() const
Definition: Structure.cc:94
Represents cartesian and fractional coordinates.
Definition: Coordinate.hh:34
ConfigIterator< Configuration, PrimClex > config_iterator
Definition: Supercell.hh:44
const SuperNeighborList & nlist() const
Returns the SuperNeighborList.
Definition: Supercell.cc:79
PrimClex * primclex
Definition: Supercell.hh:52
EigenIndex Index
For long integer indexing:
Index volume() const
Return number of primitive cells that fit inside of *this.
Definition: Supercell.hh:212
Array< bool > is_commensurate_kpoint(const Eigen::MatrixXd &recip_coordinates, double tol=TOL)
Definition: Supercell.cc:1153
Index size() const
Definition: PrimGrid.hh:108
Array< CoordType > basis
Lattice vectors that specifies periodicity of the crystal.
bool add_canon_config(const Configuration &config, Index &index)
Definition: Supercell.cc:590
Structure superstructure() const
Definition: Supercell.cc:1037
Index m_id
index into PrimClex::supercell_list
Definition: Supercell.hh:156
void add_configs(ConfigIterType it_begin, ConfigIterType it_end)
Definition: Supercell.hh:496
bool add_config(const Configuration &config)
Definition: Supercell.cc:568
permute_const_iterator translate_begin() const
Begin iterator over pure translational permutations.
Definition: Supercell.cc:161
const SymGroup & factor_group() const
Definition: Supercell.cc:132
PrimClex is the top-level data structure for a CASM project.
Definition: PrimClex.hh:52
UnitCellCoord uccoord(Index i) const
Definition: Supercell.hh:224
bool is_supercell_of(const Structure &structure) const
Definition: Supercell.cc:924
Eigen::MatrixXd real_coordinates() const
Definition: Supercell.cc:1122
void set_id(Index id)
Definition: Supercell.hh:355
Index get_linear_index(const Site &site, double tol=TOL) const
Definition: Supercell.cc:18
config_const_iterator config_cbegin() const
Definition: Supercell.cc:109
Index find(const UnitCellCoord &bijk) const
Definition: Supercell.cc:39
void enumerate_perturb_configurations(const std::string &background, fs::path CSPECS, double tol=TOL, bool verbose=false, bool print=false)
Definition: Supercell.cc:211
void print_sublat_to_comp(std::ostream &stream)
Old CASM style corr.in output for all the configurations in *this supercell.
bool is_equivalent(const Supercell &B) const
Index get_id() const
Definition: Supercell.hh:303
void printUCC(std::ostream &stream, COORD_TYPE mode, UnitCellCoord ucc, char term=0, int prec=7, int pad=5) const
Eigen::Matrix3d Matrix3d
Eigen::MatrixXd m_k_mesh
Definition: Supercell.hh:127
permute_const_iterator translate_end() const
End iterator over pure translational permutations.
Definition: Supercell.cc:168
bool is_canonical() const
Definition: Supercell.cc:886
Eigen::MatrixXd recip_coordinates() const
Definition: Supercell.cc:1139
config_iterator config_end()
Definition: Supercell.cc:104
config_iterator config_begin()
Definition: Supercell.cc:100
Configuration & get_config(Index i)
Definition: Supercell.hh:291
SymGroupRep is an alternative representation of a SymGroup for something other than real space...
Definition: SymGroupRep.hh:30
const Permutation & factor_group_permute(Index i) const
Definition: Supercell.cc:141
void populate_structure_factor()
Definition: Supercell.cc:1228
Eigen::MatrixXcd m_phase_factor
Definition: Supercell.hh:108
Index amount_selected() const
Count how many configs are selected in *this.
Definition: Supercell.cc:874
ConfigList config_list
Definition: Supercell.hh:146
A 'cloneable_ptr' can be used in place of 'unique_ptr'.
void generate_all_reference_config_props()
Calculate reference properties for each configuration in *this (see above)
UnitCellCoord uccoord(Index i) const
Definition: PrimGrid.cc:235
bool _eq(const Supercell &B) const
Definition: Supercell.cc:1258
std::pair< config_const_iterator, bool > insert_canon_config(const Configuration &config)
Insert a configuration that is known to be canonical.
Definition: Supercell.cc:619
bool operator<(const Supercell &B) const
Definition: Supercell.cc:1246
const Eigen::MatrixXcd & phase_factor() const
Definition: Supercell.hh:233
const Eigen::Matrix3i & get_transf_mat() const
Definition: Supercell.hh:263
Index get_b(Index i) const
Definition: Supercell.hh:259
void add_unique_canon_configs(ConfigIterType it_begin, ConfigIterType it_end)
Definition: Supercell.hh:465
Index m_nlist_size_at_construction
Definition: Supercell.hh:140
ReturnArray< int > vacant() const
Definition: Supercell.cc:1105
SymGroupRepID m_perm_symrep_ID
Definition: Supercell.hh:72
permute_const_iterator permute_end() const
Definition: Supercell.cc:185
Object & apply(const Transform &f, Object &obj, Args &&...args)
void generate_reference_config_props(Index config_index)
Calculate reference properties for a configuration (must have reference states in appropriate directo...
permute_const_iterator permute_it(Index fg_index, Index trans_index) const
Definition: Supercell.cc:191
SymGroup m_factor_group
Definition: Supercell.hh:85
A Configuration represents the values of all degrees of freedom in a Supercell.
Index num_sites() const
Definition: Supercell.hh:220
void print_bijk(std::ostream &stream)
Definition: Supercell.cc:200
SymGroupRep const & representation(SymGroupRepID i) const
Const access of alternate Representations of a SymGroup.
Definition: SymGroup.cc:375