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

#include <hf.h>

Inheritance diagram for occ::qm::HartreeFock:
[legend]
Collaboration diagram for occ::qm::HartreeFock:
[legend]

Public Member Functions

 HartreeFock (const AOBasis &basis)
 
const auto & aobasis () const
 
auto nbf () const
 
bool usual_scf_energy () const
 
void update_scf_energy (occ::core::EnergyComponents &) const
 
FockBuildProperties fock_build_properties () const
 
bool have_effective_core_potentials () const
 
void set_density_fitting_basis (const std::string &, double auto_aux_threshold=1e-4)
 
void set_density_fitting_policy (IntegralEngineDF::Policy policy)
 
void set_coulomb_method (CoulombMethod method)
 
void set_cosx_exchange (occ::numint::COSXGridLevel level=occ::numint::COSXGridLevel::Grid1)
 
void set_cosx_settings (const occ::qm::cosx::Settings &settings)
 
bool using_cosx () const
 
bool using_density_fitting () const
 
HartreeFock with_new_basis (const AOBasis &new_basis) const
 Create a new HartreeFock instance with the same settings but different basis.
 
void set_precision (double precision)
 
double integral_precision () const
 
double nuclear_point_charge_interaction_energy (const PointChargeList &) const
 
double wolf_point_charge_interaction_energy (const PointChargeList &, const std::vector< double > &partial_charges, double alpha, double rc) const
 
Mat compute_fock (const MolecularOrbitals &mo, const Mat &Schwarz=Mat()) const
 
Mat3N additional_atomic_gradients (const MolecularOrbitals &mo) const
 
MatTriple compute_fock_gradient (const MolecularOrbitals &mo, const Mat &Schwarz=Mat()) const
 
Mat compute_fock_mixed_basis (const MolecularOrbitals &mo_minbs, const gto::AOBasis &bs, bool is_shell_diagonal)
 
Mat compute_fock_from_density (const MolecularOrbitals &mo, const Mat &Schwarz=Mat()) const
 Fock matrix from a density already expressed in this method's own basis.
 
JKPair compute_JK (const MolecularOrbitals &mo, const Mat &Schwarz=Mat()) const
 
JKTriple compute_JK_gradient (const MolecularOrbitals &mo, const Mat &Schwarz=Mat()) const
 
std::vector< JKPaircompute_JK_list (const std::vector< MolecularOrbitals > &mo, const Mat &Schwarz=Mat()) const
 
Mat compute_J (const MolecularOrbitals &mo, const Mat &Schwarz=Mat()) const
 
Mat compute_K (const MolecularOrbitals &mo, const Mat &Schwarz=Mat()) const
 
JKPair coulomb_and_range_separated_exchange (const MolecularOrbitals &mo, double omega, double alpha, double beta, const Mat &Schwarz=Mat())
 
MatTriple compute_J_gradient (const MolecularOrbitals &mo, const Mat &Schwarz=Mat()) const
 
std::vector< Matcompute_J_list (const std::vector< MolecularOrbitals > &mo, const Mat &Schwarz=Mat()) const
 
Mat compute_kinetic_matrix () const
 
MatTriple compute_kinetic_gradient () const
 
Mat compute_overlap_matrix () const
 
Mat compute_overlap_matrix_for_basis (const occ::gto::AOBasis &basis) const
 
MatTriple compute_overlap_gradient () const
 
Mat compute_nuclear_attraction_matrix () const
 
MatTriple compute_nuclear_attraction_gradient () const
 
MatTriple compute_rinv_gradient_for_atom (size_t atom_index) const
 
Mat compute_effective_core_potential_matrix () const
 
Mat compute_point_charge_interaction_matrix (const PointChargeList &point_charges, double alpha=1e16) const
 
Mat compute_wolf_interaction_matrix (const PointChargeList &point_charges, const std::vector< double > &partial_charges, double alpha, double rc) const
 
Mat3N electronic_electric_field_contribution (const MolecularOrbitals &mo, const Mat3N &) const
 
