Class fermionBasis#

Inheritance Relationships#

Derived Types#

Class Documentation#

class fermionBasis#

This is the main basis class for the electrons or fermions. Every other fermion model class is derived from this class. We normally dont inherit from this class. Just use as a local object. See for example spinhalf.

Subclassed by freeModel, kondoTwoImpuritySC, rabiAndersonSC

Public Types

enum modelSymmetry#

Symmetries used used in the proble chargeOnly: Only charge of the system is conserved. spinOnly : Only \(S_z\) component of the total spin is coserved. This is use for the superconducting Bath. chargeAndSpin: Both charge and spin is conserved.

Values:

enumerator chargeOnly#
enumerator spinOnly#
enumerator chargeAndSpin#

Public Functions

inline fermionBasis(size_t dof, modelSymmetry l)#
Parameters:
  • dof – : Fermion degree of freedom

  • l – : Symmetries of the system

inline auto get_raw_f_dag_operator() const#

Get the full Matrix of the f operators.

Returns:

inline auto get_f_dag_operator() const#

Get f operators of the site in terms of the qmatrix notations.

Returns:

inline void create_QuantumNChargeonly()#

Calculate and store total charge quantum numbers for each basis state.

This method assumes particle-number conservation and sums the occupations across all fermionic orbitals.

inline void create_QuantumNspinCharge()#

Calculate and store charge and spin quantum numbers for each basis state.

For each many-body state, this method computes (charge, spin_z) pairs using even/odd orbital contributions.

inline void create_QuantumSpinOnly(std::vector<std::vector<size_t>> &qsymmetry)#

Compute “+-S_z” quantum numbers for a spin-conserved basis.

qsymmetry describes partitioning of orbitals into spin-up and spin-down sets. If empty, the method creates a default even/odd split and then calculates S_z values as the difference of up and down occupancies.

Parameters:

qsymmetry – Vector of orbital index groups: [up_set, down_set]

inline void createQNumbers(const std::vector<std::vector<size_t>> &qsymmetry)#

Build integer quantum-number vectors from orbital occupations.

For each basis state, calcuates a quantum number per symmetry block in qsymmetry by summing occupancy values. This is a generic routine used by different symmetry modes.

Parameters:

qsymmetry – List of index groups defining each conserved quantity.

inline void create_Block_structure()#

Build block structure from computed quantum numbers.

Groups basis states that share identical quantum numbers into blocks. Produces nQBlocks, unique_Qnumbers, and prepares for block-operator assembly.

inline auto get_unique_Qnumbers()#

Return the cached unique quantum-number vectors.

If no blocks have been built, logs a warning and returns an empty vector.

Returns:

Vector of unique quantum numbers for each block.

inline std::vector<qOperator> get_block_operators(const std::vector<qmatrix<>> &sys_operators)#

Convert full-space operators to block (quantum-number) representation.

Given a list of system operators in full basis, this method extracts block-submatrices corresponding to each quantum-number sector from nQBlocks.

Parameters:

sys_operators – Full-space operators (one per species).

Returns:

Block-diagonal operator set in pseudo-sparse format (qOperator).

inline qOperator get_block_Hamiltonian(const qmatrix<double> &sys_operators)#

Extract block diagonal Hamiltonian from full Hamiltonian matrix.

Verifies Hermiticity, then assembles block operators for each identity quantum number sector. Throws if the Hamiltonian is not properly block diagonal.

Parameters:

sys_operators – Full-space Hamiltonian matrix.

Returns:

Block operator containing block Hamiltonians in qOperator form.

inline auto get_basis() const#

Get the fermion occupancy basis representation.

Returns:

Vector of occupation-number vectors, one per basis state.

inline void setDebugMode(bool debug = true)#

Enable or disable debug output for internal block construction.

Parameters:

debug – If true, prints extra diagnostic traces during basis operations.

inline void createFermionBasis(size_t ldof)#

Build the full creation-operator basis and number quantum numbers.

Generates fermion raising operators (f^) for each orbital and then computes occupation numbers used by quantum-number partitioning.

Parameters:

ldof – Number of fermionic orbitals (degrees of freedom).

inline void set_f_dag_operators()#

Construct block-wise f-dag operators from full operators.

Uses the computed fermion operators in fermionOprMat and the block map from create_Block_structure to build f_dag_operator.

Public Members

std::vector<qOperator> f_dag_operator#

\( f^\dagger \) of the system written using symmetries of the problem.

std::vector<std::vector<double>> fnParticle#

Quantization numbers used to write various system operators.

std::vector<qmatrix<>> fermionOprMat#