occ
Loading...
Searching...
No Matches
occ::qm::SplitRIJ Class Reference

Split-RI-J: Coulomb matrix via Hermite Gaussian basis (Neese 2003). More...

#include <split_ri_j.h>

Public Member Functions

 SplitRIJ (const gto::AOBasis &ao_basis, const gto::AOBasis &aux_basis, const ShellPairList &shellpairs, const Mat &schwarz=Mat())
 Construct Split-RI-J engine.
 SplitRIJ (const gto::AOBasis &ao_basis, const gto::AOBasis &aux_basis, const ShellPairList &shellpairs, const Mat &schwarz, const CoulombMetric &metric, const Vec &V_diag_sqrt)
 As above, reusing a factorization of the Coulomb metric V = (P|Q) the caller already has, and sqrt(V_PP) (for screening).
 ~SplitRIJ ()
 SplitRIJ (const SplitRIJ &)=delete
SplitRIJ & operator= (const SplitRIJ &)=delete
 SplitRIJ (SplitRIJ &&) noexcept
SplitRIJ & operator= (SplitRIJ &&) noexcept
Mat coulomb (const MolecularOrbitals &mo) const
 Compute Coulomb matrix from molecular orbitals.
Mat coulomb_from_density (const Mat &D) const
 Compute Coulomb matrix from density matrix directly.
Mat3N three_center_gradient (const Mat &D, Vec *fitted=nullptr) const
 Nuclear gradient (3 x natom) of d^T g, g_P = sum_mn (mn|P) D_mn, at fixed fitted coefficients d = V^-1 g (the 3-centre part of the RI-J energy gradient; the metric part is d^T dV d).
const gto::AOBasis & aux_basis () const
 Get the auxiliary basis.
const gto::AOBasis & ao_basis () const
 Get the AO basis.
size_t naux () const
 Get number of auxiliary basis functions.
size_t nbf () const
 Get number of AO basis functions.

Static Public Member Functions

static bool supports (const gto::AOBasis &ao_basis, const gto::AOBasis &aux_basis)
 Whether the compiled kernels cover these bases (AO l <= 4, auxiliary l <= 6); the constructor throws otherwise.

Detailed Description

Split-RI-J: Coulomb matrix via Hermite Gaussian basis (Neese 2003).

This implementation uses the McMurchie-Davidson (MMD) scheme to work in Hermite Gaussian basis, computing Coulomb matrices without explicitly forming the 3-center integrals (μν|P).

Algorithm (Scheme 4 from Neese 2003): Forward pass:

  1. Transform density to Hermite basis: X = E_ab^T × D
  2. Contract with R-integrals: Y = R^T × X
  3. Transform to aux basis: g = E_c × Y Solve: d = V^{-1} × g Backward pass (reusing same R-integrals):
  1. Transform d to Hermite basis: T = E_c^T × d
  2. Contract with R-integrals: U = R × T
  3. Transform to orbital basis: J = E_ab × U

Reference: Neese, F. (2003). An improvement of the resolution of the identity approximation for the formation of the Coulomb matrix. J. Comput. Chem. 24, 1740-1747.

Constructor & Destructor Documentation

◆ SplitRIJ() [1/4]

occ::qm::SplitRIJ::SplitRIJ ( const gto::AOBasis & ao_basis,
const gto::AOBasis & aux_basis,
const ShellPairList & shellpairs,
const Mat & schwarz = Mat() )

Construct Split-RI-J engine.

Parameters
ao_basisAtomic orbital basis
aux_basisAuxiliary (density fitting) basis
shellpairsSignificant shell pair list from IntegralEngine
schwarzOptional Schwarz screening matrix (shell-pair indexed)

◆ SplitRIJ() [2/4]

occ::qm::SplitRIJ::SplitRIJ ( const gto::AOBasis & ao_basis,
const gto::AOBasis & aux_basis,
const ShellPairList & shellpairs,
const Mat & schwarz,
const CoulombMetric & metric,
const Vec & V_diag_sqrt )

As above, reusing a factorization of the Coulomb metric V = (P|Q) the caller already has, and sqrt(V_PP) (for screening).

◆ ~SplitRIJ()

occ::qm::SplitRIJ::~SplitRIJ ( )

◆ SplitRIJ() [3/4]

occ::qm::SplitRIJ::SplitRIJ ( const SplitRIJ & )
delete

◆ SplitRIJ() [4/4]

occ::qm::SplitRIJ::SplitRIJ ( SplitRIJ && )
noexcept

Member Function Documentation

◆ ao_basis()

const gto::AOBasis & occ::qm::SplitRIJ::ao_basis ( ) const

Get the AO basis.

◆ aux_basis()

const gto::AOBasis & occ::qm::SplitRIJ::aux_basis ( ) const

Get the auxiliary basis.

◆ coulomb()

Mat occ::qm::SplitRIJ::coulomb ( const MolecularOrbitals & mo) const

Compute Coulomb matrix from molecular orbitals.

Parameters
moMolecular orbitals containing density matrix
Returns
J matrix (nbf × nbf)

◆ coulomb_from_density()

Mat occ::qm::SplitRIJ::coulomb_from_density ( const Mat & D) const

Compute Coulomb matrix from density matrix directly.

Parameters
DDensity matrix (nbf × nbf)
Returns
J matrix (nbf × nbf)

◆ naux()

size_t occ::qm::SplitRIJ::naux ( ) const

Get number of auxiliary basis functions.

◆ nbf()

size_t occ::qm::SplitRIJ::nbf ( ) const

Get number of AO basis functions.

◆ operator=() [1/2]

SplitRIJ & occ::qm::SplitRIJ::operator= ( const SplitRIJ & )
delete

◆ operator=() [2/2]

SplitRIJ & occ::qm::SplitRIJ::operator= ( SplitRIJ && )
noexcept

◆ supports()

bool occ::qm::SplitRIJ::supports ( const gto::AOBasis & ao_basis,
const gto::AOBasis & aux_basis )
static

Whether the compiled kernels cover these bases (AO l <= 4, auxiliary l <= 6); the constructor throws otherwise.

◆ three_center_gradient()

Mat3N occ::qm::SplitRIJ::three_center_gradient ( const Mat & D,
Vec * fitted = nullptr ) const

Nuclear gradient (3 x natom) of d^T g, g_P = sum_mn (mn|P) D_mn, at fixed fitted coefficients d = V^-1 g (the 3-centre part of the RI-J energy gradient; the metric part is d^T dV d).

D is the density whose g is fitted (off-diagonal elements counted once each way, as in J).

Parameters
fittedif given, receives d

The documentation for this class was generated from the following file: