36 if(dof_name.find(
"occ") == 0)
38 else if(dof_name.find(
"disp") == 0)
40 else if(dof_name.find(
"strain") == 0)
43 std::cerr <<
"CRITICAL ERROR: Unknown option '" << dof_name <<
"' passed to DoFManager::add_dof()!\n"
70 m_environs[i]->resize_neighborhood(nlist_size);
90 m_environs[i]->print_clexulator_member_definitions(stream, tree, indent);
98 m_environs[i]->print_clexulator_private_method_definitions(stream, tree, indent);
106 m_environs[i]->print_clexulator_private_method_implementations(stream, tree, indent);
114 m_environs[i]->print_clexulator_public_method_definitions(stream, tree, indent);
122 m_environs[i]->print_clexulator_public_method_implementations(stream, tree, indent);
130 m_environs[i]->print_to_clexulator_constructor(stream, tree, indent);
138 for(
Index no = 0; no < asym_unit.size(); no++) {
139 if(asym_unit[no].size() == 0 || asym_unit[no][0].clust_basis.size() == 0)
143 indent <<
"// Occupation Function tables for basis sites in asymmetric unit " << no <<
":\n";
144 for(
Index ne = 0; ne < asym_unit[no].size(); ne++) {
145 Index b = asym_unit[no][ne][0].basis_ind();
146 stream << indent <<
"// - basis site " << b <<
":\n";
147 for(
Index f = 0; f < asym_unit[no][ne].clust_basis.size(); f++) {
149 indent <<
"double " <<
"m_occ_func_" << b <<
'_' << f <<
'[' << asym_unit[no][ne][0].site_occupant().
size() <<
"];\n";
160 for(
Index no = 0; no < asym_unit.size(); no++) {
161 if(asym_unit[no].size() == 0 || asym_unit[no][0].clust_basis.size() == 0)
164 for(
Index ne = 0; ne < asym_unit[no].size(); ne++) {
165 Index b = asym_unit[no][ne][0].basis_ind();
167 indent <<
"// Occupation Function accessors for basis site " << b <<
":\n";
168 for(
Index f = 0; f < asym_unit[no][ne].clust_basis.size(); f++) {
170 indent <<
"const double &occ_func_" << b <<
'_' << f <<
"(const int &nlist_ind)const{return " <<
"m_occ_func_" << b <<
'_' << f <<
"[*(m_occ_ptr+*(m_nlist_ptr+nlist_ind))];}\n";
185 stream.flags(std::ios::showpoint | std::ios::fixed | std::ios::right);
186 stream.precision(10);
189 for(
Index no = 0; no < asym_unit.size(); no++) {
190 for(
Index ne = 0; ne < asym_unit[no].size(); ne++) {
191 Index b = asym_unit[no][ne][0].basis_ind();
192 for(
Index f = 0; f < asym_unit[no][ne].clust_basis.size(); f++) {
193 for(
Index s = 0; s < asym_unit[no][ne][0].site_occupant().size(); s++) {
196 stream <<
"m_occ_func_" << b <<
'_' << f <<
'[' << s <<
"] = "
197 << asym_unit[no][ne].clust_basis[f]->eval(
Array<Index>(1, asym_unit[no][ne][0].site_occupant().ID()),
Array<Index>(1, s));
198 if(s + 1 == asym_unit[no][ne][0].site_occupant().size())
bool contains(const std::string &dof_name) const
void set_global_dof_state(const Configuration &config)
void print_clexulator_member_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
const_displacement_t disp(Index site_l) const
Occupant displacement.
void print_clexulator_private_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
void set_local_dof_state(const Configuration &config, Index l)
const int & occ(Index site_l) const
Occupant variable on site l.
void resize_neighborhood(Index nlist_size)
void push_back(const T &toPush)
void print_clexulator_public_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
ReturnArray< FunctionVisitor * > get_function_label_visitors() const
void print_to_clexulator_constructor(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
Represents a supercell of the primitive parent crystal structure.
void print_clexulator_member_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
void set_global_state(const Configuration &config)
set the state of GLOBAL parameters based on their value in config
void print_clexulator_private_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
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
Array< DoFEnvironment * > m_environs
Array< int > m_neighbor_occ
void print_clexulator_public_method_implementations(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
void set_local_state(const Configuration &config, Index l)
set the state of LOCAL parameters based on their value in config
void print_clexulator_public_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
void print_clexulator_private_method_definitions(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
void set_local_state(const Configuration &config, Index l)
set the state of LOCAL parameters based on their value in config
void print_to_clexulator_constructor(std::ostream &stream, const SiteOrbitree &tree, const std::string &indent) const
void set_global_state(const Configuration &config)
set the state of GLOBAL parameters based on their value in config
Supercell & get_supercell() const
Get the Supercell for this Configuration.
DoFManager holds multiple DoFEnvironments, and provides a simple interface for adding and managing Do...
Index size(Index no) const
How many equivalent clusters are int orbit 'no'.
void set_local_state(const Configuration &config, Index l)
set the state of LOCAL parameters based on their value in config
Basic std::vector like container (deprecated)
const GenericOrbitBranch< ClustType > & asym_unit() const
void add_dof(const std::string &dof_name)
Array< double > m_neighbor_disp
A Configuration represents the values of all degrees of freedom in a Supercell.