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

#include <integral_engine_df.h>

Public Types

enum  Policy { Choose , Direct , Stored }
using ShellPairList = std::vector<std::vector<size_t>>
using ShellList = std::vector<Shell>
using AtomList = std::vector<occ::core::Atom>
using ShellKind = Shell::Kind
using Op = cint::Operator
using Buffer = std::vector<double>
using IntegralResult = IntegralEngine::IntegralResult<3>

Public Member Functions

 IntegralEngineDF (const AtomList &atoms, const ShellList &ao, const ShellList &df)
Mat exchange (const MolecularOrbitals &mo)
Mat coulomb (const MolecularOrbitals &mo)
Mat3N coulomb_gradient (const MolecularOrbitals &mo)
 Nuclear gradient (3 x natom) of the RI-J Coulomb energy, derivative integrals only (the orbital response enters through the energy-weighted density as for any SCF gradient).
Mat3N exchange_gradient (const MolecularOrbitals &mo)
 Nuclear gradient (3 x natom) of the RI-K exchange energy, derivative integrals only, from the occupied coefficients (mo.Cocc).
Mat exchange_hessian (const MolecularOrbitals &mo)
 RI-K second derivatives of tr(D K) at fixed density (unrestricted: 1/2 sum_s tr(P^s K[P^s])), the skeleton derivatives of K (unrestricted: K[P^s] per spin, alpha rows over beta rows), and K[D1] for densities D1 = Cx C^T + C Cx^T given by their factors Cx (C the occupied coefficients).
std::vector< Mat > exchange_derivative_fock (const MolecularOrbitals &mo)
std::vector< Mat > exchange_derivative_fock_occ (const MolecularOrbitals &mo)
 exchange_derivative_fock contracted with the occupied coefficients (nbf x o each; unrestricted, alpha and beta side by side).
std::vector< Mat > exchange_response (const Mat &C, const std::vector< Mat > &Cx)
std::vector< Mat > exchange_response_occ (const Mat &C, const std::vector< Mat > &Cx)
 exchange_response contracted with C, K[D1] C (nbf x o each): one integral pass for every density, nothing per density stored.
Mat coulomb_hessian (const MolecularOrbitals &mo)
 RI-J second derivatives at fixed density (3N x 3N), the skeleton Fock derivatives d(J)/dX (3N matrices) and the J response to each density in D1 (the RI-J build on D1), all in the convention of coulomb().
std::vector< Mat > coulomb_derivative_fock (const MolecularOrbitals &mo)
std::vector< Mat > coulomb_response (const std::vector< Mat > &D1)
JKPair coulomb_and_exchange (const MolecularOrbitals &mo)
Mat fock_operator (const MolecularOrbitals &mo)
void set_integral_policy (Policy p)
 Changing the policy drops a store built under the previous one.
Policy integral_policy () const
void set_integral_store_memory_limit (size_t bytes)
 Bytes the packed 3-centre store may take under Policy::Choose; what does not fit is recomputed every build.
size_t integral_store_memory_limit () const
const PackedDFStore & packed_store () const
 The packed store the Coulomb and exchange builds use (empty until the first build under a storing policy).
size_t packed_storage_bytes () const
 Bytes a packed store of every screened shell pair would take.
bool ensure_complete_packed_store (size_t max_bytes)
 Makes the packed store complete if it is not already and the whole of it fits max_bytes, whatever the policy: for callers (the correlated methods) that make their own memory decision.
void set_coulomb_method (CoulombMethod method)
 Set the method used for Coulomb matrix computation.
CoulombMethod coulomb_method () const
 Get the current Coulomb method.
void set_range_separated_omega (double omega)
double range_separated_omega () const
void set_precision (double precision)
double precision () const
const IntegralEngine & ao_engine () const
const IntegralEngine & aux_engine () const
const CoulombMetric & coulomb_metric () const
 Factorization of the Coulomb metric V=(P|Q) for the active omega.
Mat build_b_direct (Eigen::Ref< const Mat > C_left, Eigen::Ref< const Mat > C_right) const
 Integral-direct density-fitting B tensor for the given MO coefficient blocks: B(i*nR + a, P) = Σ_μν C_left(μ,i) C_right(ν,a) (μν|P), streamed without storing (μν|P).

Member Typedef Documentation

◆ AtomList

◆ Buffer

using occ::qm::IntegralEngineDF::Buffer = std::vector<double>

◆ IntegralResult

◆ Op

◆ ShellKind

◆ ShellList

◆ ShellPairList

using occ::qm::IntegralEngineDF::ShellPairList = std::vector<std::vector<size_t>>

Member Enumeration Documentation

◆ Policy

Enumerator
Choose 
Direct 
Stored 

Constructor & Destructor Documentation

◆ IntegralEngineDF()

occ::qm::IntegralEngineDF::IntegralEngineDF ( const AtomList & atoms,
const ShellList & ao,
const ShellList & df )

Member Function Documentation

◆ ao_engine()

const IntegralEngine & occ::qm::IntegralEngineDF::ao_engine ( ) const
inline

◆ aux_engine()

const IntegralEngine & occ::qm::IntegralEngineDF::aux_engine ( ) const
inline

◆ build_b_direct()

Mat occ::qm::IntegralEngineDF::build_b_direct ( Eigen::Ref< const Mat > C_left,
Eigen::Ref< const Mat > C_right ) const

Integral-direct density-fitting B tensor for the given MO coefficient blocks: B(i*nR + a, P) = Σ_μν C_left(μ,i) C_right(ν,a) (μν|P), streamed without storing (μν|P).

