Thyra Version of the Day
Loading...
Searching...
No Matches
Thyra_DetachedSpmdVectorView.hpp
1// @HEADER
2// *****************************************************************************
3// Thyra: Interfaces and Support for Abstract Numerical Algorithms
4//
5// Copyright 2004 NTESS and the Thyra contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef THYRA_DETACHED_SPMD_VECTOR_VIEW_HPP
11#define THYRA_DETACHED_SPMD_VECTOR_VIEW_HPP
12
13
14#include "Thyra_SpmdVectorBase.hpp"
15#include "Teuchos_Assert.hpp"
16
17
18namespace Thyra {
19
20
29template<class Scalar>
31public:
34 {
35 using Teuchos::rcp_dynamic_cast;
36 if (!is_null(v)) {
38 rcp_dynamic_cast<const SpmdVectorBase<Scalar> >(v, true);
39 v_ = spmd_v;
40 sv_ = spmd_v->getLocalSubVector();
41 }
42 else {
43 v_ = Teuchos::null;
45 }
46 }
52 { if (!is_null(v_)) return v_->spmdSpace(); return Teuchos::null; }
54 const RTOpPack::ConstSubVectorView<Scalar>& sv() const { return sv_; }
56 Teuchos_Ordinal globalOffset() const { return sv_.globalOffset(); }
58 Teuchos_Ordinal subDim() const { return sv_.subDim(); }
60 const ArrayRCP<const Scalar> values() const { return sv_.values(); }
62 ptrdiff_t stride() const { return sv_.stride(); }
64 const Scalar& operator[](Teuchos_Ordinal i) const { return sv_[i]; }
66 const Scalar& operator()(Teuchos_Ordinal i) const { return sv_(i); }
67private:
70 // Not defined and not to be called
75};
76
77
86template<class Scalar>
88public:
91 {
92 using Teuchos::rcp_dynamic_cast;
93 if (!is_null(v)) {
94 const RCP<SpmdVectorBase<Scalar> > spmd_v =
95 rcp_dynamic_cast<SpmdVectorBase<Scalar> >(v, true);
96 v_ = spmd_v;
97 sv_ = spmd_v->getNonconstLocalSubVector();
98 }
99 else {
100 v_ = Teuchos::null;
102 }
103 }
109 { if (!is_null(v_)) return v_->spmdSpace(); return Teuchos::null; }
111 const RTOpPack::SubVectorView<Scalar>& sv() const { return sv_; }
113 Teuchos_Ordinal globalOffset() const { return sv_.globalOffset(); }
115 Teuchos_Ordinal subDim() const { return sv_.subDim(); }
117 const ArrayRCP<const Scalar> values() const { return sv_.values(); }
119 ptrdiff_t stride() const { return sv_.stride(); }
121 Scalar& operator[](Teuchos_Ordinal i) const { return sv_[i]; }
123 Scalar& operator()(Teuchos_Ordinal i) const { return sv_(i); }
124private:
127 // Not defined and not to be called
132};
133
134
135} // namespace Thyra
136
137
138#endif // THYRA_DETACHED_SPMD_VECTOR_VIEW_HPP
Ordinal globalOffset() const
const ArrayRCP< const Scalar > values() const
ptrdiff_t stride() const
const ArrayRCP< Scalar > values() const
Create an explicit detached non-mutable (const) view of all of the local elements on this process of ...
const RTOpPack::ConstSubVectorView< Scalar > & sv() const
const ArrayRCP< const Scalar > values() const
const Scalar & operator[](Teuchos_Ordinal i) const
const Scalar & operator()(Teuchos_Ordinal i) const
const RCP< const SpmdVectorSpaceBase< Scalar > > spmdSpace() const
ConstDetachedSpmdVectorView(const Teuchos::RCP< const VectorBase< Scalar > > &v)
Create an explicit detached mutable (non-const) view of all of the local elements on this process of ...
DetachedSpmdVectorView(const Teuchos::RCP< VectorBase< Scalar > > &v)
Scalar & operator()(Teuchos_Ordinal i) const
const RTOpPack::SubVectorView< Scalar > & sv() const
Scalar & operator[](Teuchos_Ordinal i) const
const ArrayRCP< const Scalar > values() const
const RCP< const SpmdVectorSpaceBase< Scalar > > spmdSpace() const
Abstract interface for finite-dimensional dense vectors.
T_To & dyn_cast(T_From &from)