29#ifndef Rythmos_STEPPER_BUILDER_NEWNEW_H
30#define Rythmos_STEPPER_BUILDER_NEWNEW_H
32#include "Rythmos_Types.hpp"
33#include "Rythmos_StepperBase.hpp"
35#include "Teuchos_ObjectBuilder.hpp"
36#include "Teuchos_ParameterList.hpp"
38#include "Rythmos_BackwardEulerStepper.hpp"
39#include "Rythmos_ImplicitBDFStepper.hpp"
40#include "Rythmos_ForwardEulerStepper.hpp"
41#include "Rythmos_ExplicitRKStepper.hpp"
42#include "Rythmos_ImplicitRKStepper.hpp"
43#ifdef HAVE_THYRA_ME_POLYNOMIAL
44# include "Rythmos_ExplicitTaylorPolynomialStepper.hpp"
46#ifdef HAVE_RYTHMOS_EXPERIMENTAL
47#include "Rythmos_ThetaStepper.hpp"
54 class StepperBuilder :
virtual public Teuchos::ParameterListAcceptor
65 void setStepperFactory(
66 const RCP<
const Teuchos::AbstractFactory<StepperBase<Scalar> > > &stepperFactory,
67 const std::string &stepperFactoryName
73 std::string getStepperName()
const;
76 RCP<StepperBase<Scalar> > create(
77 const std::string &stepperName =
""
84 void setParameterList(
const RCP<Teuchos::ParameterList> & paramList);
87 RCP<Teuchos::ParameterList> getNonconstParameterList();
90 RCP<Teuchos::ParameterList> unsetParameterList();
93 RCP<const ParameterList> getParameterList()
const;
96 RCP<const Teuchos::ParameterList> getValidParameters()
const;
105 Teuchos::ObjectBuilder<StepperBase<Scalar> > builder_;
110 void initializeDefaults_();
116template<
class Scalar>
117RCP<StepperBuilder<Scalar> > stepperBuilder()
119 RCP<StepperBuilder<Scalar> > sb = rcp(
new StepperBuilder<Scalar> );
123template<
class Scalar>
124StepperBuilder<Scalar>::StepperBuilder()
126 this->initializeDefaults_();
130template<
class Scalar>
131RCP<StepperBase<Scalar> > createStepper(
const std::string &stepperName)
133 RCP<StepperBuilder<Scalar> > sb = stepperBuilder<Scalar>();
134 RCP<StepperBase<Scalar> > stepper = sb->create(stepperName);
138template<
class Scalar>
139StepperBuilder<Scalar>::~StepperBuilder()
144template<
class Scalar>
145void StepperBuilder<Scalar>::setStepperFactory(
146 const RCP<
const Teuchos::AbstractFactory<StepperBase<Scalar> > > &stepperFactory,
147 const std::string &stepperName
150 builder_.setObjectFactory(stepperFactory, stepperName);
154template<
class Scalar>
156StepperBuilder<Scalar>::getStepperName()
const
158 return builder_.getObjectName();
162template<
class Scalar>
163void StepperBuilder<Scalar>::setParameterList(
164 RCP<Teuchos::ParameterList>
const& paramList
167 builder_.setParameterList(paramList);
171template<
class Scalar>
172RCP<Teuchos::ParameterList>
173StepperBuilder<Scalar>::getNonconstParameterList()
175 return builder_.getNonconstParameterList();
179template<
class Scalar>
180RCP<Teuchos::ParameterList>
181StepperBuilder<Scalar>::unsetParameterList()
183 return builder_.unsetParameterList();
187template<
class Scalar>
188RCP<const Teuchos::ParameterList>
189StepperBuilder<Scalar>::getParameterList()
const
191 return builder_.getParameterList();
195template<
class Scalar>
196RCP<const Teuchos::ParameterList>
197StepperBuilder<Scalar>::getValidParameters()
const
199 return builder_.getValidParameters();
203template<
class Scalar>
204RCP<StepperBase<Scalar> >
205StepperBuilder<Scalar>::create(
206 const std::string &stepperName
209 return builder_.create(stepperName);
213template<
class Scalar>
214void StepperBuilder<Scalar>::initializeDefaults_()
217 using Teuchos::abstractFactoryStd;
219 builder_.setObjectName(
"Rythmos::Stepper");
220 builder_.setObjectTypeName(
"Stepper Type");
226 builder_.setObjectFactory(
227 abstractFactoryStd< StepperBase<Scalar>, ForwardEulerStepper<Scalar> >(),
231 builder_.setObjectFactory(
232 abstractFactoryStd< StepperBase<Scalar>, BackwardEulerStepper<Scalar> >(),
236 builder_.setObjectFactory(
237 abstractFactoryStd< StepperBase<Scalar>, ImplicitBDFStepper<Scalar> >(),
241 builder_.setObjectFactory(
242 abstractFactoryStd< StepperBase<Scalar>, ExplicitRKStepper<Scalar> >(),
246 builder_.setObjectFactory(
247 abstractFactoryStd< StepperBase<Scalar>, ImplicitRKStepper<Scalar> >(),
251#ifdef HAVE_THYRA_ME_POLYNOMIAL
252 builder_.setObjectFactory(
253 abstractFactoryStd< StepperBase<Scalar>, ExplicitTaylorPolynomialStepper<Scalar> >(),
254 "Explicit Taylor Polynomial"
258#ifdef HAVE_RYTHMOS_EXPERIMENTAL
259 builder_.setObjectFactory(
260 abstractFactoryStd< StepperBase<Scalar>, ThetaStepper<Scalar> >(),
265 builder_.setDefaultObject(
"Backward Euler");