Belos Package Browser (Single Doxygen Collection)  Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BelosFixedPointSolMgr.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Belos: Block Linear Solvers Package
4 //
5 // Copyright 2004-2016 NTESS and the Belos contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef BELOS_FIXEDPOINT_SOLMGR_HPP
11 #define BELOS_FIXEDPOINT_SOLMGR_HPP
12 
17 #include "BelosConfigDefs.hpp"
18 #include "BelosTypes.hpp"
19 
20 #include "BelosLinearProblem.hpp"
21 #include "BelosSolverManager.hpp"
22 
23 #include "BelosCGIter.hpp"
24 #include "BelosFixedPointIter.hpp"
27 #include "BelosStatusTestCombo.hpp"
29 #include "BelosOutputManager.hpp"
30 #ifdef BELOS_TEUCHOS_TIME_MONITOR
31 # include "Teuchos_TimeMonitor.hpp"
32 #endif
33 #include <algorithm>
34 
43 namespace Belos {
44 
46 
47 
55  FixedPointSolMgrLinearProblemFailure(const std::string& what_arg) : BelosError(what_arg)
56  {}};
57 
58  template<class ScalarType, class MV, class OP>
59  class FixedPointSolMgr : public SolverManager<ScalarType,MV,OP> {
60 
61  private:
67 
68  public:
69 
71 
72 
79 
99 
101  virtual ~FixedPointSolMgr() {};
102 
106  }
108 
110 
111 
112  const LinearProblem<ScalarType,MV,OP>& getProblem() const override {
113  return *problem_;
114  }
115 
119 
123 
130  return Teuchos::tuple(timerSolve_);
131  }
132 
138  MagnitudeType achievedTol() const override {
139  return achievedTol_;
140  }
141 
143  int getNumIters() const override {
144  return numIters_;
145  }
146 
149  bool isLOADetected() const override { return false; }
151 
153 
154 
156  void setProblem( const Teuchos::RCP<LinearProblem<ScalarType,MV,OP> > &problem ) override { problem_ = problem; }
157 
159  void setParameters( const Teuchos::RCP<Teuchos::ParameterList> &params ) override;
160 
163  {
164 
165  convTest_ = userConvStatusTest;
166 
167  typedef Belos::StatusTestCombo<ScalarType,MV,OP> StatusTestCombo_t;
168  sTest_ = Teuchos::rcp( new StatusTestCombo_t( StatusTestCombo_t::OR, maxIterTest_, convTest_ ) );
169 
172 
173  std::string solverDesc = " Fixed Point ";
174  outputTest_->setSolverDesc( solverDesc );
175  }
176 
178 
180 
181 
185  void reset( const ResetType type ) override { if ((type & Belos::Problem) && !Teuchos::is_null(problem_)) problem_->setProblem(); }
187 
189 
190 
208  ReturnType solve() override;
210 
213 
215  std::string description() const override;
217 
218  private:
219 
222 
227 
233 
236 
239 
242 
245 
246  //
247  // Default solver parameters.
248  //
249  static constexpr int maxIters_default_ = 1000;
250  static constexpr bool showMaxResNormOnly_default_ = false;
251  static constexpr int blockSize_default_ = 1;
252  static constexpr int verbosity_default_ = Belos::Errors;
253  static constexpr int outputStyle_default_ = Belos::General;
254  static constexpr int outputFreq_default_ = -1;
255  static constexpr const char * label_default_ = "Belos";
256 
257  //
258  // Current solver parameters and other values.
259  //
260 
263 
270 
273 
276 
279 
281  std::string label_;
282 
285 
287  bool isSet_;
288  };
289 
290 
291 // Empty Constructor
292 template<class ScalarType, class MV, class OP>
294  outputStream_(Teuchos::rcpFromRef(std::cout)),
295  convtol_(DefaultSolverParameters::convTol),
296  achievedTol_(Teuchos::ScalarTraits<MagnitudeType>::zero()),
297  maxIters_(maxIters_default_),
298  numIters_(0),
299  blockSize_(blockSize_default_),
300  verbosity_(verbosity_default_),
301  outputStyle_(outputStyle_default_),
302  outputFreq_(outputFreq_default_),
303  showMaxResNormOnly_(showMaxResNormOnly_default_),
304  label_(label_default_),
305  isSet_(false)
306 {}
307 
308 
309 // Basic Constructor
310 template<class ScalarType, class MV, class OP>
314  problem_(problem),
315  outputStream_(Teuchos::rcpFromRef(std::cout)),
316  convtol_(DefaultSolverParameters::convTol),
317  achievedTol_(Teuchos::ScalarTraits<MagnitudeType>::zero()),
318  maxIters_(maxIters_default_),
319  numIters_(0),
320  blockSize_(blockSize_default_),
321  verbosity_(verbosity_default_),
322  outputStyle_(outputStyle_default_),
323  outputFreq_(outputFreq_default_),
324  showMaxResNormOnly_(showMaxResNormOnly_default_),
325  label_(label_default_),
326  isSet_(false)
327 {
328  TEUCHOS_TEST_FOR_EXCEPTION(problem_.is_null(), std::invalid_argument,
329  "FixedPointSolMgr's constructor requires a nonnull LinearProblem instance.");
330 
331  // If the user passed in a nonnull parameter list, set parameters.
332  // Otherwise, the next solve() call will use default parameters,
333  // unless the user calls setParameters() first.
334  if (! pl.is_null()) {
335  setParameters (pl);
336  }
337 }
338 
339 template<class ScalarType, class MV, class OP>
340 void
343 {
344  // Create the internal parameter list if one doesn't already exist.
345  if (params_ == Teuchos::null) {
346  params_ = Teuchos::rcp( new Teuchos::ParameterList(*getValidParameters()) );
347  }
348  else {
349  params->validateParameters(*getValidParameters());
350  }
351 
352  // Check for maximum number of iterations
353  if (params->isParameter("Maximum Iterations")) {
354  maxIters_ = params->get("Maximum Iterations",maxIters_default_);
355 
356  // Update parameter in our list and in status test.
357  params_->set("Maximum Iterations", maxIters_);
358  if (maxIterTest_!=Teuchos::null)
359  maxIterTest_->setMaxIters( maxIters_ );
360  }
361 
362  // Check for blocksize
363  if (params->isParameter("Block Size")) {
364  blockSize_ = params->get("Block Size",blockSize_default_);
365  TEUCHOS_TEST_FOR_EXCEPTION(blockSize_ <= 0, std::invalid_argument,
366  "Belos::FixedPointSolMgr: \"Block Size\" must be strictly positive.");
367 
368  // Update parameter in our list.
369  params_->set("Block Size", blockSize_);
370  }
371 
372  // Check to see if the timer label changed.
373  if (params->isParameter("Timer Label")) {
374  std::string tempLabel = params->get("Timer Label", label_default_);
375 
376  // Update parameter in our list and solver timer
377  if (tempLabel != label_) {
378  label_ = tempLabel;
379  params_->set("Timer Label", label_);
380  std::string solveLabel = label_ + ": FixedPointSolMgr total solve time";
381 #ifdef BELOS_TEUCHOS_TIME_MONITOR
382  timerSolve_ = Teuchos::TimeMonitor::getNewCounter(solveLabel);
383 #endif
384  }
385  }
386 
387  // Check for a change in verbosity level
388  if (params->isParameter("Verbosity")) {
389  if (Teuchos::isParameterType<int>(*params,"Verbosity")) {
390  verbosity_ = params->get("Verbosity", verbosity_default_);
391  } else {
392  verbosity_ = (int)Teuchos::getParameter<Belos::MsgType>(*params,"Verbosity");
393  }
394 
395  // Update parameter in our list.
396  params_->set("Verbosity", verbosity_);
397  if (printer_ != Teuchos::null)
398  printer_->setVerbosity(verbosity_);
399  }
400 
401  // Check for a change in output style
402  if (params->isParameter("Output Style")) {
403  if (Teuchos::isParameterType<int>(*params,"Output Style")) {
404  outputStyle_ = params->get("Output Style", outputStyle_default_);
405  } else {
406  outputStyle_ = (int)Teuchos::getParameter<Belos::OutputType>(*params,"Output Style");
407  }
408 
409  // Update parameter in our list.
410  params_->set("Output Style", outputStyle_);
411  outputTest_ = Teuchos::null;
412  }
413 
414  // output stream
415  if (params->isParameter("Output Stream")) {
416  outputStream_ = Teuchos::getParameter<Teuchos::RCP<std::ostream> >(*params,"Output Stream");
417 
418  // Update parameter in our list.
419  params_->set("Output Stream", outputStream_);
420  if (printer_ != Teuchos::null)
421  printer_->setOStream( outputStream_ );
422  }
423 
424  // frequency level
425  if (verbosity_ & Belos::StatusTestDetails) {
426  if (params->isParameter("Output Frequency")) {
427  outputFreq_ = params->get("Output Frequency", outputFreq_default_);
428  }
429 
430  // Update parameter in out list and output status test.
431  params_->set("Output Frequency", outputFreq_);
432  if (outputTest_ != Teuchos::null)
433  outputTest_->setOutputFrequency( outputFreq_ );
434  }
435 
436  // Create output manager if we need to.
437  if (printer_ == Teuchos::null) {
438  printer_ = Teuchos::rcp( new OutputManager<ScalarType>(verbosity_, outputStream_) );
439  }
440 
441  // Convergence
442  typedef Belos::StatusTestCombo<ScalarType,MV,OP> StatusTestCombo_t;
443  typedef Belos::StatusTestGenResNorm<ScalarType,MV,OP> StatusTestResNorm_t;
444 
445  // Check for convergence tolerance
446  if (params->isParameter("Convergence Tolerance")) {
447  if (params->isType<MagnitudeType> ("Convergence Tolerance")) {
448  convtol_ = params->get ("Convergence Tolerance",
449  static_cast<MagnitudeType> (DefaultSolverParameters::convTol));
450  }
451  else {
452  convtol_ = params->get ("Convergence Tolerance", DefaultSolverParameters::convTol);
453  }
454 
455  // Update parameter in our list and residual tests.
456  params_->set("Convergence Tolerance", convtol_);
457  if (convTest_ != Teuchos::null)
458  convTest_->setTolerance( convtol_ );
459  }
460 
461  if (params->isParameter("Show Maximum Residual Norm Only")) {
462  showMaxResNormOnly_ = Teuchos::getParameter<bool>(*params,"Show Maximum Residual Norm Only");
463 
464  // Update parameter in our list and residual tests
465  params_->set("Show Maximum Residual Norm Only", showMaxResNormOnly_);
466  if (convTest_ != Teuchos::null)
467  convTest_->setShowMaxResNormOnly( showMaxResNormOnly_ );
468  }
469 
470  // Create status tests if we need to.
471 
472  // Basic test checks maximum iterations and native residual.
473  if (maxIterTest_ == Teuchos::null)
474  maxIterTest_ = Teuchos::rcp( new StatusTestMaxIters<ScalarType,MV,OP>( maxIters_ ) );
475 
476  // Implicit residual test, using the native residual to determine if convergence was achieved.
477  if (convTest_ == Teuchos::null)
478  convTest_ = Teuchos::rcp( new StatusTestResNorm_t( convtol_, 1 ) );
479 
480  if (sTest_ == Teuchos::null)
481  sTest_ = Teuchos::rcp( new StatusTestCombo_t( StatusTestCombo_t::OR, maxIterTest_, convTest_ ) );
482 
483  if (outputTest_ == Teuchos::null) {
484 
485  // Create the status test output class.
486  // This class manages and formats the output from the status test.
487  StatusTestOutputFactory<ScalarType,MV,OP> stoFactory( outputStyle_ );
488  outputTest_ = stoFactory.create( printer_, sTest_, outputFreq_, Passed+Failed+Undefined );
489 
490  // Set the solver string for the output test
491  std::string solverDesc = " Fixed Point ";
492  outputTest_->setSolverDesc( solverDesc );
493 
494  }
495 
496  // Create the timer if we need to.
497  if (timerSolve_ == Teuchos::null) {
498  std::string solveLabel = label_ + ": FixedPointSolMgr total solve time";
499 #ifdef BELOS_TEUCHOS_TIME_MONITOR
500  timerSolve_ = Teuchos::TimeMonitor::getNewCounter(solveLabel);
501 #endif
502  }
503 
504  // Inform the solver manager that the current parameters were set.
505  isSet_ = true;
506 }
507 
508 
509 template<class ScalarType, class MV, class OP>
512 {
514 
515  // Set all the valid parameters and their default values.
516  if(is_null(validPL)) {
517  Teuchos::RCP<Teuchos::ParameterList> pl = Teuchos::parameterList();
518 
519  // The static_cast is to resolve an issue with older clang versions which
520  // would cause the constexpr to link fail. With c++17 the problem is resolved.
521  pl->set("Convergence Tolerance", static_cast<MagnitudeType>(DefaultSolverParameters::convTol),
522  "The relative residual tolerance that needs to be achieved by the\n"
523  "iterative solver in order for the linear system to be declared converged.");
524  pl->set("Maximum Iterations", static_cast<int>(maxIters_default_),
525  "The maximum number of block iterations allowed for each\n"
526  "set of RHS solved.");
527  pl->set("Block Size", static_cast<int>(blockSize_default_),
528  "The number of vectors in each block.");
529  pl->set("Verbosity", static_cast<int>(verbosity_default_),
530  "What type(s) of solver information should be outputted\n"
531  "to the output stream.");
532  pl->set("Output Style", static_cast<int>(outputStyle_default_),
533  "What style is used for the solver information outputted\n"
534  "to the output stream.");
535  pl->set("Output Frequency", static_cast<int>(outputFreq_default_),
536  "How often convergence information should be outputted\n"
537  "to the output stream.");
538  pl->set("Output Stream", Teuchos::rcpFromRef(std::cout),
539  "A reference-counted pointer to the output stream where all\n"
540  "solver output is sent.");
541  pl->set("Show Maximum Residual Norm Only", static_cast<bool>(showMaxResNormOnly_default_),
542  "When convergence information is printed, only show the maximum\n"
543  "relative residual norm when the block size is greater than one.");
544  pl->set("Timer Label", static_cast<const char *>(label_default_),
545  "The string to use as a prefix for the timer labels.");
546  validPL = pl;
547  }
548  return validPL;
549 }
550 
551 
552 // solve()
553 template<class ScalarType, class MV, class OP>
555  using Teuchos::RCP;
556  using Teuchos::rcp;
557  using Teuchos::rcp_const_cast;
558  using Teuchos::rcp_dynamic_cast;
559 
560  // Set the current parameters if they were not set before. NOTE:
561  // This may occur if the user generated the solver manager with the
562  // default constructor and then didn't set any parameters using
563  // setParameters().
564  if (!isSet_) {
565  setParameters(Teuchos::parameterList(*getValidParameters()));
566  }
567 
568  TEUCHOS_TEST_FOR_EXCEPTION( !problem_->isProblemSet(),
570  "Belos::FixedPointSolMgr::solve(): Linear problem is not ready, setProblem() "
571  "has not been called.");
572 
573  // Create indices for the linear systems to be solved.
574  int startPtr = 0;
575  int numRHS2Solve = MVT::GetNumberVecs( *(problem_->getRHS()) );
576  int numCurrRHS = ( numRHS2Solve < blockSize_) ? numRHS2Solve : blockSize_;
577 
578  std::vector<int> currIdx, currIdx2;
579  currIdx.resize( blockSize_ );
580  currIdx2.resize( blockSize_ );
581  for (int i=0; i<numCurrRHS; ++i)
582  { currIdx[i] = startPtr+i; currIdx2[i]=i; }
583  for (int i=numCurrRHS; i<blockSize_; ++i)
584  { currIdx[i] = -1; currIdx2[i] = i; }
585 
586  // Inform the linear problem of the current linear system to solve.
587  problem_->setLSIndex( currIdx );
588 
590  // Set up the parameter list for the Iteration subclass.
592  plist.set("Block Size",blockSize_);
593 
594  // Reset the output status test (controls all the other status tests).
595  outputTest_->reset();
596 
597  // Assume convergence is achieved, then let any failed convergence
598  // set this to false. "Innocent until proven guilty."
599  bool isConverged = true;
600 
602  // Set up the FixedPoint Iteration subclass.
603 
604  RCP<FixedPointIteration<ScalarType,MV,OP> > block_fp_iter;
605  block_fp_iter = rcp (new FixedPointIter<ScalarType,MV,OP> (problem_, printer_, outputTest_, plist));
606 
607  // Enter solve() iterations
608  {
609 #ifdef BELOS_TEUCHOS_TIME_MONITOR
610  Teuchos::TimeMonitor slvtimer(*timerSolve_);
611 #endif
612 
613  while ( numRHS2Solve > 0 ) {
614  //
615  // Reset the active / converged vectors from this block
616  std::vector<int> convRHSIdx;
617  std::vector<int> currRHSIdx( currIdx );
618  currRHSIdx.resize(numCurrRHS);
619 
620  // Reset the number of iterations.
621  block_fp_iter->resetNumIters();
622 
623  // Reset the number of calls that the status test output knows about.
624  outputTest_->resetNumCalls();
625 
626  // Get the current residual for this block of linear systems.
627  RCP<MV> R_0 = MVT::CloneViewNonConst( *(rcp_const_cast<MV>(problem_->getInitResVec())), currIdx );
628 
629  // Set the new state and initialize the solver.
631  newstate.R = R_0;
632  block_fp_iter->initializeFixedPoint(newstate);
633 
634  while(1) {
635 
636  // tell block_fp_iter to iterate
637  try {
638  block_fp_iter->iterate();
639  //
640  // Check whether any of the linear systems converged.
641  //
642  if (convTest_->getStatus() == Passed) {
643  // At least one of the linear system(s) converged.
644  //
645  // Get the column indices of the linear systems that converged.
646  std::vector<int> convIdx = convTest_->convIndices();
647 
648  // If the number of converged linear systems equals the
649  // number of linear systems currently being solved, then
650  // we are done with this block.
651  if (convIdx.size() == currRHSIdx.size())
652  break; // break from while(1){block_fp_iter->iterate()}
653 
654  // Inform the linear problem that we are finished with
655  // this current linear system.
656  problem_->setCurrLS();
657 
658  // Reset currRHSIdx to contain the right-hand sides that
659  // are left to converge for this block.
660  int have = 0;
661  std::vector<int> unconvIdx(currRHSIdx.size());
662  for (unsigned int i=0; i<currRHSIdx.size(); ++i) {
663  bool found = false;
664  for (unsigned int j=0; j<convIdx.size(); ++j) {
665  if (currRHSIdx[i] == convIdx[j]) {
666  found = true;
667  break;
668  }
669  }
670  if (!found) {
671  currIdx2[have] = currIdx2[i];
672  currRHSIdx[have++] = currRHSIdx[i];
673  }
674  else {
675  }
676  }
677  currRHSIdx.resize(have);
678  currIdx2.resize(have);
679 
680  // Set the remaining indices after deflation.
681  problem_->setLSIndex( currRHSIdx );
682 
683  // Get the current residual vector.
684  std::vector<MagnitudeType> norms;
685  R_0 = MVT::CloneCopy( *(block_fp_iter->getNativeResiduals(&norms)),currIdx2 );
686  for (int i=0; i<have; ++i) { currIdx2[i] = i; }
687 
688  // Set the new blocksize for the solver.
689  block_fp_iter->setBlockSize( have );
690 
691  // Set the new state and initialize the solver.
693  defstate.R = R_0;
694  block_fp_iter->initializeFixedPoint(defstate);
695  }
696  //
697  // None of the linear systems converged. Check whether the
698  // maximum iteration count was reached.
699  //
700  else if (maxIterTest_->getStatus() == Passed) {
701  isConverged = false; // None of the linear systems converged.
702  break; // break from while(1){block_fp_iter->iterate()}
703  }
704  //
705  // iterate() returned, but none of our status tests Passed.
706  // This indicates a bug.
707  //
708  else {
709  TEUCHOS_TEST_FOR_EXCEPTION(true,std::logic_error,
710  "Belos::FixedPointSolMgr::solve(): Neither the convergence test nor "
711  "the maximum iteration count test passed. Please report this bug "
712  "to the Belos developers.");
713  }
714  }
715  catch (const StatusTestNaNError& e) {
716  // A NaN was detected in the solver. Set the solution to zero and return unconverged.
717  achievedTol_ = MT::one();
718  Teuchos::RCP<MV> X = problem_->getLHS();
719  MVT::MvInit( *X, SCT::zero() );
720  printer_->stream(Warnings) << "Belos::FixedPointSolMgr::solve(): Warning! NaN has been detected!"
721  << std::endl;
722  return Unconverged;
723  }
724  catch (const std::exception &e) {
725  std::ostream& err = printer_->stream (Errors);
726  err << "Error! Caught std::exception in FixedPointIteration::iterate() at "
727  << "iteration " << block_fp_iter->getNumIters() << std::endl
728  << e.what() << std::endl;
729  throw;
730  }
731  }
732 
733  // Inform the linear problem that we are finished with this
734  // block linear system.
735  problem_->setCurrLS();
736 
737  // Update indices for the linear systems to be solved.
738  startPtr += numCurrRHS;
739  numRHS2Solve -= numCurrRHS;
740  if ( numRHS2Solve > 0 ) {
741  numCurrRHS = ( numRHS2Solve < blockSize_) ? numRHS2Solve : blockSize_;
742 
743 
744  currIdx.resize( blockSize_ );
745  currIdx2.resize( blockSize_ );
746  for (int i=0; i<numCurrRHS; ++i)
747  { currIdx[i] = startPtr+i; currIdx2[i] = i; }
748  for (int i=numCurrRHS; i<blockSize_; ++i)
749  { currIdx[i] = -1; currIdx2[i] = i; }
750 
751  // Set the next indices.
752  problem_->setLSIndex( currIdx );
753 
754  // Set the new blocksize for the solver.
755  block_fp_iter->setBlockSize( blockSize_ );
756  }
757  else {
758  currIdx.resize( numRHS2Solve );
759  }
760 
761  }// while ( numRHS2Solve > 0 )
762 
763  }
764 
765  // print final summary
766  sTest_->print( printer_->stream(FinalSummary) );
767 
768  // print timing information
769 #ifdef BELOS_TEUCHOS_TIME_MONITOR
770  // Calling summarize() requires communication in general, so don't
771  // call it unless the user wants to print out timing details.
772  // summarize() will do all the work even if it's passed a "black
773  // hole" output stream.
774  if (verbosity_ & TimingDetails) {
775  Teuchos::TimeMonitor::summarize( printer_->stream(TimingDetails) );
776  }
777 #endif
778 
779  // Save the iteration count for this solve.
780  numIters_ = maxIterTest_->getNumIters();
781 
782  // Save the convergence test value ("achieved tolerance") for this solve.
783  {
784  // testValues is nonnull and not persistent.
785  const std::vector<MagnitudeType>* pTestValues = convTest_->getTestValue();
786 
787  TEUCHOS_TEST_FOR_EXCEPTION(pTestValues == NULL, std::logic_error,
788  "Belos::FixedPointSolMgr::solve(): The convergence test's getTestValue() "
789  "method returned NULL. Please report this bug to the Belos developers.");
790 
791  TEUCHOS_TEST_FOR_EXCEPTION(pTestValues->size() < 1, std::logic_error,
792  "Belos::FixedPointSolMgr::solve(): The convergence test's getTestValue() "
793  "method returned a vector of length zero. Please report this bug to the "
794  "Belos developers.");
795 
796  // FIXME (mfh 12 Dec 2011) Does pTestValues really contain the
797  // achieved tolerances for all vectors in the current solve(), or
798  // just for the vectors from the last deflation?
799  achievedTol_ = *std::max_element (pTestValues->begin(), pTestValues->end());
800  }
801 
802  if (!isConverged) {
803  return Unconverged; // return from FixedPointSolMgr::solve()
804  }
805  return Converged; // return from FixedPointSolMgr::solve()
806 }
807 
808 // This method requires the solver manager to return a std::string that describes itself.
809 template<class ScalarType, class MV, class OP>
811 {
812  std::ostringstream oss;
813  oss << "Belos::FixedPointSolMgr<...,"<<Teuchos::ScalarTraits<ScalarType>::name()<<">";
814  return oss.str();
815 }
816 
817 } // end Belos namespace
818 
819 #endif /* BELOS_FIXEDPOINT_SOLMGR_HPP */
Collection of types and exceptions used within the Belos solvers.
Belos&#39;s basic output manager for sending information of select verbosity levels to the appropriate ou...
The Belos::FixedPointSolMgr provides a powerful and fully-featured solver manager over the FixedPoint...
Class which manages the output and verbosity of the Belos solvers.
Teuchos::ScalarTraits< ScalarType >::magnitudeType MagnitudeType
bool is_null(const boost::shared_ptr< T > &p)
Teuchos::RCP< Teuchos::ParameterList > params_
Current parameter list.
Belos concrete class for performing fixed point iteration iteration.
OperatorTraits< ScalarType, MV, OP > OPT
FixedPointSolMgr()
Empty constructor for FixedPointSolMgr. This constructor takes no arguments and sets the default valu...
static constexpr int outputStyle_default_
T & get(ParameterList &l, const std::string &name)
static constexpr int maxIters_default_
Belos concrete class for performing the conjugate-gradient (CG) iteration.
static RCP< Time > getNewCounter(const std::string &name)
bool is_null(const std::shared_ptr< T > &p)
Teuchos::ScalarTraits< MagnitudeType > MT
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
A factory class for generating StatusTestOutput objects.
static constexpr int outputFreq_default_
Teuchos::RCP< const Teuchos::ParameterList > getCurrentParameters() const override
Get a parameter list containing the current parameters for this object.
An abstract class of StatusTest for stopping criteria using residual norms.
static constexpr int verbosity_default_
An implementation of StatusTestResNorm using a family of residual norms.
static constexpr bool showMaxResNormOnly_default_
ParameterList & set(std::string const &name, T &&value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
static const double convTol
Default convergence tolerance.
Definition: BelosTypes.hpp:261
Belos::StatusTest class for specifying a maximum number of iterations.
MultiVecTraits< ScalarType, MV > MVT
static std::string name()
static constexpr int blockSize_default_
A factory class for generating StatusTestOutput objects.
Traits class which defines basic operations on multivectors.
Belos::StatusTest for logically combining several status tests.
void setParameters(const Teuchos::RCP< Teuchos::ParameterList > &params) override
Set the parameters the solver manager should use to solve the linear problem.
bool isParameter(const std::string &name) const
Teuchos::RCP< SolverManager< ScalarType, MV, OP > > clone() const override
clone for Inverted Injection (DII)
Teuchos::RCP< std::ostream > outputStream_
Output stream to which the output manager prints.
A Belos::StatusTest class for specifying a maximum number of iterations.
ResetType
How to reset the solver.
Definition: BelosTypes.hpp:174
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Pure virtual base class which describes the basic interface for a solver manager. ...
static void summarize(Ptr< const Comm< int > > comm, std::ostream &out=std::cout, const bool alwaysWriteLocal=false, const bool writeGlobalStats=true, const bool writeZeroTimers=true, const ECounterSetOp setOp=Intersection, const std::string &filter="", const bool ignoreZeroTimers=false)
bool is_null(const RCP< T > &p)
bool isLOADetected() const override
Return whether a loss of accuracy was detected by this solver during the most current solve...
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
Get a parameter list containing the valid parameters for this object.
virtual ~FixedPointSolMgr()
Destructor.
A linear system to solve, and its associated information.
Class which describes the linear problem to be solved by the iterative solver.
int numIters_
Number of iterations taken by the last solve() invocation.
std::string description() const override
Method to return description of the block CG solver manager.
ReturnType solve() override
This method performs possibly repeated calls to the underlying linear solver&#39;s iterate() routine unti...
bool isSet_
Whether or not the parameters have been set (via setParameters()).
int maxIters_
Maximum iteration count (read from parameter list).
Teuchos::RCP< StatusTestMaxIters< ScalarType, MV, OP > > maxIterTest_
Maximum iteration count stopping criterion.
ReturnType
Whether the Belos solve converged for all linear systems.
Definition: BelosTypes.hpp:123
Teuchos::RCP< Teuchos::Time > timerSolve_
Solve timer.
void replaceUserConvStatusTest(const Teuchos::RCP< StatusTestResNorm< ScalarType, MV, OP > > &userConvStatusTest)
Set user-defined convergence status test.
The Belos::SolverManager is a templated virtual base class that defines the basic interface that any ...
Teuchos::RCP< OutputManager< ScalarType > > printer_
Output manager, that handles printing of different kinds of messages.
Teuchos::RCP< const MV > R
The current residual.
void validateParameters(ParameterList const &validParamList, int const depth=1000, EValidateUsed const validateUsed=VALIDATE_USED_ENABLED, EValidateDefaults const validateDefaults=VALIDATE_DEFAULTS_ENABLED) const
static constexpr const char * label_default_
void setProblem(const Teuchos::RCP< LinearProblem< ScalarType, MV, OP > > &problem) override
Set the linear problem that needs to be solved.
FixedPointSolMgrLinearProblemFailure is thrown when the linear problem is not setup (i...
Teuchos::Array< Teuchos::RCP< Teuchos::Time > > getTimers() const
Return the timers for this object.
Teuchos::RCP< StatusTestOutput< ScalarType, MV, OP > > create(const Teuchos::RCP< OutputManager< ScalarType > > &printer, Teuchos::RCP< StatusTest< ScalarType, MV, OP > > test, int mod, int printStates)
Create the StatusTestOutput object specified by the outputStyle.
Structure to contain pointers to FixedPointIteration state variables.
FixedPointSolMgrLinearProblemFailure(const std::string &what_arg)
Belos::StatusTestResNorm for specifying general residual norm stopping criteria.
Teuchos::RCP< StatusTestOutput< ScalarType, MV, OP > > outputTest_
Output &quot;status test&quot; that controls all the other status tests.
void reset(const ResetType type) override
Performs a reset of the solver manager specified by the ResetType. This informs the solver manager th...
bool isType(const std::string &name) const
A class for extending the status testing capabilities of Belos via logical combinations.
int getNumIters() const override
Get the iteration count for the most recent call to solve().
Teuchos::RCP< StatusTestResNorm< ScalarType, MV, OP > > convTest_
Convergence stopping criterion.
Class which defines basic traits for the operator type.
MagnitudeType achievedTol_
Tolerance achieved by the last solve() invocation.
Parent class to all Belos exceptions.
Definition: BelosTypes.hpp:28
Default parameters common to most Belos solvers.
Definition: BelosTypes.hpp:251
Teuchos::RCP< LinearProblem< ScalarType, MV, OP > > problem_
The linear problem to solve.
MagnitudeType achievedTol() const override
Tolerance achieved by the last solve() invocation.
Teuchos::ScalarTraits< ScalarType > SCT
Belos header file which uses auto-configuration information to include necessary C++ headers...
This class implements the preconditioned fixed point iteration.
std::string label_
Prefix label for all the timers.
const LinearProblem< ScalarType, MV, OP > & getProblem() const override
Return a reference to the linear problem being solved by this solver manager.
Teuchos::RCP< StatusTest< ScalarType, MV, OP > > sTest_
Aggregate stopping criterion.
MagnitudeType convtol_
Convergence tolerance (read from parameter list).