Advanced Multi-Physics (AMP)
On-Line Documentation
ThyraVectorWrapper.h
Go to the documentation of this file.
1#ifndef included_AMP_ThyraVectorWrapper
2#define included_AMP_ThyraVectorWrapper
3
4// AMP includes
5#include "AMP/vectors/Vector.h"
6#include "AMP/vectors/trilinos/thyra/ThyraVector.h"
7
8
9// Trilinos includes
11#include "Thyra_VectorDefaultBase.hpp"
12#include <Teuchos_Comm.hpp>
14
15
16namespace AMP::LinearAlgebra {
17
18
24class ThyraVectorWrapper : public Thyra::VectorDefaultBase<double>
25{
26public:
27 // Default constructor
28 explicit ThyraVectorWrapper( const std::vector<AMP::LinearAlgebra::Vector::shared_ptr> &vecs );
29
32
35
38
40 Vector::shared_ptr getVec( int i ) { return d_vecs[i]; }
41
43 Vector::const_shared_ptr getVec( int i ) const { return d_vecs[i]; }
44
46 size_t numVecs() const { return d_vecs.size(); }
47
49 size_t numRows() const;
50
52 size_t numColumns() const;
53
55 std::shared_ptr<const AMP::Discretization::DOFManager> getDOFManager() const
56 {
57 return d_vecs[0]->getDOFManager();
58 }
59
60 // Functions derived from Thyra::LinearOpBase
63
64 // Functions derived from Thyra::MultiVectorBase
66
67 // Functions derived from Thyra::VectorBase
70
71protected:
72 // Protected constructor for view of subset of columns
73 explicit ThyraVectorWrapper( const std::vector<AMP::LinearAlgebra::Vector::shared_ptr> &vecs,
74 const std::vector<size_t> &cols,
75 size_t N_cols );
76 void initialize( const std::vector<AMP::LinearAlgebra::Vector::shared_ptr> &vecs,
77 const std::vector<size_t> &cols,
78 size_t N_cols );
79
80 // Functions derived from Thyra::LinearOpBase
81 virtual bool opSupportedImpl( Thyra::EOpTransp M_trans ) const override;
82 virtual void applyImpl( const Thyra::EOpTransp M_trans,
83 const Thyra::MultiVectorBase<double> &X,
84 const Teuchos::Ptr<Thyra::MultiVectorBase<double>> &Y,
85 const double alpha,
86 const double beta ) const override;
87
88 void assignImpl( double alpha ) override;
89
90 // Functions derived from Thyra::MultiVectorBase
91 virtual Teuchos::RCP<Thyra::VectorBase<double>> nonconstColImpl( Teuchos::Ordinal j ) override;
93 contigSubViewImpl( const Teuchos::Range1D &colRng ) const override;
95 nonconstContigSubViewImpl( const Teuchos::Range1D &colRng ) override;
97 nonContigSubViewImpl( const Teuchos::ArrayView<const int> &cols ) const override;
99 nonconstNonContigSubViewImpl( const Teuchos::ArrayView<const int> &cols ) override;
101 const RTOpPack::RTOpT<double> &primary_op,
102 const Teuchos::ArrayView<const Teuchos::Ptr<const Thyra::MultiVectorBase<double>>>
103 &multi_vecs,
104 const Teuchos::ArrayView<const Teuchos::Ptr<Thyra::MultiVectorBase<double>>>
105 &targ_multi_vecs,
106 const Teuchos::ArrayView<const Teuchos::Ptr<RTOpPack::ReductTarget>> &reduct_objs,
107 const Teuchos::Ordinal primary_global_offset ) const override;
109 const RTOpPack::RTOpT<double> &primary_op,
110 const RTOpPack::RTOpT<double> &secondary_op,
111 const Teuchos::ArrayView<const Teuchos::Ptr<const Thyra::MultiVectorBase<double>>>
112 &multi_vecs,
113 const Teuchos::ArrayView<const Teuchos::Ptr<Thyra::MultiVectorBase<double>>>
114 &targ_multi_vecs,
115 const Teuchos::Ptr<RTOpPack::ReductTarget> &reduct_obj,
116 const Teuchos::Ordinal primary_global_offset ) const override;
118 const Teuchos::Range1D &rowRng,
119 const Teuchos::Range1D &colRng,
120 RTOpPack::ConstSubMultiVectorView<double> *sub_mv ) const override;
122 RTOpPack::ConstSubMultiVectorView<double> *sub_mv ) const override;
124 const Teuchos::Range1D &rowRng,
125 const Teuchos::Range1D &colRng,
126 RTOpPack::SubMultiVectorView<double> *sub_mv ) override;
128 RTOpPack::SubMultiVectorView<double> *sub_mv ) override;
129
130 // Functions derived from Thyra::VectorBase
131 virtual void applyOpImpl(
132 const RTOpPack::RTOpT<double> &op,
133 const Teuchos::ArrayView<const Teuchos::Ptr<const Thyra::VectorBase<double>>> &vecs,
134 const Teuchos::ArrayView<const Teuchos::Ptr<Thyra::VectorBase<double>>> &targ_vecs,
135 const Teuchos::Ptr<RTOpPack::ReductTarget> &reduct_obj,
136 const Teuchos::Ordinal global_offset ) const override;
137 virtual void
138 acquireDetachedVectorViewImpl( const Teuchos::Range1D &rng,
139 RTOpPack::ConstSubVectorView<double> *sub_vec ) const override;
140 virtual void
141 releaseDetachedVectorViewImpl( RTOpPack::ConstSubVectorView<double> *sub_vec ) const override;
142 virtual void
143 acquireNonconstDetachedVectorViewImpl( const Teuchos::Range1D &rng,
144 RTOpPack::SubVectorView<double> *sub_vec ) override;
145 virtual void
146 commitNonconstDetachedVectorViewImpl( RTOpPack::SubVectorView<double> *sub_vec ) override;
147 virtual void setSubVectorImpl( const RTOpPack::SparseSubVectorT<double> &sub_vec ) override;
148
149 // Internal data
150 std::vector<AMP::LinearAlgebra::Vector::shared_ptr> d_vecs;
151 std::vector<size_t> d_cols;
152 size_t d_N_cols = 0;
153
154private:
155 // Private constructor
157
158 // Comm
159 Teuchos::Comm<RTOpPack::index_type> *d_comm = nullptr;
160
161 // Get shared_ptr to *this
162 std::shared_ptr<const ThyraVectorWrapper> shared_from_this() const;
163
164 friend class ThyraVector;
165};
166} // namespace AMP::LinearAlgebra
167
168#endif
#define X(C)
Wrapper for an AMP vector in Thyra.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< double > > contigSubViewImpl(const Teuchos::Range1D &colRng) const override
Vector::shared_ptr getVec(int i)
Get the underlying AMP vector.
std::shared_ptr< const AMP::Discretization::DOFManager > getDOFManager() const
Get the DOF Manager for the vector (all vectors must share compatible DOFManagers)
virtual Teuchos::RCP< Thyra::MultiVectorBase< double > > clone_mv() const override
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< double > > domain() const override
virtual void releaseDetachedVectorViewImpl(RTOpPack::ConstSubVectorView< double > *sub_vec) const override
virtual void applyOpImpl(const RTOpPack::RTOpT< double > &op, const Teuchos::ArrayView< const Teuchos::Ptr< const Thyra::VectorBase< double > > > &vecs, const Teuchos::ArrayView< const Teuchos::Ptr< Thyra::VectorBase< double > > > &targ_vecs, const Teuchos::Ptr< RTOpPack::ReductTarget > &reduct_obj, const Teuchos::Ordinal global_offset) const override
virtual Teuchos::RCP< Thyra::VectorBase< double > > clone_v() const override
virtual Teuchos::RCP< Thyra::MultiVectorBase< double > > nonconstContigSubViewImpl(const Teuchos::Range1D &colRng) override
void initialize(const std::vector< AMP::LinearAlgebra::Vector::shared_ptr > &vecs, const std::vector< size_t > &cols, size_t N_cols)
virtual void commitNonconstDetachedVectorViewImpl(RTOpPack::SubVectorView< double > *sub_vec) override
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< double > > range() const override
virtual void applyImpl(const Thyra::EOpTransp M_trans, const Thyra::MultiVectorBase< double > &X, const Teuchos::Ptr< Thyra::MultiVectorBase< double > > &Y, const double alpha, const double beta) const override
ThyraVectorWrapper & operator=(const ThyraVectorWrapper &)=delete
Assignment operator.
virtual Teuchos::RCP< Thyra::MultiVectorBase< double > > nonconstNonContigSubViewImpl(const Teuchos::ArrayView< const int > &cols) override
virtual void mvSingleReductApplyOpImpl(const RTOpPack::RTOpT< double > &primary_op, const RTOpPack::RTOpT< double > &secondary_op, const Teuchos::ArrayView< const Teuchos::Ptr< const Thyra::MultiVectorBase< double > > > &multi_vecs, const Teuchos::ArrayView< const Teuchos::Ptr< Thyra::MultiVectorBase< double > > > &targ_multi_vecs, const Teuchos::Ptr< RTOpPack::ReductTarget > &reduct_obj, const Teuchos::Ordinal primary_global_offset) const override
virtual void setSubVectorImpl(const RTOpPack::SparseSubVectorT< double > &sub_vec) override
virtual ~ThyraVectorWrapper()
Destructor.
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< double > > space() const override
virtual Teuchos::RCP< Thyra::VectorBase< double > > nonconstColImpl(Teuchos::Ordinal j) override
virtual void acquireDetachedVectorViewImpl(const Teuchos::Range1D &rng, RTOpPack::ConstSubVectorView< double > *sub_vec) const override
virtual bool opSupportedImpl(Thyra::EOpTransp M_trans) const override
virtual void acquireDetachedMultiVectorViewImpl(const Teuchos::Range1D &rowRng, const Teuchos::Range1D &colRng, RTOpPack::ConstSubMultiVectorView< double > *sub_mv) const override
Teuchos::Comm< RTOpPack::index_type > * d_comm
void assignImpl(double alpha) override
size_t numRows() const
Get the number of rows.
size_t numColumns() const
Get the number of columns.
virtual void mvMultiReductApplyOpImpl(const RTOpPack::RTOpT< double > &primary_op, const Teuchos::ArrayView< const Teuchos::Ptr< const Thyra::MultiVectorBase< double > > > &multi_vecs, const Teuchos::ArrayView< const Teuchos::Ptr< Thyra::MultiVectorBase< double > > > &targ_multi_vecs, const Teuchos::ArrayView< const Teuchos::Ptr< RTOpPack::ReductTarget > > &reduct_objs, const Teuchos::Ordinal primary_global_offset) const override
std::vector< AMP::LinearAlgebra::Vector::shared_ptr > d_vecs
std::shared_ptr< const ThyraVectorWrapper > shared_from_this() const
virtual void releaseDetachedMultiVectorViewImpl(RTOpPack::ConstSubMultiVectorView< double > *sub_mv) const override
ThyraVectorWrapper(const std::vector< AMP::LinearAlgebra::Vector::shared_ptr > &vecs)
virtual void commitNonconstDetachedMultiVectorViewImpl(RTOpPack::SubMultiVectorView< double > *sub_mv) override
Vector::const_shared_ptr getVec(int i) const
Get the underlying AMP vector.
virtual void acquireNonconstDetachedMultiVectorViewImpl(const Teuchos::Range1D &rowRng, const Teuchos::Range1D &colRng, RTOpPack::SubMultiVectorView< double > *sub_mv) override
ThyraVectorWrapper(const ThyraVectorWrapper &)=delete
Copy constructor.
size_t numVecs() const
Get the number of duplicate vectors stored.
virtual void acquireNonconstDetachedVectorViewImpl(const Teuchos::Range1D &rng, RTOpPack::SubVectorView< double > *sub_vec) override
ThyraVectorWrapper(const std::vector< AMP::LinearAlgebra::Vector::shared_ptr > &vecs, const std::vector< size_t > &cols, size_t N_cols)
virtual Teuchos::RCP< const Thyra::MultiVectorBase< double > > nonContigSubViewImpl(const Teuchos::ArrayView< const int > &cols) const override
ThyraVector is a bridge between AMP::LinearAlgebra::Vector and the Thyra::VectorDefaultBase data stru...
Definition ThyraVector.h:29
std::shared_ptr< Vector > shared_ptr
Shorthand for shared pointer to Vector.
Definition Vector.h:60
std::shared_ptr< const Vector > const_shared_ptr
Definition Vector.h:65
#define DISABLE_WARNINGS
Re-enable warnings.
#define ENABLE_WARNINGS
Suppress all warnings.



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:41.
Comments on this page