Thyra Version of the Day
Loading...
Searching...
No Matches
Thyra_DefaultZeroLinearOp_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_DEFAULT_ZERO_LINEAR_OP_DECL_HPP
11#define THYRA_DEFAULT_ZERO_LINEAR_OP_DECL_HPP
12
13#include "Thyra_ZeroLinearOpBase.hpp"
14#include "Thyra_RowStatLinearOpBase.hpp"
15#include "Thyra_ScaledLinearOpBase.hpp"
16#include "Teuchos_ConstNonconstObjectContainer.hpp"
17
18
19namespace Thyra {
20
21
38template<class Scalar>
40 : virtual public ZeroLinearOpBase<Scalar>
41 , virtual public RowStatLinearOpBase<Scalar>
42 , virtual public ScaledLinearOpBase<Scalar>
43{
44public:
45
48
56
60 const RCP<const VectorSpaceBase<Scalar> > &range,
62 );
63
80 void initialize(
81 const RCP<const VectorSpaceBase<Scalar> > &range,
83 );
84
91 void uninitialize();
92
94
97
100
103
106
108
111
115 std::string description() const;
116
118
119protected:
120
123
125 bool opSupportedImpl(EOpTransp M_trans) const;
126
128 void applyImpl(
129 const EOpTransp M_trans,
131 const Ptr<MultiVectorBase<Scalar> > &Y,
132 const Scalar alpha,
133 const Scalar beta
134 ) const;
135
137
140
142 virtual bool rowStatIsSupportedImpl(
143 const RowStatLinearOpBaseUtils::ERowStat rowStat) const;
144
146 virtual void getRowStatImpl(
147 const RowStatLinearOpBaseUtils::ERowStat rowStat,
148 const Teuchos::Ptr<VectorBase< Scalar> > &rowStatVec) const;
149
151
154
156 virtual bool supportsScaleLeftImpl() const
157 { return true; }
158
160 virtual bool supportsScaleRightImpl() const
161 { return true; }
162
// Meaningless operation
164 virtual void scaleLeftImpl(const VectorBase< Scalar > &/* row_scaling */)
165 { }
166
// Meaningless operation
168 virtual void scaleRightImpl(const VectorBase< Scalar > &/* col_scaling */)
169 { }
170
172
173private:
174
177
178 // Not defined and not to be called
180 DefaultZeroLinearOp& operator=(const DefaultZeroLinearOp&);
181
182};
183
184
189template<class Scalar>
190RCP<const LinearOpBase<Scalar> >
192 const RCP<const VectorSpaceBase<Scalar> > &range,
193 const RCP<const VectorSpaceBase<Scalar> > &domain
194 );
195
203template<class Scalar>
206 const RCP<const VectorSpaceBase<Scalar> > &range,
207 const RCP<const VectorSpaceBase<Scalar> > &domain
208 );
209
210
211} // end namespace Thyra
212
213
214#endif // THYRA_DEFAULT_ZERO_LINEAR_OP_DECL_HPP
Represents a zero linear operator M = 0.
virtual void scaleRightImpl(const VectorBase< Scalar > &)
virtual bool rowStatIsSupportedImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat) const
virtual void scaleLeftImpl(const VectorBase< Scalar > &)
void initialize(const RCP< const VectorSpaceBase< Scalar > > &range, const RCP< const VectorSpaceBase< Scalar > > &domain)
Initialize given a list of non-const linear operators.
virtual void getRowStatImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat, const Teuchos::Ptr< VectorBase< Scalar > > &rowStatVec) const
void uninitialize()
Set to uninitialized.
RCP< const VectorSpaceBase< Scalar > > domain() const
Returns Teuchos::null if uninitialized.
RCP< const LinearOpBase< Scalar > > clone() const
RCP< const VectorSpaceBase< Scalar > > range() const
Returns Teuchos::null if uninitialized.
RCP< LinearOpBase< Scalar > > nonconstZero(const RCP< const VectorSpaceBase< Scalar > > &range, const RCP< const VectorSpaceBase< Scalar > > &domain)
Create a nonconst zero linear operator with given range and domain spaces.
std::string description() const
Prints just the name DefaultZeroLinearOp along with the overall dimensions.
DefaultZeroLinearOp()
Construct to uninitialized.
void applyImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
bool opSupportedImpl(EOpTransp M_trans) const
Returns true .
RCP< const LinearOpBase< Scalar > > zero(const RCP< const VectorSpaceBase< Scalar > > &range, const RCP< const VectorSpaceBase< Scalar > > &domain)
Create a zero linear operator with given range and domain spaces.
Interface for a collection of column vectors called a multi-vector.
Interface for exxtracting row statistics as a VectorBase from a supporting LinearOpBase object.
Applies left or right sclaing to the linear operator.
Abstract interface for finite-dimensional dense vectors.
Abstract interface for objects that represent a space for vectors.
Interface class for zero linear operators.
EOpTransp
Enumeration for determining how a linear operator is applied. `*.