Vec electronic_electric_potential_contribution (const MolecularOrbitals &mo, const Mat3N &) const
 
Mat compute_schwarz_ints () const
 
void update_core_hamiltonian (const MolecularOrbitals &mo, Mat &H)
 
template<int order>
occ::core::Multipole< order > compute_electronic_multipoles (const MolecularOrbitals &mo, const Vec3 &o={0.0, 0.0, 0.0}) const
 
template<unsigned int order = 1>
auto compute_nuclear_multipoles (const Vec3 &o={0.0, 0.0, 0.0}) const
 
template<int order>
auto compute_multipoles (const MolecularOrbitals &mo, const Vec3 &o={0.0, 0.0, 0.0}) const
 
Mat compute_K_long_range (const MolecularOrbitals &mo, double omega, const Mat &Schwarz=Mat()) const
 Exchange built with the attenuated operator erf(omega r)/r.
 
MatTriple compute_K_gradient_long_range (const MolecularOrbitals &mo, double omega, const Mat &Schwarz=Mat()) const
 Exchange gradient with the attenuated operator, as above.
 
std::string name () const
 
- Public Member Functions inherited from occ::qm::SCFMethodBase
 SCFMethodBase (const std::vector< core::Atom > &)
 
const auto & atoms () const
 
int system_charge () const
 
int total_electrons () const
 
int active_electrons () const
 
const auto & frozen_electrons () const
 
Vec3 center_of_mass () const
 
void set_system_charge (int charge)
 
double nuclear_repulsion_energy () const
 
Mat3N nuclear_repulsion_gradient () const
 
Vec nuclear_electric_potential_contribution (const Mat3N &) const
 
Mat3N nuclear_electric_field_contribution (const Mat3N &) const
 
void set_frozen_electrons (const std::vector< int > &)
 

Additional Inherited Members

- Protected Member Functions inherited from occ::qm::SCFMethodBase
void update_electron_count ()
 
- Protected Attributes inherited from occ::qm::SCFMethodBase
int m_charge {0}
 
int m_num_electrons {0}
 
int m_num_frozen {0}
 
std::vector< occ::core::Atomm_atoms
 
std::vector< int > m_frozen_electrons
 

Constructor & Destructor Documentation

◆ HartreeFock()

occ::qm::HartreeFock::HartreeFock ( const AOBasis basis)

Member Function Documentation

◆ additional_atomic_gradients()

Mat3N occ::qm::HartreeFock::additional_atomic_gradients ( const MolecularOrbitals mo) const
inline

◆ aobasis()

const auto & occ::qm::HartreeFock::aobasis ( ) const
inline

◆ compute_effective_core_potential_matrix()

Mat occ::qm::HartreeFock::compute_effective_core_potential_matrix ( ) const

◆ compute_electronic_multipoles()

template<int order>
occ::core::Multipole< order > occ::qm::HartreeFock::compute_electronic_multipoles ( const MolecularOrbitals mo,
const Vec3 o = {0.0, 0.0, 0.0} 
) const
inline

◆ compute_fock()

Mat occ::qm::HartreeFock::compute_fock ( const MolecularOrbitals mo,
const Mat Schwarz = Mat() 
) const

◆ compute_fock_from_density()

Mat occ::qm::HartreeFock::compute_fock_from_density ( const MolecularOrbitals mo,
const Mat Schwarz = Mat() 
) const
inline

Fock matrix from a density already expressed in this method's own basis.

The conventional four-centre build, which reads mo.D and screens on it as well as on Schwarz. Density fitting and COSX cannot serve here: both build exchange from the occupied coefficients, and a guess has a density before it has any orbitals.

Distinct from compute_fock_mixed_basis, which exists to project a density out of a different basis. Handing that function this method's own basis makes it duplicate every shell as auxiliary and run the full four-index loop unscreened – on a 566-function system that cost 256 s against 59 s for the whole rest of an SCF iteration.

◆ compute_fock_gradient()

