triqs.gfs.tools.discretize_bath
- triqs.gfs.tools.discretize_bath(delta_in, Nb, eps0=3, V0=None, tol=1e-15, maxiter=10000, cmplx=False, method='BFGS')[source]
Fit a hybridization function with
Nbdiscrete bath sites.The discretized hybridization
\[\begin{split}\Delta_{kl}^{\mathrm{disc}}(i\omega_n) = \sum_{j=1}^{N_b} V_{kj}\, S_j\, V_{jl}^*, \qquad S_j = \begin{cases} (i\omega_n - \varepsilon_j)^{-1}, & \text{Matsubara} \\ -e^{-\tau\varepsilon_j}/(1+e^{-\beta\varepsilon_j}), & \text{imaginary time} \end{cases}\end{split}\]is fitted to
delta_inby minimizing the norm\[\biggl[\frac{1}{N} \sum_{n=1}^{N} \bigl|\Delta^{\mathrm{disc}}(i\omega_n) - \Delta(i\omega_n)\bigr|^2 \biggr]^{1/2}\](or the analogous imaginary-time expression) using
scipy.optimize.minimize()/scipy.optimize.basinhopping().- Parameters:
- delta_inGf or BlockGf
Matsubara or imaginary-time hybridization function to discretize.
- Nbint
Number of bath sites per Gf block.
- eps0float or list of float, optional
Approximate bandwidth (used to seed bath energies on a linspace) or explicit initial guess for the bath energies. Default
3.0.- V0float, complex or numpy.ndarray, optional
Initial guess for
V:scalar — broadcast to every element of
V.2D array — used as is.
None(default) — derive from the Cholesky factor of the leading moment ofdelta_in(\(\lim_{\omega\to\infty} i\omega\,\Delta(i\omega)\), or \(-\Delta(0^+) - \Delta(\beta^-)\) for imaginary time).
- tolfloat, optional
Optimizer tolerance (
ftol/xatol). Default1e-15.- maxiterint, optional
Maximum number of optimization steps. Default
10000.- cmplxbool, optional
If
True, optimize complex hoppings. DefaultFalse.- method{‘BFGS’, ‘Nelder-Mead’, ‘basinhopping’}, optional
Optimization method. Default
'BFGS'(usesL-BFGS-Binternally).
- Returns:
- V_optnumpy.ndarray or list thereof
Optimized bath hoppings.
- eps_optlist of float or list of list of float
Optimized bath energies, sorted in ascending order.
- delta_discGf or BlockGf
Discretized hybridization function on the mesh of
delta_in.