CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
Canonical.hh
Go to the documentation of this file.
1 #ifndef CASM_Canonical_HH
2 #define CASM_Canonical_HH
3 
4 #include "casm/clex/Clex.hh"
14 
15 
16 namespace CASM {
17  namespace Monte {
18 
34  class Canonical : public MonteCarlo {
35 
36  public:
37 
38  static const Monte::ENSEMBLE ensemble;
42 
43 
45  Canonical(PrimClex &primclex, const SettingsType &settings, Log &_log);
46 
47 
49  Index steps_per_pass() const;
50 
51 
53  const CondType &conditions() const;
54 
56  void set_conditions(const CondType &new_conditions);
57 
59  void set_configdof(const ConfigDoF &configdof, const std::string &msg = "");
60 
62  std::pair<ConfigDoF, std::string> set_state(
63  const CanonicalConditions &new_conditions,
65 
67  void set_state(const CondType &new_conditions,
68  const ConfigDoF &configdof,
69  const std::string &msg = "");
70 
72  const EventType &propose();
73 
75  bool check(const EventType &event);
76 
78  void accept(const EventType &event);
79 
81  void reject(const EventType &event);
82 
83  void check_corr() {
84  std::cout << "corr:" << std::endl;
85  std::cout << correlations_vec(_configdof(), supercell(), _clexulator()) << std::endl;
86  std::cout << "OK corr" << std::endl;
87  }
88 
90  void write_results(Index cond_index) const;
91 
92 
94  const double &formation_energy() const {
95  return *m_formation_energy;
96  }
97 
99  const double &potential_energy() const {
100  return *m_potential_energy;
101  }
102 
104  const Eigen::VectorXd &corr() const {
105  return *m_corr;
106  }
107 
109  const Eigen::VectorXd &comp_n() const {
110  return *m_comp_n;
111  }
112 
114  double potential_energy(const Configuration &config) const;
115 
116 
117  private:
118 
120  double &_formation_energy() {
121  return *m_formation_energy;
122  }
123 
125  double &_potential_energy() {
126  return *m_potential_energy;
127  }
128 
131  return *m_corr;
132  }
133 
136  return *m_comp_n;
137  }
138 
141  }
142 
143  const ECIContainer &_eci() const {
144  return m_formation_energy_clex.eci();
145  }
146 
147  void _set_nlist(Index l) const;
148  void _calc_delta_point_corr(Index l, int new_occ, Eigen::VectorXd &dCorr_comp) const;
149 
151  void _set_dCorr(CanonicalEvent &event) const;
152 
155  std::string title,
156  std::string colheader,
157  bool all_correlations) const;
158 
160  void _update_deltas(CanonicalEvent &event) const;
161 
163  void _update_properties();
164 
166  ConfigDoF _default_motif() const;
167 
169  std::pair<ConfigDoF, std::string> _auto_motif(const CanonicalConditions &cond) const;
170 
172  std::pair<ConfigDoF, std::string> _restricted_auto_motif(const CanonicalConditions &cond) const;
173 
175  ConfigDoF _configname_motif(const std::string &configname) const;
176 
179 
181  std::vector<OccSwap>::const_iterator _find_grand_canonical_swap(
182  const Configuration &config,
183  std::vector<OccSwap>::const_iterator begin,
184  std::vector<OccSwap>::const_iterator end);
185 
188 
189 
190 
193 
196 
199 
202 
203 
206 
209 
212 
215 
216 
217  // ---- Pointers to properties for faster access
218 
221 
224 
227 
230 
231  };
232  }
233 }
234 
235 #endif
236 
237 
238 
239 
void _print_correlations(const Eigen::VectorXd &corr, std::string title, std::string colheader, bool all_correlations) const
Print correlations to _log()
Definition: Canonical.cc:365
CanonicalEvent m_event
Event to propose, check, accept/reject:
Definition: Canonical.hh:214
ConfigDoF _enforce_conditions(const ConfigDoF &configdof)
Enforce composition by repeatedly applying grand canonical events.
Definition: Canonical.cc:555
CanonicalConditions m_condition
Conditions (T, mu). Initially determined by m_settings, but can be changed halfway through the run...
Definition: Canonical.hh:211
std::pair< ConfigDoF, std::string > set_state(const CanonicalConditions &new_conditions, const CanonicalSettings &settings)
Set configdof and conditions and clear previously collected data.
Definition: Canonical.cc:105
CanonicalEvent EventType
Definition: Canonical.hh:39
void _update_deltas(CanonicalEvent &event) const
Calculate delta properties for an event and update the event with those properties.
Definition: Canonical.cc:404
CanonicalSettings SettingsType
Definition: Canonical.hh:41
void set_conditions(const CondType &new_conditions)
Set conditions and clear previously collected data.
Definition: Canonical.cc:77
ConfigDoF & _configdof() const
Access current microstate.
Definition: MonteCarlo.hh:204
const Eigen::VectorXd & comp_n() const
Number of atoms of each type, normalized per primitive cell.
Definition: Canonical.hh:109
Clexulator & clexulator(Log &status_log=null_log()) const
Definition: Clex.cc:24
void set_configdof(const ConfigDoF &configdof, const std::string &msg="")
Set configdof and clear previously collected data.
Definition: Canonical.cc:90
Eigen::VectorXd & _corr()
Correlations, normalized per primitive cell.
Definition: Canonical.hh:130
const Configuration & config() const
const Access current microstate
Definition: MonteCarlo.hh:88
Eigen::VectorXd * m_corr
Correlations, normalized per primitive cell.
Definition: Canonical.hh:226
ENSEMBLE
Monte Carlo ensemble type.
const ConfigDoF & configdof() const
const Access current microstate
Definition: MonteCarlo.hh:93
Main CASM namespace.
Definition: complete.cpp:8
OccLocation m_occ_loc
Keeps track of what sites have which occupants.
Definition: Canonical.hh:208
bool m_use_deltas
If the supercell is large enough, calculate delta correlations directly.
Definition: Canonical.hh:205
const double & potential_energy() const
Potential energy, normalized per primitive cell.
Definition: Canonical.hh:99
std::pair< ConfigDoF, std::string > _auto_motif(const CanonicalConditions &cond) const
Generate minimum potential energy ConfigDoF.
Definition: Canonical.cc:466
CanonicalConditions CondType
Definition: Canonical.hh:40
double * m_potential_energy
Potential energy, normalized per primitive cell.
Definition: Canonical.hh:223
std::pair< ConfigDoF, std::string > _restricted_auto_motif(const CanonicalConditions &cond) const
Generate minimum potential energy ConfigDoF for this supercell.
Definition: Canonical.cc:471
void write_results(Index cond_index) const
Write results to files.
Definition: Canonical.cc:244
bool check(const EventType &event)
Based on a random number, decide if the change in energy from the proposed event is low enough to be ...
Definition: Canonical.cc:186
Log & _log() const
Definition: MonteCarlo.hh:208
double * m_formation_energy
Formation energy, normalized per primitive cell.
Definition: Canonical.hh:220
void _make_possible_swaps(const CanonicalSettings &settings)
Construct m_candidate, m_cand_to_index, m_occ_loc, m_canonical_swaps, m_grand_canonical_swaps.
bool m_all_correlations
If true, calculate all correlations; if false, calculate correlations with non-zero eci...
Definition: Canonical.hh:201
const Supercell & supercell() const
const Access the Supercell that *this is based on
Definition: MonteCarlo.hh:73
EigenIndex Index
For long integer indexing:
Evaluates correlations.
Definition: Clexulator.hh:240
Canonical(PrimClex &primclex, const SettingsType &settings, Log &_log)
Constructs a Canonical object and prepares it for running based on MonteSettings. ...
Definition: Canonical.cc:18
A container class for the different degrees of freedom a Configuration might have.
Definition: ConfigDoF.hh:27
Eigen::VectorXd & _comp_n()
Number of atoms of each type, normalized per primitive cell.
Definition: Canonical.hh:135
const PrimClex & primclex() const
const Access the PrimClex that *this is based on
Definition: MonteCarlo.hh:68
Clex m_formation_energy_clex
Holds Clexulator and ECI references.
Definition: Canonical.hh:192
Eigen::VectorXd VectorXd
void accept(const EventType &event)
Accept proposed event. Change configuration accordingly and update energies etc.
Definition: Canonical.cc:215
PrimClex is the top-level data structure for a CASM project.
Definition: PrimClex.hh:52
std::vector< OccSwap >::const_iterator _find_grand_canonical_swap(const Configuration &config, std::vector< OccSwap >::const_iterator begin, std::vector< OccSwap >::const_iterator end)
Find a OccSwap to help enforce composition.
Definition: Canonical.cc:495
Data structure for storing information regarding a proposed grand canonical Monte Carlo event...
double & _formation_energy()
Formation energy, normalized per primitive cell.
Definition: Canonical.hh:120
const Eigen::VectorXd & corr() const
Correlations, normalized per primitive cell.
Definition: Canonical.hh:104
Conversions m_convert
Convert sublat/asym_unit and species/occ index.
Definition: Canonical.hh:195
List of asym / species_index pairs indicating allowed variable occupation dof.
ConfigIO::GenericConfigFormatter< std::string > configname()
Constructs DataFormmaterDictionary containing all Configuration DatumFormatters.
Definition: ConfigIO.cc:340
Interface base class for all types of Monte Carlo simulations (not meant to be used polymorphically) ...
Definition: MonteCarlo.hh:32
const EventType & propose()
Propose a new event, calculate delta properties, and return reference to it.
Definition: Canonical.cc:179
const CondType & conditions() const
Return current conditions.
Definition: Canonical.cc:71
Eigen::VectorXd * m_comp_n
Number of atoms of each type, normalized per primitive cell.
Definition: Canonical.hh:229
OccCandidateList m_cand
Convert sublat/asym_unit and species/occ index.
Definition: Canonical.hh:198
Index steps_per_pass() const
Return number of steps per pass. Equals number of sites with variable occupation. ...
Definition: Canonical.cc:65
double & _potential_energy()
Potential energy, normalized per primitive cell.
Definition: Canonical.hh:125
void _calc_delta_point_corr(Index l, int new_occ, Eigen::VectorXd &dCorr_comp) const
Definition: Canonical.cc:267
ConfigDoF _configname_motif(const std::string &configname) const
Generate supercell filling ConfigDoF from configuration.
Definition: Canonical.cc:476
const ECIContainer & eci() const
Definition: Clex.cc:32
void _set_nlist(Index l) const
Definition: Canonical.cc:263
void reject(const EventType &event)
Nothing needs to be done to reject a CanonicalEvent.
Definition: Canonical.cc:235
ConfigDoF _default_motif() const
Generate supercell filling ConfigDoF from default configuration.
Definition: Canonical.cc:456
Stores data to enable efficient proposal and update of occupation mutation.
Definition: OccLocation.hh:68
Definition: Log.hh:9
static const Monte::ENSEMBLE ensemble
Definition: Canonical.hh:38
const ECIContainer & _eci() const
Definition: Canonical.hh:143
Clexulator & _clexulator() const
Definition: Canonical.hh:139
void _update_properties()
Calculate properties given current conditions.
Definition: Canonical.cc:414
Data structure used for cluster expansions.
Definition: Clex.hh:24
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
const MonteSettings & settings() const
const Access settings used for construction
Definition: MonteCarlo.hh:63
A Configuration represents the values of all degrees of freedom in a Supercell.
const double & formation_energy() const
Formation energy, normalized per primitive cell.
Definition: Canonical.hh:94
void _set_dCorr(CanonicalEvent &event) const
Calculate delta correlations for an event.
Definition: Canonical.cc:330
A sparse container of ECI values and their corresponding orbit indices.
Definition: ECIContainer.hh:12