10 #ifndef BELOS_BLOCK_CG_SOLMGR_HPP
11 #define BELOS_BLOCK_CG_SOLMGR_HPP
34 #ifdef BELOS_TEUCHOS_TIME_MONITOR
37 #if defined(HAVE_TEUCHOSCORE_CXX11)
38 # include <type_traits>
39 #endif // defined(HAVE_TEUCHOSCORE_CXX11)
76 template<
class ScalarType,
class MV,
class OP,
77 const bool lapackSupportsScalarType =
101 template<
class ScalarType,
class MV,
class OP>
213 return Teuchos::tuple(timerSolve_);
284 std::string description()
const override;
322 static constexpr
int maxIters_default_ = 1000;
323 static constexpr
bool adaptiveBlockSize_default_ =
true;
324 static constexpr
bool showMaxResNormOnly_default_ =
false;
325 static constexpr
bool useSingleReduction_default_ =
false;
326 static constexpr
int blockSize_default_ = 1;
329 static constexpr
int outputFreq_default_ = -1;
330 static constexpr
const char * resNorm_default_ =
"TwoNorm";
331 static constexpr
bool foldConvergenceDetectionIntoAllreduce_default_ =
false;
332 static constexpr
const char * resScale_default_ =
"Norm of Initial Residual";
333 static constexpr
const char * label_default_ =
"Belos";
334 static constexpr
const char * orthoType_default_ =
"ICGS";
335 static constexpr
bool assertPositiveDefiniteness_default_ =
true;
381 template<
class ScalarType,
class MV,
class OP>
383 outputStream_(Teuchos::rcpFromRef(std::cout)),
387 maxIters_(maxIters_default_),
389 blockSize_(blockSize_default_),
390 verbosity_(verbosity_default_),
391 outputStyle_(outputStyle_default_),
392 outputFreq_(outputFreq_default_),
393 adaptiveBlockSize_(adaptiveBlockSize_default_),
394 showMaxResNormOnly_(showMaxResNormOnly_default_),
395 useSingleReduction_(useSingleReduction_default_),
396 orthoType_(orthoType_default_),
397 resScale_(resScale_default_),
398 assertPositiveDefiniteness_(assertPositiveDefiniteness_default_),
399 foldConvergenceDetectionIntoAllreduce_(foldConvergenceDetectionIntoAllreduce_default_),
400 label_(label_default_),
406 template<
class ScalarType,
class MV,
class OP>
411 outputStream_(Teuchos::rcpFromRef(std::cout)),
415 maxIters_(maxIters_default_),
417 blockSize_(blockSize_default_),
418 verbosity_(verbosity_default_),
419 outputStyle_(outputStyle_default_),
420 outputFreq_(outputFreq_default_),
421 adaptiveBlockSize_(adaptiveBlockSize_default_),
422 showMaxResNormOnly_(showMaxResNormOnly_default_),
423 useSingleReduction_(useSingleReduction_default_),
424 orthoType_(orthoType_default_),
425 resScale_(resScale_default_),
426 assertPositiveDefiniteness_(assertPositiveDefiniteness_default_),
427 foldConvergenceDetectionIntoAllreduce_(foldConvergenceDetectionIntoAllreduce_default_),
428 label_(label_default_),
432 "BlockCGSolMgr's constructor requires a nonnull LinearProblem instance.");
442 template<
class ScalarType,
class MV,
class OP>
457 maxIters_ = params->
get(
"Maximum Iterations",maxIters_default_);
460 params_->set(
"Maximum Iterations", maxIters_);
462 maxIterTest_->setMaxIters( maxIters_ );
467 blockSize_ = params->
get(
"Block Size",blockSize_default_);
469 "Belos::BlockCGSolMgr: \"Block Size\" must be strictly positive.");
472 params_->set(
"Block Size", blockSize_);
477 adaptiveBlockSize_ = params->
get(
"Adaptive Block Size",adaptiveBlockSize_default_);
480 params_->set(
"Adaptive Block Size", adaptiveBlockSize_);
485 useSingleReduction_ = params->
get(
"Use Single Reduction", useSingleReduction_default_);
488 if (params->
isParameter(
"Fold Convergence Detection Into Allreduce")) {
489 foldConvergenceDetectionIntoAllreduce_ = params->
get(
"Fold Convergence Detection Into Allreduce",
490 foldConvergenceDetectionIntoAllreduce_default_);
495 std::string tempLabel = params->
get(
"Timer Label", label_default_);
498 if (tempLabel != label_) {
500 params_->set(
"Timer Label", label_);
501 std::string solveLabel = label_ +
": BlockCGSolMgr total solve time";
502 #ifdef BELOS_TEUCHOS_TIME_MONITOR
506 ortho_->setLabel( label_ );
513 if (Teuchos::isParameterType<int>(*params,
"Verbosity")) {
514 verbosity_ = params->
get(
"Verbosity", verbosity_default_);
516 verbosity_ = (int)Teuchos::getParameter<Belos::MsgType>(*params,
"Verbosity");
520 params_->set(
"Verbosity", verbosity_);
522 printer_->setVerbosity(verbosity_);
527 if (Teuchos::isParameterType<int>(*params,
"Output Style")) {
528 outputStyle_ = params->
get(
"Output Style", outputStyle_default_);
530 outputStyle_ = (int)Teuchos::getParameter<Belos::OutputType>(*params,
"Output Style");
534 params_->set(
"Output Style", outputStyle_);
540 outputStream_ = Teuchos::getParameter<Teuchos::RCP<std::ostream> >(*params,
"Output Stream");
543 params_->set(
"Output Stream", outputStream_);
545 printer_->setOStream( outputStream_ );
551 outputFreq_ = params->
get(
"Output Frequency", outputFreq_default_);
555 params_->set(
"Output Frequency", outputFreq_);
557 outputTest_->setOutputFrequency( outputFreq_ );
566 bool changedOrthoType =
false;
568 std::string tempOrthoType = params->
get(
"Orthogonalization",orthoType_default_);
569 if (tempOrthoType != orthoType_) {
570 orthoType_ = tempOrthoType;
571 changedOrthoType =
true;
574 params_->set(
"Orthogonalization", orthoType_);
577 if (params->
isParameter(
"Orthogonalization Constant")) {
579 orthoKappa_ = params->
get (
"Orthogonalization Constant",
583 orthoKappa_ = params->
get (
"Orthogonalization Constant",
588 params_->set(
"Orthogonalization Constant",orthoKappa_);
589 if (orthoType_==
"DGKS") {
590 if (orthoKappa_ > 0 && ortho_ !=
Teuchos::null && !changedOrthoType) {
600 if (orthoType_==
"DGKS" && orthoKappa_ > 0) {
602 paramsOrtho->
set (
"depTol", orthoKappa_ );
613 if (params->
isParameter(
"Convergence Tolerance")) {
615 convtol_ = params->
get (
"Convergence Tolerance",
623 params_->set(
"Convergence Tolerance", convtol_);
625 convTest_->setTolerance( convtol_ );
628 if (params->
isParameter(
"Show Maximum Residual Norm Only")) {
629 showMaxResNormOnly_ = Teuchos::getParameter<bool>(*params,
"Show Maximum Residual Norm Only");
632 params_->set(
"Show Maximum Residual Norm Only", showMaxResNormOnly_);
634 convTest_->setShowMaxResNormOnly( showMaxResNormOnly_ );
638 bool newResTest =
false;
640 std::string tempResScale = resScale_;
641 if (params->
isParameter (
"Implicit Residual Scaling")) {
642 tempResScale = params->
get<std::string> (
"Implicit Residual Scaling");
646 if (resScale_ != tempResScale) {
649 resScale_ = tempResScale;
652 params_->set (
"Implicit Residual Scaling", resScale_);
654 if (! convTest_.is_null ()) {
658 if (params->
isType<std::string> (
"Residual Norm")) {
662 convTest_->defineResForm(StatusTestResNorm_t::Implicit, normType);
665 catch (std::exception& e) {
680 if (convTest_.is_null () || newResTest) {
684 if (params->
isType<std::string> (
"Residual Norm")) {
689 convTest_ =
rcp (
new StatusTestResNorm_t (convtol_, 1, showMaxResNormOnly_));
690 convTest_->defineResForm(StatusTestResNorm_t::Implicit, normType);
694 if (sTest_.is_null () || newResTest)
695 sTest_ =
Teuchos::rcp(
new StatusTestCombo_t( StatusTestCombo_t::OR, maxIterTest_, convTest_ ) );
697 if (outputTest_.is_null () || newResTest) {
705 std::string solverDesc =
" Block CG ";
706 outputTest_->setSolverDesc( solverDesc );
711 if (params->
isParameter(
"Assert Positive Definiteness")) {
712 assertPositiveDefiniteness_ = Teuchos::getParameter<bool>(*params,
"Assert Positive Definiteness");
713 params_->set(
"Assert Positive Definiteness", assertPositiveDefiniteness_);
718 std::string solveLabel = label_ +
": BlockCGSolMgr total solve time";
719 #ifdef BELOS_TEUCHOS_TIME_MONITOR
729 template<
class ScalarType,
class MV,
class OP>
739 "The relative residual tolerance that needs to be achieved by the\n"
740 "iterative solver in order for the linear system to be declared converged.");
741 pl->
set(
"Maximum Iterations", static_cast<int>(maxIters_default_),
742 "The maximum number of block iterations allowed for each\n"
743 "set of RHS solved.");
744 pl->
set(
"Block Size", static_cast<int>(blockSize_default_),
745 "The number of vectors in each block.");
746 pl->
set(
"Adaptive Block Size", static_cast<bool>(adaptiveBlockSize_default_),
747 "Whether the solver manager should adapt to the block size\n"
748 "based on the number of RHS to solve.");
749 pl->
set(
"Verbosity", static_cast<int>(verbosity_default_),
750 "What type(s) of solver information should be outputted\n"
751 "to the output stream.");
752 pl->
set(
"Output Style", static_cast<int>(outputStyle_default_),
753 "What style is used for the solver information outputted\n"
754 "to the output stream.");
755 pl->
set(
"Output Frequency", static_cast<int>(outputFreq_default_),
756 "How often convergence information should be outputted\n"
757 "to the output stream.");
758 pl->
set(
"Output Stream", Teuchos::rcpFromRef(std::cout),
759 "A reference-counted pointer to the output stream where all\n"
760 "solver output is sent.");
761 pl->
set(
"Show Maximum Residual Norm Only", static_cast<bool>(showMaxResNormOnly_default_),
762 "When convergence information is printed, only show the maximum\n"
763 "relative residual norm when the block size is greater than one.");
764 pl->
set(
"Use Single Reduction", static_cast<bool>(useSingleReduction_default_),
765 "Use single reduction iteration when the block size is one.");
766 pl->
set(
"Implicit Residual Scaling", resScale_default_,
767 "The type of scaling used in the residual convergence test.");
768 pl->
set(
"Timer Label", static_cast<const char *>(label_default_),
769 "The string to use as a prefix for the timer labels.");
770 pl->
set(
"Orthogonalization", static_cast<const char *>(orthoType_default_),
771 "The type of orthogonalization to use: DGKS, ICGS, or IMGS.");
772 pl->
set(
"Assert Positive Definiteness",static_cast<bool>(assertPositiveDefiniteness_default_),
773 "Assert for positivity of p^H*A*p in CG iteration.");
775 "The constant used by DGKS orthogonalization to determine\n"
776 "whether another step of classical Gram-Schmidt is necessary.");
777 pl->
set(
"Residual Norm",static_cast<const char *>(resNorm_default_),
778 "Norm used for the convergence check on the residual.");
779 pl->
set(
"Fold Convergence Detection Into Allreduce",static_cast<bool>(foldConvergenceDetectionIntoAllreduce_default_),
780 "Merge the allreduce for convergence detection with the one for CG.\n"
781 "This saves one all-reduce, but incurs more computation.");
789 template<
class ScalarType,
class MV,
class OP>
793 using Teuchos::rcp_const_cast;
794 using Teuchos::rcp_dynamic_cast;
801 setParameters(Teuchos::parameterList(*getValidParameters()));
808 "Belos::BlockCGSolMgr::solve(): Linear problem is not ready, setProblem() "
809 "has not been called.");
813 int numRHS2Solve = MVT::GetNumberVecs( *(problem_->getRHS()) );
814 int numCurrRHS = ( numRHS2Solve < blockSize_) ? numRHS2Solve : blockSize_;
816 std::vector<int> currIdx, currIdx2;
821 if ( adaptiveBlockSize_ ) {
822 blockSize_ = numCurrRHS;
823 currIdx.resize( numCurrRHS );
824 currIdx2.resize( numCurrRHS );
825 for (
int i=0; i<numCurrRHS; ++i)
826 { currIdx[i] = startPtr+i; currIdx2[i]=i; }
830 currIdx.resize( blockSize_ );
831 currIdx2.resize( blockSize_ );
832 for (
int i=0; i<numCurrRHS; ++i)
833 { currIdx[i] = startPtr+i; currIdx2[i]=i; }
834 for (
int i=numCurrRHS; i<blockSize_; ++i)
835 { currIdx[i] = -1; currIdx2[i] = i; }
839 problem_->setLSIndex( currIdx );
844 plist.
set(
"Block Size",blockSize_);
847 outputTest_->reset();
851 bool isConverged =
true;
856 plist.
set(
"Assert Positive Definiteness", assertPositiveDefiniteness_);
858 RCP<CGIteration<ScalarType,MV,OP> > block_cg_iter;
859 if (blockSize_ == 1) {
863 plist.
set(
"Fold Convergence Detection Into Allreduce",
864 foldConvergenceDetectionIntoAllreduce_);
865 if (useSingleReduction_) {
868 outputTest_, convTest_, plist));
876 outputTest_, convTest_, plist));
891 #ifdef BELOS_TEUCHOS_TIME_MONITOR
895 while ( numRHS2Solve > 0 ) {
898 std::vector<int> convRHSIdx;
899 std::vector<int> currRHSIdx( currIdx );
900 currRHSIdx.resize(numCurrRHS);
903 block_cg_iter->resetNumIters();
906 outputTest_->resetNumCalls();
909 RCP<MV> R_0 = MVT::CloneViewNonConst( *(rcp_const_cast<MV>(problem_->getInitResVec())), currIdx );
912 block_cg_iter->initializeCG(state_, R_0);
918 block_cg_iter->iterate();
922 if (convTest_->getStatus() ==
Passed) {
927 std::vector<int> convIdx =
928 rcp_dynamic_cast<conv_test_type>(convTest_)->convIndices();
933 if (convIdx.size() == currRHSIdx.size())
938 problem_->setCurrLS();
943 std::vector<int> unconvIdx(currRHSIdx.size());
944 for (
unsigned int i=0; i<currRHSIdx.size(); ++i) {
946 for (
unsigned int j=0; j<convIdx.size(); ++j) {
947 if (currRHSIdx[i] == convIdx[j]) {
953 currIdx2[have] = currIdx2[i];
954 currRHSIdx[have++] = currRHSIdx[i];
959 currRHSIdx.resize(have);
960 currIdx2.resize(have);
963 problem_->setLSIndex( currRHSIdx );
966 std::vector<MagnitudeType> norms;
967 R_0 = MVT::CloneCopy( *(block_cg_iter->getNativeResiduals(&norms)),currIdx2 );
968 for (
int i=0; i<have; ++i) { currIdx2[i] = i; }
971 block_cg_iter->setBlockSize( have );
974 block_cg_iter->initializeCG(state_, R_0);
980 else if (maxIterTest_->getStatus() ==
Passed) {
990 "Belos::BlockCGSolMgr::solve(): Neither the convergence test nor "
991 "the maximum iteration count test passed. Please report this bug "
992 "to the Belos developers.");
997 achievedTol_ = MT::one();
999 MVT::MvInit( *X, SCT::zero() );
1000 printer_->stream(
Warnings) <<
"Belos::BlockCGSolMgr::solve(): Warning! NaN has been detected!"
1004 catch (
const std::exception &e) {
1005 std::ostream& err = printer_->stream (
Errors);
1006 err <<
"Error! Caught std::exception in CGIteration::iterate() at "
1007 <<
"iteration " << block_cg_iter->getNumIters() << std::endl
1008 << e.what() << std::endl;
1015 problem_->setCurrLS();
1018 startPtr += numCurrRHS;
1019 numRHS2Solve -= numCurrRHS;
1020 if ( numRHS2Solve > 0 ) {
1021 numCurrRHS = ( numRHS2Solve < blockSize_) ? numRHS2Solve : blockSize_;
1023 if ( adaptiveBlockSize_ ) {
1024 blockSize_ = numCurrRHS;
1025 currIdx.resize( numCurrRHS );
1026 currIdx2.resize( numCurrRHS );
1027 for (
int i=0; i<numCurrRHS; ++i)
1028 { currIdx[i] = startPtr+i; currIdx2[i] = i; }
1031 currIdx.resize( blockSize_ );
1032 currIdx2.resize( blockSize_ );
1033 for (
int i=0; i<numCurrRHS; ++i)
1034 { currIdx[i] = startPtr+i; currIdx2[i] = i; }
1035 for (
int i=numCurrRHS; i<blockSize_; ++i)
1036 { currIdx[i] = -1; currIdx2[i] = i; }
1039 problem_->setLSIndex( currIdx );
1042 block_cg_iter->setBlockSize( blockSize_ );
1045 currIdx.resize( numRHS2Solve );
1056 #ifdef BELOS_TEUCHOS_TIME_MONITOR
1067 numIters_ = maxIterTest_->getNumIters();
1073 const std::vector<MagnitudeType>* pTestValues =
1074 rcp_dynamic_cast<conv_test_type>(convTest_)->getTestValue();
1077 "Belos::BlockCGSolMgr::solve(): The convergence test's getTestValue() "
1078 "method returned NULL. Please report this bug to the Belos developers.");
1081 "Belos::BlockCGSolMgr::solve(): The convergence test's getTestValue() "
1082 "method returned a vector of length zero. Please report this bug to the "
1083 "Belos developers.");
1088 achievedTol_ = *std::max_element (pTestValues->begin(), pTestValues->end());
1098 template<
class ScalarType,
class MV,
class OP>
1101 std::ostringstream oss;
1104 oss <<
"Ortho Type='"<<orthoType_<<
"\', Block Size=" << blockSize_;
static const double orthoKappa
DGKS orthogonalization constant.
ScaleType convertStringToScaleType(const std::string &scaleType)
Convert the given string to its ScaleType enum value.
Structure to contain pointers to BlockCGIteration state variables.
bool isLOADetected() const override
Return whether a loss of accuracy was detected by this solver during the most current solve...
Collection of types and exceptions used within the Belos solvers.
Teuchos::Array< Teuchos::RCP< Teuchos::Time > > getTimers() const
Return the timers for this object.
Belos's basic output manager for sending information of select verbosity levels to the appropriate ou...
int maxIters_
Maximum iteration count (read from parameter list).
Class which manages the output and verbosity of the Belos solvers.
bool is_null(const boost::shared_ptr< T > &p)
bool isSet_
Whether or not the parameters have been set (via setParameters()).
Teuchos::RCP< Teuchos::ParameterList > params_
Current parameter list.
Teuchos::RCP< StatusTestOutput< ScalarType, MV, OP > > outputTest_
Output "status test" that controls all the other status tests.
ScaleType
The type of scaling to use on the residual norm value.
Teuchos::RCP< SolverManager< ScalarType, MV, OP > > clone() const override
clone for Inverted Injection (DII)
Teuchos::RCP< CGIterationStateBase< ScalarType, MV > > state_
This class implements the preconditioned Conjugate Gradient (CG) iteration.
T & get(ParameterList &l, const std::string &name)
Belos concrete class for performing the conjugate-gradient (CG) iteration.
bool is_null(const std::shared_ptr< T > &p)
Structure to contain pointers to CGSingleRedIteration state variables.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
A factory class for generating StatusTestOutput objects.
Belos concrete class for performing the block conjugate-gradient (CG) iteration.
An implementation of StatusTestResNorm using a family of residual norms.
void setProblem(const Teuchos::RCP< LinearProblem< ScalarType, MV, OP > > &problem) override
Set the linear problem that needs to be solved.
std::string label_
Prefix label for all the timers.
The Belos::BlockCGSolMgr provides a powerful and fully-featured solver manager over the CG and BlockC...
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.
Belos::StatusTest class for specifying a maximum number of iterations.
static std::string name()
BlockCGSolMgrLinearProblemFailure(const std::string &what_arg)
Teuchos::RCP< const Teuchos::ParameterList > getCurrentParameters() const override
Get a parameter list containing the current parameters for this object.
BlockCGSolMgrLinearProblemFailure is thrown when the linear problem is not setup (i.e.
A factory class for generating StatusTestOutput objects.
Teuchos::RCP< MatOrthoManager< ScalarType, MV, OP > > ortho_
Orthogonalization manager.
BlockCGSolMgr(const Teuchos::RCP< LinearProblem< ScalarType, MV, OP > > &problem, const Teuchos::RCP< Teuchos::ParameterList > &pl)
Teuchos::RCP< StatusTestMaxIters< ScalarType, MV, OP > > maxIterTest_
Maximum iteration count stopping criterion.
Traits class which defines basic operations on multivectors.
Belos::StatusTest for logically combining several status tests.
Teuchos::RCP< StatusTest< ScalarType, MV, OP > > sTest_
Aggregate stopping criterion.
bool assertPositiveDefiniteness_
virtual ~BlockCGSolMgr()=default
bool isParameter(const std::string &name) const
A Belos::StatusTest class for specifying a maximum number of iterations.
ResetType
How to reset the solver.
void reset(const ResetType type) override
Performs a reset of the solver manager specified by the ResetType. This informs the solver manager th...
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. ...
Belos concrete class for performing a single-reduction conjugate-gradient (CG) iteration.
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)
NormType convertStringToNormType(const std::string &normType)
Convert the given string to its NormType enum value.
typename Teuchos::ScalarTraits< ScalarType >::magnitudeType MagnitudeType
A linear system to solve, and its associated information.
Class which describes the linear problem to be solved by the iterative solver.
MagnitudeType achievedTol_
Tolerance achieved by the last solve() invocation.
MagnitudeType achievedTol() const override
Tolerance achieved by the last solve() invocation.
Type traits class that says whether Teuchos::LAPACK has a valid implementation for the given ScalarTy...
ReturnType
Whether the Belos solve converged for all linear systems.
Teuchos::RCP< StatusTestGenResNorm< ScalarType, MV, OP > > convTest_
Convergence stopping criterion.
int getNumIters() const override
Get the iteration count for the most recent call to solve().
Teuchos::RCP< LinearProblem< ScalarType, MV, OP > > problem_
The linear problem to solve.
void validateParameters(ParameterList const &validParamList, int const depth=1000, EValidateUsed const validateUsed=VALIDATE_USED_ENABLED, EValidateDefaults const validateDefaults=VALIDATE_DEFAULTS_ENABLED) const
NormType
The type of vector norm to compute.
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 CGIteration state variables.
Belos::StatusTestResNorm for specifying general residual norm stopping criteria.
MagnitudeType convtol_
Convergence tolerance (read from parameter list).
bool isType(const std::string &name) const
Teuchos::RCP< Teuchos::Time > timerSolve_
Solve timer.
An implementation of the Belos::MatOrthoManager that performs orthogonalization using (potentially) m...
A class for extending the status testing capabilities of Belos via logical combinations.
const LinearProblem< ScalarType, MV, OP > & getProblem() const override
Return a reference to the linear problem being solved by this solver manager.
Class which defines basic traits for the operator type.
bool foldConvergenceDetectionIntoAllreduce_
Parent class to all Belos exceptions.
Default parameters common to most Belos solvers.
This class implements the preconditioned single-reduction Conjugate Gradient (CG) iteration...
Teuchos::RCP< OutputManager< ScalarType > > printer_
Output manager, that handles printing of different kinds of messages.
Base class for Belos::SolverManager subclasses which normally can only compile with ScalarType types ...
Belos header file which uses auto-configuration information to include necessary C++ headers...
int numIters_
Number of iterations taken by the last solve() invocation.
static const bool requiresLapack
Teuchos::RCP< std::ostream > outputStream_
Output stream to which the output manager prints.
MagnitudeType orthoKappa_
Orthogonalization parameter (read from parameter list).
Stub implementation of BlockCGIter, for ScalarType types for which Teuchos::LAPACK does NOT have a va...
Teuchos::RCP< Belos::MatOrthoManager< Scalar, MV, OP > > makeMatOrthoManager(const std::string &ortho, const Teuchos::RCP< const OP > &M, const Teuchos::RCP< OutputManager< Scalar > > &, const std::string &label, const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Return an instance of the specified MatOrthoManager subclass.