iterative-solver 0.0
ArrayHandlerDefault.h
1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_ARRAYHANDLERDEFAULT_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_ARRAYHANDLERDEFAULT_H
3#include <molpro/Profiler.h>
4#include <molpro/linalg/array/ArrayHandler.h>
5#include <molpro/linalg/array/util/gemm.h>
6
9
10namespace molpro::linalg::array {
11
15template <class AL, class AR = AL>
16class ArrayHandlerDefault : public ArrayHandler<AL, AR> {
17public:
23
24 AL copy(const AR &source) override { return AL{source}; };
25
26 void copy(AL &x, const AR &y) override { x = y; };
27
28 void scal(value_type alpha, AL &x) override { x.scal(alpha); }
29
30 void fill(value_type alpha, AL &x) override { x.fill(alpha); }
31
32 void axpy(value_type alpha, const AR &x, AL &y) override { y.axpy(alpha, x); }
33
34 value_type dot(const AL &x, const AR &y) override { return x.dot(y); }
35
36 void gemm_outer(const Matrix<value_type> alphas, const CVecRef<AR> &xx, const VecRef<AL> &yy) override {
37 gemm_outer_default(*this, alphas, xx, yy);
38 }
39
40 Matrix<value_type> gemm_inner(const CVecRef<AL> &xx, const CVecRef<AR> &yy) override {
41 auto prof = molpro::Profiler::single()->push("ArrayHandlerDDiskSparse::gemm_inner_default");
42 return gemm_inner_default(*this, xx, yy);
43 }
44
45 std::map<size_t, value_type_abs> select_max_dot(size_t n, const AL &x, const AR &y) override {
46 return x.select_max_dot(n, y);
47 }
48
49 std::map<size_t, value_type_abs> select(size_t n, const AL &x, bool max = false, bool ignore_sign = false) override {
50 return x.select(n, max, ignore_sign);
51 }
52
53 ProxyHandle lazy_handle() override { return this->lazy_handle(*this); };
54
55protected:
56 using ArrayHandler<AL, AR>::lazy_handle;
57 using ArrayHandler<AL, AR>::error;
58};
59
60} // namespace molpro::linalg::array
61
62#endif // LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_ARRAYHANDLERDEFAULT_H
Fall back handler that calls member functions of arrays.
Definition: ArrayHandlerDefault.h:16
Matrix< value_type > gemm_inner(const CVecRef< AL > &xx, const CVecRef< AR > &yy) override
Definition: ArrayHandlerDefault.h:40
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.
Definition: ArrayHandlerDefault.h:49
AL copy(const AR &source) override
Definition: ArrayHandlerDefault.h:24
std::map< size_t, value_type_abs > select_max_dot(size_t n, const AL &x, const AR &y) override
Definition: ArrayHandlerDefault.h:45
void fill(value_type alpha, AL &x) override
Definition: ArrayHandlerDefault.h:30
void copy(AL &x, const AR &y) override
Definition: ArrayHandlerDefault.h:26
void axpy(value_type alpha, const AR &x, AL &y) override
Definition: ArrayHandlerDefault.h:32
void scal(value_type alpha, AL &x) override
Definition: ArrayHandlerDefault.h:28
ProxyHandle lazy_handle() override
Returns a lazy handle. Most implementations simply need to call the overload: return lazy_handle(*thi...
Definition: ArrayHandlerDefault.h:53
void gemm_outer(const Matrix< value_type > alphas, const CVecRef< AR > &xx, const VecRef< AL > &yy) override
Definition: ArrayHandlerDefault.h:36
value_type dot(const AL &x, const AR &y) override
Definition: ArrayHandlerDefault.h:34
Enhances various operations between pairs of arrays and allows dynamic code injection with uniform in...
Definition: ArrayHandler.h:162
decltype(value_type_L{} *value_type_R{}) value_type
Definition: ArrayHandler.h:181
virtual void error(const std::string &message)
Throws an error.
Definition: ArrayHandler.h:268
Matrix container that allows simple data access, slicing, copying and resizing without loosing data.
Definition: Matrix.h:28
static std::shared_ptr< Profiler > single()
void gemm_outer_default(Handler &handler, const Matrix< typename Handler::value_type > alphas, const CVecRef< AR > &xx, const VecRef< AL > &yy)
Definition: gemm.h:258
Matrix< typename Handler::value_type > gemm_inner_default(Handler &handler, const CVecRef< AL > &xx, const CVecRef< AR > &yy)
Definition: gemm.h:268
Definition: ArrayHandler.h:22