CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
Site.hh
Go to the documentation of this file.
1 #ifndef SITE_HH
2 #define SITE_HH
3 
4 #include <iostream>
5 
7 
8 namespace CASM {
9 
10  class SymOp;
11 
16  class Site : public Coordinate {
17  public:
18  explicit Site(const Lattice &init_home);
19  Site(const Coordinate &init_pos, const std::string &occ_name);
20 
22  Site(const Coordinate &init_pos, std::initializer_list<Molecule> site_occ);
23 
25  return m_site_occupant;
26  }
27 
29  return m_displacement;
30  }
31 
32  void update_data_members(const Site &_ref_site);
33 
35  bool is_vacant() const;
36 
38  Index nlist_ind() const;
39 
41 
42  std::string occ_name()const;
43 
46  const Molecule &occ() const;
47 
48  bool compare(const Coordinate &test_coord, double compare_tol = TOL) const;
49  bool compare(const Site &test_site, double compare_tol = TOL) const; //Ivy
50  bool compare(const Site &test_site, const Coordinate &shift, double compare_tol = TOL) const;
51  bool compare_type(const Site &test_site) const; //Ivy
52  bool operator==(const Site &test_site) const;
53  bool almost_equal(const Site &test_site, double tol) const;
54 
55  //checks to see if species with name 'name' is allowed at site.
56  bool contains(const std::string &name) const;
57  bool contains(const std::string &name, int &index) const;
58 
59  void set_lattice(const Lattice &new_lat, COORD_TYPE mode);//John G
60 
61  void set_site_occupant(const MoleculeOccupant &new_dof) {
62  m_site_occupant = new_dof;
63  m_type_ID = -1;
64  }
65 
66  void set_occ_value(int new_val) {
67  m_site_occupant.set_value(new_val);
68  }
69 
70  void set_occ(const Molecule &new_occ) {
72  }
73 
74 
76 
78  void set_basis_ind(Index);
79 
81  void set_nlist_ind(Index);
82 
83  Site &apply_sym(const SymOp &op);
84  Site &apply_sym_no_trans(const SymOp &op);
85 
86  void read(std::istream &stream, bool SD_is_on = false);
87  void read(std::istream &stream, std::string &elem, bool SD_is_on);
88 
89  void print(std::ostream &stream) const;
90  void print_occ(std::ostream &stream) const;
91  void print_mol(std::ostream &stream, int spaces, char delim, bool SD_is_on = false)const;
92 
93 
94  Site &operator+=(const Coordinate &translation);
95  Site &operator-=(const Coordinate &translation);
96 
97  jsonParser &to_json(jsonParser &json) const;
98  void from_json(const jsonParser &json);
99 
100  private:
102  static Array<Site> m_type_prototypes;
103  return m_type_prototypes;
104  }
105 
106  //Index into PrimClex neighbor list
107  Index m_nlist_ind; //John G 230913
108  mutable Index m_type_ID;
109 
110  // displacement degrees of freedom of the molecule.
111  // These may be x,y,z, or a subspace (e.g., displacement only in the x--y plane).
113 
114  // Configuration state is fundamentally different from most other degrees of freedom,
115  // so we'll treat it separately. 'occupant' is the discrete degree of freedom associated
116  // with the molecule that occupies the site
118 
119  //============
120 
121  bool _compare_type_no_ID(const Site &test_site) const;
122  Index _type_ID() const;
123 
124 
125  };
126 
127  jsonParser &to_json(const Site &value, jsonParser &json);
128  void from_json(Site &value, const jsonParser &json);
129 
130  std::ostream &operator<< (std::ostream &stream, const Site &site);
131 
132  Site operator*(const SymOp &LHS, const Site &RHS);
133  Site operator+(const Site &LHS, const Coordinate &RHS);
134  Site operator+(const Coordinate &LHS, const Site &RHS);
135 
137 }
138 
139 #endif
std::string occ_name() const
Name of current occupant (name of molecule, but for single atom, molecule name is species name) ...
Definition: Site.cc:54
void read(std::istream &stream, bool SD_is_on=false)
Definition: Site.cc:243
Index m_nlist_ind
Definition: Site.hh:107
Index m_type_ID
Definition: Site.hh:108
void set_current_state(const T &new_state)
Definition: DoF.hh:246
Index _type_ID() const
Definition: Site.cc:504
void set_value(int new_state) override
Definition: DoF.hh:236
void from_json(ClexDescription &desc, const jsonParser &json)
jsonParser & to_json(jsonParser &json) const
Definition: Site.cc:439
bool almost_equal(const Site &test_site, double tol) const
Definition: Site.cc:175
jsonParser & to_json(const ClexDescription &desc, jsonParser &json)
const MoleculeOccupant & site_occupant() const
Definition: Site.hh:24
void from_json(const jsonParser &json)
Definition: Site.cc:458
void set_lattice(const Lattice &new_lat, COORD_TYPE mode)
Definition: Site.cc:202
Main CASM namespace.
Definition: complete.cpp:8
const double TOL
bool _compare_type_no_ID(const Site &test_site) const
Definition: Site.cc:497
Array< std::string > allowed_occupants() const
Definition: Site.cc:212
GenericCluster< CoordType > operator+(const GenericCluster< CoordType > &LHS, const Coordinate &RHS)
create translated cluster
bool compare(const Coordinate &test_coord, double compare_tol=TOL) const
Definition: Site.cc:125
const Molecule & occ() const
Definition: Site.cc:63
void set_basis_ind(Index)
set basis_ind of site and its occupant functions
Definition: Site.cc:222
double tol
const Array< ContinuousDoF > & displacement() const
Definition: Site.hh:28
Site & operator+=(const Coordinate &translation)
Definition: Site.cc:103
void print(std::ostream &stream) const
Definition: Site.cc:379
std::ostream & operator<<(std::ostream &_stream, const FormattedPrintable &_formatted)
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
Definition: SymOp.hh:28
static Array< Site > & _type_prototypes()
Definition: Site.hh:101
BasisSet operator*(const SymOp &LHS, const BasisSet &RHS)
Definition: BasisSet.cc:1154
void set_occ(const Molecule &new_occ)
Definition: Site.hh:70
Represents cartesian and fractional coordinates.
Definition: Coordinate.hh:34
Index nlist_ind() const
access m_nlist_ind
Definition: Site.cc:48
MoleculeOccupant m_site_occupant
Definition: Site.hh:117
EigenIndex Index
For long integer indexing:
bool compare_type(const Site &test_site) const
Definition: Site.cc:158
bool is_vacant() const
Checks if current occupant is a vacancy.
Definition: Site.cc:41
void print_occ(std::ostream &stream) const
Definition: Site.cc:394
Array< ContinuousDoF > m_displacement
Definition: Site.hh:112
void set_nlist_ind(Index)
set m_nlist_ind of Site and its DoFs
Definition: Site.cc:228
Site & apply_sym_no_trans(const SymOp &op)
Definition: Site.cc:88
bool operator==(const Site &test_site) const
Definition: Site.cc:169
Site(const Lattice &init_home)
Definition: Site.cc:10
bool contains(const std::string &name) const
Definition: Site.cc:181
void print_mol(std::ostream &stream, int spaces, char delim, bool SD_is_on=false) const
Definition: Site.cc:410
void set_site_occupant(const MoleculeOccupant &new_dof)
Definition: Site.hh:61
void set_occ_value(int new_val)
Definition: Site.hh:66
Site & apply_sym(const SymOp &op)
Definition: Site.cc:73
void update_data_members(const Site &_ref_site)
Definition: Site.cc:424
Basic std::vector like container (deprecated)
Site & operator-=(const Coordinate &translation)
Definition: Site.cc:114