45#include "Teuchos_Assert.hpp"
46#ifdef HAVE_STOKHOS_ISORROPIA
47#include "Isorropia_Epetra.hpp"
55 const Teuchos::RCP<const EpetraExt::MultiComm>& globalMultiComm_,
56 int k_begin_,
int k_end_) :
92 const Teuchos::RCP<const EpetraExt::MultiComm>& globalMultiComm_,
93 const Teuchos::RCP<const Epetra_BlockMap>& stoch_row_map_,
95 int k_begin_,
int k_end_) :
128 int k_begin_,
int k_end_) :
157rebalance(Teuchos::ParameterList& isorropia_params)
159#ifdef HAVE_STOKHOS_ISORROPIA
161 Teuchos::RCP<const Epetra_CrsGraph> rebalanced_graph =
162 Teuchos::rcp(Isorropia::Epetra::createBalancedCopy(
173 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
174 "Error! Stokhos must be configured with " <<
175 "isorropia support to rebalance the stochastic " <<
180Teuchos::RCP<Stokhos::EpetraSparse3Tensor::Cijk_type>
184 Teuchos::RCP<Cijk_type> Cijk_tmp = Teuchos::rcp(
new Cijk_type);
187 for (
int i=0; i<myBlockRows; i++) {
188 int myRow = rowIndices[i];
191 k_it !=
Cijk->k_end(i_it); ++k_it) {
195 j_it !=
Cijk->j_end(k_it); ++j_it) {
197 double c =
value(j_it);
198 Cijk_tmp->add_term(myRow,
j, k, c);
203 Cijk_tmp->fillComplete();
212 Teuchos::RCP<Cijk_type> Cijk_tmp = Teuchos::rcp(
new Cijk_type);
216 TEUCHOS_TEST_FOR_EXCEPTION(i == -1, std::logic_error,
217 "Error! Global row index " <<
index(i_it) <<
225 TEUCHOS_TEST_FOR_EXCEPTION(
j == -1, std::logic_error,
226 "Error! Global col index " <<
index(j_it) <<
228 double c =
value(j_it);
229 Cijk_tmp->add_term(i,
j, k, c);
233 Cijk_tmp->fillComplete();
Stokhos::Sparse3Tensor< int, double > Cijk_type
Teuchos::RCP< const Epetra_CrsGraph > stoch_graph
Stochastic operator graph.
void transformToLocal()
Transform Cijk to local i and j indices.
EpetraSparse3Tensor(const Teuchos::RCP< const Stokhos::OrthogPolyBasis< int, double > > &basis, const Teuchos::RCP< const Stokhos::Sparse3Tensor< int, double > > &Cijk, const Teuchos::RCP< const EpetraExt::MultiComm > &globalMultiComm, int k_begin=0, int k_end=-1)
Constructor from a full Cijk.
void rebalance(Teuchos::ParameterList &isorropia_params)
Rebalance maps and graph using Isorropia.
Teuchos::RCP< Cijk_type > buildParallelCijk() const
Build parallel Cijk tensor from a parallel row map.
Teuchos::RCP< const Stokhos::OrthogPolyBasis< int, double > > basis
Basis.
int num_global_stoch_blocks
Number of global stochastic blocks.
Teuchos::RCP< const Cijk_type > Cijk_parallel
Cijk tensor parallel over i.
int k_begin
Beginning of k index.
Teuchos::RCP< const Epetra_BlockMap > stoch_row_map
Stochastic row-map.
Teuchos::RCP< const EpetraExt::MultiComm > globalMultiComm
Multi-comm.
Teuchos::RCP< const Cijk_type > Cijk
Triple product.
Teuchos::RCP< const Epetra_BlockMap > stoch_col_map
Stochastic col-map.
bool is_parallel
Whether stochastic blocks are parallel.
Teuchos::RCP< const Epetra_Comm > stoch_comm
Stochastic comm.
Abstract base class for multivariate orthogonal polynomials.
Data structure storing a sparse 3-tensor C(i,j,k) in a a compressed format.
j_sparse_array::const_iterator ikj_iterator
kj_sparse_array::const_iterator ik_iterator
ikj_sparse_array::const_iterator i_iterator
SparseArrayIterator< index_iterator, value_iterator >::value_reference value(const SparseArrayIterator< index_iterator, value_iterator > &it)
SparseArrayIterator< index_iterator, value_iterator >::value_type index(const SparseArrayIterator< index_iterator, value_iterator > &it)
Teuchos::RCP< Epetra_CrsGraph > sparse3Tensor2CrsGraph(const Stokhos::OrthogPolyBasis< ordinal_type, value_type > &basis, const Stokhos::Sparse3Tensor< ordinal_type, value_type > &Cijk, const Epetra_Comm &comm)
Build an Epetra_CrsGraph from a sparse 3 tensor.