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

Array handler between two sparse arrays (e.g. std::map) More...

#include <ArrayHandlerSparse.h>

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

Detailed Description

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

Array handler between two sparse arrays (e.g. std::map)

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>, i.e. conjugate-linear in x and 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 > 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<typename AL , typename AR = AL>
void molpro::linalg::array::ArrayHandlerSparse< AL, AR >::axpy ( value_type  alpha,
const AR &  x,
AL &  y 
)
inlineoverridevirtual

◆ copy() [1/2]

template<typename AL , typename AR = AL>
void molpro::linalg::array::ArrayHandlerSparse< 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<typename AL , typename AR = AL>
AL molpro::linalg::array::ArrayHandlerSparse< AL, AR >::copy ( const AR &  source)
inlineoverridevirtual

◆ dot()

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

The hermitian inner product <x|y>, i.e. conjugate-linear in x and linear in y.

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

◆ fill()

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

◆ gemm_inner()

template<typename AL , typename AR = AL>
Matrix< value_type > molpro::linalg::array::ArrayHandlerSparse< 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<typename AL , typename AR = AL>
void molpro::linalg::array::ArrayHandlerSparse< 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<typename AL , typename AR = AL>
ProxyHandle molpro::linalg::array::ArrayHandlerSparse< 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<typename AL , typename AR = AL>
void molpro::linalg::array::ArrayHandlerSparse< AL, AR >::scal ( value_type  alpha,
AL &  x 
)
inlineoverridevirtual

◆ select()

template<typename AL , typename AR = AL>
std::map< size_t, value_type > molpro::linalg::array::ArrayHandlerSparse< 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<typename AL , typename AR = AL>
std::map< size_t, value_type_abs > molpro::linalg::array::ArrayHandlerSparse< 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 >.