mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy > Class Template Reference

Documentation

template<typename Tile, typename Policy>
class mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >

DirectFockBuilder is an integral-direct implementation of FockBuilder with periodic Gaussian AO basis that uses 4-center integrals. This builder takes advantage of shell-level screening and parallelized summation over unit cells for coulomb interaction

Public Types

using array_type = typename FockBuilder< Tile, Policy >::array_type
 
using result_type = typename FockBuilder< Tile, Policy >::result_type
 
using WorldObject_ = madness::WorldObject< DirectFockBuilder< Tile, Policy > >
 
using DirectFockBuilder_ = DirectFockBuilder< Tile, Policy >
 
using Factory = ::mpqc::lcao::pbc::gaussian::AOFactory< Tile, Policy >
 
using Engine = ::mpqc::lcao::gaussian::ShrPool< libint2::Engine >
 
using Q2Matrix = ::mpqc::lcao::gaussian::Q2Matrix
 
using Basis = ::mpqc::lcao::gaussian::Basis
 
using ShellVec = ::mpqc::lcao::gaussian::ShellVec
 
using shellpair_list_t = std::vector< std::vector< size_t > >
 
using func_offset_list = std::unordered_map< size_t, std::tuple< size_t, size_t > >
 

Public Member Functions

 DirectFockBuilder (madness::World &world, std::shared_ptr< const Basis > bra_basis, std::shared_ptr< const Basis > ket_basis, const std::shared_ptr< const UnitCell > &unitcell, Vector3i &R_max, Vector3i &RJ_max, Vector3i &RD_max, int64_t R_size, int64_t RJ_size, int64_t RD_size, bool compute_J, bool compute_K, std::string screen="dist", double screen_threshold=1.0e-20, double shell_pair_threshold=1.0e-12, double density_threshold=Policy::shape_type::threshold(), bool force_hermiticity=true)
 
 DirectFockBuilder (Factory &ao_factory, bool compute_J, bool compute_K)
 
 ~DirectFockBuilder ()
 
result_type operator() (array_type const &D, double target_precision, bool is_density_diagonal) override
 
void register_fock (const array_type &fock, FormulaRegistry< array_type > &registry) const override
 
Vector3i fock_lattice_range () const override
 
array_type compute_JK_abcd (array_type const &D, double target_precision, bool is_density_diagonal) const
 
array_type compute_K_abcd (array_type const &D, double target_precision) const
 
array_type compute_JK_aaaa (array_type const &D, double target_precision, bool is_density_diagonal) const
 
array_type compute_K_aaaa (array_type const &D, double target_precision, bool is_density_diagonal) const
 
array_type compute_J_aaaa (array_type const &D, double target_precision)
 

Member Typedef Documentation

◆ array_type

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::array_type = typename FockBuilder<Tile, Policy>::array_type

◆ Basis

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::Basis = ::mpqc::lcao::gaussian::Basis

◆ DirectFockBuilder_

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::DirectFockBuilder_ = DirectFockBuilder<Tile, Policy>

◆ Engine

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::Engine = ::mpqc::lcao::gaussian::ShrPool<libint2::Engine>

◆ Factory

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::Factory = ::mpqc::lcao::pbc::gaussian::AOFactory<Tile, Policy>

◆ func_offset_list

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::func_offset_list = std::unordered_map<size_t, std::tuple<size_t, size_t> >

◆ Q2Matrix

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::Q2Matrix = ::mpqc::lcao::gaussian::Q2Matrix

◆ result_type

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::result_type = typename FockBuilder<Tile, Policy>::result_type

◆ shellpair_list_t

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::shellpair_list_t = std::vector<std::vector<size_t> >

◆ ShellVec

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::ShellVec = ::mpqc::lcao::gaussian::ShellVec

◆ WorldObject_

template<typename Tile , typename Policy >
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::WorldObject_ = madness::WorldObject<DirectFockBuilder<Tile, Policy> >

Constructor & Destructor Documentation

◆ DirectFockBuilder() [1/2]

