42 #ifndef THYRA_SOLVE_SUPPORT_TYPES_HPP 43 #define THYRA_SOLVE_SUPPORT_TYPES_HPP 45 #include "Thyra_OperatorVectorTypes.hpp" 46 #include "Teuchos_ParameterList.hpp" 47 #include "Teuchos_FancyOStream.hpp" 48 #include "Teuchos_Describable.hpp" 81 switch(solveMeasureNormType) {
83 return "SOLVE_MEASURE_ONE";
85 return "SOLVE_MEASURE_NORM_RESIDUAL";
87 return "SOLVE_MEASURE_NORM_SOLUTION";
89 return "SOLVE_MEASURE_NORM_INIT_RESIDUAL";
91 return "SOLVE_MEASURE_NORM_RHS";
93 TEUCHOS_TEST_FOR_EXCEPT(
true);
160 template<
class Scalar>
175 typename ScalarTraits<Scalar>::magnitudeType
180 "Error, the vector v="<<v.description()<<
" is not compatiable with" 181 " *this="<<this->description()<<
"!");
200 virtual typename ScalarTraits<Scalar>::magnitudeType
311 template <
class Scalar>
314 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType
ScalarMag;
343 const RCP<ParameterList> &extraParameters_in = Teuchos::null,
360 template<
class Scalar>
361 std::ostream& operator<<(std::ostream &out, const SolveCriteria<Scalar> &solveCriteria)
363 out << typeName(solveCriteria) <<
"{";
364 out <<
"solveMeasureType="<<solveCriteria.solveMeasureType;
365 out <<
", requestedTol="<<solveCriteria.requestedTol;
366 if (nonnull(solveCriteria.extraParameters)) {
367 out <<
", extraParameters="<<solveCriteria.extraParameters;
369 if (nonnull(solveCriteria.numeratorReductionFunc)) {
370 out <<
", numeratorReductionFunc="<<solveCriteria.numeratorReductionFunc->description();
372 if (nonnull(solveCriteria.denominatorReductionFunc)) {
373 out <<
", denominatorReductionFunc="<<solveCriteria.denominatorReductionFunc->description();
406 switch(solveStatus) {
410 default: TEUCHOS_TEST_FOR_EXCEPT(
true);
422 template <
class Scalar>
425 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType
ScalarMag;
448 std::ostringstream oss; oss <<
achievedTol;
return oss.str();
457 template <
class Scalar>
458 std::ostream& operator<<( std::ostream& out_arg, const SolveStatus<Scalar> &solveStatus )
460 RCP<Teuchos::FancyOStream>
461 out = Teuchos::getFancyOStream(Teuchos::rcp(&out_arg,
false));
462 Teuchos::OSTab tab(out);
464 <<
"solveStatus = " <<
toString(solveStatus.solveStatus) << std::endl
467 if (solveStatus.message.length()) {
468 Teuchos::OSTab tab2(out);
469 *out <<
"\n" << solveStatus.message <<
"\n";
471 *out <<
"extraParameters:";
472 if(solveStatus.extraParameters.get()) {
474 Teuchos::OSTab tab3(out);
475 solveStatus.extraParameters->print(*out, 10,
true);
511 template <
class Scalar>
536 template <
class Scalar>
549 overallSolveStatus->message = solveStatus.
message;
558 switch(overallSolveStatus->solveStatus) {
566 overallSolveStatus->message = solveStatus.
message;
570 TEUCHOS_TEST_FOR_EXCEPT(
true);
578 if(overallSolveStatus->message ==
"")
579 overallSolveStatus->message = solveStatus.
message;
583 TEUCHOS_TEST_FOR_EXCEPT(
true);
586 if( solveStatus.
achievedTol > overallSolveStatus->achievedTol ) {
587 overallSolveStatus->achievedTol = solveStatus.
achievedTol;
590 if(overallSolveStatus->message ==
"")
591 overallSolveStatus->message = solveStatus.
message;
593 if(overallSolveStatus->extraParameters.get()==NULL)
601 #endif // THYRA_SOLVE_SUPPORT_TYPES_HPP const std::string toString(const ESolveStatus solveStatus)
bool useDefault() const
Return if this is a default solve measure (default constructed).
How the output LOWSB object will be useded for solves in unspecified.
SolveCriteria()
Default construction to use default solve criteria.
Norm of the current solution vector (i.e. ||x||)
ScalarMag requestedTol
The requested solve tolerance (what the client would like to see). Only significant if !this->solveMe...
virtual ScalarTraits< Scalar >::magnitudeType reduceImpl(const VectorBase< Scalar > &v) const =0
Thrown if vector spaces are incompatible.
The output LOWSB object will only be used for forward solves.
std::string message
A simple one-line message (i.e. no newlines) returned from the solver.
The output LOWSB object will used for forward and transpose solves.
The final solution status is unknown but he solve did not totally fail.
bool operator()(ESolveMeasureNormType numerator_in, ESolveMeasureNormType denominator_in) const
Return if (numerator,denominataor) matches this.
void accumulateSolveStatus(const SolveCriteria< Scalar >, const SolveStatus< Scalar > &solveStatus, const Ptr< SolveStatus< Scalar > > &overallSolveStatus)
Accumulate solve status objects for solving a block of RHSs is smaller sub-blocks.
ScalarTraits< Scalar >::magnitudeType reduce(const VectorBase< Scalar > &v) const
Compute the reduction over a vector.
void accumulateSolveStatusInit(const Ptr< SolveStatus< Scalar > > &overallSolveStatus)
Initial overallSolveStatus before calling accumulateSolveStatus().
SolveCriteria(SolveMeasureType solveMeasureType_in, ScalarMag requestedTol_in, const RCP< ParameterList > &extraParameters_in=Teuchos::null, const RCP< ReductionFunctional< Scalar > > &numeratorReductionFunc_in=Teuchos::null, const RCP< ReductionFunctional< Scalar > > &denominatorReductionFunc_in=Teuchos::null)
Construct with a specified solve criteria.
SolveMeasureType(ESolveMeasureNormType _numerator, ESolveMeasureNormType _denominator)
ESolveMeasureNormType numerator
std::ostream & operator<<(std::ostream &out, const SolveMeasureType &solveMeasureType)
Output operator.
ESolveMeasureNormType
Type of solve measure norm.
The output LOWSB object will only be used for transpose solves.
bool contains(ESolveMeasureNormType measure) const
bool isCompatible(const VectorBase< Scalar > &v) const
Returns true if v is compatible with *this.
ESolveStatus
Solution status.
static ScalarMag unknownTolerance()
Abstract interface for finite-dimensional dense vectors.
Simple struct for the return status from a solve.
Norm of the right-hand side (i.e. ||b||)
ESupportSolveUse
Enum that specifies how a LinearOpWithSolveBase object will be used for solves after it is constructe...
ESolveStatus solveStatus
The return status of the solve.
Teuchos::ScalarTraits< Scalar >::magnitudeType ScalarMag
static ScalarMag unspecifiedTolerance()
No solve measure (i.e. same as 1.0)
ScalarMag achievedTol
The maximum final tolerance actually achieved by the (block) linear solve. A value of unknownToleranc...
static std::string achievedTolToString(const ScalarMag &achievedTol)
Output the achieveTol field.
RCP< ParameterList > extraParameters
Any extra control parameters (e.g. max iterations).
virtual bool isCompatibleImpl(const VectorBase< Scalar > &v) const =0
RCP< const ReductionFunctional< Scalar > > numeratorReductionFunc
Reduction function to be used in place of the natural norm of the numerator.
The input preconditioner should just be applied as an operator.
A general reduction functional to be used in specialized solve convergence criteria.
RCP< const ReductionFunctional< Scalar > > denominatorReductionFunc
Reduction function to be used in place of the natural norm of the numerator.
EPreconditionerInputType
Enum defining the status of a preconditioner object.
RCP< ParameterList > extraParameters
Any extra status parameters. Note that the contents of this parameter list is totally undefined...
SolveMeasureType solveMeasureType
The type of solve tolerance requested as given in this->requestedTol.
The requested solution criteria has likely been achieved.
Exception type thrown on an catastrophic solve failure.
Teuchos::ScalarTraits< Scalar >::magnitudeType ScalarMag
The requested solution criteria has likely not been achieved.
Simple struct that defines the requested solution criteria for a solve.
The input preconditioner should viewed as a matrix to be factored then backsolved as a preconditioner...
ESolveMeasureNormType denominator
Norm of the initial residual vector given a non-zero guess (i.e. ||A*xo-b||)
Norm of the current residual vector (i.e. ||A*x-b||)