CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
Variable.hh
Go to the documentation of this file.
1 #ifndef VARIABLE_HH
2 #define VARIABLE_HH
3 
4 #include <iostream>
5 #include <sstream>
8 
9 
10 namespace CASM {
11 
12  class Function;
13  class FunctionVisitor;
14  class FunctionOperation;
15  class InnerProduct;
16 
17  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18  //Function is a virtual class, which means you use it like this:
19  //
20  // Function* my_funct_ptr=new VariableArgument("x");
21  // my_funct_ptr->make_formula();
22  //
23  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24  class Variable :
25  public Function, public DerivedID<Variable, Function> {
26  //**Inherited from Function:**
27  // int func_ID;
28  // Array<Function*> m_argument;
29  // mutable std::string m_formula, m_tex_formula;
30  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
31 
32  // m_var_compon defines coordinate system of variables
34 
35  //Symmetry representation for variable space (e.g., {x,y,z})
37 
38  //coeffs defines linear combination (i.e., vector) of m_var_compon
40 
41  //Default construction not allowed
42  //Variable(){}
43 
44  // Copy construction is private.
45  // Copy construction should only occur in Variable::copy()
46  Variable(const Variable &old_var);
47 
48  public:
49 
50  Variable(const Array<ContinuousDoF> &tvar, int var_ind, SymGroupRepID rep_ID);
51  Variable(const Array<ContinuousDoF> &tvar, const Eigen::VectorXd &init_coeffs, SymGroupRepID rep_ID);
52 
53  static void fill_dispatch_table();
54 
55  std::string type_name() const {
56  return "Variable";
57  }
58 
59  Function *copy()const {
60  return new Variable(*this);
61  }
62 
63  bool is_zero() const;
64  void small_to_zero(double tol = TOL);
65  Index num_terms() const;
66 
67  double leading_coefficient() const;
68  double leading_coefficient(Index &index) const;
69  double get_coefficient(Index i) const;
70 
72  return m_var_compon;
73  }
75  return m_sym_rep_ID;
76  }
77 
78  const Eigen::VectorXd &coeffs() const {
79  return m_coeffs;
80  }
81 
82  void make_formula()const;
83  void make_formula(double prefactor)const;
84 
85  int register_remotes(const std::string &dof_name, const Array<DoF::RemoteHandle> &remote_handles);
86 
87  bool compare(const Variable *RHS) const;
88 
89  int class_ID() const {
91  }
92  static int sclass_ID() {
94  }
95 
96  double dot(Function const *RHS) const;
97  void scale(double scale_factor);
98 
99  double remote_eval() const;
100 
101  double remote_deval(const DoF::RemoteHandle &dvar) const;
102 
103  double cache_eval() const {
104  return remote_eval();
105  }
106 
107  double cache_deval(const DoF::RemoteHandle &dvar) const {
108  return remote_deval(dvar);
109  }
110 
111  Function *minus_equals(const Variable *RHS);
112  Function *plus_equals(const Variable *RHS);
113 
114  jsonParser &to_json(jsonParser &json) const;
115  void from_json(const jsonParser &json);
116  protected:
117  Function *_apply_sym(const SymOp &op);
118  bool _accept(const FunctionVisitor &visitor, BasisSet const *home_basis_ptr = NULL);
119 
120  bool _update_dof_IDs(const Array<Index> &before_IDs, const Array<Index> &after_IDs);
121 
122  };
123 
124  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
125 
127  public:
128  double dot(Function const *LHS, Function const *RHS) const;
129  };
130 
131  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
132 
134  public:
135  bool compare(Function const *LHS, Function const *RHS) const;
136 
137  Function *multiply(Function const *LHS, Function const *RHS) const;
138  Function *multiply_by(Function *LHS, Function const *RHS) const;
139 
140  Function *add(Function const *LHS, Function const *RHS) const;
141  Function *add_to(Function *LHS, Function const *RHS) const;
142 
143  Function *subtract(Function const *LHS, Function const *RHS) const;
144  Function *subtract_from(Function *LHS, Function const *RHS) const;
145  };
146 
147  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
148 
149  jsonParser &to_json(const Variable &var, jsonParser &json);
150  void from_json(Variable &var, const jsonParser &json);
151 
152 }
153 #endif
Function * _apply_sym(const SymOp &op)
Definition: Variable.cc:201
Function * copy() const
Definition: Variable.hh:59
static int get_class_ID()
Definition: HierarchyID.hh:32
jsonParser & to_json(jsonParser &json) const
Definition: Variable.cc:429
bool _accept(const FunctionVisitor &visitor, BasisSet const *home_basis_ptr=NULL)
Definition: Variable.cc:63
Function * subtract(Function const *LHS, Function const *RHS) const
Definition: Variable.cc:380
void small_to_zero(double tol=TOL)
Definition: Variable.cc:80
bool is_zero() const
Definition: Variable.cc:68
double cache_deval(const DoF::RemoteHandle &dvar) const
Definition: Variable.hh:107
void from_json(ClexDescription &desc, const jsonParser &json)
double cache_eval() const
Definition: Variable.hh:103
Function * multiply_by(Function *LHS, Function const *RHS) const
Definition: Variable.cc:331
Type-safe ID object for communicating and accessing Symmetry representation info. ...
bool _update_dof_IDs(const Array< Index > &before_IDs, const Array< Index > &after_IDs)
Definition: Variable.cc:234
jsonParser & to_json(const ClexDescription &desc, jsonParser &json)
void scale(double scale_factor)
Definition: Variable.cc:275
void make_formula() const
Definition: Variable.cc:135
const Eigen::VectorXd & coeffs() const
Definition: Variable.hh:78
Main CASM namespace.
Definition: complete.cpp:8
const double TOL
Function * subtract_from(Function *LHS, Function const *RHS) const
Definition: Variable.cc:391
Function * multiply(Function const *LHS, Function const *RHS) const
Definition: Variable.cc:341
Function * add(Function const *LHS, Function const *RHS) const
Definition: Variable.cc:403
Function * minus_equals(const Variable *RHS)
Definition: Variable.cc:306
double tol
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
Definition: SymOp.hh:28
double remote_eval() const
Definition: Variable.cc:284
EigenIndex Index
For long integer indexing:
SymGroupRepID m_sym_rep_ID
Definition: Variable.hh:36
bool compare(const Variable *RHS) const
Definition: Variable.cc:259
double dot(Function const *RHS) const
Eigen::VectorXd VectorXd
double dot(Function const *LHS, Function const *RHS) const
Definition: Variable.cc:319
void from_json(const jsonParser &json)
Index num_terms() const
Definition: Variable.cc:90
std::string type_name() const
Definition: Variable.hh:55
Eigen::VectorXd m_coeffs
Definition: Variable.hh:39
Function * add_to(Function *LHS, Function const *RHS) const
Definition: Variable.cc:413
static int sclass_ID()
Definition: Variable.hh:92
double remote_deval(const DoF::RemoteHandle &dvar) const
Definition: Variable.cc:294
int register_remotes(const std::string &dof_name, const Array< DoF::RemoteHandle > &remote_handles)
Definition: Variable.cc:216
Variable(const Variable &old_var)
Definition: Variable.cc:35
SymGroupRepID sym_rep_ID() const
Definition: Variable.hh:74
static void fill_dispatch_table()
Definition: Variable.cc:16
double get_coefficient(Index i) const
Definition: Variable.cc:127
double leading_coefficient() const
Definition: Variable.cc:105
int class_ID() const
Definition: Variable.hh:89
Array< ContinuousDoF > m_var_compon
Definition: Variable.hh:33
Basic std::vector like container (deprecated)
const Array< ContinuousDoF > & var_compon() const
Definition: Variable.hh:71
bool compare(Function const *LHS, Function const *RHS) const
Definition: Variable.cc:326
Function * plus_equals(const Variable *RHS)
Definition: Variable.cc:313