Stratimikos Version of the Day
Loading...
Searching...
No Matches
Thyra_GeneralSolveCriteriaBelosStatusTest_decl.hpp
1/*
2// @HEADER
3// ***********************************************************************
4//
5// Stratimikos: Thyra-based strategies for linear solvers
6// Copyright (2006) Sandia Corporation
7//
8// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9// license for use of this work by or on behalf of the U.S. Government.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
39//
40// ***********************************************************************
41// @HEADER
42*/
43
44
45#ifndef THYRA_GENERAL_SOLVE_CRITERIA_BELOS_STATUS_TEST_DECL_HPP
46#define THYRA_GENERAL_SOLVE_CRITERIA_BELOS_STATUS_TEST_DECL_HPP
47
48#include "Thyra_SolveSupportTypes.hpp"
49#include "BelosStatusTest.hpp"
52#include "Teuchos_VerboseObject.hpp"
53
54
55namespace Thyra {
56
57
62template<class Scalar>
64 : public Belos::StatusTest<Scalar, MultiVectorBase<Scalar>, LinearOpBase<Scalar> >,
65 public Teuchos::VerboseObject<GeneralSolveCriteriaBelosStatusTest<Scalar> >
66{
67public:
68
72 typedef MultiVectorBase<Scalar> MV;
74 typedef LinearOpBase<Scalar> OP;
76 typedef typename ScalarTraits<Scalar>::magnitudeType ScalarMag;
78
81
84
86 void setSolveCriteria(const SolveCriteria<Scalar> &solveCriteria,
87 const int convergenceTestFrequency);
88
90 ArrayView<const ScalarMag> achievedTol() const;
91
93
99 virtual Belos::StatusType getStatus() const;
101 virtual void reset();
103 virtual void print(std::ostream& os, int indent) const;
105
106private:
107
108 SolveCriteria<Scalar> solveCriteria_;
109 int convergenceTestFrequency_;
110
111 bool compute_x_;
112 bool compute_r_;
113
114 Array<ScalarMag> r0_nrm_;
115 Array<ScalarMag> b_nrm_;
116 Array<ScalarMag> lastNumerator_;
117 Array<ScalarMag> lastDenominator_;
118 Array<ScalarMag> lastAchievedTol_;
119 int lastCurrIter_;
120 Belos::StatusType lastRtnStatus_;
121
122 // Private member functions
123
124 ScalarMag computeReductionFunctional(ESolveMeasureNormType measureType,
125 const Ptr<const ReductionFunctional<Scalar> > &reductFunc,
126 const Ptr<const VectorBase<Scalar> > &x,
127 const Ptr<const VectorBase<Scalar> > &r
128 ) const;
129
130 void printRhsStatus(const int currIter, const int j, std::ostream &out,
131 int indent = 0) const;
132
133};
134
135
140template<class Scalar>
141RCP<GeneralSolveCriteriaBelosStatusTest<Scalar> >
143 const SolveCriteria<Scalar> &solveCriteria,
144 const int convergenceTestFrequency
145 )
146{
147 RCP<GeneralSolveCriteriaBelosStatusTest<Scalar> >
148 gscbst = Teuchos::rcp(new GeneralSolveCriteriaBelosStatusTest<Scalar>);
149 gscbst->setSolveCriteria(solveCriteria, convergenceTestFrequency);
150 return gscbst;
151}
152
153
154} // namespace Thyra
155
156
157#endif // THYRA_GENERAL_SOLVE_CRITERIA_BELOS_STATUS_TEST_DECL_HPP
Subclass of Belos::StatusTest that implements every possible form of SolveCriteria that exists by for...
void setSolveCriteria(const SolveCriteria< Scalar > &solveCriteria, const int convergenceTestFrequency)
RCP< GeneralSolveCriteriaBelosStatusTest< Scalar > > createGeneralSolveCriteriaBelosStatusTest(const SolveCriteria< Scalar > &solveCriteria, const int convergenceTestFrequency)
Nonmember constructor.
virtual Belos::StatusType checkStatus(Belos::Iteration< Scalar, MV, OP > *iSolver)

Generated for Stratimikos by doxygen 1.9.6