#include <triqs/hilbert_space.hpp>

template<typename StateType, typename OperatorType> class space_partition

Implementation of the automatic partitioning algorithm

Partitions a Hilbert space into a set of subspaces invariant under action of a given Hermitian operator (Hamiltonian). Optionally modifies the partition so that a given operator generates only one-to-one connections between the subspaces. For a detailed description of the algorithm see Computer Physics Communications 200, March 2016, 274-284 (section 4.2).

Template parameters

  • StateType: Many-body state type, must model [[statevector_concept]]
  • OperatorType: Imperative operator type, must provide StateType operator()(StateType const&)

Member types

index_t uint32_t Index of a basis Fock state/subspace
state_t StateType Accessor to StateType template parameter
operator_t OperatorType Accessor to OperatorType template parameter
amplitude_t typename state_t::value_type Amplitude type of the state
block_mapping_t std::set<std::pair<index_t, index_t>> Connections between subspaces represented as a set of (from-index,to-index) pair
matrix_element_map_t std::map<std::pair<index_t, index_t>, typename state_t::value_type> Non-zero matrix elements of an operator represented as a mapping (from-state,to-state) -> value

Non Member functions