10#include "Thyra_MultiVectorBase.hpp"
11#include "Thyra_AssertOp.hpp"
13#ifndef THYRA_EXPLICIT_MULTI_VECTOR_VIEW_HPP
14#define THYRA_EXPLICIT_MULTI_VECTOR_VIEW_HPP
32 : mv_(mv) { mv_->acquireDetachedView(rowRng, colRng, &smv_); }
38 : mv_(rcpFromRef(mv)) { mv_->acquireDetachedView(rowRng, colRng, &smv_); }
46 Ordinal
subDim()
const {
return smv_.subDim(); }
48 Ordinal
colOffset()
const {
return smv_.colOffset(); }
52 const Scalar*
values()
const {
return smv_.values().get(); }
58 const Scalar&
operator()(Ordinal i, Ordinal j)
const {
return smv_(i,j); }
83 : mv_(mv) { mv_->acquireDetachedView(rowRng, colRng, &smv_); }
89 : mv_(rcpFromRef(mv)) { mv_->acquireDetachedView(rowRng,colRng,&smv_); }
97 Ordinal
subDim()
const {
return smv_.subDim(); }
99 Ordinal
colOffset()
const {
return smv_.colOffset(); }
103 Scalar*
values()
const {
return smv_.values().get(); }
109 Scalar&
operator()(Ordinal i, Ordinal j) {
return smv_(i,j); }
125template<
class Scalar>
142 const int m = dMvIn.
subDim();
144 for (
int j = 0; j < n; ++j ) {
145 for (
int i = 0; i < m; ++i ) {
146 dMvTransOut(j,i) = ST::conjugate(dMvIn(i,j));
Create an explicit non-mutable (const) view of a MultiVectorBase object.
const Scalar & operator()(Ordinal i, Ordinal j) const
Ordinal colOffset() const
Ordinal numSubCols() const
const RTOpPack::ConstSubMultiVectorView< Scalar > & smv() const
const Scalar * values() const
ConstDetachedMultiVectorView(const RCP< const MultiVectorBase< Scalar > > &mv, const Range1D &rowRng=Range1D(), const Range1D &colRng=Range1D())
~ConstDetachedMultiVectorView()
Ordinal leadingDim() const
Ordinal globalOffset() const
ConstDetachedMultiVectorView(const MultiVectorBase< Scalar > &mv, const Range1D &rowRng=Range1D(), const Range1D &colRng=Range1D())
Create an explicit mutable (non-const) view of a MultiVectorBase object.
DetachedMultiVectorView(MultiVectorBase< Scalar > &mv, const Range1D &rowRng=Range1D(), const Range1D &colRng=Range1D())
Scalar & operator()(Ordinal i, Ordinal j)
~DetachedMultiVectorView()
Ordinal leadingDim() const
Ordinal numSubCols() const
const RTOpPack::SubMultiVectorView< Scalar > & smv() const
Ordinal colOffset() const
Ordinal globalOffset() const
DetachedMultiVectorView(const RCP< MultiVectorBase< Scalar > > &mv, const Range1D &rowRng=Range1D(), const Range1D &colRng=Range1D())
void doExplicitMultiVectorAdjoint(const MultiVectorBase< Scalar > &mvIn, MultiVectorBase< Scalar > *mvTransOut)
Do an explicit multi-vector adjoint.
virtual RCP< const VectorSpaceBase< Scalar > > range() const =0
Return a smart pointer for the range space for this operator.
virtual RCP< const VectorSpaceBase< Scalar > > domain() const =0
Return a smart pointer for the domain space for this operator.
Interface for a collection of column vectors called a multi-vector.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
#define THYRA_ASSERT_VEC_SPACES(FUNC_NAME, VS1, VS2)
This is a very useful macro that should be used to validate that two vector spaces are compatible.