MatTriple occ::qm::HartreeFock::compute_fock_gradient ( const MolecularOrbitals mo,
const Mat Schwarz = Mat() 
) const

◆ compute_fock_mixed_basis()

Mat occ::qm::HartreeFock::compute_fock_mixed_basis ( const MolecularOrbitals mo_minbs,
const gto::AOBasis bs,
bool  is_shell_diagonal 
)

◆ compute_J()

Mat occ::qm::HartreeFock::compute_J ( const MolecularOrbitals mo,
const Mat Schwarz = Mat() 
) const

◆ compute_J_gradient()

MatTriple occ::qm::HartreeFock::compute_J_gradient ( const MolecularOrbitals mo,
const Mat Schwarz = Mat() 
) const

◆ compute_J_list()

std::vector< Mat > occ::qm::HartreeFock::compute_J_list ( const std::vector< MolecularOrbitals > &  mo,
const Mat Schwarz = Mat() 
) const

◆ compute_JK()

JKPair occ::qm::HartreeFock::compute_JK ( const MolecularOrbitals mo,
const Mat Schwarz = Mat() 
) const

◆ compute_JK_gradient()

JKTriple occ::qm::HartreeFock::compute_JK_gradient ( const MolecularOrbitals mo,
const Mat Schwarz = Mat() 
) const

◆ compute_JK_list()

std::vector< JKPair > occ::qm::HartreeFock::compute_JK_list ( const std::vector< MolecularOrbitals > &  mo,
const Mat Schwarz = Mat() 
) const

◆ compute_K()

Mat occ::qm::HartreeFock::compute_K ( const MolecularOrbitals mo,
const Mat Schwarz = Mat() 
) const

◆ compute_K_gradient_long_range()

MatTriple occ::qm::HartreeFock::compute_K_gradient_long_range ( const MolecularOrbitals mo,
double  omega,
const Mat Schwarz = Mat() 
) const

Exchange gradient with the attenuated operator, as above.

◆ compute_K_long_range()

Mat occ::qm::HartreeFock::compute_K_long_range ( const MolecularOrbitals mo,
double  omega,
const Mat Schwarz = Mat() 
) const

Exchange built with the attenuated operator erf(omega r)/r.

The attenuated operator gets its own engines, fixed to it for the life of the calculation, rather than being produced by toggling omega on the shared ones and toggling it back. Omega is constant for a calculation – it comes from the functional – so the only thing the toggling ever bought was letting one engine serve two operators, and it cost exception safety, const-correctness, and the ability to cache anything that belongs to an operator rather than to a basis.

COSX is the exception and takes omega as a plain argument: nothing in it is cached per operator, so a second grid and shell-pair map would be pure duplication.

◆ compute_kinetic_gradient()

MatTriple occ::qm::HartreeFock::compute_kinetic_gradient ( ) const

◆ compute_kinetic_matrix()

Mat occ::qm::HartreeFock::compute_kinetic_matrix ( ) const

◆ compute_multipoles()

template<int order>
auto occ::qm::HartreeFock::compute_multipoles ( const MolecularOrbitals mo,
const Vec3 o = {0.0, 0.0, 0.0} 
) const
inline

◆ compute_nuclear_attraction_gradient()

MatTriple occ::qm::HartreeFock::compute_nuclear_attraction_gradient ( ) const

◆ compute_nuclear_attraction_matrix()

Mat occ::qm::HartreeFock::compute_nuclear_attraction_matrix ( ) const

◆ compute_nuclear_multipoles()

template<unsigned int order = 1>
auto occ::qm::HartreeFock::compute_nuclear_multipoles ( const Vec3 o = {0.0, 0.0, 0.0}) const
inline

◆ compute_overlap_gradient()

MatTriple occ::qm::HartreeFock::compute_overlap_gradient ( ) const

◆ compute_overlap_matrix()

Mat occ::qm::HartreeFock::compute_overlap_matrix ( ) const

◆ compute_overlap_matrix_for_basis()

Mat occ::qm::HartreeFock::compute_overlap_matrix_for_basis ( const occ::gto::AOBasis basis) const

