Class spinhalf#

Class Documentation#

class spinhalf#

Single orbital with spin-up and spin-down electrons (spin-1/2 impurity).

Represents a single-site impurity with both spin-up and spin-down orbitals. This is the fundamental quantum dot model used to construct NRG problems like the Single Impurity Anderson Model (SIAM) and Kondo model.

The Hamiltonian includes:

  • Onsite energy (ε_d) for the orbital

  • Coulomb interaction energy (U) between spin-up and spin-down

  • Magnetic field coupling (h) for Zeeman splitting

Quantum numbers:

  • Conserved: particle number and spin z-component (N, S_z)

  • Symmetry basis block-diagonalizes the space

Public Functions

inline spinhalf(double teps, double tUint, double tmag = 0)#
inline std::vector<std::vector<int>> get_basis() const#

Get the basis quantum numbers for all eigenstates.

Returns all valid (N, S_z) quantum number pairs where:

  • N is total particle number (0, 1, or 2)

  • S_z is z-component of spin (-1, 0, +1 in half-unit spacing)

See also

get_eigenvaluesQ() - energies for each quantum number sector

Note

Ordered by construction; corresponds to Hamiltonian block structure

Returns:

Vector of quantum number vectors: each element is [N, S_z]

inline std::vector<std::vector<double>> get_eigenvaluesQ() const#

Get the ground state energy for each quantum number sector.

Returns lowest eigenvalue of the spin-1/2 Hamiltonian in each (N, S_z) sector. Multiple energies per sector indicate degeneracy.

See also

get_basis() - quantum numbers corresponding to each sector

Note

Eigenvalues within each sector are sorted in ascending order

Returns:

Vector of eigenvalue vectors: eigenvalues_Q[i] = all eigenvalues in sector i

inline std::vector<double> get_chi_Q() const#

Get the fermion parity factor for each quantum number sector.

Fermionic operators anticommute, resulting in sign factors ±1 when ordering. Returns (-1)^N for each sector, where N is particle number.

Note

Used for correct anticommutation relations in fermionic algebra

Returns:

Vector of fermion signs: ±1 for each quantum number block

inline auto getDoubleOcc() const#

Get the double occupancy operator for computing correlations.

The double occupancy operator D = n↑·n↓ projects onto states with both spin-up and spin-down electrons present simultaneously. Useful for:

  • Computing correlation functions and susceptibilities

  • Static properties like charge susceptibility

  • Comparison with experimental charge compressibility

Note

Only has weight in sectors with N=2 (doubly-occupied state)

Returns:

Vector of qOperator objects representing D in quantum number basis

Public Members

std::vector<qOperator> f_dag_operator#

Get fermion creation operators f† in quantum-number block basis.

Returns f† operators block-diagonalized by (N, S_z) quantum numbers. Useful for computing spectral functions and Green’s functions.

Return:

Vector of qOperator: f†_spin for spin ∈ {up, down} channels

std::vector<std::vector<double>> eigenvalues_Q#

Eigenvalues of the Hamiltonian in each quantum number sector.

eigenvalues_Q[i] contains all eigenvalues for the i-th quantum number block. Used for FDM calculations and spectral density computations.

std::vector<double> chi_Q#

Fermion parity sign for each basis quantum number sector.

Returns (-1)^N where N is the particle number in that sector. This sign is essential for fermionic anticommutation relations.

std::vector<std::vector<int>> n_Q#

Quantum numbers (N, S_z) labeling each Hamiltonian block.

Used to organize eigenstates and operators by conserved quantum numbers. Allows block-diagonal structure exploited for computational efficiency.

std::vector<qOperator> doubleOccupancy#

Double occupancy n↑·n↓ operator in quantum number basis.