Teko
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Teko_DiagnosticLinearOp.hpp
Go to the documentation of this file.
1
/*
2
// @HEADER
3
//
4
// ***********************************************************************
5
//
6
// Teko: A package for block and physics based preconditioning
7
// Copyright 2010 Sandia Corporation
8
//
9
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
10
// the U.S. Government retains certain rights in this software.
11
//
12
// Redistribution and use in source and binary forms, with or without
13
// modification, are permitted provided that the following conditions are
14
// met:
15
//
16
// 1. Redistributions of source code must retain the above copyright
17
// notice, this list of conditions and the following disclaimer.
18
//
19
// 2. Redistributions in binary form must reproduce the above copyright
20
// notice, this list of conditions and the following disclaimer in the
21
// documentation and/or other materials provided with the distribution.
22
//
23
// 3. Neither the name of the Corporation nor the names of the
24
// contributors may be used to endorse or promote products derived from
25
// this software without specific prior written permission.
26
//
27
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
28
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
31
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
//
39
// Questions? Contact Eric C. Cyr (eccyr@sandia.gov)
40
//
41
// ***********************************************************************
42
//
43
// @HEADER
44
45
*/
46
52
53
#ifndef __Teko_DiagnosticLinearOp_hpp__
54
#define __Teko_DiagnosticLinearOp_hpp__
55
56
#include <iostream>
57
58
#include "
Teko_Utilities.hpp
"
59
#include "Teko_ImplicitLinearOp.hpp"
60
61
#include "Teuchos_Time.hpp"
62
63
namespace
Teko {
64
69
class
DiagnosticLinearOp
:
public
ImplicitLinearOp
{
70
public
:
75
DiagnosticLinearOp
(
const
Teuchos::RCP<std::ostream> & ostrm,
const
ModifiableLinearOp & A,
const
std::string & diagnosticString);
76
81
DiagnosticLinearOp
(
const
Teuchos::RCP<std::ostream> & ostrm,
const
LinearOp & A,
const
std::string & diagnosticString);
82
87
DiagnosticLinearOp
(
const
Teuchos::RCP<std::ostream> & ostrm,
const
LinearOp & fwdOp,
const
ModifiableLinearOp & A,
const
std::string & diagnosticString);
88
91
virtual
~DiagnosticLinearOp
();
92
94
95
97
virtual
VectorSpace
range
()
const
{
return
wrapOpA_lo_->range(); }
98
100
virtual
VectorSpace
domain
()
const
{
return
wrapOpA_lo_->domain(); }
101
114
virtual
void
implicitApply
(
const
MultiVector & x, MultiVector & y,
115
const
double
alpha = 1.0,
const
double
beta = 0.0)
const
;
117
118
virtual
void
describe(Teuchos::FancyOStream & out_arg,
119
const
Teuchos::EVerbosityLevel verbLevel)
const
120
{ wrapOpA_lo_->describe(out_arg,verbLevel); }
121
122
int
numApplications()
const
{
return
timer_.numCalls(); }
123
double
totalTime()
const
{
return
timer_.totalElapsedTime(); }
124
125
ModifiableLinearOp getModifiableOp()
const
126
{
return
wrapOpA_; }
127
128
void
setLinearOp(
const
LinearOp & lo)
129
{ wrapOpA_lo_ = lo; wrapOpA_ = Teuchos::null; }
130
131
LinearOp getLinearOp()
const
132
{
return
wrapOpA_lo_; }
133
134
void
setForwardOp(
const
Teko::LinearOp & lo)
135
{ fwdOp_ = lo; }
136
137
/* Get the residual norm. Used purely for testing.
138
*/
139
double
getResidualNorm()
const
140
{
return
residualNorm_; }
141
142
protected
:
143
// fundamental operators to use
144
Teuchos::RCP<std::ostream> outputStream_;
145
ModifiableLinearOp wrapOpA_;
146
LinearOp wrapOpA_lo_;
147
LinearOp fwdOp_;
148
std::string diagString_;
149
150
mutable
double
residualNorm_;
// for testing purposes
151
mutable
Teuchos::Time timer_;
152
153
private
:
154
// hide me!
155
DiagnosticLinearOp
();
156
DiagnosticLinearOp
(
const
DiagnosticLinearOp
&);
157
};
158
172
inline
ModifiableLinearOp
createDiagnosticLinearOp
(
const
Teuchos::RCP<std::ostream> & os,
const
ModifiableLinearOp & A,
const
std::string & label)
173
{
174
return
Teuchos::rcp(
new
DiagnosticLinearOp
(os,A,label));
175
}
176
190
inline
ModifiableLinearOp
createDiagnosticLinearOp
(
const
Teuchos::RCP<std::ostream> & os,
const
LinearOp & A,
const
std::string & label)
191
{
192
return
Teuchos::rcp(
new
DiagnosticLinearOp
(os,A,label));
193
}
194
209
inline
ModifiableLinearOp
createDiagnosticLinearOp
(
const
Teuchos::RCP<std::ostream> & os,
const
Teko::LinearOp & fwdOp,
const
ModifiableLinearOp & A,
const
std::string & label)
210
{
211
return
Teuchos::rcp(
new
DiagnosticLinearOp
(os,fwdOp,A,label));
212
}
213
214
}
// end namespace Teko
215
216
#endif
Teko_Utilities.hpp
Teko::DiagnosticLinearOp
This linear operator prints diagnostics about operator application and creation times....
Definition
Teko_DiagnosticLinearOp.hpp:69
Teko::DiagnosticLinearOp::range
virtual VectorSpace range() const
Range space of this operator.
Definition
Teko_DiagnosticLinearOp.hpp:97
Teko::DiagnosticLinearOp::~DiagnosticLinearOp
virtual ~DiagnosticLinearOp()
Destructor prints out timing information about this operator.
Definition
Teko_DiagnosticLinearOp.cpp:79
Teko::DiagnosticLinearOp::implicitApply
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.
Definition
Teko_DiagnosticLinearOp.cpp:105
Teko::DiagnosticLinearOp::domain
virtual VectorSpace domain() const
Domain space of this operator.
Definition
Teko_DiagnosticLinearOp.hpp:100
Teko::DiagnosticLinearOp::DiagnosticLinearOp
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...
Definition
Teko_DiagnosticLinearOp.cpp:59
Teko::ImplicitLinearOp
A virtual class that simplifies the construction of custom operators.
Definition
Teko_ImplicitLinearOp.hpp:60
Teko::LU2x2InverseOp::createDiagnosticLinearOp
ModifiableLinearOp createDiagnosticLinearOp(const Teuchos::RCP< std::ostream > &os, const ModifiableLinearOp &A, const std::string &label)
Constructor method for building DiagnosticLinearOp.
Definition
Teko_DiagnosticLinearOp.hpp:172
Teko::LU2x2InverseOp::createDiagnosticLinearOp
ModifiableLinearOp createDiagnosticLinearOp(const Teuchos::RCP< std::ostream > &os, const Teko::LinearOp &fwdOp, const ModifiableLinearOp &A, const std::string &label)
Constructor method for building DiagnosticLinearOp.
Definition
Teko_DiagnosticLinearOp.hpp:209
Teko::LU2x2InverseOp::createDiagnosticLinearOp
ModifiableLinearOp createDiagnosticLinearOp(const Teuchos::RCP< std::ostream > &os, const LinearOp &A, const std::string &label)
Constructor method for building DiagnosticLinearOp.
Definition
Teko_DiagnosticLinearOp.hpp:190
Generated by
1.17.0