risb.helpers module

Helper functions to perform rotationally invariant slave-boson mean-field theory self-consistent loop.

risb.helpers.block_to_full(A)[source]

Return a full block matrix from each block.

Parameters:

A (numpy.ndarray) – A block matrix indexed as A[...,block1,block2,orb1,orb2].

Returns:

Matrix A of shape A[...,block * orb, block * orb].

Return type:

numpy.ndarray

Notes

FIXME this does not have to be a numpy array, it could be a ragged list of lists if each block has a different size. So we should not use shape and handle the ragged list differently.

risb.helpers.get_R_h0_kin_k_R(R, h0_kin_k, vec)[source]

Return the matrix representation of the kinetic energy term in the quasiparticle Hamiltonian of RISB.

Parameters:
  • R (numpy.ndarray) – Renormalization matrix from quasiparticles to electrons.

  • h0_kin_k (numpy.ndarray) – Single-particle dispersion between local clusters. Indexed as k, orb_i, orb_j.

  • vec (numpy.ndarray) – Eigenvectors of quasiparticle Hamiltonian. Indexed as k, each column an eigenvector.

Returns:

R_h0_kin_k_R – Matrix representation of kinetic part of quasiparticle Hamiltonian H^qp.

Return type:

numpy.ndarray

risb.helpers.get_d(rho_qp, ke)[source]

Return hybridization matrix of impurity problem.

Assumes the quasiparticle kinetic energy is lopsided as has not been multiplied by R on the left-hand side.

Parameters:
  • rho_qp (numpy.ndarray) – Quasiparticle density matrix obtained from the mean-field.

  • ke (numpy.ndarray) – Lopsided quasiparticle kinetic energy.

Returns:

D – Hybridization coupling.

Return type:

numpy.ndarray

Notes

Eq. 35 in 10.1103/PhysRevX.5.011008.

risb.helpers.get_d2(rho_qp, ke, R)[source]

Return hybridization matrix of impurity problem.

This will invert R, so will not work in a Mott insulator when R is singular.

Parameters:
  • rho_qp (numpy.ndarray) – Quasiparticle density matrix obtained from the mean-field.

  • ke (numpy.ndarray) – Quasiparticle kinetic energy.

  • R (numpy.ndarray) – Renormalization matrix from electrons to quasiparticles.

Returns:

D – Hybridization coupling.

Return type:

numpy.ndarray

Notes

Eq. 35 in 10.1103/PhysRevX.5.011008.

The singular nature of R might be fixed by using the pseudo-inverse (untested).

risb.helpers.get_f1(rho_cf, rho_qp, R)[source]

Return the first self-consistent equation of RISB.

Parameters:
  • rho_cf (numpy.ndarray) – c,f-electron hybridization density matrix from impurity.

  • rho_qp (numpy.ndarray) – Quasiparticle density matrix obtained from the mean-field.

  • R (numpy.ndarray) – Renormalization matrix from electrons to quasiparticles.

Returns:

f1 – First self-consistency equation.

Return type:

numpy.ndarray

Notes

Eq. 38 in 10.1103/PhysRevX.5.011008.

risb.helpers.get_f2(rho_f, rho_qp)[source]

Return the second self-consistent equation of RISB.

Parameters:
  • rho_f (numpy.ndarray) – f-electron density matrix from impurity.

  • rho_qp (numpy.ndarray) – Quasiparticle density matrix obtained from the mean-field.

Returns:

f2 – Second self-consistency equation.

Return type:

numpy.ndarray

Notes

Eq. 39 in 10.1103/PhysRevX.5.011008.

risb.helpers.get_h0_kin_k(h0_k, projectors=None, gf_struct_mapping=None)[source]

Return a matrix representation of only the kinetic terms between clusters/local subspaces of a non-interacting dispersion.

Parameters:
  • h0_k (dict[numpy.ndarray]) – Single-particle dispersion in each block.

  • projectors (list[dict[numpy.ndarray]] | None, optional) – The projectors onto each subspace of a local cluster within the supercell organized into single-particle symmetry blocks.

  • gf_struct_mapping (list[dict[str, str]] | None, optional) – The mapping from the symmetry blocks in the subspace to the symmetry blocks of h0_k. Default assumes the keys in projectors are the same as the keys in h0_k.

Returns:

The single-particle hopping with only the kinetic contribution, without the single-particle terms from the clusters defined by the projectors.

Return type:

dict[numpy.ndarray]

risb.helpers.get_h0_kin_k_R(R, h0_kin_k, vec)[source]

Return the matrix representation of the lopsided kinetic energy term in the quasiparticle Hamiltonian of RISB.

Parameters:
  • R (numpy.ndarray) – Rormalization matrix from electrons to quasiparticles.

  • h0_kin_k (numpy.ndarray) – Single-particle dispersion between local clusters. Indexed as k, orb_i, orb_j.

  • vec (numpy.ndarray) – Eigenvectors of quasiparticle Hamiltonian. Indexed as k, each column an eigenvector.

Returns:

h0_kin_k_R – Matrix representation of lopsided quasiparticle Hamiltonian.

Return type:

numpy.ndarray

Notes

This is equivalent to the kinetic part of H^qp with the inverse of the renormalization matrix R multiplied on the left.

risb.helpers.get_h0_kin_k_mat(h0_k, P)[source]

Return a matrix representation of the kinetic terms between clusters/local subspaces of a non-interacting dispersion.

This function only subtracts off the local terms in a single subspace given by P.

