Thyra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Thyra_RowStatLinearOpBase.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_ROW_SUM_LINEAR_OP_BASE_HPP
11 #define THYRA_ROW_SUM_LINEAR_OP_BASE_HPP
12 
13 #include "Thyra_LinearOpBase_decl.hpp"
14 
15 
16 namespace Thyra {
17 
18 
19 namespace RowStatLinearOpBaseUtils {
20 
21 
23 enum ERowStat {
25  ROW_STAT_INV_ROW_SUM,
27  ROW_STAT_ROW_SUM,
29  ROW_STAT_INV_COL_SUM,
31  ROW_STAT_COL_SUM
32 };
33 
34 
35 } // namespace RowStatLinearOpBaseUtils
36 
37 
43 template<class Scalar>
44 class RowStatLinearOpBase : virtual public LinearOpBase<Scalar> {
45 public:
46 
49 
52  const RowStatLinearOpBaseUtils::ERowStat rowStat
53  ) const
54  { return rowStatIsSupportedImpl(rowStat); }
55 
60  void getRowStat(
61  const RowStatLinearOpBaseUtils::ERowStat rowStat,
62  const Ptr<VectorBase<Scalar> > &rowStatVec
63  ) const
64  {
66  getRowStatImpl(rowStat, rowStatVec);
67  }
68 
70 
71 protected:
72 
75 
77  virtual bool rowStatIsSupportedImpl(
78  const RowStatLinearOpBaseUtils::ERowStat rowStat) const = 0;
79 
81  virtual void getRowStatImpl(
82  const RowStatLinearOpBaseUtils::ERowStat rowStat,
83  const Ptr<VectorBase<Scalar> > &rowStatVec) const = 0;
84 
86 
87 };
88 
89 
90 } // end namespace Thyra
91 
92 
93 #endif // THYRA_SCALED_LINEAR_OP_BASE_HPP
void getRowStat(const RowStatLinearOpBaseUtils::ERowStat rowStat, const Ptr< VectorBase< Scalar > > &rowStatVec) const
Get some statistics about a supported row.
bool rowStatIsSupported(const RowStatLinearOpBaseUtils::ERowStat rowStat) const
Determine if a given row stat is supported.
Abstract interface for finite-dimensional dense vectors.
virtual void getRowStatImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat, const Ptr< VectorBase< Scalar > > &rowStatVec) const =0
Base class for all linear operators.
virtual bool rowStatIsSupportedImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat) const =0
Interface for exxtracting row statistics as a VectorBase from a supporting LinearOpBase object...
#define TEUCHOS_ASSERT(assertion_test)