36 m_var_compon(old_var.var_compon()),
37 m_sym_rep_ID(old_var.sym_rep_ID()),
38 m_coeffs(old_var.coeffs()) {
44 m_var_compon(_var_compon),
45 m_sym_rep_ID(_sym_rep_ID),
46 m_coeffs(_var_compon.size()) {
55 m_var_compon(_var_compon),
56 m_sym_rep_ID(_sym_rep_ID),
64 return visitor.
visit(*
this, home_basis_ptr);
139 std::stringstream tformula, ttex;
147 if(!var_ind.
size()) {
153 double var_scale(
m_coeffs[var_ind[0]]);
161 if(var_ind.size() > 1) {
166 for(
Index i = 0; i < var_ind.size(); i++) {
167 if(i > 0 &&
m_coeffs[var_ind[i]] > 0) {
178 if(i > 0 &&
m_coeffs[var_ind[i]] / var_scale > 0) {
191 if(var_ind.size() > 1) {
210 std::cerr <<
"WARNING: Attempting to reference invalid symmetry matrix (From rep_ID " <<
m_sym_rep_ID <<
") in Variable::apply_sym! Continuing...\n";
221 std::cerr <<
"CRITICAL ERROR: In Variable::register_remotes(), m_var_compon[" << i <<
"].ID() = " <<
m_var_compon[i].ID() <<
" is out of bounds.\n"
237 bool is_updated(
false);
320 Variable const *VLHS(static_cast<Variable const *>(LHS)),
321 *VRHS(static_cast<Variable const *>(RHS));
322 return (VLHS->coeffs()).
dot(VRHS->
coeffs());
327 return static_cast<const Variable *
>(LHS)->
compare(static_cast<const Variable *>(RHS));
332 std::cerr <<
"WARNING: In-place multiplication of one Variable with another is not defined!!\n"
343 Variable const *VLHS(static_cast<Variable const *>(LHS));
344 Variable const *VRHS(static_cast<Variable const *>(RHS));
347 std::vector<std::shared_ptr<BasisSet> > args;
356 LOffset = LSet.
size();
357 full_dim += RSet.
size();
361 for(
Index i = 0; i < (VLHS->
coeffs()).size(); i++) {
365 for(
Index j = 0; j < (VLHS->
coeffs()).size(); j++) {
368 expon[j + LOffset]++;
369 tcoeffs(expon) = (VLHS->
coeffs())[i] * (VRHS->
coeffs())[j];
370 expon[j + LOffset]--;
382 Variable *VLHS_copy(static_cast<Variable *>(LHS->
copy()));
383 Variable const *VRHS(static_cast<Variable const *>(RHS));
392 Variable *VLHS(static_cast<Variable *>(LHS));
393 Variable const *VRHS(static_cast<Variable const *>(RHS));
404 Variable *VLHS_copy(static_cast<Variable *>(LHS->
copy()));
405 Variable const *VRHS(static_cast<Variable const *>(RHS));
414 Variable *VLHS(static_cast<Variable *>(LHS));
415 Variable const *VRHS(static_cast<Variable const *>(RHS));
Function * _apply_sym(const SymOp &op)
virtual bool visit(Variable &host, BasisSet const *bset_ptr) const
jsonParser & to_json(jsonParser &json) const
bool almost_zero(const T &val, double tol=TOL)
If T is not integral, use std::abs(val) < tol;.
bool _accept(const FunctionVisitor &visitor, BasisSet const *home_basis_ptr=NULL)
Function * subtract(Function const *LHS, Function const *RHS) const
void small_to_zero(double tol=TOL)
const double * d_ptr() const
Function * multiply_by(Function *LHS, Function const *RHS) const
Type-safe ID object for communicating and accessing Symmetry representation info. ...
void push_back(const T &toPush)
bool _update_dof_IDs(const Array< Index > &before_IDs, const Array< Index > &after_IDs)
virtual jsonParser & to_json(jsonParser &json) const
jsonParser & to_json(const ClexDescription &desc, jsonParser &json)
void scale(double scale_factor)
void make_formula() const
const Eigen::VectorXd & coeffs() const
std::shared_ptr< BasisSet > shared_copy() const
Function * subtract_from(Function *LHS, Function const *RHS) const
Function * multiply(Function const *LHS, Function const *RHS) const
Function * add(Function const *LHS, Function const *RHS) const
Function * minus_equals(const Variable *RHS)
Eigen::MatrixXd const * get_matrix_rep(SymGroupRepID _rep_ID) const
get pointer to matrix representation corresponding to rep_ID
Eigen::MatrixXd::Index EigenIndex
For integer indexing:
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
double remote_eval() const
virtual Function * copy() const =0
EigenIndex Index
For long integer indexing:
SymGroupRepID m_sym_rep_ID
bool compare(const Variable *RHS) const
double dot(Function const *LHS, Function const *RHS) const
std::string irrational_to_tex_string(double val, int lim, int max_pow=2)
Index find(const T &test_elem) const
std::string type_name() const
Function * add_to(Function *LHS, Function const *RHS) const
double remote_deval(const DoF::RemoteHandle &dvar) const
int register_remotes(const std::string &dof_name, const Array< DoF::RemoteHandle > &remote_handles)
static Array< Array< InnerProduct * > > inner_prod_table
Variable(const Variable &old_var)
SymGroupRepID sym_rep_ID() const
static void fill_dispatch_table()
void set_variable_basis(const Array< ContinuousDoF > &tvar_compon, SymGroupRepID _sym_rep_ID)
Define the basis set to contain only variables (e.g., x,y,z)
double get_coefficient(Index i) const
double leading_coefficient() const
std::string m_tex_formula
static Array< Array< FunctionOperation * > > operation_table
Array< ContinuousDoF > m_var_compon
Basic std::vector like container (deprecated)
const Array< ContinuousDoF > & var_compon() const
bool almost_equal(const GenericCluster< CoordType > &LHS, const GenericCluster< CoordType > &RHS, double tol)
bool compare(Function const *LHS, Function const *RHS) const
bool valid_index(Index i)
Function * plus_equals(const Variable *RHS)