Thyra Version of the Day
Loading...
Searching...
No Matches
Thyra_VectorSpaceBase_decl.hpp
1// @HEADER
2// *****************************************************************************
3// Thyra: Interfaces and Support for Abstract Numerical Algorithms
4//
5// Copyright 2004 NTESS and the Thyra contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef THYRA_VECTOR_SPACE_BASE_DECL_HPP
11#define THYRA_VECTOR_SPACE_BASE_DECL_HPP
12
13#include "Thyra_OperatorVectorTypes.hpp"
14#include "Teuchos_Describable.hpp"
15
16
17namespace Thyra {
18
19
25template<class Scalar>
26RCP<const VectorSpaceBase<Scalar> >
28
29
37template<class Scalar>
40 const RCP<const VectorSpaceBase<Scalar> > &vs,
41 const std::string &label=""
42 );
43
44
49template<class Scalar>
51createMember( const VectorSpaceBase<Scalar> &vs, const std::string &label="" );
52
53
61template<class Scalar>
64 const RCP<const VectorSpaceBase<Scalar> > &vs, int numMembers,
65 const std::string &label=""
66 );
67
68
76template<class Scalar>
79 const RCP<const VectorSpaceBase<Scalar> > &vs,
80 const RCP<const VectorSpaceBase<Scalar> > &domain,
81 const std::string &label=""
82 );
83
84
89template<class Scalar>
92 const VectorSpaceBase<Scalar> &vs, int numMembers,
93 const std::string &label=""
94 );
95
96
104template<class Scalar>
107 const RCP<const VectorSpaceBase<Scalar> > &vs,
109 const std::string &label=""
110 );
111
112
117template<class Scalar>
120 const VectorSpaceBase<Scalar> &vs,
122 const std::string &label=""
123 );
124
125
133template<class Scalar>
136 const RCP<const VectorSpaceBase<Scalar> > &vs,
138 const std::string &label=""
139 );
140
141
146template<class Scalar>
149 const VectorSpaceBase<Scalar> &vs,
151 const std::string &label=""
152 );
153
154
162template<class Scalar>
165 const RCP<const VectorSpaceBase<Scalar> > &vs,
167 const std::string &label=""
168 );
169
170
175template<class Scalar>
178 const VectorSpaceBase<Scalar> &vs,
180 const std::string &label=""
181 );
182
183
191template<class Scalar>
194 const RCP<const VectorSpaceBase<Scalar> > &vs,
196 const std::string &label=""
197 );
198
199
204template<class Scalar>
207 const VectorSpaceBase<Scalar> &vs,
209 const std::string &label=""
210 );
211
212
266template<class Scalar>
267class VectorSpaceBase : virtual public Teuchos::Describable {
268public:
269
272
278 virtual Ordinal dim() const = 0;
279
303 virtual bool isCompatible( const VectorSpaceBase<Scalar>& vecSpc ) const = 0;
304
313
326 virtual Scalar scalarProd(
327 const VectorBase<Scalar>& x, const VectorBase<Scalar>& y
328 ) const = 0;
329
357 const ArrayView<Scalar> &scalarProds_out
358 ) const
359 {
360 scalarProdsImpl(X, Y, scalarProds_out);
361 }
362
364
367
374 virtual bool isEuclidean() const;
375
420 virtual bool hasInCoreView(
421 const Range1D &rng = Range1D(),
422 const EViewType viewType = VIEW_TYPE_DETACHED,
423 const EStrideType strideType = STRIDE_TYPE_NONUNIT
424 ) const;
425
438
440
441#ifndef DOXYGEN_COMPILE
442
443#ifndef TEMPLATE_FRIENDS_NOT_SUPPORTED
444
447
449 createMember<>(
450 const RCP<const VectorSpaceBase<Scalar> > &vs,
451 const std::string &label
452 );
453
455 createMembers<>(
456 const RCP<const VectorSpaceBase<Scalar> > &vs,
457 int numMembers, const std::string &label
458 );
459
461 createMemberView<>(
462 const RCP<const VectorSpaceBase<Scalar> > &vs,
464 const std::string &label
465 );
466
468 createMemberView<>(
469 const RCP<const VectorSpaceBase<Scalar> > &vs,
471 const std::string &label
472 );
473
475 createMembersView<>(
476 const RCP<const VectorSpaceBase<Scalar> > &vs,
478 const std::string &label
479 );
480
482 createMembersView<>(
483 const RCP<const VectorSpaceBase<Scalar> > &vs,
485 const std::string &label
486 );
487
489
490#endif // DOXYGEN_COMPILE
491
492#endif // TEMPLATE_FRIENDS_NOT_SUPPORTED
493
494#ifndef TEMPLATE_FRIENDS_NOT_SUPPORTED
495protected:
496#endif
497
500
527
555 createMembers(int numMembers) const = 0;
556
588 virtual RCP<VectorBase<Scalar> >
590
614
648
678 const RTOpPack::ConstSubMultiVectorView<Scalar> &raw_mv ) const = 0;
679
680
681 public:
682
716 createCachedMembersView( const RTOpPack::SubMultiVectorView<Scalar> &raw_mv, bool initialize = true) const { return this->createMembersView(raw_mv); };
717
748
750
751protected:
752
756 virtual void scalarProdsImpl(
759 ) const = 0;
760
761public:
762
763private:
764
765 // Not defined and not to be called
767 operator=(const VectorSpaceBase<Scalar>&);
768
769};
770
771
772} // end namespace Thyra
773
774
775#endif // THYRA_VECTOR_SPACE_BASE_DECL_HPP
Interface for a collection of column vectors called a multi-vector.
Abstract interface for finite-dimensional dense vectors.
Abstract interface for objects that represent a space for vectors.
RCP< MultiVectorBase< Scalar > > createMembers(const VectorSpaceBase< Scalar > &vs, int numMembers, const std::string &label="")
Calls createMembers(Teuchos::rcp(&vs,false),numMembers).
virtual RCP< const MultiVectorBase< Scalar > > createCachedMembersView(const RTOpPack::ConstSubMultiVectorView< Scalar > &raw_mv) const
Create a (possibly) cached multi-vector member that is a const view of raw multi-vector data....
virtual RCP< const VectorSpaceBase< Scalar > > clone() const
Clone this object (if supported).
RCP< const VectorBase< Scalar > > createMemberView(const RCP< const VectorSpaceBase< Scalar > > &vs, const RTOpPack::ConstSubVectorView< Scalar > &raw_v, const std::string &label="")
Create a vector member that is a const view of raw data.
RCP< const VectorBase< Scalar > > createMemberView(const VectorSpaceBase< Scalar > &vs, const RTOpPack::ConstSubVectorView< Scalar > &raw_v, const std::string &label="")
Calls createMemberView(Teuchos::rcp(&vs,false),raw_v).
RCP< const MultiVectorBase< Scalar > > createMembersView(const VectorSpaceBase< Scalar > &vs, const RTOpPack::ConstSubMultiVectorView< Scalar > &raw_mv, const std::string &label="")
Calls createMembersView(Teuchos::rcp(&vs,false),raw_mv).
RCP< const MultiVectorBase< Scalar > > createMembersView(const RCP< const VectorSpaceBase< Scalar > > &vs, const RTOpPack::ConstSubMultiVectorView< Scalar > &raw_mv, const std::string &label="")
Create a multi-vector member that is a const view of raw data.
virtual bool hasInCoreView(const Range1D &rng=Range1D(), const EViewType viewType=VIEW_TYPE_DETACHED, const EStrideType strideType=STRIDE_TYPE_NONUNIT) const
Returns true if this->acquireDetachedView(rng,...) returns a direct view of the range of data request...
void scalarProds(const MultiVectorBase< Scalar > &X, const MultiVectorBase< Scalar > &Y, const ArrayView< Scalar > &scalarProds_out) const
Return the scalar product of each column in two multi-vectors in the vector space.
virtual RCP< VectorBase< Scalar > > createMember() const =0
Create a vector member from the vector space.
virtual RCP< MultiVectorBase< Scalar > > createCachedMembersView(const RTOpPack::SubMultiVectorView< Scalar > &raw_mv, bool initialize=true) const
Create a (possibly) cached multi-vector member that is a non-const view of raw multi-vector data....
RCP< const VectorSpaceBase< Scalar > > makeHaveOwnership(const RCP< const VectorSpaceBase< Scalar > > &vs)
Helper function that clones a VectorSpaceBase object if the RCP does not have ownership.
RCP< VectorBase< Scalar > > createMemberView(const RCP< const VectorSpaceBase< Scalar > > &vs, const RTOpPack::SubVectorView< Scalar > &raw_v, const std::string &label="")
Create a vector member that is a non-const view of raw data.
virtual RCP< MultiVectorBase< Scalar > > createMembers(int numMembers) const =0
Create a set of vector members (a MultiVectorBase) from the vector space.
virtual Scalar scalarProd(const VectorBase< Scalar > &x, const VectorBase< Scalar > &y) const =0
Return the scalar product of two vectors in the vector space.
virtual RCP< VectorBase< Scalar > > createMemberView(const RTOpPack::SubVectorView< Scalar > &raw_v) const =0
Create a vector member that is a non-const view of raw vector data.
virtual Ordinal dim() const =0
Return the dimension of 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...
virtual RCP< const VectorBase< Scalar > > createMemberView(const RTOpPack::ConstSubVectorView< Scalar > &raw_v) const =0
Create a vector member that is a const view of raw vector data.
RCP< MultiVectorBase< Scalar > > createMembersView(const VectorSpaceBase< Scalar > &vs, const RTOpPack::SubMultiVectorView< Scalar > &raw_mv, const std::string &label="")
Calls createMembersView(Teuchos::rcp(&vs,false),raw_mv).
virtual bool isEuclidean() const
Return if this vector space has a Euclidean (identity) basis in which case the scalar product is the ...
RCP< VectorBase< Scalar > > createMemberView(const VectorSpaceBase< Scalar > &vs, const RTOpPack::SubVectorView< Scalar > &raw_v, const std::string &label="")
Calls createMemberView(Teuchos::rcp(&vs,false),raw_v).
RCP< MultiVectorBase< Scalar > > createMembersView(const RCP< const VectorSpaceBase< Scalar > > &vs, const RTOpPack::SubMultiVectorView< Scalar > &raw_mv, const std::string &label="")
Create a multi-vector member that is a non-const view of raw data.
RCP< VectorBase< Scalar > > createMember(const RCP< const VectorSpaceBase< Scalar > > &vs, const std::string &label="")
Create a vector member from the vector space.
virtual bool isCompatible(const VectorSpaceBase< Scalar > &vecSpc) const =0
Compare the compatibility of two vector spaces.
virtual RCP< MultiVectorBase< Scalar > > createMembersView(const RTOpPack::SubMultiVectorView< Scalar > &raw_mv) const =0
Create a multi-vector member that is a non-const view of raw multi-vector data.
RCP< MultiVectorBase< Scalar > > createMembers(const RCP< const VectorSpaceBase< Scalar > > &vs, const RCP< const VectorSpaceBase< Scalar > > &domain, const std::string &label="")
Create a set of vector members (a MultiVectorBase) from the vector space.
RCP< MultiVectorBase< Scalar > > createMembers(const RCP< const VectorSpaceBase< Scalar > > &vs, int numMembers, const std::string &label="")
Create a set of vector members (a MultiVectorBase) from the vector space.
virtual void scalarProdsImpl(const MultiVectorBase< Scalar > &X, const MultiVectorBase< Scalar > &Y, const ArrayView< Scalar > &scalarProds) const =0
virtual RCP< const MultiVectorBase< Scalar > > createMembersView(const RTOpPack::ConstSubMultiVectorView< Scalar > &raw_mv) const =0
Create a multi-vector member that is a const view of raw multi-vector data.
RCP< VectorBase< Scalar > > createMember(const VectorSpaceBase< Scalar > &vs, const std::string &label="")
Calls createMember(Teuchos::rcp(&vs,false)).
EStrideType
Determine if data is unit stride or non-unit stride.
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. `*.
Teuchos::Range1D Range1D
@ STRIDE_TYPE_NONUNIT
The stride between elements in an array is greater than or equal to one.
@ VIEW_TYPE_DETACHED
The view is a detached copy of the data.