46 #ifdef HAVE_STOKHOS_ISORROPIA
47 #include "Isorropia_Epetra.hpp"
56 int k_begin_,
int k_end_) :
59 globalMultiComm(globalMultiComm_),
95 int k_begin_,
int k_end_) :
98 globalMultiComm(globalMultiComm_),
101 stoch_row_map(stoch_row_map_),
102 Cijk_parallel(Cijk_parallel_)
128 int k_begin_,
int k_end_) :
129 basis(epetraCijk.basis),
130 Cijk(epetraCijk.Cijk),
131 globalMultiComm(epetraCijk.globalMultiComm),
132 num_global_stoch_blocks(epetraCijk.num_global_stoch_blocks),
135 stoch_comm(epetraCijk.stoch_comm),
136 is_parallel(epetraCijk.is_parallel),
137 stoch_row_map(epetraCijk.stoch_row_map)
159 #ifdef HAVE_STOKHOS_ISORROPIA
163 *stoch_graph, isorropia_params));
164 stoch_graph = rebalanced_graph;
167 stoch_row_map =
Teuchos::rcp(&(stoch_graph->RowMap()),
false);
168 stoch_col_map =
Teuchos::rcp(&(stoch_graph->ColMap()),
false);
171 Cijk_parallel = buildParallelCijk();
174 "Error! Stokhos must be configured with " <<
175 "isorropia support to rebalance the stochastic " <<
185 int *rowIndices = stoch_row_map->MyGlobalElements();
186 int myBlockRows = stoch_row_map->NumMyElements();
187 for (
int i=0; i<myBlockRows; i++) {
188 int myRow = rowIndices[i];
191 k_it != Cijk->k_end(i_it); ++k_it) {
193 if (k >= k_begin && k < k_end) {
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();
214 i_it != Cijk_parallel->i_end(); ++i_it) {
215 int i = stoch_row_map->LID(index(i_it));
217 "Error! Global row index " << index(i_it) <<
218 " is not on processor " << globalMultiComm->MyPID());
220 k_it != Cijk_parallel->k_end(i_it); ++k_it) {
223 j_it != Cijk_parallel->j_end(k_it); ++j_it) {
224 int j= stoch_col_map->LID(index(j_it));
226 "Error! Global col index " << index(j_it) <<
227 " is not on processor " << globalMultiComm->MyPID());
228 double c = value(j_it);
229 Cijk_tmp->add_term(i,
j, k, c);
233 Cijk_tmp->fillComplete();
235 Cijk_parallel = Cijk_tmp;