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 ()
 
 SplitRIJ (const SplitRIJ &)=delete
 
SplitRIJoperator= (const SplitRIJ &)=delete
 
 SplitRIJ (SplitRIJ &&) noexcept
 
SplitRIJoperator= (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.
 
const gto::AOBasisaux_basis () const
 Get the auxiliary basis.
 
const gto::AOBasisao_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.
 

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/3]

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()

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

◆ SplitRIJ() [2/3]

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

◆ SplitRIJ() [3/3]

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

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