10#ifndef XPETRA_BLOCKEDVECTOR_DEF_HPP
11#define XPETRA_BLOCKEDVECTOR_DEF_HPP
15#include "Xpetra_BlockedMultiVector.hpp"
20template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
25template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
31template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
37template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
41template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
42BlockedVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>&
49template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
52 BlockedMultiVector::replaceGlobalValue(globalRow, vectorIndex, value);
55template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
58 BlockedMultiVector::sumIntoGlobalValue(globalRow, vectorIndex, value);
61template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
64 BlockedMultiVector::replaceLocalValue(myRow, vectorIndex, value);
67template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
70 BlockedMultiVector::sumIntoLocalValue(myRow, vectorIndex, value);
73template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
76 BlockedMultiVector::replaceGlobalValue(globalRow, 0, value);
79template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
82 BlockedMultiVector::sumIntoGlobalValue(globalRow, 0, value);
85template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
88 BlockedMultiVector::replaceLocalValue(myRow, 0, value);
91template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
94 BlockedMultiVector::sumIntoLocalValue(myRow, 0, value);
97template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
100 BlockedMultiVector::putScalar(value);
103template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
107 return BlockedMultiVector::getVector(j);
110template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
114 return BlockedMultiVector::getVectorNonConst(j);
117template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
121 return BlockedMultiVector::getData(j);
124template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
128 return BlockedMultiVector::getDataNonConst(j);
131template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
134 BlockedMultiVector::dot(A, dots);
138template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
143 BlockedMultiVector::dot(A, dots);
147template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
150 BlockedMultiVector::abs(A);
154template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
157 BlockedMultiVector::reciprocal(A);
161template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
163 scale(
const Scalar& alpha) {
164 BlockedMultiVector::scale(alpha);
168template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
171 BlockedMultiVector::scale(alpha);
175template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
177 update(
const Scalar& alpha,
179 const Scalar& beta) {
180 BlockedMultiVector::update(alpha, A, beta);
184template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
186 update(
const Scalar& alpha,
190 const Scalar& gamma) {
191 BlockedMultiVector::update(alpha, A, beta, B, gamma);
195template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
205template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
215template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
225template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
228 BlockedMultiVector::norm1(norms);
231template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
234 BlockedMultiVector::norm2(norms);
237template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
240 BlockedMultiVector::normInf(norms);
243template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
249template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
256template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
267template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
278template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
287template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
295 "BlockedVector::elementWiseMultipy: B must have same blocked map than this.");
298 "BlockedVector::elementWiseMultipy: A has "
299 << A.
getMap()->getLocalNumElements() <<
" elements, B has " << B.
getMap()->getLocalNumElements()
303 "BlockedVector::elementWiseMultipy: A has " << A.
getMap()->getGlobalNumElements()
304 <<
" elements, B has "
305 << B.
getMap()->getGlobalNumElements() <<
".");
313 "BlockedVector::elementWiseMultipy: B must be a BlockedVector.");
328template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
335template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
340 "BlockedVector::getLocalLength: routine not implemented. It has no value as one must iterate on the partial vectors.");
344template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
348 return this->
getBlockedMap()->getFullMap()->getGlobalNumElements();
351template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
355 "BlockedVector::isSameSize: routine not implemented. It has no value as one must iterate on the partial vectors.");
359template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
363 return std::string(
"BlockedVector");
366template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
370 for (
size_t r = 0; r < this->
getBlockedMap()->getNumMaps(); r++) {
375template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
378 BlockedMultiVector::replaceMap(map);
381template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
389template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
397template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
405template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
413template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
416 for (
size_t r = 0; r < this->
getBlockedMap()->getNumMaps(); ++r) {
421template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
423 randomize(
bool bUseXpetraImplementation) {
424 for (
size_t r = 0; r < this->
getBlockedMap()->getNumMaps(); ++r) {
429template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
431 randomize(
const Scalar& minVal,
const Scalar& maxVal,
bool bUseXpetraImplementation) {
432 for (
size_t r = 0; r < this->
getBlockedMap()->getNumMaps(); ++r) {
433 getMultiVector(r)->randomize(minVal, maxVal, bUseXpetraImplementation);
437template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
445template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
453template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
461template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
465 return BlockedMultiVector::getMultiVector(r);
468template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
472 return BlockedMultiVector::getMultiVector(r, bThyraMode);
475template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
480 BlockedMultiVector::setMultiVector(r, v, bThyraMode);
484template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
488 return BlockedMultiVector::Merge();
491template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
494 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, Tpetra::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.