1#ifndef included_AMP_ThyraVectorWrapper
2#define included_AMP_ThyraVectorWrapper
5#include "AMP/vectors/Vector.h"
6#include "AMP/vectors/trilinos/thyra/ThyraVector.h"
11#include "Thyra_VectorDefaultBase.hpp"
12#include <Teuchos_Comm.hpp>
55 std::shared_ptr<const AMP::Discretization::DOFManager>
getDOFManager()
const
57 return d_vecs[0]->getDOFManager();
74 const std::vector<size_t> &cols,
76 void initialize(
const std::vector<AMP::LinearAlgebra::Vector::shared_ptr> &vecs,
77 const std::vector<size_t> &cols,
82 virtual void applyImpl(
const Thyra::EOpTransp M_trans,
83 const Thyra::MultiVectorBase<double> &
X,
84 const Teuchos::Ptr<Thyra::MultiVectorBase<double>> &Y,
86 const double beta )
const override;
101 const RTOpPack::RTOpT<double> &primary_op,
102 const Teuchos::ArrayView<
const Teuchos::Ptr<
const Thyra::MultiVectorBase<double>>>
104 const Teuchos::ArrayView<
const Teuchos::Ptr<Thyra::MultiVectorBase<double>>>
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>>>
113 const Teuchos::ArrayView<
const Teuchos::Ptr<Thyra::MultiVectorBase<double>>>
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;
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;
139 RTOpPack::ConstSubVectorView<double> *sub_vec )
const override;
144 RTOpPack::SubVectorView<double> *sub_vec )
override;
147 virtual void setSubVectorImpl(
const RTOpPack::SparseSubVectorT<double> &sub_vec )
override;
150 std::vector<AMP::LinearAlgebra::Vector::shared_ptr>
d_vecs;
159 Teuchos::Comm<RTOpPack::index_type> *
d_comm =
nullptr;
Wrapper for an AMP vector in Thyra.
ThyraVectorWrapper()=default
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.
std::vector< size_t > d_cols
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...
std::shared_ptr< Vector > shared_ptr
Shorthand for shared pointer to Vector.
std::shared_ptr< const Vector > const_shared_ptr
#define DISABLE_WARNINGS
Re-enable warnings.
#define ENABLE_WARNINGS
Suppress all warnings.