iterative-solver 0.0
 
Loading...
Searching...
No Matches
molpro::linalg::array::ArrayHandlerDefault< AL, AR > Class Template Reference

Fall back handler that calls member functions of arrays. More...

#include <ArrayHandlerDefault.h>

Inheritance diagram for molpro::linalg::array::ArrayHandlerDefault< AL, AR >:
Collaboration diagram for molpro::linalg::array::ArrayHandlerDefault< AL, AR >:

Detailed Description

template<class AL, class AR = AL>
class molpro::linalg::array::ArrayHandlerDefault< AL, AR >

Fall back handler that calls member functions of arrays.

Public Member Functions

AL copy (const AR &source) override
 
void copy (AL &x, const AR &y) override
 Copy content of y into x.
 
void scal (value_type alpha, AL &x) override
 
void fill (value_type alpha, AL &x) override
 
void axpy (value_type alpha, const AR &x, AL &y) override
 
value_type dot (const AL &x, const AR &y) override
 The hermitian inner product <x|y>: conjugate-linear in x, linear in y.
 
void gemm_outer (const Matrix< value_type > alphas, const CVecRef< AR > &xx, const VecRef< AL > &yy) override
 
Matrix< value_type > gemm_inner (const CVecRef< AL > &xx, const CVecRef< AR > &yy) override
 
std::map< size_t, value_type_abs > select_max_dot (size_t n, const AL &x, const AR &y) override
 Select n indices with largest by absolute value contributions to the dot product.
 
std::map< size_t, value_type_abs > select (size_t n, const AL &x, bool max=false, bool ignore_sign=false) override
 Select n indices with largest (or smallest) actual (or absolute) value.
 
ProxyHandle lazy_handle () override
 Returns a lazy handle. Most implementations simply need to call the overload: return lazy_handle(*this);.
 
- Public Member Functions inherited from molpro::linalg::array::ArrayHandler< AL, AR >
const Counter & counter () const
 
std::string counter_to_string (std::string L, std::string R)
 
void clear_counter ()
 
virtual ~ArrayHandler ()
 Destroys ArrayHandler instance and invalidates any LazyHandler it created. Invalidated handler will not evaluate.
 

Additional Inherited Members

- Public Types inherited from molpro::linalg::array::ArrayHandler< AL, AR >
using value_type_L = typename array::mapped_or_value_type_t< AL >
 
using value_type_R = typename array::mapped_or_value_type_t< AR >
 
using value_type = decltype(value_type_L{} *value_type_R{})
 
using value_type_abs = decltype(check_abs< value_type >())
 
- Protected Member Functions inherited from molpro::linalg::array::ArrayHandler< AL, AR >
 ArrayHandler ()
 
 ArrayHandler (const ArrayHandler &)=default
 
virtual void error (const std::string &message)
 Throws an error.
 
virtual void fused_axpy (const std::vector< std::tuple< size_t, size_t, size_t > > &reg, const std::vector< value_type > &alphas, const std::vector< std::reference_wrapper< const AR > > &xx, std::vector< std::reference_wrapper< AL > > &yy)
 Default implementation of fused_axpy without any simplification.
 
virtual void fused_dot (const std::vector< std::tuple< size_t, size_t, size_t > > &reg, const std::vector< std::reference_wrapper< const AL > > &xx, const std::vector< std::reference_wrapper< const AR > > &yy, std::vector< std::reference_wrapper< value_type > > &out)
 Default implementation of fused_dot without any simplification.
 
void save_handle (const std::shared_ptr< LazyHandle > &handle)
 Save weak ptr to a lazy handle.
 
ProxyHandle lazy_handle (ArrayHandler< AL, AR > &handler)
 
- Protected Attributes inherited from molpro::linalg::array::ArrayHandler< AL, AR >
std::unique_ptr< Counter > m_counter
 
std::vector< std::weak_ptr< LazyHandle > > m_lazy_handles
 keeps track of all created lazy handles
 

Member Function Documentation

◆ axpy()

