20 class FunctionVisitor;
26 class BasisSet:
private Array<Function *>,
public std::enable_shared_from_this<BasisSet> {
45 const std::string &
name()
const {
69 return std::make_shared<BasisSet>(*this);
127 template<
typename IteratorType>
128 void remote_eval_to(IteratorType result_begin, IteratorType result_end)
const;
131 template<
typename IteratorType>
179 Index min_dof_order = 1);
252 static Index ID_COUNT(0);
267 m_argument = new_args;
284 jsonParser &
to_json(
const BasisSet &
bset, jsonParser &json);
287 BasisSet
operator*(
const SymOp &LHS,
const BasisSet &RHS);
292 template<
typename IteratorType>
298 for(; result_begin != result_end; ++result_begin) {
308 template<
typename IteratorType>
314 for(; result_begin != result_end; ++result_begin) {
const T & operator[](Index ind) const
bool make_orthogonal_to(Function const *ortho_func)
void _set_arguments(const Array< BasisSet const * > &new_args)
std::pair< SubBasis, Index > PolyConstraint
void get_symmetry_representation(const SymGroup &head_sym_group) const
const double & deval_cache(Index i) const
void from_json(ClexDescription &desc, const jsonParser &json)
void _deval_to_cache(const DoF::RemoteHandle &_dvar) const
Remotely evaluate each basis function and add it to the respective value in cumulant.
Type-safe ID object for communicating and accessing Symmetry representation info. ...
void construct_polynomials_by_order(const Array< BasisSet const * > &tsubs, Index order)
void calc_invariant_functions(const SymGroup &head_sym_group)
void push_back(const T &toPush)
const Array< PolyConstraint > & max_poly_constraints() const
jsonParser & to_json(const ClexDescription &desc, jsonParser &json)
BasisSet transform_copy(const Eigen::MatrixXd &trans_mat) const
void construct_invariant_polynomials(const Array< BasisSet const * > &tsubs, const SymGroup &head_sym_group, Index order, Index min_dof_order=1)
void add_min_poly_constraint(const Array< Index > &expons, Index expon_sum)
void push_back(Function *new_func)
std::shared_ptr< BasisSet > shared_copy() const
const std::string & name() const
Array< PolyConstraint > & _min_poly_constraints()
bool compare(const BasisSet &RHS) const
Function const * operator[](Index i) const
void remote_eval_and_add_to(Array< double > &cumulant) const
Remotely evaluate each basis function and add it to the respective value in cumulant.
BasisSet poly_quotient_set(const Function *divisor) const
BasisSet calc_normal_basis(const SymGroup &head_sym_group, Eigen::MatrixXd &trans_mat) const
std::vector< double > m_deval_cache
SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operatio...
Array< SubBasis > m_dof_subbases
void append(const BasisSet &RHS)
jsonParser & to_json(jsonParser &json) const
void set_name(const std::string &new_name)
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
BasisSet operator*(const SymOp &LHS, const BasisSet &RHS)
int dependency_layer() const
std::vector< std::shared_ptr< BasisSet > > m_argument
EigenIndex Index
For long integer indexing:
void construct_orthonormal_discrete_functions(const DiscreteDoF &allowed_occs, const Eigen::MatrixXd &gram_mat, Index basis_ind, const SymGroup &symgroup)
bool accept(const FunctionVisitor &visitor)
void set_basis_symrep_ID(SymGroupRepID new_ID)
SymGroupRepID m_basis_symrep_ID
void _set_arguments(const std::vector< std::shared_ptr< BasisSet > > &new_args)
void add_max_poly_constraint(const Array< Index > &expons, Index expon_sum)
const Array< PolyConstraint > & min_poly_constraints() const
bool is_normal_basis_for(const SymGroup &head_sym_group)
Array< PolyConstraint > m_max_poly_constraints
std::vector< double > m_eval_cache
Function *& at(Index ind)
void swap_elem(Index i, Index j)
BasisSet(const std::string &name="")
Index find(const Function *&test_elem) const
int register_remotes(const std::string &dof_name, const Array< DoF::RemoteHandle > &remote_handles)
void remote_eval_to(IteratorType result_begin, IteratorType result_end) const
Remotely evaluate each basis function and add it to the respective value in cumulant.
SymGroupRepID basis_symrep_ID() const
Array< PolyConstraint > m_min_poly_constraints
Function const * back() const
void _update_dof_IDs(const Array< Index > before_IDs, const Array< Index > &after_IDs)
BasisSet & apply_sym(const SymOp &op, int dependency_layer=1)
Function * _linear_combination(const Eigen::VectorXd &coeffs) const
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)
const SubBasis & dof_sub_basis(Index i) const
void remote_deval_to(IteratorType result_begin, IteratorType result_end, const DoF::RemoteHandle &dvar) const
Remotely evaluate derivative of each basis function (w.r.t. dvar) and add it to the respective value ...
void set_dof_IDs(const Array< Index > &new_IDs)
virtual double cache_deval(const DoF::RemoteHandle &dvar) const =0
Index max_poly_order() const
void remote_deval_and_add_to(Array< double > &cumulant, const DoF::RemoteHandle &dvar) const
Remotely evaluate derivative of each basis function (w.r.t. dvar) and add it to the respective value ...
const BasisSet & operator=(const BasisSet &RHS)
Index min_poly_order() const
Array< PolyConstraint > & _max_poly_constraints()
bool satisfies_exponent_constraints(const Array< Index > &expons) const
std::vector< std::set< Index > > independent_sub_bases() const
Basic std::vector like container (deprecated)
virtual double cache_eval() const =0
void _eval_to_cache() const
Remotely evaluate each basis function and add it to the respective value in cumulant.
const Array< SubBasis > & dof_sub_bases() const
void from_json(const jsonParser &json)
const Array< Index > & dof_IDs() const
const double & eval_cache(Index i) const