42#ifndef THYRA_VECTOR_SPACE_DEFAULT_BASE_DEF_HPP
43#define THYRA_VECTOR_SPACE_DEFAULT_BASE_DEF_HPP
45#include "Thyra_VectorSpaceDefaultBase_decl.hpp"
46#include "Thyra_VectorSpaceFactoryBase.hpp"
47#include "Thyra_VectorSpaceBase.hpp"
48#include "Thyra_VectorBase.hpp"
49#include "Thyra_MultiVectorStdOps.hpp"
50#include "Thyra_DefaultColumnwiseMultiVector.hpp"
60class CopyVectorViewBack {
62 CopyVectorViewBack(
const VectorBase<Scalar> *v,
const RTOpPack::SubVectorView<Scalar> &raw_v )
67 RTOpPack::ConstSubVectorView<Scalar> sv;
68 v_->acquireDetachedView(
Range1D(),&sv);
69 RTOpPack::assign_entries<Scalar>( Teuchos::outArg(raw_v_), sv );
70 v_->releaseDetachedView(&sv);
73 const VectorBase<Scalar> *v_;
74 const RTOpPack::SubVectorView<Scalar> raw_v_;
79class CopyMultiVectorViewBack {
81 CopyMultiVectorViewBack(
const MultiVectorBase<Scalar> *mv,
const RTOpPack::SubMultiVectorView<Scalar> &raw_mv )
82 :mv_(mv), raw_mv_(raw_mv)
84 ~CopyMultiVectorViewBack()
86 RTOpPack::ConstSubMultiVectorView<Scalar> smv;
88 RTOpPack::assign_entries<Scalar>( Teuchos::outArg(raw_mv_), smv );
89 mv_->releaseDetachedView(&smv);
92 const MultiVectorBase<Scalar> *mv_;
93 const RTOpPack::SubMultiVectorView<Scalar> raw_mv_;
100template<
class Scalar>
101Teuchos::RCP<MultiVectorBase<Scalar> >
112template<
class Scalar>
124 v->acquireDetachedView(
Range1D(),&sv);
125 RTOpPack::assign_entries<Scalar>(
128 v->commitDetachedView(&sv);
130 Teuchos::set_extra_data(
131 Teuchos::rcp(
new CopyVectorViewBack<Scalar>(&*v,raw_v)),
132 "CopyVectorViewBack",
140template<
class Scalar>
151 v->acquireDetachedView(
Range1D(),&sv);
152 RTOpPack::assign_entries<Scalar>(
155 v->commitDetachedView(&sv);
160template<
class Scalar>
173 RTOpPack::assign_entries<Scalar>(
177 mv->commitDetachedView(&smv);
179 Teuchos::set_extra_data(
180 Teuchos::rcp(
new CopyMultiVectorViewBack<Scalar>(&*mv,raw_mv)),
181 "CopyMultiVectorViewBack",
189template<
class Scalar>
203 RTOpPack::assign_entries<Scalar>(
206 mv->commitDetachedView(&smv);
Ordinal numSubCols() const
Default subclass for MultiVectorBase implemented using columns of separate abstract vectors.
virtual RCP< VectorBase< Scalar > > createMember() const =0
Create a vector member from the vector space.
virtual RCP< const VectorSpaceFactoryBase< Scalar > > smallVecSpcFcty() const =0
Return a VectorSpaceFactoryBase object for the creation of (usually serial) vector spaces with a smal...
RCP< MultiVectorBase< Scalar > > createMembersView(const RTOpPack::SubMultiVectorView< Scalar > &raw_mv) const
RCP< VectorBase< Scalar > > createMemberView(const RTOpPack::SubVectorView< Scalar > &raw_v) const
RCP< MultiVectorBase< Scalar > > createMembers(int numMembers) const
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)