Parameters:
  • h0_k (numpy.ndarray) – Single-particle dispersion.

  • P (numpy.ndarray) – The projector onto a local cluster within the supercell.

Returns:

The single-particle hopping without the contribution from the cluster defined by the projector.

Return type:

numpy.ndarray

risb.helpers.get_h0_loc_matrix(h0_k, P=None)[source]

Return a matrix representation of the local terms in a non-interacting dispersion.

If a projector P onto a local subspace is given the local terms are only in that subspace.

Parameters:
  • h0_k (numpy.ndarray) – Single-particle dispersion.

  • P (numpy.ndarray | None, optional) – The projector onto a local cluster within the supercell.

Returns:

The matrix of single-particle hopping/energies on a cluster defined by the projector.

Return type:

numpy.ndarray

risb.helpers.get_h_qp(R, Lambda, h0_kin_k, mu=0)[source]

Construct the quasiparticle Hamiltonian \(\hat{H}^{\mathrm{qp}}\).

Parameters:
  • R (numpy.ndarray) – Renormalization matrix) from electrons to quasiparticles

  • Lambda (numpy.ndarray) – Correlation potential of quasiparticles.

  • h0_kin_k (numpy.ndarray) – Single-particle dispersion between local clusters. Indexed as k, orb_i, orb_j

  • mu (float, optional) – Chemical potential

Returns:

h_qp – Indexed as k, orb_i, orb_j

Return type:

numpy.ndarray

Notes

Eq. A34 in 10.1103/PhysRevX.5.011008.

risb.helpers.get_ke(h0_kin_k_R, vec, kweights, P=None)[source]

Return average lopsided kinetic energy matrix of the quasiparticle Hamiltonian in RISB.

Parameters:
  • h0_kin_k_R (numpy.ndarray) – Single-particle dispersion between local clusters with R matrix multiplied on the right.

  • vec (numpy.ndarray) – Eigenvectors of quasiparticle Hamiltonian.

  • kweights (numpy.ndarray) – Integration weights at each k-point for each band (eigenvector).

  • P (numpy.ndarray, optional) – Projection matrix onto correlated subspace.

Returns:

ke – Lopsided quasiparticle kinetic energy from the mean-field.

Return type:

numpy.ndarray

Notes

Eq. 35 in 10.1103/PhysRevX.5.011008.

risb.helpers.get_ke2(R_h0_kin_k_R, vec, kweights, P=None)[source]

Return average kinetic energy matrix of the quasiparticle Hamiltonian in RISB.

Parameters:
  • R_h0_kin_k_R (numpy.ndarray) – Kinetic part of quasiparticle Hamiltonain.

  • vec (numpy.ndarray) – Eigenvectors of quasiparticle Hamiltonian.

  • kweights (numpy.ndarray) – Integration weights at each k-point for each band (eigenvector).

  • P (numpy.ndarray, optional) – Projection matrix onto correlated subspace.

Returns:

ke – Quasiparticle kinetic energy from the mean-field.

Return type:

numpy.ndarray

Notes

Eq. 35 in 10.1103/PhysRevX.5.011008.

risb.helpers.get_lambda(R, D, Lambda_c, rho_f)[source]

Return correlation potential matrix from impurity problem parameters and density matrices.

Parameters:
Returns:

Lambda – Correlation potential of quasiparticles.

Return type:

numpy.ndarray

Notes

Derived from Eq. 36 in 10.1103/PhysRevX.5.011008 by replacing the quasipartice density matrix with the f-electron density matrix using Eq. 39.

risb.helpers.get_lambda_c(rho_qp, R, Lambda, D)[source]

Return bath matrix of impurity problem.

Parameters:
  • rho_qp (numpy.ndarray) – Quasiparticle density matrix obtained from the mean-field.

  • R (numpy.ndarray) – Renormalization matrix from electrons to quasiparticles.

  • Lambda (numpy.ndarray) – Correlation potential of quasiparticles.

  • D (numpy.ndarray) – Hybridization coupling.

Returns:

Lambda_c – Bath coupling.

Return type:

numpy.ndarray

Notes

Eq. 36 in 10.1103/PhysRevX.5.011008.

risb.helpers.get_r(rho_cf, rho_f)[source]

Return renormalization matrix from impurity problem density matrices.

Parameters:
  • rho_cf (numpy.ndarray) – c,f-electron hybridization density matrix from impurity.

  • rho_f (numpy.ndarray) – f-electron density matrix from impurity.

Returns:

R – Renormalization matrix from electrons to quasiparticles.

Return type:

numpy.ndarray

Notes

Derived from Eq. 38 in 10.1103/PhysRevX.5.011008 by replacing the quasiparticle density matrix with the f-electron density matrix using Eq. 39.

risb.helpers.get_rho_qp(vec, kweights, P=None)[source]

Return the single-particle density matrix of the quasiparticle Hamiltonian \(\hat{H}^{\mathrm{qp}}\).

Parameters:
  • vec (numpy.ndarray) – Eigenvectors of quasiparticle Hamiltonian.

  • kweights (numpy.ndarray) – Integration weights at each k-point for each band (eigenvector).

  • P (numpy.ndarray, optional) – Projection matrix onto correlated subspace.

Returns:

rho_qp – Quasiparticle density matrix from mean-field.

Return type:

numpy.ndarray

Notes

Eqs. 32 and 34 in 10.1103/PhysRevX.5.011008, but not in the natural-basis gauge. See Eq. 112 in the supplemental of 10.1103/PhysRevLett.118.126401.