Class RadialIntegral

Nested Relationships

Nested Types

Class Documentation

class RadialIntegral

Abstracts the calculation of radial integrals for ECP integration.

This should not be used directly, and is owned by ECPIntegral. It provides the interface to the adaptive quadrature algorithms used to calculate the type 1 and 2 radial integrals, and the unrolled recursive scheme for type 2 radial integrals.

Public Functions

RadialIntegral()

Default constructor creates an empty object.

void init(int maxL, double tol = 1e-15, int small = 256, int large = 1024)

Initialises the object, in turn intialising the quadrature grids and BesselFunction

Parameters
  • maxL – - the maximum angular momentum of integral needed

  • tol – - the tolerance for convergence of integrals (defaults to 1e-15)

  • small – - the maximum number of quadrature points for the small integration grid (default 256, minimum recommended)

  • large – - the maximum number of quadrature points for the large integration grid (default 1024, minimum recommended)

Parameters buildParameters(const GaussianShell &shellA, const GaussianShell &shellB, const ShellPairData &data) const

Given two GaussianShells, builds the parameters needed by both kind of integral.

Parameters
Returns

the parameters needed in both type 1 and 2 integrations

void type1(int maxL, int N, int offset, const ECP &U, const GaussianShell &shellA, const GaussianShell &shellB, const ShellPairData &data, const Parameters &parameters, TwoIndex<double> &values) const

Calculates all type 1 radial integrals over two Gaussian shells up to the given maximum angular momentum.

Parameters
  • maxL – - the maximum angular momentum

  • N – - the power of r that the integrand is weighted by

  • offset – - the starting angular momentum

  • U – - the ECP to be integrated over

  • shellA – - the first GaussianShell

  • shellB – - the second GaussianShell

  • data – - the data container for the shell pair

  • parameters – - pre-calculated parameters for the radial integral

  • values – - the matrix to return the integrals in

void type2(int lam, int l1start, int l1end, int l2start, int l2end, int N, const ECP &U, const GaussianShell &shellA, const GaussianShell &shellB, const ShellPairData &data, const Parameters &parameters, TwoIndex<double> &values) const

Calculates all type 2 radial integrals over two Gaussian shells for the given ECP angular momentum l using quadrature

Parameters
  • lam – - the ECP shell angular momentum to be calculated over

  • l1start – - the angular momentum to start on for the first shell

  • l1end – - the angular momentum to stop at for the first shell

  • l2start – - the angular momentum to start on for the second shell

  • l2end – - the angular momentum to stop at for the second shell

  • N – - the power of r that the integrand is weighted by

  • U – - the ECP to be integrated over

  • shellA – - the first GaussianShell

  • shellB – - the second GaussianShell

  • data – - the data container for the shell pair

  • parameters – - pre-calculated parameters for the radial integral

  • values – - the matrix to return the integrals in

void type2(const std::vector<Triple> &triples, int nbase, int lam, const ECP &U, const GaussianShell &shellA, const GaussianShell &shellB, double A, double B, ThreeIndex<double> &radials) const

Calculates all the requested type 2 radial integrals using predominantly a recursive algorithm. In the triples, l1 must be less than or equal to l2. Symmetry means that for l1 > l2, {N, l1, l2} can be calculated as {N, l2, l1} but with shellA and shellB (And therefore also A and B) swapped.

Parameters
  • triples – - vector of triples of form {N, l1, l2} of all required radial integrals

  • nbase – - the maximum number of base integrals that will be needed (so only have to compute once)

  • lam – - the ECP shell angular momentum to be calculated over

  • U – - the ECP to be integrated over

  • shellA – - the first GaussianShell

  • shellB – - the second GaussianShell

  • A – - the magnitude of the distance of shellA from the ECP

  • B – - the magnitude of the distance of shellB from the ECP

  • radials – - the array to return the integrals in, indexed as (N, l1, l2)

double estimate_type2(int N, int l1, int l2, double n, double a, double b, double A, double B) const

Estimates the value of the requested type 2 radial integral for prescreening, as described in ref. Shaw2017. The modal point is estimated by ignoring the ratios of bessel function derivatives - this gives an overestimate so is okay for screening, but would not be good for approximating the integral itself.

Parameters
  • N – - power of r in integrand

  • l1 – - angular momentum of first Bessel function

  • l2 – - angular momentum of second Bessel function

  • n – - exponent of ECP

  • a – - exponent of primitive in shellA

  • b – - exponent of primitive in shellB

  • A – - magnitude of distance of shellA from ECP

  • B – - magnitude of distance of shellB from ECP

Returns

estimated value (upper bound) of the type 2 integral

struct Parameters

struct to store all parameters needed in both type 1 and 2 integrations

Public Members

TwoIndex<double> p

Matrices of parameters needed in both type 1 and 2 integrations.

TwoIndex<double> P
TwoIndex<double> P2
TwoIndex<double> K