Belos Version of the Day
Loading...
Searching...
No Matches
BelosStatusTestGeneralOutput.hpp
Go to the documentation of this file.
1//@HEADER
2// ************************************************************************
3//
4// Belos: Block Linear Solvers Package
5// Copyright 2004 Sandia Corporation
6//
7// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8// the U.S. Government retains certain rights in this software.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38//
39// ************************************************************************
40//@HEADER
41//
42
43#ifndef BELOS_STATUS_TEST_GENERAL_OUTPUT_HPP
44#define BELOS_STATUS_TEST_GENERAL_OUTPUT_HPP
45
52#include "BelosConfigDefs.hpp"
53#include "BelosTypes.hpp"
54#include "BelosIteration.hpp"
55
56#include "BelosStatusTest.hpp"
59
60namespace Belos {
61
71template <class ScalarType, class MV, class OP>
72class StatusTestGeneralOutput : public StatusTestOutput<ScalarType,MV,OP> {
73
74 public:
76
77
92 StatusTestGeneralOutput(const Teuchos::RCP<OutputManager<ScalarType> > &printer,
93 Teuchos::RCP<StatusTest<ScalarType,MV,OP> > test,
94 int mod = 1,
95 int printStates = Passed)
96 : printer_(printer),
97 test_(test),
98 state_(Undefined),
99 stateTest_(printStates),
100 modTest_(mod),
101 numCalls_(0)
102 {}
103
107
109
110
128 TEUCHOS_TEST_FOR_EXCEPTION(test_ == Teuchos::null,StatusTestError,"StatusTestGeneralOutput::checkStatus(): child pointer is null.");
129 state_ = test_->checkStatus(solver);
130
131 if (numCalls_++ % modTest_ == 0) {
132 if ( (state_ & stateTest_) == state_) {
133 if ( printer_->isVerbosity(StatusTestDetails) ) {
134 print( printer_->stream(StatusTestDetails) );
135 }
136 else if ( printer_->isVerbosity(Debug) ) {
137 print( printer_->stream(Debug) );
138 }
139 }
140 }
141
142 return state_;
143 }
144
147 return state_;
148 }
150
151
153
154
157 void setOutputManager(const Teuchos::RCP<OutputManager<ScalarType> > &printer) { printer_ = printer; }
158
161 void setOutputFrequency(int mod) { modTest_ = mod; }
162
167 void setChild(Teuchos::RCP<StatusTest<ScalarType,MV,OP> > test) {
168 test_ = test;
169 state_ = Undefined;
170 }
171
173 Teuchos::RCP<StatusTest<ScalarType,MV,OP> > getChild() const {
174 return test_;
175 }
176
179 void setSolverDesc(const std::string& solverDesc) { solverDesc_ = solverDesc; }
180
183 void setPrecondDesc(const std::string& precondDesc) { precondDesc_ = precondDesc; }
184
186
187
189
190
195 void reset() {
196 state_ = Undefined;
197 test_->reset();
198 numCalls_ = 0;
199 }
200
202 void resetNumCalls() { numCalls_ = 0; }
203
205
207
208
210 void print(std::ostream& os, int indent = 0) const {
211 std::string ind(indent,' ');
212 os << std::endl << ind << "Belos::StatusTestGeneralOutput: ";
213 switch (state_) {
214 case Passed:
215 os << "Passed" << std::endl;
216 break;
217 case Failed:
218 os << "Failed" << std::endl;
219 break;
220 case Undefined:
221 os << "Undefined" << std::endl;
222 break;
223 }
224 os << ind << " (Num calls,Mod test,State test): " << "(" << numCalls_ << ", " << modTest_ << ",";
225 if (stateTest_ == 0) {
226 os << " none)" << std::endl;
227 }
228 else {
229 if ( stateTest_ & Passed ) os << " Passed";
230 if ( stateTest_ & Failed ) os << " Failed";
231 if ( stateTest_ & Undefined ) os << " Undefined";
232 os << ")" << std::endl;
233 }
234 // print child, with extra indention
235 test_->print(os,indent+3);
236 }
237
239
240 private:
241 Teuchos::RCP<OutputManager<ScalarType> > printer_;
242 Teuchos::RCP<StatusTest<ScalarType,MV,OP> > test_;
243 std::string solverDesc_;
244 std::string precondDesc_;
245 StatusType state_;
246 int stateTest_;
247 int modTest_;
248 int numCalls_;
249};
250
251} // end of Belos namespace
252
253#endif /* BELOS_STATUS_TEST_OUTPUT_HPP */
Belos header file which uses auto-configuration information to include necessary C++ headers.
Pure virtual base class which describes the basic interface to the linear solver iteration.
Class which manages the output and verbosity of the Belos solvers.
Virtual base class for StatusTest that printing status tests.
Pure virtual base class for defining the status testing capabilities of Belos.
Collection of types and exceptions used within the Belos solvers.
Belos's basic output manager for sending information of select verbosity levels to the appropriate ou...
Exception thrown to signal error in a status test during Belos::StatusTest::checkStatus().
A special StatusTest for printing other status tests.
StatusType getStatus() const
Return the result of the most recent checkStatus call, or undefined if it has not been run.
void resetNumCalls()
Informs the outputting status test that it should reset the number of calls to zero.
void reset()
Informs the status test that it should reset its internal configuration to the uninitialized state.
void setOutputManager(const Teuchos::RCP< OutputManager< ScalarType > > &printer)
Set the output manager.
StatusType checkStatus(Iteration< ScalarType, MV, OP > *solver)
void setOutputFrequency(int mod)
Set how often the child test is printed.
Teuchos::RCP< StatusTest< ScalarType, MV, OP > > getChild() const
Get child test.
void setChild(Teuchos::RCP< StatusTest< ScalarType, MV, OP > > test)
Set child test.
StatusTestGeneralOutput(const Teuchos::RCP< OutputManager< ScalarType > > &printer, Teuchos::RCP< StatusTest< ScalarType, MV, OP > > test, int mod=1, int printStates=Passed)
Constructor.
void setSolverDesc(const std::string &solverDesc)
Set a short solver description for output clarity.
void print(std::ostream &os, int indent=0) const
Output formatted description of stopping test to output stream.
void setPrecondDesc(const std::string &precondDesc)
Set a short preconditioner description for output clarity.
A virtual base class for StatusTest that print other status tests.
A pure virtual class for defining the status tests for the Belos iterative solvers.
@ StatusTestDetails
StatusType
Whether the StatusTest wants iteration to stop.

Generated for Belos by doxygen 1.10.0