53 #ifndef __Teko_DiagnosticLinearOp_hpp__
54 #define __Teko_DiagnosticLinearOp_hpp__
59 #include "Teko_ImplicitLinearOp.hpp"
61 #include "Teuchos_Time.hpp"
75 DiagnosticLinearOp(
const Teuchos::RCP<std::ostream> &ostrm,
const ModifiableLinearOp &A,
76 const std::string &diagnosticString);
83 const std::string &diagnosticString);
90 const ModifiableLinearOp &A,
const std::string &diagnosticString);
100 virtual VectorSpace
range()
const {
return wrapOpA_lo_->range(); }
103 virtual VectorSpace
domain()
const {
return wrapOpA_lo_->domain(); }
117 virtual void implicitApply(
const MultiVector &x, MultiVector &y,
const double alpha = 1.0,
118 const double beta = 0.0)
const;
121 virtual void describe(Teuchos::FancyOStream &out_arg,
122 const Teuchos::EVerbosityLevel verbLevel)
const {
123 wrapOpA_lo_->describe(out_arg, verbLevel);
126 int numApplications()
const {
return timer_.numCalls(); }
127 double totalTime()
const {
return timer_.totalElapsedTime(); }
129 ModifiableLinearOp getModifiableOp()
const {
return wrapOpA_; }
131 void setLinearOp(
const LinearOp &lo) {
133 wrapOpA_ = Teuchos::null;
136 LinearOp getLinearOp()
const {
return wrapOpA_lo_; }
138 void setForwardOp(
const Teko::LinearOp &lo) { fwdOp_ = lo; }
142 double getResidualNorm()
const {
return residualNorm_; }
146 Teuchos::RCP<std::ostream> outputStream_;
147 ModifiableLinearOp wrapOpA_;
148 LinearOp wrapOpA_lo_;
150 std::string diagString_;
152 mutable double residualNorm_;
153 mutable Teuchos::Time timer_;
175 const ModifiableLinearOp &A,
176 const std::string &label) {
194 const LinearOp &A,
const std::string &label) {
213 const Teko::LinearOp &fwdOp,
214 const ModifiableLinearOp &A,
215 const std::string &label) {
virtual void implicitApply(const MultiVector &x, MultiVector &y, const double alpha=1.0, const double beta=0.0) const
Perform a matrix vector multiply with this operator.
virtual VectorSpace domain() const
Domain space of this operator.
ModifiableLinearOp createDiagnosticLinearOp(const Teuchos::RCP< std::ostream > &os, const LinearOp &A, const std::string &label)
Constructor method for building DiagnosticLinearOp.
virtual ~DiagnosticLinearOp()
Destructor prints out timing information about this operator.
DiagnosticLinearOp(const Teuchos::RCP< std::ostream > &ostrm, const ModifiableLinearOp &A, const std::string &diagnosticString)
This constructor explicitly takes the linear operator that needs to be wrapped and a string for outpu...
A virtual class that simplifies the construction of custom operators.
ModifiableLinearOp createDiagnosticLinearOp(const Teuchos::RCP< std::ostream > &os, const ModifiableLinearOp &A, const std::string &label)
Constructor method for building DiagnosticLinearOp.
This linear operator prints diagnostics about operator application and creation times. It is useful for debugging problems and determining bottle necks.
virtual VectorSpace range() const
Range space of this operator.
ModifiableLinearOp createDiagnosticLinearOp(const Teuchos::RCP< std::ostream > &os, const Teko::LinearOp &fwdOp, const ModifiableLinearOp &A, const std::string &label)
Constructor method for building DiagnosticLinearOp.