CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
Norm.hh
Go to the documentation of this file.
1 #ifndef CASM_Norm
2 #define CASM_Norm
3 
5 
6 namespace CASM {
7 
12  template<typename DataObject>
13  class Norm {
14 
15  public:
16 
17  virtual ~Norm() {}
18 
20  virtual double operator()(const DataObject &obj) const {
21  return 1.0;
22  }
23 
24  std::unique_ptr<Norm> clone() const {
25  return std::unique_ptr<Norm>(this->_clone());
26  }
27 
28  private:
29 
30  virtual Norm *_clone() const {
31  return new Norm(*this);
32  }
33  };
34 
35  class NormPerUnitCell : public Norm<Configuration> {
36 
37  public:
38 
40  double operator()(const Configuration &config) const override {
41  return config.get_supercell().volume();
42  }
43 
45  std::unique_ptr<NormPerUnitCell> clone() const {
46  return notstd::make_unique<NormPerUnitCell>(*this);
47  }
48 
49  private:
50 
51  NormPerUnitCell *_clone() const override {
52  return new NormPerUnitCell(*this);
53  }
54  };
55 
56  class NormPerSpecies : public Norm<Configuration> {
57 
58  public:
59 
61  double operator()(const Configuration &config) const override {
62  return n_species(config);
63  }
64 
66  std::unique_ptr<NormPerSpecies> clone() const {
67  return notstd::make_unique<NormPerSpecies>(*this);
68  }
69 
70  private:
71 
72  NormPerSpecies *_clone() const override {
73  return new NormPerSpecies(*this);
74  }
75  };
76 
78 }
79 
80 #endif
81 
std::unique_ptr< Norm > clone() const
Definition: Norm.hh:24
double operator()(const Configuration &config) const override
Return number of non-Va species in configuration per unitcell.
Definition: Norm.hh:61
virtual double operator()(const DataObject &obj) const
Default normalization is 1.0.
Definition: Norm.hh:20
NormPerUnitCell * _clone() const override
Definition: Norm.hh:51
double n_species(const Configuration &config)
Returns the total number species per unit cell.
Main CASM namespace.
Definition: complete.cpp:8
virtual ~Norm()
Definition: Norm.hh:17
Index volume() const
Return number of primitive cells that fit inside of *this.
Definition: Supercell.hh:212
double operator()(const Configuration &config) const override
Return configuration supercell size.
Definition: Norm.hh:40
std::unique_ptr< NormPerUnitCell > clone() const
Clone.
Definition: Norm.hh:45
NormPerSpecies * _clone() const override
Definition: Norm.hh:72
std::unique_ptr< NormPerSpecies > clone() const
Clone.
Definition: Norm.hh:66
Supercell & get_supercell() const
Get the Supercell for this Configuration.
virtual Norm * _clone() const
Definition: Norm.hh:30
A Configuration represents the values of all degrees of freedom in a Supercell.