Tempus  Version of the Day
Time Integration
Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.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_IntegratorPseudoTransientAdjointSensitivity_impl_hpp
10 #define Tempus_IntegratorPseudoTransientAdjointSensitivity_impl_hpp
11 
12 #include "Teuchos_VerboseObjectParameterListHelpers.hpp"
13 #include "Thyra_DefaultMultiVectorProductVector.hpp"
14 #include "Thyra_VectorStdOps.hpp"
15 #include "Thyra_MultiVectorStdOps.hpp"
16 #include "NOX_Thyra.H"
17 
18 namespace Tempus {
19 
20 template<class Scalar>
23  Teuchos::RCP<Teuchos::ParameterList> inputPL,
24  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model)
25 {
26  model_ = model;
27  state_integrator_ = integratorBasic<Scalar>(inputPL, model_);
28  sens_model_ = createSensitivityModel(model_, inputPL);
29  sens_integrator_ = integratorBasic<Scalar>(inputPL, sens_model_);
30 }
31 
32 template<class Scalar>
35  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
36  std::string stepperType)
37 {
38  model_ = model;
39  state_integrator_ = integratorBasic<Scalar>(model_, stepperType);
40  sens_model_ = createSensitivityModel(model, Teuchos::null);
41  sens_integrator_ = integratorBasic<Scalar>(sens_model_, stepperType);
42 }
43 
44 template<class Scalar>
47 {
48  state_integrator_ = integratorBasic<Scalar>();
49  sens_integrator_ = integratorBasic<Scalar>();
50 }
51 
52 template<class Scalar>
53 bool
56 {
57  const Scalar tfinal =
58  state_integrator_->getTimeStepControl()->getFinalTime();
59  return advanceTime(tfinal);
60 }
61 
62 template<class Scalar>
63 bool
65 advanceTime(const Scalar timeFinal)
66 {
67  using Teuchos::RCP;
68  using Thyra::VectorBase;
69  typedef Thyra::ModelEvaluatorBase MEB;
70 
71  // Run state integrator and get solution
72  bool state_status = state_integrator_->advanceTime(timeFinal);
73 
74  // Set solution in sensitivity ME
75  sens_model_->setForwardSolutionHistory(
76  state_integrator_->getSolutionHistory());
77 
78  // Run sensitivity integrator
79  bool sens_status = sens_integrator_->advanceTime(timeFinal);
80 
81  // Compute final dg/dp which is computed by response 0 of the adjoint
82  // model evaluator
83  MEB::InArgs<Scalar> inargs = sens_model_->getNominalValues();
84  MEB::OutArgs<Scalar> outargs = sens_model_->createOutArgs();
85  inargs.set_t(sens_integrator_->getTime());
86  inargs.set_x(sens_integrator_->getX());
87  if (inargs.supports(MEB::IN_ARG_x_dot))
88  inargs.set_x_dot(sens_integrator_->getXdot());
89  if (inargs.supports(MEB::IN_ARG_x_dot_dot))
90  inargs.set_x_dot_dot(sens_integrator_->getXdotdot());
91  RCP<VectorBase<Scalar> > G = dgdp_;
92  if (G == Teuchos::null) {
93  G = Thyra::createMember(sens_model_->get_g_space(0));
94  dgdp_ = Teuchos::rcp_dynamic_cast<DMVPV>(G);
95  }
96  outargs.set_g(0, G);
97  sens_model_->evalModel(inargs, outargs);
98 
99  buildSolutionHistory();
100 
101  return state_status && sens_status;
102 }
103 
104 template<class Scalar>
105 Scalar
107 getTime() const
108 {
109  return solutionHistory_->getCurrentTime();
110 }
111 
112 template<class Scalar>
113 Scalar
115 getIndex() const
116 {
117  return solutionHistory_->getCurrentIndex();
118 }
119 
120 template<class Scalar>
121 Status
123 getStatus() const
124 {
125  Status state_status = state_integrator_->getStatus();
126  Status sens_status = sens_integrator_->getStatus();
127  if (state_status == FAILED || sens_status == FAILED)
128  return FAILED;
129  if (state_status == WORKING || sens_status == WORKING)
130  return WORKING;
131  return PASSED;
132 }
133 
134 template<class Scalar>
135 Teuchos::RCP<Stepper<Scalar> >
137 getStepper() const
138 {
139  return state_integrator_->getStepper();
140 }
141 
142 template<class Scalar>
143 Teuchos::RCP<Teuchos::ParameterList>
146 {
147  return state_integrator_->getTempusParameterList();
148 }
149 
150 template<class Scalar>
151 void
153 setTempusParameterList(Teuchos::RCP<Teuchos::ParameterList> pl)
154 {
155  state_integrator_->setTempusParameterList(pl);
156  sens_integrator_->setTempusParameterList(pl);
157 }
158 
159 template<class Scalar>
160 Teuchos::RCP<const SolutionHistory<Scalar> >
163 {
164  return solutionHistory_;
165 }
166 
167 template<class Scalar>
168 Teuchos::RCP<const TimeStepControl<Scalar> >
171 {
172  return state_integrator_->getTimeStepControl();
173 }
174 
175 template<class Scalar>
177 setInitialState(Scalar t0,
178  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
179  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0,
180  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0,
181  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > y0,
182  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > ydot0,
183  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > ydotdot0)
184 {
185  using Teuchos::RCP;
186  using Teuchos::rcp_dynamic_cast;
187  using Thyra::VectorSpaceBase;
188  using Thyra::assign;
189  using Thyra::createMember;
190  typedef Thyra::DefaultMultiVectorProductVector<Scalar> DMVPV;
191 
192  //
193  // Create and initialize product X, Xdot, Xdotdot
194 
195  RCP< const VectorSpaceBase<Scalar> > space = sens_model_->get_x_space();
196  RCP<DMVPV> Y = rcp_dynamic_cast<DMVPV>(createMember(space));
197  RCP<DMVPV> Ydot = rcp_dynamic_cast<DMVPV>(createMember(space));
198  RCP<DMVPV> Ydotdot = rcp_dynamic_cast<DMVPV>(createMember(space));
199  const Scalar zero = Teuchos::ScalarTraits<Scalar>::zero();
200 
201  // y
202  if (y0 == Teuchos::null)
203  assign(Y->getNonconstMultiVector().ptr(), zero);
204  else
205  assign(Y->getNonconstMultiVector().ptr(), *y0);
206 
207  // ydot
208  if (ydot0 == Teuchos::null)
209  assign(Ydot->getNonconstMultiVector().ptr(), zero);
210  else
211  assign(Ydot->getNonconstMultiVector().ptr(), *ydot0);
212 
213  // ydotdot
214  if (ydotdot0 == Teuchos::null)
215  assign(Ydotdot->getNonconstMultiVector().ptr(), zero);
216  else
217  assign(Ydotdot->getNonconstMultiVector().ptr(), *ydotdot0);
218 
219  state_integrator_->setInitialState(t0, x0, xdot0, xdotdot0);
220  sens_integrator_->setInitialState(t0, Y, Ydot, Ydotdot);
221 }
222 
223 template<class Scalar>
224 Teuchos::RCP<const Thyra::VectorBase<Scalar> >
226 getX() const
227 {
228  return state_integrator_->getX();
229 }
230 
231 template<class Scalar>
232 Teuchos::RCP<const Thyra::VectorBase<Scalar> >
234 getXdot() const
235 {
236  return state_integrator_->getXdot();
237 }
238 
239 template<class Scalar>
240 Teuchos::RCP<const Thyra::VectorBase<Scalar> >
242 getXdotdot() const
243 {
244  return state_integrator_->getXdotdot();
245 }
246 
247 template<class Scalar>
248 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> >
250 getDgDp() const
251 {
252  return dgdp_->getMultiVector();
253 }
254 
255 template<class Scalar>
256 std::string
258 description() const
259 {
260  std::string name = "Tempus::IntegratorPseudoTransientAdjointSensitivity";
261  return(name);
262 }
263 
264 template<class Scalar>
265 void
268  Teuchos::FancyOStream &out,
269  const Teuchos::EVerbosityLevel verbLevel) const
270 {
271  out << description() << "::describe" << std::endl;
272  state_integrator_->describe(out, verbLevel);
273  sens_integrator_->describe(out, verbLevel);
274 }
275 
276 template<class Scalar>
277 void
279 setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & inputPL)
280 {
281  state_integrator_->setParameterList(inputPL);
282  sens_integrator_->setParameterList(inputPL);
283 }
284 
285 template<class Scalar>
286 Teuchos::RCP<Teuchos::ParameterList>
289 {
290  state_integrator_->unsetParameterList();
291  return sens_integrator_->unsetParameterList();
292 }
293 
294 template<class Scalar>
295 Teuchos::RCP<const Teuchos::ParameterList>
298 {
299  Teuchos::RCP<Teuchos::ParameterList> pl =
300  Teuchos::rcp(new Teuchos::ParameterList);
301  Teuchos::RCP<const Teuchos::ParameterList> integrator_pl =
302  state_integrator_->getValidParameters();
303  Teuchos::RCP<const Teuchos::ParameterList> sensitivity_pl =
305  pl->setParameters(*integrator_pl);
306  pl->sublist("Sensitivities").setParameters(*sensitivity_pl);
307 
308  return pl;
309 }
310 
311 template<class Scalar>
312 Teuchos::RCP<Teuchos::ParameterList>
315 {
316  return state_integrator_->getNonconstParameterList();
317 }
318 
319 template <class Scalar>
320 Teuchos::RCP<Tempus::AdjointSensitivityModelEvaluator<Scalar> >
323  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
324  const Teuchos::RCP<Teuchos::ParameterList>& inputPL)
325 {
326  using Teuchos::rcp;
327 
328  Teuchos::RCP<Teuchos::ParameterList> pl = Teuchos::parameterList();
329  if (inputPL != Teuchos::null) {
330  *pl = inputPL->sublist("Sensitivities");
331  }
332  const Scalar tfinal = state_integrator_->getTimeStepControl()->getFinalTime();
334  model, tfinal, true, pl));
335 }
336 
337 template<class Scalar>
338 void
341 {
342  using Teuchos::RCP;
343  using Teuchos::rcp;
344  using Teuchos::rcp_dynamic_cast;
345  using Teuchos::ParameterList;
346  using Thyra::VectorBase;
347  using Thyra::VectorSpaceBase;
348  using Thyra::assign;
349  using Thyra::defaultProductVector;
350  typedef Thyra::DefaultProductVector<Scalar> DPV;
351  typedef Thyra::DefaultProductVectorSpace<Scalar> DPVS;
352 
353  // Create combined solution histories, first for the states with zero
354  // adjoint and then for the adjoint with frozen states
355  RCP<ParameterList> shPL =
356  Teuchos::sublist(state_integrator_->getIntegratorParameterList(),
357  "Solution History", true);
358  solutionHistory_ = rcp(new SolutionHistory<Scalar>(shPL));
359 
360  RCP<const VectorSpaceBase<Scalar> > x_space =
361  model_->get_x_space();
362  RCP<const VectorSpaceBase<Scalar> > adjoint_space =
363  sens_model_->get_x_space();
364  Teuchos::Array< RCP<const VectorSpaceBase<Scalar> > > spaces(2);
365  spaces[0] = x_space;
366  spaces[1] = adjoint_space;
367  RCP<const DPVS > prod_space = Thyra::productVectorSpace(spaces());
368  const Scalar zero = Teuchos::ScalarTraits<Scalar>::zero();
369 
370  RCP<const SolutionHistory<Scalar> > state_solution_history =
371  state_integrator_->getSolutionHistory();
372  int num_states = state_solution_history->getNumStates();
373  for (int i=0; i<num_states; ++i) {
374  RCP<const SolutionState<Scalar> > state = (*state_solution_history)[i];
375 
376  // X
377  RCP<DPV> x = defaultProductVector(prod_space);
378  assign(x->getNonconstVectorBlock(0).ptr(), *(state->getX()));
379  assign(x->getNonconstVectorBlock(1).ptr(), zero);
380  RCP<VectorBase<Scalar> > x_b = x;
381 
382  // X-Dot
383  RCP<VectorBase<Scalar> > x_dot_b;
384  if (state->getXDot() != Teuchos::null) {
385  RCP<DPV> x_dot = defaultProductVector(prod_space);
386  assign(x_dot->getNonconstVectorBlock(0).ptr(), *(state->getXDot()));
387  assign(x_dot->getNonconstVectorBlock(1).ptr(), zero);
388  x_dot_b = x_dot;
389  }
390 
391  // X-Dot-Dot
392  RCP<VectorBase<Scalar> > x_dot_dot_b;
393  if (state->getXDotDot() != Teuchos::null) {
394  RCP<DPV> x_dot_dot = defaultProductVector(prod_space);
395  assign(x_dot_dot->getNonconstVectorBlock(0).ptr(),*(state->getXDotDot()));
396  assign(x_dot_dot->getNonconstVectorBlock(1).ptr(), zero);
397  x_dot_dot_b = x_dot_dot;
398  }
399 
400  RCP<SolutionState<Scalar> > prod_state =
401  rcp(new SolutionState<Scalar>(state->getMetaData()->clone(),
402  x_b, x_dot_b, x_dot_dot_b,
403  state->getStepperState()->clone()));
404  solutionHistory_->addState(prod_state);
405  }
406 
407  RCP<const VectorBase<Scalar> > frozen_x =
408  state_solution_history->getCurrentState()->getX();
409  RCP<const VectorBase<Scalar> > frozen_x_dot =
410  state_solution_history->getCurrentState()->getXDot();
411  RCP<const VectorBase<Scalar> > frozen_x_dot_dot =
412  state_solution_history->getCurrentState()->getXDotDot();
413  RCP<const SolutionHistory<Scalar> > sens_solution_history =
414  sens_integrator_->getSolutionHistory();
415  num_states = sens_solution_history->getNumStates();
416  for (int i=0; i<num_states; ++i) {
417  RCP<const SolutionState<Scalar> > state = (*sens_solution_history)[i];
418 
419  // X
420  RCP<DPV> x = defaultProductVector(prod_space);
421  assign(x->getNonconstVectorBlock(0).ptr(), *frozen_x);
422  assign(x->getNonconstVectorBlock(1).ptr(), *(state->getX()));
423  RCP<VectorBase<Scalar> > x_b = x;
424 
425  // X-Dot
426  RCP<VectorBase<Scalar> > x_dot_b;
427  if (state->getXDot() != Teuchos::null) {
428  RCP<DPV> x_dot = defaultProductVector(prod_space);
429  assign(x_dot->getNonconstVectorBlock(0).ptr(), *frozen_x_dot);
430  assign(x_dot->getNonconstVectorBlock(1).ptr(), *(state->getXDot()));
431  x_dot_b = x_dot;
432  }
433 
434  // X-Dot-Dot
435  RCP<VectorBase<Scalar> > x_dot_dot_b;
436  if (state->getXDotDot() != Teuchos::null) {
437  RCP<DPV> x_dot_dot = defaultProductVector(prod_space);
438  assign(x_dot_dot->getNonconstVectorBlock(0).ptr(), *frozen_x_dot_dot);
439  assign(x_dot_dot->getNonconstVectorBlock(1).ptr(),*(state->getXDotDot()));
440  x_dot_dot_b = x_dot_dot;
441  }
442 
443  RCP<SolutionState<Scalar> > prod_state =
444  rcp(new SolutionState<Scalar>(state->getMetaData()->clone(),
445  x_b, x_dot_b, x_dot_dot_b,
446  state->getStepperState()->clone()));
447  solutionHistory_->addState(prod_state);
448  }
449 }
450 
451 /// Non-member constructor
452 template<class Scalar>
453 Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
455  Teuchos::RCP<Teuchos::ParameterList> pList,
456  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model)
457 {
458  Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> > integrator =
459  Teuchos::rcp(new Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar>(pList, model));
460  return(integrator);
461 }
462 
463 /// Non-member constructor
464 template<class Scalar>
465 Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
467  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
468  std::string stepperType)
469 {
470  Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> > integrator =
471  Teuchos::rcp(new Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar>(model, stepperType));
472  return(integrator);
473 }
474 
475 /// Non-member constructor
476 template<class Scalar>
477 Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
479 {
480  Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> > integrator =
482  return(integrator);
483 }
484 
485 } // namespace Tempus
486 #endif // Tempus_IntegratorPseudoTransientAdjointSensitivity_impl_hpp
Tempus::IntegratorPseudoTransientAdjointSensitivity::setInitialState
virtual void setInitialState(Scalar t0, Teuchos::RCP< const Thyra::VectorBase< Scalar > > x0, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdot0=Teuchos::null, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdotdot0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > y0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > ydot0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > ydotdot0=Teuchos::null)
Set the initial state from Thyra::VectorBase(s)
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:177
Tempus::IntegratorPseudoTransientAdjointSensitivity::getStatus
virtual Status getStatus() const override
Get Status.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:123
Tempus::IntegratorPseudoTransientAdjointSensitivity::getXdot
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXdot() const
Get current the time derivative of the solution, xdot.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:234
Tempus::WORKING
Definition: Tempus_Types.hpp:19
Tempus::IntegratorPseudoTransientAdjointSensitivity::describe
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:267
Tempus::IntegratorPseudoTransientAdjointSensitivity::getDgDp
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:250
Tempus::IntegratorPseudoTransientAdjointSensitivity::setTempusParameterList
virtual void setTempusParameterList(Teuchos::RCP< Teuchos::ParameterList > pl) override
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:153
Tempus::IntegratorPseudoTransientAdjointSensitivity::getXdotdot
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXdotdot() const
Get current the second time derivative of the solution, xdotdot.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:242
Tempus::IntegratorPseudoTransientAdjointSensitivity::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList() override
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:288
Tempus::IntegratorPseudoTransientAdjointSensitivity::description
std::string description() const override
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:258
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::IntegratorPseudoTransientAdjointSensitivity::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:297
Tempus::AdjointSensitivityModelEvaluator
ModelEvaluator for forming adjoint sensitivity equations.
Definition: Tempus_AdjointSensitivityModelEvaluator_decl.hpp:53
Tempus::SolutionState
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...
Definition: Tempus_SolutionState_decl.hpp:56
Tempus::IntegratorPseudoTransientAdjointSensitivity::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList() override
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:314
Tempus::PASSED
Definition: Tempus_Types.hpp:17
Tempus::IntegratorPseudoTransientAdjointSensitivity::IntegratorPseudoTransientAdjointSensitivity
IntegratorPseudoTransientAdjointSensitivity()
Destructor.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:46
Tempus::IntegratorPseudoTransientAdjointSensitivity::createSensitivityModel
Teuchos::RCP< AdjointSensitivityModelEvaluator< Scalar > > createSensitivityModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< Teuchos::ParameterList > &inputPL)
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:322
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::IntegratorPseudoTransientAdjointSensitivity::getIndex
virtual Scalar getIndex() const override
Get current index.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:115
Tempus::IntegratorPseudoTransientAdjointSensitivity::getSolutionHistory
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:162
Tempus::IntegratorPseudoTransientAdjointSensitivity::getTimeStepControl
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:170
Tempus::FAILED
Definition: Tempus_Types.hpp:18
Tempus::IntegratorPseudoTransientAdjointSensitivity::getTempusParameterList
virtual Teuchos::RCP< Teuchos::ParameterList > getTempusParameterList() override
Return a copy of the Tempus ParameterList.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:145
Tempus::AdjointSensitivityModelEvaluator::getValidParameters
static Teuchos::RCP< const Teuchos::ParameterList > getValidParameters()
Definition: Tempus_AdjointSensitivityModelEvaluator_impl.hpp:485
Tempus::IntegratorPseudoTransientAdjointSensitivity::advanceTime
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:55
Tempus::IntegratorPseudoTransientAdjointSensitivity::getX
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get current the solution, x.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:226
Tempus::IntegratorPseudoTransientAdjointSensitivity::getStepper
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:137
Tempus::IntegratorPseudoTransientAdjointSensitivity
Time integrator suitable for pseudotransient adjoint sensitivity analysis.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_decl.hpp:51
Tempus::IntegratorPseudoTransientAdjointSensitivity::DMVPV
Thyra::DefaultMultiVectorProductVector< Scalar > DMVPV
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_decl.hpp:159
Tempus::IntegratorPseudoTransientAdjointSensitivity::buildSolutionHistory
void buildSolutionHistory()
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:340
Tempus::integratorPseudoTransientAdjointSensitivity
Teuchos::RCP< Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar > > integratorPseudoTransientAdjointSensitivity(Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model)
Non-member constructor.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:454
Tempus::Status
Status
Status for the Integrator, the Stepper and the SolutionState.
Definition: Tempus_Types.hpp:16
Tempus::IntegratorPseudoTransientAdjointSensitivity::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl) override
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:279
Tempus::IntegratorPseudoTransientAdjointSensitivity::getTime
virtual Scalar getTime() const override
Get current time.
Definition: Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp:107