Sparse product tensor with replicated entries to provide subsets with a given coordinate.
More...
|
template<class M > |
KOKKOS_INLINE_FUNCTION | CrsProductTensor (const CrsProductTensor< value_type, execution_space, M > &rhs) |
|
template<class M > |
KOKKOS_INLINE_FUNCTION CrsProductTensor & | operator= (const CrsProductTensor< value_type, execution_space, M > &rhs) |
|
KOKKOS_INLINE_FUNCTION size_type | dimension () const |
| Dimension of the tensor.
|
|
KOKKOS_INLINE_FUNCTION bool | is_empty () const |
| Is the tensor empty.
|
|
KOKKOS_INLINE_FUNCTION size_type | entry_count () const |
| Number of sparse entries.
|
|
KOKKOS_INLINE_FUNCTION size_type | entry_maximum () const |
| Maximum sparse entries for any coordinate.
|
|
KOKKOS_INLINE_FUNCTION size_type | entry_begin (size_type i) const |
| Begin entries with a coordinate 'i'.
|
|
KOKKOS_INLINE_FUNCTION size_type | entry_end (size_type i) const |
| End entries with a coordinate 'i'.
|
|
KOKKOS_INLINE_FUNCTION size_type | num_entry (size_type i) const |
| Number of entries with a coordinate 'i'.
|
|
KOKKOS_INLINE_FUNCTION const size_type & | coord (const size_type entry, const size_type c) const |
| Coordinates of an entry.
|
|
KOKKOS_INLINE_FUNCTION const size_type & | coord (const size_type entry) const |
| Coordinates of an entry.
|
|
KOKKOS_INLINE_FUNCTION const value_type & | value (const size_type entry) const |
| Value of an entry.
|
|
KOKKOS_INLINE_FUNCTION size_type | num_non_zeros () const |
| Number of non-zero's.
|
|
KOKKOS_INLINE_FUNCTION size_type | num_flops () const |
| Number flop's per multiply-add.
|
|
KOKKOS_INLINE_FUNCTION size_type | avg_entries_per_row () const |
| Number average number of entries per row.
|
|
template<typename ValueType, class ExecutionSpace, class Memory = void>
class Stokhos::CrsProductTensor< ValueType, ExecutionSpace, Memory >
Sparse product tensor with replicated entries to provide subsets with a given coordinate.
This allows product tensor multiplication to be partitioned on a given coordinate values.
for ( size_type i = 0 ; i < p.dimension() ; ++i ) { y[i] = 0 ; for ( size_type e = p.entry_begin(i) ; e < p.entry_end(i) ; ++e ) { const size_type j = p.coord(e,0); const size_type k = p.coord(e,1); Scalar tmp = a[j] * x[k] ; if ( j != k ) tmp += a[k] * x[j] ; y[i] += p.value(e) * tmp ; } }