42 #ifndef THYRA_DEFAULT_MULTI_VECTOR_PRODUCT_VECTOR_SPACE_DEF_HPP 43 #define THYRA_DEFAULT_MULTI_VECTOR_PRODUCT_VECTOR_SPACE_DEF_HPP 46 #include "Thyra_DefaultMultiVectorProductVectorSpace_decl.hpp" 47 #include "Thyra_DefaultMultiVectorProductVector.hpp" 56 template<
class Scalar>
62 template<
class Scalar>
69 TEUCHOS_TEST_FOR_EXCEPT(is_null(space));
70 TEUCHOS_TEST_FOR_EXCEPT(numColumns <= 0);
73 numColumns_ = numColumns;
74 defaultProdVecSpc_ = productVectorSpace(space,numColumns);
78 template<
class Scalar>
84 TEUCHOS_TEST_FOR_EXCEPT(
"ToDo: Implement when needed!");
91 template<
class Scalar>
98 template<
class Scalar>
99 Teuchos::RCP<const VectorSpaceBase<Scalar> >
102 TEUCHOS_TEST_FOR_EXCEPT( k < 0 || numColumns_ < k );
110 template<
class Scalar>
114 return numColumns_ * space_->dim();
119 template<
class Scalar>
126 if ( multiVecProdVecSpc != 0 ) {
128 ( numColumns_ == multiVecProdVecSpc->numColumns_ )
130 ( space_->isCompatible(*multiVecProdVecSpc->space_) )
137 template<
class Scalar>
138 Teuchos::RCP< VectorBase<Scalar> >
141 return multiVectorProductVector<Scalar>(
147 template<
class Scalar>
153 return defaultProdVecSpc_->scalarProd(x_in,y_in);
158 template<
class Scalar>
162 const ArrayView<Scalar> &scalarProds_out
165 defaultProdVecSpc_->scalarProds(X_in, Y_in, scalarProds_out);
170 template<
class Scalar>
175 return defaultProdVecSpc_->hasInCoreView(rng_in,viewType,strideType);
178 template<
class Scalar>
179 Teuchos::RCP< const VectorSpaceFactoryBase<Scalar> >
182 if (!is_null(space_))
183 return space_->smallVecSpcFcty();
184 return Teuchos::null;
187 template<
class Scalar>
188 Teuchos::RCP< MultiVectorBase<Scalar> >
197 template<
class Scalar>
198 Teuchos::RCP< const VectorSpaceBase<Scalar> >
204 Teuchos::RCP<DefaultMultiVectorProductVectorSpace<Scalar> >
206 mvpvs->numColumns_ = numColumns_;
207 mvpvs->space_ = space_;
208 mvpvs->defaultProdVecSpc_ = defaultProdVecSpc_;
216 template<
class Scalar>
219 std::ostringstream oss;
221 << Teuchos::Describable::description() <<
"{" 222 <<
"dim="<<this->dim()
223 <<
", numBlocks="<<numColumns_
229 template<
class Scalar>
231 Teuchos::FancyOStream &out_arg,
232 const Teuchos::EVerbosityLevel verbLevel
236 using Teuchos::FancyOStream;
237 using Teuchos::OSTab;
238 RCP<FancyOStream> out = rcp(&out_arg,
false);
241 case Teuchos::VERB_DEFAULT:
242 case Teuchos::VERB_LOW:
243 *out << this->description() << std::endl;
245 case Teuchos::VERB_MEDIUM:
246 case Teuchos::VERB_HIGH:
247 case Teuchos::VERB_EXTREME:
250 << this->description() << std::endl;
251 if (nonnull(space_)) {
254 <<
"Constituent vector space 'space' is the same for all spaces V[0],V[1],,,V[numBlocks-1]:\n";
256 *out <<
"space = " << Teuchos::describe(*space_,verbLevel);
261 TEUCHOS_TEST_FOR_EXCEPT(
true);
269 #endif // THYRA_DEFAULT_MULTI_VECTOR_PRODUCT_VECTOR_SPACE_DEF_HPP void uninitialize(RCP< const VectorSpaceBase< Scalar > > *space=0, int *numColumns=0)
Uninitialize.
RCP< MultiVectorBase< Scalar > > createMembers(int numMembers) const
Returns a DefaultColumnwiseMultiVector object.
RCP< const VectorSpaceFactoryBase< Scalar > > smallVecSpcFcty() const
Returns getBlock(0)->smallVecSpcFcty().
void initialize(const RCP< const VectorSpaceBase< Scalar > > &space, const int numColumns)
Initialize with a list of constituent vector spaces.
RCP< MultiVectorBase< Scalar > > createMembers(int numMembers) const
Abstract interface for objects that represent a space for vectors.
EViewType
Determines if a view is a direct view of data or a detached copy of data.
Teuchos::Ordinal Ordinal
Type for the dimension of a vector space. `*.
Interface for a collection of column vectors called a multi-vector.
Scalar scalarProd(const VectorBase< Scalar > &x, const VectorBase< Scalar > &y) const
Returns the sum of the scalar products of the constituent vectors.
DefaultMultiVectorProductVectorSpace()
Construct to an uninitialized state.
bool hasInCoreView(const Range1D &rng, const EViewType viewType, const EStrideType strideType) const
Returns true if all of the constituent vector spaces return true.
std::string description() const
Prints just the name DefaultMultiVectorProductVectorSpace along with the overall dimension and the nu...
RCP< const VectorSpaceBase< Scalar > > clone() const
Clones the object as promised.
Abstract interface for finite-dimensional dense vectors.
Standard concrete implementation of a product vector space that creates product vectors fromed implic...
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Prints the details about the constituent vector space.
EStrideType
Determine if data is unit stride or non-unit stride.
RCP< const VectorSpaceBase< Scalar > > getBlock(const int k) const
void scalarProdsImpl(const MultiVectorBase< Scalar > &X, const MultiVectorBase< Scalar > &Y, const ArrayView< Scalar > &scalarProds) const
Returns the sum of the scalar products of each of the columns of the constituent multi-vectors.
bool isCompatible(const VectorSpaceBase< Scalar > &vecSpc) const
RCP< VectorBase< Scalar > > createMember() const
Returns a DefaultMultiVectorProductVector object.