momentGW.rpa

Construct RPA moments.

Module Contents

class momentGW.rpa.dRPA(gw, nmom_max, integrals, mo_energy=None, mo_occ=None)

Bases: momentGW.dTDA

Compute the self-energy moments using dRPA and numerical integration.

Parameters:
  • gw (BaseGW) – GW object.

  • nmom_max (int) – Maximum moment number to calculate.

  • integrals (BaseIntegrals) – Integrals object.

  • mo_energy (dict, optional) – Molecular orbital energies. Keys are “g” and “w” for the Green’s function and screened Coulomb interaction, respectively. If None, use gw.mo_energy for both. Default value is None.

  • mo_occ (dict, optional) – Molecular orbital occupancies. Keys are “g” and “w” for the Green’s function and screened Coulomb interaction, respectively. If None, use gw.mo_occ for both. Default value is None.

Notes

See momentGW.tda.dTDA.__init__ for initialisation details and momentGW.tda.dTDA.kernel for calculation run details.

property nmo

Get the number of MOs.

property naux

Get the number of auxiliaries.

property nov

Get the number of ov states in the screened Coulomb interaction.

integrate()

Optimise the quadrature and perform the integration for the zeroth moment.

Returns:

integral – Integral array, including the offset part.

Return type:

numpy.ndarray

build_dd_moments(integral=None)

Build the moments of the density-density response.

Parameters:

integral (numpy.ndarray, optional) – Integral array, including the offset part. If None, calculate from scratch. Default is None.

Returns:

moments – Moments of the density-density response.

Return type:

numpy.ndarray

build_dd_moments_exact()

Build the exact moments of the density-density response.

Returns:

moments – Moments of the density-density response.

Return type:

numpy.ndarray

abstract build_dp_moments()

Build the moments of the dynamic polarizability for optical spectra calculations.

Returns:

moments – Moments of the dynamic polarizability.

Return type:

numpy.ndarray

static rescale_quad(bare_quad, a)

Rescale quadrature for grid space a.

Parameters:
  • bare_quad (tuple) – The quadrature points and weights.

  • a (float) – Grid spacing.

Returns:

  • points (numpy.ndarray) – The quadrature points.

  • weights (numpy.ndarray) – The quadrature weights.

optimise_offset_quad(d, diag_eri, name='offset')

Optimise the grid spacing of Gauss-Laguerre quadrature for the offset integral.

Parameters:
  • d (numpy.ndarray) – Orbital energy differences.

  • diag_eri (numpy.ndarray) – Diagonal of the ERIs.

  • name (str, optional) – Name of the integral. Default value is “offset”.

Returns:

  • points (numpy.ndarray) – The quadrature points.

  • weights (numpy.ndarray) – The quadrature weights.

optimise_main_quad(d, diag_eri, name='main')

Optimise the grid spacing of Clenshaw-Curtis quadrature for the main integral.

Parameters:
  • d (numpy.ndarray) – Orbital energy differences.

  • diag_eri (numpy.ndarray) – Diagonal of the ERIs.

  • name (str, optional) – Name of the integral. Default value is “main”.

Returns:

  • points (numpy.ndarray) – The quadrature points.

  • weights (numpy.ndarray) – The quadrature weights.

get_optimal_quad(bare_quad, integrand, exact, name=None)

Get the optimal quadrature.

Parameters:
  • bare_quad (tuple) – The quadrature points and weights.

  • integrand (function) – The integrand function.

  • exact (float) – The exact value of the integral.

  • name (str, optional) – Name of the integral. Default value is None.

Returns:

  • points (numpy.ndarray) – The quadrature points.

  • weights (numpy.ndarray) – The quadrature weights.

eval_diag_offset_integral(quad, d, diag_eri)

Evaluate the diagonal of the offset integral.

Parameters:
  • quad (tuple) – The quadrature points and weights.

  • d (numpy.ndarray) – Orbital energy differences.

  • diag_eri (numpy.ndarray) – Diagonal of the ERIs.

Returns:

integral – Offset integral.

Return type:

numpy.ndarray

eval_diag_main_integral(quad, d, diag_eri)

Evaluate the diagonal of the main integral.

Parameters:
  • quad (tuple) – The quadrature points and weights.

  • d (numpy.ndarray) – Orbital energy differences.

  • diag_eri (numpy.ndarray) – Diagonal of the ERIs.

Returns:

integral – Main integral.

Return type:

numpy.ndarray

eval_offset_integral(quad, d, Lia=None)

Evaluate the offset integral.

