triqs.atom_diag.atom_diag.AtomDiagReal

class triqs.atom_diag.atom_diag.AtomDiagReal

Bases: object

Lightweight 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

energies

Get all eigenvalues \(E_{B,i}\) grouped by invariant subspace.

fock_states

Get the Fock states of every invariant subspace.

fops

Get the data of the fundamental operator set used at construction.

full_hilbert_space_dim

Get the dimension of the full Hilbert space.

gs_energy

Get the ground-state energy, i.e. the minimum eigenvalue across all invariant subspaces.

h_atomic

Get the Hamiltonian used at construction as a generic many-body operator.

n_subspaces

Get the number of invariant subspaces produced by the chosen partitioning scheme.

quantum_numbers

Get the values of all quantum-number operators, grouped by invariant subspace.

unitary_matrices

Get the unitary matrices \(U_B\) for every invariant subspace.

vacuum_state

Get the vacuum state as a vector in the full Hilbert space.

vacuum_subspace_index

Get the index of the invariant subspace containing the vacuum state.

Methods

c_connection

Get the target subspace \(B'\) of the annihilation operator \(\hat c_i\) acting on subspace

c_matrix

Get the matrix block of the annihilation operator \(\hat c_i\) acting on subspace \(B\).

cdag_connection

Get the target subspace \(B'\) of the creation operator \(\hat c^\dagger_i\) acting on subspace

cdag_matrix

Get the matrix block of the creation operator \(\hat c^\dagger_i\) acting on subspace \(B\).

flatten_subspace_index

Map a subspace-local pair \((B, i)\) to its linear index in the full Hilbert space.

get_eigenvalue

Get the eigenvalue \(E_{B,i}\) of the Hamiltonian.

get_subspace_dim

Get the dimension \(\dim(B)\) of invariant subspace \(B\).

get_subspace_dims

Get the dimensions \(\dim(B)\) of all invariant subspaces.

get_unitary_matrix

Get the unitary matrix \(U_B\) mapping the Fock basis of subspace \(B\) to its eigenbasis.