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