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;
282 template <
typename ordinal_type,
typename value_type>
293 template <
typename index_iterator,
typename value_iterator>
302 template <
typename index_iterator,
typename value_iterator>
313 template <
typename index_iterator,
typename value_iterator>
ik_iterator k_begin(const i_reverse_iterator &i) const
Iterator pointing to first k entry for given i.
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
SparseArray< int, double > i_sparse_array
k_reverse_iterator k_rbegin() const
Reverse iterator pointing to last k entry.
i_iterator find_i(ordinal_type i) const
Return i iterator for given index i.
ik_iterator k_end(const i_iterator &i) const
Iterator pointing to last k entry for given i.
ik_iterator find_k(const i_iterator &i, ordinal_type k) const
Return k iterator given i iterator and index k.
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
j_sparse_array::const_iterator ikj_iterator
ikj_iterator j_begin(const ik_iterator &k) const
Iterator pointing to first j entry for given i and k.
kj_sparse_array::const_iterator ik_iterator
ikj_iterator find_j(const ik_iterator &k, ordinal_type j) const
Return j iterator given k iterator and index j.
kj_iterator j_begin(const k_reverse_iterator &k) const
Iterator pointing to first j entry for given k.
ik_iterator k_end(const i_reverse_iterator &i) const
Iterator pointing to last k entry for given i.
SparseArray< int, 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
std::map< const int, double > i_map
ikj_sparse_array ikj_array
value_type getValue(ordinal_type i, ordinal_type j, ordinal_type k) const
Get Cijk value for a given i, j, k indices.
ikj_iterator j_end(const ik_iterator &k) const
Iterator pointing to last j entry for given i and k.
i_reverse_iterator i_rend() const
Reverse iterator pointing to first k entry.
ikj_sparse_array::const_iterator i_iterator
kj_iterator j_begin(const k_iterator &k) const
Iterator pointing to first j entry for given k.
std::map< const int, kj_map > ikj_map
ordinal_type num_k(const i_iterator &i) const
Number of k entries in C(i,j,k) for given i.
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 int, ji_map > kji_map
kji_iterator i_begin(const kj_iterator &j) const
Iterator pointing to first i entry for given j and k.
Sparse3Tensor()
Constructor.
k_iterator find_k(ordinal_type k) const
Return k iterator for given index k.
~Sparse3Tensor()
Destructor.
ordinal_type num_i(const kj_iterator &j) const
Number of i entries in C(i,j,k) for given k and j.
SparseArray< int, j_sparse_array > kj_sparse_array
ordinal_type num_k() const
Number of k entries in C(i,j,k)
kj_iterator j_end(const k_iterator &k) const
Iterator pointing to last j entry for given k.
kji_iterator i_end(const kj_iterator &j) const
Iterator pointing to last i entry for given j and 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)
Sparse3Tensor(const Sparse3Tensor &)
SparseArray< int, double > j_sparse_array
kji_sparse_array::const_reverse_iterator k_reverse_iterator
ordinal_type num_entries() const
Return number of non-zero entries.
j_sparse_array::const_iterator kji_iterator
ji_sparse_array::const_iterator kj_iterator
kj_iterator find_j(const k_iterator &k, ordinal_type j) const
Return j iterator given k iterator and index j.
SparseArrayReverseIterator< index_iterator, value_iterator >::value_type index(const SparseArrayReverseIterator< index_iterator, value_iterator > &it)
kji_iterator find_i(const kj_iterator &j, ordinal_type i) const
Return i iterator given j iterator and index i.
SparseArray< int, kj_sparse_array > ikj_sparse_array
k_iterator k_end() const
Iterator pointing to last k entry.
kj_iterator j_end(const k_reverse_iterator &k) const
Iterator pointing to last j entry for given k.
ordinal_type num_j(const ik_iterator &k) const
Number of j entries in C(i,j,k) for given i and k.
std::map< const int, 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< int, i_sparse_array > ji_sparse_array
std::map< const int, i_map > ji_map
std::map< const int, double > j_map
bool fillCompleted() const
Return whether fillComplete() has been called.
ik_iterator k_begin(const i_iterator &i) const
Iterator pointing to first k entry for given i.
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
value_reference value() const
Return value associated with iterator.
std::iterator_traits< value_iterator_type >::reference value_reference
Bi-directional reverse iterator for traversing a sparse array.
base_type::value_type value_type
Container for a "sparse" array.
SparseArrayIterator< index_const_iterator, value_const_iterator > const_iterator
SparseArrayReverseIterator< index_const_iterator, value_const_iterator > const_reverse_iterator