43 #ifndef IFPACK2_REORDERFILTER_DEF_HPP 44 #define IFPACK2_REORDERFILTER_DEF_HPP 45 #include "Ifpack2_ReorderFilter_decl.hpp" 48 #include "Tpetra_ConfigDefs.hpp" 49 #include "Tpetra_RowMatrix.hpp" 50 #include "Tpetra_Map.hpp" 51 #include "Tpetra_MultiVector.hpp" 52 #include "Tpetra_Vector.hpp" 56 template<
class MatrixType>
59 const Teuchos::ArrayRCP<local_ordinal_type>& perm,
60 const Teuchos::ArrayRCP<local_ordinal_type>& reverseperm)
63 reverseperm_ (reverseperm)
65 TEUCHOS_TEST_FOR_EXCEPTION(
66 A_.is_null (), std::invalid_argument,
67 "Ifpack2::ReorderFilter: The input matrix is null.");
70 TEUCHOS_TEST_FOR_EXCEPTION(
71 A_->getComm()->getSize() != 1, std::invalid_argument,
72 "Ifpack2::ReorderFilter: This class may only be used if the input matrix's " 73 "communicator has one process. This class is an implementation detail of " 74 "Ifpack2::AdditiveSchwarz, and it is not meant to be used otherwise.");
76 TEUCHOS_TEST_FOR_EXCEPTION(
77 A_->getNodeNumRows () != A_->getGlobalNumRows (),
78 std::invalid_argument,
79 "Ifpack2::ReorderFilter: The input matrix is not square.");
82 Indices_.resize (A_->getNodeMaxNumRowEntries ());
83 Values_.resize (A_->getNodeMaxNumRowEntries ());
87 template<
class MatrixType>
91 template<
class MatrixType>
98 template<
class MatrixType>
99 Teuchos::RCP<typename ReorderFilter<MatrixType>::node_type>
102 return A_->getNode ();
106 template<
class MatrixType>
107 Teuchos::RCP<const typename ReorderFilter<MatrixType>::map_type>
110 TEUCHOS_TEST_FOR_EXCEPTION(
111 A_.is_null (), std::runtime_error,
"Ifpack2::ReorderFilter::" 112 "getRowMap: The matrix A is null, so there is no row Map.");
114 return A_->getRowMap ();
118 template<
class MatrixType>
119 Teuchos::RCP<const typename ReorderFilter<MatrixType>::map_type>
122 TEUCHOS_TEST_FOR_EXCEPTION(
123 A_.is_null (), std::runtime_error,
"Ifpack2::ReorderFilter::" 124 "getColMap: The matrix A is null, so there is no column Map.");
126 return A_->getColMap();
130 template<
class MatrixType>
131 Teuchos::RCP<const typename ReorderFilter<MatrixType>::map_type>
134 TEUCHOS_TEST_FOR_EXCEPTION(
135 A_.is_null (), std::runtime_error,
"Ifpack2::ReorderFilter::" 136 "getDomainMap: The matrix A is null, so there is no domain Map.");
138 return A_->getDomainMap();
142 template<
class MatrixType>
143 Teuchos::RCP<const typename ReorderFilter<MatrixType>::map_type>
146 TEUCHOS_TEST_FOR_EXCEPTION(
147 A_.is_null (), std::runtime_error,
"Ifpack2::ReorderFilter::" 148 "getRangeMap: The matrix A is null, so there is no range Map.");
150 return A_->getRangeMap();
154 template<
class MatrixType>
155 Teuchos::RCP<
const Tpetra::RowGraph<
typename MatrixType::local_ordinal_type,
156 typename MatrixType::global_ordinal_type,
157 typename MatrixType::node_type> >
160 throw std::runtime_error(
"Ifpack2::ReorderFilter: does not support getGraph.");
164 template<
class MatrixType>
167 return A_->getGlobalNumRows();
171 template<
class MatrixType>
174 return A_->getGlobalNumCols();
178 template<
class MatrixType>
181 return A_->getNodeNumRows();
185 template<
class MatrixType>
188 return A_->getNodeNumCols();
192 template<
class MatrixType>
195 return A_->getIndexBase();
199 template<
class MatrixType>
202 return A_->getGlobalNumEntries();
206 template<
class MatrixType>
209 return A_->getNodeNumEntries();
213 template<
class MatrixType>
217 if (A_.is_null () || A_->getRowMap ().is_null ()) {
218 return Teuchos::OrdinalTraits<size_t>::invalid ();
221 const local_ordinal_type lclRow =
222 A_->getRowMap ()->getLocalElement (globalRow);
223 if (lclRow == Teuchos::OrdinalTraits<local_ordinal_type>::invalid ()) {
225 return static_cast<size_t> (0);
227 const local_ordinal_type origLclRow = reverseperm_[lclRow];
228 return A_->getNumEntriesInLocalRow (origLclRow);
234 template<
class MatrixType>
240 if (A_->getRowMap ()->isNodeLocalElement (localRow)) {
242 const local_ordinal_type localReorderedRow = reverseperm_[localRow];
243 return A_->getNumEntriesInLocalRow (localReorderedRow);
246 return static_cast<size_t> (0);
251 template<
class MatrixType>
254 return A_->getGlobalNumDiags();
258 template<
class MatrixType>
261 return A_->getNodeNumDiags();
265 template<
class MatrixType>
268 return A_->getGlobalMaxNumRowEntries();
272 template<
class MatrixType>
275 return A_->getNodeMaxNumRowEntries();
279 template<
class MatrixType>
286 template<
class MatrixType>
289 return A_->isLowerTriangular();
293 template<
class MatrixType>
296 return A_->isUpperTriangular();
300 template<
class MatrixType>
303 return A_->isLocallyIndexed();
307 template<
class MatrixType>
310 return A_->isGloballyIndexed();
314 template<
class MatrixType>
317 return A_->isFillComplete();
321 template<
class MatrixType>
324 const Teuchos::ArrayView<global_ordinal_type>& globalInd,
325 const Teuchos::ArrayView<scalar_type>& val,
326 size_t& numEntries)
const 328 using Teuchos::Array;
329 using Teuchos::ArrayView;
330 using Teuchos::av_reinterpret_cast;
331 typedef local_ordinal_type LO;
332 typedef global_ordinal_type GO;
333 typedef Teuchos::OrdinalTraits<LO> OTLO;
335 const map_type& rowMap = * (A_->getRowMap ());
336 const local_ordinal_type localRow = rowMap.getLocalElement (globalRow);
337 TEUCHOS_TEST_FOR_EXCEPTION(
338 localRow == OTLO::invalid (), std::invalid_argument,
"Ifpack2::Reorder" 339 "Filter::getGlobalRowCopy: The given global row index " << globalRow
340 <<
" is not owned by the calling process with rank " 341 << rowMap.getComm ()->getRank () <<
".");
343 if (
sizeof (GO) ==
sizeof (LO)) {
345 ArrayView<LO> localInd = av_reinterpret_cast<LO> (globalInd);
349 for (
size_t k = 0; k < numEntries; ++k) {
350 globalInd[k] = rowMap.getGlobalElement (localInd[k]);
357 Array<LO> localInd (numEntries);
361 for (
size_t k = 0; k < numEntries; ++k) {
362 globalInd[k] = rowMap.getGlobalElement (localInd[k]);
368 template<
class MatrixType>
371 const Teuchos::ArrayView<local_ordinal_type> &Indices,
372 const Teuchos::ArrayView<scalar_type> &Values,
373 size_t &NumEntries)
const 375 TEUCHOS_TEST_FOR_EXCEPTION(
376 ! A_->getRowMap ()->isNodeLocalElement (LocalRow),
377 std::invalid_argument,
378 "Ifpack2::ReorderFilter::getLocalRowCopy: The given local row index " 379 << LocalRow <<
" is not a valid local row index on the calling process " 380 "with rank " << A_->getRowMap ()->getComm ()->getRank () <<
".");
384 const local_ordinal_type origLclRow = reverseperm_[LocalRow];
385 const size_t numEntries = A_->getNumEntriesInLocalRow (origLclRow);
387 TEUCHOS_TEST_FOR_EXCEPTION(
388 static_cast<size_t> (Indices.size ()) < numEntries ||
389 static_cast<size_t> (Values.size ()) < numEntries,
390 std::invalid_argument,
391 "Ifpack2::ReorderFilter::getLocalRowCopy: The given array views are not " 392 "long enough to store all the data in the given row " << LocalRow
393 <<
". Indices.size() = " << Indices.size () <<
", Values.size() = " 394 << Values.size () <<
", but the (original) row has " << numEntries
397 A_->getLocalRowCopy (origLclRow, Indices, Values, NumEntries);
402 for (
size_t i = 0; i < NumEntries; ++i) {
403 Indices[i] = perm_[Indices[i]];
408 template<
class MatrixType>
411 Teuchos::ArrayView<const global_ordinal_type> &indices,
412 Teuchos::ArrayView<const scalar_type> &values)
const 414 throw std::runtime_error(
"Ifpack2::ReorderFilter: does not support getGlobalRowView.");
418 template<
class MatrixType>
421 Teuchos::ArrayView<const local_ordinal_type> &indices,
422 Teuchos::ArrayView<const scalar_type> &values)
const 424 throw std::runtime_error(
"Ifpack2::ReorderFilter: does not support getLocalRowView.");
428 template<
class MatrixType>
430 getLocalDiagCopy (Tpetra::Vector<scalar_type,local_ordinal_type,global_ordinal_type,node_type> &diag)
const 433 return A_->getLocalDiagCopy(diag);
437 template<
class MatrixType>
440 throw std::runtime_error(
"Ifpack2::ReorderFilter does not support leftScale.");
444 template<
class MatrixType>
447 throw std::runtime_error(
"Ifpack2::ReorderFilter does not support rightScale.");
451 template<
class MatrixType>
453 apply (
const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type> &X,
454 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type> &Y,
455 Teuchos::ETransp mode,
457 scalar_type beta)
const 459 typedef Teuchos::ScalarTraits<scalar_type> STS;
461 TEUCHOS_TEST_FOR_EXCEPTION(
462 alpha != STS::one () || beta != STS::zero (), std::logic_error,
463 "Ifpack2::ReorderFilter::apply is only implemented for alpha = 1 and " 464 "beta = 0. You set alpha = " << alpha <<
" and beta = " << beta <<
".");
468 TEUCHOS_TEST_FOR_EXCEPTION(
469 X.getNumVectors() != Y.getNumVectors(), std::runtime_error,
470 "Ifpack2::ReorderFilter::apply: X.getNumVectors() != Y.getNumVectors().");
472 const scalar_type zero = STS::zero ();
473 Teuchos::ArrayRCP<Teuchos::ArrayRCP<const scalar_type> > x_ptr = X.get2dView();
474 Teuchos::ArrayRCP<Teuchos::ArrayRCP<scalar_type> > y_ptr = Y.get2dViewNonConst();
477 const size_t NumVectors = Y.getNumVectors ();
479 for (
size_t i = 0; i < A_->getNodeNumRows (); ++i) {
483 if (mode == Teuchos::NO_TRANS) {
484 for (
size_t j = 0; j < Nnz; ++j) {
485 for (
size_t k = 0; k < NumVectors; ++k) {
486 y_ptr[k][i] += Values_[j] * x_ptr[k][Indices_[j]];
490 else if (mode == Teuchos::TRANS) {
491 for (
size_t j = 0; j < Nnz; ++j) {
492 for (
size_t k = 0; k < NumVectors; ++k) {
493 y_ptr[k][Indices_[j]] += Values_[j] * x_ptr[k][i];
498 for (
size_t j = 0; j < Nnz; ++j) {
499 for (
size_t k = 0; k < NumVectors; ++k) {
500 y_ptr[k][Indices_[j]] += STS::conjugate(Values_[j]) * x_ptr[k][i];
508 template<
class MatrixType>
515 template<
class MatrixType>
522 template<
class MatrixType>
526 return A_->getFrobeniusNorm ();
530 template<
class MatrixType>
533 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type> &reorderedY)
const 535 this->
template permuteOriginalToReorderedTempl<scalar_type,scalar_type>(originalX, reorderedY);
539 template<
class MatrixType>
540 template<
class DomainScalar,
class RangeScalar>
542 Tpetra::MultiVector<RangeScalar,local_ordinal_type,global_ordinal_type,node_type> &reorderedY)
const 544 TEUCHOS_TEST_FOR_EXCEPTION(originalX.getNumVectors() != reorderedY.getNumVectors(), std::runtime_error,
545 "Ifpack2::ReorderFilter::permuteOriginalToReordered ERROR: X.getNumVectors() != Y.getNumVectors().");
547 Teuchos::ArrayRCP<Teuchos::ArrayRCP<const DomainScalar> > x_ptr = originalX.get2dView();
548 Teuchos::ArrayRCP<Teuchos::ArrayRCP<RangeScalar> > y_ptr = reorderedY.get2dViewNonConst();
550 for(
size_t k=0; k < originalX.getNumVectors(); k++)
551 for(local_ordinal_type i=0; (size_t)i< originalX.getLocalLength(); i++)
552 y_ptr[k][perm_[i]] = (RangeScalar)x_ptr[k][i];
556 template<
class MatrixType>
558 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type> &originalY)
const 560 this->
template permuteReorderedToOriginalTempl<scalar_type,scalar_type>(reorderedX, originalY);
564 template<
class MatrixType>
565 template<
class DomainScalar,
class RangeScalar>
568 Tpetra::MultiVector<RangeScalar,local_ordinal_type,global_ordinal_type,node_type> &originalY)
const 570 TEUCHOS_TEST_FOR_EXCEPTION(
571 reorderedX.getNumVectors() != originalY.getNumVectors(),
573 "Ifpack2::ReorderFilter::permuteReorderedToOriginal: " 574 "X.getNumVectors() != Y.getNumVectors().");
576 #ifdef HAVE_IFPACK2_DEBUG 578 typedef Teuchos::ScalarTraits<DomainScalar> STS;
579 typedef typename STS::magnitudeType magnitude_type;
580 typedef Teuchos::ScalarTraits<magnitude_type> STM;
581 Teuchos::Array<magnitude_type> norms (reorderedX.getNumVectors ());
582 reorderedX.norm2 (norms ());
585 j < reorderedX.getNumVectors (); ++j) {
586 if (STM::isnaninf (norms[j])) {
591 TEUCHOS_TEST_FOR_EXCEPTION(
592 ! good, std::runtime_error,
"Ifpack2::ReorderFilter::" 593 "permuteReorderedToOriginalTempl: The 2-norm of the input reorderedX is " 596 #endif // HAVE_IFPACK2_DEBUG 598 Teuchos::ArrayRCP<Teuchos::ArrayRCP<const DomainScalar> > x_ptr = reorderedX.get2dView();
599 Teuchos::ArrayRCP<Teuchos::ArrayRCP<RangeScalar> > y_ptr = originalY.get2dViewNonConst();
601 for (
size_t k = 0; k < reorderedX.getNumVectors (); ++k) {
602 for (local_ordinal_type i = 0; (size_t)i < reorderedX.getLocalLength (); ++i) {
603 y_ptr[k][reverseperm_[i]] = (RangeScalar) x_ptr[k][i];
607 #ifdef HAVE_IFPACK2_DEBUG 609 typedef Teuchos::ScalarTraits<RangeScalar> STS;
610 typedef typename STS::magnitudeType magnitude_type;
611 typedef Teuchos::ScalarTraits<magnitude_type> STM;
612 Teuchos::Array<magnitude_type> norms (originalY.getNumVectors ());
613 originalY.norm2 (norms ());
616 j < originalY.getNumVectors (); ++j) {
617 if (STM::isnaninf (norms[j])) {
622 TEUCHOS_TEST_FOR_EXCEPTION(
623 ! good, std::runtime_error,
"Ifpack2::ReorderFilter::" 624 "permuteReorderedToOriginalTempl: The 2-norm of the output originalY is " 627 #endif // HAVE_IFPACK2_DEBUG 632 #define IFPACK2_REORDERFILTER_INSTANT(S,LO,GO,N) \ 633 template class Ifpack2::ReorderFilter< Tpetra::RowMatrix<S, LO, GO, N> >; virtual bool isLowerTriangular() const
Indicates whether this matrix is lower triangular.
Definition: Ifpack2_ReorderFilter_def.hpp:287
virtual void getGlobalRowView(global_ordinal_type GlobalRow, Teuchos::ArrayView< const global_ordinal_type > &indices, Teuchos::ArrayView< const scalar_type > &values) const
Extract a const, non-persisting view of global indices in a specified row of the matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:410
Wraps a Tpetra::RowMatrix in a filter that reorders local rows and columns.
Definition: Ifpack2_ReorderFilter_decl.hpp:69
virtual bool isUpperTriangular() const
Indicates whether this matrix is upper triangular.
Definition: Ifpack2_ReorderFilter_def.hpp:294
virtual global_size_t getGlobalNumDiags() const
Returns the number of global diagonal entries, based on global row/column index comparisons.
Definition: Ifpack2_ReorderFilter_def.hpp:252
virtual mag_type getFrobeniusNorm() const
Returns the Frobenius norm of the matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:523
virtual Teuchos::RCP< const map_type > getRowMap() const
Returns the Map that describes the row distribution in this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:108
virtual bool supportsRowViews() const
Returns true if RowViews are supported.
Definition: Ifpack2_ReorderFilter_def.hpp:516
virtual void getGlobalRowCopy(global_ordinal_type GlobalRow, const Teuchos::ArrayView< global_ordinal_type > &Indices, const Teuchos::ArrayView< scalar_type > &Values, size_t &NumEntries) const
Extract a list of entries in a specified global row of this matrix. Put into pre-allocated storage...
Definition: Ifpack2_ReorderFilter_def.hpp:323
virtual size_t getGlobalMaxNumRowEntries() const
Returns the maximum number of entries across all rows/columns on all nodes.
Definition: Ifpack2_ReorderFilter_def.hpp:266
virtual Teuchos::RCP< const map_type > getDomainMap() const
Returns the Map that describes the domain distribution in this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:132
virtual size_t getNodeMaxNumRowEntries() const
Returns the maximum number of entries across all rows/columns on this node.
Definition: Ifpack2_ReorderFilter_def.hpp:273
virtual global_size_t getGlobalNumRows() const
Returns the number of global rows in this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:165
virtual Teuchos::RCP< const map_type > getColMap() const
Returns the Map that describes the column distribution in this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:120
ReorderFilter(const Teuchos::RCP< const row_matrix_type > &A, const Teuchos::ArrayRCP< local_ordinal_type > &perm, const Teuchos::ArrayRCP< local_ordinal_type > &reverseperm)
Constructor.
Definition: Ifpack2_ReorderFilter_def.hpp:58
virtual Teuchos::RCP< const map_type > getRangeMap() const
Returns the Map that describes the range distribution in this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:144
virtual size_t getNodeNumEntries() const
Returns the local number of entries in this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:207
virtual void apply(const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &X, Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, scalar_type alpha=Teuchos::ScalarTraits< scalar_type >::one(), scalar_type beta=Teuchos::ScalarTraits< scalar_type >::zero()) const
, where Op(A) is either A, , or .
Definition: Ifpack2_ReorderFilter_def.hpp:453
virtual size_t getNodeNumRows() const
Returns the number of rows owned on the calling node.
Definition: Ifpack2_ReorderFilter_def.hpp:179
virtual size_t getNodeNumCols() const
Returns the number of columns needed to apply the forward operator on this node, i.e., the number of elements listed in the column map.
Definition: Ifpack2_ReorderFilter_def.hpp:186
virtual bool isGloballyIndexed() const
If matrix indices are in the global range, this function returns true. Otherwise, this function retur...
Definition: Ifpack2_ReorderFilter_def.hpp:308
virtual Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
The matrix's communicator.
Definition: Ifpack2_ReorderFilter_def.hpp:92
virtual size_t getNodeNumDiags() const
Returns the number of local diagonal entries, based on global row/column index comparisons.
Definition: Ifpack2_ReorderFilter_def.hpp:259
virtual void getLocalDiagCopy(Tpetra::Vector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &diag) const
Get a copy of the diagonal entries owned by this node, with local row indices.
Definition: Ifpack2_ReorderFilter_def.hpp:430
virtual size_t getNumEntriesInLocalRow(local_ordinal_type localRow) const
The current number of entries in this matrix, stored on the calling process, in the row whose local i...
Definition: Ifpack2_ReorderFilter_def.hpp:236
virtual bool hasColMap() const
Indicates whether this matrix has a well-defined column map.
Definition: Ifpack2_ReorderFilter_def.hpp:280
virtual size_t getNumEntriesInGlobalRow(global_ordinal_type globalRow) const
The current number of entries in this matrix, stored on the calling process, in the row whose global ...
Definition: Ifpack2_ReorderFilter_def.hpp:215
virtual void getLocalRowCopy(local_ordinal_type DropRow, const Teuchos::ArrayView< local_ordinal_type > &Indices, const Teuchos::ArrayView< scalar_type > &Values, size_t &NumEntries) const
Extract a list of entries in a specified local row of the graph. Put into storage allocated by callin...
Definition: Ifpack2_ReorderFilter_def.hpp:370
virtual global_size_t getGlobalNumCols() const
Returns the number of global columns in this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:172
virtual bool hasTransposeApply() const
Whether apply() can apply the transpose or conjugate transpose.
Definition: Ifpack2_ReorderFilter_def.hpp:509
virtual global_ordinal_type getIndexBase() const
Returns the index base for global indices for this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:193
virtual void getLocalRowView(local_ordinal_type LocalRow, Teuchos::ArrayView< const local_ordinal_type > &indices, Teuchos::ArrayView< const scalar_type > &values) const
Extract a const, non-persisting view of local indices in a specified row of the matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:420
virtual global_size_t getGlobalNumEntries() const
Returns the global number of entries in this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:200
virtual Teuchos::RCP< node_type > getNode() const
The matrix's Node instance.
Definition: Ifpack2_ReorderFilter_def.hpp:100
virtual bool isFillComplete() const
Returns true if fillComplete() has been called.
Definition: Ifpack2_ReorderFilter_def.hpp:315
virtual void permuteReorderedToOriginal(const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &reorderedX, Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &originalY) const
Permute multivector: reordered-to-original.
Definition: Ifpack2_ReorderFilter_def.hpp:557
virtual Teuchos::RCP< const Tpetra::RowGraph< local_ordinal_type, global_ordinal_type, node_type > > getGraph() const
Returns the RowGraph associated with this matrix.
Definition: Ifpack2_ReorderFilter_def.hpp:158
virtual void leftScale(const Tpetra::Vector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &x)
Scales the RowMatrix on the left with the Vector x.
Definition: Ifpack2_ReorderFilter_def.hpp:438
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:72
virtual void rightScale(const Tpetra::Vector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &x)
Scales the RowMatrix on the right with the Vector x.
Definition: Ifpack2_ReorderFilter_def.hpp:445
virtual void permuteOriginalToReordered(const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &originalX, Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &reorderedY) const
Permute multivector: original-to-reordered.
Definition: Ifpack2_ReorderFilter_def.hpp:532
virtual ~ReorderFilter()
Destructor.
Definition: Ifpack2_ReorderFilter_def.hpp:88
virtual bool isLocallyIndexed() const
If matrix indices are in the local range, this function returns true. Otherwise, this function return...
Definition: Ifpack2_ReorderFilter_def.hpp:301