Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::ScaledOp< Backend, Scalar, Op > Class Template Reference

The scalar multiple Op := alpha * op. More...

#include <linear_ops.hpp>

Public Types

using backend_t = Backend
using op_storage_t = ::mundy::storage<Op>

Public Member Functions

 ScaledOp (backend_t, Scalar alpha, Op &&op)
Backend backend () const
Scalar alpha () const
const auto & op () const
size_t domain_size () const
size_t range_size () const
auto make_domain_vector () const
auto make_range_vector () const
template<class XVector, class YVector>
void apply (const XVector &x, YVector &y) const

Detailed Description

template<class Backend, class Scalar, class Op>
class mundy::ScaledOp< Backend, Scalar, Op >

Applies via Backend::apply(alpha, op, x, beta, y): the fused path when op provides HasScaledApplyMember, else an apply-then-axpby fallback. Holds no persistent workspace; op's own (if any) is rebuilt per apply.

Member Typedef Documentation

◆ backend_t

template<class Backend, class Scalar, class Op>
using mundy::ScaledOp< Backend, Scalar, Op >::backend_t = Backend

◆ op_storage_t

template<class Backend, class Scalar, class Op>
using mundy::ScaledOp< Backend, Scalar, Op >::op_storage_t = ::mundy::storage<Op>

Constructor & Destructor Documentation

◆ ScaledOp()

template<class Backend, class Scalar, class Op>
mundy::ScaledOp< Backend, Scalar, Op >::ScaledOp ( backend_t ,
Scalar alpha,
Op && op )
inline

Member Function Documentation

◆ backend()

template<class Backend, class Scalar, class Op>
Backend mundy::ScaledOp< Backend, Scalar, Op >::backend ( ) const
inline

◆ alpha()

template<class Backend, class Scalar, class Op>
Scalar mundy::ScaledOp< Backend, Scalar, Op >::alpha ( ) const
inline

◆ op()

template<class Backend, class Scalar, class Op>
const auto & mundy::ScaledOp< Backend, Scalar, Op >::op ( ) const
inline

◆ domain_size()

template<class Backend, class Scalar, class Op>
size_t mundy::ScaledOp< Backend, Scalar, Op >::domain_size ( ) const
inline

◆ range_size()

template<class Backend, class Scalar, class Op>
size_t mundy::ScaledOp< Backend, Scalar, Op >::range_size ( ) const
inline

◆ make_domain_vector()

template<class Backend, class Scalar, class Op>
auto mundy::ScaledOp< Backend, Scalar, Op >::make_domain_vector ( ) const
inline

◆ make_range_vector()

template<class Backend, class Scalar, class Op>
auto mundy::ScaledOp< Backend, Scalar, Op >::make_range_vector ( ) const
inline

◆ apply()

template<class Backend, class Scalar, class Op>
template<class XVector, class YVector>
void mundy::ScaledOp< Backend, Scalar, Op >::apply ( const XVector & x,
YVector & y ) const
inline