Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_StepperHHTAlpha_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_StepperHHTAlpha_decl_hpp
10 #define Tempus_StepperHHTAlpha_decl_hpp
11 
12 #include "Tempus_config.hpp"
13 #include "Tempus_StepperImplicit.hpp"
14 #include "Tempus_WrapperModelEvaluatorSecondOrder.hpp"
16 
17 namespace Tempus {
18 
44 template <class Scalar>
45 class StepperHHTAlpha : virtual public Tempus::StepperImplicit<Scalar> {
46  public:
53 
56  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
58  bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck,
59  bool zeroInitialGuess, std::string schemeName, Scalar beta, Scalar gamma,
60  Scalar alpha_f_, Scalar alpha_m_,
62  stepperHHTAlphaAppAction);
63 
65 
66  virtual void setModel(
67  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
68 
69  virtual void setAppAction(
71 
73  {
75  }
76 
78  virtual void setInitialConditions(
79  const Teuchos::RCP<SolutionHistory<Scalar> >& /* solutionHistory */)
80  {
81  }
82 
84  virtual void takeStep(
85  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
86 
89  virtual Scalar getOrder() const
90  {
91  if (gamma_ == 0.5)
92  return 2.0;
93  else
94  return 1.0;
95  }
96  virtual Scalar getOrderMin() const { return 1.0; }
97  virtual Scalar getOrderMax() const { return 2.0; }
98 
99  virtual bool isExplicit() const { return false; }
100  virtual bool isImplicit() const { return true; }
101  virtual bool isExplicitImplicit() const
102  {
103  return isExplicit() && isImplicit();
104  }
105  virtual bool isOneStepMethod() const { return true; }
106  virtual bool isMultiStepMethod() const { return !isOneStepMethod(); }
107  virtual OrderODE getOrderODE() const { return SECOND_ORDER_ODE; }
109 
111  virtual Scalar getW_xDotDot_coeff(const Scalar dt) const
112  {
113  return Scalar(1.0) / (beta_ * dt * dt);
114  }
116  virtual Scalar getAlpha(const Scalar dt) const
117  {
118  return gamma_ / (beta_ * dt);
119  }
121  virtual Scalar getBeta(const Scalar) const { return Scalar(1.0); }
122 
124 
126 
127  virtual void describe(Teuchos::FancyOStream& out,
128  const Teuchos::EVerbosityLevel verbLevel) const;
130 
131  virtual bool isValidSetup(Teuchos::FancyOStream& out) const;
132 
134  const Thyra::VectorBase<Scalar>& v,
135  const Thyra::VectorBase<Scalar>& a,
136  const Scalar dt) const;
137 
139  const Thyra::VectorBase<Scalar>& d,
140  const Thyra::VectorBase<Scalar>& v,
141  const Thyra::VectorBase<Scalar>& a,
142  const Scalar dt) const;
143 
145  const Thyra::VectorBase<Scalar>& v) const;
146 
148  const Thyra::VectorBase<Scalar>& d) const;
149 
151  const Thyra::VectorBase<Scalar>& a_n) const;
152 
154  const Thyra::VectorBase<Scalar>& vPred,
155  const Thyra::VectorBase<Scalar>& a,
156  const Scalar dt) const;
157 
159  const Thyra::VectorBase<Scalar>& dPred,
160  const Thyra::VectorBase<Scalar>& a,
161  const Scalar dt) const;
162 
163  void setSchemeName(std::string schemeName);
164  void setBeta(Scalar beta);
165  void setGamma(Scalar gamma);
166  void setAlphaF(Scalar alpha_f);
167  void setAlphaM(Scalar alpha_m);
168 
169  private:
171 
172  std::string schemeName_;
173  Scalar beta_;
174  Scalar gamma_;
175  Scalar alpha_f_;
176  Scalar alpha_m_;
177 
179 };
180 
182 // ------------------------------------------------------------------------
183 template <class Scalar>
185  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model,
187 
188 } // namespace Tempus
189 
190 #endif // Tempus_StepperHHTAlpha_decl_hpp
void correctDisplacement(Thyra::VectorBase< Scalar > &d, const Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
virtual Scalar getW_xDotDot_coeff(const Scalar dt) const
Return W_xDotxDot_coeff = d(xDotDot)/d(x).
virtual Teuchos::RCP< StepperHHTAlphaAppAction< Scalar > > getAppAction() const
virtual bool isExplicitImplicit() const
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
void correctVelocity(Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
virtual OrderODE getOrderODE() const
virtual Scalar getOrderMin() const
void correctAcceleration(Thyra::VectorBase< Scalar > &a_n_plus1, const Thyra::VectorBase< Scalar > &a_n) const
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
StepperHHTAlpha()
Default constructor.
Stepper integrates second-order ODEs.
virtual Scalar getAlpha(const Scalar dt) const
Return alpha = d(xDot)/d(x).
Thyra Base interface for implicit time steppers.
void predictVelocity_alpha_f(Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &v) const
void setSchemeName(std::string schemeName)
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
void predictDisplacement_alpha_f(Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &d) const
virtual Scalar getBeta(const Scalar) const
Return beta = d(x)/d(x).
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
virtual Scalar getOrderMax() const
Teuchos::RCP< StepperHHTAlpha< Scalar > > createStepperHHTAlpha(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< Teuchos::FancyOStream > out_
void predictVelocity(Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &)
Set the initial conditions and make them consistent.
virtual void setAppAction(Teuchos::RCP< StepperHHTAlphaAppAction< Scalar > > appAction)
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Set the model.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Teuchos::RCP< StepperHHTAlphaAppAction< Scalar > > stepperHHTAlphaAppAction_