dgamore.lambda_correction#

Moriya \(\lambda\)-correction of the physical susceptibility. The non-local susceptibility is shifted by a single constant \(\lambda\) (per channel) so that its momentum sum matches the corresponding local sum-rule. Single-band only, since a multi-orbital correction would be non-unique.

Functions

apply_lambda(chi_r, lambda_)

Applies the \(\lambda\)-correction \(\chi_r \to (1/\chi_r + \lambda)^{-1}\) to the susceptibility.

find_lambda(chi_r_mat, chi_r_loc_sum[, ...])

Finds \(\lambda\) such that the momentum-summed corrected susceptibility matches the local sum chi_r_loc_sum via a Newton-like iteration.

get_lambda_start(chi_r)

Returns the lower bound for \(\lambda\), i.e. the value at which the corrected susceptibility at \(\omega = 0\) would first diverge (\(-\min_q 1/\chi_r^{q,\omega=0}\)).

perform_single_lambda_correction(chi_r, ...)

Performs the \(\lambda\)-correction on the physical susceptibility for a single spin channel.

dgamore.lambda_correction.apply_lambda(chi_r: ndarray, lambda_: float) ndarray[source]#

Applies the \(\lambda\)-correction \(\chi_r \to (1/\chi_r + \lambda)^{-1}\) to the susceptibility.

Parameters:
  • chi_r (ndarray) – Physical susceptibility array.

  • lambda – The correction shift \(\lambda\).

  • lambda_ (float)

Returns:

The corrected susceptibility, same shape as chi_r.

Return type:

ndarray

dgamore.lambda_correction.find_lambda(chi_r_mat: ndarray, chi_r_loc_sum: complex, delta: float = 0.1, eps: float = 1e-07, maxiter: int = 1000) float[source]#

Finds \(\lambda\) such that the momentum-summed corrected susceptibility matches the local sum chi_r_loc_sum via a Newton-like iteration. The momentum sum is evaluated over the irreducible BZ using the per-point multiplicities. When a Newton step would lower \(\lambda\) below the current value the step size delta is halved and the search is reset just above the divergence bound.

Parameters:
  • chi_r_mat (ndarray) – Physical susceptibility in the irreducible BZ, shape [q, w].

  • chi_r_loc_sum (complex) – Target value: the local susceptibility sum (already divided by \(\beta\)).

  • delta (float) – Initial offset above the divergence bound and step size for the bisection-style reset.

  • eps (float) – Convergence tolerance on the real part of the sum-rule residual.

  • maxiter (int) – Maximum number of iterations before giving up (logs a warning and returns the last value).

Returns:

The converged \(\lambda\) (or the last value reached if not converged).

Return type:

float

dgamore.lambda_correction.get_lambda_start(chi_r: ndarray) float[source]#

Returns the lower bound for \(\lambda\), i.e. the value at which the corrected susceptibility at \(\omega = 0\) would first diverge (\(-\min_q 1/\chi_r^{q,\omega=0}\)). The search starts just above it.

Parameters:

chi_r (ndarray) – Physical susceptibility in the irreducible BZ with a trailing bosonic frequency axis, shape [q, w].

Returns:

The starting (lower-bound) value of \(\lambda\).

Return type:

float

dgamore.lambda_correction.perform_single_lambda_correction(chi_r: FourPoint, chi_r_loc_sum: complex) tuple[FourPoint, float][source]#

Performs the \(\lambda\)-correction on the physical susceptibility for a single spin channel. Only works for single-band systems, since a multi-orbital correction would be a non-unique multidimensional problem.

Parameters:
  • chi_r (FourPoint) – Physical (single-band) susceptibility in the irreducible BZ.

  • chi_r_loc_sum (complex) – Target local susceptibility sum (already divided by \(\beta\)).

Returns:

A tuple of (i) the corrected susceptibility in the irreducible BZ and half bosonic frequency range, and (ii) the determined \(\lambda\).

Return type:

tuple[FourPoint, float]