momentGW.evgw
Spin-restricted eigenvalue self-consistent GW via self-energy moment constraints for molecular systems.
Module Contents
- momentGW.evgw.kernel(gw, nmom_max, moments=None, integrals=None)
Moment-constrained eigenvalue self-consistent GW.
- Parameters:
gw (BaseGW) – GW object.
nmom_max (int) – Maximum moment number to calculate.
moments (tuple of numpy.ndarray, optional) – Tuple of (hole, particle) moments, if passed then they will be used as the initial guess instead of calculating them. Default value is None.
integrals (BaseIntegrals, optional) – Integrals object. If None, generate from scratch. Default value is None.
- Returns:
conv (bool) – Convergence flag.
gf (dyson.Lehmann) – Green’s function object.
se (dyson.Lehmann) – Self-energy object.
qp_energy (numpy.ndarray) – Quasiparticle energies. Always None for evGW, returned for compatibility with other evGW methods.
- class momentGW.evgw.evGW(mf, **kwargs)
Bases:
momentGW.gw.GWSpin-restricted eigenvalue self-consistent GW via self-energy moment constraints for molecules.
- Parameters:
mf (pyscf.scf.SCF) – PySCF mean-field class.
diagonal_se (bool, optional) – If True, use a diagonal approximation in the self-energy. Default value is False.
polarizability (str, optional) – Type of polarizability to use, can be one of (“drpa”, “drpa-exact”, “dtda”, “thc-dtda”). Default value is `”drpa”.
npoints (int, optional) – Number of numerical integration points. Default value is 48.
optimise_chempot (bool, optional) – If True, optimise the chemical potential by shifting the position of the poles in the self-energy relative to those in the Green’s function. Default value is False.
fock_loop (bool, optional) – If True, self-consistently renormalise the density matrix according to the updated Green’s function. Default value is False.
fock_opts (dict, optional) – Dictionary of options passed to the Fock loop. For more details see momentGW.fock.
compression (str, optional) – Blocks of the ERIs to use as a metric for compression. Can be one or more of (“oo”, “ov”, “vv”, “ia”) which can be passed as a comma-separated string. “oo”, “ov” and “vv” refer to compression on the initial ERIs, whereas “ia” refers to compression on the ERIs entering RPA, which may change under a self-consistent scheme. Default value is “ia”.
compression_tol (float, optional) – Tolerance for the compression. Default value is 1e-10.
thc_opts (dict, optional) – Dictionary of options to be used for THC calculations. Current implementation requires a filepath to import the THC integrals.
g0 (bool, optional) – If True, do not self-consistently update the eigenvalues in the Green’s function. Default value is False.
w0 (bool, optional) – If True, do not self-consistently update the eigenvalues in the screened Coulomb interaction. Default value is False.
max_cycle (int, optional) – Maximum number of iterations. Default value is 50.
conv_tol (float, optional) – Convergence threshold in the change in the HOMO and LUMO. Default value is 1e-8.
conv_tol_moms (float, optional) – Convergence threshold in the change in the moments. Default value is 1e-8.
conv_logical (callable, optional) – Function that takes an iterable of booleans as input indicating whether the individual conv_tol and conv_tol_moms have been satisfied, respectively, and returns a boolean indicating overall convergence. For example, the function all requires both metrics to be met, and any requires just one. Default value is all.
diis_space (int, optional) – Size of the DIIS extrapolation space. Default value is 8.
damping (float, optional) – Damping parameter. Default value is 0.0.
weight_tol (float, optional) – Threshold in physical weight of Green’s function poles, below which they are considered zero. Default value is 1e-11.
- property name
Get the method name.
- property qp_energy
Get the quasiparticle energies.
Notes
For most GW methods, this simply consists of the poles of the self.gf that best overlap with the MOs, in order. In some methods such as qsGW, these two quantities are not the same.
- property has_fock_loop
Get a boolean indicating whether the solver requires a Fock loop.
Notes
For most GW methods, this is simply self.fock_loop. In some methods such as qsGW, a Fock loop is required with or without self.fock_loop for the quasiparticle self-consistency, with this property acting as a hook to indicate this.
- property mol
Get the molecule object.
- property with_df
Get the density fitting object.
- property nao
Get the number of atomic orbitals.
- property nmo
Get the number of molecular orbitals.
- property nocc
Get the number of occupied molecular orbitals.
- property active
Get the mask to remove frozen orbitals.
- property mo_energy
Get the molecular orbital energies.
- property mo_energy_with_frozen
Get the molecular orbital energies with frozen orbitals.
- property mo_coeff
Get the molecular orbital coefficients.
- property mo_coeff_with_frozen
Get the molecular orbital coefficients with frozen orbitals.
- property mo_occ
Get the molecular orbital occupation numbers.
- property mo_occ_with_frozen
Get the molecular orbital occupation numbers with frozen orbitals.
- check_convergence(mo_energy, mo_energy_prev, th, th_prev, tp, tp_prev)
Check for convergence, and print a summary of changes.
- Parameters:
mo_energy (numpy.ndarray) – Molecular orbital energies.
mo_energy_prev (numpy.ndarray) – Molecular orbital energies from the previous iteration.
th (numpy.ndarray) – Moments of the occupied self-energy.
th_prev (numpy.ndarray) – Moments of the occupied self-energy from the previous iteration.
tp (numpy.ndarray) – Moments of the virtual self-energy.
tp_prev (numpy.ndarray) – Moments of the virtual self-energy from the previous iteration.
- Returns:
conv – Convergence flag.
- Return type:
- remove_unphysical_poles(gf)
Remove unphysical poles from the Green’s function to stabilise iterations, according to the threshold self.weight_tol.
- Parameters:
gf (dyson.Lehmann) – Green’s function object.
- Returns:
gf_out – Green’s function, with potentially fewer poles.
- Return type:
dyson.Lehmann
- build_se_static(integrals)
Build the static part of the self-energy, including the Fock matrix.
- Parameters:
integrals (Integrals) – Integrals object.
- Returns:
se_static – Static part of the self-energy. If self.diagonal_se, non-diagonal elements are set to zero.
- Return type:
numpy.ndarray
- build_se_moments(nmom_max, integrals, **kwargs)
Build the moments of the self-energy.
- Parameters:
- Returns:
se_moments_hole (numpy.ndarray) – Moments of the hole self-energy. If self.diagonal_se, non-diagonal elements are set to zero.
se_moments_part (numpy.ndarray) – Moments of the particle self-energy. If self.diagonal_se, non-diagonal elements are set to zero.
See also
- ao2mo(transform=True)
Get the integrals object.
- solve_dyson(se_moments_hole, se_moments_part, se_static, integrals=None)
Solve the Dyson equation due to a self-energy resulting from a list of hole and particle moments, along with a static contribution.
Also finds a chemical potential best satisfying the physical number of electrons. If self.optimise_chempot, this will shift the self-energy poles relative to the Green’s function, which is a partial self-consistency that better conserves the particle number.
If self.fock_loop, this function will also require that the outputted Green’s function is self-consistent with respect to the corresponding density and Fock matrix.
- Parameters:
se_moments_hole (numpy.ndarray) – Moments of the hole self-energy.
se_moments_part (numpy.ndarray) – Moments of the particle self-energy.
se_static (numpy.ndarray) – Static part of the self-energy.
integrals (Integrals) – Integrals object. Required if self.fock_loop is True. Default value is None.
- Returns:
gf (dyson.Lehmann) – Green’s function object.
se (dyson.Lehmann) – Self-energy object.
See also
- kernel(nmom_max, moments=None, integrals=None)
Driver for the method.
- Parameters:
nmom_max (int) – Maximum moment number to calculate.
moments (tuple of numpy.ndarray, optional) – Tuple of (hole, particle) moments, if passed then they will be used instead of calculating them. Default value is None.
integrals (Integrals, optional) – Integrals object. If None, generate from scratch. Default value is None.
- Returns:
converged (bool) – Whether the solver converged. For single-shot calculations, this is always True.
gf (dyson.Lehmann) – Green’s function object.
se (dyson.Lehmann) – Self-energy object.
qp_energy (NoneType) – Quasiparticle energies. For most GW methods, this is None.
- make_rdm1(gf=None)
Get the first-order reduced density matrix.
- Parameters:
gf (dyson.Lehmann, optional) – Green’s function object. If None, use either self.gf, or the mean-field Green’s function. Default value is None.
- Returns:
rdm1 – First-order reduced density matrix.
- Return type:
numpy.ndarray
- moment_error(se_moments_hole, se_moments_part, se)
Return the error in the moments.
- Parameters:
se_moments_hole (numpy.ndarray) – Moments of the hole self-energy.
se_moments_part (numpy.ndarray) – Moments of the particle self-energy.
se (dyson.Lehmann) – Self-energy object.
- Returns:
eh (float) – Error in the hole moments.
ep (float) – Error in the particle moments.
- energy_nuc()
Calculate the nuclear repulsion energy.
- Returns:
e_nuc – Nuclear repulsion energy.
- Return type:
- energy_hf(gf=None, integrals=None)
Calculate the one-body (Hartree–Fock) energy.
- Parameters:
gf (dyson.Lehmann, optional) – Green’s function object. If None, use either self.gf, or the mean-field Green’s function. Default value is None.
integrals (Integrals, optional) – Integrals object. If None, generate from scratch. Default value is None.
- Returns:
e_1b – One-body energy.
- Return type:
- energy_gm(gf=None, se=None, g0=True)
Calculate the two-body (Galitskii–Migdal) energy.
- Parameters:
gf (dyson.Lehmann, optional) – Green’s function object. If None, use self.gf. Default value is None.
se (dyson.Lehmann, optional) – Self-energy object. If None, use self.se. Default value is None.
g0 (bool, optional) – If True, use the mean-field Green’s function. Default value is True.
- Returns:
e_2b – Two-body energy.
- Return type:
- init_gf(mo_energy=None)
Initialise the mean-field Green’s function.
- Parameters:
mo_energy (numpy.ndarray, optional) – Molecular orbital energies. Default value is self.mo_energy.
- Returns:
gf – Mean-field Green’s function.
- Return type:
dyson.Lehmann