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>
14template <
class AL,
class AR = AL>
23 AL
copy(
const AR &source)
override {
return AL{source}; };
25 void copy(AL &x,
const AR &y)
override { x = y; };
31 void axpy(
value_type alpha,
const AR &x, AL &y)
override { y.axpy(alpha, x); }
36 gemm_outer_default(*
this, alphas, xx, yy);
41 return gemm_inner_default(*
this, xx, yy);
44 std::map<size_t, value_type_abs>
select_max_dot(
size_t n,
const AL &x,
const AR &y)
override {
45 return x.select_max_dot(n, y);
48 std::map<size_t, value_type_abs>
select(
size_t n,
const AL &x,
bool max =
false,
bool ignore_sign =
false)
override {
49 return x.select(n, max, ignore_sign);
Fall back handler that calls member functions of arrays.
Definition ArrayHandlerDefault.h:15
Matrix< value_type > gemm_inner(const CVecRef< AL > &xx, const CVecRef< AR > &yy) override
Definition ArrayHandlerDefault.h:39
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:48
AL copy(const AR &source) override
Definition ArrayHandlerDefault.h:23
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.
Definition ArrayHandlerDefault.h:44
void fill(value_type alpha, AL &x) override
Definition ArrayHandlerDefault.h:29
void copy(AL &x, const AR &y) override
Copy content of y into x.
Definition ArrayHandlerDefault.h:25
void axpy(value_type alpha, const AR &x, AL &y) override
Definition ArrayHandlerDefault.h:31
void scal(value_type alpha, AL &x) override
Definition ArrayHandlerDefault.h:27
ProxyHandle lazy_handle() override
Returns a lazy handle. Most implementations simply need to call the overload: return lazy_handle(*thi...
Definition ArrayHandlerDefault.h:52
void gemm_outer(const Matrix< value_type > alphas, const CVecRef< AR > &xx, const VecRef< AL > &yy) override
Definition ArrayHandlerDefault.h:35
value_type dot(const AL &x, const AR &y) override
The hermitian inner product <x|y>: conjugate-linear in x, linear in y.
Definition ArrayHandlerDefault.h:33
A convenience wrapper around a pointer to the LazyHandle.
Definition ArrayHandler.h:392
Enhances various operations between pairs of arrays and allows dynamic code injection with uniform in...
Definition ArrayHandler.h:163
typename array::mapped_or_value_type_t< AR > value_type_R
Definition ArrayHandler.h:181
typename array::mapped_or_value_type_t< AL > value_type_L
Definition ArrayHandler.h:180
decltype(value_type_L{} *value_type_R{}) value_type
Definition ArrayHandler.h:182
decltype(check_abs< value_type >()) value_type_abs
Definition ArrayHandler.h:183
virtual void error(const std::string &message)
Throws an error.
Definition ArrayHandler.h:276
Matrix container that allows simple data access, slicing, copying and resizing without loosing data.
Definition Matrix.h:32
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:288
Matrix< typename Handler::value_type > gemm_inner_default(Handler &handler, const CVecRef< AL > &xx, const CVecRef< AR > &yy)
Definition gemm.h:298
Definition ArrayHandler.h:19