29 #ifndef Rythmos_THETA_STEPPER_DECL_H 30 #define Rythmos_THETA_STEPPER_DECL_H 32 #include "Rythmos_ConfigDefs.h" 33 #ifdef HAVE_RYTHMOS_EXPERIMENTAL 35 #include "Rythmos_StepperBase.hpp" 36 #include "Rythmos_DataStore.hpp" 37 #include "Rythmos_LinearInterpolator.hpp" 38 #include "Rythmos_InterpolatorAcceptingObjectBase.hpp" 39 #include "Rythmos_InterpolatorBaseHelpers.hpp" 40 #include "Rythmos_SingleResidualModelEvaluator.hpp" 41 #include "Rythmos_SolverAcceptingStepperBase.hpp" 42 #include "Rythmos_StepperHelpers.hpp" 44 #include "Thyra_VectorBase.hpp" 45 #include "Thyra_ModelEvaluator.hpp" 46 #include "Thyra_ModelEvaluatorHelpers.hpp" 47 #include "Thyra_AssertOp.hpp" 48 #include "Thyra_NonlinearSolverBase.hpp" 49 #include "Thyra_TestingTools.hpp" 51 #include "Teuchos_VerboseObjectParameterListHelpers.hpp" 52 #include "Teuchos_as.hpp" 56 const std::string ThetaStepperType_name =
"Theta Stepper Type";
57 const std::string ThetaStepperType_default =
"Implicit Euler";
59 const std::string PredictorOrder_name =
"Predictor Order";
60 const int PredictorOrder_default = 2;
69 INVALID_THETA_STEPPER_TYPE
76 template<
class Scalar>
78 virtual public SolverAcceptingStepperBase<Scalar>,
79 virtual public InterpolatorAcceptingObjectBase<Scalar>
84 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType ScalarMag;
92 bool isImplicit()
const;
98 void setInterpolator(
const RCP<InterpolatorBase<Scalar> >& interpolator);
101 RCP<InterpolatorBase<Scalar> >
102 getNonconstInterpolator();
105 RCP<const InterpolatorBase<Scalar> >
106 getInterpolator()
const;
109 RCP<InterpolatorBase<Scalar> > unSetInterpolator();
119 const RCP<Thyra::NonlinearSolverBase<Scalar> > &solver
123 RCP<Thyra::NonlinearSolverBase<Scalar> >
127 RCP<const Thyra::NonlinearSolverBase<Scalar> >
136 bool supportsCloning()
const;
145 RCP<StepperBase<Scalar> > cloneStepperAlgorithm()
const;
148 void setModel(
const RCP<
const Thyra::ModelEvaluator<Scalar> >& model);
151 void setNonconstModel(
const RCP<Thyra::ModelEvaluator<Scalar> >& model);
154 RCP<const Thyra::ModelEvaluator<Scalar> > getModel()
const;
157 RCP<Thyra::ModelEvaluator<Scalar> > getNonconstModel();
160 void setInitialCondition(
161 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &initialCondition
165 Thyra::ModelEvaluatorBase::InArgs<Scalar> getInitialCondition()
const;
168 Scalar takeStep(Scalar dt, StepSizeType flag);
171 const StepStatus<Scalar> getStepStatus()
const;
179 RCP<const Thyra::VectorSpaceBase<Scalar> >
184 const Array<Scalar>& time_vec,
185 const Array<RCP<
const Thyra::VectorBase<Scalar> > >& x_vec,
186 const Array<RCP<
const Thyra::VectorBase<Scalar> > >& xdot_vec
190 TimeRange<Scalar> getTimeRange()
const;
194 const Array<Scalar>& time_vec,
195 Array<RCP<
const Thyra::VectorBase<Scalar> > >* x_vec,
196 Array<RCP<
const Thyra::VectorBase<Scalar> > >* xdot_vec,
197 Array<ScalarMag>* accuracy_vec
201 void getNodes(Array<Scalar>* time_vec)
const;
204 void removeNodes(Array<Scalar>& time_vec);
207 int getOrder()
const;
215 void setParameterList(RCP<Teuchos::ParameterList>
const& paramList);
218 RCP<Teuchos::ParameterList> getNonconstParameterList();
221 RCP<Teuchos::ParameterList> unsetParameterList();
224 RCP<const Teuchos::ParameterList> getValidParameters()
const;
233 Teuchos::FancyOStream &out,
234 const Teuchos::EVerbosityLevel verbLevel
245 bool haveInitialCondition_;
246 RCP<const Thyra::ModelEvaluator<Scalar> > model_;
247 RCP<Thyra::NonlinearSolverBase<Scalar> > solver_;
249 Thyra::ModelEvaluatorBase::InArgs<Scalar> basePoint_;
251 RCP<Thyra::VectorBase<Scalar> > x_;
252 RCP<Thyra::VectorBase<Scalar> > x_old_;
253 RCP<Thyra::VectorBase<Scalar> > x_pre_;
255 RCP<Thyra::VectorBase<Scalar> > x_dot_;
256 RCP<Thyra::VectorBase<Scalar> > x_dot_old_;
257 RCP<Thyra::VectorBase<Scalar> > x_dot_really_old_;
258 RCP<Thyra::VectorBase<Scalar> > x_dot_base_;
267 ThetaStepperType thetaStepperType_;
269 int predictor_corrector_begin_after_step_;
270 int default_predictor_order_;
272 RCP<Rythmos::SingleResidualModelEvaluator<Scalar> > neModel_;
274 RCP<Teuchos::ParameterList> parameterList_;
276 RCP<InterpolatorBase<Scalar> > interpolator_;
282 void defaultInitializeAll_();
284 void obtainPredictor_();
292 template<
class Scalar>
293 RCP<ThetaStepper<Scalar> >
295 const RCP<Thyra::ModelEvaluator<Scalar> >& model,
296 const RCP<Thyra::NonlinearSolverBase<Scalar> >& solver,
297 RCP<Teuchos::ParameterList>& parameterList
302 #endif // HAVE_RYTHMOS_EXPERIMENTAL 304 #endif //Rythmos_THETA_STEPPER_DECL_H