occ
Loading...
Searching...
No Matches
occ::dft::kernels Namespace Reference

Classes

struct  BatchDensity
 A batch's density matrix: D_s for spin s is rows [s n, (s + 1) n) of D. More...

Functions

template<int derivative_order, SpinorbitalKind spinorbital_kind>
void process_grid_block_gradient (const BatchDensity &D, const occ::gto::GTOValues &gto_vals, Eigen::Ref< const Mat3N > points_block, const Vec &weights_block, const std::vector< DensityFunctional > &funcs, Mat3N &gradient, double density_threshold, const std::vector< int > &bf_to_atom, double *energy_density=nullptr, const int *point_parent=nullptr)
Mat density_factor (const occ::qm::MolecularOrbitals &mo, const Mat &D2, int nspin)
 Factor F of the (doubled) density matrix D2 = 2 mo.D, D2_s = F_s F_s^T for each spin block, from the occupied orbitals; empty unless mo.D really is that product (to 1e-12 relative), e.g.
template<int derivative_order>
void spin_density (const BatchDensity &dens, int s, const occ::gto::GTOValues &gv, Mat &Dphi, Mat *Dgrad, MatRef rho)
 rho (one spin's rows) from the batch's basis values, keeping the products with D: Dphi = phi D_s, and for meta-GGAs Dgrad[i] = phi_i D_s.
template<int derivative_order, occ::qm::SpinorbitalKind spinorbital_kind>
bool process_grid_block (const BatchDensity &D, const occ::gto::GTOValues &gto_vals, Eigen::Ref< const Mat3N > points_block, const Vec &weights_block, const std::vector< DensityFunctional > &funcs, Mat &K, double &energy, double &total_density_a, double &total_density_b, double density_threshold)

Function Documentation

◆ density_factor()

Mat occ::dft::kernels::density_factor ( const occ::qm::MolecularOrbitals & mo,
const Mat & D2,
int nspin )

Factor F of the (doubled) density matrix D2 = 2 mo.D, D2_s = F_s F_s^T for each spin block, from the occupied orbitals; empty unless mo.D really is that product (to 1e-12 relative), e.g.

for a guess density.

◆ process_grid_block()

template<int derivative_order, occ::qm::SpinorbitalKind spinorbital_kind>
bool occ::dft::kernels::process_grid_block ( const BatchDensity & D,
const occ::gto::GTOValues & gto_vals,
Eigen::Ref< const Mat3N > points_block,
const Vec & weights_block,
const std::vector< DensityFunctional > & funcs,
Mat & K,
double & energy,
double & total_density_a,
double & total_density_b,
double density_threshold )

◆ process_grid_block_gradient()

template<int derivative_order, SpinorbitalKind spinorbital_kind>
void occ::dft::kernels::process_grid_block_gradient ( const BatchDensity & D,
const occ::gto::GTOValues & gto_vals,
Eigen::Ref< const Mat3N > points_block,
const Vec & weights_block,
const std::vector< DensityFunctional > & funcs,
Mat3N & gradient,
double density_threshold,
const std::vector< int > & bf_to_atom,
double * energy_density = nullptr,
const int * point_parent = nullptr )

◆ spin_density()

template<int derivative_order>
void occ::dft::kernels::spin_density ( const BatchDensity & dens,
int s,
const occ::gto::GTOValues & gv,
Mat & Dphi,
Mat * Dgrad,
MatRef rho )

rho (one spin's rows) from the batch's basis values, keeping the products with D: Dphi = phi D_s, and for meta-GGAs Dgrad[i] = phi_i D_s.

The same arithmetic as occ::density::evaluate_density.