fcdmft.gw.mol.gw_ac module#
Spin-restricted G0W0-AC QP eigenvalues This implementation has N^4 scaling, and is faster than GW-CD (N^4) and analytic GW (N^6) methods. GW-AC is recommended for valence states only, and is inaccurate for core states.
- Method:
T. Zhu and G.K.-L. Chan, J. Chem. Theory. Comput. 17, 727-741 (2021) Compute self-energy on imaginary frequency with density fitting, then analytically continued to real frequency
- Other useful references:
J. Chem. Theory Comput. 12, 3623-3635 (2016) New J. Phys. 14, 053020 (2012)
- class fcdmft.gw.mol.gw_ac.GWAC(mf, frozen=None, auxbasis=None)[source]#
Bases:
StreamObject- Attributes:
- nmo
- nocc
Methods
__call__(*args, **kwargs)Update the attributes of the current object.
ao2mo([mo_coeff])Transform density-fitting integral from AO to MO.
apply(fn, *args, **kwargs)Apply the fn to rest arguments: return fn(*args, **kwargs). The return value of method set is the object itself. This allows a series of functions/methods to be executed in pipe.
check_sanity()Check input of class/object attributes, check whether a class method is overwritten.
copy()Returns a shallow copy
Compute GW total energy according to Galitskii-Migdal formula.
get_ef([mo_energy])Get Fermi level.
Get boolean mask for the restricted reference orbitals.
get_sigma_exchange(mo_coeff)Get exchange self-energy (EXX).
initialize_df([auxbasis])Initialize density fitting.
kernel()Do one-shot GW calculation using analytical continuation.
loop_ao2mo([mo_coeff, ijslice])Transform density-fitting integral from AO to MO by block.
make_gf(omega[, eta, mode])Get G0W0 Green's function by AC fitting.
make_rdm1([ao_repr, mode])Get GW density matrix from G(it=0).
post_kernel(envs)A hook to be run after the main body of the kernel function.
pre_kernel(envs)A hook to be run before the main body of kernel function is executed.
run(*args, **kwargs)Call the kernel function of current object.
set(*args, **kwargs)Update the attributes of the current object.
setup_evaluation_grid([fallback_freqs, ...])Set up self-energy grid, aka freqs2, aka gw.freqs.
view(cls)New view of object with the same attributes.
dump_flags
get_nmo
get_nocc
- energy_tot()[source]#
Compute GW total energy according to Galitskii-Migdal formula. See equation 6 in doi.org/10.1103/PhysRevB.86.081102, and equation 11 in doi.org/10.1021/acs.jctc.0c01264. NOTE: self-energy evaluted by numerical integration at large frequency is difficult to be accurate, so this function is numerically unstable.
- Returns:
- E_totdouble
GW total energy
- E_hfdouble
Hartree-Fock total energy
- Ecdouble
GW correlation energy
- get_ef(mo_energy=None)[source]#
Get Fermi level. For gapped systems, Fermi level is computed as the average between HOMO and LUMO. For metallic systems, Fermi level is optmized according to mo_energy.
- Parameters:
- mo_energydouble 1d
array, optional orbital energy, by default None
- mo_energydouble 1d
- Returns:
- efdouble
Fermi level
- get_frozen_mask()#
Get boolean mask for the restricted reference orbitals.
In the returned boolean (mask) array of frozen orbital indices, the element is False if it corresponds to the frozen orbital.
- get_nmo()#
- get_nocc()#
- initialize_df(auxbasis=None)[source]#
Initialize density fitting.
- Parameters:
- auxbasis
str, optional name of auxiliary basis set, by default None
- auxbasis
- loop_ao2mo(mo_coeff=None, ijslice=None)[source]#
Transform density-fitting integral from AO to MO by block.
- make_gf(omega, eta=0.0, mode='dyson')[source]#
Get G0W0 Green’s function by AC fitting.
- Parameters:
- Returns:
- make_rdm1(ao_repr=False, mode='linear')[source]#
Get GW density matrix from G(it=0). G(it=0) = int G(iw) dw As shown in doi.org/10.1021/acs.jctc.0c01264, calculate G0W0 Green’s function using Dyson equation is not particle number conserving. The linear mode G = G0 + G0 Sigma G0 is particle number conserving.
- property nmo#
- property nocc#
- fcdmft.gw.mol.gw_ac.get_rho_response(omega, mo_energy, Lia, out=None)[source]#
Compute density-density response function in auxiliary basis at freq iw. See equation 58 in 10.1088/1367-2630/14/5/053020, and equation 24 in doi.org/10.1021/acs.jctc.0c00704.
- Parameters:
- Returns:
- Pidouble 2d
array density-density response function in auxiliary basis at freq iw
- Pidouble 2d
- fcdmft.gw.mol.gw_ac.get_rho_response_metal(omega, mo_energy, mo_occ, Lpq, out=None)[source]#
Get response function in auxiliary basis for metallic systems.
- Parameters:
- Returns:
- Pidouble 2d
array density-density response function in auxiliary basis at freq iw
- Pidouble 2d
- fcdmft.gw.mol.gw_ac.get_sigma(gw, orbs, Lpq, quad_freqs, quad_wts, ef, mo_energy, mo_occ=None, iw_cutoff=None, eval_freqs=None, mo_energy_w=None, fullsigma=False)[source]#
Compute GW correlation self-energy on imaginary axis. See equation 62 and 62 in 10.1088/1367-2630/14/5/053020, and equation 27 in doi.org/10.1021/acs.jctc.0c00704.
- Parameters:
- gwGWAC
GW object
- orbs
list list of orbital indexes
- Lpqdouble 3d
array three-center density-fitting matrix in MO space
- quad_freqsdouble 1d
array position of imaginary frequency grids used for integration
- quad_wtsdouble 1d
array weight of imaginary frequency grids
- efdouble
Fermi level
- mo_energydouble 1d
array orbital energy in G
- mo_occdouble 1d
array, optional occupation number, by default None
- iw_cutoffdouble, optional
imaginary grid cutoff for fitting, by default None
- eval_freqsdouble 1d
array, optional imaginary frequency points at which to evaluate self energy. Self energy is evaluated at ef + 1j * eval_freqs.
- mo_energy_wdouble 1d
array, optional orbital energy in W, by default None
- fullsigmabool, optional
calculate off-diagonal elements, by default False
- Returns:
- fcdmft.gw.mol.gw_ac.get_sigma_outcore(gw, orbs, quad_freqs, quad_wts, ef, mo_energy, mo_coeff, mo_occ=None, iw_cutoff=None, eval_freqs=None, mo_energy_w=None, fullsigma=False)[source]#
Low-memory routine to compute GW correlation self-energy on imaginary axis. See equation 62 and 62 in 10.1088/1367-2630/14/5/053020, and equation 27 in doi.org/10.1021/acs.jctc.0c00704.
- Parameters:
- gwGWAC
GW object
- orbs
list list of orbital indexes
- quad_freqsdouble 1d
array position of imaginary frequency grids used for integration
- quad_wtsdouble 1d
array weight of imaginary frequency grids
- efdouble
Fermi level
- mo_energydouble 1d
array orbital energy in G
- mo_coeffdouble 2d
array coefficient from AO to MO
- mo_occdouble 2d
array, optional occupation number, by default None
- iw_cutoffdouble, optional
imaginary grid cutoff for fitting, by default None
- eval_freqsdouble 1d
array, optional imaginary frequency points at which to evaluate self energy. Self energy is evaluated at ef + 1j * eval_freqs.
- mo_energy_wdouble
array, optional orbital energy in W, by default None
- fullsigmabool, optional
calculate off-diagonal elements, by default False
- Returns: