manybody_operator

edrixs.manybody_operator.build_opers(nfermion, coeff, lb, rb=None, tol=1e-10)[source]

Build matrix form of many-body operators in the given Fock basis,

\[<F_{l}|\sum_{ij}E_{ij}\hat{f}_{i}^{\dagger}\hat{f}_{j}|F_{r}>\]

or

\[<F_l|\sum_{ij}U_{ijkl}\hat{f}_{i}^{\dagger}\hat{f}_{j}^{\dagger} \hat{f}_{k}\hat{f}_{l}|F_r>\]
Parameters:
nfermion: int

Number of fermion operators. Options can only be 2 or 4 now.

coeff: array-like

The coefficients.

  • if nfermion=2, coeff should be at least 2-dimension, and the last 2-dimension is the matrix of coefficients of an operator. For examples,

    • coeff.shape = (3, 10, 10), means 3 operators with \(10 \times 10\) coefficients matrix.

    • coeff.shape = (2, 3, 10, 10), means \(2 \times 3=6\) operators with \(10 \times 10\) coefficients matrix.

  • if nfermion=4, coeff should be at least 4-dimension, and the last 4-dimension is the rank-4 tensor of coefficients of an operator. For examples,

    • coeff.shape = (3, 10, 10, 10, 10), means 3 operators with \(10 \times 10 \times 10 \times 10\) coefficients tensor.

    • coeff.shape = (2, 3, 10, 10, 10, 10), means \(2 \times 3=6\) operators with \(10 \times 10 \times 10 \times 10\) coefficients tensor.

lb: list of array

Left fock basis \(<F_{l}|\).

rb: list of array

Right fock basis \(|F_{r}>\). rb = lb if rb is None

tol: float (default: 1E-10)

Only consider the elements of emat that are larger than tol.

Returns:
hmat: array-like

At least 2-dimension and the last 2-dimension is matrix form of operators, For examples,

  • if nfermion=2, coeff.shape=(2, 3, 10, 10), hmat.shape=(2, 3, len(lb), len(rb))

  • if nfermion=4, coeff.shape=(2, 3, 10, 10, 10, 10), hmat.shape=(2, 3, len(lb), len(rb))

edrixs.manybody_operator.density_matrix(iorb, jorb, lb, rb)[source]

Calculate the matrix form of density operators \(\hat{f}_{i}^{\dagger}\hat{f}_{j}\) in the given Fock basis,

\[<F_{l}|\hat{f}_{i}^{\dagger}\hat{f}_{j}|F_{r}>\]
Parameters:
iorb: int

Orbital index.

jorb: int

Orbital index.

lb: list or array

Left fock basis \(<F_{l}|\).

rb: list or array

Right fock basis \(|F_{r}>\).

Returns:
hmat: 2d complex array

The calculated matrix form of the density operator.

edrixs.manybody_operator.four_fermion(umat, lb, rb=None, tol=1e-10)[source]

Build matrix form of a four-fermionic operator in the given Fock basis,

\[<F_l|\sum_{ij}U_{ijkl}\hat{f}_{i}^{\dagger}\hat{f}_{j}^{\dagger} \hat{f}_{k}\hat{f}_{l}|F_r>\]
Parameters:
umat: 4d complex array

The 4 index Coulomb interaction tensor.

lb: list of array

Left fock basis \(<F_{l}|\).

rb: list of array

Right fock basis \(|F_{r}>\). rb = lb if rb is None

tol: float (default: 1E-10)

Only consider the elements of umat that are larger than tol.

Returns:
hmat: 2d complex array

The matrix form of the four-fermionic operator.

edrixs.manybody_operator.one_fermion_annihilation(iorb, lb, rb)[source]

Build matrix form of a fermionic annihilation operator in the given Fock basis.

\[<F_{l}|\hat{f}_{i}|F_{r}>\]
Parameters:
iorb: int

Which orbital.

lb: list or array

Left fock basis \(<F_{l}|\).

rb: list of array

Right fock basis \(|F_{r}>\).

Returns:
hmat: 2d complex array

The matrix form of \(\hat{f}_{i}\).

edrixs.manybody_operator.two_fermion(emat, lb, rb=None, tol=1e-10)[source]

Build matrix form of a two-fermionic operator in the given Fock basis,

\[<F_{l}|\sum_{ij}E_{ij}\hat{f}_{i}^{\dagger}\hat{f}_{j}|F_{r}>\]
Parameters:
emat: 2d complex array

The impurity matrix.

lb: list of array

Left fock basis \(<F_{l}|\).

rb: list of array

Right fock basis \(|F_{r}>\). rb = lb if rb is None

tol: float (default: 1E-10)

Only consider the elements of emat that are larger than tol.

Returns:
hmat: 2d complex array

The matrix form of the two-fermionic operator.