Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_WrapperModelEvaluatorPairPartIMEX_Basic_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_ModelEvaluatorPairPartIMEX_Basic_decl_hpp
10 #define Tempus_ModelEvaluatorPairPartIMEX_Basic_decl_hpp
11 
12 #include "Tempus_config.hpp"
14 #include "Thyra_StateFuncModelEvaluatorBase.hpp"
15 
16 namespace Tempus {
17 
36 template <typename Scalar>
38  : public Tempus::WrapperModelEvaluatorPairIMEX<Scalar> {
39  public:
43 
46  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& explicitModel,
47  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& implicitModel,
48  int numExplicitOnlyBlocks = 0, int parameterIndex = -1);
49 
52 
54  virtual void initialize();
55 
57 
58  virtual void setAppModel(
61  const;
62 
65  {
67  }
68 
71  {
73  }
74 
78  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xDot, const Scalar time,
80  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& y = Teuchos::null,
81  const int index = -1 /* index and y are for IMEX_RK_Partition */)
82  {
83  timeDer_ = p->timeDer_;
84 
85  typedef Thyra::ModelEvaluatorBase MEB;
86  MEB::InArgs<Scalar> inArgs = this->createInArgs();
87  MEB::OutArgs<Scalar> outArgs = this->createOutArgs();
88  inArgs.set_x(x);
89  if (y != Teuchos::null) inArgs.set_p(index, y);
90  if (inArgs.supports(MEB::IN_ARG_x_dot)) inArgs.set_x_dot(xDot);
91  if (inArgs.supports(MEB::IN_ARG_t)) inArgs.set_t(time);
92  if (inArgs.supports(MEB::IN_ARG_step_size))
93  inArgs.set_step_size(p->timeStepSize_);
94  if (inArgs.supports(MEB::IN_ARG_alpha)) inArgs.set_alpha(p->alpha_);
95  if (inArgs.supports(MEB::IN_ARG_beta)) inArgs.set_beta(p->beta_);
96  if (inArgs.supports(MEB::IN_ARG_stage_number))
97  inArgs.set_stage_number(p->stageNumber_);
98 
99  wrapperImplicitInArgs_.setArgs(inArgs);
100  wrapperImplicitOutArgs_.setArgs(outArgs);
101 
102  useImplicitModel_ = true;
103  }
104 
106 
108 
111  const;
112 
115  int i) const;
116 
119  int i) const;
121 
123  virtual void setNumExplicitOnlyBlocks(int numExp)
124  {
125  numExplicitOnlyBlocks_ = numExp;
126  }
127  virtual void setExplicitModel(
128  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model)
129  {
130  explicitModel_ = model;
131  }
132  virtual void setImplicitModel(
133  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
135  const
136  {
137  return explicitModel_;
138  }
140  const
141  {
142  return implicitModel_;
143  }
144  virtual int getNumExplicitOnlyBlocks() const
145  {
146  return numExplicitOnlyBlocks_;
147  }
148 
151  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& full) const;
152 
155  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& full) const;
156 
159  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& full) const;
160 
163  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& full) const;
164 
166  virtual void setParameterIndex(int parameterIndex = -1);
168  virtual int getParameterIndex() const { return parameterIndex_; }
169 
172  virtual void setUseImplicitModel(bool tf) { useImplicitModel_ = tf; }
175  virtual bool getUseImplicitModel() const { return useImplicitModel_; }
177 
179 
181  {
182  return implicitModel_->create_W_op();
183  }
184 
187  {
188  return implicitModel_->get_W_factory();
189  }
190 
192  const;
193 
197 
198  virtual void evalModelImpl(
202 
203  protected:
205  void setup(
206  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& explicitModel,
207  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& implicitModel,
208  int numExplicitOnlyBlocks = 0, int parameterIndex = -1);
209 
212 
216 
220 };
221 
222 } // namespace Tempus
223 
224 #endif // Tempus_ModelEvaluatorPairPartIMEX_Basic_decl_hpp
virtual ModelEvaluatorBase::OutArgs< Scalar > createOutArgs() const =0
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getAppModel() const
Get the underlying application ModelEvaluator.
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_g_space(int i) const
Get the g space.
virtual void setExplicitModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
virtual int getParameterIndex() const
Get the parameter index for explicit-only vector.
ModelEvaluator pair for implicit and explicit (IMEX) evaluations.
virtual Thyra::ModelEvaluatorBase::InArgs< Scalar > getInArgs()
Get InArgs the wrapper ModelEvalutor.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getExplicitOnlyVector(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &full) const
Extract explicit-only vector from a full solution vector.
virtual Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
virtual void setParameterIndex(int parameterIndex=-1)
Set the parameter index for explicit-only vector.
virtual Thyra::ModelEvaluatorBase::OutArgs< Scalar > getOutArgs()
Get OutArgs the wrapper ModelEvalutor.
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Get the x-solution space.
ModelEvaluator pair for implicit and explicit (IMEX) evaulations.
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getImplicitModel() const
virtual Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
void setup(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &explicitModel, const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &implicitModel, int numExplicitOnlyBlocks=0, int parameterIndex=-1)
Setup ME when using default constructor – for derived classes.
virtual Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgsImpl() const
virtual void setImplicitModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
virtual void setAppModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &me)
Set the underlying application ModelEvaluator.
virtual Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_W_op() const
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getIMEXVector(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &full) const
Extract IMEX vector from a full solution vector.
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getExplicitModel() const
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_f_space() const
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_p_space(int i) const
Get the p space.
virtual void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &in, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &out) const
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.