Returns (nL*nR x naux).

◆ coulomb()

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

◆ coulomb_and_exchange()

JKPair occ::qm::IntegralEngineDF::coulomb_and_exchange ( const MolecularOrbitals & mo)

◆ coulomb_derivative_fock()

std::vector< Mat > occ::qm::IntegralEngineDF::coulomb_derivative_fock ( const MolecularOrbitals & mo)

◆ coulomb_gradient()

Mat3N occ::qm::IntegralEngineDF::coulomb_gradient ( const MolecularOrbitals & mo)

Nuclear gradient (3 x natom) of the RI-J Coulomb energy, derivative integrals only (the orbital response enters through the energy-weighted density as for any SCF gradient).

Restricted and unrestricted.

◆ coulomb_hessian()

Mat occ::qm::IntegralEngineDF::coulomb_hessian ( const MolecularOrbitals & mo)

RI-J second derivatives at fixed density (3N x 3N), the skeleton Fock derivatives d(J)/dX (3N matrices) and the J response to each density in D1 (the RI-J build on D1), all in the convention of coulomb().

◆ coulomb_method()

CoulombMethod occ::qm::IntegralEngineDF::coulomb_method ( ) const
inline

Get the current Coulomb method.

◆ coulomb_metric()

const CoulombMetric & occ::qm::IntegralEngineDF::coulomb_metric ( ) const
inline

Factorization of the Coulomb metric V=(P|Q) for the active omega.

◆ coulomb_response()

std::vector< Mat > occ::qm::IntegralEngineDF::coulomb_response ( const std::vector< Mat > & D1)

◆ ensure_complete_packed_store()

bool occ::qm::IntegralEngineDF::ensure_complete_packed_store ( size_t max_bytes)

Makes the packed store complete if it is not already and the whole of it fits max_bytes, whatever the policy: for callers (the correlated methods) that make their own memory decision.

False when it stays incomplete, including under a range-separated operator.

◆ exchange()

Mat occ::qm::IntegralEngineDF::exchange ( const MolecularOrbitals & mo)

◆ exchange_derivative_fock()

std::vector< Mat > occ::qm::IntegralEngineDF::exchange_derivative_fock ( const MolecularOrbitals & mo)

◆ exchange_derivative_fock_occ()

std::vector< Mat > occ::qm::IntegralEngineDF::exchange_derivative_fock_occ ( const MolecularOrbitals & mo)

exchange_derivative_fock contracted with the occupied coefficients (nbf x o each; unrestricted, alpha and beta side by side).

◆ exchange_gradient()

Mat3N occ::qm::IntegralEngineDF::exchange_gradient ( const MolecularOrbitals & mo)

Nuclear gradient (3 x natom) of the RI-K exchange energy, derivative integrals only, from the occupied coefficients (mo.Cocc).

◆ exchange_hessian()

Mat occ::qm::IntegralEngineDF::exchange_hessian ( const MolecularOrbitals & mo)

RI-K second derivatives of tr(D K) at fixed density (unrestricted: 1/2 sum_s tr(P^s K[P^s])), the skeleton derivatives of K (unrestricted: K[P^s] per spin, alpha rows over beta rows), and K[D1] for densities D1 = Cx C^T + C Cx^T given by their factors Cx (C the occupied coefficients).

◆ exchange_response()

std::vector< Mat > occ::qm::IntegralEngineDF::exchange_response ( const Mat & C,
const std::vector< Mat > & Cx )

◆ exchange_response_occ()

std::vector< Mat > occ::qm::IntegralEngineDF::exchange_response_occ ( const Mat & C,
const std::vector< Mat > & Cx )

exchange_response contracted with C, K[D1] C (nbf x o each): one integral pass for every density, nothing per density stored.

◆ fock_operator()

Mat occ::qm::IntegralEngineDF::fock_operator ( const MolecularOrbitals & mo)

◆ integral_policy()

Policy occ::qm::IntegralEngineDF::integral_policy ( ) const
inline

◆ integral_store_memory_limit()

size_t occ::qm::IntegralEngineDF::integral_store_memory_limit ( ) const
inline

◆ packed_storage_bytes()

size_t occ::qm::IntegralEngineDF::packed_storage_bytes ( ) const
inline

Bytes a packed store of every screened shell pair would take.

◆ packed_store()

const PackedDFStore & occ::qm::IntegralEngineDF::packed_store ( ) const
inline

The packed store the Coulomb and exchange builds use (empty until the first build under a storing policy).

◆ precision()

double occ::qm::IntegralEngineDF::precision ( ) const
inline

◆ range_separated_omega()

double occ::qm::IntegralEngineDF::range_separated_omega ( ) const
inline

◆ set_coulomb_method()

void occ::qm::IntegralEngineDF::set_coulomb_method ( CoulombMethod method)

Set the method used for Coulomb matrix computation.

◆ set_integral_policy()

void occ::qm::IntegralEngineDF::set_integral_policy ( Policy p)
inline

Changing the policy drops a store built under the previous one.

◆ set_integral_store_memory_limit()

void occ::qm::IntegralEngineDF::set_integral_store_memory_limit ( size_t bytes)
inline

Bytes the packed 3-centre store may take under Policy::Choose; what does not fit is recomputed every build.

◆ set_precision()

void occ::qm::IntegralEngineDF::set_precision ( double precision)

◆ set_range_separated_omega()

void occ::qm::IntegralEngineDF::set_range_separated_omega ( double omega)

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