risb.solve_lattice module

Solvers for rotationally invariant slave-boson mean-field theory on a lattice.

class risb.solve_lattice.LatticeSolver(h0_k, gf_struct, embedding, update_weights, root=None, projectors=None, gf_struct_mapping=None, symmetries=None, force_real=False, error_fun='recursion', return_x_new=True)[source]

Bases: object

Rotationally invariant slave-bosons (RISB) lattice solver with a local interaction on each cluster.

Parameters:
  • h0_k (dict[numpy.ndarray]) – Single-particle dispersion between local clusters. Each key represents a single-particle symmetry.

  • gf_struct (list[ list of pairs [ (str,int), ...] ]) – Structure of the matrices. For each cluster, it must be a list of pairs, each containing the name of the matrix block as a string and the size of that block. For example for a single cluster: [ ('up', 3), ('down', 3) ].

  • embedding (list[class]) – The class that solves the embedding problem for each cluster. It must already store the interactiong Hamiltonian h_int on a cluster, have a method set_h_emb(h0_loc_mat, Lambda_c, D) to setup the impurity problem, a method solve(**embedding_param) that solves the impurity problem, and methods get_rho_f(block) and get_rho_cf(block) for the bath and hybridization density matrices. See class EmbeddingAtomDiag.

  • update_weights (callable) – The function that gives the integral weights at each k-point on the lattice. It is called as update_weights(energies, **kweight_param), where the energies are a dictionary with each key a list. See class SmearingKWeight.

  • root (callable, optional) – The function that drives the self-consistent procedure. It is called as root(fun, x0, args=, tol=, **kwargs), where x0 is the initial guess vector, and fun is the function to minimize, where fun = self._target_function. Defaults to DIIS.solve() method of DIIS.

  • projectors (list[dict[numpy.ndarray]], optional) – The projectors onto each subspace of an embedding cluster.

  • gf_struct_mapping (list[dict[str,str]], optional) – The mapping from the symmetry blocks of each cluster in embedding to the symmetry blocks of h0_k. Default assumes the keys in all clusters are the same as the keys in h0_k.

  • symmetries (list[callable], optional) – Symmetry functions acting on the mean-field matrices. The argument of the function must take a list of all clusters. E.g., [R_cluster1, R_cluster2, ...].

  • force_real (bool, optional) – True if the mean-field matrices are forced to be real

  • error_fun (str, optional) –

    At each self-consistent cycle, whether the returned error function is
    • ’root’ : f1 and f2 root functions

    • ’recursion’ : the difference between consecutive Lambda and R.

    Defaults to ‘root’.

  • return_x_new (bool, optional) – Whether to return a new guess for x and the error at each iteration or only the error. scipy.optimize.root() should only use the error.

D

Hybridization of impurity for each cluster.

Type:

list[dict[numpy.ndarray]]

Lambda

Correlation potential matrix of the quasiparticles for each cluster.

Type:

list[dict[numpy.ndarray]]

Lambda_c

Bath coupling of impurity for each cluster.

Type:

list[dict[numpy.ndarray]]

R

Renormalization matrix from c- to f-electrons at the mean-field level for each cluster.

Type:

list[dict[numpy.ndarray]]

property Z

Returns the quasiparticle weight matrix Z of each cluster as a list[dict[numpy.ndarray]].

bloch_vector_qp

Bloch band vectors of quasiparticles.

Type:

dict[numpy.ndarray]

energies_qp

Band energy of quasiparticles.

Type:

dict[numpy.ndarray]

f1

The first root function of the self-consistent loop.

Type:

list[dict[numpy.ndarray]]

f2

The second root function of the self-consistent loop.

Type:

list[dict[numpy.ndarray]]

h0_k

Non-interacting Hamiltonian in k-space.

Type:

dict[numpy.ndarray]

h0_loc_matrix

Matrices of non-interacting local hopping terms and energies in h0_k.

Type:

list[dict(numpy.ndarray)]

ke_qp

Kinetic energy of quasiparticles for each cluster.

Type:

list[dict[numpy.ndarray]]

kweights

k-space integration weights of the quasiparticles in each band.

Type:

dict[numpy.ndarray]

lopsided_ke_qp

Lopsided kinetic energy of quasiparticles for each cluster.

Type:

list[dict[numpy.ndarray]]

n_clusters

Number of correlated clusters per supercell on the lattice.

Type:

int

one_cycle(embedding_param=None, kweight_param=None)[source]

Single iteration of the RISB self-consistent cycle.

Parameters:
  • embedding_param (list[dict], optional) – The kwarg arguments to pass to the embedding.solve() for each cluster.

  • kweight_param (dict, optional) – The kwarg arguments to pass to update_weights().

Returns:

  • Lambda (list[dict[numpy.ndarray]]) – The new guess for the correlation potential matrix on each cluster.

  • R (list[dict[numpy.ndarray]]) – The new guess for the renormalization matrix on each cluster.

  • f1 (list[dict[numpy.ndarray]]) – The return of the fixed-point function that matches the quasiparticle density matrices on each cluster.

  • f2 (list[dict[numpy.ndarray]]) – The return of the fixed-point function that matches the hybridzation density matrices on each cluster.

rho_c

Density matrix of cluster for each cluster.

Type:

list[dict[numpy.ndarray]]

rho_cf

Hybridization density matrix between the c- and f-electrons in the impurity for each cluster.

Type:

list[dict[numpy.ndarray]]

rho_f

Density matrix of f-electrons in the impurity of each cluster.

Type:

list[dict[numpy.ndarray]]

rho_qp

Density matrix of quasiparticles for each cluster.

Type:

list[dict[numpy.ndarray]]

root(*args, **kwargs)[source]

Root function that drives the self-consistent procedure. It is called the same as scipy.optimize.root().

Return type:

numpy.ndarray

solve(one_shot=False, embedding_param=None, kweight_param=None, **kwargs)[source]

Solve for the renormalization matrix R and correlation potential matrix Lambda.

Parameters:
  • one_shot (bool, optional) – True if the calcualtion is just one shot and not self consistent. Default is False.

  • embedding_param (list[dict], optional) – kwarg options to pass to embedding.solve() for each cluster.

  • kweight_param (dict, optional) – kwarg options to pass to update_weights().

  • **kwargs – kwarg options to pass to root().

Returns:

update_weights(*args, **kwargs)[source]

Update function that gives k-space integration weights. It is called as update_weights(dict[numpy.ndarray], **params).

Return type:

numpy.ndarray