11#include <Eigen/SparseCore>
20template <
typename Scalar>
21class DiagonalizerInterface;
23template <
typename Derived>
33 System(std::shared_ptr<const basis_t> basis);
40 std::shared_ptr<const basis_t>
get_basis()
const;
44 const Eigen::SparseMatrix<scalar_t, Eigen::RowMajor> &
get_matrix()
const;
49 std::vector<IndicesOfBlock>
59 std::optional<real_t> min_eigenenergy = {},
60 std::optional<real_t> max_eigenenergy = {},
double rtol = 1e-6);
72 const Derived &derived()
const;
const Eigen::SparseMatrix< scalar_t, Eigen::RowMajor > & get_matrix() const
std::vector< IndicesOfBlock > get_indices_of_blocks(const std::vector< TransformationType > &labels) const override
bool hamiltonian_is_diagonal
std::vector< TransformationType > blockdiagonalizing_labels
System< Derived > & diagonalize(const DiagonalizerInterface< scalar_t > &diagonalizer, std::optional< real_t > min_eigenenergy={}, std::optional< real_t > max_eigenenergy={}, double rtol=1e-6)
Transformation< scalar_t > get_rotator(real_t alpha, real_t beta, real_t gamma) const override
const Transformation< scalar_t > & get_transformation() const override
typename traits::CrtpTraits< Derived >::operator_t operator_t
void get_indices_of_blocks_without_checks(const std::set< TransformationType > &unique_labels, IndicesOfBlocksCreator &blocks) const
std::shared_ptr< const basis_t > get_basis() const
System< Derived > & operator=(const System &other)
bool hamiltonian_requires_construction
virtual void construct_hamiltonian() const =0
Sorting get_sorter(const std::vector< TransformationType > &labels) const override
typename traits::CrtpTraits< Derived >::ketvec_t ketvec_t
typename traits::CrtpTraits< Derived >::real_t real_t
System(std::shared_ptr< const basis_t > basis)
Eigen::VectorX< real_t > get_eigenenergies() const
System< Derived > & transform(const Transformation< scalar_t > &transformation)
typename traits::CrtpTraits< Derived >::basis_t basis_t
std::shared_ptr< const basis_t > get_eigenbasis() const
std::unique_ptr< operator_t> hamiltonian
typename traits::CrtpTraits< Derived >::scalar_t scalar_t
Matrix< Type, Dynamic, 1 > VectorX
Helper struct to extract types from a derived basis type. Must be specialized for each derived basis ...