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 > ®istry) 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
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::array_type = typename FockBuilder<Tile, Policy>::array_type |
◆ Basis
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::Basis = ::mpqc::lcao::gaussian::Basis |
◆ DirectFockBuilder_
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::DirectFockBuilder_ = DirectFockBuilder<Tile, Policy> |
◆ Engine
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::Engine = ::mpqc::lcao::gaussian::ShrPool<libint2::Engine> |
◆ Factory
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::Factory = ::mpqc::lcao::pbc::gaussian::AOFactory<Tile, Policy> |
◆ func_offset_list
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::func_offset_list = std::unordered_map<size_t, std::tuple<size_t, size_t> > |
◆ Q2Matrix
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::Q2Matrix = ::mpqc::lcao::gaussian::Q2Matrix |
◆ result_type
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::result_type = typename FockBuilder<Tile, Policy>::result_type |
◆ shellpair_list_t
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::shellpair_list_t = std::vector<std::vector<size_t> > |
◆ ShellVec
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::ShellVec = ::mpqc::lcao::gaussian::ShellVec |
◆ WorldObject_
using mpqc::lcao::pbc::DirectFockBuilder< Tile, Policy >::WorldObject_ = madness::WorldObject<DirectFockBuilder<Tile, Policy> > |
Constructor & Destructor Documentation
◆ DirectFockBuilder() [1/2]
|
inline |
◆ DirectFockBuilder() [2/2]
|
inline |
◆ ~DirectFockBuilder()
|
inline |
Member Function Documentation
◆ compute_J_aaaa()
|
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.
- the unit cell distance between AO #2 and AO #1 (the reference cell) is shorter than
R_max
- the unit cell distance between AO #4 and AO #2 is shorter than
R_max
- 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()
|
inline |
◆ compute_JK_abcd()
|
inline |
◆ compute_K_aaaa()
|
inline |
◆ compute_K_abcd()
|
inline |
◆ fock_lattice_range()
|
inlineoverride |
◆ operator()()
|
inlineoverride |
◆ register_fock()
|
inlineoverride |
The documentation for this class was generated from the following files:
- mpqc/chemistry/qc/lcao/scf/fwd.h
- mpqc/chemistry/qc/lcao/scf/pbc/direct_fock_builder.h