57   template<
class Scalar, 
class MV, 
class OP>
 
   78       std::string test_type = 
"???";
 
   81       if(Teuchos::isParameterType<std::string>(p, 
"Test Type")) {
 
   82         test_type = Teuchos::get<std::string>(p, 
"Test Type");
 
   84         TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error, 
"Belos::StatusTestFactory::buildStatusTests: The \"Test Type\" parameter is required! Please add it to the definition of the status test to specify the type of status test.");
 
   87       if (test_type == 
"Combo")
 
   88         status_test = this->buildComboTest(p);
 
   89       else if (test_type == 
"MaxIters")
 
   90         status_test = this->buildMaxItersTest(p);
 
   91       else if (test_type == 
"ResidualNorm")
 
   92         status_test = this->buildResidualNormTest(p);
 
   93       else if (test_type == 
"PartialResidualNorm")
 
   94         status_test = this->buildPartialResidualNormTest(p);
 
   96         std::ostringstream msg;
 
   97         msg << 
"Error - the test type \"" << test_type << 
"\" is invalid!";
 
  102       if ( Teuchos::isParameterType<std::string>(p, 
"Tag") ) {
 
  103         (*tagged_tests_)[Teuchos::getParameter<std::string>(p, 
"Tag")] = status_test;
 
  115       else TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error, 
"StatusTestFactory:stringToComboType: The \"Combo Type\" must be \"AND\", \"OR\" or \"SEQ\".");
 
  129       std::string combo_type_string = Teuchos::get<std::string>(p, 
"Combo Type");
 
  130       int number_of_tests           = Teuchos::get<int>(p, 
"Number of Tests");
 
  136       for (
int i=0; i<number_of_tests; ++i) {
 
  137         std::ostringstream subtest_name;
 
  138         subtest_name << 
"Test " << i;
 
  149       int max_iters = Teuchos::get<int>(p, 
"Maximum Iterations");
 
  155       typedef StatusTestGenResNorm<Scalar,MV,OP> res_norm_test;
 
  157       int quorum = p.
get<
int>(
"Deflation Quorum", -1);
 
  158       bool showMaxResNormOnly = p.
get<
bool>(
"Show Maximum Residual Norm Only",
false);
 
  160       std::string residual_type_string = p.
get<std::string>(
"Residual Type", 
"Explicit");
 
  161       std::string residual_norm_string = p.
get<std::string>(
"Residual Norm", 
"TwoNorm");
 
  163       std::string scaling_type_string = p.
get<std::string>(
"Scaling Type", 
"Norm of Initial Residual");
 
  164       std::string scaling_norm_string = p.
get<std::string>(
"Scaling Norm", 
"TwoNorm");
 
  166       typename res_norm_test::ResType residual_type;
 
  167       if     (residual_type_string == 
"Explicit") residual_type = res_norm_test::Explicit;
 
  168       else if(residual_type_string == 
"Implicit") residual_type = res_norm_test::Implicit;
 
  169       else TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error, 
"Belos::StatusTestFactory::buildResidualNormTest: The \"Residual Type\" must be \"Explicit\" or \"Implicit\".");
 
  171       NormType  residual_norm = this->stringToNormType(residual_norm_string);
 
  172       ScaleType scaling_type  = this->stringToScaleType(scaling_type_string);
 
  173       NormType  scaling_norm  = this->stringToNormType(scaling_norm_string);
 
  176       status_test->defineResForm(residual_type, residual_norm);
 
  177       status_test->defineScaleForm(scaling_type, scaling_norm);
 
  182       typedef StatusTestGenResSubNorm<Scalar,MV,OP> res_partialnorm_test;
 
  184       int quorum = p.
get<
int>(
"Deflation Quorum", -1);
 
  185       int subIdx = p.
get<
int>(
"Block index",-1);
 
  186       bool showMaxResNormOnly = p.
get<
bool>(
"Show Maximum Residual Norm Only",
false);
 
  188       TEUCHOS_TEST_FOR_EXCEPTION(subIdx < 0, std::logic_error, 
"Belos::StatusTestFactory::buildPartialResidualNormTest: The \"Block Index\" must not be smaller than 0.");
 
  190       std::string residual_norm_string = p.
