Tempus  Version of the Day
Time Integration
Tempus_StepperNewmarkExplicitAForm_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ****************************************************************************
3 // Tempus: Copyright (2017) Sandia Corporation
4 //
5 // Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6 // ****************************************************************************
7 // @HEADER
8 
9 #ifndef Tempus_StepperNewmarkExplicitAForm_decl_hpp
10 #define Tempus_StepperNewmarkExplicitAForm_decl_hpp
11 
12 #include "Tempus_config.hpp"
13 #include "Tempus_Stepper.hpp"
14 
15 namespace Tempus {
16 
17 
18 /** \brief Newmark Explicit time stepper. This is the specific case of the
19  * more general Newmark time stepper in the case this stepper is explicit (beta = 0).
20  * Newmark Explicit is hence an explicit time stepper (i.e., no solver used).
21  */
22 template<class Scalar>
23 class StepperNewmarkExplicitAForm : virtual public Tempus::Stepper<Scalar>
24 {
25 public:
26 
27  /// Constructor
29  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
30  Teuchos::RCP<Teuchos::ParameterList> pList = Teuchos::null);
31 
32  /// \name Basic stepper methods
33  //@{
34  virtual void setModel(
35  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
36  virtual void setNonConstModel(
37  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& appModel);
38  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >
39  getModel(){return appModel_;}
40 
41  virtual void setSolver(std::string solverName);
42  virtual void setSolver(
43  Teuchos::RCP<Teuchos::ParameterList> solverPL=Teuchos::null);
44  virtual void setSolver(
45  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver);
46  virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
47  { return Teuchos::null; }
48 
49  virtual void setObserver(
50  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null){}
51 
52  /// Initialize during construction and after changing input parameters.
53  virtual void initialize();
54 
55  /// Take the specified timestep, dt, and return true if successful.
56  virtual void takeStep(
57  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
58 
59  /// Pass initial guess to Newton solver (only relevant for implicit solvers)
60  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
61  {initial_guess_ = initial_guess;}
62 
63  virtual std::string getStepperType() const
64  { return stepperPL_->get<std::string>("Stepper Type"); }
65 
66  /// Get a default (initial) StepperState
67  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState();
68  virtual Scalar getOrder() const {
69  if (gamma_ == 0.5) return 2.0;
70  else return 1.0;
71  }
72  virtual Scalar getOrderMin() const {return 1.0;}
73  virtual Scalar getOrderMax() const {return 2.0;}
74  virtual Scalar getInitTimeStep(
75  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const
76  {return std::numeric_limits<Scalar>::max();}
77 
78  virtual bool isExplicit() const {return true;}
79  virtual bool isImplicit() const {return false;}
80  virtual bool isExplicitImplicit() const
81  {return isExplicit() and isImplicit();}
82  virtual bool isOneStepMethod() const {return true;}
83  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
84  //@}
85 
86  /// \name ParameterList methods
87  //@{
88  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
89  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
90  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
91  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
92  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
93  //@}
94 
95  /// \name Overridden from Teuchos::Describable
96  //@{
97  virtual std::string description() const;
98  virtual void describe(Teuchos::FancyOStream & out,
99  const Teuchos::EVerbosityLevel verbLevel) const;
100  //@}
101 
102  void predictVelocity(Thyra::VectorBase<Scalar>& vPred,
103  const Thyra::VectorBase<Scalar>& v,
104  const Thyra::VectorBase<Scalar>& a,
105  const Scalar dt) const;
106 
107  void predictDisplacement(Thyra::VectorBase<Scalar>& dPred,
108  const Thyra::VectorBase<Scalar>& d,
109  const Thyra::VectorBase<Scalar>& v,
110  const Thyra::VectorBase<Scalar>& a,
111  const Scalar dt) const;
112 
113  void correctVelocity(Thyra::VectorBase<Scalar>& v,
114  const Thyra::VectorBase<Scalar>& vPred,
115  const Thyra::VectorBase<Scalar>& a,
116  const Scalar dt) const;
117 
118 
119 private:
120 
121  /// Default Constructor -- not allowed
122 
123 private:
124 
125  /// Default Constructor -- not allowed
127 
128 protected:
129 
130  Teuchos::RCP<Teuchos::ParameterList> stepperPL_;
131  /// Explicit ODE ModelEvaluator
132  Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > appModel_;
133 
134  Thyra::ModelEvaluatorBase::InArgs<Scalar> inArgs_;
135  Thyra::ModelEvaluatorBase::OutArgs<Scalar> outArgs_;
136 
137  Scalar gamma_;
138 
139  Teuchos::RCP<Teuchos::FancyOStream> out_;
140 
141  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
142 
143 
144 };
145 } // namespace Tempus
146 
147 #endif // Tempus_StepperNewmarkExplicitAForm_decl_hpp
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver (only relevant for implicit solvers)
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const
virtual void setNonConstModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &appModel)
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
void predictVelocity(Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
void predictDisplacement(Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &d, const Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Thyra Base interface for time steppers.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Thyra::ModelEvaluatorBase::OutArgs< Scalar > outArgs_
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
StepperNewmarkExplicitAForm()
Default Constructor – not allowed.
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
virtual void initialize()
Initialize during construction and after changing input parameters.
Newmark Explicit time stepper. This is the specific case of the more general Newmark time stepper in ...
virtual void setSolver(std::string solverName)
Set solver via ParameterList solver name.
StepperObserver class for Stepper class.
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > appModel_
Explicit ODE ModelEvaluator.
Thyra::ModelEvaluatorBase::InArgs< Scalar > inArgs_
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel()
void correctVelocity(Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const