◆ compute_point_charge_interaction_matrix()

Mat occ::qm::HartreeFock::compute_point_charge_interaction_matrix ( const PointChargeList point_charges,
double  alpha = 1e16 
) const

◆ compute_rinv_gradient_for_atom()

MatTriple occ::qm::HartreeFock::compute_rinv_gradient_for_atom ( size_t  atom_index) const

◆ compute_schwarz_ints()

Mat occ::qm::HartreeFock::compute_schwarz_ints ( ) const

◆ compute_wolf_interaction_matrix()

Mat occ::qm::HartreeFock::compute_wolf_interaction_matrix ( const PointChargeList point_charges,
const std::vector< double > &  partial_charges,
double  alpha,
double  rc 
) const

◆ coulomb_and_range_separated_exchange()

JKPair occ::qm::HartreeFock::coulomb_and_range_separated_exchange ( const MolecularOrbitals mo,
double  omega,
double  alpha,
double  beta,
const Mat Schwarz = Mat() 
)

◆ electronic_electric_field_contribution()

Mat3N occ::qm::HartreeFock::electronic_electric_field_contribution ( const MolecularOrbitals mo,
const Mat3N  
) const

◆ electronic_electric_potential_contribution()

Vec occ::qm::HartreeFock::electronic_electric_potential_contribution ( const MolecularOrbitals mo,
const Mat3N  
) const

◆ fock_build_properties()

FockBuildProperties occ::qm::HartreeFock::fock_build_properties ( ) const
inline

◆ have_effective_core_potentials()

bool occ::qm::HartreeFock::have_effective_core_potentials ( ) const
inline

◆ integral_precision()

double occ::qm::HartreeFock::integral_precision ( ) const
inline

◆ name()

std::string occ::qm::HartreeFock::name ( ) const
inline

◆ nbf()

auto occ::qm::HartreeFock::nbf ( ) const
inline

◆ nuclear_point_charge_interaction_energy()

double occ::qm::HartreeFock::nuclear_point_charge_interaction_energy ( const PointChargeList ) const

◆ set_cosx_exchange()

void occ::qm::HartreeFock::set_cosx_exchange ( occ::numint::COSXGridLevel  level = occ::numint::COSXGridLevel::Grid1)

◆ set_cosx_settings()

void occ::qm::HartreeFock::set_cosx_settings ( const occ::qm::cosx::Settings settings)

◆ set_coulomb_method()

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

◆ set_density_fitting_basis()

void occ::qm::HartreeFock::set_density_fitting_basis ( const std::string &  ,
double  auto_aux_threshold = 1e-4 
)

◆ set_density_fitting_policy()

void occ::qm::HartreeFock::set_density_fitting_policy ( IntegralEngineDF::Policy  policy)

◆ set_precision()

void occ::qm::HartreeFock::set_precision ( double  precision)
inline

◆ update_core_hamiltonian()

void occ::qm::HartreeFock::update_core_hamiltonian ( const MolecularOrbitals mo,
Mat H 
)
inline

◆ update_scf_energy()

void occ::qm::HartreeFock::update_scf_energy ( occ::core::EnergyComponents ) const
inline

◆ using_cosx()

bool occ::qm::HartreeFock::using_cosx ( ) const
inline

◆ using_density_fitting()

bool occ::qm::HartreeFock::using_density_fitting ( ) const
inline

◆ usual_scf_energy()

bool occ::qm::HartreeFock::usual_scf_energy ( ) const
inline

◆ with_new_basis()

HartreeFock occ::qm::HartreeFock::with_new_basis ( const AOBasis new_basis) const

Create a new HartreeFock instance with the same settings but different basis.

Parameters
new_basisThe new basis set to use
Returns
New HartreeFock instance

◆ wolf_point_charge_interaction_energy()

double occ::qm::HartreeFock::wolf_point_charge_interaction_energy ( const PointChargeList ,
const std::vector< double > &  partial_charges,
double  alpha,
double  rc 
) const

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