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 methodset_h_emb(h0_loc_mat, Lambda_c, D)
to setup the impurity problem, a methodsolve(**embedding_param)
that solves the impurity problem, and methodsget_rho_f(block)
andget_rho_cf(block)
for the bath and hybridization density matrices. See classEmbeddingAtomDiag
.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 classSmearingKWeight
.root (callable, optional) – The function that drives the self-consistent procedure. It is called as
root(fun, x0, args=, tol=, **kwargs)
, wherex0
is the initial guess vector, andfun
is the function to minimize, wherefun = self._target_function
. Defaults toDIIS.solve()
method ofDIIS
.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
Defaults to ‘root’.
return_x_new (bool, optional) – Whether to return a new guess for
x
and theerror
at each iteration or only theerror
.scipy.optimize.root()
should only use theerror
.
- D¶
Hybridization of impurity for each cluster.
- Type:
- Lambda¶
Correlation potential matrix of the quasiparticles for each cluster.
- Type:
- Lambda_c¶
Bath coupling of impurity for each cluster.
- Type:
- R¶
Renormalization matrix from c- to f-electrons at the mean-field level for each cluster.
- Type:
- 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:
- energies_qp¶
Band energy of quasiparticles.
- Type:
- f1¶
The first root function of the self-consistent loop.
- Type:
- f2¶
The second root function of the self-consistent loop.
- Type:
- h0_k¶
Non-interacting Hamiltonian in k-space.
- Type:
- ke_qp¶
Kinetic energy of quasiparticles for each cluster.
- Type:
- kweights¶
k-space integration weights of the quasiparticles in each band.
- Type:
- lopsided_ke_qp¶
Lopsided kinetic energy of quasiparticles for each cluster.
- Type:
- 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:
- rho_cf¶
Hybridization density matrix between the c- and f-electrons in the impurity for each cluster.
- Type:
- rho_f¶
Density matrix of f-electrons in the impurity of each cluster.
- Type:
- rho_qp¶
Density matrix of quasiparticles for each cluster.
- Type:
- root(*args, **kwargs)[source]¶
Root function that drives the self-consistent procedure. It is called the same as
scipy.optimize.root()
.- Return type:
- solve(one_shot=False, embedding_param=None, kweight_param=None, **kwargs)[source]¶
Solve for the renormalization matrix
R
and correlation potential matrixLambda
.- 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:
x – The flattened x vector of
Lambda
andR
. If usingscipy.optimize.root()
thescipy.optimize.OptimizeResult
object will be returned.