11 #ifndef BELOS_STATUS_TEST_USER_OUTPUT_HPP
12 #define BELOS_STATUS_TEST_USER_OUTPUT_HPP
37 template <
class ScalarType,
class MV,
class OP>
70 taggedTests_(taggedTests),
72 headerPrinted_(false),
73 stateTest_(printStates),
114 state_ = test_->checkStatus(solver);
123 currNumRHS_ = currIdx_.size();
125 numIterDgts_ = (int)std::floor(std::log10((
double)iterTest_->getMaxIters()))+1;
128 if (((iterTest_->getNumIters() % modTest_ == 0) && (iterTest_->getNumIters()!=lastNumIters_)) || (state_ ==
Passed)) {
129 lastNumIters_ = iterTest_->getNumIters();
130 if ( (state_ & stateTest_) == state_) {
134 else if ( printer_->isVerbosity(
Debug) ) {
170 std::vector<Teuchos::RCP<StatusTest<ScalarType,MV,OP> > > tmpVec = comboTest->
getStatusTests();
173 int numTests = tmpVec.size();
176 for (
int i=0; i<numTests; ++i) {
180 if (tmpItrTest != Teuchos::null) {
181 iterTest_ = tmpItrTest;
190 if (tmpResTest != Teuchos::null) {
191 resTestVec_.resize( 1 );
192 resTestVec_[0] = tmpResTest;
193 resTestNamesVec_.resize( 1 );
194 resTestNamesVec_[0] =
"IMPLICIT RES";
202 TEUCHOS_TEST_FOR_EXCEPTION(tmpComboTest == Teuchos::null,
StatusTestError,
"StatusTestUserOutput(): test must be Belos::StatusTest[MaxIters|ResNorm|Combo].");
208 typename std::map<std::string,Teuchos::RCP<StatusTest<ScalarType,MV,OP> > >::iterator it;
209 for (
size_t j=0; j<tmpVec.size(); ++j) {
212 if(tmpResTest == Teuchos::null)
continue;
215 for(it = taggedTests_->begin(); it != taggedTests_->end(); ++it) {
216 if(tmpVec[j] == it->second) { bFound =
true;
break; }
219 resTestVec_.push_back(tmpResTest);
220 resTestNamesVec_.push_back(
"IMPLICIT RES");
225 for(it = taggedTests_->begin(); it != taggedTests_->end(); ++it) {
226 resTestVec_.push_back(it->second);
227 resTestNamesVec_.push_back(it->first);
244 void setSolverDesc(
const std::string& solverDesc) { solverDesc_ = solverDesc; }
248 void setPrecondDesc(
const std::string& precondDesc) { precondDesc_ = precondDesc; }
263 headerPrinted_ =
false;
278 void print(std::ostream& os,
int indent = 0)
const {
279 std::string ind(indent,
' ');
280 std::string starLine(55,
'*');
281 std::string starFront(5,
'*');
283 std::ios_base::fmtflags osFlags(os.flags());
285 os.setf(std::ios::scientific, std::ios::floatfield);
289 if (!headerPrinted_) {
290 os << std::endl << ind << starLine << std::endl;
291 os << ind << starFront <<
" Belos Iterative Solver: " << solverDesc_ << std::endl;
292 if (precondDesc_ !=
"")
293 os << ind << starFront <<
" Preconditioner: " << precondDesc_ << std::endl;
294 os << ind << starFront <<
" Maximum Iterations: " << iterTest_->getMaxIters() << std::endl;
295 os << ind << starFront <<
" Block Size: " << blockSize_ << std::endl;
296 os << ind << starFront <<
" Status tests: " << std::endl;
297 test_->print(os,indent + 3);
298 os << ind << starLine << std::endl;
299 os.setf(std::ios_base::right, std::ios_base::adjustfield);
300 std::string indheader( 7 + numIterDgts_,
' ' );
302 for (
int i=0; i<currNumRHS_; ++i) {
303 if ( i > 0 && currIdx_[i]!=-1 ) {
305 os << ind << indheader;
307 os <<
"[" << std::setw(numLSDgts_) << currIdx_[i]+1 <<
"] : ";
308 for (
size_t j=0; j<resTestVec_.size(); ++j) {
309 os << std::setw(15) << resTestNamesVec_[j];
313 headerPrinted_ =
true;
317 os.setf(std::ios_base::right, std::ios_base::adjustfield);
318 std::string ind2( 7 + numIterDgts_,
' ' );
319 os << ind <<
"Iter " << std::setw(numIterDgts_) << iterTest_->getNumIters() <<
", ";
320 for (
int i=0; i<currNumRHS_; ++i) {
321 if ( i > 0 && currIdx_[i]!=-1 ) {
325 os <<
"[" << std::setw(numLSDgts_) << currIdx_[i]+1 <<
"] : ";
326 for (
size_t j=0; j<resTestVec_.size(); ++j) {
330 if(tempResTest != Teuchos::null)
331 os << std::setw(15) << (*tempResTest->
getTestValue())[currIdx_[i]];
334 os << std::setw(15) <<
"Passed";
336 os << std::setw(15) <<
"Failed";
337 else os << std::setw(15) <<
"Undefined";
340 os << std::setw(15) <<
"---";
365 std::vector<Teuchos::RCP<StatusTest<ScalarType,MV,OP> > > resTestVec_;
368 std::vector<std::string> resTestNamesVec_;
370 std::string solverDesc_;
371 std::string precondDesc_;
372 std::vector<int> currIdx_;
374 mutable bool headerPrinted_;
375 int stateTest_, modTest_;
376 int lastNumIters_, comboType_;
378 int currNumRHS_, currLSNum_;
379 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 reset()
Informs the status test that it should reset its internal configuration to the uninitialized state...
virtual int getBlockSize() const =0
Get the blocksize to be used by the iterative solver in solving this linear problem.
Exception thrown to signal error in a status test during Belos::StatusTest::checkStatus().
void print(std::ostream &os, int indent=0) const
Output formatted description of stopping test to output stream.
A special StatusTest for printing other status tests in a simple format.
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.
void setSolverDesc(const std::string &solverDesc)
Set a short solver description for output clarity.
Belos::StatusTest class for specifying a maximum number of iterations.
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.
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.
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 resetNumCalls()
Informs the outputting status test that it should reset the number of calls to zero.
A linear system to solve, and its associated information.
int getLSNumber() const
The number of linear systems that have been set.
virtual ~StatusTestUserOutput()
Destructor.
Teuchos::RCP< StatusTest< ScalarType, MV, OP > > getChild() const
Get child test.
StatusTestUserOutput(const Teuchos::RCP< OutputManager< ScalarType > > &printer, Teuchos::RCP< StatusTest< ScalarType, MV, OP > > test, Teuchos::RCP< std::map< std::string, Teuchos::RCP< StatusTest< ScalarType, MV, OP > > > > taggedTests, int mod=1, int printStates=Passed)
Constructor.
virtual const LinearProblem< ScalarType, MV, OP > & getProblem() const =0
Get a constant reference to the linear problem.
virtual const std::vector< MagnitudeType > * getTestValue() const =0
Returns the test value, , computed in most recent call to CheckStatus.
Belos::StatusTest abstract class for specifying a residual norm stopping criteria.
void setPrecondDesc(const std::string &precondDesc)
Set a short preconditioner description for output clarity.
void setChild(Teuchos::RCP< StatusTest< ScalarType, MV, OP > > test)
Set child test, which must be a combination of a Belos::StatusTestMaxIters AND a combination of Belos...
void setOutputManager(const Teuchos::RCP< OutputManager< ScalarType > > &printer)
Set the output manager.
StatusType getStatus() const
Return the result of the most recent checkStatus call, or undefined if it has not been run...
StatusType checkStatus(Iteration< ScalarType, MV, OP > *solver)
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...
A virtual base class for StatusTest that print other status tests.
void setOutputFrequency(int mod)
Set how often the child test is printed.