Thyra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Thyra_NonlinearSolverBase.hpp
1 // @HEADER
2 // *****************************************************************************
3 // Thyra: Interfaces and Support for Abstract Numerical Algorithms
4 //
5 // Copyright 2004 NTESS and the Thyra contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef THYRA_NONLINEAR_SOLVER_BASE_HPP
11 #define THYRA_NONLINEAR_SOLVER_BASE_HPP
12 
13 #include "Thyra_LinearOpWithSolveBase.hpp"
14 #include "Thyra_ModelEvaluator.hpp"
15 #include "Teuchos_Describable.hpp"
16 #include "Teuchos_VerboseObject.hpp"
17 #include "Teuchos_ParameterListAcceptor.hpp"
18 
19 
20 namespace Thyra {
21 
22 
42 template <class Scalar>
44  : virtual public Teuchos::Describable
45  , virtual public Teuchos::VerboseObject<NonlinearSolverBase<Scalar> >
46  , virtual public Teuchos::ParameterListAcceptor
47 {
48 public:
49 
52 
60  virtual void setModel(
61  const RCP<const ModelEvaluator<Scalar> > &model
62  ) = 0;
63 
65  virtual RCP<const ModelEvaluator<Scalar> > getModel() const = 0;
66 
86  virtual SolveStatus<Scalar> solve(
88  const SolveCriteria<Scalar> *solveCriteria = NULL,
89  VectorBase<Scalar> *delta = NULL
90  ) = 0;
91 
93 
96 
101  virtual bool supportsCloning() const;
102 
124 
131 
137  virtual bool is_W_current() const;
138 
155  get_nonconst_W( const bool forceUpToDate = false );
156 
165 
175  virtual void set_W_is_current(bool W_is_current);
176 
178 
179 private:
180 
181  // Not defined and not to be called
183  operator=(const NonlinearSolverBase<Scalar>&);
184 
185 };
186 
187 
192 template <class Scalar>
194  NonlinearSolverBase<Scalar> &nonlinearSolver,
196  const SolveCriteria<Scalar> *solveCriteria = NULL,
197  VectorBase<Scalar> *delta = NULL
198  )
199 {
200  return nonlinearSolver.solve(x,solveCriteria,delta);
201 }
202 
203 
204 // ///////////////////////////////
205 // Implementations
206 
207 template <class Scalar>
209 {
210  return false;
211 }
212 
213 template <class Scalar>
216 {
217  return Teuchos::null;
218 }
219 
220 template <class Scalar>
223 {
224  return Teuchos::null;
225 }
226 
227 template <class Scalar>
229 {
230  return false;
231 }
232 
233 template <class Scalar>
236 {
237  return Teuchos::null;
238 }
239 
240 template <class Scalar>
243 {
244  return Teuchos::null;
245 }
246 
247 template <class Scalar>
249 {
251  true, std::logic_error,
252  "Error, the subclass object described as " << this->description() << " did not"
253  " override this function!"
254  );
255 }
256 
257 
258 } // namespace Thyra
259 
260 
261 #endif // THYRA_NONLINEAR_SOLVER_BASE_HPP
Pure abstract base interface for evaluating a stateless &quot;model&quot; that can be mapped into a number of d...
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
virtual RCP< LinearOpWithSolveBase< Scalar > > get_nonconst_W(const bool forceUpToDate=false)
Get a nonconst RCP to the Jacobian if available.
Base class for all nonlinear equation solvers.
virtual RCP< NonlinearSolverBase< Scalar > > cloneNonlinearSolver() const
Clone the solver algorithm if supported.
virtual bool supportsCloning() const
Return if this solver object supports cloning or not.
virtual RCP< const ModelEvaluator< Scalar > > getModel() const =0
Get the model that defines the nonlinear equations.
virtual void set_W_is_current(bool W_is_current)
Set if *get_W() is current with respect to *get_current_x().
Abstract interface for finite-dimensional dense vectors.
Simple struct for the return status from a solve.
virtual RCP< const LinearOpWithSolveBase< Scalar > > get_W() const
Get a const RCP to the Jacobian if available.
virtual SolveStatus< Scalar > solve(VectorBase< Scalar > *x, const SolveCriteria< Scalar > *solveCriteria=NULL, VectorBase< Scalar > *delta=NULL)=0
Solve a set of nonlinear equations from a given starting point.
const SolveStatus< Scalar > solve(NonlinearSolverBase< Scalar > &nonlinearSolver, VectorBase< Scalar > *x, const SolveCriteria< Scalar > *solveCriteria=NULL, VectorBase< Scalar > *delta=NULL)
virtual bool is_W_current() const
Returns true if *get_W() is current with respect to *get_current_x().
virtual RCP< const VectorBase< Scalar > > get_current_x() const
Return the current value of the solution x as computed in the last solve() operation if supported...
Simple struct that defines the requested solution criteria for a solve.
virtual void setModel(const RCP< const ModelEvaluator< Scalar > > &model)=0
Set the model that defines the nonlinear equations.