42 #ifndef BELOS_BLOCK_CG_SOLMGR_HPP 
   43 #define BELOS_BLOCK_CG_SOLMGR_HPP 
   66 #ifdef BELOS_TEUCHOS_TIME_MONITOR 
   69 #if defined(HAVE_TEUCHOSCORE_CXX11) 
   70 #  include <type_traits> 
   71 #endif // defined(HAVE_TEUCHOSCORE_CXX11) 
  116   template<
class ScalarType, 
class MV, 
class OP,
 
  117            const bool lapackSupportsScalarType =
 
  142   template<
class ScalarType, 
class MV, 
class OP>
 
  254       return Teuchos::tuple(timerSolve_);
 
  325     std::string description() 
const override;
 
  363     static constexpr 
int maxIters_default_ = 1000;
 
  364     static constexpr 
bool adaptiveBlockSize_default_ = 
true;
 
  365     static constexpr 
bool showMaxResNormOnly_default_ = 
false;
 
  366     static constexpr 
bool useSingleReduction_default_ = 
false;
 
  367     static constexpr 
int blockSize_default_ = 1;
 
  370     static constexpr 
int outputFreq_default_ = -1;
 
  371     static constexpr 
const char * resNorm_default_ = 
"TwoNorm";
 
  372     static constexpr 
bool foldConvergenceDetectionIntoAllreduce_default_ = 
false;
 
  373     static constexpr 
const char * resScale_default_ = 
"Norm of Initial Residual";
 
  374     static constexpr 
const char * label_default_ = 
"Belos";
 
  375     static constexpr 
const char * orthoType_default_ = 
"ICGS";
 
  376     static constexpr 
bool assertPositiveDefiniteness_default_ = 
true;
 
  377     static constexpr std::ostream * outputStream_default_ = &std::cout;
 
  421 template<
class ScalarType, 
class MV, 
class OP>
 
  423   outputStream_(Teuchos::
rcp(outputStream_default_,false)),
 
  427   maxIters_(maxIters_default_),
 
  429   blockSize_(blockSize_default_),
 
  430   verbosity_(verbosity_default_),
 
  431   outputStyle_(outputStyle_default_),
 
  432   outputFreq_(outputFreq_default_),
 
  433   adaptiveBlockSize_(adaptiveBlockSize_default_),
 
  434   showMaxResNormOnly_(showMaxResNormOnly_default_),
 
  435   useSingleReduction_(useSingleReduction_default_),
 
  436   orthoType_(orthoType_default_),
 
  437   resScale_(resScale_default_),
 
  438   assertPositiveDefiniteness_(assertPositiveDefiniteness_default_),
 
  439   foldConvergenceDetectionIntoAllreduce_(foldConvergenceDetectionIntoAllreduce_default_),
 
  440   label_(label_default_),
 
  446 template<
class ScalarType, 
class MV, 
class OP>
 
  451     outputStream_(Teuchos::
rcp(outputStream_default_,false)),
 
  455   maxIters_(maxIters_default_),
 
  457   blockSize_(blockSize_default_),
 
  458   verbosity_(verbosity_default_),
 
  459   outputStyle_(outputStyle_default_),
 
  460   outputFreq_(outputFreq_default_),
 
  461   adaptiveBlockSize_(adaptiveBlockSize_default_),
 
  462   showMaxResNormOnly_(showMaxResNormOnly_default_),
 
  463   useSingleReduction_(useSingleReduction_default_),
 
  464   orthoType_(orthoType_default_),
 
  465   resScale_(resScale_default_),
 
  466   assertPositiveDefiniteness_(assertPositiveDefiniteness_default_),
 
  467   foldConvergenceDetectionIntoAllreduce_(foldConvergenceDetectionIntoAllreduce_default_),
 
  468   label_(label_default_),
 
  472     "BlockCGSolMgr's constructor requires a nonnull LinearProblem instance.");
 
  482 template<
class ScalarType, 
class MV, 
class OP>
 
  497     maxIters_ = params->
get(
"Maximum Iterations",maxIters_default_);
 
  500     params_->set(
"Maximum Iterations", maxIters_);
 
  502       maxIterTest_->setMaxIters( maxIters_ );
 
  507     blockSize_ = params->
get(
"Block Size",blockSize_default_);
 
  509                        "Belos::BlockCGSolMgr: \"Block Size\" must be strictly positive.");
 
  512     params_->set(
"Block Size", blockSize_);
 
  517     adaptiveBlockSize_ = params->
