Rythmos - Transient Integration for Differential Equations  Version of the Day
Rythmos_ExplicitRKStepper_decl.hpp
1 //@HEADER
2 // ***********************************************************************
3 //
4 // Rythmos Package
5 // Copyright (2006) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // This library is free software; you can redistribute it and/or modify
11 // it under the terms of the GNU Lesser General Public License as
12 // published by the Free Software Foundation; either version 2.1 of the
13 // License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23 // USA
24 // Questions? Contact Todd S. Coffey (tscoffe@sandia.gov)
25 //
26 // ***********************************************************************
27 //@HEADER
28 
29 #ifndef Rythmos_ExplicitRK_STEPPER_DECL_H
30 #define Rythmos_ExplicitRK_STEPPER_DECL_H
31 
32 #include "Rythmos_RKButcherTableauAcceptingStepperBase.hpp"
33 #include "Rythmos_RKButcherTableauBase.hpp"
34 #include "Rythmos_Types.hpp"
35 #include "Thyra_ModelEvaluator.hpp"
36 
37 namespace Rythmos {
38 
40 template<class Scalar>
42 {
43  public:
44  typedef Teuchos::ScalarTraits<Scalar> ST;
45  typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType ScalarMag;
46 
49 
52 
54  bool supportsCloning() const;
55 
57  RCP<StepperBase<Scalar> > cloneStepperAlgorithm() const;
58 
60 
63 
65  void setRKButcherTableau(const RCP<const RKButcherTableauBase<Scalar> > &rkbt);
66 
68  RCP<const RKButcherTableauBase<Scalar> > getRKButcherTableau() const;
69 
71 
73  Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_x_space() const;
74 
76  void setModel(const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
77 
79  void setNonconstModel(const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model);
80 
82  Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getModel() const;
83 
85  RCP<Thyra::ModelEvaluator<Scalar> > getNonconstModel();
86 
89 
92  const Thyra::ModelEvaluatorBase::InArgs<Scalar> &initialCondition
93  );
94 
96  Thyra::ModelEvaluatorBase::InArgs<Scalar> getInitialCondition() const;
97 
99  Scalar takeStep(Scalar dt, StepSizeType flag);
100 
102  const StepStatus<Scalar> getStepStatus() const;
103 
105  void describe(
106  Teuchos::FancyOStream &out,
107  const Teuchos::EVerbosityLevel verbLevel
108  ) const;
109 
112  void addPoints(
113  const Array<Scalar>& time_vec
114  ,const Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x_vec
115  ,const Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& xdot_vec
116  );
117 
119  void getPoints(
120  const Array<Scalar>& time_vec
121  ,Array<RCP<const VectorBase<Scalar> > >* x_vec
122  ,Array<RCP<const VectorBase<Scalar> > >* xdot_vec
123  ,Array<ScalarMag>* accuracy_vec) const;
124 
127 
129  void getNodes(Array<Scalar>* time_vec) const;
130 
132  void removeNodes(Array<Scalar>& time_vec);
133 
135  int getOrder() const;
136 
138 
139  void setParameterList(Teuchos::RCP<Teuchos::ParameterList> const& paramList);
140 
142  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
143 
145  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
146 
148  RCP<const Teuchos::ParameterList> getValidParameters() const;
149 
150  private:
151 
152  Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > model_;
153  Teuchos::RCP<Thyra::VectorBase<Scalar> > solution_vector_;
154  Teuchos::RCP<Thyra::VectorBase<Scalar> > solution_vector_old_;
155  Array<Teuchos::RCP<Thyra::VectorBase<Scalar> > > k_vector_;
156  Teuchos::RCP<Thyra::VectorBase<Scalar> > ktemp_vector_;
157 
158  Thyra::ModelEvaluatorBase::InArgs<Scalar> basePoint_;
159 
160  RCP<const RKButcherTableauBase<Scalar> > erkButcherTableau_;
161 
162  Scalar t_;
163  Scalar t_old_;
164  Scalar dt_;
165  int numSteps_;
166 
167  Teuchos::RCP<Teuchos::ParameterList> parameterList_;
168 
169  bool isInitialized_;
170 
171  bool haveInitialCondition_;
172 
173  // Private member functions:
174  void defaultInitializeAll_();
175  void initialize_();
176 
177 };
178 
179 // Non-member constructors
180 template<class Scalar>
181 RCP<ExplicitRKStepper<Scalar> > explicitRKStepper();
182 
183 template<class Scalar>
184 RCP<ExplicitRKStepper<Scalar> > explicitRKStepper(
185  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model
186  );
187 
188 template<class Scalar>
189 RCP<ExplicitRKStepper<Scalar> > explicitRKStepper(
190  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
191  const RCP<const RKButcherTableauBase<Scalar> >& rkbt
192  );
193 
194 } // namespace Rythmos
195 
196 #endif //Rythmos_ExplicitRK_STEPPER_DECL_H
197 
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Scalar takeStep(Scalar dt, StepSizeType flag)
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
RCP< const Teuchos::ParameterList > getValidParameters() const
void getNodes(Array< Scalar > *time_vec) const
Get interpolation nodes.
void setParameterList(Teuchos::RCP< Teuchos::ParameterList > const &paramList)
Redefined from Teuchos::ParameterListAcceptor.
const StepStatus< Scalar > getStepStatus() const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
int getOrder() const
Get order of interpolation.
void setRKButcherTableau(const RCP< const RKButcherTableauBase< Scalar > > &rkbt)
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
void getPoints(const Array< Scalar > &time_vec, Array< RCP< const VectorBase< Scalar > > > *x_vec, Array< RCP< const VectorBase< Scalar > > > *xdot_vec, Array< ScalarMag > *accuracy_vec) const
Get values from buffer.
void removeNodes(Array< Scalar > &time_vec)
Remove interpolation nodes.
Thyra::ModelEvaluatorBase::InArgs< Scalar > getInitialCondition() const
Mix-in interface stepper objects that accept an RK Butcher Tableau.
RCP< StepperBase< Scalar > > cloneStepperAlgorithm() const
RCP< const RKButcherTableauBase< Scalar > > getRKButcherTableau() const
RCP< Thyra::ModelEvaluator< Scalar > > getNonconstModel()
void setNonconstModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model)
TimeRange< Scalar > getTimeRange() const
void addPoints(const Array< Scalar > &time_vec, const Array< Teuchos::RCP< const Thyra::VectorBase< Scalar > > > &x_vec, const Array< Teuchos::RCP< const Thyra::VectorBase< Scalar > > > &xdot_vec)
void setInitialCondition(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &initialCondition)