CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
CanonicalConditions.cc
Go to the documentation of this file.
4 
5 #include "casm/clex/PrimClex.hh"
6 
7 namespace CASM {
8  namespace Monte {
9 
18  const PrimClex &_primclex,
19  double _temperature,
20  const Eigen::VectorXd &_param_comp,
21  double _tol) :
22 
23  m_primclex(&_primclex),
24  m_tolerance(_tol) {
25 
26  // -- set T ----
27  set_temperature(_temperature);
28 
29 
30  // -- set mol composition per prim ----
31  set_param_composition(_param_comp);
32 
33  }
34 
35  // ***************************************ACCESSORS********************************************** //
36 
38  return *m_primclex;
39  }
40 
42  return m_temperature;
43  }
44 
45  double CanonicalConditions::beta() const {
46  return m_beta;
47  }
48 
51  return m_param_composition;
52  }
53 
56  return m_param_composition(index);
57  }
58 
62  }
63 
66  return mol_composition()(index);
67  }
68 
70  return m_tolerance;
71  }
72 
73 
74  // ***************************************MUTATORS*********************************************** //
75 
76  void CanonicalConditions::set_temperature(double in_temp) {
77  m_temperature = in_temp;
78  m_beta = 1.0 / (KB * m_temperature);
79  return;
80  }
81 
84  m_param_composition = in_param_comp;
85  }
86 
88  void CanonicalConditions::set_param_composition(Index ind, double in_param_comp) {
89  m_param_composition(ind) = in_param_comp;
90  }
91 
92 
93  // ***************************************OPERATORS********************************************** //
94 
98  m_beta = 1.0 / (CASM::KB * m_temperature);
99  return *this;
100  }
101 
103  return CanonicalConditions(*this) += RHS;
104  }
105 
110  m_beta = 1.0 / (CASM::KB * m_temperature);
111  return *this;
112  }
113 
115  return CanonicalConditions(*this) -= RHS;
116  }
117 
120  return false;
121  }
122 
124  return false;
125  }
126 
127  return true;
128  }
129 
131  return !(*this == RHS);
132  }
133 
135  int max_division = 0;
136 
137  if(!almost_zero(RHS_inc.temperature())) {
138  max_division = round(temperature() / RHS_inc.temperature());
139  }
140 
141  for(Index i = 0; i < m_param_composition.size(); i++) {
142  int temp_division = round(m_param_composition(i) / RHS_inc.m_param_composition(i));
143 
144  if(temp_division > max_division && !almost_zero(RHS_inc.m_param_composition(i))) {
145  max_division = temp_division;
146  }
147  }
148 
149  return max_division;
150  }
151 
152  std::ostream &operator<<(std::ostream &sout, const CanonicalConditions &cond) {
153  sout << "T: " << cond.temperature() << "\n";
154  for(int i = 0; i < cond.param_composition().size(); i++) {
155  jsonParser json;
156  sout << "param_composition: " << to_json_array(cond.param_composition(), json) << "\n";
157  }
158  return sout;
159  }
160 
161  }
162 }
163 
164 
Eigen::VectorXd mol_composition(const Eigen::VectorXd &x) const
Convert parametric composition, 'x', to number of mol per prim, 'n'.
bool almost_zero(const T &val, double tol=TOL)
If T is not integral, use std::abs(val) < tol;.
Definition: CASM_math.hh:41
void set_param_composition(const Eigen::VectorXd &in_param_comp)
Set parametric composition.
Eigen::VectorXd param_composition() const
parametric composition: comp_x
Main CASM namespace.
Definition: complete.cpp:8
CanonicalConditions operator+(const CanonicalConditions &RHS) const
Add temperature and all chemical potentials together and return a new Condition.
std::ostream & operator<<(std::ostream &sout, const CanonicalConditions &cond)
double m_beta
Inverse temperature. Includes Boltzmann term.
CanonicalConditions & operator-=(const CanonicalConditions &RHS)
Subtract temperature and all chemical potentials to *this.
bool operator!=(const CanonicalConditions &RHS) const
Compare temperature and all chemical potentials to *this.
EigenIndex Index
For long integer indexing:
Eigen::VectorXd mol_composition() const
mol composition: comp_n
Eigen::VectorXd VectorXd
int operator/(const CanonicalConditions &RHS_inc) const
Divide ALL parameters and return the greatest number in absolute value.
const double KB
PrimClex is the top-level data structure for a CASM project.
Definition: PrimClex.hh:52
const CompositionConverter & composition_axes() const
const Access CompositionConverter object
Definition: PrimClex.cc:237
Eigen::VectorXd m_param_composition
Vector of the param composition.
CASM::jsonParser & to_json_array(const Eigen::MatrixBase< Derived > &value, CASM::jsonParser &json)
Write Eigen Matrix with 1 row or 1 column to JSON array.
Definition: container.hh:191
CanonicalConditions operator-(const CanonicalConditions &RHS) const
Subtract temperature and all chemical potentials together and return a new Condition.
bool operator==(const CanonicalConditions &RHS) const
Compare temperature and all chemical potentials to *this.
CanonicalConditions()
Default constructor.
CanonicalConditions & operator+=(const CanonicalConditions &RHS)
Add temperature and all chemical potentials to *this.
void set_temperature(double in_temp)
Set the temperature of the current grand canonical condition.
const PrimClex & primclex() const
double m_tolerance
Tolerance for comparison operators == and !=.
int round(double val)
Definition: CASM_math.cc:6