get(
"Adaptive Block Size",adaptiveBlockSize_default_);
 
  520     params_->set(
"Adaptive Block Size", adaptiveBlockSize_);
 
  525     useSingleReduction_ = params->
get(
"Use Single Reduction", useSingleReduction_default_);
 
  526     if (useSingleReduction_)
 
  527       foldConvergenceDetectionIntoAllreduce_ = params->
get(
"Fold Convergence Detection Into Allreduce",
 
  528                                                            foldConvergenceDetectionIntoAllreduce_default_);
 
  533     std::string tempLabel = params->
get(
"Timer Label", label_default_);
 
  536     if (tempLabel != label_) {
 
  538       params_->set(
"Timer Label", label_);
 
  539       std::string solveLabel = label_ + 
": BlockCGSolMgr total solve time";
 
  540 #ifdef BELOS_TEUCHOS_TIME_MONITOR 
  544         ortho_->setLabel( label_ );
 
  551     if (Teuchos::isParameterType<int>(*params,
"Verbosity")) {
 
  552       verbosity_ = params->
get(
"Verbosity", verbosity_default_);
 
  554       verbosity_ = (int)Teuchos::getParameter<Belos::MsgType>(*params,
"Verbosity");
 
  558     params_->set(
"Verbosity", verbosity_);
 
  560       printer_->setVerbosity(verbosity_);
 
  565     if (Teuchos::isParameterType<int>(*params,
"Output Style")) {
 
  566       outputStyle_ = params->
get(
"Output Style", outputStyle_default_);
 
  568       outputStyle_ = (int)Teuchos::getParameter<Belos::OutputType>(*params,
"Output Style");
 
  572     params_->set(
"Output Style", outputStyle_);
 
  578     outputStream_ = Teuchos::getParameter<Teuchos::RCP<std::ostream> >(*params,
"Output Stream");
 
  581     params_->set(
"Output Stream", outputStream_);
 
  583       printer_->setOStream( outputStream_ );
 
  589       outputFreq_ = params->
get(
"Output Frequency", outputFreq_default_);
 
  593     params_->set(
"Output Frequency", outputFreq_);
 
  595       outputTest_->setOutputFrequency( outputFreq_ );
 
  604   bool changedOrthoType = 
false;
 
  606     std::string tempOrthoType = params->
get(
"Orthogonalization",orthoType_default_);
 
  607     if (tempOrthoType != orthoType_) {
 
  608       orthoType_ = tempOrthoType;
 
  609       changedOrthoType = 
true;
 
  612   params_->set(
"Orthogonalization", orthoType_);
 
  615   if (params->
isParameter(
"Orthogonalization Constant")) {
 
  617       orthoKappa_ = params->
get (
"Orthogonalization Constant",
 
  621       orthoKappa_ = params->
get (
"Orthogonalization Constant",
 
  626     params_->set(
"Orthogonalization Constant",orthoKappa_);
 
  627     if (orthoType_==
"DGKS") {
 
  628       if (orthoKappa_ > 0 && ortho_ != 
Teuchos::null && !changedOrthoType) {
 
  638     if (orthoType_==
"DGKS" && orthoKappa_ > 0) {
 
  639       paramsOrtho->
set (
"depTol", orthoKappa_ );
 
  650   if (params->
isParameter(
"Convergence Tolerance")) {
 
  652       convtol_ = params->
get (
"Convergence Tolerance",
 
  660     params_->set(
"Convergence Tolerance", convtol_);
 
  662       convTest_->setTolerance( convtol_ );
 
  665   if (params->
isParameter(
"Show Maximum Residual Norm Only")) {
 
  666     showMaxResNormOnly_ = Teuchos::getParameter<bool>(*params,
"Show Maximum Residual Norm Only");
 
  669     params_->set(
"Show Maximum Residual Norm Only", showMaxResNormOnly_);
 
  671       convTest_->setShowMaxResNormOnly( showMaxResNormOnly_ );
 
  675   bool newResTest = 
false;
 
  677     std::string tempResScale = resScale_;
 
  678     if (params->
isParameter (
"Implicit Residual Scaling")) {
 
  679       tempResScale = params->
get<std::string> (
"Implicit Residual Scaling");
 
  683     if (resScale_ != tempResScale) {
 
  686       resScale_ = tempResScale;
 
  689       params_->set (
"Implicit Residual Scaling", resScale_);
 
  691       if (! convTest_.is_null ()) {
 
  695             if (params->
isType<std::string> (
"Residual Norm")) {
 
  699           convTest_->defineResForm(StatusTestResNorm_t::Implicit, normType);
 
  702         catch (std::exception& e) {
 
  717   if (convTest_.is_null () || newResTest) {
 
  721       if (params->
isType<std::string> (
"Residual Norm")) {
 
  726     convTest_ = 
rcp (
new StatusTestResNorm_t (convtol_, 1, showMaxResNormOnly_));
 
  727     convTest_->defineResForm(StatusTestResNorm_t::Implicit, normType);
 
  731   if (sTest_.is_null () || newResTest)
 
  732     sTest_ = 
Teuchos::rcp( 
new StatusTestCombo_t( StatusTestCombo_t::OR, maxIterTest_, convTest_ ) );
 
  734   if (outputTest_.is_null () || newResTest) {
 
  742     std::string solverDesc = 
" Block CG ";
 
  743     outputTest_->setSolverDesc( solverDesc );
 
  748   if (params->
isParameter(
"Assert Positive Definiteness")) {
 
  749     assertPositiveDefiniteness_ = Teuchos::getParameter<bool>(*params,
"Assert Positive Definiteness");
 
  750     params_->set(
"Assert Positive Definiteness", assertPositiveDefiniteness_);
 
  755     std::string solveLabel = label_ + 
": BlockCGSolMgr total solve time";
 
  756 #ifdef BELOS_TEUCHOS_TIME_MONITOR 
  766 template<
class ScalarType, 
class MV, 
class OP>
 
  776       "The relative residual tolerance that needs to be achieved by the\n" 
  777       "iterative solver in order for the linear system to be declared converged.");
 
  778     pl->
set(
"Maximum Iterations", static_cast<int>(maxIters_default_),
 
  779       "The maximum number of block iterations allowed for each\n" 
  780       "set of RHS solved.");
 
  781     pl->
set(
"Block Size", static_cast<int>(blockSize_default_),
 
  782       "The number of vectors in each block.");
 
  783     pl->
set(
"Adaptive Block Size", static_cast<bool>(adaptiveBlockSize_default_),
 
  784       "Whether the solver manager should adapt to the block size\n" 
  785       "based on the number of RHS to solve.");
 
  786     pl->
set(
"Verbosity", static_cast<int>(verbosity_default_),
 
  787       "What type(s) of solver information should be outputted\n" 
  788       "to the output stream.");
 
  789     pl->
set(
"Output Style", static_cast<int>(outputStyle_default_),
 
  790       "What style is used for the solver information outputted\n" 
  791       "to the output stream.");
 
  792     pl->
set(
"Output Frequency", static_cast<int>(outputFreq_default_),
 
  793       "How often convergence information should be outputted\n" 
  794       "to the output stream.");
 
  796       "A reference-counted pointer to the output stream where all\n" 
  797       "solver output is sent.");
 
  798     pl->
set(
"Show Maximum Residual Norm Only", static_cast<bool>(showMaxResNormOnly_default_),
 
  799       "When convergence information is printed, only show the maximum\n" 
  800       "relative residual norm when the block size is greater than one.");
 
  801     pl->
set(
"Use Single Reduction", static_cast<bool>(useSingleReduction_default_),
 
  802       "Use single reduction iteration when the block size is one.");
 
  803     pl->
set(
"Implicit Residual Scaling", resScale_default_,
 
  804       "The type of scaling used in the residual convergence test.");
 
  805     pl->
set(
"Timer Label", static_cast<const char *>(label_default_),
 
  806       "The string to use as a prefix for the timer labels.");
 
  807     pl->
set(
"Orthogonalization", static_cast<const char *>(orthoType_default_),
 
  808       "The type of orthogonalization to use: DGKS, ICGS, or IMGS.");
 
  809     pl->
set(
"Assert Positive Definiteness",static_cast<bool>(assertPositiveDefiniteness_default_),
 
  810       "Assert for positivity of p^H*A*p in CG iteration.");
 
  812       "The constant used by DGKS orthogonalization to determine\n" 
  813       "whether another step of classical Gram-Schmidt is necessary.");
 
  814     pl->
set(
"Residual Norm",static_cast<const char *>(resNorm_default_),
 
  815       "Norm used for the convergence check on the residual.");
 
  816     pl->
set(
"Fold Convergence Detection Into Allreduce",static_cast<bool>(foldConvergenceDetectionIntoAllreduce_default_),
 
  817       "Merge the allreduce for convergence detection with the one for CG.\n" 
  818       "This saves one all-reduce, but incurs more computation.");
 
  826 template<
class ScalarType, 
class MV, 
class OP>
 
  830   using Teuchos::rcp_const_cast;
 
  831   using Teuchos::rcp_dynamic_cast;
 
  838     setParameters(Teuchos::parameterList(*getValidParameters()));
 
  846     "Belos::BlockCGSolMgr::solve(): Linear problem is not ready, setProblem() " 
  847     "has not been called.");
 
  851   int numRHS2Solve = MVT::GetNumberVecs( *(problem_->getRHS()) );
 
  852   int numCurrRHS = ( numRHS2Solve < blockSize_) ? numRHS2Solve : blockSize_;
 
  854   std::vector<int> currIdx, currIdx2;
 
  859   if ( adaptiveBlockSize_ ) {
 
  860     blockSize_ = numCurrRHS;
 
  861     currIdx.resize( numCurrRHS  );
 
  862     currIdx2.resize( numCurrRHS  );
 
  863     for (
int i=0; i<numCurrRHS; ++i)
 
  864       { currIdx[i] = startPtr+i; currIdx2[i]=i; }
 
  868     currIdx.resize( blockSize_ );
 
  869     currIdx2.resize( blockSize_ );
 
  870     for (
int i=0; i<numCurrRHS; ++i)
 
  871       { currIdx[i] = startPtr+i; currIdx2[i]=i; }
 
  872     for (
int i=numCurrRHS; i<blockSize_; ++i)
 
  873       { currIdx[i] = -1; currIdx2[i] = i; }
 
  877   problem_->setLSIndex( currIdx );
 
  882   plist.
set(
"Block Size",blockSize_);
 
  885   outputTest_->reset();
 
  889   bool isConverged = 
true;
 
  894   plist.
set(
"Assert Positive Definiteness", assertPositiveDefiniteness_);
 
  896   RCP<CGIteration<ScalarType,MV,OP> > block_cg_iter;
 
  897   if (blockSize_ == 1) {
 
  901     if (useSingleReduction_) {
 
  902       plist.
set(
"Fold Convergence Detection Into Allreduce",
 
  903                 foldConvergenceDetectionIntoAllreduce_);
 
  906                                                     outputTest_, convTest_, plist));
 
  911                                            outputTest_, plist));
 
  922 #ifdef BELOS_TEUCHOS_TIME_MONITOR 
  926     while ( numRHS2Solve > 0 ) {
 
  929       std::vector<int> convRHSIdx;
 
  930       std::vector<int> currRHSIdx( currIdx );
 
  931       currRHSIdx.resize(numCurrRHS);
 
  934       block_cg_iter->resetNumIters();
 
  937       outputTest_->resetNumCalls();
 
  940       RCP<MV> R_0 = MVT::CloneViewNonConst( *(rcp_const_cast<MV>(problem_->getInitResVec())), currIdx );
 
  945       block_cg_iter->initializeCG(newstate);
 
  951           block_cg_iter->iterate();
 
  955           if (convTest_->getStatus() == 
Passed) {
 
  960             std::vector<int> convIdx =
 
  961               rcp_dynamic_cast<conv_test_type>(convTest_)->convIndices();
 
  966             if (convIdx.size() == currRHSIdx.size())
 
  971             problem_->setCurrLS();
 
  976             std::vector<int> unconvIdx(currRHSIdx.size());
 
  977             for (
unsigned int i=0; i<currRHSIdx.size(); ++i) {
 
  979               for (
unsigned int j=0; j<convIdx.size(); ++j) {
 
  980                 if (currRHSIdx[i] == convIdx[j]) {
 
  986                 currIdx2[have] = currIdx2[i];
 
  987                 currRHSIdx[have++] = currRHSIdx[i];
 
  992             currRHSIdx.resize(have);
 
  993             currIdx2.resize(have);
 
  996             problem_->setLSIndex( currRHSIdx );
 
  999             std::vector<MagnitudeType> norms;
 
 1000             R_0 = MVT::CloneCopy( *(block_cg_iter->getNativeResiduals(&norms)),currIdx2 );
 
 1001             for (
int i=0; i<have; ++i) { currIdx2[i] = i; }
 
 1004             block_cg_iter->setBlockSize( have );
 
 1009             block_cg_iter->initializeCG(defstate);
 
 1015           else if (maxIterTest_->getStatus() == 
Passed) {
 
 1016             isConverged = 
false; 
 
 1025               "Belos::BlockCGSolMgr::solve(): Neither the convergence test nor " 
 1026               "the maximum iteration count test passed.  Please report this bug " 
 1027               "to the Belos developers.");
 
 1030         catch (
const std::exception &e) {
 
 1031           std::ostream& err = printer_->stream (
Errors);
 
 1032           err << 
"Error! Caught std::exception in CGIteration::iterate() at " 
 1033               << 
"iteration " << block_cg_iter->getNumIters() << std::endl
 
 1034               << e.what() << std::endl;
 
 1041       problem_->setCurrLS();
 
 1044       startPtr += numCurrRHS;
 
 1045       numRHS2Solve -= numCurrRHS;
 
 1046       if ( numRHS2Solve > 0 ) {
 
 1047         numCurrRHS = ( numRHS2Solve < blockSize_) ? numRHS2Solve : blockSize_;
 
 1049         if ( adaptiveBlockSize_ ) {
 
 1050           blockSize_ = numCurrRHS;
 
 1051           currIdx.resize( numCurrRHS  );
 
 1052           currIdx2.resize( numCurrRHS  );
 
 1053           for (
int i=0; i<numCurrRHS; ++i)
 
 1054             { currIdx[i] = startPtr+i; currIdx2[i] = i; }
 
 1057           currIdx.resize( blockSize_ );
 
 1058           currIdx2.resize( blockSize_ );
 
 1059           for (
int i=0; i<numCurrRHS; ++i)
 
 1060             { currIdx[i] = startPtr+i; currIdx2[i] = i; }
 
 1061           for (
int i=numCurrRHS; i<blockSize_; ++i)
 
 1062             { currIdx[i] = -1; currIdx2[i] = i; }
 
 1065         problem_->setLSIndex( currIdx );
 
 1068         block_cg_iter->setBlockSize( blockSize_ );
 
 1071         currIdx.resize( numRHS2Solve );
 
 1082 #ifdef BELOS_TEUCHOS_TIME_MONITOR 
 1093   numIters_ = maxIterTest_->getNumIters();
 
 1099     const std::vector<MagnitudeType>* pTestValues =
 
 1100       rcp_dynamic_cast<conv_test_type>(convTest_)->getTestValue();
 
 1103       "Belos::BlockCGSolMgr::solve(): The convergence test's getTestValue() " 
 1104       "method returned NULL.  Please report this bug to the Belos developers.");
 
 1107       "Belos::BlockCGSolMgr::solve(): The convergence test's getTestValue() " 
 1108       "method returned a vector of length zero.  Please report this bug to the " 
 1109       "Belos developers.");
 
 1114     achievedTol_ = *std::max_element (pTestValues->begin(), pTestValues->end());
 
 1124 template<
class ScalarType, 
class MV, 
class OP>
 
 1127   std::ostringstream oss;
 
 1130   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. 
 
Teuchos::RCP< const MV > R
The current residual. 
 
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::ScalarTraits< ScalarType > SCT
 
This class implements the preconditioned Conjugate Gradient (CG) iteration. 
 
T & get(ParameterList &l, const std::string &name)
 
Structure to contain pointers to CGIteration state variables. 
 
Belos concrete class for performing the conjugate-gradient (CG) iteration. 
 
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
 
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. 
 
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...
 
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_
 
Details::SolverManagerRequiresLapack< ScalarType, MV, OP, requiresLapack > base_type
 
bool isParameter(const std::string &name) const 
 
virtual ~BlockCGSolMgr()
Destructor. 
 
OperatorTraits< ScalarType, MV, OP > OPT
 
MultiVecTraits< ScalarType, MV > MVT
 
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. 
 
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. 
 
BlockCGSolMgrOrthoFailure is thrown when the orthogonalization manager is unable to generate orthonor...
 
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...
 
Teuchos::ScalarTraits< ScalarType >::magnitudeType MagnitudeType
 
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 
 
BlockCGSolMgrOrthoFailure(const std::string &what_arg)
 
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. 
 
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. 
 
Teuchos::ScalarTraits< MagnitudeType > MT
 
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.