CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
ConfigDoF.hh
Go to the documentation of this file.
1 #ifndef ConfigDoF_HH
2 #define ConfigDoF_HH
3 
6 //#include "casm/symmetry/PermuteIterator.hh"
7 
8 namespace CASM {
9 
10 
11  class PermuteIterator;
12  class PrimClex;
13  class Supercell;
14  class Clexulator;
15 
16 
27  class ConfigDoF {
28 
29  public:
30 
31  // typedefs to provide flexibility if we eventually change to a Eigen::Matrix<3,Eigen::Dynamic>
33 
34  // Can treat as a Eigen::VectorXd
35  typedef displacement_matrix_t::ColXpr displacement_t;
36  typedef displacement_matrix_t::ConstColXpr const_displacement_t;
37 
39  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
40 
42  ConfigDoF(Index N = 0, double _tol = TOL);
43 
45  ConfigDoF(const Array<int> &_occupation, double _tol = TOL);
46 
49 
50  public:
51 
53  Index size() const {
54  return m_N;
55  }
56 
57  double tol()const {
58  return m_tol;
59  }
60 
61  int &occ(Index i) {
62  return m_occupation[i];
63  };
64 
65  const int &occ(Index i) const {
66  return m_occupation[i];
67  };
68 
69  const Array<int> &occupation() const {
70  return m_occupation;
71  };
72 
73  displacement_t disp(Index i) {
74  return m_displacement.col(i);
75  };
76 
77  const_displacement_t disp(Index i) const {
78  return m_displacement.col(i);
79  };
80 
81  const displacement_matrix_t &displacement() const {
82  return m_displacement;
83  };
84 
85  const Eigen::Matrix3d &deformation() const {
86  return m_deformation;
87  }
88 
89  const double &F(Index i, Index j) const {
90  return m_deformation(i, j);
91  }
92 
93  double &F(Index i, Index j) {
94  assert(has_deformation() && "Non-const method ConfigDoF::F() should only be called after ConfigDoF::set_deformation()!!!");
95  return m_deformation(i, j);
96  }
97 
98  bool has_deformation() const {
99  return m_has_deformation;
100  }
101 
102  bool has_displacement() const {
103  return size() != 0 && displacement().cols() == size();
104  }
105 
106  bool has_occupation() const {
107  return size() != 0 && occupation().size() == size();
108  }
109 
110  //**** MUTATORS ****
114 
117  void set_displacement(const displacement_matrix_t &_displacement);
118 
121 
122  void clear();
123 
124  void clear_occupation();
125  void clear_displacement();
126  void clear_deformation();
127 
128  void swap(ConfigDoF &RHS);
129 
130  //**** I/O ****
131  jsonParser &to_json(jsonParser &json) const;
132  void from_json(const jsonParser &json);
133 
134 
135  private:
136 
137  // ***DON'T FORGET: If you add something here, also update ConfigDoF::swap!!
138 
139 
142 
145 
148  displacement_matrix_t m_displacement;
149 
153 
155 
159  mutable double m_tol;
160 
161  // *** PRIVATE NON-CONST ACCESS
163  return m_occupation;
164  };
165 
166  displacement_matrix_t &_displacement() {
167  return m_displacement;
168  };
169 
171  return m_deformation;
172  }
173 
174  };
175 
176  jsonParser &to_json(const ConfigDoF &value, jsonParser &json);
177 
178  void from_json(ConfigDoF &value, const jsonParser &json);
179 
180  // Calculate transformed ConfigDoF from PermuteIterator via
181  // apply(permute_iterator, dof)
182  ConfigDoF &apply(const PermuteIterator &it, ConfigDoF &dof);
183 
184  void swap(ConfigDoF &A, ConfigDoF &B);
185 
187  Correlation correlations(const ConfigDoF &configdof, const Supercell &scel, Clexulator &clexulator);
188 
190  Eigen::VectorXd correlations_vec(const ConfigDoF &configdof, const Supercell &scel, Clexulator &clexulator);
191 
193  ReturnArray<int> get_num_each_molecule(const ConfigDoF &configdof, const Supercell &scel);
194 
196  Eigen::VectorXi get_num_each_molecule_vec(const ConfigDoF &configdof, const Supercell &scel);
197 
199  Eigen::VectorXd comp_n(const ConfigDoF &configdof, const Supercell &scel);
200 
201  inline
203  return;
204  }
205 
206 }
207 
208 #endif
Eigen::MatrixXd MatrixXd
bool m_has_deformation
Definition: ConfigDoF.hh:154
int & occ(Index i)
Definition: ConfigDoF.hh:61
void reset_properties(ConfigDoF &_dof)
Definition: ConfigDoF.hh:202
ReturnArray< int > get_num_each_molecule(const ConfigDoF &configdof, const Supercell &scel)
Returns num_each_molecule[ molecule_type], where 'molecule_type' is ordered as Structure::get_struc_m...
Definition: ConfigDoF.cc:278
void from_json(ClexDescription &desc, const jsonParser &json)
void set_displacement(const displacement_matrix_t &_displacement)
Definition: ConfigDoF.cc:102
Index size() const
Definition: Array.hh:145
jsonParser & to_json(const ClexDescription &desc, jsonParser &json)
Eigen::Matrix3d m_deformation
Definition: ConfigDoF.hh:152
Array< int > & _occupation()
Definition: ConfigDoF.hh:162
double & F(Index i, Index j)
Definition: ConfigDoF.hh:93
Correlation correlations(const ConfigDoF &configdof, const Supercell &scel, Clexulator &clexulator)
Returns correlations using 'clexulator'. Supercell needs a correctly populated neighbor list...
Definition: ConfigDoF.cc:200
void swap(ConfigDoF &RHS)
Definition: ConfigDoF.cc:73
Main CASM namespace.
Definition: complete.cpp:8
void from_json(const jsonParser &json)
Definition: ConfigDoF.cc:139
const double TOL
Index size() const
*** ACCESSORS ***
Definition: ConfigDoF.hh:53
const Eigen::Matrix3d & deformation() const
Definition: ConfigDoF.hh:85
displacement_matrix_t & _displacement()
Definition: ConfigDoF.hh:166
void swap(ConfigDoF &A, ConfigDoF &B)
Definition: ConfigDoF.cc:195
Eigen::VectorXi get_num_each_molecule_vec(const ConfigDoF &configdof, const Supercell &scel)
Returns num_each_molecule(molecule_type), where 'molecule_type' is ordered as Structure::get_struc_mo...
Definition: ConfigDoF.cc:295
Eigen::VectorXd comp_n(const ConfigDoF &configdof, const Supercell &scel)
Returns comp_n, the number of each molecule per primitive cell, ordered as Structure::get_struc_molec...
Definition: ConfigDoF.cc:312
displacement_matrix_t::ColXpr displacement_t
Definition: ConfigDoF.hh:35
double tol() const
Definition: ConfigDoF.hh:57
displacement_matrix_t::ConstColXpr const_displacement_t
Definition: ConfigDoF.hh:36
EigenIndex Index
For long integer indexing:
const int & occ(Index i) const
Definition: ConfigDoF.hh:65
A container class for the different degrees of freedom a Configuration might have.
Definition: ConfigDoF.hh:27
jsonParser & to_json(jsonParser &json) const
Definition: ConfigDoF.cc:126
Eigen::VectorXd VectorXd
const double & F(Index i, Index j) const
Definition: ConfigDoF.hh:89
void set_deformation(const Eigen::Matrix3d &_deformation)
set_deformation sets ConfigDoF::has_deformation() to true
Definition: ConfigDoF.cc:119
Index m_N
Number of sites in the Configuration.
Definition: ConfigDoF.hh:141
Eigen::VectorXd Correlation
Definition: Correlation.hh:9
Eigen::Matrix3d Matrix3d
displacement_matrix_t m_displacement
Definition: ConfigDoF.hh:148
const_displacement_t disp(Index i) const
Definition: ConfigDoF.hh:77
void clear_displacement()
Definition: ConfigDoF.cc:62
const displacement_matrix_t & displacement() const
Definition: ConfigDoF.hh:81
const Array< int > & occupation() const
Definition: ConfigDoF.hh:69
void clear_occupation()
Definition: ConfigDoF.cc:58
Eigen::Matrix3d & _deformation()
Definition: ConfigDoF.hh:170
bool has_deformation() const
Definition: ConfigDoF.hh:98
Eigen::MatrixXd displacement_matrix_t
Definition: ConfigDoF.hh:32
displacement_t disp(Index i)
Definition: ConfigDoF.hh:73
bool has_displacement() const
Definition: ConfigDoF.hh:102
void clear_deformation()
Definition: ConfigDoF.cc:66
Eigen::VectorXd correlations_vec(const ConfigDoF &configdof, const Supercell &scel, Clexulator &clexulator)
Returns correlations using 'clexulator'. Supercell needs a correctly populated neighbor list...
Definition: ConfigDoF.cc:242
Object & apply(const Transform &f, Object &obj, Args &&...args)
void set_occupation(const Array< int > &_occupation)
Definition: ConfigDoF.cc:84
bool has_occupation() const
Definition: ConfigDoF.hh:106
Array< int > m_occupation
With one value for each site in the Configuration, this Array describes which occupant is at each of ...
Definition: ConfigDoF.hh:144
EIGEN_MAKE_ALIGNED_OPERATOR_NEW ConfigDoF(Index N=0, double _tol=TOL)
fixes alignment of m_deformation
Definition: ConfigDoF.cc:13