template<typename Tile , typename Policy >
mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::DirectFockBuilder ( madness::World &  world,
std::shared_ptr< const Basis bra_basis,
std::shared_ptr< const Basis ket_basis,
const std::shared_ptr< const UnitCell > &  unitcell,
Vector3i R_max,
Vector3i RJ_max,
Vector3i RD_max,
int64_t  R_size,
int64_t  RJ_size,
int64_t  RD_size,
bool  compute_J,
bool  compute_K,
std::string  screen = "dist",
double  screen_threshold = 1.0e-20,
double  shell_pair_threshold = 1.0e-12,
double  density_threshold = Policy::shape_type::threshold(),
bool  force_hermiticity = true 
)
inline

◆ DirectFockBuilder() [2/2]

template<typename Tile , typename Policy >
mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::DirectFockBuilder ( Factory ao_factory,
bool  compute_J,
bool  compute_K 
)
inline

◆ ~DirectFockBuilder()

template<typename Tile , typename Policy >
mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::~DirectFockBuilder ( )
inline

Member Function Documentation

◆ compute_J_aaaa()

template<typename Tile , typename Policy >
array_type mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::compute_J_aaaa ( array_type const &  D,
double  target_precision 
)
inline

This computes Coulomb matrix using eight-fold permutational symmetry in (μ_0 ν_Rν| ρ_Rρ σ_(Rρ+Rσ)):

(μ_0 ν_Rν | ρ_Rρ σ_(Rρ+Rσ) ) = (μ_0 ν_Rν | σ_(Rρ+Rσ) ρ_Rρ ) = (ν_0 μ_(-Rν) | ρ_(Rρ-Rν) σ_(Rρ+Rσ-Rν)) = (ν_0 μ_(-Rν) | σ_(Rρ+Rσ-Rν) ρ_(Rρ-Rν) ) = (ρ_0 σ_Rσ | μ_(-Rρ) ν_(Rν-Rρ) ) = (ρ_0 σ_Rσ | ν_(Rν-Rρ) μ_(-Rρ) ) = (σ_0 ρ_(-Rσ) | μ_(-Rρ-Rσ) ν_(Rν-Rρ-Rσ)) = (σ_0 ρ_(-Rσ) | ν_(Rν-Rρ-Rσ) μ_(-Rρ-Rσ) )

note that to reduce cost we use lattice truncations, i.e.

  1. the unit cell distance between AO #2 and AO #1 (the reference cell) is shorter than R_max
  2. the unit cell distance between AO #4 and AO #2 is shorter than R_max
  3. the unit cell distance between AO #3 and AO #1 (the reference cell) is shorter than RJ_max

Conditions 1 and 2 are satisfied automatically since Rν <= R_max and Rσ <= R_max. Condition 3 has to be determined in this function.

Parameters
D
target_precision
Returns

◆ compute_JK_aaaa()

template<typename Tile , typename Policy >
array_type mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::compute_JK_aaaa ( array_type const &  D,
double  target_precision,
bool  is_density_diagonal 
) const
inline

◆ compute_JK_abcd()

template<typename Tile , typename Policy >
array_type mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::compute_JK_abcd ( array_type const &  D,
double  target_precision,
bool  is_density_diagonal 
) const
inline

◆ compute_K_aaaa()

template<typename Tile , typename Policy >
array_type mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::compute_K_aaaa ( array_type const &  D,
double  target_precision,
bool  is_density_diagonal 
) const
inline

◆ compute_K_abcd()

template<typename Tile , typename Policy >
array_type mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::compute_K_abcd ( array_type const &  D,
double  target_precision 
) const
inline

◆ fock_lattice_range()

template<typename Tile , typename Policy >
Vector3i mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::fock_lattice_range ( ) const
inlineoverride

◆ operator()()

template<typename Tile , typename Policy >
result_type mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::operator() ( array_type const &  D,
double  target_precision,
bool  is_density_diagonal 
)
inlineoverride

◆ register_fock()

template<typename Tile , typename Policy >
void mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::register_fock ( const array_type fock,
FormulaRegistry< array_type > &  registry 
) const
inlineoverride

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