Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
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
13namespace Tpetra {
14
15template <class Scalar, class LO, class GO, class Node>
19
20template <class Scalar, class LO, class GO, class Node>
23 const Teuchos::DataAccess copyOrView)
24 : base_type(in, copyOrView) {}
25
26template <class Scalar, class LO, class GO, class Node>
28 BlockVector(const map_type& meshMap, const LO blockSize)
29 : base_type(meshMap, blockSize, 1) {}
30
31template <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
38template <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
50template <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
57template <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
65template <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
72template <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
79template <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
85template <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
91template <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
97template <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
103template <class Scalar, class LO, class GO, class Node>
104typename 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
110template <class Scalar, class LO, class GO, class Node>
111typename 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
117template <class Scalar, class LO, class GO, class Node>
118typename 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
mv_type mv_
The Tpetra::MultiVector used to represent the data.
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.
Tpetra::MultiVector< Scalar, LO, GO, Node > mv_type
The specialization of Tpetra::MultiVector that this class uses.
Tpetra::Map< LO, GO, Node > map_type
The specialization of Tpetra::Map that this class uses.
bool sumIntoGlobalValues(const GO globalRowIndex, const Scalar vals[])
Sum into all values at the given mesh point, using a global index.
Tpetra::Vector< Scalar, LO, GO, Node > vec_type
The specialization of Tpetra::Vector that this class uses.
bool replaceGlobalValues(const GO globalRowIndex, const Scalar vals[])
Replace all values at the given mesh point, using a global index.
BlockVector()
Default constructor.
bool sumIntoLocalValues(const LO localRowIndex, const Scalar vals[])
Sum into all values at the given mesh point, using a local index.
vec_type getVectorView()
Get a Tpetra::Vector that views this BlockVector's data.
bool replaceLocalValues(const LO localRowIndex, const Scalar vals[])
Replace all values at the given mesh point, using a local index.
size_t getNumVectors() const
Number of columns in the multivector.
Namespace Tpetra contains the class and methods constituting the Tpetra library.