42#ifndef STOKHOS_SPARSE3TENSOR_HPP
43#define STOKHOS_SPARSE3TENSOR_HPP
55 template <
typename ordinal_type,
typename value_type>
60 typedef std::map<const ordinal_type, value_type>
i_map;
61 typedef std::map<const ordinal_type, i_map>
ji_map;
62 typedef std::map<const ordinal_type, ji_map>
kji_map;
64 typedef std::map<const ordinal_type, value_type>
j_map;
65 typedef std::map<const ordinal_type, j_map>
kj_map;
66 typedef std::map<const ordinal_type, kj_map>
ikj_map;
109 void add_term(ordinal_type i, ordinal_type
j, ordinal_type k,
110 const value_type& c);
113 void sum_term(ordinal_type i, ordinal_type
j, ordinal_type k,
114 const value_type& c);
128 void print(std::ostream& os)
const;
131 value_type
getValue(ordinal_type i, ordinal_type
j, ordinal_type k)
const;
140 ordinal_type
num_k()
const;
193 ordinal_type
num_i()
const;
282 template <
typename ordinal_type,
typename value_type>
285 const Sparse3Tensor<ordinal_type, value_type>& Cijk) {
293 template <
typename index_iterator,
typename value_iterator>
295 index(
const SparseArrayIterator<index_iterator, value_iterator>& it) {
302 template <
typename index_iterator,
typename value_iterator>
304 index(
const SparseArrayReverseIterator<index_iterator, value_iterator>& it)
313 template <
typename index_iterator,
typename value_iterator>
315 value(
const SparseArrayIterator<index_iterator, value_iterator>& it) {
Data structure storing a sparse 3-tensor C(i,j,k) in a a compressed format.
ordinal_type num_j(const k_iterator &k) const
Number of j entries in C(i,j,k) for given k.
i_iterator i_end() const
Iterator pointing to last k entry.
void sum_term(ordinal_type i, ordinal_type j, ordinal_type k, const value_type &c)
Add new term for given (i,j,k) and sum in if already there.
ikj_sparse_array::const_reverse_iterator i_reverse_iterator
Iterator for looping over i entries in reverse.
SparseArray< ordinal_type, value_type > i_sparse_array
k_reverse_iterator k_rbegin() const
Reverse iterator pointing to last k entry.
i_reverse_iterator i_rbegin() const
Reverse iterator pointing to last k entry.
k_reverse_iterator k_rend() const
Reverse iterator pointing to first k entry.
kji_sparse_array kji_array
kji indices and values in Cijk (data structure for iterating)
j_sparse_array::const_iterator ikj_iterator
Iterator for looping over j entries given i and k.
kj_iterator j_end(const k_iterator &k) const
Iterator pointing to last j entry for given k.
kj_sparse_array::const_iterator ik_iterator
Iterator for looping over k entries given i.
SparseArray< ordinal_type, ji_sparse_array > kji_sparse_array
void print(std::ostream &os) const
Print tensor.
ordinal_type num_i() const
Number of i entries in C(i,j,k)
k_iterator k_begin() const
Iterator pointing to first k entry.
Sparse3Tensor & operator=(const Sparse3Tensor &b)
kji_sparse_array::const_iterator k_iterator
Iterator for looping over k entries.
std::map< const ordinal_type, value_type > i_map
ikj_sparse_array ikj_array
kji indices and values in Cijk (data structure for iterating)
value_type getValue(ordinal_type i, ordinal_type j, ordinal_type k) const
Get Cijk value for a given i, j, k indices.
i_reverse_iterator i_rend() const
Reverse iterator pointing to first k entry.
ikj_sparse_array::const_iterator i_iterator
Iterator for looping over i entries.
std::map< const ordinal_type, kj_map > ikj_map
SparseArrayIterator< index_iterator, value_iterator >::value_reference value(const SparseArrayIterator< index_iterator, value_iterator > &it)
void fillComplete()
Signal all terms have been added.
std::map< const ordinal_type, ji_map > kji_map
Sparse3Tensor()
Constructor.
kji_map kji_data
kji indices and values in Cijk (data structure for filling)
kj_iterator j_begin(const k_iterator &k) const
Iterator pointing to first j entry for given k.
k_iterator find_k(ordinal_type k) const
Return k iterator for given index k.
ikj_map ikj_data
ikj indices and values in Cijk (data structure for filling)
~Sparse3Tensor()
Destructor.
SparseArray< ordinal_type, j_sparse_array > kj_sparse_array
ordinal_type num_k() const
Number of k entries in C(i,j,k)
i_iterator i_begin() const
Iterator pointing to first k entry.
SparseArrayIterator< index_iterator, value_iterator >::value_type index(const SparseArrayIterator< index_iterator, value_iterator > &it)
kj_iterator find_j(const k_iterator &k, ordinal_type j) const
Return j iterator given k iterator and index j.
Sparse3Tensor(const Sparse3Tensor &)
SparseArray< ordinal_type, value_type > j_sparse_array
kji_sparse_array::const_reverse_iterator k_reverse_iterator
Iterator for looping over k entries in reverse.
ordinal_type num_entries() const
Return number of non-zero entries.
j_sparse_array::const_iterator kji_iterator
Iterator for looping over i entries given k and j.
ji_sparse_array::const_iterator kj_iterator
Iterator for looping over j entries given k.
SparseArrayReverseIterator< index_iterator, value_iterator >::value_type index(const SparseArrayReverseIterator< index_iterator, value_iterator > &it)
bool fill_completed
Indicate whether fillComplete() has been called.
kji_iterator find_i(const kj_iterator &j, ordinal_type i) const
Return i iterator given j iterator and index i.
SparseArray< ordinal_type, kj_sparse_array > ikj_sparse_array
k_iterator k_end() const
Iterator pointing to last k entry.
std::map< const ordinal_type, j_map > kj_map
void add_term(ordinal_type i, ordinal_type j, ordinal_type k, const value_type &c)
Add new term for given (i,j,k)
SparseArray< ordinal_type, i_sparse_array > ji_sparse_array
std::map< const ordinal_type, i_map > ji_map
std::map< const ordinal_type, value_type > j_map
bool fillCompleted() const
Return whether fillComplete() has been called.
Top-level namespace for Stokhos classes and functions.
std::ostream & operator<<(std::ostream &os, const ProductContainer< coeff_type > &vec)
Bi-directional iterator for traversing a sparse array.
base_type::value_type value_type
std::iterator_traits< value_iterator_type >::reference value_reference
base_type::value_type value_type
SparseArrayIterator< index_const_iterator, value_const_iterator > const_iterator
SparseArrayReverseIterator< index_const_iterator, value_const_iterator > const_reverse_iterator