|
| | 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.
|
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:
- Transform density to Hermite basis: X = E_ab^T × D
- Contract with R-integrals: Y = R^T × X
- Transform to aux basis: g = E_c × Y Solve: d = V^{-1} × g Backward pass (reusing same R-integrals):
- Transform d to Hermite basis: T = E_c^T × d
- Contract with R-integrals: U = R × T
- 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.