11 #ifndef BELOS_STATUS_TEST_RESNORM_OUTPUT_HPP
12 #define BELOS_STATUS_TEST_RESNORM_OUTPUT_HPP
41 template <
class ScalarType,
class MV,
class OP>
74 headerPrinted_(false),
75 stateTest_(printStates),
117 state_ = test_->checkStatus(solver);
126 currNumRHS_ = currIdx_.size();
128 numIterDgts_ = (int)std::floor(std::log10((
double)iterTest_->getMaxIters()))+1;
131 if (((iterTest_->getNumIters() % modTest_ == 0) && (iterTest_->getNumIters()!=lastNumIters_)) || (state_ ==
Passed)) {
132 lastNumIters_ = iterTest_->getNumIters();
133 if ( (state_ & stateTest_) == state_) {
137 else if ( printer_->isVerbosity(
Debug) ) {
173 std::vector<Teuchos::RCP<StatusTest<ScalarType,MV,OP> > > tmpVec = comboTest->
getStatusTests();
176 int numTests = tmpVec.size();
179 for (
int i=0; i<numTests; ++i) {
183 if (tmpItrTest != Teuchos::null) {
184 iterTest_ = tmpItrTest;
191 if (tmpResTest != Teuchos::null) {
193 resTestVec_.resize( numResTests_ );
194 resTestVec_[0] = tmpResTest;
200 TEUCHOS_TEST_FOR_EXCEPTION(tmpComboTest == Teuchos::null,
StatusTestError,
"StatusTestResNormOutput(): test must be Belos::StatusTest[MaxIters|ResNorm|Combo].");
203 numResTests_ = tmpVec.size();
204 resTestVec_.resize( numResTests_ );
205 for (
int j=0; j<numResTests_; ++j) {
207 TEUCHOS_TEST_FOR_EXCEPTION(tmpResTest == Teuchos::null,
StatusTestError,
"StatusTestResNormOutput(): test must be a vector of Belos::StatusTestResNorm.");
208 resTestVec_[j] = tmpResTest;
225 void setSolverDesc(
const std::string& solverDesc) { solverDesc_ = solverDesc; }
229 void setPrecondDesc(
const std::string& precondDesc) { precondDesc_ = precondDesc; }
244 headerPrinted_ =
false;
259 void print(std::ostream& os,
int indent = 0)
const {
260 std::string ind(indent,
' ');
261 std::string starLine(55,
'*');
262 std::string starFront(5,
'*');
264 std::ios_base::fmtflags osFlags(os.flags());
266 os.setf(std::ios::scientific, std::ios::floatfield);
270 if (!headerPrinted_) {
271 os << std::endl << ind << starLine << std::endl;
272 os << ind << starFront <<
" Belos Iterative Solver: " << solverDesc_ << std::endl;
273 if (precondDesc_ !=
"")
274 os << ind << starFront <<
" Preconditioner: " << precondDesc_ << std::endl;
275 os << ind << starFront <<
" Maximum Iterations: " << iterTest_->getMaxIters() << std::endl;
276 os << ind << starFront <<
" Block Size: " << blockSize_ << std::endl;
277 if (numResTests_ > 1) {
278 os << ind << starFront <<
" Residual Tests ("
280 <<
"): " << std::endl;
282 os << ind << starFront <<
" Residual Test: " << std::endl;
284 for (
int i=0; i<numResTests_; ++i) {
285 os << ind << starFront <<
" Test " << i+1 <<
" : " << resTestVec_[i]->description() << std::endl;
287 os << ind << starLine << std::endl;
288 headerPrinted_ =
true;
292 os.setf(std::ios_base::right, std::ios_base::adjustfield);
293 std::string ind2( 7 + numIterDgts_,
' ' );
294 os << ind <<
"Iter " << std::setw(numIterDgts_) << iterTest_->getNumIters() <<
", ";
295 for (
int i=0; i<currNumRHS_; ++i) {
296 if ( i > 0 && currIdx_[i]!=-1 ) {
300 os <<
"[" << std::setw(numLSDgts_) << currIdx_[i]+1 <<
"] : ";
301 for (
int j=0; j<numResTests_; ++j) {
303 os << std::setw(15) << (*resTestVec_[j]->getTestValue())[currIdx_[i]];
305 os << std::setw(15) <<
"---";
327 std::vector<Teuchos::RCP<StatusTestResNorm<ScalarType,MV,OP> > > resTestVec_;
329 std::string solverDesc_;
330 std::string precondDesc_;
331 std::vector<int> currIdx_;
333 mutable bool headerPrinted_;
334 int stateTest_, modTest_;
335 int lastNumIters_, comboType_;
336 int numResTests_, blockSize_;
337 int currNumRHS_, currLSNum_;
338 int numLSDgts_, numIterDgts_;
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...
void setChild(Teuchos::RCP< StatusTest< ScalarType, MV, OP > > test)
Set child test, which must be a combination of a Belos::StatusTestMaxIters AND a single or combinatio...
void setOutputManager(const Teuchos::RCP< OutputManager< ScalarType > > &printer)
Set the output manager.
virtual int getBlockSize() const =0
Get the blocksize to be used by the iterative solver in solving this linear problem.
StatusType checkStatus(Iteration< ScalarType, MV, OP > *solver)
Exception thrown to signal error in a status test during Belos::StatusTest::checkStatus().
StatusTestResNormOutput(const Teuchos::RCP< OutputManager< ScalarType > > &printer, Teuchos::RCP< StatusTest< ScalarType, MV, OP > > test, int mod=1, int printStates=Passed)
Constructor.
Virtual base class for StatusTest that printing status tests.
Pure virtual base class for defining the status testing capabilities of Belos.
ComboType getComboType() const
Return the type of combination (OR, AND, or SEQ).
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
An abstract class of StatusTest for stopping criteria using residual norms.
Belos::StatusTest class for specifying a maximum number of iterations.
void reset()
Informs the status test that it should reset its internal configuration to the uninitialized state...
Pure virtual base class which describes the basic interface to the linear solver iteration.
Teuchos::RCP< const MV > getRHS() const
A pointer to the right-hand side B.
A pure virtual class for defining the status tests for the Belos iterative solvers.
void resetNumCalls()
Informs the outputting status test that it should reset the number of calls to zero.
void setSolverDesc(const std::string &solverDesc)
Set a short solver description for output clarity.
StatusType
Whether the StatusTest wants iteration to stop.
static int GetNumberVecs(const MV &mv)
Obtain the number of vectors in mv.
Traits class which defines basic operations on multivectors.
Belos::StatusTest for logically combining several status tests.
virtual ~StatusTestResNormOutput()
Destructor.
A Belos::StatusTest class for specifying a maximum number of iterations.
const std::vector< int > & getLSIndex() const
(Zero-based) indices of the linear system(s) currently being solved.
void setPrecondDesc(const std::string &precondDesc)
Set a short preconditioner description for output clarity.
A linear system to solve, and its associated information.
int getLSNumber() const
The number of linear systems that have been set.
virtual const LinearProblem< ScalarType, MV, OP > & getProblem() const =0
Get a constant reference to the linear problem.
Belos::StatusTest abstract class for specifying a residual norm stopping criteria.
A special StatusTest for printing other status tests in a simple format.
StatusType getStatus() const
Return the result of the most recent checkStatus call, or undefined if it has not been run...
A class for extending the status testing capabilities of Belos via logical combinations.
st_vector getStatusTests()
Return the vector of status tests.
Belos header file which uses auto-configuration information to include necessary C++ headers...
Teuchos::RCP< StatusTest< ScalarType, MV, OP > > getChild() const
Get child test.
A virtual base class for StatusTest that print other status tests.
void print(std::ostream &os, int indent=0) const
Output formatted description of stopping test to output stream.
void setOutputFrequency(int mod)
Set how often the child test is printed.