47#ifndef XPETRA_BLOCKEDVECTOR_DEF_HPP
48#define XPETRA_BLOCKEDVECTOR_DEF_HPP
52#include "Xpetra_BlockedMultiVector.hpp"
61template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
68template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
76template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
84template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
90template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
91BlockedVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>&
100template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
105 BlockedMultiVector::replaceGlobalValue(globalRow, vectorIndex, value);
109template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
114 BlockedMultiVector::sumIntoGlobalValue(globalRow, vectorIndex, value);
118template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
123 BlockedMultiVector::replaceLocalValue(myRow, vectorIndex, value);
127template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
132 BlockedMultiVector::sumIntoLocalValue(myRow, vectorIndex, value);
136template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
141 BlockedMultiVector::replaceGlobalValue(globalRow, 0, value);
145template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
150 BlockedMultiVector::sumIntoGlobalValue(globalRow, 0, value);
153template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
158 BlockedMultiVector::replaceLocalValue(myRow, 0, value);
161template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
166 BlockedMultiVector::sumIntoLocalValue(myRow, 0, value);
169template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
174 BlockedMultiVector::putScalar(value);
177template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
182 return BlockedMultiVector::getVector(j);
185template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
190 return BlockedMultiVector::getVectorNonConst(j);
193template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
198 return BlockedMultiVector::getData(j);
201template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
206 return BlockedMultiVector::getDataNonConst(j);
209template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
214 BlockedMultiVector::dot(A, dots);
218template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
224 BlockedMultiVector::dot(A, dots);
228template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
233 BlockedMultiVector::abs(A);
237template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
242 BlockedMultiVector::reciprocal(A);
246template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
249scale(
const Scalar& alpha)
251 BlockedMultiVector::scale(alpha);
255template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
260 BlockedMultiVector::scale(alpha);
264template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
267update(
const Scalar& alpha,
271 BlockedMultiVector::update(alpha, A, beta);
275template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
278update(
const Scalar& alpha,
284 BlockedMultiVector::update(alpha, A, beta, B, gamma);
288template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
299template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
311template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
323template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
328 BlockedMultiVector::norm1(norms);
332template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
337 BlockedMultiVector::norm2(norms);
341template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
346 BlockedMultiVector::normInf(norms);
350template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
359template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
368template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
382template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
396template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
408template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
418 "BlockedVector::elementWiseMultipy: B must have same blocked map than this.");
421 "BlockedVector::elementWiseMultipy: A has "
422 << A.
getMap()->getLocalNumElements() <<
" elements, B has " << B.
getMap()->getLocalNumElements()
426 "BlockedVector::elementWiseMultipy: A has " << A.
getMap()->getGlobalNumElements()
427 <<
" elements, B has "
428 << B.
getMap()->getGlobalNumElements() <<
".");
436 "BlockedVector::elementWiseMultipy: B must be a BlockedVector.");
452template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
461template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
467 "BlockedVector::getLocalLength: routine not implemented. It has no value as one must iterate on the partial vectors.");
472template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
477 return this->
getBlockedMap()->getFullMap()->getGlobalNumElements();
481template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
487 "BlockedVector::isSameSize: routine not implemented. It has no value as one must iterate on the partial vectors.");
492template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
497 return std::string(
"BlockedVector");
501template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
507 for(
size_t r = 0; r < this->
getBlockedMap()->getNumMaps(); r++)
514template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
519 BlockedMultiVector::replaceMap(map);
523template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
534template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
545template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
556template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
567template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
572 for(
size_t r = 0; r < this->
getBlockedMap()->getNumMaps(); ++r)
579template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
584 for(
size_t r = 0; r < this->
getBlockedMap()->getNumMaps(); ++r)
591template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
594randomize(
const Scalar& minVal,
const Scalar& maxVal,
bool bUseXpetraImplementation)
596 for(
size_t r = 0; r < this->
getBlockedMap()->getNumMaps(); ++r)
598 getMultiVector(r)->randomize(minVal, maxVal, bUseXpetraImplementation);
603template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
614template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
624 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
634 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
639 return BlockedMultiVector::getMultiVector(r);
643 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
648 return BlockedMultiVector::getMultiVector(r, bThyraMode);
652 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
659 BlockedMultiVector::setMultiVector(r, v, bThyraMode);
664 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
669 return BlockedMultiVector::Merge();
673 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
678 BlockedMultiVector::assign(rhs);
#define XPETRA_MONITOR(funcName)
#define XPETRA_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
BlockedMultiVector(const Teuchos::RCP< const BlockedMap > &map, size_t NumVectors, bool zeroOut=true)
Teuchos::RCP< const Xpetra::BlockedMap< LocalOrdinal, GlobalOrdinal, KokkosClassic::DefaultNode::DefaultNodeType > > getBlockedMap() const
virtual std::string description() const
A simple one-line description of this object.
virtual Teuchos::ScalarTraits< Scalar >::magnitudeType norm2() const
Compute 2-norm of vector.
BlockedVector(const Teuchos::RCP< const BlockedMap > &map, bool zeroOut=true)
Constructor.
virtual Teuchos::ScalarTraits< Scalar >::magnitudeType norm1() const
Compute 1-norm of vector.
virtual void assign(const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &rhs)
Implementation of the assignment operator (operator=); does a deep copy.
Teuchos::RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getMultiVector(size_t r) const
return partial Vector associated with block row r
virtual Teuchos::ScalarTraits< Scalar >::magnitudeType normInf() const
Compute Inf-norm in vector.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getMap() const =0
The Map describing the parallel distribution of this object.
Exception throws to report errors in the internal logical of the program.
virtual void Xpetra_randomize()
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
basic_FancyOStream< char > FancyOStream
size_t global_size_t
Global size_t object.
CombineMode
Xpetra::Combine Mode enumerable type.