Parameters:
  • quad (tuple) – The quadrature points and weights.

  • d (numpy.ndarray) – Orbital energy differences.

  • Lia (numpy.ndarray, optional) – The (aux, W occ, W vir) integral array. If None, use self.integrals.Lia. Keyword argument allows for the use of this function with uhf and pbc modules.

Returns:

integral – Offset integral.

Return type:

numpy.ndarray

eval_main_integral(quad, d, Lia=None)

Evaluate the main integral.

Parameters:
  • quad (tuple) – The quadrature points and weights.

  • d (numpy.ndarray) – Orbital energy differences.

  • Lia (numpy.ndarray) – The (aux, W occ, W vir) integral array. If None, use self.integrals.Lia. Keyword argument allows for the use of this function with uhf and pbc modules.

Returns:

integral – Offset integral.

Return type:

numpy.ndarray

gen_clencur_quad_inf(even=False)

Generate quadrature points and weights for Clenshaw-Curtis quadrature over an (-inf, +inf).

Parameters:

even (bool, optional) – Whether to assume an even grid. Default is False.

Returns:

  • points (numpy.ndarray) – Quadrature points.

  • weights (numpy.ndarray) – Quadrature weights.

gen_gausslag_quad_semiinf()

Generate quadrature points and weights for Gauss-Laguerre quadrature over an (0, +inf).

Returns:

  • points (numpy.ndarray) – Quadrature points.

  • weights (numpy.ndarray) – Quadrature weights.

estimate_error_clencur(i4, i2, imag_tol=1e-10)

Estimate the quadrature error for Clenshaw-Curtis quadrature.

Parameters:
  • i4 (numpy.ndarray) – Integral at one-quarter the number of points.

  • i2 (numpy.ndarray) – Integral at one-half the number of points.

  • imag_tol (float, optional) – Threshold to consider the imaginary part of a root to be zero. Default value is 1e-10.

Returns:

error – Estimated error.

Return type:

numpy.ndarray

kernel(exact=False)

Run the polarizability calculation to compute moments of the self-energy.

Parameters:

exact (bool, optional) – Has no effect and is only present for compatibility with dRPA. Default value is False.

Returns:

  • moments_occ (numpy.ndarray) – Moments of the occupied self-energy.

  • moments_vir (numpy.ndarray) – Moments of the virtual self-energy.

convolve(eta, eta_orders=None, mo_energy_g=None, mo_occ_g=None)

Handle the convolution of the moments of the Green’s function and screened Coulomb interaction.

Parameters:
  • eta (numpy.ndarray) – Moments of the density-density response partly transformed into moments of the screened Coulomb interaction.

  • mo_energy_g (numpy.ndarray, optional) – Energies of the Green’s function. If None, use self.mo_energy_g. Default value is None.

  • eta_orders (list, optional) – List of orders for the rotated density-density moments in eta. If None, assume it spans all required orders. Default value is None.

  • mo_occ_g (numpy.ndarray, optional) – Occupancies of the Green’s function. If None, use self.mo_occ_g. Default value is None.

Returns:

  • moments_occ (numpy.ndarray) – Moments of the occupied self-energy.

  • moments_vir (numpy.ndarray) – Moments of the virtual self-energy.

build_se_moments(moments_dd)

Build the moments of the self-energy via convolution.

Parameters:

moments_dd (numpy.ndarray) – Moments of the density-density response.

Returns:

  • moments_occ (numpy.ndarray) – Moments of the occupied self-energy.

  • moments_vir (numpy.ndarray) – Moments of the virtual self-energy.

build_dd_moment_inv()

Build the first inverse (n=-1) moment of the density-density response.

Returns:

moment – First inverse (n=-1) moment of the density-density response.

Return type:

numpy.ndarray

Notes

This is not the full n=-1 moment, which is

\[\begin{split}D^{-1} - D^{-1} V^\dagger (I + V D^{-1} V^\dagger)^{-1} \\ V D^{-1}\end{split}\]

but rather

\[(I + V D^{-1} V^\dagger)^{-1} V D^{-1}\]

which ensures that the function scales properly. The final contractions are done when constructing the matrix-vector product.

mpi_slice(n)

Return the start and end index for the current process for total size n.

Parameters:

n (int) – Total size.

Returns:

  • p0 (int) – Start index for current process.

  • p1 (int) – End index for current process.

mpi_size(n)

Return the number of states in the current process for total size n.

Parameters:

n (int) – Total size.

Returns:

size – Number of states in current process.

Return type:

int