55 virtual public Teuchos::ParameterListAcceptorDefaultBase
61 RCP<MomentoBase<Scalar> > clone()
const
63 RCP<BackwardEulerStepperMomento<Scalar> > m =
64 rcp(
new BackwardEulerStepperMomento<Scalar>());
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())));
91 const StateSerializerStrategy<Scalar>& ,
97 const StateSerializerStrategy<Scalar>& ,
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_; }
212 void set_neModel(
const RCP<Rythmos::SingleResidualModelEvaluator<Scalar> >& neModel)
214 neModel_ = Teuchos::null;
215 if (!Teuchos::is_null(neModel)) {
216 neModel_ = Teuchos::rcp(
new Rythmos::SingleResidualModelEvaluator<Scalar>);
219 RCP<Rythmos::SingleResidualModelEvaluator<Scalar> > get_neModel()
const
222 void set_interpolator(
const RCP<InterpolatorBase<Scalar> >& interpolator)
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_; }
233 void set_stepControl(
const RCP<StepControlStrategyBase<Scalar> >& stepControl)
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_;
291 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType
ScalarMag;
301 const RCP<Thyra::ModelEvaluator<Scalar> >& model,
302 const RCP<Thyra::NonlinearSolverBase<Scalar> >& solver
311 void setInterpolator(
const RCP<InterpolatorBase<Scalar> >& interpolator);
329 const RCP<StepControlStrategyBase<Scalar> >& stepControlStrategy
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;
481 const Ptr<
const MomentoBase<Scalar> >& momentoPtr,
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_();