Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
Stokhos_Sparse3Tensor.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Stokhos Package
5 // Copyright (2009) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Eric T. Phipps (etphipp@sandia.gov).
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #ifndef STOKHOS_SPARSE3TENSOR_HPP
43 #define STOKHOS_SPARSE3TENSOR_HPP
44 
45 #include <ostream>
46 #include <map>
47 #include "Stokhos_SparseArray.hpp"
48 
49 namespace Stokhos {
50 
55  template <typename ordinal_type, typename value_type>
56  class Sparse3Tensor {
57 
58  private:
59 
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;
63 
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;
67 
71 
75 
76  public:
77 
80 
83 
86 
89 
92 
95 
98 
101 
103  Sparse3Tensor();
104 
107 
110  const value_type& c);
111 
114  const value_type& c);
115 
117 
122  void fillComplete();
123 
125  bool fillCompleted() const;
126 
128  void print(std::ostream& os) const;
129 
132 
134  ordinal_type num_entries() const;
135 
138 
140  ordinal_type num_k() const;
141 
143  ordinal_type num_j(const k_iterator& k) const;
144 
146  ordinal_type num_i(const kj_iterator& j) const;
147 
149  k_iterator find_k(ordinal_type k) const;
150 
152  kj_iterator find_j(const k_iterator& k, ordinal_type j) const;
153 
155  kji_iterator find_i(const kj_iterator& j, ordinal_type i) const;
156 
158  k_iterator k_begin() const;
159 
161  k_iterator k_end() const;
162 
165 
167  k_reverse_iterator k_rend() const;
168 
170  kj_iterator j_begin(const k_iterator& k) const;
171 
173  kj_iterator j_end(const k_iterator& k) const;
174 
176  kj_iterator j_begin(const k_reverse_iterator& k) const;
177 
179  kj_iterator j_end(const k_reverse_iterator& k) const;
180 
182  kji_iterator i_begin(const kj_iterator& j) const;
183 
185  kji_iterator i_end(const kj_iterator& j) const;
186 
188 
191 
193  ordinal_type num_i() const;
194 
196  ordinal_type num_k(const i_iterator& i) const;
197 
199  ordinal_type num_j(const ik_iterator& k) const;
200 
202  i_iterator find_i(ordinal_type i) const;
203 
205  ik_iterator find_k(const i_iterator& i, ordinal_type k) const;
206 
208  ikj_iterator find_j(const ik_iterator& k, ordinal_type j) const;
209 
211  i_iterator i_begin() const;
212 
214  i_iterator i_end() const;
215 
218 
220  i_reverse_iterator i_rend() const;
221 
223  ik_iterator k_begin(const i_iterator& i) const;
224 
226  ik_iterator k_end(const i_iterator& i) const;
227 
229  ik_iterator k_begin(const i_reverse_iterator& i) const;
230 
232  ik_iterator k_end(const i_reverse_iterator& i) const;
233 
235  ikj_iterator j_begin(const ik_iterator& k) const;
236 
238  ikj_iterator j_end(const ik_iterator& k) const;
239 
241 
242  private:
243 
244  // Prohibit copying
246 
247  // Prohibit Assignment
249 
250  protected:
251 
254 
257 
260 
263 
265 
268 
271 
274 
276 
277  }; // class Sparse3Tensor
278 
282  template <typename ordinal_type, typename value_type>
283  std::ostream&
284  operator << (std::ostream& os,
286  Cijk.print(os);
287  return os;
288  }
289 
293  template <typename index_iterator, typename value_iterator>
296  return *it;
297  }
298 
302  template <typename index_iterator, typename value_iterator>
305  {
306  return *it;
307  }
308 
313  template <typename index_iterator, typename value_iterator>
316  return it.value();
317  }
318 
319 } // namespace Stokhos
320 
321 // Include template definitions
323 
324 #endif // STOKHOS_SPARSE3TENSOR_HPP
Stokhos::Sparse3Tensor::i_map
std::map< const ordinal_type, value_type > i_map
Definition: Stokhos_Sparse3Tensor.hpp:60
Stokhos::Sparse3Tensor::i_reverse_iterator
ikj_sparse_array::const_reverse_iterator i_reverse_iterator
Iterator for looping over i entries in reverse.
Definition: Stokhos_Sparse3Tensor.hpp:94
Stokhos::Sparse3Tensor::sum_term
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.
Definition: Stokhos_Sparse3TensorImp.hpp:69
Stokhos::SparseArray
Container for a "sparse" array.
Definition: Stokhos_SparseArray.hpp:63
Stokhos::Sparse3Tensor::fillComplete
void fillComplete()
Signal all terms have been added.
Definition: Stokhos_Sparse3TensorImp.hpp:83
Stokhos::Sparse3Tensor::find_j
kj_iterator find_j(const k_iterator &k, ordinal_type j) const
Return j iterator given k iterator and index j.
Definition: Stokhos_Sparse3TensorImp.hpp:263
Stokhos::SparseArrayIterator
Bi-directional iterator for traversing a sparse array.
Definition: Stokhos_SparseArray.hpp:56
Stokhos::Sparse3Tensor::i_rbegin
i_reverse_iterator i_rbegin() const
Reverse iterator pointing to last k entry.
Definition: Stokhos_Sparse3TensorImp.hpp:503
Stokhos::Sparse3Tensor::ikj_map
std::map< const ordinal_type, kj_map > ikj_map
Definition: Stokhos_Sparse3Tensor.hpp:66
Stokhos::Sparse3Tensor::ikj_sparse_array
SparseArray< ordinal_type, kj_sparse_array > ikj_sparse_array
Definition: Stokhos_Sparse3Tensor.hpp:74
Stokhos::Sparse3Tensor::fillCompleted
bool fillCompleted() const
Return whether fillComplete() has been called.
Definition: Stokhos_Sparse3TensorImp.hpp:143
Stokhos::Sparse3Tensor::fill_completed
bool fill_completed
Indicate whether fillComplete() has been called.
Definition: Stokhos_Sparse3Tensor.hpp:253
Stokhos::Sparse3Tensor::k_rend
k_reverse_iterator k_rend() const
Reverse iterator pointing to first k entry.
Definition: Stokhos_Sparse3TensorImp.hpp:323
Stokhos::Sparse3Tensor::ikj_array
ikj_sparse_array ikj_array
kji indices and values in Cijk (data structure for iterating)
Definition: Stokhos_Sparse3Tensor.hpp:273
Stokhos::Sparse3Tensor::j_end
kj_iterator j_end(const k_iterator &k) const
Iterator pointing to last j entry for given k.
Definition: Stokhos_Sparse3TensorImp.hpp:347
Stokhos::Sparse3Tensor::kj_sparse_array
SparseArray< ordinal_type, j_sparse_array > kj_sparse_array
Definition: Stokhos_Sparse3Tensor.hpp:73
TotalOrderBasisUnitTest::value_type
double value_type
Definition: Stokhos_LexicographicTreeBasisUnitTest.cpp:70
Stokhos::Sparse3Tensor::kj_iterator
ji_sparse_array::const_iterator kj_iterator
Iterator for looping over j entries given k.
Definition: Stokhos_Sparse3Tensor.hpp:85
Stokhos::operator<<
std::ostream & operator<<(std::ostream &os, const ProductContainer< coeff_type > &vec)
Definition: Stokhos_ProductContainer.hpp:184
Stokhos::Sparse3Tensor::ikj_iterator
j_sparse_array::const_iterator ikj_iterator
Iterator for looping over j entries given i and k.
Definition: Stokhos_Sparse3Tensor.hpp:100
Stokhos::Sparse3Tensor::i_end
i_iterator i_end() const
Iterator pointing to last k entry.
Definition: Stokhos_Sparse3TensorImp.hpp:491
Stokhos::Sparse3Tensor::num_entries
ordinal_type num_entries() const
Return number of non-zero entries.
Definition: Stokhos_Sparse3TensorImp.hpp:195
Stokhos::Sparse3Tensor::i_iterator
ikj_sparse_array::const_iterator i_iterator
Iterator for looping over i entries.
Definition: Stokhos_Sparse3Tensor.hpp:91
Stokhos::Sparse3Tensor::j_begin
kj_iterator j_begin(const k_iterator &k) const
Iterator pointing to first j entry for given k.
Definition: Stokhos_Sparse3TensorImp.hpp:335
Stokhos::Sparse3Tensor::i_rend
i_reverse_iterator i_rend() const
Reverse iterator pointing to first k entry.
Definition: Stokhos_Sparse3TensorImp.hpp:515
Stokhos::Sparse3Tensor
Data structure storing a sparse 3-tensor C(i,j,k) in a a compressed format.
Definition: Stokhos_Sparse3Tensor.hpp:56
Stokhos::Sparse3Tensor::print
void print(std::ostream &os) const
Print tensor.
Definition: Stokhos_Sparse3TensorImp.hpp:151
Stokhos::Sparse3Tensor::kji_map
std::map< const ordinal_type, ji_map > kji_map
Definition: Stokhos_Sparse3Tensor.hpp:62
Stokhos::SparseArrayIterator::value
value_reference value() const
Return value associated with iterator.
Definition: Stokhos_SparseArray.hpp:220
Stokhos::Sparse3Tensor::num_j
ordinal_type num_j(const k_iterator &k) const
Number of j entries in C(i,j,k) for given k.
Definition: Stokhos_Sparse3TensorImp.hpp:226
Stokhos_SparseArray.hpp
Stokhos::Sparse3Tensor::ik_iterator
kj_sparse_array::const_iterator ik_iterator
Iterator for looping over k entries given i.
Definition: Stokhos_Sparse3Tensor.hpp:97
Stokhos::Sparse3Tensor::find_i
kji_iterator find_i(const kj_iterator &j, ordinal_type i) const
Return i iterator given j iterator and index i.
Definition: Stokhos_Sparse3TensorImp.hpp:275
Stokhos::Sparse3Tensor::find_k
k_iterator find_k(ordinal_type k) const
Return k iterator for given index k.
Definition: Stokhos_Sparse3TensorImp.hpp:251
TotalOrderBasisUnitTest::ordinal_type
int ordinal_type
Definition: Stokhos_LexicographicTreeBasisUnitTest.cpp:69
Stokhos_Sparse3TensorImp.hpp
Stokhos::Sparse3Tensor::i_begin
i_iterator i_begin() const
Iterator pointing to first k entry.
Definition: Stokhos_Sparse3TensorImp.hpp:479
Stokhos
Top-level namespace for Stokhos classes and functions.
Definition: Stokhos_AbstractPreconditionerFactory.hpp:48
Stokhos::Sparse3Tensor::index
SparseArrayReverseIterator< index_iterator, value_iterator >::value_type index(const SparseArrayReverseIterator< index_iterator, value_iterator > &it)
Definition: Stokhos_Sparse3Tensor.hpp:304
Stokhos::Sparse3Tensor::ji_sparse_array
SparseArray< ordinal_type, i_sparse_array > ji_sparse_array
Definition: Stokhos_Sparse3Tensor.hpp:69
Stokhos::Sparse3Tensor::k_iterator
kji_sparse_array::const_iterator k_iterator
Iterator for looping over k entries.
Definition: Stokhos_Sparse3Tensor.hpp:79
Stokhos::SparseArrayReverseIterator
Bi-directional reverse iterator for traversing a sparse array.
Definition: Stokhos_SparseArray.hpp:59
Stokhos::Sparse3Tensor::kji_iterator
j_sparse_array::const_iterator kji_iterator
Iterator for looping over i entries given k and j.
Definition: Stokhos_Sparse3Tensor.hpp:88
j
j
Definition: Sacado_Fad_Exp_MP_Vector.hpp:527
Stokhos::Sparse3Tensor::ikj_data
ikj_map ikj_data
ikj indices and values in Cijk (data structure for filling)
Definition: Stokhos_Sparse3Tensor.hpp:270
Stokhos::Sparse3Tensor::j_map
std::map< const ordinal_type, value_type > j_map
Definition: Stokhos_Sparse3Tensor.hpp:64
Stokhos::Sparse3Tensor::getValue
value_type getValue(ordinal_type i, ordinal_type j, ordinal_type k) const
Get Cijk value for a given i, j, k indices.
Definition: Stokhos_Sparse3TensorImp.hpp:170
Stokhos::Sparse3Tensor::j_sparse_array
SparseArray< ordinal_type, value_type > j_sparse_array
Definition: Stokhos_Sparse3Tensor.hpp:72
Stokhos::Sparse3Tensor::kj_map
std::map< const ordinal_type, j_map > kj_map
Definition: Stokhos_Sparse3Tensor.hpp:65
Stokhos::SparseArrayReverseIterator::value_type
base_type::value_type value_type
Definition: Stokhos_SparseArray.hpp:244
Stokhos::Sparse3Tensor::ji_map
std::map< const ordinal_type, i_map > ji_map
Definition: Stokhos_Sparse3Tensor.hpp:61
Stokhos::Sparse3Tensor::kji_array
kji_sparse_array kji_array
kji indices and values in Cijk (data structure for iterating)
Definition: Stokhos_Sparse3Tensor.hpp:262
Stokhos::Sparse3Tensor::~Sparse3Tensor
~Sparse3Tensor()
Destructor.
Definition: Stokhos_Sparse3Tensor.hpp:106
Stokhos::Sparse3Tensor::add_term
void add_term(ordinal_type i, ordinal_type j, ordinal_type k, const value_type &c)
Add new term for given (i,j,k)
Definition: Stokhos_Sparse3TensorImp.hpp:55
Stokhos::Sparse3Tensor::num_i
ordinal_type num_i() const
Number of i entries in C(i,j,k)
Definition: Stokhos_Sparse3TensorImp.hpp:407
Stokhos::Sparse3Tensor::k_reverse_iterator
kji_sparse_array::const_reverse_iterator k_reverse_iterator
Iterator for looping over k entries in reverse.
Definition: Stokhos_Sparse3Tensor.hpp:82
Stokhos::Sparse3Tensor::Sparse3Tensor
Sparse3Tensor()
Constructor.
Definition: Stokhos_Sparse3TensorImp.hpp:47
Stokhos::Sparse3Tensor::kji_data
kji_map kji_data
kji indices and values in Cijk (data structure for filling)
Definition: Stokhos_Sparse3Tensor.hpp:259
Stokhos::SparseArrayIterator::value_reference
std::iterator_traits< value_iterator_type >::reference value_reference
Definition: Stokhos_SparseArray.hpp:151
Stokhos::Sparse3Tensor::operator=
Sparse3Tensor & operator=(const Sparse3Tensor &b)
Stokhos::Sparse3Tensor::i_sparse_array
SparseArray< ordinal_type, value_type > i_sparse_array
Definition: Stokhos_Sparse3Tensor.hpp:68
Stokhos::Sparse3Tensor::k_begin
k_iterator k_begin() const
Iterator pointing to first k entry.
Definition: Stokhos_Sparse3TensorImp.hpp:287
Stokhos::Sparse3Tensor::kji_sparse_array
SparseArray< ordinal_type, ji_sparse_array > kji_sparse_array
Definition: Stokhos_Sparse3Tensor.hpp:70
Stokhos::Sparse3Tensor::index
SparseArrayIterator< index_iterator, value_iterator >::value_type index(const SparseArrayIterator< index_iterator, value_iterator > &it)
Definition: Stokhos_Sparse3Tensor.hpp:295
Stokhos::Sparse3Tensor::value
SparseArrayIterator< index_iterator, value_iterator >::value_reference value(const SparseArrayIterator< index_iterator, value_iterator > &it)
Definition: Stokhos_Sparse3Tensor.hpp:315
Stokhos::Sparse3Tensor::k_end
k_iterator k_end() const
Iterator pointing to last k entry.
Definition: Stokhos_Sparse3TensorImp.hpp:299
Stokhos::SparseArrayIterator::value_type
base_type::value_type value_type
Definition: Stokhos_SparseArray.hpp:147
Stokhos::Sparse3Tensor::k_rbegin
k_reverse_iterator k_rbegin() const
Reverse iterator pointing to last k entry.
Definition: Stokhos_Sparse3TensorImp.hpp:311
Stokhos::Sparse3Tensor::num_k
ordinal_type num_k() const
Number of k entries in C(i,j,k)
Definition: Stokhos_Sparse3TensorImp.hpp:214