Primitive Contractor ERI4

Primitive Contractor

This module computes four-center electron repulsion integrals (ERIs) in the contracted AO basis by explicitly contracting primitive integrals with renormalized contraction coefficients.

The algorithm proceeds in three steps:

  1. The “Raw Primitive ERI4” submodule is called with the original braket. It internally decontracts each basis set (one shell per primitive, coefficient = 1.0) and returns the raw primitive ERI tensor with libint’s automatic shell normalization disabled. The tensor has dimensions [n_prim_aos, n_prim_aos, n_prim_aos, n_prim_aos], where n_prim_aos counts all AO components across all decontracted shells (e.g. a p-shell with 3 primitives contributes 9 decontracted AO indices: 3 primitives x 3 components).

  2. The “Primitive Normalization” submodule is called on each of the four contracted basis sets. It returns a vector of renormalized contraction coefficients c[i], one per decontracted AO index, in the same ordering as the decontracted basis (primitive index varying fastest within each (shell, ao_component) block).

  3. Matrices of pair estimates are computed for bra and ket basis sets. K and K’ are respectively coarse estimates for bra and ket basis sets. Q and Q’ are respectively fine estimates for bra and ket basis sets.

  4. The contracted AO integrals are formed by summing c0[i]*c1[j]*c2[k]*c3[l]*prim_ERI[i,j,k,l] with screening:

    Coarse (from coarse_k_ij): - Skip bra pair (i,j) if K[i,j] < t - Skip ket pair (k,l) if K’[k,l] < t - Skip quartet if K[i,j] * K’[k,l] <= t (libint keeps only sums > ln(t)) - Skip if |Q[i,j] * Q'[k,l] / sqrt(gamma_bra + gamma_ket)| < t.

Please Cite

No citations

Property Types

The following is a list of property types that this module satisfies.

  • simde::EvaluateBraKet<chemist::braket::BraKet<std::pair<chemist::wavefunction::AOs, chemist::wavefunction::AOs>, chemist::qm_operator::Coulomb<chemist::Electron, chemist::Electron>, std::pair<chemist::wavefunction::AOs, chemist::wavefunction::AOs>>>

Module Inputs

This section details the full list of inputs that the module accepts. Inputs that are not listed as optional must have their value set before the module can be run. Inputs can be set manually by calling the module’s change_input function or by passing arguments to a property type.

Quick Reference

The following table provides a quick summary of the inputs available to this module. The columns are:

  • Key: The key used to retrieve the option,

  • Default : The initial value, if one exists, and

  • Description : A human readable description of what the option is used for.

Key

Default

Description

BraKet

N/A

N/A

Screening Threshold

1e-16

Coarse screening uses the PrimitivePairEstimator matrices; fine screening uses libint ShellPair geometry factors. Matches libint ScreeningMethod::Original.

Detailed Descriptions

The following subsections provide detailed descriptions of each input recognized by this module. The subsection headings are the name of the input. Within each subsection we list:

  • Description : A human readable description of what the option is used for.

  • Default Value : The initial value, if one exists.

  • Optional? : Whether the value must be set inorder for the module to run.

  • Opaque? : Does the value of the input influence memoization?.

  • Domain Restrictions : Criteria a value must obey to be deemed valid.

  • Description : N/A

  • Default Value : N/A

  • Optional? : False

  • Opaque? : True

  • Domain Restrictions :

    • Type == chemist::braket::BraKet<std::pair<chemist::wavefunction::AOs, chemist::wavefunction::AOs>, chemist::qm_operator::Coulomb<chemist::Electron, chemist::Electron>, std::pair<chemist::wavefunction::AOs, chemist::wavefunction::AOs>>

  • Description : Coarse screening uses the PrimitivePairEstimator matrices; fine screening uses libint ShellPair geometry factors. Matches libint ScreeningMethod::Original.

  • Default Value : 1e-16

  • Optional? : False

  • Opaque? : True

  • Domain Restrictions :

    • Type == double

Module Results

This section tabulates the full list of results that the module returns. The columns respectively are:

  • Key: What the result is called

  • Type: The C++ type of the result

  • Description: What the result is/how it was computed.

Note

A given property type will only return a subset of the available results. Additional results can be accessed by using other property types or by using the Module class’s advanced API.

Key

Type

Description

tensor representation

tensorwrapper::Tensor

N/A

Submodules

This section details the full list of submodules that the module uses. For each submodule we have listed:

  • Key : The key used to refer to this particular callback.

  • Property Type : The property type that the submodule must satisfy.

  • Description : How the module will use the submodule.

Key

Property Type

Description

Primitive Normalization

integrals::property_types::Normalize<chemist::basis_set::AOBasisSet<chemist::basis_set::AtomicBasisSet<chemist::basis_set::Shell<chemist::basis_set::ContractedGaussian<chemist::basis_set::Primitive<double>>>>>>

N/A

Raw Primitive ERI4

simde::EvaluateBraKet<chemist::braket::BraKet<std::pair<chemist::wavefunction::AOs, chemist::wavefunction::AOs>, chemist::qm_operator::Coulomb<chemist::Electron, chemist::Electron>, std::pair<chemist::wavefunction::AOs, chemist::wavefunction::AOs>>>

N/A