get<std::string>(
"Residual Norm", 
"TwoNorm");
 
  192       std::string scaling_type_string = p.
get<std::string>(
"Scaling Type", 
"Norm of Initial Residual");
 
  193       std::string scaling_norm_string = p.
get<std::string>(
"Scaling Norm", 
"TwoNorm");
 
  195       NormType  residual_norm = this->stringToNormType(residual_norm_string);
 
  196       ScaleType scaling_type  = this->stringToScaleType(scaling_type_string);
 
  197       NormType  scaling_norm  = this->stringToNormType(scaling_norm_string);
 
  200       status_test->defineResForm(residual_norm);
 
  201       status_test->defineScaleForm(scaling_type, scaling_norm);
 
  205     static NormType stringToNormType (
const std::string& normType) {
 
  206       const char* validNames[] = {
 
  211       const int numValidNames = 3;
 
  212       const NormType correspondingOutputs[] = {
 
  217       for (
int k = 0; k < numValidNames; ++k)
 
  219         if (normType == validNames[k])
 
  220           return correspondingOutputs[k];
 
  223           "Invalid norm type \"" << normType
 
  227     static ScaleType stringToScaleType (
const std::string& scaleType) {
 
  228       const char* validNames[] = {
 
  229         "Norm of Initial Residual",
 
  230         "Norm of Preconditioned Initial Residual",
 
  232         "Norm of Right-Hand Side",
 
  233         "Norm of Full Initial Residual",
 
  234         "Norm of Full Preconditioned Initial Residual",
 
  235         "Norm of Full Scaled Initial Residual",
 
  236         "Norm of Full Scaled Preconditioned Initial Residual",
 
  239       const int numValidNames = 9;
 
  240       const ScaleType correspondingOutputs[] = {
 
  251       for (
int k = 0; k < numValidNames; ++k)
 
  253         if (scaleType == validNames[k])
 
  254           return correspondingOutputs[k];
 
  257           "Invalid residual scaling type \"" << scaleType
 
ComboType
The test can be either the AND of all the component tests, or the OR of all the component tests...
 
Teuchos::RCP< std::map< std::string, Teuchos::RCP< base_test > > > getTaggedTests() const 
 
StatusTestFactory()
Constructor. 
 
StatusTestMaxIters< Scalar, MV, OP > max_iter_test
 
ScaleType
The type of scaling to use on the residual norm value. 
 
T & get(const std::string &name, T def_value)
 
StatusTest< Scalar, MV, OP > base_test
 
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
 
Teuchos::ScalarTraits< Scalar >::magnitudeType magnitude_type
 
Teuchos::RCP< base_test > buildStatusTests(Teuchos::ParameterList &p) const 
returns a StatusTest set from a parameter list 
 
static StatusTestCombo< Scalar, MV, OP >::ComboType stringToComboType(const std::string &comboString)
 
StatusTestCombo< ScalarType, MV, OP > & addStatusTest(const Teuchos::RCP< StatusTest< ScalarType, MV, OP > > &add_test)
Add another test to this combination. 
 
Belos::StatusTest class for specifying a maximum number of iterations. 
 
A pure virtual class for defining the status tests for the Belos iterative solvers. 
 
Belos::StatusTest for logically combining several status tests. 
 
A Belos::StatusTest class for specifying a maximum number of iterations. 
 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
 
virtual ~StatusTestFactory()
Destructor. 
 
NormType
The type of vector norm to compute. 
 
Belos::StatusTestResNorm for specifying general residual norm stopping criteria. 
 
Belos::StatusTest for specifying an implicit residual norm stopping criteria that checks for loss of ...
 
A class for extending the status testing capabilities of Belos via logical combinations. 
 
ParameterList & sublist(const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
 
StatusTestCombo< Scalar, MV, OP > combo_test
 
Factory to build a set of status tests from a parameter list. 
 
Belos::StatusTestResSubNorm for specifying general residual norm of sub-residual vectors stopping cri...