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
Tempus::StepperNewmarkImplicitDForm::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:83
Tempus::StepperNewmarkImplicitDForm::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:88
Tempus::StepperNewmarkImplicitDForm::StepperNewmarkImplicitDForm
StepperNewmarkImplicitDForm()
Default Constructor – not allowed.
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperNewmarkImplicitDForm::correctDisplacement
void correctDisplacement(Thyra::VectorBase< Scalar > &d, const Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:70
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperNewmarkImplicitDForm::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:400
Tempus::StepperNewmarkImplicitDForm::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:484
Tempus::StepperNewmarkImplicitDForm::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:87
Tempus::StepperNewmarkImplicitDForm::description
virtual std::string description() const
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:378
Tempus::StepperNewmarkImplicitDForm::setInitialGuess
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:62
Tempus::StepperNewmarkImplicitDForm::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:50
Tempus::StepperNewmarkImplicitDForm::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:80
Tempus::StepperNewmarkImplicitDForm::correctAcceleration
void correctAcceleration(Thyra::VectorBase< Scalar > &a, const Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &d, const Scalar dt) const
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:82
Tempus::StepperNewmarkImplicitDForm::predictDisplacement
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
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:40
Tempus::StepperNewmarkImplicitDForm::gamma_
Scalar gamma_
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:150
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperNewmarkImplicitDForm::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar >> &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:145
Tempus::StepperNewmarkImplicitDForm::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:499
Tempus::StepperNewmarkImplicitDForm::out_
Teuchos::RCP< Teuchos::FancyOStream > out_
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:154
Tempus::StepperNewmarkImplicitDForm::inArgs_
Thyra::ModelEvaluatorBase::InArgs< Scalar > inArgs_
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:146
Tempus::StepperNewmarkImplicitDForm::beta_
Scalar beta_
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:149
Tempus::StepperNewmarkImplicitDForm::setModel
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >> &appModel)
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:113
Tempus::StepperImplicit
Thyra Base interface for implicit time steppers.
Definition: Tempus_StepperImplicit_decl.hpp:24
Tempus::StepperNewmarkImplicitDForm::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:388
Tempus::StepperNewmarkImplicitDForm::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:76
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::StepperNewmarkImplicitDForm::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:529
Tempus::StepperNewmarkImplicitDForm
Newmark time stepper.
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:38
Tempus::StepperNewmarkImplicitDForm::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:84
Tempus::StepperNewmarkImplicitDForm::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:152
Tempus::StepperNewmarkImplicitDForm::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:129
Tempus::StepperNewmarkImplicitDForm::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:520
Tempus::StepperNewmarkImplicitDForm::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:69
Tempus::StepperNewmarkImplicitDForm::correctVelocity
void correctVelocity(Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:58
Tempus::StepperNewmarkImplicitDForm::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:85
Tempus::StepperNewmarkImplicitDForm::outArgs_
Thyra::ModelEvaluatorBase::OutArgs< Scalar > outArgs_
Definition: Tempus_StepperNewmarkImplicitDForm_decl.hpp:147
Tempus::StepperNewmarkImplicitDForm::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:367
Tempus::StepperNewmarkImplicitDForm::predictVelocity
void predictVelocity(Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
Definition: Tempus_StepperNewmarkImplicitDForm_impl.hpp:28