Tempus  Version of the Day
Time Integration
Tempus_StepperNewmarkImplicitDForm_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_StepperNewmarkImplicitDForm_decl_hpp
10 #define Tempus_StepperNewmarkImplicitDForm_decl_hpp
11 
12 #include "Tempus_WrapperModelEvaluatorSecondOrder.hpp"
13 #include "Tempus_StepperImplicit.hpp"
14 
15 namespace Tempus {
16 
17 /** \brief Newmark time stepper.
18  *
19  * Here, we implement the Newmark scheme in displacement predictor/corrector
20  * form; see equations (34)-(35) in: A. Mota, W. Klug, M. Ortiz,
21  * "Finite element simulation of firearm injury to the human cranium",
22  * Computational Mechanics 31(1) 115-121 (2003).
23  *
24  * Newmark has two parameters: \f$\beta\f$
25  * and \f$\gamma\f$, both of which need to be in the range \f$[0,1]\f$.
26  * Newmark can be an explicit or implicit method, depending on
27  * the value of the \f$\beta\f$ parameter. If \f$\beta = 0\f$, the method
28  * is explicit; but note that the d-form of the Newmark scheme is not defined
29  * for the explicit case.
30  *
31  * Newmark is second order accurate if \f$\gamma = 0.5\f$; otherwise it
32  * is first order
33  * accurate. Some additional properties about the Newmark Beta scheme
34  * can be found <a
35  * href="http://opensees.berkeley.edu/wiki/index.php/Newmark_Method">here</a>.
36  */
37 template <class Scalar>
38 class StepperNewmarkImplicitDForm : virtual public Tempus::StepperImplicit<Scalar> {
39  public:
40  /// Constructor
42  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>& appModel,
43  Teuchos::RCP<Teuchos::ParameterList> pList = Teuchos::null);
44 
45  /// \name Basic stepper methods
46  //@{
47  virtual void
48  setModel(const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>& appModel);
49 
50  virtual void setObserver(
51  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null){}
52 
53  /// Initialize during construction and after changing input parameters.
54  virtual void
55  initialize();
56 
57  /// Take the specified timestep, dt, and return true if successful.
58  virtual void
59  takeStep(const Teuchos::RCP<SolutionHistory<Scalar>>& solutionHistory);
60 
61  /// Pass initial guess to Newton solver
62  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
63  {initial_guess_ = initial_guess;}
64 
65  /// Get a default (initial) StepperState
66  virtual Teuchos::RCP<Tempus::StepperState<Scalar>>
68  virtual Scalar
69  getOrder() const {
70  if (gamma_ == 0.5)
71  return 2.0;
72  else
73  return 1.0;
74  }
75  virtual Scalar
76  getOrderMin() const {
77  return 1.0;
78  }
79  virtual Scalar
80  getOrderMax() const {
81  return 2.0;
82  }
83  virtual bool isExplicit() const {return false;}
84  virtual bool isImplicit() const {return true;}
85  virtual bool isExplicitImplicit() const
86  {return isExplicit() and isImplicit();}
87  virtual bool isOneStepMethod() const {return true;}
88  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
89  //@}
90 
91  /// \name ParameterList methods
92  //@{
93  void
94  setParameterList(const Teuchos::RCP<Teuchos::ParameterList>& pl);
95  Teuchos::RCP<Teuchos::ParameterList>
97  Teuchos::RCP<Teuchos::ParameterList>
99  Teuchos::RCP<const Teuchos::ParameterList>
100  getValidParameters() const;
101  Teuchos::RCP<Teuchos::ParameterList>
102  getDefaultParameters() const;
103  //@}
104 
105  /// \name Overridden from Teuchos::Describable
106  //@{
107  virtual std::string
108  description() const;
109  virtual void
110  describe(Teuchos::FancyOStream& out, const Teuchos::EVerbosityLevel verbLevel)
111  const;
112  //@}
113 
114  void
116  Thyra::VectorBase<Scalar>& vPred, const Thyra::VectorBase<Scalar>& v,
117  const Thyra::VectorBase<Scalar>& a, const Scalar dt) const;
118 
119  void
121  Thyra::VectorBase<Scalar>& dPred, const Thyra::VectorBase<Scalar>& d,
122  const Thyra::VectorBase<Scalar>& v, const Thyra::VectorBase<Scalar>& a,
123  const Scalar dt) const;
124 
125  void
127  Thyra::VectorBase<Scalar>& v, const Thyra::VectorBase<Scalar>& vPred,
128  const Thyra::VectorBase<Scalar>& a, const Scalar dt) const;
129 
130  void
132  Thyra::VectorBase<Scalar>& d, const Thyra::VectorBase<Scalar>& dPred,
133  const Thyra::VectorBase<Scalar>& a, const Scalar dt) const;
134 
135  void
137  Thyra::VectorBase<Scalar>& a, const Thyra::VectorBase<Scalar>& dPred,
138  const Thyra::VectorBase<Scalar>& d, const Scalar dt) const;
139 
140  private:
141  /// Default Constructor -- not allowed
143 
144  private:
145 
146  Thyra::ModelEvaluatorBase::InArgs<Scalar> inArgs_;
147  Thyra::ModelEvaluatorBase::OutArgs<Scalar> outArgs_;
148 
149  Scalar beta_;
150  Scalar gamma_;
151 
152  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
153 
154  Teuchos::RCP<Teuchos::FancyOStream> out_;
155 };
156 } // namespace Tempus
157 
158 #endif // Tempus_StepperNewmarkImplicitDForm_decl_hpp
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Thyra::ModelEvaluatorBase::OutArgs< Scalar > outArgs_
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual void initialize()
Initialize during construction and after changing input parameters.
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
void correctVelocity(Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
Thyra::ModelEvaluatorBase::InArgs< Scalar > inArgs_
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Thyra Base interface for implicit time steppers.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar >> &solutionHistory)
Take the specified timestep, dt, and return true if successful.
void correctDisplacement(Thyra::VectorBase< Scalar > &d, const Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
void predictVelocity(Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
StepperObserver class for Stepper class.
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
void correctAcceleration(Thyra::VectorBase< Scalar > &a, const Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &d, const Scalar dt) const
StepperNewmarkImplicitDForm()
Default Constructor – not allowed.
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >> &appModel)