23 DoFSet const &other)
const {
38 Eigen::Ref<const Eigen::MatrixXd>
const &_before_basis,
39 Eigen::Ref<const Eigen::MatrixXd>
const &_after_basis)
const {
40 if (_before_basis.cols() != _after_basis.cols())
return false;
44 if (_before_basis.cols() < _before_basis.rows()) {
48 aug << _before_basis, _after_basis;
54 Eigen::ColPivHouseholderQR<Eigen::MatrixXd> qr(aug);
55 qr.setThreshold(
m_tol);
56 if (qr.rank() !=
m_dof.
size())
return false;
61 m_U = _before_basis.colPivHouseholderQr().solve(_after_basis);
62 if (!(
m_U.transpose() *
m_U).eval().isIdentity(
m_tol)) {
63 throw std::runtime_error(
64 "Cannot find orthogonal symmetry representation for DoF \"" +
Specifies traits of (possibly) anisotropic crystal properties.
Eigen::MatrixXd symop_to_matrix(Eigen::Ref< const Eigen::Matrix3d > const &_matrix, Eigen::Ref< const Eigen::Vector3d > const &_tau, bool time_reversal) const
Generate a symmetry representation for the supporting vector space.
bool _label_equiv(DoFSet const &_other) const
returns true if m_dof and _other are same type and same size
bool operator()(DoFSet const &_other) const
bool _vector_equiv(Eigen::Ref< const Eigen::MatrixXd > const &_before_basis, Eigen::Ref< const Eigen::MatrixXd > const &_after_basis) const
Index size() const
Returns the number of components in this DoFSet.
Eigen::MatrixXd const & basis() const
std::string const & type_name() const
const SymOp::matrix_type & get_matrix(const SymOp &op)
bool get_time_reversal(const SymOp &op)
const SymOp::vector_type & get_translation(const SymOp &op)