gw_embedding.bdft_converter

converter from bdft output to edmft input for solid_dmft

gw_embedding.bdft_converter.calc_Sigma_DC_gw(Wloc_dlr, Gloc_dlr, Vloc, verbose=False)[source]

Calculate the double counting part of the self-energy from the screened Coulomb interaction

Parameters:
Wloc_dlrBlockGf or Gf with MeshDLR

screened Coulomb interaction

Gloc_dlrBlockGf or Gf with MeshDLR

local Green’s function

Vlocnp.ndarray

local Coulomb interaction

verbosebool, optional

print additional information, defaults to False

Returns:
Sig_DC_dlrBlockGf or Gf

double counting part of the self-energy

Sig_DC_hartreenp.ndarray

static Hartree part of the self-energy

Sig_DC_exchangenp.ndarray

static exchange part of the self-energy

gw_embedding.bdft_converter.calc_W_from_Gloc(Gloc_dlr, U)[source]

Calculate Wijkl from given constant U tensor and Gf on DLRMesh triqs notation for Uijkl:

phi*_i(r) phi*_j(r’) U(r,r’) phi_l’(r’) phi_k(r) = Uijkl c^+_i c^+_j’ c_l’ c_k

where the ‘ denotes a spin index different from the other without ‘

the according diagram is (left and right have same spin):

j (phi)         k' (phi)
  \              /
   <            <
    \__________/
    /          \
   >            >
  /              \
i (phi*)          l'

we now have to move to a product basis form to combine two indices i.e. go from nb,nb,nb,nb to nb**2,nb**2 tensors:

Uji,kl = phi*_i(r) phi_j(r) U(r,r') phi*_k(r') phi_l(r')
       = Psi*_ji(r) U(r,r') Psi_kl(r')

So we have to transform the triqs notation of Uijkl -> Uki,jl, i.e. swap col/rows as (2,0,1,3) to go to the basis and the in the end swap W_ki,jl back in reverse.

Then we compute pubble polarizability as

Pi_ab,kl(tau) = -2 G_bl(tau) G_ka(beta - tau)

So that:

[ U Pi(iwn) ]_ji,kl = sum_ab U_ji,ab Pi_ab,kl(iwn)

i.e.:

j'              a ___
  \              /   \ k
   <            <     \
    \__________/       \
    /          \       /
   >            >     /
  /              \___/ l
i'               b

then the screened Coulomb interaction in product basis is:

W_ji,kl(iwn) = [1 - U Pi(iwn) ]^-1_ji,kl Uji,kl - Uji,kl

(subtract static shift here), and finally convert back to triqs notation.

Parameters:
Gloc_dlrBlockGf or Gf with MeshDLR

local Green’s function

Unp.ndarray of with shape [Gloc_dlr.target_shape]*4 or dict of np.ndarray

constant U tensor

Returns:
W_dlrBlockGf or Gf

screened Coulomb interaction

gw_embedding.bdft_converter.convert_gw_output(job_h5, gw_h5, dlr_wmax=None, dlr_eps=None, it_1e=0, it_2e=0, delta_calc_type='tail_fit', delta_bath_fit=False, ha_ev_conv=False)[source]

read bdft output and convert to triqs Gf DLR objects

Parameters:
job_h5: string

path to solid_dmft job file

gw_h5: string

path to GW checkpoint file for AIMBES code

dlr_wmax: float

wmax for dlr mesh, defaults to the wmax from the IR basis

dlr_eps: float

precision for dlr mesh, defaults to the precision from the IR basis

it_1e: int, optional

iteration to read from gw_h5 calculation for 1e downfolding, defaults to last iteration

it_2e: int, optional

iteration to read from gw_h5 calculation for 2e downfolding, defaults to last iteration

ha_ev_conv: bool, optional

convert energies from Hartree to eV, defaults to False

Returns:
gw_data: dict

dictionary holding all read objects: mu_emb, beta, lam, w_max, prec, mesh_dlr_iw_b, mesh_dlr_iw_f, n_orb, G0_dlr, Gloc_dlr, Sigma_imp_dlr, Sigma_imp_DC_dlr, Uloc_dlr, Vloc, Hloc0, Vhf_dc, Vhf

ir_kernel: sparse_ir kernel object

IR kernel with AIMBES paramaters