Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::ConcatDomainOp< Backend, Op1, Op2 > Class Template Reference

The domain concatenation Op := [op1 | op2]. More...

#include <linear_ops.hpp>

Classes

struct  Workspace

Public Types

using backend_t = Backend
using op1_storage_t = ::mundy::storage<Op1>
using op2_storage_t = ::mundy::storage<Op2>

Public Member Functions

 ConcatDomainOp (backend_t, Op1 &&op1, Op2 &&op2)
Backend backend () const
const auto & op1 () const
const auto & op2 () const
size_t domain_size () const
size_t range_size () const
auto make_domain_vector () const
auto make_range_vector () const
auto make_workspace (bool committed=false) const
template<class Y2Vector, class Op1Workspace, class Op2Workspace>
auto make_workspace (Y2Vector &&y2, Op1Workspace &&op1_workspace, Op2Workspace &&op2_workspace, bool committed=false) const
template<class XVector, class YVector, class WorkspaceType>
void apply (const XVector &x, YVector &y, WorkspaceType &workspace) const
template<class XVector, class YVector>
void apply (const XVector &x, YVector &y) const

Detailed Description

template<class Backend, class Op1, class Op2>
class mundy::ConcatDomainOp< Backend, Op1, Op2 >

op1 and op2 share a range but have independent domains: apply([x1; x2]) = op1(x1) + op2(x2). x/y must be Kokkos::View-backed (apply splits x via Kokkos::subview).

Member Typedef Documentation

◆ backend_t

template<class Backend, class Op1, class Op2>
using mundy::ConcatDomainOp< Backend, Op1, Op2 >::backend_t = Backend

◆ op1_storage_t

template<class Backend, class Op1, class Op2>
using mundy::ConcatDomainOp< Backend, Op1, Op2 >::op1_storage_t = ::mundy::storage<Op1>

◆ op2_storage_t

template<class Backend, class Op1, class Op2>
using mundy::ConcatDomainOp< Backend, Op1, Op2 >::op2_storage_t = ::mundy::storage<Op2>

Constructor & Destructor Documentation

◆ ConcatDomainOp()

template<class Backend, class Op1, class Op2>
mundy::ConcatDomainOp< Backend, Op1, Op2 >::ConcatDomainOp ( backend_t ,
Op1 && op1,
Op2 && op2 )
inline

Member Function Documentation

◆ backend()

template<class Backend, class Op1, class Op2>
Backend mundy::ConcatDomainOp< Backend, Op1, Op2 >::backend ( ) const
inline

◆ op1()

template<class Backend, class Op1, class Op2>
const auto & mundy::ConcatDomainOp< Backend, Op1, Op2 >::op1 ( ) const
inline

◆ op2()

template<class Backend, class Op1, class Op2>
const auto & mundy::ConcatDomainOp< Backend, Op1, Op2 >::op2 ( ) const
inline

◆ domain_size()

template<class Backend, class Op1, class Op2>
size_t mundy::ConcatDomainOp< Backend, Op1, Op2 >::domain_size ( ) const
inline

◆ range_size()

template<class Backend, class Op1, class Op2>
size_t mundy::ConcatDomainOp< Backend, Op1, Op2 >::range_size ( ) const
inline

◆ make_domain_vector()

template<class Backend, class Op1, class Op2>
auto mundy::ConcatDomainOp< Backend, Op1, Op2 >::make_domain_vector ( ) const
inline

◆ make_range_vector()

template<class Backend, class Op1, class Op2>
auto mundy::ConcatDomainOp< Backend, Op1, Op2 >::make_range_vector ( ) const
inline

◆ make_workspace() [1/2]

template<class Backend, class Op1, class Op2>
auto mundy::ConcatDomainOp< Backend, Op1, Op2 >::make_workspace ( bool committed = false) const
inline

◆ make_workspace() [2/2]

template<class Backend, class Op1, class Op2>
template<class Y2Vector, class Op1Workspace, class Op2Workspace>
auto mundy::ConcatDomainOp< Backend, Op1, Op2 >::make_workspace ( Y2Vector && y2,
Op1Workspace && op1_workspace,
Op2Workspace && op2_workspace,
bool committed = false ) const
inline

◆ apply() [1/2]

template<class Backend, class Op1, class Op2>
template<class XVector, class YVector, class WorkspaceType>
void mundy::ConcatDomainOp< Backend, Op1, Op2 >::apply ( const XVector & x,
YVector & y,
WorkspaceType & workspace ) const
inline

◆ apply() [2/2]

template<class Backend, class Op1, class Op2>
template<class XVector, class YVector>
void mundy::ConcatDomainOp< Backend, Op1, Op2 >::apply ( const XVector & x,
YVector & y ) const
inline