Tpetra parallel linear algebra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Tpetra_BlockVector_def.hpp
1 // @HEADER
2 // *****************************************************************************
3 // Tpetra: Templated Linear Algebra Services Package
4 //
5 // Copyright 2008 NTESS and the Tpetra contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef TPETRA_BLOCKVECTOR_DEF_HPP
11 #define TPETRA_BLOCKVECTOR_DEF_HPP
12 
13 namespace Tpetra {
14 
15 template <class Scalar, class LO, class GO, class Node>
18  : base_type() {}
19 
20 template <class Scalar, class LO, class GO, class Node>
23  const Teuchos::DataAccess copyOrView)
24  : base_type(in, copyOrView) {}
25 
26 template <class Scalar, class LO, class GO, class Node>
28  BlockVector(const map_type& meshMap, const LO blockSize)
29  : base_type(meshMap, blockSize, 1) {}
30 
31 template <class Scalar, class LO, class GO, class Node>
33  BlockVector(const map_type& meshMap,
34  const map_type& pointMap,
35  const LO blockSize)
36  : base_type(meshMap, pointMap, blockSize, 1) {}
37 
38 template <class Scalar, class LO, class GO, class Node>
40  BlockVector(const mv_type& X_mv,
41  const map_type& meshMap,
42  const LO blockSize)
43  : base_type(X_mv, meshMap, blockSize) {
44  TEUCHOS_TEST_FOR_EXCEPTION(
45  X_mv.getNumVectors() != 1, std::invalid_argument,
46  "Tpetra::BlockVector: Input MultiVector has "
47  << X_mv.getNumVectors() << " != 1 columns.");
48 }
49 
50 template <class Scalar, class LO, class GO, class Node>
52  BlockVector(const vec_type& X_vec,
53  const map_type& meshMap,
54  const LO blockSize)
55  : base_type(X_vec, meshMap, blockSize) {}
56 
57 template <class Scalar, class LO, class GO, class Node>
60  const map_type& newMeshMap,
61  const map_type& newPointMap,
62  const size_t offset)
63  : base_type(X, newMeshMap, newPointMap, offset) {}
64 
65 template <class Scalar, class LO, class GO, class Node>
68  const map_type& newMeshMap,
69  const size_t offset)
70  : base_type(X, newMeshMap, offset) {}
71 
72 template <class Scalar, class LO, class GO, class Node>
75  Teuchos::RCP<vec_type> vPtr = this->mv_.getVectorNonConst(0);
76  return *vPtr; // shallow copy
77 }
78 
79 template <class Scalar, class LO, class GO, class Node>
81  replaceLocalValues(const LO localRowIndex, const Scalar vals[]) {
82  return ((base_type*)this)->replaceLocalValues(localRowIndex, 0, vals);
83 }
84 
85 template <class Scalar, class LO, class GO, class Node>
87  replaceGlobalValues(const GO globalRowIndex, const Scalar vals[]) {
88  return ((base_type*)this)->replaceGlobalValues(globalRowIndex, 0, vals);
89 }
90 
91 template <class Scalar, class LO, class GO, class Node>
93  sumIntoLocalValues(const LO localRowIndex, const Scalar vals[]) {
94  return ((base_type*)this)->sumIntoLocalValues(localRowIndex, 0, vals);
95 }
96 
97 template <class Scalar, class LO, class GO, class Node>
99  sumIntoGlobalValues(const GO globalRowIndex, const Scalar vals[]) {
100  return ((base_type*)this)->sumIntoLocalValues(globalRowIndex, 0, vals);
101 }
102 
103 template <class Scalar, class LO, class GO, class Node>
104 typename BlockVector<Scalar, LO, GO, Node>::const_little_host_vec_type
106  getLocalBlockHost(const LO localRowIndex, Access::ReadOnlyStruct) const {
107  return ((const base_type*)this)->getLocalBlockHost(localRowIndex, 0, Access::ReadOnly);
108 }
109 
110 template <class Scalar, class LO, class GO, class Node>
111 typename BlockVector<Scalar, LO, GO, Node>::little_host_vec_type
113  getLocalBlockHost(const LO localRowIndex, Access::ReadWriteStruct) {
114  return ((base_type*)this)->getLocalBlockHost(localRowIndex, 0, Access::ReadWrite);
115 }
116 
117 template <class Scalar, class LO, class GO, class Node>
118 typename BlockVector<Scalar, LO, GO, Node>::little_host_vec_type
120  getLocalBlockHost(const LO localRowIndex, Access::OverwriteAllStruct) {
121  return ((base_type*)this)->getLocalBlockHost(localRowIndex, 0, Access::OverwriteAll);
122 }
123 
124 } // namespace Tpetra
125 
126 //
127 // Explicit instantiation macro
128 //
129 // Must be expanded from within the Tpetra namespace!
130 //
131 #define TPETRA_BLOCKVECTOR_INSTANT(S, LO, GO, NODE) \
132  template class BlockVector<S, LO, GO, NODE>;
133 
134 #endif // TPETRA_BLOCKVECTOR_DEF_HPP
bool sumIntoGlobalValues(const GO globalRowIndex, const Scalar vals[])
Sum into all values at the given mesh point, using a global index.
size_t getNumVectors() const
Number of columns in the multivector.
bool sumIntoLocalValues(const LO localRowIndex, const Scalar vals[])
Sum into all values at the given mesh point, using a local index.
MultiVector for multiple degrees of freedom per mesh point.
vec_type getVectorView()
Get a Tpetra::Vector that views this BlockVector&#39;s data.
Teuchos::RCP< Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getVectorNonConst(const size_t j)
Return a Vector which is a nonconst view of column j.
const_little_host_vec_type getLocalBlockHost(const LO localRowIndex, Access::ReadOnlyStruct) const
Get a view of the degrees of freedom at the given mesh point, using a local index.
bool replaceLocalValues(const LO localRowIndex, const Scalar vals[])
Replace all values at the given mesh point, using a local index.
A distributed dense vector.
bool replaceGlobalValues(const GO globalRowIndex, const Scalar vals[])
Replace all values at the given mesh point, using a global index.
BlockVector()
Default constructor.
Vector for multiple degrees of freedom per mesh point.