46 #ifndef XPETRA_EPETRAINTMULTIVECTOR_HPP
47 #define XPETRA_EPETRAINTMULTIVECTOR_HPP
57 #include "Epetra_IntMultiVector.h"
62 template<
class GlobalOrdinal,
class Node>
65 template<
class GlobalOrdinal,
class Node>
70 template<
class EpetraGlobalOrdinal,
class Node>
72 :
public MultiVector<int,int,EpetraGlobalOrdinal, Node>
86 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
92 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
98 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
120 "Xpetra::EpetraIntMultiVectorT::setSeed(): Functionnality not available in Epetra"); }
130 return Teuchos::null;
135 return Teuchos::null;
158 "This function is not implemented in Epetra_IntMultiVector");
167 "This function is not implemented in Epetra_IntMultiVector");
177 "Xpetra::EpetraIntMultiVectorT::scale(): Functionnality not available in Epetra");
184 "Xpetra::EpetraIntMultiVectorT::update(): Functionnality not available in Epetra");
188 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) {
191 "Xpetra::EpetraIntMultiVectorT::update(): Functionnality not available in Epetra");
198 "Xpetra::EpetraIntMultiVectorT::norm1(): Functionnality not available in Epetra");
205 "Xpetra::EpetraIntMultiVectorT::norm2(): Functionnality not available in Epetra"); }
211 "Xpetra::EpetraIntMultiVectorT::normInf(): Functionnality not available in Epetra"); }
217 "Xpetra::EpetraIntMultiVectorT::meanValue(): Functionnality not available in Epetra");
224 "Xpetra::EpetraIntMultiVectorT::maxValue(): Functionnality not available in Epetra");
228 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) {
231 "Xpetra::EpetraIntMultiVectorT::multiply(): Functionnality not available in Epetra");
238 "Xpetra_EpetraIntMultiVector: elementWiseMultiply not implemented because Epetra_IntMultiVector does not support this operation");
295 return std::string(
"");
311 return Teuchos::null;
333 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
336 typename dual_view_type::t_host_um getHostLocalView ()
const {
337 throw std::runtime_error(
"EpetraIntVector does not support device views! Must be implemented extra...");
339 typename dual_view_type::t_host_um ret;
344 typename dual_view_type::t_dev_um getDeviceLocalView()
const {
345 throw std::runtime_error(
"Epetra does not support device views!");
347 typename dual_view_type::t_dev_um ret;
352 template<
class TargetDeviceType>
353 typename Kokkos::Impl::if_c<
354 Kokkos::Impl::is_same<
355 typename dual_view_type::t_dev_um::execution_space::memory_space,
356 typename TargetDeviceType::memory_space>::value,
357 typename dual_view_type::t_dev_um,
358 typename dual_view_type::t_host_um>::type
359 getLocalView ()
const {
360 return this->MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node >::template getLocalView<TargetDeviceType>();
381 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
384 :
public virtual MultiVector<int,int,int,EpetraNode>
409 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
423 ierr = vec_->PutScalar(value);
456 int ** arrayOfPointers;
457 vec_->ExtractView(&arrayOfPointers);
458 int * data = arrayOfPointers[j];
459 int localLength = vec_->MyLength();
469 int ** arrayOfPointers;
470 vec_->ExtractView(&arrayOfPointers);
471 int * data = arrayOfPointers[j];
472 int localLength = vec_->MyLength();
488 "This function is not implemented in Epetra_IntMultiVector");
495 "This function is not available in Epetra_IntMultiVector");
527 void update(
const int &,
const MultiVector<int,int,GlobalOrdinal,Node> &,
const int &,
const MultiVector<int,int,GlobalOrdinal,Node> &,
const int &) {
551 void multiply(
Teuchos::ETransp ,
Teuchos::ETransp ,
const int &,
const MultiVector<int,int,GlobalOrdinal,Node> &,
const MultiVector<int,int,GlobalOrdinal,Node> &,
const int &) {
XPETRA_MONITOR(
"EpetraIntMultiVectorT::multiply");
TEUCHOS_TEST_FOR_EXCEPTION(1,
Xpetra::Exceptions::NotImplemented,
"Not available in Epetra"); }
566 vec_->ReplaceGlobalValue(globalRow, vectorIndex, value);
571 vec_->SumIntoGlobalValue(globalRow, vectorIndex, value);
576 vec_->ReplaceMyValue(myRow, vectorIndex, value);
581 vec_->SumIntoMyValue(myRow, vectorIndex, value);
591 return vec_->NumVectors();
597 return vec_->MyLength();
606 auto vv = toEpetra<GlobalOrdinal,Node>(vec);
607 return ( (
getLocalLength() == Teuchos::as<size_t>(vv.MyLength())) &&
621 std::ostringstream oss;
668 int err = vec_->
Import(v, *tImporter.getEpetra_Import(),
toEpetra(CM));
680 int err = vec_->
Import(v, *tImporter.getEpetra_Import(),
toEpetra(CM));
692 int err = vec_->
Import(v, *tExporter.getEpetra_Export(),
toEpetra(CM));
704 int err = vec_->
Export(v, *tExporter.getEpetra_Export(),
toEpetra(CM));
711 if (!map.is_null()) {
726 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
729 typename dual_view_type::t_host_um getHostLocalView ()
const {
730 typedef Kokkos::View<
typename dual_view_type::t_host::data_type ,
732 typename dual_view_type::t_host::device_type ,
733 Kokkos::MemoryUnmanaged> epetra_view_type;
738 vec_->ExtractView(&data, &myLDA);
739 int localLength = vec_->MyLength();
740 int numVectors = vec_->NumVectors();
743 epetra_view_type test = epetra_view_type(data, localLength, numVectors);
744 typename dual_view_type::t_host_um ret = subview(test, Kokkos::ALL(), Kokkos::ALL());
749 typename dual_view_type::t_dev_um getDeviceLocalView()
const {
750 throw std::runtime_error(
"Epetra does not support device views!");
752 typename dual_view_type::t_dev_um ret;
767 template<
class TargetDeviceType>
768 typename Kokkos::Impl::if_c<
769 Kokkos::Impl::is_same<
770 typename dual_view_type::t_dev_um::execution_space::memory_space,
771 typename TargetDeviceType::memory_space>::value,
772 typename dual_view_type::t_dev_um,
773 typename dual_view_type::t_host_um>::type
774 getLocalView ()
const {
775 return this->MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node >::template getLocalView<TargetDeviceType>();
788 const this_type* rhsPtr =
dynamic_cast<const this_type*
> (&rhs);
790 rhsPtr == NULL, std::invalid_argument,
"Xpetra::MultiVector::operator=: "
791 "The left-hand side (LHS) of the assignment has a different type than "
792 "the right-hand side (RHS). The LHS has type Xpetra::EpetraIntMultiVectorT "
793 "(which means it wraps an Epetra_IntMultiVector), but the RHS has some "
794 "other type. This probably means that the RHS wraps either an "
795 "Tpetra::MultiVector, or an Epetra_MultiVector. Xpetra::MultiVector "
796 "does not currently implement assignment from a Tpetra object to an "
797 "Epetra object, though this could be added with sufficient interest.");
803 rhsImpl.
is_null (), std::logic_error,
"Xpetra::MultiVector::operator= "
804 "(in Xpetra::EpetraIntMultiVectorT::assign): *this (the right-hand side of "
805 "the assignment) has a null RCP<Epetra_IntMultiVector> inside. Please "
806 "report this bug to the Xpetra developers.");
808 lhsImpl.
is_null (), std::logic_error,
"Xpetra::MultiVector::operator= "
809 "(in Xpetra::EpetraIntMultiVectorT::assign): The left-hand side of the "
810 "assignment has a null RCP<Epetra_IntMultiVector> inside. Please report "
811 "this bug to the Xpetra developers.");
825 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
828 :
public virtual MultiVector<int,int,long long,EpetraNode>
853 "Xpetra::EpetraIntMultiVector only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)");
867 ierr = vec_->PutScalar(value);
900 int ** arrayOfPointers;
901 vec_->ExtractView(&arrayOfPointers);
902 int * data = arrayOfPointers[j];
903 int localLength = vec_->MyLength();
913 int ** arrayOfPointers;
914 vec_->ExtractView(&arrayOfPointers);
915 int * data = arrayOfPointers[j];
916 int localLength = vec_->MyLength();
938 "This function is not available in Epetra_IntMultiVector");
945 "This function is not implemented in Epetra_IntMultiVector");
969 void update(
const int &,
const MultiVector<int,int,GlobalOrdinal,Node> &,
const int &,
const MultiVector<int,int,GlobalOrdinal,Node> &,
const int &) {
993 void multiply(
Teuchos::ETransp ,
Teuchos::ETransp ,
const int &,
const MultiVector<int,int,GlobalOrdinal,Node> &,
const MultiVector<int,int,GlobalOrdinal,Node> &,
const int &) {
XPETRA_MONITOR(
"EpetraIntMultiVectorT::multiply");
TEUCHOS_TEST_FOR_EXCEPTION(1,
Xpetra::Exceptions::NotImplemented,
"Not available in Epetra"); }
1008 vec_->ReplaceGlobalValue(globalRow, vectorIndex, value);
1013 vec_->SumIntoGlobalValue(globalRow, vectorIndex, value);
1018 vec_->ReplaceMyValue(myRow, vectorIndex, value);
1023 vec_->SumIntoMyValue(myRow, vectorIndex, value);
1033 return vec_->NumVectors();
1047 auto vv = toEpetra<GlobalOrdinal, Node>(vec);
1048 return ( (
getLocalLength() == Teuchos::as<size_t>(vv.MyLength())) &&
1061 std::ostringstream oss;
1108 int err = vec_->
Import(v, *tImporter.getEpetra_Import(),
toEpetra(CM));
1120 int err = vec_->
Import(v, *tImporter.getEpetra_Import(),
toEpetra(CM));
1132 int err = vec_->
Import(v, *tExporter.getEpetra_Export(),
toEpetra(CM));
1144 int err = vec_->
Export(v, *tExporter.getEpetra_Export(),
toEpetra(CM));
1151 if (!map.is_null()) {
1166 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
1169 typename dual_view_type::t_host_um getHostLocalView ()
const {
1170 typedef Kokkos::View<
typename dual_view_type::t_host::data_type ,
1172 typename dual_view_type::t_host::device_type ,
1173 Kokkos::MemoryUnmanaged> epetra_view_type;
1178 vec_->ExtractView(&data, &myLDA);
1179 int localLength = vec_->MyLength();
1180 int numVectors = vec_->NumVectors();
1183 epetra_view_type test = epetra_view_type(data, localLength, numVectors);
1184 typename dual_view_type::t_host_um ret = subview(test, Kokkos::ALL(), Kokkos::ALL());
1189 typename dual_view_type::t_dev_um getDeviceLocalView()
const {
1190 throw std::runtime_error(
"Epetra does not support device views!");
1192 typename dual_view_type::t_dev_um ret;
1207 template<
class TargetDeviceType>
1208 typename Kokkos::Impl::if_c<
1209 Kokkos::Impl::is_same<
1210 typename dual_view_type::t_dev_um::execution_space::memory_space,
1211 typename TargetDeviceType::memory_space>::value,
1212 typename dual_view_type::t_dev_um,
1213 typename dual_view_type::t_host_um>::type
1214 getLocalView ()
const {
1215 return this->MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node >::template getLocalView<TargetDeviceType>();
1228 const this_type* rhsPtr =
dynamic_cast<const this_type*
> (&rhs);
1230 rhsPtr == NULL, std::invalid_argument,
"Xpetra::MultiVector::operator=: "
1231 "The left-hand side (LHS) of the assignment has a different type than "
1232 "the right-hand side (RHS). The LHS has type Xpetra::EpetraIntMultiVectorT "
1233 "(which means it wraps an Epetra_IntMultiVector), but the RHS has some "
1234 "other type. This probably means that the RHS wraps either an "
1235 "Tpetra::MultiVector, or an Epetra_MultiVector. Xpetra::MultiVector "
1236 "does not currently implement assignment from a Tpetra object to an "
1237 "Epetra object, though this could be added with sufficient interest.");
1243 rhsImpl.
is_null (), std::logic_error,
"Xpetra::MultiVector::operator= "
1244 "(in Xpetra::EpetraIntMultiVectorT::assign): *this (the right-hand side of "
1245 "the assignment) has a null RCP<Epetra_IntMultiVector> inside. Please "
1246 "report this bug to the Xpetra developers.");
1248 lhsImpl.
is_null (), std::logic_error,
"Xpetra::MultiVector::operator= "
1249 "(in Xpetra::EpetraIntMultiVectorT::assign): The left-hand side of the "
1250 "assignment has a null RCP<Epetra_IntMultiVector> inside. Please report "
1251 "this bug to the Xpetra developers.");
1254 *lhsImpl = *rhsImpl;
#define XPETRA_MONITOR(funcName)
#define XPETRA_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
int Import(const Epetra_SrcDistObject &A, const Epetra_Import &Importer, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex *Indexor=0)
int Export(const Epetra_SrcDistObject &A, const Epetra_Import &Importer, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex *Indexor=0)
static const EVerbosityLevel verbLevel_default
virtual std::string description() const
Teuchos::RCP< const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVector(size_t) const
Return a Vector which is a const view of column j.
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::ArrayRCP< const int > getData(size_t j) const
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....
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,...
const RCP< const Comm< int > > getComm() const
Teuchos::RCP< const Map< int, GlobalOrdinal, Node > > getMap() const
The Map describing the parallel distribution of this object.
std::string description() const
Return a simple one-line description of this object.
void norm1(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute 1-norm of each vector in multi-vector.
~EpetraIntMultiVectorT()
Destructor.
virtual void assign(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &rhs)
Implementation of the assignment operator (operator=); does a deep copy.
Teuchos::RCP< Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVectorNonConst(size_t)
Return a Vector which is a nonconst view of column j.
void randomize(bool=true)
Set multi-vector values to random numbers.
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, 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 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 doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
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 normInf(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute Inf-norm of each vector in multi-vector.
void sumIntoLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using local (row) index.
RCP< Epetra_IntMultiVector > vec_
The Epetra_IntMultiVector which this class wraps.
void norm2(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute 2-norm of each vector in multi-vector.
Teuchos::ArrayRCP< int > getDataNonConst(size_t j)
void scale(Teuchos::ArrayView< const int >)
Scale the current values of a multi-vector, this[j] = alpha[j]*this[j].
size_t getNumVectors() const
Returns the number of vectors in the multi-vector.
void sumIntoGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using global (row) index.
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 replaceGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Replace value, using global (row) index.
void setSeed(unsigned int)
Set seed for Random function.
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 doImport(const DistObject< int, int, GlobalOrdinal, Node > &source, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
EpetraIntMultiVectorT(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, bool zeroOut=true)
Sets all vector entries to zero.
RCP< Epetra_IntMultiVector > getEpetra_IntMultiVector() const
void scale(const int &)
Scale the current values of a multi-vector, this = alpha*this.
void replaceMap(const RCP< const Map< int, GlobalOrdinal, Node > > &map)
void maxValue(const Teuchos::ArrayView< int > &) const
Compute max value of each vector in multi-vector.
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 replaceLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Replace value, using local (row) index.
global_size_t getGlobalLength() const
Returns the global vector length of vectors in the multi-vector.
void meanValue(const Teuchos::ArrayView< int > &) const
Compute mean (average) value of each vector in multi-vector.
void putScalar(const int &value)
Initialize all values in a multi-vector with specified value.
EpetraIntMultiVectorT(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &source)
MultiVector copy constructor.
void abs(const MultiVector< int, int, GlobalOrdinal, Node > &)
Puts element-wise absolute values of input Multi-vector in target: A = abs(this)
size_t getLocalLength() const
Returns the local vector length on the calling processor of vectors in the multi-vector.
void replaceLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Replace value, using local (row) index.
void maxValue(const Teuchos::ArrayView< int > &) const
Compute max value of each vector in multi-vector.
global_size_t getGlobalLength() const
Returns the global vector length of vectors in the multi-vector.
Teuchos::ArrayRCP< const int > getData(size_t j) const
void sumIntoGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using global (row) index.
void putScalar(const int &value)
Initialize all values in a multi-vector with specified value.
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,...
RCP< Epetra_IntMultiVector > getEpetra_IntMultiVector() const
void doImport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &source, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
size_t getLocalLength() const
Returns the local vector length on the calling processor of vectors in the multi-vector.
void scale(const int &)
Scale the current values of a multi-vector, this = alpha*this.
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.
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.
void abs(const MultiVector< int, int, GlobalOrdinal, Node > &)
Puts element-wise absolute values of input Multi-vector in target: A = abs(this)
void replaceMap(const RCP< const Map< int, GlobalOrdinal, Node > > &map)
void doImport(const DistObject< int, int, GlobalOrdinal, Node > &source, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
void scale(Teuchos::ArrayView< const int >)
Scale the current values of a multi-vector, this[j] = alpha[j]*this[j].
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)
void sumIntoLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using local (row) index.
Teuchos::RCP< const Map< int, GlobalOrdinal, Node > > getMap() const
The Map describing the parallel distribution of this object.
~EpetraIntMultiVectorT()
Destructor.
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....
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 meanValue(const Teuchos::ArrayView< int > &) const
Compute mean (average) value of each vector in multi-vector.
void setSeed(unsigned int)
Set seed for Random function.
RCP< Epetra_IntMultiVector > vec_
The Epetra_IntMultiVector which this class wraps.
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
virtual void assign(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &rhs)
Implementation of the assignment operator (operator=); does a deep copy.
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.
void norm1(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute 1-norm of each vector in multi-vector.
std::string description() const
Return a simple one-line description of this object.
size_t getNumVectors() const
Returns the number of vectors in the multi-vector.
void randomize(bool=true)
Set multi-vector values to random numbers.
const RCP< const Comm< int > > getComm() const
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.
Teuchos::RCP< Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVectorNonConst(size_t)
Return a Vector which is a nonconst view of column j.
void normInf(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &) const
Compute Inf-norm of each vector in multi-vector.
void replaceGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Replace value, using global (row) index.
EpetraIntMultiVectorT(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &source)
MultiVector copy constructor.
Teuchos::RCP< const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVector(size_t) const
Return a Vector which is a const view of column j.
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).
std::string description() const
Return a simple one-line description of this object.
void setSeed(unsigned int seed)
Set seed for Random function.
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.
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.
void norm1(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &norms) const
Compute 1-norm of each vector in multi-vector.
void meanValue(const Teuchos::ArrayView< int > &means) const
Compute mean (average) value of each vector in multi-vector.
Teuchos::RCP< const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVector(size_t j) const
Return a Vector which is a const view of column j.
size_t getNumVectors() const
Returns the number of vectors in the multi-vector.
Teuchos::ArrayRCP< int > getDataNonConst(size_t j)
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, 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.
void abs(const MultiVector< int, int, GlobalOrdinal, Node > &A)
Puts element-wise absolute values of input Multi-vector in target: A = abs(this)
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....
void putScalar(const int &value)
Initialize all values in a multi-vector with specified value.
void maxValue(const Teuchos::ArrayView< int > &maxs) const
Compute max value of each vector in multi-vector.
void normInf(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &norms) const
Compute Inf-norm of each vector in multi-vector.
EpetraIntMultiVectorT(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, bool zeroOut=true)
Sets all vector entries to zero.
void replaceMap(const RCP< const Map< int, GlobalOrdinal, Node > > &map)
void norm2(const Teuchos::ArrayView< Teuchos::ScalarTraits< int >::magnitudeType > &norms) const
Compute 2-norm of each vector in multi-vector.
void sumIntoGlobalValue(GlobalOrdinal globalRow, size_t vectorIndex, const Scalar &value)
Add value to existing value, using global (row) index.
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,...
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).
void doImport(const DistObject< int, int, GlobalOrdinal, Node > &source, const Import< int, GlobalOrdinal, Node > &importer, CombineMode CM)
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.
Teuchos::ArrayRCP< const int > getData(size_t j) const
~EpetraIntMultiVectorT()
Destructor.
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])
EpetraGlobalOrdinal GlobalOrdinal
void doExport(const DistObject< int, LocalOrdinal, GlobalOrdinal, Node > &dest, const Export< int, GlobalOrdinal, Node > &exporter, CombineMode CM)
void replaceLocalValue(LocalOrdinal myRow, size_t vectorIndex, const Scalar &value)
Replace value, using local (row) index.
const RCP< const Comm< int > > getComm() const
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 scale(const int &alpha)
Scale the current values of a multi-vector, this = alpha*this.
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.
virtual void assign(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &rhs)
Implementation of the assignment operator (operator=); does a deep copy.
Teuchos::RCP< Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVectorNonConst(size_t j)
Return a Vector which is a nonconst view of column j.
void scale(Teuchos::ArrayView< const int > alpha)
Scale the current values of a multi-vector, this[j] = alpha[j]*this[j].
RCP< Epetra_IntMultiVector > getEpetra_IntMultiVector() const
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.
void randomize(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)
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.
Exception throws when you call an unimplemented method of Xpetra.
Exception throws to report errors in the internal logical of the program.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
size_t global_size_t
Global size_t object.
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
CombineMode
Xpetra::Combine Mode enumerable type.