triqs.atom_diag.atom_diag.AtomDiagReal
- class triqs.atom_diag.atom_diag.AtomDiagReal
Bases:
objectLightweight exact diagonalization solver for finite fermionic Hamiltonians.
Perform exact diagonalization of a many-body Hamiltonian \(\hat H\) acting on the Fock space of a finite set of fermionic single-particle states. The Hilbert space is split into invariant subspaces of \(\hat H\), each of which is diagonalized independently.
After construction the solver exposes
the eigenvalues \(E_B\) and unitary matrix \(U_B\) of every invariant subspace \(B\),
the matrix blocks of every fundamental creation/annihilation operator \(\hat c_i, \hat c^\dagger_i\) in the eigenbasis, where \(i\) is the linear index of the operator in the fundamental operator set,
the subspace-to-subspace connections induced by every fundamental creation/annihilation operator, i.e. the index of the subspace that each operator maps a given subspace to (or \(-1\) if it annihilates it),
convenience routines that turn a generic many-body operator into a block-matrix representation in the eigenbasis.
Two specializations are provided, one for real-valued and one for complex-valued Hamiltonians.
Dispatched C++ constructor(s).
[1] (h: Operator, fops: triqs::hilbert_space::fundamental_operator_set) [2] (h: Operator, fops: triqs::hilbert_space::fundamental_operator_set, hyb: Operator) [3] (h: Operator, fops: triqs::hilbert_space::fundamental_operator_set, n_min: int, n_max: int) [4] (h: Operator, fops: triqs::hilbert_space::fundamental_operator_set, qn_vector: [Operator])
[1] Reduce a Hamiltonian to a block-diagonal form using auto-partitioning, then diagonalize the blocks.
Uses the auto-partition procedure to detect the invariant subspaces of the Hamiltonian, and the QR algorithm to diagonalize each block. The invariant subspaces are chosen such that every fundamental creation and annihilation operator from the provided fundamental operator set maps each subspace to a single subspace (or annihilates it).
[2] Reduce a Hamiltonian to a block-diagonal form using auto-partitioning refined by a hybridization term.
Behaves like the two-argument auto-partition constructor, but the partition is required to remain invariant under the additional many-body operator \(\hat V\) as well. This is useful when the Hamiltonian on its own would yield invariant subspaces that mix when an extra (e.g. hybridization) operator acts, leading to matrix blocks that are coarser than what \(\hat H\) alone would suggest.
[3] Diagonalize a Hamiltonian restricted to a particle-number window.
Builds the invariant subspaces by total particle number and keeps only those whose number of particles lies in the inclusive window \([n_{\text{min}}, n_{\text{max}}]\). The blocks are then diagonalized with the QR algorithm. Convenient when only a few sectors of fixed occupation are physically relevant.
[4] Reduce a Hamiltonian to a block-diagonal form using user-supplied quantum numbers, then diagonalize the blocks.
Partitions the Hilbert space into common eigenspaces of the provided quantum-number operators. The quantum numbers must be chosen such that every fundamental creation and annihilation operator from the provided fundamental operator set maps each common eigenspace to a single common eigenspace (or annihilates it). Each block of the Hamiltonian is then diagonalized with the QR algorithm.
- Parameters:
- hOperator
Many-body Hamiltonian \(\hat H\) to be diagonalized.
- fopstriqs::hilbert_space::fundamental_operator_set
Fundamental operator set; must at least contain every fundamental operator appearing in \(\hat H\).
- hybOperator
Additional many-body operator \(\hat V\) that the auto-partition must respect; every fundamental operator appearing in \(\hat V\) must also belong to the fundamental operator set.
- n_minint
Minimum total particle number to keep.
- n_maxint
Maximum total particle number to keep.
- qn_vector[Operator]
List of quantum-number operators.
Attributes
Get all eigenvalues \(E_{B,i}\) grouped by invariant subspace.
Get the Fock states of every invariant subspace.
Get the data of the fundamental operator set used at construction.
Get the dimension of the full Hilbert space.
Get the ground-state energy, i.e. the minimum eigenvalue across all invariant subspaces.
Get the Hamiltonian used at construction as a generic many-body operator.
Get the number of invariant subspaces produced by the chosen partitioning scheme.
Get the values of all quantum-number operators, grouped by invariant subspace.
Get the unitary matrices \(U_B\) for every invariant subspace.
Get the vacuum state as a vector in the full Hilbert space.
Get the index of the invariant subspace containing the vacuum state.
Methods
Get the target subspace \(B'\) of the annihilation operator \(\hat c_i\) acting on subspace
Get the matrix block of the annihilation operator \(\hat c_i\) acting on subspace \(B\).
Get the target subspace \(B'\) of the creation operator \(\hat c^\dagger_i\) acting on subspace
Get the matrix block of the creation operator \(\hat c^\dagger_i\) acting on subspace \(B\).
Map a subspace-local pair \((B, i)\) to its linear index in the full Hilbert space.
Get the eigenvalue \(E_{B,i}\) of the Hamiltonian.
Get the dimension \(\dim(B)\) of invariant subspace \(B\).
Get the dimensions \(\dim(B)\) of all invariant subspaces.
Get the unitary matrix \(U_B\) mapping the Fock basis of subspace \(B\) to its eigenbasis.