29#ifndef Rythmos_BACKWARD_EULER_STEPPER_DECL_H
30#define Rythmos_BACKWARD_EULER_STEPPER_DECL_H
32#include "Rythmos_SolverAcceptingStepperBase.hpp"
33#include "Rythmos_StepControlStrategyAcceptingStepperBase.hpp"
34#include "Rythmos_InterpolatorAcceptingObjectBase.hpp"
35#include "Rythmos_SingleResidualModelEvaluator.hpp"
36#include "Rythmos_MomentoBase.hpp"
38#include "Thyra_VectorBase.hpp"
39#include "Thyra_ModelEvaluator.hpp"
40#include "Thyra_NonlinearSolverBase.hpp"
41#include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
55 virtual public Teuchos::ParameterListAcceptorDefaultBase
61 RCP<MomentoBase<Scalar> > clone()
const
63 RCP<BackwardEulerStepperMomento<Scalar> > m =
65 m->set_scaled_x_old(scaled_x_old_);
66 m->set_x_dot_old(x_dot_old_);
74 m->set_numSteps(numSteps_);
75 m->set_isInitialized(isInitialized_);
76 m->set_haveInitialCondition(haveInitialCondition_);
77 m->set_parameterList(parameterList_);
78 m->set_basePoint(basePoint_);
79 m->set_neModel(neModel_);
80 m->set_interpolator(interpolator_);
81 m->set_stepControl(stepControl_);
82 if (!Teuchos::is_null(this->getMyParamList())) {
83 m->setParameterList(Teuchos::parameterList(*(this->getMyParamList())));
102 void set_scaled_x_old(
const RCP<
const VectorBase<Scalar> >& scaled_x_old )
104 scaled_x_old_ = Teuchos::null;
105 if (!Teuchos::is_null(scaled_x_old)) {
106 scaled_x_old_ = scaled_x_old->clone_v();
109 RCP<VectorBase<Scalar> > get_scaled_x_old()
const
110 {
return scaled_x_old_; }
112 void set_x_dot_old(
const RCP<
const VectorBase<Scalar> >& x_dot_old )
114 x_dot_old_ = Teuchos::null;
115 if (!Teuchos::is_null(x_dot_old)) {
116 x_dot_old_ = x_dot_old->clone_v();
119 RCP<VectorBase<Scalar> > get_x_dot_old()
const
120 {
return x_dot_old_; }
122 void set_x_old(
const RCP<
const VectorBase<Scalar> >& x_old )
124 x_old_ = Teuchos::null;
125 if (!Teuchos::is_null(x_old)) {
126 x_old_ = x_old->clone_v();
129 RCP<VectorBase<Scalar> > get_x_old()
const
132 void set_x(
const RCP<
const VectorBase<Scalar> >& x )
135 if (!Teuchos::is_null(x)) {
139 RCP<VectorBase<Scalar> > get_x()
const
142 void set_dx(
const RCP<
const VectorBase<Scalar> >& dx )
145 if (!Teuchos::is_null(dx)) {
149 RCP<VectorBase<Scalar> > get_dx()
const
152 void set_x_dot(
const RCP<
const VectorBase<Scalar> >& x_dot )
154 x_dot_ = Teuchos::null;
155 if (!Teuchos::is_null(x_dot)) {
156 x_dot_ = x_dot->clone_v();
159 RCP<VectorBase<Scalar> > get_x_dot()
const
162 void set_t(
const Scalar & t)
167 void set_t_old(
const Scalar & t_old)
169 Scalar get_t_old()
const
172 void set_dt(
const Scalar & dt)
174 Scalar get_dt()
const
177 void set_numSteps(
const int & numSteps)
178 { numSteps_ = numSteps; }
179 int get_numSteps()
const
180 {
return numSteps_; }
182 void set_newtonConvergenceStatus(
const int & newtonConvergenceStatus)
183 { newtonConvergenceStatus_ = newtonConvergenceStatus; }
184 int get_newtonConvergenceStatus()
const
185 {
return newtonConvergenceStatus_; }
187 void set_isInitialized(
const bool & isInitialized)
188 { isInitialized_ = isInitialized; }
189 bool get_isInitialized()
const
190 {
return isInitialized_; }
192 void set_haveInitialCondition(
const bool & haveInitialCondition)
193 { haveInitialCondition_ = haveInitialCondition; }
194 bool get_haveInitialCondition()
const
195 {
return haveInitialCondition_; }
197 void set_parameterList(
const RCP<const ParameterList>& pl)
199 parameterList_ = Teuchos::null;
200 if (!Teuchos::is_null(pl)) {
201 parameterList_ = Teuchos::parameterList(*pl);
204 RCP<ParameterList> get_parameterList()
const
205 {
return parameterList_; }
207 void set_basePoint(Thyra::ModelEvaluatorBase::InArgs<Scalar> basePoint)
208 { basePoint_ = basePoint; };
209 Thyra::ModelEvaluatorBase::InArgs<Scalar> get_basePoint()
const
210 {
return basePoint_; }
214 neModel_ = Teuchos::null;
215 if (!Teuchos::is_null(neModel)) {
219 RCP<Rythmos::SingleResidualModelEvaluator<Scalar> > get_neModel()
const
224 interpolator_ = Teuchos::null;
225 if (!Teuchos::is_null(interpolator)) {
226 TEUCHOS_ASSERT(interpolator->supportsCloning());
227 interpolator_ = interpolator->cloneInterpolator();
230 RCP<InterpolatorBase<Scalar> > get_interpolator()
const
231 {
return interpolator_; }
235 stepControl_ = Teuchos::null;
236 if (!Teuchos::is_null(stepControl)) {
237 TEUCHOS_ASSERT(stepControl->supportsCloning());
238 stepControl_ = stepControl->cloneStepControlStrategyAlgorithm();
241 RCP<StepControlStrategyBase<Scalar> > get_stepControl()
const
242 {
return stepControl_; }
244 void setParameterList(
const RCP<ParameterList>& paramList)
245 { this->setMyParamList(paramList); }
246 RCP<const ParameterList> getValidParameters()
const
247 {
return Teuchos::null; }
250 RCP<Thyra::VectorBase<Scalar> > scaled_x_old_;
251 RCP<Thyra::VectorBase<Scalar> > x_old_;
252 RCP<Thyra::VectorBase<Scalar> > x_dot_old_;
253 RCP<Thyra::VectorBase<Scalar> > x_;
254 RCP<Thyra::VectorBase<Scalar> > x_dot_;
255 RCP<Thyra::VectorBase<Scalar> > dx_;
260 int newtonConvergenceStatus_;
262 bool haveInitialCondition_;
263 RCP<Teuchos::ParameterList> parameterList_;
264 Thyra::ModelEvaluatorBase::InArgs<Scalar> basePoint_;
265 RCP<Rythmos::SingleResidualModelEvaluator<Scalar> > neModel_;
266 RCP<InterpolatorBase<Scalar> > interpolator_;
267 RCP<StepControlStrategyBase<Scalar> > stepControl_;
282template<
class Scalar>
291 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType
ScalarMag;
301 const RCP<Thyra::ModelEvaluator<Scalar> >& model,
302 const RCP<Thyra::NonlinearSolverBase<Scalar> >& solver
333 RCP<StepControlStrategyBase<Scalar> >
337 RCP<const StepControlStrategyBase<Scalar> >
347 const RCP<Thyra::NonlinearSolverBase<Scalar> > &solver
351 RCP<Thyra::NonlinearSolverBase<Scalar> >
355 RCP<const Thyra::NonlinearSolverBase<Scalar> >
379 void setModel(
const RCP<
const Thyra::ModelEvaluator<Scalar> >& model);
385 RCP<const Thyra::ModelEvaluator<Scalar> >
getModel()
const;
392 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &initialCondition
399 Scalar
takeStep(Scalar dt, StepSizeType flag);
410 RCP<const Thyra::VectorSpaceBase<Scalar> >
415 const Array<Scalar>& time_vec,
416 const Array<RCP<
const Thyra::VectorBase<Scalar> > >& x_vec,
417 const Array<RCP<
const Thyra::VectorBase<Scalar> > >& xdot_vec
425 const Array<Scalar>& time_vec,
426 Array<RCP<
const Thyra::VectorBase<Scalar> > >* x_vec,
427 Array<RCP<
const Thyra::VectorBase<Scalar> > >* xdot_vec,
428 Array<ScalarMag>* accuracy_vec
432 void getNodes(Array<Scalar>* time_vec)
const;
464 Teuchos::FancyOStream &out,
465 const Teuchos::EVerbosityLevel verbLevel
476 RCP<const MomentoBase<Scalar> >
getMomento()
const;
482 const RCP<Thyra::ModelEvaluator<Scalar> >& model,
483 const RCP<Thyra::NonlinearSolverBase<Scalar> >& solver
495 bool haveInitialCondition_;
496 RCP<const Thyra::ModelEvaluator<Scalar> > model_;
497 RCP<Thyra::NonlinearSolverBase<Scalar> > solver_;
498 RCP<Thyra::VectorBase<Scalar> > x_old_;
499 RCP<Thyra::VectorBase<Scalar> > scaled_x_old_;
500 RCP<Thyra::VectorBase<Scalar> > x_dot_old_;
502 Thyra::ModelEvaluatorBase::InArgs<Scalar> basePoint_;
503 RCP<Thyra::VectorBase<Scalar> > x_;
504 RCP<Thyra::VectorBase<Scalar> > x_dot_;
505 RCP<Thyra::VectorBase<Scalar> > dx_;
512 RCP<Rythmos::SingleResidualModelEvaluator<Scalar> > neModel_;
514 RCP<Teuchos::ParameterList> parameterList_;
516 RCP<InterpolatorBase<Scalar> > interpolator_;
517 RCP<StepControlStrategyBase<Scalar> > stepControl_;
519 int newtonConvergenceStatus_;
525 void defaultInitializeAll_();
527 void checkConsistentState_();
528 void obtainPredictor_();
537template<
class Scalar>
538RCP<BackwardEulerStepper<Scalar> >
539backwardEulerStepper();
546template<
class Scalar>
547RCP<BackwardEulerStepper<Scalar> >
549 const RCP<Thyra::ModelEvaluator<Scalar> >& model,
550 const RCP<Thyra::NonlinearSolverBase<Scalar> >& solver
Concrete momento class for the BackwardEulerStepper.
Simple concrete stepper subclass implementing an implicit backward Euler method.
void setSolver(const RCP< Thyra::NonlinearSolverBase< Scalar > > &solver)
RCP< const MomentoBase< Scalar > > getMomento() const
Get momento object for use in restarts.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
void setInterpolator(const RCP< InterpolatorBase< Scalar > > &interpolator)
RCP< Teuchos::ParameterList > getNonconstParameterList()
void getPoints(const Array< Scalar > &time_vec, Array< RCP< const Thyra::VectorBase< Scalar > > > *x_vec, Array< RCP< const Thyra::VectorBase< Scalar > > > *xdot_vec, Array< ScalarMag > *accuracy_vec) const
RCP< const StepControlStrategyBase< Scalar > > getStepControlStrategy() const
Teuchos::ScalarTraits< Scalar >::magnitudeType ScalarMag
RCP< InterpolatorBase< Scalar > > getNonconstInterpolator()
void setNonconstModel(const RCP< Thyra::ModelEvaluator< Scalar > > &model)
RCP< StepperBase< Scalar > > cloneStepperAlgorithm() const
Creates copies of all internal data (including the parameter list) except the model which is assumed ...
void removeNodes(Array< Scalar > &time_vec)
void setModel(const RCP< const Thyra::ModelEvaluator< Scalar > > &model)
RCP< StepControlStrategyBase< Scalar > > getNonconstStepControlStrategy()
void getNodes(Array< Scalar > *time_vec) const
RCP< const Teuchos::ParameterList > getValidParameters() const
bool supportsCloning() const
Returns true.
Scalar takeStep(Scalar dt, StepSizeType flag)
RCP< InterpolatorBase< Scalar > > unSetInterpolator()
RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
RCP< Thyra::NonlinearSolverBase< Scalar > > getNonconstSolver()
RCP< Teuchos::ParameterList > unsetParameterList()
void setInitialCondition(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &initialCondition)
void setStepControlStrategy(const RCP< StepControlStrategyBase< Scalar > > &stepControlStrategy)
RCP< Thyra::ModelEvaluator< Scalar > > getNonconstModel()
TimeRange< Scalar > getTimeRange() const
void setMomento(const Ptr< const MomentoBase< Scalar > > &momentoPtr, const RCP< Thyra::ModelEvaluator< Scalar > > &model, const RCP< Thyra::NonlinearSolverBase< Scalar > > &solver)
Set momento object for use in restarts.
RCP< const InterpolatorBase< Scalar > > getInterpolator() const
RCP< const Thyra::NonlinearSolverBase< Scalar > > getSolver() const
void setParameterList(RCP< Teuchos::ParameterList > const ¶mList)
RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
void addPoints(const Array< Scalar > &time_vec, const Array< RCP< const Thyra::VectorBase< Scalar > > > &x_vec, const Array< RCP< const Thyra::VectorBase< Scalar > > > &xdot_vec)
const StepStatus< Scalar > getStepStatus() const
Thyra::ModelEvaluatorBase::InArgs< Scalar > getInitialCondition() const
Mix-in interface for objects that accept an interpolator object.
Base strategy class for interpolation functionality.
Base class for a momento object.
Decorator subclass for a steady-state version of a DAE for single-residual time stepper methods.
Mix-in interface all implicit stepper objects that accept a nonlinear solver to be used to compute th...
Base class for serializing Rythmos state data.
Mix-in interface for stepper objects that accept a step control strategy object to be used for evalua...
The member functions in the StepControlStrategyBase move you between these states in the following fa...