template<class AL , class AR = AL>
void molpro::linalg::array::ArrayHandlerDefault< AL, AR >::axpy ( value_type  alpha,
const AR &  x,
AL &  y 
)
inlineoverridevirtual

◆ copy() [1/2]

template<class AL , class AR = AL>
void molpro::linalg::array::ArrayHandlerDefault< AL, AR >::copy ( AL &  x,
const AR &  y 
)
inlineoverridevirtual

Copy content of y into x.

Implements molpro::linalg::array::ArrayHandler< AL, AR >.

◆ copy() [2/2]

template<class AL , class AR = AL>
AL molpro::linalg::array::ArrayHandlerDefault< AL, AR >::copy ( const AR &  source)
inlineoverridevirtual

◆ dot()

template<class AL , class AR = AL>
value_type molpro::linalg::array::ArrayHandlerDefault< AL, AR >::dot ( const AL &  x,
const AR &  y 
)
inlineoverridevirtual

The hermitian inner product <x|y>: conjugate-linear in x, linear in y.

For a real element type this is the ordinary dot product; for a complex one the left argument is conjugated, so that dot(x, x) is real and non-negative and an overlap matrix built from it is hermitian rather than complex symmetric.

Implements molpro::linalg::array::ArrayHandler< AL, AR >.

◆ fill()

template<class AL , class AR = AL>
void molpro::linalg::array::ArrayHandlerDefault< AL, AR >::fill ( value_type  alpha,
AL &  x 
)
inlineoverridevirtual

◆ gemm_inner()

template<class AL , class AR = AL>
Matrix< value_type > molpro::linalg::array::ArrayHandlerDefault< AL, AR >::gemm_inner ( const CVecRef< AL > &  xx,
const CVecRef< AR > &  yy 
)
inlineoverridevirtual

Perform dot() on multiple pairs of containers in an efficient manner

Implements molpro::linalg::array::ArrayHandler< AL, AR >.

◆ gemm_outer()

template<class AL , class AR = AL>
void molpro::linalg::array::ArrayHandlerDefault< AL, AR >::gemm_outer ( const Matrix< value_type >  alphas,
const CVecRef< AR > &  xx,
const VecRef< AL > &  yy 
)
inlineoverridevirtual

Perform axpy() on multiple pairs of containers in an efficient manner

Implements molpro::linalg::array::ArrayHandler< AL, AR >.

◆ lazy_handle()

template<class AL , class AR = AL>
ProxyHandle molpro::linalg::array::ArrayHandlerDefault< AL, AR >::lazy_handle ( )
inlineoverridevirtual

Returns a lazy handle. Most implementations simply need to call the overload: return lazy_handle(*this);.

Implements molpro::linalg::array::ArrayHandler< AL, AR >.

◆ scal()

template<class AL , class AR = AL>
void molpro::linalg::array::ArrayHandlerDefault< AL, AR >::scal ( value_type  alpha,
AL &  x 
)
inlineoverridevirtual

◆ select()

template<class AL , class AR = AL>
std::map< size_t, value_type_abs > molpro::linalg::array::ArrayHandlerDefault< AL, AR >::select ( size_t  n,
const AL &  x,
bool  max = false,
bool  ignore_sign = false 
)
inlineoverridevirtual

Select n indices with largest (or smallest) actual (or absolute) value.

Parameters
nnumber of indices to select
xarray to examine
maxIf true, select largest values, otherwise smallest
ignore_signIf true, consider std::abs() of elements
Returns
map of indices and corresponding values

Implements molpro::linalg::array::ArrayHandler< AL, AR >.

◆ select_max_dot()

template<class AL , class AR = AL>
std::map< size_t, value_type_abs > molpro::linalg::array::ArrayHandlerDefault< AL, AR >::select_max_dot ( size_t  n,
const AL &  x,
const AR &  y 
)
inlineoverridevirtual

Select n indices with largest by absolute value contributions to the dot product.

This is necessary for perturbation theory.

Parameters
nnumber of indices to select
xleft array
yright array
Returns
map of indices and corresponding x,y product

Implements molpro::linalg::array::ArrayHandler< AL, AR >.