Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_WrapperModelEvaluatorSecondOrder_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_WrapperModelEvaluatorSecondOrder_decl_hpp
10 #define Tempus_WrapperModelEvaluatorSecondOrder_decl_hpp
11 
12 #include <functional>
13 #include "Tempus_config.hpp"
15 #include "Thyra_VectorBase.hpp"
16 
17 //#define VERBOSE_DEBUG_OUTPUT
18 
19 namespace Tempus {
20 
31 template <typename Scalar>
33  : public Tempus::WrapperModelEvaluator<Scalar> {
34  public:
36 
39  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > &appModel,
40  const std::string schemeName)
41  : appModel_(appModel), out_(Teuchos::VerboseObjectBase::getDefaultOStream())
42  {
43 #ifdef VERBOSE_DEBUG_OUTPUT
44  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
45  *out_ << " schemeName = " << schemeName << "\n";
46 #endif
47  if (schemeName == "Newmark Implicit a-Form" || schemeName == "HHT-Alpha") {
49  }
50  else if (schemeName == "Newmark Implicit d-Form") {
52  }
53  else {
55  true, std::logic_error,
56  "Error: WrapperModelEvaluatorSecondOrder called with unsopported "
57  << "schemeName = " << schemeName
58  << "! Supported schemeNames are: 'Newmark Implicit a-Form' and "
59  << "'HHT-Alpha'.\n");
60  }
61  }
62 
65  {
66 #ifdef VERBOSE_DEBUG_OUTPUT
67  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
68 #endif
69  appModel_ = me;
70  }
71 
74  {
75 #ifdef VERBOSE_DEBUG_OUTPUT
76  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
77 #endif
78  return appModel_;
79  }
80 
83  Teuchos::RCP<const Vector> d_pred, Scalar delta_t,
84  Scalar t, Scalar beta, Scalar gamma)
85  {
86 #ifdef VERBOSE_DEBUG_OUTPUT
87  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
88 #endif
89  v_pred_ = v_pred;
90  d_pred_ = d_pred;
91  delta_t_ = delta_t;
92  t_ = t;
93  beta_ = beta;
94  gamma_ = gamma;
95  }
96 
98 
100  {
101 #ifdef VERBOSE_DEBUG_OUTPUT
102  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
103 #endif
104  return appModel_->create_W_op();
105  }
106 
109  {
110 #ifdef VERBOSE_DEBUG_OUTPUT
111  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
112 #endif
113  return appModel_->get_W_factory();
114  }
115 
117  {
118 #ifdef VERBOSE_DEBUG_OUTPUT
119  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
120 #endif
121  return appModel_->get_f_space();
122  }
123 
125  {
126 #ifdef VERBOSE_DEBUG_OUTPUT
127  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
128 #endif
129  return appModel_->get_p_space(p);
130  }
131 
133  {
134 #ifdef VERBOSE_DEBUG_OUTPUT
135  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
136 #endif
137  return appModel_->get_p_names(p);
138  }
139 
141  {
142 #ifdef VERBOSE_DEBUG_OUTPUT
143  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
144 #endif
145  return appModel_->get_x_space();
146  }
147 
149  {
150  return appModel_->get_g_space(i);
151  }
152 
154  {
155 #ifdef VERBOSE_DEBUG_OUTPUT
156  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
157 #endif
158  return appModel_->getNominalValues();
159  }
160 
163  {
164  return wrapperInArgs_;
165  }
166 
169  {
170  return wrapperOutArgs_;
171  }
172 
174  virtual void setForSolve(
176  const Teuchos::RCP<Thyra::VectorBase<Scalar> > &xDot, const Scalar time,
178  const Teuchos::RCP<Thyra::VectorBase<Scalar> > &y = Teuchos::null,
179  const int index = -1 /* index and y are for IMEX_RK_Partition */)
180  {
181  }
182 
185 
186  void evalModelImpl(
188  const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &outArgs) const;
190 
193 
194  private:
197 
198  private:
200  Scalar t_;
201  Scalar gamma_;
202  Scalar beta_;
203  Scalar delta_t_;
208 
212 };
213 
214 } // namespace Tempus
215 
216 #endif // Tempus_WrapperModelEvaluatorSecondOrder_hpp
virtual Thyra::ModelEvaluatorBase::OutArgs< Scalar > getOutArgs()
Get OutArgs the wrapper ModelEvalutor.
Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgsImpl() const
void initializeNewmark(Teuchos::RCP< const Vector > v_pred, Teuchos::RCP< const Vector > d_pred, Scalar delta_t, Scalar t, Scalar beta, Scalar gamma)
Set values needed in evalModelImpl.
void setAppModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &me)
Set the underlying application ModelEvaluator.
virtual void setForSolve(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &x, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xDot, const Scalar time, const Teuchos::RCP< ImplicitODEParameters< Scalar > > &p, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &y=Teuchos::null, const int index=-1)
Set parameters for application implicit ModelEvaluator solve.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getAppModel() const
Get the underlying application model &#39;f&#39;.
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_p_space(int p) const
Get the p space.
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Get the x-solution space.
A ModelEvaluator for residual evaluations given a state. This ModelEvaluator takes a state...
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > appModel_
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
WrapperModelEvaluatorSecondOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const std::string schemeName)
Constructor.
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_f_space() const
A ModelEvaluator which wraps the application ModelEvaluator.
Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_W_op() const
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int p) const
virtual Thyra::ModelEvaluatorBase::InArgs< Scalar > getInArgs()
Get InArgs the wrapper ModelEvalutor.
WrapperModelEvaluatorSecondOrder()
Default constructor - not allowed.
void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_g_space(int i) const
Get the g space.