|
MADNESS 0.10.1
|
#include <exchangeoperator.h>

Classes | |
| class | MacroTaskExchangeRow |
| class | MacroTaskExchangeSimple |
Public Types | |
| typedef Exchange< T, NDIM >::ExchangeAlgorithm | Algorithm |
Public Member Functions | |
| ExchangeImpl (World &world, const double lo, const double thresh) | |
| default ctor | |
| ExchangeImpl (World &world, const Nemo *nemo, const int ispin) | |
| ctor with a nemo calculation | |
| ExchangeImpl (World &world, const SCF *calc, const int ispin) | |
| ctor with a conventional calculation | |
| nlohmann::json | gather_statistics () const |
| return some statistics about the current settings | |
| nlohmann::json | gather_timings (World &world) const |
| nlohmann::json | get_statistics () const |
| std::shared_ptr< MacroTaskQ > | get_taskq () const |
| World & | get_world () const |
| std::string | info () const |
| bool | is_symmetric () const |
| vecfuncT | operator() (const vecfuncT &vket) const |
| apply the exchange operator on a vector of functions | |
| void | print_timer (World &world) const |
| ExchangeImpl & | set_algorithm (const Algorithm &alg) |
| void | set_bra_and_ket (const vecfuncT &bra, const vecfuncT &ket) |
| set the bra and ket orbital spaces, and the occupation | |
| ExchangeImpl & | set_macro_task_info (const MacroTaskInfo &info) |
| ExchangeImpl & | set_printlevel (const long &level) |
| ExchangeImpl & | set_taskq (std::shared_ptr< MacroTaskQ > taskq1) |
| ExchangeImpl & | symmetric (const bool flag) |
Static Public Member Functions | |
| static auto | set_poisson (World &world, const double lo, const double econv=FunctionDefaults< 3 >::get_thresh()) |
Public Attributes | |
| Algorithm | algorithm_ = multiworld_efficient_row |
| MacroTaskInfo | macro_task_info = MacroTaskInfo::preset("default") |
Private Types | |
| typedef Function< T, NDIM > | functionT |
| typedef std::vector< functionT > | vecfuncT |
Private Member Functions | |
| vecfuncT | K_large_memory (const vecfuncT &vket, const double mul_tol=0.0) const |
| computing the upper triangle of the double sum (over vket and the K orbitals) | |
| vecfuncT | K_macrotask_efficient (const vecfuncT &vket, const double mul_tol=0.0) const |
| exchange using macrotasks, i.e. apply K on a function in individual worlds | |
| vecfuncT | K_macrotask_efficient_row (const vecfuncT &vket, const double mul_tol=0.0) const |
| exchange using macrotasks, i.e. apply K on a function in individual worlds row-wise | |
| vecfuncT | K_small_memory (const vecfuncT &vket, const double mul_tol=0.0) const |
| computing the full square of the double sum (over vket and the K orbitals) | |
| bool | printdebug () const |
| bool | printprogress () const |
| bool | printtimings () const |
| bool | printtimings_detail () const |
Static Private Member Functions | |
| static vecfuncT | compute_K_tile (World &world, const vecfuncT &mo_bra, const vecfuncT &mo_ket, const vecfuncT &vket, std::shared_ptr< real_convolution_3d > poisson, const bool symmetric, const double mul_tol=0.0) |
| computing the upper triangle of the double sum (over vket and the K orbitals) | |
| static void | reset_timer () |
Private Attributes | |
| double | lo = 1.e-4 |
| vecfuncT | mo_bra |
| is the exchange matrix symmetric? K phi_i = \sum_k \phi_k \int \phi_k \phi_i | |
| vecfuncT | mo_ket |
| MOs for bra and ket. | |
| double | mul_tol = FunctionDefaults<NDIM>::get_thresh()*0.1 |
| long | printlevel = 0 |
| nlohmann::json | statistics |
| statistics of the Cloud (timings, memory) and of the parameters of this run | |
| bool | symmetric_ = false |
| std::shared_ptr< MacroTaskQ > | taskq |
| double | thresh = FunctionDefaults<NDIM>::get_thresh() |
| World & | world |
Static Private Attributes | |
| static std::atomic< long > | apply_timer |
| static double | elapsed_time |
| static std::atomic< long > | mul1_timer |
| timing | |
| static std::atomic< long > | mul2_timer |
| typedef Exchange<T,NDIM>::ExchangeAlgorithm madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::Algorithm |
|
private |
|
private |
|
inline |
default ctor
| madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::ExchangeImpl | ( | World & | world, |
| const SCF * | calc, | ||
| const int | ispin | ||
| ) |
ctor with a conventional calculation
References madness::SCF::amo, madness::SCF::bmo, madness::conj(), madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::mo_bra, madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::mo_ket, and madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::world.
| madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::ExchangeImpl | ( | World & | world, |
| const Nemo * | nemo, | ||
| const int | ispin | ||
| ) |
ctor with a nemo calculation
References madness::Nemo::get_calc(), madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::mo_bra, madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::mo_ket, madness::mul(), madness::NemoBase::ncf, madness::truncate(), and madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::world.
|
staticprivate |
computing the upper triangle of the double sum (over vket and the K orbitals)
References madness::apply(), madness::compress(), madness::cpu_time(), madness::WorldGopInterface::fence(), madness::World::gop, ij(), madness::mul_sparse(), madness::norm_tree(), madness::reconstruct(), and madness::truncate().
|
inline |
return some statistics about the current settings
References lo, madness::Exchange< T, NDIM >::macro_task_info, thresh, madness::MacroTaskInfo::to_json(), and madness::Exchange< T, NDIM >::to_string().
|
inline |
References madness::World::gop, and madness::WorldGopInterface::sum().
|
inline |
References madness::SCFOperatorBase< T, NDIM >::statistics.
|
inline |
References madness::SCFOperatorBase< T, NDIM >::taskq.
|
inline |
|
inline |
|
inline |
|
private |
computing the upper triangle of the double sum (over vket and the K orbitals)
References madness::Exchange< T, NDIM >::is_symmetric(), lo, set_poisson(), and madness::truncate().
|
private |
exchange using macrotasks, i.e. apply K on a function in individual worlds
apply the exchange operator by tiling the exchange matrix
compute the matrix N_{ik} = N \phi_i \phi_k by tiles, with i,k \in batches A,B, do a local reduce within the tiles: K_{iB} = \sum_{k \in batch B} \phi_k N_{ik} and a universe-wide reduce of the tiles: K\phi_i = \sum_{batches B} K_{iB} saving up to half of the cpu time compared to the naive algorithm
| T | number type |
| NDIM | physical dimension of the argument vket |
| vf | argument of the exchange operator |
| mul_tol | cutoff parameter for sparse multiplication |
References madness::Exchange< T, NDIM >::is_symmetric(), lo, madness::Exchange< T, NDIM >::macro_task_info, madness::print(), madness::Exchange< T, NDIM >::set_printlevel(), madness::SCFOperatorBase< T, NDIM >::statistics, and madness::SCFOperatorBase< T, NDIM >::taskq.
|
private |
exchange using macrotasks, i.e. apply K on a function in individual worlds row-wise
compute each row of the exchange matrix in different subworlds
References madness::print().
|
private |
computing the full square of the double sum (over vket and the K orbitals)
was vtol
was vtol
References madness::apply(), madness::gaxpy(), lo, madness::mul_sparse(), set_poisson(), and madness::truncate().
| std::vector< Function< T, NDIM > > madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::operator() | ( | const vecfuncT & | vket | ) | const |
apply the exchange operator on a vector of functions
note that only one spin is used (either alpha or beta orbitals)
| [in] | vket | the orbitals |i> that the operator is applied on |
References madness::norm_tree(), and madness::reconstruct().
|
inline |
References madness::World::rank().
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlinestaticprivate |
|
inline |
|
inline |
set the bra and ket orbital spaces, and the occupation
| [in] | bra | bra space, must be provided as complex conjugate |
| [in] | ket | ket space |
References madness::copy().
|
inline |
|
inlinestatic |
References madness::CoulombOperatorPtr(), and lo.
|
inline |
|
inline |
References madness::SCFOperatorBase< T, NDIM >::taskq.
|
inline |
| Algorithm madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::algorithm_ = multiworld_efficient_row |
|
inlinestaticprivate |
|
inlinestaticprivate |
|
private |
| MacroTaskInfo madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::macro_task_info = MacroTaskInfo::preset("default") |
|
private |
is the exchange matrix symmetric? K phi_i = \sum_k \phi_k \int \phi_k \phi_i
Referenced by madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::ExchangeImpl(), and madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::ExchangeImpl().
|
private |
MOs for bra and ket.
Referenced by madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::ExchangeImpl(), and madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::ExchangeImpl().
|
inlinestaticprivate |
timing
|
inlinestaticprivate |
|
private |
|
private |
|
mutableprivate |
statistics of the Cloud (timings, memory) and of the parameters of this run
|
private |
|
private |
|
private |
|
private |