29#ifndef Rythmos_THETA_STEPPER_DECL_H
30#define Rythmos_THETA_STEPPER_DECL_H
32#define HAVE_RYTHMOS_EXPERIMENTAL
34#include "Rythmos_ConfigDefs.h"
35#ifdef HAVE_RYTHMOS_EXPERIMENTAL
37#include "Rythmos_StepperBase.hpp"
38#include "Rythmos_DataStore.hpp"
39#include "Rythmos_LinearInterpolator.hpp"
40#include "Rythmos_InterpolatorAcceptingObjectBase.hpp"
41#include "Rythmos_InterpolatorBaseHelpers.hpp"
42#include "Rythmos_SingleResidualModelEvaluator.hpp"
43#include "Rythmos_SolverAcceptingStepperBase.hpp"
44#include "Rythmos_StepperHelpers.hpp"
46#include "Thyra_VectorBase.hpp"
47#include "Thyra_ModelEvaluator.hpp"
48#include "Thyra_ModelEvaluatorHelpers.hpp"
49#include "Thyra_AssertOp.hpp"
50#include "Thyra_NonlinearSolverBase.hpp"
51#include "Thyra_TestingTools.hpp"
53#include "Teuchos_VerboseObjectParameterListHelpers.hpp"
54#include "Teuchos_as.hpp"
58 const std::string ThetaStepperType_name =
"Theta Stepper Type";
59 const std::string ThetaStepperType_default =
"Implicit Euler";
61 const std::string PredictorOrder_name =
"Predictor Order";
62 const int PredictorOrder_default = 2;
71 INVALID_THETA_STEPPER_TYPE
86 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType
ScalarMag;
103 RCP<InterpolatorBase<Scalar> >
107 RCP<const InterpolatorBase<Scalar> >
121 const RCP<Thyra::NonlinearSolverBase<Scalar> > &solver
125 RCP<Thyra::NonlinearSolverBase<Scalar> >
129 RCP<const Thyra::NonlinearSolverBase<Scalar> >
150 void setModel(
const RCP<
const Thyra::ModelEvaluator<Scalar> >& model);
156 RCP<const Thyra::ModelEvaluator<Scalar> >
getModel()
const;
163 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &initialCondition
181 RCP<const Thyra::VectorSpaceBase<Scalar> >
186 const Array<Scalar>& time_vec,
187 const Array<RCP<
const Thyra::VectorBase<Scalar> > >& x_vec,
188 const Array<RCP<
const Thyra::VectorBase<Scalar> > >& xdot_vec
196 const Array<Scalar>& time_vec,
197 Array<RCP<
const Thyra::VectorBase<Scalar> > >* x_vec,
198 Array<RCP<
const Thyra::VectorBase<Scalar> > >* xdot_vec,
199 Array<ScalarMag>* accuracy_vec
235 Teuchos::FancyOStream &out,
236 const Teuchos::EVerbosityLevel verbLevel
247 bool haveInitialCondition_;
248 RCP<const Thyra::ModelEvaluator<Scalar> > model_;
249 RCP<Thyra::NonlinearSolverBase<Scalar> > solver_;
251 Thyra::ModelEvaluatorBase::InArgs<Scalar> basePoint_;
253 RCP<Thyra::VectorBase<Scalar> > x_;
254 RCP<Thyra::VectorBase<Scalar> > x_old_;
255 RCP<Thyra::VectorBase<Scalar> > x_pre_;
257 RCP<Thyra::VectorBase<Scalar> > x_dot_;
258 RCP<Thyra::VectorBase<Scalar> > x_dot_old_;
259 RCP<Thyra::VectorBase<Scalar> > x_dot_really_old_;
260 RCP<Thyra::VectorBase<Scalar> > x_dot_base_;
269 ThetaStepperType thetaStepperType_;
271 int predictor_corrector_begin_after_step_;
272 int default_predictor_order_;
274 RCP<Rythmos::SingleResidualModelEvaluator<Scalar> > neModel_;
276 RCP<Teuchos::ParameterList> parameterList_;
278 RCP<InterpolatorBase<Scalar> > interpolator_;
284 void defaultInitializeAll_();
286 void obtainPredictor_();
294template<
class Scalar>
295RCP<ThetaStepper<Scalar> >
297 const RCP<Thyra::ModelEvaluator<Scalar> >& model,
298 const RCP<Thyra::NonlinearSolverBase<Scalar> >& solver,
299 RCP<Teuchos::ParameterList>& parameterList
Mix-in interface for objects that accept an interpolator object.
Mix-in interface all implicit stepper objects that accept a nonlinear solver to be used to compute th...
Stepper class for theta integration scheme common in SNL thermal/fluids codes.
void removeNodes(Array< Scalar > &time_vec)
Teuchos::ScalarTraits< Scalar >::magnitudeType ScalarMag
RCP< const Teuchos::ParameterList > getValidParameters() const
Thyra::ModelEvaluatorBase::InArgs< Scalar > getInitialCondition() const
void setInterpolator(const RCP< InterpolatorBase< Scalar > > &interpolator)
Redefined from InterpolatorAcceptingObjectBase.
bool supportsCloning() const
Returns true.
RCP< Thyra::NonlinearSolverBase< Scalar > > getNonconstSolver()
RCP< InterpolatorBase< Scalar > > getNonconstInterpolator()
Scalar takeStep(Scalar dt, StepSizeType flag)
RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
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< StepperBase< Scalar > > cloneStepperAlgorithm() const
Creates copies of all internal data (including the parameter list) except the model which is assumed ...
RCP< const Thyra::NonlinearSolverBase< Scalar > > getSolver() const
void setParameterList(RCP< Teuchos::ParameterList > const ¶mList)
TimeRange< Scalar > getTimeRange() const
RCP< Teuchos::ParameterList > getNonconstParameterList()
void setModel(const RCP< const Thyra::ModelEvaluator< Scalar > > &model)
void setNonconstModel(const RCP< Thyra::ModelEvaluator< Scalar > > &model)
RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
bool isImplicit() const
Return if this stepper is an implicit stepper.
RCP< InterpolatorBase< Scalar > > unSetInterpolator()
RCP< Teuchos::ParameterList > unsetParameterList()
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)
RCP< Thyra::ModelEvaluator< Scalar > > getNonconstModel()
RCP< const InterpolatorBase< Scalar > > getInterpolator() const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
void setInitialCondition(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &initialCondition)
const StepStatus< Scalar > getStepStatus() const
void getNodes(Array< Scalar > *time_vec) const
void setSolver(const RCP< Thyra::NonlinearSolverBase< Scalar > > &solver)
RCP< ThetaStepper< Scalar > > thetaStepper(const RCP< Thyra::ModelEvaluator< Scalar > > &model, const RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, RCP< Teuchos::ParameterList > ¶meterList)
Nonmember constructor.