votca 2026-dev
Loading...
Searching...
No Matches
votca::xtp::DFTGradient Class Reference

#include <dftgradient.h>

Static Public Member Functions

static Eigen::MatrixXd NuclearRepulsionDerivative (const QMMolecule &mol)
static Eigen::MatrixXd RIJGradient (const Eigen::MatrixXd &density, const AOBasis &auxbasis, const AOBasis &dftbasis)
static Eigen::MatrixXd RIKGradient (const Eigen::MatrixXd &occ_mo_coeffs, const AOBasis &auxbasis, const AOBasis &dftbasis)

Detailed Description

Definition at line 35 of file dftgradient.h.

Member Function Documentation

◆ NuclearRepulsionDerivative()

Eigen::MatrixXd votca::xtp::DFTGradient::NuclearRepulsionDerivative ( const QMMolecule & mol)
static

Derivative of the classical nuclear-nuclear repulsion energy E_nn = sum over atom pairs A,B with A < B of Z_A Z_B / R_AB, with respect to nuclear coordinates. Returns an (Natoms x 3) matrix in Hartree/Bohr (positions are in Bohr).

Uses QMAtom::getNuccharge() (nuclear charge minus ECP core charge, if an ECP is in use), the effective charge that should enter the classical repulsion term consistently with an ECP-modified Hamiltonian.

Definition at line 50 of file dftgradient.cc.

◆ RIJGradient()

Eigen::MatrixXd votca::xtp::DFTGradient::RIJGradient ( const Eigen::MatrixXd & density,
const AOBasis & auxbasis,
const AOBasis & dftbasis )
static

RI-J (Coulomb) gradient for a fixed density matrix, contracting the two- and three-centre integral derivatives with the RI fitting coefficients c = V^-1 d. Returns dE_J/dR (Natoms x 3, Hartree/Bohr).

The response of c need not be differentiated: E_J(c) = c^T d - 1/2 c^T V c is stationary in c for any fixed d. The formula is therefore valid for any density; for forces it must be the converged SCF density.

Definition at line 77 of file dftgradient.cc.

◆ RIKGradient()

Eigen::MatrixXd votca::xtp::DFTGradient::RIKGradient ( const Eigen::MatrixXd & occ_mo_coeffs,
const AOBasis & auxbasis,
const AOBasis & dftbasis )
static

RI-K (exchange) gradient, without the hybrid scaling factor.

occ_mo_coeffs: (nbf x nocc) occupied MO coefficients C. With d_ij(P) = C_i^T (mu nu|P) C_j, c_ij = V^-1 d_ij, E_K = -2 * sum_{i,j} [0.5 * c_ij . d_ij] = -sum_{i,j} c_ij . d_ij over all ordered pairs of occupied MOs, which equals the exchange energy of ERIs::CalculateEXX_mos. That uses the symmetric V^-1/2 fit, which gives the same energy as the V^-1 fit used here (|V^-1/2 x|^2 = x^T V^-1 x for positive-definite V), so no derivative of V^-1/2 is needed. As for RIJGradient, c_ij is stationary for any fixed C, so the formula holds for any C; for forces C must be the converged occupied MOs.

Definition at line 124 of file dftgradient.cc.


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