CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
DoFManager.hh
Go to the documentation of this file.
1 #ifndef DOFMANAGER_HH
2 #define DOFMANAGER_HH
3 
7 
8 namespace CASM {
9 
10  class DoFEnvironment;
11 
13  class DoFManager {
15  public:
16  DoFManager() {};
17  DoFManager(const DoFManager &RHS);
18  ~DoFManager();
19  bool contains(const std::string &dof_name) const;
20  void add_dof(const std::string &dof_name);
21  void set_local_dof_state(const Configuration &config, Index l);
22  void set_global_dof_state(const Configuration &config);
23 
24  void resize_neighborhood(Index nlist_size);
25 
26  template<typename ClustType>
28 
29  //Clexulator printing routines
31  void print_clexulator_member_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
32  void print_clexulator_private_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
33  void print_clexulator_private_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
34 
35  void print_clexulator_public_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
36  void print_clexulator_public_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
37 
38  void print_to_clexulator_constructor(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
39  };
40 
46  std::string m_dof_name;
47 
48  public:
49  DoFEnvironment(std::string dof_name) : m_dof_name(dof_name) {};
50  virtual ~DoFEnvironment() {};
51 
52  const std::string &name() const {
53  return m_dof_name;
54  };
55 
57  virtual void set_global_state(const Configuration &config) = 0;
58 
60  virtual void set_local_state(const Configuration &config, Index l) = 0;
61 
62  virtual void resize_neighborhood(Index nlist_size) {};
63 
66  virtual int register_dofs(BasisSet &basis)const = 0;
67 
68  // Help with Clexulator printing
70  return nullptr;
71  };
72 
73  virtual void print_clexulator_member_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent)const {};
74 
75  virtual void print_clexulator_private_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent)const {};
76  virtual void print_clexulator_private_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent)const {};
77 
78  virtual void print_clexulator_public_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent)const {};
79  virtual void print_clexulator_public_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent)const {};
80 
81  virtual void print_to_clexulator_constructor(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const {};
82  };
83 
84  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
85 
87  //inherited from DoFEnvironment:
88  // std::string m_dof_name;
89 
91  public:
92  OccupationDoFEnvironment(std::string dof_name = "p") : DoFEnvironment(dof_name) {};
93 
94  void set_global_state(const Configuration &config);
95  void set_local_state(const Configuration &config, Index l);
96 
97  void resize_neighborhood(Index nlist_size) {
98  m_neighbor_occ.resize(nlist_size, 0);
99  };
100 
101  int register_dofs(BasisSet &basis) const {
102  Array<DoF::RemoteHandle> handles;
103  for(Index i = 0; i < m_neighbor_occ.size(); i++)
104  handles.push_back(DoF::RemoteHandle(m_neighbor_occ[i]));
105  return basis.register_remotes(name(), handles);
106  };
107 
109  //std::cout << "*****************MAKING OCC_FUNC LABELER\n";
110  return new OccFuncLabeler("occ_func_%b_%f(%n)");
111  };
112 
113  void print_clexulator_member_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent)const;
114 
115  void print_clexulator_private_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
116 
117  void print_clexulator_public_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
118 
119  void print_to_clexulator_constructor(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const;
120  };
121 
122  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123 
125  //inherited from DoFEnvironment:
126  // std::string m_dof_name;
127 
128  // disp_index indicates which displacement component of Vector3<double> to select
129  // e.g., to get the value of y_l (e.g., the y-displacement at site l), disp_index should be 1,
130  // and the value is at config.get_disp(l)[disp_index]
132 
134  public:
135  DisplacementDoFEnvironment(std::string dof_name) : DoFEnvironment(dof_name) {
136  if(dof_name == "disp_x")
137  m_disp_index = 0;
138  else if(dof_name == "disp_y")
139  m_disp_index = 1;
140  else if(dof_name == "disp_z")
141  m_disp_index = 2;
142  else
143  m_disp_index = -1;
144  };
145 
146  void set_global_state(const Configuration &config);
147  void set_local_state(const Configuration &config, Index l);
148 
149 
150  void resize_neighborhood(Index nlist_size) {
151  m_neighbor_disp.resize(nlist_size, 0);
152  };
153 
154  int register_dofs(BasisSet &basis)const {
155  Array<DoF::RemoteHandle> handles;
156  for(Index i = 0; i < m_neighbor_disp.size(); i++)
157  handles.push_back(DoF::RemoteHandle(m_neighbor_disp[i]));
158  return basis.register_remotes(name(), handles);
159 
160  };
161 
162  };
163 
164  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
165 
166 
168  //inherited from DoFEnvironment:
169  // std::string m_dof_name;
170 
172  public:
173  StrainDoFEnvironment(std::string dof_name) : DoFEnvironment(dof_name) {};
174 
175  void set_global_state(const Configuration &config);
176  void set_local_state(const Configuration &config, Index l);
177 
178 
179  int register_dofs(BasisSet &basis)const {
180  Array<DoF::RemoteHandle> handles;
181  for(Index i = 0; i < m_strain_vals.size(); i++)
182  handles.push_back(DoF::RemoteHandle(m_strain_vals[i]));
183  return basis.register_remotes(name(), handles);
184  };
185 
186  };
187 
188 
189  //************************************************************
190 
191  template<typename ClustType>
193  int sum(0);
194  Index nb, no, ne, i;
195  for(nb = 0; nb < tree.size(); nb++) {
196  for(no = 0; no < tree[nb].size(); no++) {
197  for(ne = 0; ne < tree[nb][no].size(); ne++) {
198 
199  for(i = 0; i < m_environs.size(); i++)
200  sum += m_environs[i]->register_dofs(tree[nb][no][ne].clust_basis);
201 
202  }
203  }
204  }
205  //std::cout << "Finished registering " << sum << " remotes.\n";
206  }
207 
208 };
209 
210 #endif
int register_dofs(BasisSet &basis) const
Definition: DoFManager.hh:101
bool contains(const std::string &dof_name) const
Definition: DoFManager.cc:24
virtual void print_to_clexulator_constructor(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.hh:81
void set_global_dof_state(const Configuration &config)
Definition: DoFManager.cc:60
int register_dofs(BasisSet &basis) const
Definition: DoFManager.hh:154
void print_clexulator_member_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:88
std::string m_dof_name
Definition: DoFManager.hh:46
void print_clexulator_private_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:96
void set_local_dof_state(const Configuration &config, Index l)
Definition: DoFManager.cc:52
Index size() const
Definition: Array.hh:145
void resize_neighborhood(Index nlist_size)
Definition: DoFManager.cc:68
void push_back(const T &toPush)
Definition: Array.hh:513
const std::string & name() const
Definition: DoFManager.hh:52
void resize(Index new_N)
Definition: Array.hh:468
virtual void print_clexulator_public_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.hh:79
void print_clexulator_public_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:112
ReturnArray< FunctionVisitor * > get_function_label_visitors() const
Definition: DoFManager.cc:76
Main CASM namespace.
Definition: complete.cpp:8
void print_to_clexulator_constructor(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:184
virtual void print_clexulator_member_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.hh:73
void print_clexulator_member_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:136
virtual void set_local_state(const Configuration &config, Index l)=0
set the state of LOCAL parameters based on their value in config
DisplacementDoFEnvironment(std::string dof_name)
Definition: DoFManager.hh:135
OccupationDoFEnvironment(std::string dof_name="p")
Definition: DoFManager.hh:92
virtual void print_clexulator_private_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.hh:75
FunctionVisitor * get_function_label_visitor() const
Definition: DoFManager.hh:108
void set_global_state(const Configuration &config)
set the state of GLOBAL parameters based on their value in config
Definition: DoFManager.cc:210
void print_clexulator_private_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:104
StrainDoFEnvironment(std::string dof_name)
Definition: DoFManager.hh:173
EigenIndex Index
For long integer indexing:
void set_global_state(const Configuration &config)
set the state of GLOBAL parameters based on their value in config
Definition: DoFManager.cc:226
virtual ~DoFEnvironment()
Definition: DoFManager.hh:50
virtual void print_clexulator_private_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.hh:76
Array< DoFEnvironment * > m_environs
Definition: DoFManager.hh:14
void resize_neighborhood(Index nlist_size)
Definition: DoFManager.hh:97
virtual void resize_neighborhood(Index nlist_size)
Definition: DoFManager.hh:62
DoFEnvironment(std::string dof_name)
Definition: DoFManager.hh:49
void print_clexulator_public_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:120
virtual void set_global_state(const Configuration &config)=0
set the state of GLOBAL parameters based on their value in config
int register_remotes(const std::string &dof_name, const Array< DoF::RemoteHandle > &remote_handles)
Definition: BasisSet.cc:385
void set_local_state(const Configuration &config, Index l)
set the state of LOCAL parameters based on their value in config
Definition: DoFManager.cc:253
virtual int register_dofs(BasisSet &basis) const =0
virtual void print_clexulator_public_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.hh:78
void print_clexulator_public_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:178
void print_clexulator_private_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:158
void set_local_state(const Configuration &config, Index l)
set the state of LOCAL parameters based on their value in config
Definition: DoFManager.cc:232
void resize_neighborhood(Index nlist_size)
Definition: DoFManager.hh:150
void print_to_clexulator_constructor(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Definition: DoFManager.cc:128
void set_global_state(const Configuration &config)
set the state of GLOBAL parameters based on their value in config
Definition: DoFManager.cc:242
virtual FunctionVisitor * get_function_label_visitor() const
Definition: DoFManager.hh:69
DoFManager holds multiple DoFEnvironments, and provides a simple interface for adding and managing Do...
Definition: DoFManager.hh:13
void set_local_state(const Configuration &config, Index l)
set the state of LOCAL parameters based on their value in config
Definition: DoFManager.cc:216
Basic std::vector like container (deprecated)
Array< double > m_strain_vals
Definition: DoFManager.hh:171
int register_dofs(BasisSet &basis) const
Definition: DoFManager.hh:179
void register_dofs(GenericOrbitree< ClustType > &tree) const
Definition: DoFManager.hh:192
void add_dof(const std::string &dof_name)
Definition: DoFManager.cc:32
Index size(Index np) const
Number of orbits in OrbitBranch 'np'.
A Configuration represents the values of all degrees of freedom in a Supercell.