|
occ
|
#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). | |
| using occ::qm::IntegralEngineDF::AtomList = std::vector<occ::core::Atom> |
| using occ::qm::IntegralEngineDF::Buffer = std::vector<double> |
| using occ::qm::IntegralEngineDF::ShellList = std::vector<Shell> |
| using occ::qm::IntegralEngineDF::ShellPairList = std::vector<std::vector<size_t>> |
| occ::qm::IntegralEngineDF::IntegralEngineDF | ( | const AtomList & | atoms, |
| const ShellList & | ao, | ||
| const ShellList & | df ) |
|
inline |
|
inline |
| 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).
| Mat occ::qm::IntegralEngineDF::coulomb | ( | const MolecularOrbitals & | mo | ) |
| JKPair occ::qm::IntegralEngineDF::coulomb_and_exchange | ( | const MolecularOrbitals & | mo | ) |
| std::vector< Mat > occ::qm::IntegralEngineDF::coulomb_derivative_fock | ( | const MolecularOrbitals & | mo | ) |
| 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.
| 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().
|
inline |
Get the current Coulomb method.
|
inline |
Factorization of the Coulomb metric V=(P|Q) for the active omega.
| 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.
| Mat occ::qm::IntegralEngineDF::exchange | ( | const MolecularOrbitals & | mo | ) |
| std::vector< Mat > occ::qm::IntegralEngineDF::exchange_derivative_fock | ( | const MolecularOrbitals & | mo | ) |
| 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).
| 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).
| 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).
| std::vector< Mat > occ::qm::IntegralEngineDF::exchange_response | ( | const Mat & | C, |
| const std::vector< Mat > & | Cx ) |
| 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.
| Mat occ::qm::IntegralEngineDF::fock_operator | ( | const MolecularOrbitals & | mo | ) |
|
inline |
|
inline |
|
inline |
Bytes a packed store of every screened shell pair would take.
|
inline |
The packed store the Coulomb and exchange builds use (empty until the first build under a storing policy).
|
inline |
|
inline |
| void occ::qm::IntegralEngineDF::set_coulomb_method | ( | CoulombMethod | method | ) |
Set the method used for Coulomb matrix computation.
|
inline |
Changing the policy drops a store built under the previous one.
|
inline |
Bytes the packed 3-centre store may take under Policy::Choose; what does not fit is recomputed every build.
| void occ::qm::IntegralEngineDF::set_precision | ( | double | precision | ) |
| void occ::qm::IntegralEngineDF::set_range_separated_omega | ( | double | omega | ) |