Belos  Version of the Day
 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:
65  typedef typename Teuchos::ScalarTraits<ScalarType>::magnitudeType MagnitudeType;
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 
170  StatusTestOutputFactory<ScalarType,MV,OP> stoFactory( outputStyle_ );
171  outputTest_ = stoFactory.create( printer_, sTest_, outputFreq_, Passed+Failed+Undefined );
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 
226  Teuchos::RCP<std::ostream> outputStream_;
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 
262  MagnitudeType convtol_;
263 
269  MagnitudeType achievedTol_;
270 
272  int maxIters_;
273 
275  int numIters_;
276 
277  int blockSize_, verbosity_, outputStyle_, outputFreq_;
278  bool showMaxResNormOnly_;
279 
281  std::string label_;
282 
284  Teuchos::RCP<Teuchos::Time> timerSolve_;
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.
bool is_null(const boost::shared_ptr< T > &p)
Belos concrete class for performing fixed point iteration iteration.
FixedPointSolMgr()
Empty constructor for FixedPointSolMgr. This constructor takes no arguments and sets the default valu...
T & get(const std::string &name, T def_value)
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)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
A factory class for generating StatusTestOutput objects.
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.
An implementation of StatusTestResNorm using a family of residual norms.
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.
static std::string name()
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)
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 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.
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...
ReturnType
Whether the Belos solve converged for all linear systems.
Definition: BelosTypes.hpp:123
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< 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
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.
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().
Class which defines basic traits for the operator type.
Parent class to all Belos exceptions.
Definition: BelosTypes.hpp:28
Default parameters common to most Belos solvers.
Definition: BelosTypes.hpp:251
MagnitudeType achievedTol() const override
Tolerance achieved by the last solve() invocation.
Belos header file which uses auto-configuration information to include necessary C++ headers...
This class implements the preconditioned fixed point iteration.
const LinearProblem< ScalarType, MV, OP > & getProblem() const override
Return a reference to the linear problem being solved by this solver manager.
bool is_null() const

Generated on Fri Nov 22 2024 09:23:06 for Belos by doxygen 1.8.5