10 #ifndef XPETRA_EPETRAINTMULTIVECTOR_HPP
11 #define XPETRA_EPETRAINTMULTIVECTOR_HPP
16 #include "Xpetra_MultiVector.hpp"
21 #include "Epetra_IntMultiVector.h"
23 #if defined(XPETRA_ENABLE_DEPRECATED_CODE)
25 #if defined(Xpetra_SHOW_DEPRECATED_WARNINGS)
26 #warning "The header file Trilinos/packages/xpetra/src/MultiVector/Xpetra_EpetraIntMultiVector.hpp is deprecated."
30 #error "The header file Trilinos/packages/xpetra/src/MultiVector/Xpetra_EpetraIntMultiVector.hpp is deprecated."
36 template <
class GlobalOrdinal,
class Node>
37 XPETRA_DEPRECATED Epetra_IntMultiVector &
toEpetra(MultiVector<int, int, GlobalOrdinal, Node> &);
39 template <
class GlobalOrdinal,
class Node>
40 XPETRA_DEPRECATED
const Epetra_IntMultiVector &
toEpetra(
const MultiVector<int, int, GlobalOrdinal, Node> &);
44 template <
class EpetraGlobalOrdinal,
class Node>
46 :
public MultiVector<int, int, EpetraGlobalOrdinal, Node> {
58 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
64 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
70 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
85 void randomize(
bool bUseXpetraImplementation =
true) {
101 "Xpetra::EpetraIntMultiVectorT::setSeed(): Functionnality not available in Epetra");
110 Teuchos::RCP<const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
getVector(
size_t j)
const {
111 return Teuchos::null;
116 return Teuchos::null;
121 Teuchos::ArrayRCP<const int>
getData(
size_t j)
const {
122 return Teuchos::ArrayRCP<const int>();
128 return Teuchos::ArrayRCP<int>();
137 const Teuchos::ArrayView<int> &dots)
const {
139 "This function is not implemented in Epetra_IntMultiVector");
148 "This function is not implemented in Epetra_IntMultiVector");
155 void scale(Teuchos::ArrayView<const int> alpha) {
158 "Xpetra::EpetraIntMultiVectorT::scale(): Functionnality not available in Epetra");
165 "Xpetra::EpetraIntMultiVectorT::update(): Functionnality not available in Epetra");
169 void update(
const int &alpha,
const MultiVector<int, int, GlobalOrdinal, Node> &A,
const int &beta,
const MultiVector<int, int, GlobalOrdinal, Node> &B,
const int &gamma) {
172 "Xpetra::EpetraIntMultiVectorT::update(): Functionnality not available in Epetra");
176 void norm1(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> &norms)
const {
179 "Xpetra::EpetraIntMultiVectorT::norm1(): Functionnality not available in Epetra");
183 void norm2(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> &norms)
const {
186 "Xpetra::EpetraIntMultiVectorT::norm2(): Functionnality not available in Epetra");
190 void normInf(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> &norms)
const {
193 "Xpetra::EpetraIntMultiVectorT::normInf(): Functionnality not available in Epetra");
197 void meanValue(
const Teuchos::ArrayView<int> &means)
const {
200 "Xpetra::EpetraIntMultiVectorT::meanValue(): Functionnality not available in Epetra");
204 void maxValue(
const Teuchos::ArrayView<int> &maxs)
const {
207 "Xpetra::EpetraIntMultiVectorT::maxValue(): Functionnality not available in Epetra");
211 void multiply(Teuchos::ETransp transA, Teuchos::ETransp transB,
const int &alpha,
const MultiVector<int, int, GlobalOrdinal, Node> &A,
const MultiVector<int, int, GlobalOrdinal, Node> &B,
const int &beta) {
214 "Xpetra::EpetraIntMultiVectorT::multiply(): Functionnality not available in Epetra");
221 "Xpetra_EpetraIntMultiVector: elementWiseMultiply not implemented because Epetra_IntMultiVector does not support this operation");
280 return std::string(
"");
284 void describe(Teuchos::FancyOStream &out,
const Teuchos::EVerbosityLevel verbLevel = Teuchos::Describable::verbLevel_default)
const {}
295 Teuchos::RCP<const Map<int, GlobalOrdinal, Node> >
getMap()
const {
296 return Teuchos::null;
328 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
331 :
public virtual MultiVector<int, int, int, EpetraNode> {
343 vec_ = rcp(
new Epetra_IntMultiVector(toEpetra<GlobalOrdinal, Node>(map), NumVectors, zeroOut));
348 if (copyOrView == Teuchos::Copy)
349 vec_ = rcp(
new Epetra_IntMultiVector(toEpetra<GlobalOrdinal, Node>(source)));
354 vec_ = Teuchos::rcp(
new Epetra_IntMultiVector(View, toEpetra<GlobalOrdinal, Node>(source), indices,
getNumVectors()));
362 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
376 ierr = vec_->PutScalar(value);
410 typedef Kokkos::View<
typename dual_view_type::t_host::data_type,
412 typename dual_view_type::t_host::device_type,
413 Kokkos::MemoryUnmanaged>
418 vec_->ExtractView(&data, &myLDA);
419 int localLength = vec_->MyLength();
423 epetra_view_type test = epetra_view_type(data, localLength, numVectors);
424 typename dual_view_type::t_host_um ret = subview(test, Kokkos::ALL(), Kokkos::ALL());
437 Teuchos::RCP<const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
getVector(
size_t )
const {
448 Teuchos::ArrayRCP<const int>
getData(
size_t j)
const {
451 int **arrayOfPointers;
452 vec_->ExtractView(&arrayOfPointers);
453 int *data = arrayOfPointers[j];
454 int localLength = vec_->MyLength();
456 return ArrayRCP<int>(data, 0, localLength,
false);
464 int **arrayOfPointers;
465 vec_->ExtractView(&arrayOfPointers);
466 int *data = arrayOfPointers[j];
467 int localLength = vec_->MyLength();
469 return ArrayRCP<int>(data, 0, localLength,
false);
478 const Teuchos::ArrayView<int> & )
const {
483 "This function is not implemented in Epetra_IntMultiVector");
490 "This function is not available in Epetra_IntMultiVector");
508 void scale(Teuchos::ArrayView<const int> ) {
522 void update(
const int & ,
const MultiVector<int, int, GlobalOrdinal, Node> & ,
const int & ,
const MultiVector<int, int, GlobalOrdinal, Node> & ,
const int & ) {
531 void norm1(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> & )
const {
537 void norm2(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> & )
const {
543 void normInf(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> & )
const {
549 void meanValue(
const Teuchos::ArrayView<int> & )
const {
555 void maxValue(
const Teuchos::ArrayView<int> & )
const {
561 void multiply(Teuchos::ETransp , Teuchos::ETransp ,
const int & ,
const MultiVector<int, int, GlobalOrdinal, Node> & ,
const MultiVector<int, int, GlobalOrdinal, Node> & ,
const int & ) {
569 TEUCHOS_TEST_FOR_EXCEPTION(1,
Xpetra::Exceptions::NotImplemented,
"Xpetra_EpetraIntMultiVector: elementWiseMultiply not implemented because Epetra_IntMultiVector does not support this operation");
579 vec_->ReplaceGlobalValue(globalRow, vectorIndex, value);
584 vec_->SumIntoGlobalValue(globalRow, vectorIndex, value);
589 vec_->ReplaceMyValue(myRow, vectorIndex, value);
594 vec_->SumIntoMyValue(myRow, vectorIndex, value);
604 return vec_->NumVectors();
609 return vec_->MyLength();
618 auto vv = toEpetra<GlobalOrdinal, Node>(vec);
619 return ((
getLocalLength() == Teuchos::as<size_t>(vv.MyLength())) &&
633 std::ostringstream oss;
634 oss << Teuchos::Describable::description();
641 void describe(Teuchos::FancyOStream &out,
const Teuchos::EVerbosityLevel verbLevel = Teuchos::Describable::verbLevel_default)
const {
647 using Teuchos::VERB_DEFAULT;
648 using Teuchos::VERB_EXTREME;
649 using Teuchos::VERB_HIGH;
650 using Teuchos::VERB_LOW;
651 using Teuchos::VERB_MEDIUM;
652 using Teuchos::VERB_NONE;
654 if (verbLevel > Teuchos::VERB_NONE)
667 Teuchos::RCP<const Map<int, GlobalOrdinal, Node> >
getMap()
const {
668 RCP<const Epetra_BlockMap> map = rcp(
new Epetra_BlockMap(vec_->Map()));
679 const Epetra_IntMultiVector &v = *tSource.getEpetra_IntMultiVector();
680 int err = vec_->Import(v, *tImporter.getEpetra_Import(),
toEpetra(CM));
681 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
691 const Epetra_IntMultiVector &v = *tDest.getEpetra_IntMultiVector();
692 int err = vec_->Import(v, *tImporter.getEpetra_Import(),
toEpetra(CM));
693 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
703 const Epetra_IntMultiVector &v = *tSource.getEpetra_IntMultiVector();
704 int err = vec_->Import(v, *tExporter.getEpetra_Export(),
toEpetra(CM));
705 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
715 const Epetra_IntMultiVector &v = *tDest.getEpetra_IntMultiVector();
716 int err = vec_->Export(v, *tExporter.getEpetra_Export(),
toEpetra(CM));
717 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
723 if (!map.is_null()) {
728 Epetra_SerialComm SComm;
732 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
741 const this_type *rhsPtr =
dynamic_cast<const this_type *
>(&rhs);
742 TEUCHOS_TEST_FOR_EXCEPTION(
743 rhsPtr == NULL, std::invalid_argument,
744 "Xpetra::MultiVector::operator=: "
745 "The left-hand side (LHS) of the assignment has a different type than "
746 "the right-hand side (RHS). The LHS has type Xpetra::EpetraIntMultiVectorT "
747 "(which means it wraps an Epetra_IntMultiVector), but the RHS has some "
748 "other type. This probably means that the RHS wraps either an "
749 "Tpetra::MultiVector, or an Epetra_MultiVector. Xpetra::MultiVector "
750 "does not currently implement assignment from a Tpetra object to an "
751 "Epetra object, though this could be added with sufficient interest.");
753 RCP<const Epetra_IntMultiVector> rhsImpl = rhsPtr->getEpetra_IntMultiVector();
756 TEUCHOS_TEST_FOR_EXCEPTION(
757 rhsImpl.is_null(), std::logic_error,
758 "Xpetra::MultiVector::operator= "
759 "(in Xpetra::EpetraIntMultiVectorT::assign): *this (the right-hand side of "
760 "the assignment) has a null RCP<Epetra_IntMultiVector> inside. Please "
761 "report this bug to the Xpetra developers.");
762 TEUCHOS_TEST_FOR_EXCEPTION(
763 lhsImpl.is_null(), std::logic_error,
764 "Xpetra::MultiVector::operator= "
765 "(in Xpetra::EpetraIntMultiVectorT::assign): The left-hand side of the "
766 "assignment has a null RCP<Epetra_IntMultiVector> inside. Please report "
767 "this bug to the Xpetra developers.");
775 RCP<Epetra_IntMultiVector>
vec_;
780 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
783 :
public virtual MultiVector<int, int, long long, EpetraNode> {
795 vec_ = rcp(
new Epetra_IntMultiVector(toEpetra<GlobalOrdinal, Node>(map), NumVectors, zeroOut));
800 vec_ = rcp(
new Epetra_IntMultiVector(toEpetra<GlobalOrdinal, Node>(source)));
806 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
820 ierr = vec_->PutScalar(value);
849 Teuchos::RCP<const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
getVector(
size_t )
const {
860 Teuchos::ArrayRCP<const int>
getData(
size_t j)
const {
863 int **arrayOfPointers;
864 vec_->ExtractView(&arrayOfPointers);
865 int *data = arrayOfPointers[j];
866 int localLength = vec_->MyLength();
868 return ArrayRCP<int>(data, 0, localLength,
false);
876 int **arrayOfPointers;
877 vec_->ExtractView(&arrayOfPointers);
878 int *data = arrayOfPointers[j];
879 int localLength = vec_->MyLength();
881 return ArrayRCP<int>(data, 0, localLength,
false);
890 const Teuchos::ArrayView<int> & )
const {
901 "This function is not available in Epetra_IntMultiVector");
908 "This function is not implemented in Epetra_IntMultiVector");
918 void scale(Teuchos::ArrayView<const int> ) {
932 void update(
const int & ,
const MultiVector<int, int, GlobalOrdinal, Node> & ,
const int & ,
const MultiVector<int, int, GlobalOrdinal, Node> & ,
const int & ) {
941 void norm1(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> & )
const {
947 void norm2(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> & )
const {
953 void normInf(
const Teuchos::ArrayView<Teuchos::ScalarTraits<int>::magnitudeType> & )
const {
959 void meanValue(
const Teuchos::ArrayView<int> & )
const {
965 void maxValue(
const Teuchos::ArrayView<int> & )
const {
971 void multiply(Teuchos::ETransp , Teuchos::ETransp ,
const int & ,
const MultiVector<int, int, GlobalOrdinal, Node> & ,
const MultiVector<int, int, GlobalOrdinal, Node> & ,
const int & ) {
979 TEUCHOS_TEST_FOR_EXCEPTION(1,
Xpetra::Exceptions::NotImplemented,
"Xpetra_EpetraIntMultiVector: elementWiseMultiply not implemented because Epetra_IntMultiVector does not support this operation");
989 vec_->ReplaceGlobalValue(globalRow, vectorIndex, value);
994 vec_->SumIntoGlobalValue(globalRow, vectorIndex, value);
999 vec_->ReplaceMyValue(myRow, vectorIndex, value);
1004 vec_->SumIntoMyValue(myRow, vectorIndex, value);
1014 return vec_->NumVectors();
1026 auto vv = toEpetra<GlobalOrdinal, Node>(vec);
1027 return ((
getLocalLength() == Teuchos::as<size_t>(vv.MyLength())) &&
1040 std::ostringstream oss;
1041 oss << Teuchos::Describable::description();
1048 void describe(Teuchos::FancyOStream &out,
const Teuchos::EVerbosityLevel verbLevel = Teuchos::Describable::verbLevel_default)
const {
1054 using Teuchos::VERB_DEFAULT;
1055 using Teuchos::VERB_EXTREME;
1056 using Teuchos::VERB_HIGH;
1057 using Teuchos::VERB_LOW;
1058 using Teuchos::VERB_MEDIUM;
1059 using Teuchos::VERB_NONE;
1061 if (verbLevel > Teuchos::VERB_NONE)
1074 Teuchos::RCP<const Map<int, GlobalOrdinal, Node> >
getMap()
const {
1075 RCP<const Epetra_BlockMap> map = rcp(
new Epetra_BlockMap(vec_->Map()));
1086 const Epetra_IntMultiVector &v = *tSource.getEpetra_IntMultiVector();
1087 int err = vec_->Import(v, *tImporter.getEpetra_Import(),
toEpetra(CM));
1088 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
1098 const Epetra_IntMultiVector &v = *tDest.getEpetra_IntMultiVector();
1099 int err = vec_->Import(v, *tImporter.getEpetra_Import(),
toEpetra(CM));
1100 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
1110 const Epetra_IntMultiVector &v = *tSource.getEpetra_IntMultiVector();
1111 int err = vec_->Import(v, *tExporter.getEpetra_Export(),
toEpetra(CM));
1112 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
1122 const Epetra_IntMultiVector &v = *tDest.getEpetra_IntMultiVector();
1123 int err = vec_->Export(v, *tExporter.getEpetra_Export(),
toEpetra(CM));
1124 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
1130 if (!map.is_null()) {
1135 Epetra_SerialComm SComm;
1139 TEUCHOS_TEST_FOR_EXCEPTION(err != 0, std::runtime_error,
"Catch error code returned by Epetra.");
1148 const this_type *rhsPtr =
dynamic_cast<const this_type *
>(&rhs);
1149 TEUCHOS_TEST_FOR_EXCEPTION(
1150 rhsPtr == NULL, std::invalid_argument,
1151 "Xpetra::MultiVector::operator=: "
1152 "The left-hand side (LHS) of the assignment has a different type than "
1153 "the right-hand side (RHS). The LHS has type Xpetra::EpetraIntMultiVectorT "
1154 "(which means it wraps an Epetra_IntMultiVector), but the RHS has some "
1155 "other type. This probably means that the RHS wraps either an "
1156 "Tpetra::MultiVector, or an Epetra_MultiVector. Xpetra::MultiVector "
1157 "does not currently implement assignment from a Tpetra object to an "
1158 "Epetra object, though this could be added with sufficient interest.");
1160 RCP<const Epetra_IntMultiVector> rhsImpl = rhsPtr->getEpetra_IntMultiVector();
1163 TEUCHOS_TEST_FOR_EXCEPTION(
1164 rhsImpl.is_null(), std::logic_error,
1165 "Xpetra::MultiVector::operator= "
1166 "(in Xpetra::EpetraIntMultiVectorT::assign): *this (the right-hand side of "
1167 "the assignment) has a null RCP<Epetra_IntMultiVector> inside. Please "
1168 "report this bug to the Xpetra developers.");
1169 TEUCHOS_TEST_FOR_EXCEPTION(
1170 lhsImpl.is_null(), std::logic_error,
1171 "Xpetra::MultiVector::operator= "
1172 "(in Xpetra::EpetraIntMultiVectorT::assign): The left-hand side of the "
1173 "assignment has a null RCP<Epetra_IntMultiVector> inside. Please report "
1174 "this bug to the Xpetra developers.");
1177 *lhsImpl = *rhsImpl;
1188 #endif // XPETRA_EPETRAINTMULTIVECTOR_HPP
EpetraIntMultiVectorT(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &, const Teuchos::ArrayView< const Teuchos::ArrayView< const Scalar > > &, size_t)
Set multi-vector values from array of pointers using Teuchos memory management classes. (copy).
EpetraIntMultiVectorT(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, bool zeroOut=true)
Sets all vector entries to zero.
Teuchos::ArrayRCP< int > getDataNonConst(size_t j)
EpetraIntMultiVectorT(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, bool zeroOut=true)
Sets all vector entries to zero.
dual_view_type::t_host_um getHostLocalView(Access::ReadWriteStruct) const override
Teuchos::RCP< const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVector(size_t) const
Return a Vector which is a const view of column j.
Teuchos::RCP< Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVectorNonConst(size_t)
Return a Vector which is a nonconst view of column j.
void sumIntoGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using global (row) index.
void update(const int &alpha, const MultiVector< int, int, GlobalOrdinal, Node > &A, const int &beta)
Update multi-vector values with scaled values of A, this = beta*this + alpha*A.
global_size_t getGlobalLength() const
Returns the global vector length of vectors in the multi-vector.
void replaceGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Replace value, using global (row) index.
void update(const int &, const MultiVector< int, int, GlobalOrdinal, Node > &, const int &)
Update multi-vector values with scaled values of A, this = beta*this + alpha*A.
void sumIntoGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using global (row) index.
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
bool isSameSize(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &vec) const
Checks to see if the local length, number of vectors and size of Scalar type match.
void replaceMap(const RCP< const Map< int, GlobalOrdinal, Node > > &map)
void putScalar(const int &value)
Initialize all values in a multi-vector with specified value.
void meanValue(const Teuchos::ArrayView< int > &) const
Compute mean (average) value of each vector in multi-vector.
void scale(const int &)
Scale the current values of a multi-vector, this = alpha*this.
void abs(const MultiVector< int, int, GlobalOrdinal, Node > &A)
Puts element-wise absolute values of input Multi-vector in target: A = abs(this)
EpetraGlobalOrdinal GlobalOrdinal
dual_view_type::t_host_const_um getHostLocalView(Access::ReadOnlyStruct) const override
void dot(const MultiVector< int, int, GlobalOrdinal, Node > &A, const Teuchos::ArrayView< int > &dots) const
Computes dot product of each corresponding pair of vectors, dots[i] = this[i].dot(A[i]) ...
Teuchos::ArrayRCP< int > getDataNonConst(size_t j)
void elementWiseMultiply(int, const Vector< int, int, GlobalOrdinal, Node > &, const MultiVector< int, int, GlobalOrdinal, Node > &, int)
Element-wise multiply of a Vector A with a EpetraMultiVector B.
void reciprocal(const MultiVector< int, int, GlobalOrdinal, Node > &A)
Puts element-wise reciprocal values of input Multi-vector in target, this(i,j) = 1/A(i,j).
Teuchos::RCP< const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVector(size_t j) const
Return a Vector which is a const view of column j.
void sumIntoGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using global (row) index.
Exception throws to report errors in the internal logical of the program.
size_t getNumVectors() const
Returns the number of vectors in the multi-vector.
virtual void assign(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &rhs)
Implementation of the assignment operator (operator=); does a deep copy.
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
void randomize(const Scalar &minVal, const Scalar &maxVal, bool bUseXpetraImplementation=true)
Set multi-vector values to random numbers.
void replaceMap(const RCP< const Map< int, GlobalOrdinal, Node > > &map)
void update(const int &, const MultiVector< int, int, GlobalOrdinal, Node > &, const int &, const MultiVector< int, int, GlobalOrdinal, Node > &, const int &)
Update multi-vector with scaled values of A and B, this = gamma*this + alpha*A + beta*B.
EpetraIntMultiVectorT(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, const Teuchos::ArrayView< const Teuchos::ArrayView< const Scalar > > &ArrayOfPtrs, size_t NumVectors)
Set multi-vector values from array of pointers using Teuchos memory management classes. (copy).
void scale(const int &)
Scale the current values of a multi-vector, this = alpha*this.
void meanValue(const Teuchos::ArrayView< int > &) const
Compute mean (average) value of each vector in multi-vector.
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
void doImport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &source, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
bool isSameSize(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &vec) const
Checks to see if the local length, number of vectors and size of Scalar type match.
void norm2(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute 2-norm of each vector in multi-vector.
size_t getNumVectors() const
Returns the number of vectors in the multi-vector.
Teuchos::RCP< const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVector(size_t) const
Return a Vector which is a const view of column j.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with some verbosity level to an FancyOStream object.
void sumIntoLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using local (row) index.
dual_view_type::t_dev_um getDeviceLocalView(Access::OverwriteAllStruct) const override
void scale(const int &alpha)
Scale the current values of a multi-vector, this = alpha*this.
const RCP< const Comm< int > > getComm() const
void putScalar(const int &value)
Initialize all values in a multi-vector with specified value.
void sumIntoLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using local (row) index.
void normInf(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute Inf-norm of each vector in multi-vector.
void scale(Teuchos::ArrayView< const int >)
Scale the current values of a multi-vector, this[j] = alpha[j]*this[j].
std::string description() const
Return a simple one-line description of this object.
void doImport(const DistObject< int, int, GlobalOrdinal, Node > &source, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
Teuchos::ArrayRCP< const int > getData(size_t j) const
const RCP< const Comm< int > > getComm() const
void randomize(const Scalar &minVal, const Scalar &maxVal, bool bUseXpetraImplementation=true)
Set multi-vector values to random numbers.
size_t getLocalLength() const
Returns the local vector length on the calling processor of vectors in the multi-vector.
void elementWiseMultiply(int, const Vector< int, int, GlobalOrdinal, Node > &, const MultiVector< int, int, GlobalOrdinal, Node > &, int)
Element-wise multiply of a Vector A with a EpetraMultiVector B.
void reciprocal(const MultiVector< int, int, GlobalOrdinal, Node > &)
Puts element-wise reciprocal values of input Multi-vector in target, this(i,j) = 1/A(i,j).
void randomize(bool=true)
Set multi-vector values to random numbers.
void setSeed(unsigned int)
Set seed for Random function.
void scale(Teuchos::ArrayView< const int > alpha)
Scale the current values of a multi-vector, this[j] = alpha[j]*this[j].
~EpetraIntMultiVectorT()
Destructor.
void putScalar(const int &value)
Initialize all values in a multi-vector with specified value.
void doImport(const DistObject< int, int, GlobalOrdinal, Node > &source, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
Teuchos::RCP< const Map< int, GlobalOrdinal, Node > > getMap() const
The Map describing the parallel distribution of this object.
size_t getNumVectors() const
Returns the number of vectors in the multi-vector.
Teuchos::RCP< const Map< int, GlobalOrdinal, Node > > getMap() const
The Map describing the parallel distribution of this object.
dual_view_type::t_host_um getHostLocalView(Access::OverwriteAllStruct) const override
void randomize(bool bUseXpetraImplementation=true)
Set multi-vector values to random numbers.
void abs(const MultiVector< int, int, GlobalOrdinal, Node > &)
Puts element-wise absolute values of input Multi-vector in target: A = abs(this)
RCP< Epetra_IntMultiVector > vec_
The Epetra_IntMultiVector which this class wraps.
~EpetraIntMultiVectorT()
Destructor.
void update(const int &alpha, const MultiVector< int, int, GlobalOrdinal, Node > &A, const int &beta, const MultiVector< int, int, GlobalOrdinal, Node > &B, const int &gamma)
Update multi-vector with scaled values of A and B, this = gamma*this + alpha*A + beta*B.
~EpetraIntMultiVectorT()
Destructor.
void normInf(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute Inf-norm of each vector in multi-vector.
size_t getLocalLength() const
Returns the local vector length on the calling processor of vectors in the multi-vector.
void normInf(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &norms) const
Compute Inf-norm of each vector in multi-vector.
Teuchos::ArrayRCP< int > getDataNonConst(size_t j)
global_size_t getGlobalLength() const
Returns the global vector length of vectors in the multi-vector.
void maxValue(const Teuchos::ArrayView< int > &) const
Compute max value of each vector in multi-vector.
RCP< Epetra_IntMultiVector > getEpetra_IntMultiVector() const
size_t getLocalLength() const
Returns the local vector length on the calling processor of vectors in the multi-vector.
void sumIntoLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using local (row) index.
global_size_t getGlobalLength() const
Returns the global vector length of vectors in the multi-vector.
const RCP< const Comm< int > > getComm() const
void abs(const MultiVector< int, int, GlobalOrdinal, Node > &)
Puts element-wise absolute values of input Multi-vector in target: A = abs(this)
RCP< Epetra_IntMultiVector > getEpetra_IntMultiVector() const
Teuchos::ArrayRCP< const int > getData(size_t j) const
void replaceLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Replace value, using local (row) index.
void update(const int &, const MultiVector< int, int, GlobalOrdinal, Node > &, const int &, const MultiVector< int, int, GlobalOrdinal, Node > &, const int &)
Update multi-vector with scaled values of A and B, this = gamma*this + alpha*A + beta*B.
Teuchos::RCP< const Map< int, GlobalOrdinal, Node > > getMap() const
The Map describing the parallel distribution of this object.
void reciprocal(const MultiVector< int, int, GlobalOrdinal, Node > &)
Puts element-wise reciprocal values of input Multi-vector in target, this(i,j) = 1/A(i,j).
RCP< Epetra_IntMultiVector > vec_
The Epetra_IntMultiVector which this class wraps.
Exception throws when you call an unimplemented method of Xpetra.
void setSeed(unsigned int seed)
Set seed for Random function.
void replaceLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Replace value, using local (row) index.
virtual void assign(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &rhs)
Implementation of the assignment operator (operator=); does a deep copy.
void norm1(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute 1-norm of each vector in multi-vector.
void update(const int &, const MultiVector< int, int, GlobalOrdinal, Node > &, const int &)
Update multi-vector values with scaled values of A, this = beta*this + alpha*A.
void elementWiseMultiply(int scalarAB, const Vector< int, int, GlobalOrdinal, Node > &A, const MultiVector< int, int, GlobalOrdinal, Node > &B, int scalarThis)
Element-wise multiply of a Vector A with a EpetraMultiVector B.
#define XPETRA_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
void scale(Teuchos::ArrayView< const int >)
Scale the current values of a multi-vector, this[j] = alpha[j]*this[j].
size_t global_size_t
Global size_t object.
void norm2(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &norms) const
Compute 2-norm of each vector in multi-vector.
void maxValue(const Teuchos::ArrayView< int > &) const
Compute max value of each vector in multi-vector.
EpetraIntMultiVectorT(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &, const Teuchos::ArrayView< const Teuchos::ArrayView< const Scalar > > &, size_t)
Set multi-vector values from array of pointers using Teuchos memory management classes. (copy).
void randomize(bool=true)
Set multi-vector values to random numbers.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with some verbosity level to an FancyOStream object.
Kokkos::DualView< impl_scalar_type **, Kokkos::LayoutStride, typename node_type::device_type, Kokkos::MemoryUnmanaged > dual_view_type
void norm2(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute 2-norm of each vector in multi-vector.
void multiply(Teuchos::ETransp, Teuchos::ETransp, const int &, const MultiVector< int, int, GlobalOrdinal, Node > &, const MultiVector< int, int, GlobalOrdinal, Node > &, const int &)
Matrix-Matrix multiplication, this = beta*this + alpha*op(A)*op(B).
void doImport(const DistObject< int, int, GlobalOrdinal, Node > &source, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
void doImport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &source, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
void replaceMap(const RCP< const Map< int, GlobalOrdinal, Node > > &map)
void norm1(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &norms) const
Compute 1-norm of each vector in multi-vector.
Teuchos::RCP< Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVectorNonConst(size_t j)
Return a Vector which is a nonconst view of column j.
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
bool isSameSize(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &vec) const
Checks to see if the local length, number of vectors and size of Scalar type match.
void norm1(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute 1-norm of each vector in multi-vector.
dual_view_type::t_dev_const_um getDeviceLocalView(Access::ReadOnlyStruct) const override
std::string description() const
Return a simple one-line description of this object.
virtual void assign(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &rhs)
Implementation of the assignment operator (operator=); does a deep copy.
void replaceGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Replace value, using global (row) index.
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
void multiply(Teuchos::ETransp, Teuchos::ETransp, const int &, const MultiVector< int, int, GlobalOrdinal, Node > &, const MultiVector< int, int, GlobalOrdinal, Node > &, const int &)
Matrix-Matrix multiplication, this = beta*this + alpha*op(A)*op(B).
void maxValue(const Teuchos::ArrayView< int > &maxs) const
Compute max value of each vector in multi-vector.
EpetraIntMultiVectorT(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &source, const Teuchos::DataAccess copyOrView=Teuchos::Copy)
MultiVector copy constructor.
CombineMode
Xpetra::Combine Mode enumerable type.
void setSeed(unsigned int)
Set seed for Random function.
EpetraIntMultiVectorT(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &source, const Teuchos::DataAccess copyOrView=Teuchos::Copy)
MultiVector copy constructor.
constexpr struct ReadWriteStruct ReadWrite
#define XPETRA_MONITOR(funcName)
virtual dual_view_type::t_host_const_um getHostLocalView(Access::ReadOnlyStruct) const
void meanValue(const Teuchos::ArrayView< int > &means) const
Compute mean (average) value of each vector in multi-vector.
dual_view_type::t_dev_um getDeviceLocalView(Access::ReadWriteStruct) const override
std::string description() const
Return a simple one-line description of this object.
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
Teuchos::ArrayRCP< const int > getData(size_t j) const
EpetraIntMultiVectorT(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, bool zeroOut=true)
Sets all vector entries to zero.
Teuchos::RCP< Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVectorNonConst(size_t)
Return a Vector which is a nonconst view of column j.
void randomize(const Scalar &minVal, const Scalar &maxVal, bool bUseXpetraImplementation=true)
Set multi-vector values to random numbers.
void doImport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &source, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
RCP< Epetra_IntMultiVector > getEpetra_IntMultiVector() const
void replaceGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Replace value, using global (row) index.
Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node >::dual_view_type dual_view_type
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with some verbosity level to an FancyOStream object.
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
void replaceLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Replace value, using local (row) index.
EpetraIntMultiVectorT(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &source)
MultiVector copy constructor.
void multiply(Teuchos::ETransp transA, Teuchos::ETransp transB, const int &alpha, const MultiVector< int, int, GlobalOrdinal, Node > &A, const MultiVector< int, int, GlobalOrdinal, Node > &B, const int &beta)
Matrix-Matrix multiplication, this = beta*this + alpha*op(A)*op(B).