Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 "Thyra_DefaultMultiVectorProductVector.hpp"
13 #include "Thyra_VectorStdOps.hpp"
14 #include "Thyra_MultiVectorStdOps.hpp"
16 
17 namespace Tempus {
18 
19 template <class Scalar>
25  adjoint_residual_model,
26  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_solve_model)
27 {
28  model_ = model;
29  adjoint_residual_model_ = adjoint_residual_model;
30  adjoint_solve_model_ = adjoint_solve_model;
31  state_integrator_ = createIntegratorBasic<Scalar>(inputPL, model_);
32  sens_model_ = createSensitivityModel(model_, adjoint_residual_model_,
33  adjoint_solve_model_, inputPL);
34  sens_integrator_ = createIntegratorBasic<Scalar>(inputPL, sens_model_);
35  stepMode_ = SensitivityStepMode::Forward;
36  do_forward_integration_ = true;
37  do_adjoint_integration_ = true;
38 }
39 
40 template <class Scalar>
45  adjoint_residual_model,
46  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_solve_model,
47  std::string stepperType)
48 {
49  model_ = model;
50  adjoint_residual_model_ = adjoint_residual_model;
51  adjoint_solve_model_ = adjoint_solve_model;
52  state_integrator_ = createIntegratorBasic<Scalar>(model_, stepperType);
53  sens_model_ = createSensitivityModel(model_, adjoint_residual_model_,
54  adjoint_solve_model_, Teuchos::null);
55  sens_integrator_ = createIntegratorBasic<Scalar>(sens_model_, stepperType);
56  stepMode_ = SensitivityStepMode::Forward;
57  do_forward_integration_ = true;
58  do_adjoint_integration_ = true;
59 }
60 
61 template <class Scalar>
66  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_model)
67  : IntegratorPseudoTransientAdjointSensitivity(inputPL, model, adjoint_model,
68  adjoint_model)
69 {
70 }
71 
72 template <class Scalar>
76  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_model,
77  std::string stepperType)
78  : IntegratorPseudoTransientAdjointSensitivity(model, adjoint_model,
79  adjoint_model, stepperType)
80 {
81 }
82 
83 template <class Scalar>
88  : IntegratorPseudoTransientAdjointSensitivity(
89  inputPL, model, Thyra::implicitAdjointModelEvaluator(model))
90 {
91 }
92 
93 template <class Scalar>
97  std::string stepperType)
98  : IntegratorPseudoTransientAdjointSensitivity(
99  model, Thyra::implicitAdjointModelEvaluator(model), stepperType)
100 {
101 }
102 
103 template <class Scalar>
104 IntegratorPseudoTransientAdjointSensitivity<
106 {
107  state_integrator_ = createIntegratorBasic<Scalar>();
108  sens_integrator_ = createIntegratorBasic<Scalar>();
109  stepMode_ = SensitivityStepMode::Forward;
110 }
111 
112 template <class Scalar>
114 {
115  const Scalar tfinal = state_integrator_->getTimeStepControl()->getFinalTime();
116  return advanceTime(tfinal);
117 }
118 
119 template <class Scalar>
121  const Scalar timeFinal)
122 {
123  TEMPUS_FUNC_TIME_MONITOR_DIFF(
124  "Tempus::IntegratorPseudoTransientAdjointSensitivity::advanceTime()",
125  TEMPUS_PTAS_AT);
126 
127  using Teuchos::RCP;
128  using Thyra::VectorBase;
129  typedef Thyra::ModelEvaluatorBase MEB;
130 
131  bool state_status = true;
132  if (do_forward_integration_) {
133  TEMPUS_FUNC_TIME_MONITOR_DIFF(
134  "Tempus::IntegratorPseudoTransientAdjointSensitivity::advanceTime::"
135  "state",
136  TEMPUS_PTAS_AT_FWD);
137 
138  // Run state integrator and get solution
139  stepMode_ = SensitivityStepMode::Forward;
140  state_status = state_integrator_->advanceTime(timeFinal);
141  }
142 
143  bool sens_status = true;
144  if (do_adjoint_integration_) {
145  TEMPUS_FUNC_TIME_MONITOR_DIFF(
146  "Tempus::IntegratorPseudoTransientAdjointSensitivity::advanceTime::"
147  "adjoint",
148  TEMPUS_PTAS_AT_ADJ);
149 
150  // For at least some time-stepping methods, the time of the last time step
151  // may not be timeFinal (e.g., it may be greater by at most delta_t).
152  // But since the adjoint model requires timeFinal in its formulation, reset
153  // it to the achieved final time.
154  sens_model_->setFinalTime(state_integrator_->getTime());
155 
156  // Set solution in sensitivity ME
157  sens_model_->setForwardSolutionHistory(
158  state_integrator_->getSolutionHistory());
159 
160  // Run sensitivity integrator
161  stepMode_ = SensitivityStepMode::Adjoint;
162  sens_status = sens_integrator_->advanceTime(timeFinal);
163 
164  // Compute final dg/dp, g which is computed by response 0, 1 of the adjoint
165  // model evaluator
166  MEB::InArgs<Scalar> inargs = sens_model_->getNominalValues();
167  MEB::OutArgs<Scalar> outargs = sens_model_->createOutArgs();
168  inargs.set_t(sens_integrator_->getTime());
169  inargs.set_x(sens_integrator_->getX());
170  if (inargs.supports(MEB::IN_ARG_x_dot))
171  inargs.set_x_dot(sens_integrator_->getXDot());
172  if (inargs.supports(MEB::IN_ARG_x_dot_dot))
173  inargs.set_x_dot_dot(sens_integrator_->getXDotDot());
174  RCP<VectorBase<Scalar>> G = dgdp_;
175  if (G == Teuchos::null) {
176  G = Thyra::createMember(sens_model_->get_g_space(0));
177  dgdp_ = Teuchos::rcp_dynamic_cast<DMVPV>(G);
178  }
179  if (g_ == Teuchos::null)
180  g_ = Thyra::createMember(sens_model_->get_g_space(1));
181  outargs.set_g(0, G);
182  outargs.set_g(1, g_);
183  sens_model_->evalModel(inargs, outargs);
184 
185  buildSolutionHistory();
186  }
187 
188  return state_status && sens_status;
189 }
190 
191 template <class Scalar>
193 {
194  return solutionHistory_->getCurrentTime();
195 }
196 
197 template <class Scalar>
199 {
200  return solutionHistory_->getCurrentIndex();
201 }
202 
203 template <class Scalar>
205 {
206  Status state_status = state_integrator_->getStatus();
207  Status sens_status = sens_integrator_->getStatus();
208  if (state_status == FAILED || sens_status == FAILED) return FAILED;
209  if (state_status == WORKING || sens_status == WORKING) return WORKING;
210  return PASSED;
211 }
212 
213 template <class Scalar>
215  const Status st)
216 {
217  state_integrator_->setStatus(st);
218  sens_integrator_->setStatus(st);
219 }
220 
221 template <class Scalar>
224 {
225  return state_integrator_->getStepper();
226 }
227 
228 template <class Scalar>
231 {
232  return state_integrator_->getStepper();
233 }
234 
235 template <class Scalar>
238 {
239  return sens_integrator_->getStepper();
240 }
241 
242 template <class Scalar>
245 {
246  return solutionHistory_;
247 }
248 
249 template <class Scalar>
252  const
253 {
254  return state_integrator_->getSolutionHistory();
255 }
256 
257 template <class Scalar>
260  const
261 {
262  return sens_integrator_->getSolutionHistory();
263 }
264 
265 template <class Scalar>
268  Scalar>::getNonConstSolutionHistory()
269 {
270  return solutionHistory_;
271 }
272 
273 template <class Scalar>
276 {
277  return state_integrator_->getTimeStepControl();
278 }
279 
280 template <class Scalar>
283  Scalar>::getNonConstTimeStepControl()
284 {
285  return state_integrator_->getNonConstTimeStepControl();
286 }
287 
288 template <class Scalar>
291  Scalar>::getStateNonConstTimeStepControl()
292 {
293  return state_integrator_->getNonConstTimeStepControl();
294 }
295 
296 template <class Scalar>
299  Scalar>::getSensNonConstTimeStepControl()
300 {
301  return sens_integrator_->getNonConstTimeStepControl();
302 }
303 
304 template <class Scalar>
307 {
308  return state_integrator_->getObserver();
309 }
310 
311 template <class Scalar>
314 {
315  state_integrator_->setObserver(obs);
316  sens_integrator_->setObserver(obs);
317 }
318 
319 template <class Scalar>
322  Scalar t0, Teuchos::RCP<const Thyra::VectorBase<Scalar>> x0,
324  Teuchos::RCP<const Thyra::VectorBase<Scalar>> xdotdot0,
328 {
329  using Teuchos::RCP;
330  using Teuchos::rcp_dynamic_cast;
331  using Thyra::assign;
332  using Thyra::createMember;
334 
335  //
336  // Create and initialize product X, Xdot, Xdotdot
337 
338  RCP<const VectorSpaceBase<Scalar>> space = sens_model_->get_x_space();
339  RCP<DMVPV> Y = rcp_dynamic_cast<DMVPV>(createMember(space));
340  RCP<DMVPV> Ydot = rcp_dynamic_cast<DMVPV>(createMember(space));
341  RCP<DMVPV> Ydotdot = rcp_dynamic_cast<DMVPV>(createMember(space));
342  const Scalar zero = Teuchos::ScalarTraits<Scalar>::zero();
343 
344  // y
345  if (y0 == Teuchos::null)
346  assign(Y->getNonconstMultiVector().ptr(), zero);
347  else
348  assign(Y->getNonconstMultiVector().ptr(), *y0);
349 
350  // ydot
351  if (ydot0 == Teuchos::null)
352  assign(Ydot->getNonconstMultiVector().ptr(), zero);
353  else
354  assign(Ydot->getNonconstMultiVector().ptr(), *ydot0);
355 
356  // ydotdot
357  if (ydotdot0 == Teuchos::null)
358  assign(Ydotdot->getNonconstMultiVector().ptr(), zero);
359  else
360  assign(Ydotdot->getNonconstMultiVector().ptr(), *ydotdot0);
361 
362  state_integrator_->initializeSolutionHistory(t0, x0, xdot0, xdotdot0);
363  sens_integrator_->initializeSolutionHistory(t0, Y, Ydot, Ydotdot);
364 }
365 
366 template <class Scalar>
369 {
370  return state_integrator_->getX();
371 }
372 
373 template <class Scalar>
376 {
377  return state_integrator_->getXDot();
378 }
379 
380 template <class Scalar>
383 {
384  return state_integrator_->getXDotDot();
385 }
386 
387 template <class Scalar>
390 {
391  using Teuchos::RCP;
392  using Teuchos::rcp_dynamic_cast;
393  RCP<const DMVPV> mvpv =
394  rcp_dynamic_cast<const DMVPV>(sens_integrator_->getX());
395  return mvpv->getMultiVector();
396 }
397 
398 template <class Scalar>
401 {
402  using Teuchos::RCP;
403  using Teuchos::rcp_dynamic_cast;
404  RCP<const DMVPV> mvpv =
405  rcp_dynamic_cast<const DMVPV>(sens_integrator_->getXDot());
406  return mvpv->getMultiVector();
407 }
408 
409 template <class Scalar>
412 {
413  using Teuchos::RCP;
414  using Teuchos::rcp_dynamic_cast;
415  RCP<const DMVPV> mvpv =
416  rcp_dynamic_cast<const DMVPV>(sens_integrator_->getXDotDot());
417  return mvpv->getMultiVector();
418 }
419 
420 template <class Scalar>
423 {
424  return g_;
425 }
426 
427 template <class Scalar>
430 {
431  return dgdp_->getMultiVector();
432 }
433 
434 template <class Scalar>
436  const
437 {
438  std::string name = "Tempus::IntegratorPseudoTransientAdjointSensitivity";
439  return (name);
440 }
441 
442 template <class Scalar>
444  Teuchos::FancyOStream& out, const Teuchos::EVerbosityLevel verbLevel) const
445 {
446  auto l_out = Teuchos::fancyOStream(out.getOStream());
447  Teuchos::OSTab ostab(*l_out, 2, this->description());
448  l_out->setOutputToRootOnly(0);
449 
450  *l_out << description() << "::describe" << std::endl;
451  state_integrator_->describe(*l_out, verbLevel);
452  sens_integrator_->describe(*l_out, verbLevel);
453 }
454 
455 template <class Scalar>
458 {
459  // IntegratorBasic is no longer a Teuchos::ParameterListAcceptor.
460  // Since setting the ParameterList is essentially a complete reset,
461  // we will rebuild from scratch and reuse the ModelEvaluator.
462  auto model = Teuchos::rcp_const_cast<Thyra::ModelEvaluator<Scalar>>(
463  state_integrator_->getStepper()->getModel());
464  auto tmp_state_integrator = createIntegratorBasic<Scalar>(inputPL, model);
465  state_integrator_->copy(tmp_state_integrator);
466 
467  model = Teuchos::rcp_const_cast<Thyra::ModelEvaluator<Scalar>>(
468  sens_integrator_->getStepper()->getModel());
469  auto tmp_sens_integrator = createIntegratorBasic<Scalar>(inputPL, model);
470  sens_integrator_->copy(tmp_sens_integrator);
471 }
472 
473 template <class Scalar>
476 {
477  // IntegratorBasic is no longer a Teuchos::ParameterListAcceptor.
478  // We will treat unsetting the ParameterList as a reset to default
479  // settings, and reuse the ModelEvaluator.
480  auto tmp_state_integrator = createIntegratorBasic<Scalar>();
481  auto model = state_integrator_->getStepper()->getModel();
482  tmp_state_integrator->setModel(model);
483  state_integrator_->copy(tmp_state_integrator);
484 
485  auto tmp_sens_integrator = createIntegratorBasic<Scalar>();
486  model = sens_integrator_->getStepper()->getModel();
487  tmp_sens_integrator->setModel(model);
488  sens_integrator_->copy(tmp_sens_integrator);
489 
490  auto pl = Teuchos::rcp_const_cast<Teuchos::ParameterList>(
491  sens_integrator_->getValidParameters());
492  return pl;
493 }
494 
495 template <class Scalar>
498 {
502  state_integrator_->getValidParameters();
505  pl->setParameters(*integrator_pl);
506  pl->sublist("Sensitivities").setParameters(*sensitivity_pl);
507 
508  return pl;
509 }
510 
511 template <class Scalar>
514 {
515  auto pl = Teuchos::rcp_const_cast<Teuchos::ParameterList>(
516  state_integrator_->getValidParameters());
517  return pl;
518 }
519 
520 template <class Scalar>
523 {
524  return stepMode_;
525 }
526 
527 template <class Scalar>
531  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_residual_model,
532  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_solve_model,
534 {
535  using Teuchos::rcp;
536 
537  Teuchos::RCP<Teuchos::ParameterList> pl = Teuchos::parameterList();
538  if (inputPL != Teuchos::null) {
539  *pl = inputPL->sublist("Sensitivities");
540  }
541  const Scalar tinit = state_integrator_->getTimeStepControl()->getInitTime();
542  const Scalar tfinal = state_integrator_->getTimeStepControl()->getFinalTime();
544  model, adjoint_residual_model, adjoint_solve_model_, tinit, tfinal, true,
545  pl));
546 }
547 
548 template <class Scalar>
550 {
552  using Teuchos::RCP;
553  using Teuchos::rcp;
554  using Teuchos::rcp_dynamic_cast;
555  using Thyra::assign;
556  using Thyra::defaultProductVector;
557  using Thyra::VectorBase;
561 
562  // Create combined solution histories, first for the states with zero
563  // adjoint and then for the adjoint with frozen states
564  auto shPL = Teuchos::rcp_const_cast<Teuchos::ParameterList>(
565  state_integrator_->getSolutionHistory()->getValidParameters());
566  solutionHistory_ = createSolutionHistoryPL<Scalar>(shPL);
567 
568  RCP<const VectorSpaceBase<Scalar>> x_space = model_->get_x_space();
569  RCP<const VectorSpaceBase<Scalar>> adjoint_space = sens_model_->get_x_space();
571  spaces[0] = x_space;
572  spaces[1] = adjoint_space;
573  RCP<const DPVS> prod_space = Thyra::productVectorSpace(spaces());
574  const Scalar zero = Teuchos::ScalarTraits<Scalar>::zero();
575 
576  RCP<const SolutionHistory<Scalar>> state_solution_history =
577  state_integrator_->getSolutionHistory();
578  int num_states = state_solution_history->getNumStates();
579  for (int i = 0; i < num_states; ++i) {
580  RCP<const SolutionState<Scalar>> state = (*state_solution_history)[i];
581 
582  // X
583  RCP<DPV> x = defaultProductVector(prod_space);
584  assign(x->getNonconstVectorBlock(0).ptr(), *(state->getX()));
585  assign(x->getNonconstVectorBlock(1).ptr(), zero);
586  RCP<VectorBase<Scalar>> x_b = x;
587 
588  // X-Dot
589  RCP<VectorBase<Scalar>> x_dot_b;
590  if (state->getXDot() != Teuchos::null) {
591  RCP<DPV> x_dot = defaultProductVector(prod_space);
592  assign(x_dot->getNonconstVectorBlock(0).ptr(), *(state->getXDot()));
593  assign(x_dot->getNonconstVectorBlock(1).ptr(), zero);
594  x_dot_b = x_dot;
595  }
596 
597  // X-Dot-Dot
598  RCP<VectorBase<Scalar>> x_dot_dot_b;
599  if (state->getXDotDot() != Teuchos::null) {
600  RCP<DPV> x_dot_dot = defaultProductVector(prod_space);
601  assign(x_dot_dot->getNonconstVectorBlock(0).ptr(),
602  *(state->getXDotDot()));
603  assign(x_dot_dot->getNonconstVectorBlock(1).ptr(), zero);
604  x_dot_dot_b = x_dot_dot;
605  }
606 
607  RCP<SolutionState<Scalar>> prod_state = state->clone();
608  prod_state->setX(x_b);
609  prod_state->setXDot(x_dot_b);
610  prod_state->setXDotDot(x_dot_dot_b);
611  solutionHistory_->addState(prod_state);
612  }
613 
614  RCP<const VectorBase<Scalar>> frozen_x =
615  state_solution_history->getCurrentState()->getX();
616  RCP<const VectorBase<Scalar>> frozen_x_dot =
617  state_solution_history->getCurrentState()->getXDot();
618  RCP<const VectorBase<Scalar>> frozen_x_dot_dot =
619  state_solution_history->getCurrentState()->getXDotDot();
620  RCP<const SolutionHistory<Scalar>> sens_solution_history =
621  sens_integrator_->getSolutionHistory();
622  num_states = sens_solution_history->getNumStates();
623  for (int i = 0; i < num_states; ++i) {
624  RCP<const SolutionState<Scalar>> state = (*sens_solution_history)[i];
625 
626  // X
627  RCP<DPV> x = defaultProductVector(prod_space);
628  assign(x->getNonconstVectorBlock(0).ptr(), *frozen_x);
629  assign(x->getNonconstVectorBlock(1).ptr(), *(state->getX()));
630  RCP<VectorBase<Scalar>> x_b = x;
631 
632  // X-Dot
633  RCP<VectorBase<Scalar>> x_dot_b;
634  if (state->getXDot() != Teuchos::null) {
635  RCP<DPV> x_dot = defaultProductVector(prod_space);
636  assign(x_dot->getNonconstVectorBlock(0).ptr(), *frozen_x_dot);
637  assign(x_dot->getNonconstVectorBlock(1).ptr(), *(state->getXDot()));
638  x_dot_b = x_dot;
639  }
640 
641  // X-Dot-Dot
642  RCP<VectorBase<Scalar>> x_dot_dot_b;
643  if (state->getXDotDot() != Teuchos::null) {
644  RCP<DPV> x_dot_dot = defaultProductVector(prod_space);
645  assign(x_dot_dot->getNonconstVectorBlock(0).ptr(), *frozen_x_dot_dot);
646  assign(x_dot_dot->getNonconstVectorBlock(1).ptr(),
647  *(state->getXDotDot()));
648  x_dot_dot_b = x_dot_dot;
649  }
650 
651  RCP<SolutionState<Scalar>> prod_state = state->clone();
652  prod_state->setX(x_b);
653  prod_state->setXDot(x_dot_b);
654  prod_state->setXDotDot(x_dot_dot_b);
655  solutionHistory_->addState(prod_state, false);
656  }
657 }
658 
660 template <class Scalar>
665 {
668  pList, model));
669  return (integrator);
670 }
671 
673 template <class Scalar>
677  std::string stepperType)
678 {
681  model, stepperType));
682  return (integrator);
683 }
684 
686 template <class Scalar>
691  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_model)
692 {
695  pList, model, adjoint_model));
696  return (integrator);
697 }
698 
700 template <class Scalar>
704  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_model,
705  std::string stepperType)
706 {
709  model, adjoint_model, stepperType));
710  return (integrator);
711 }
712 
714 template <class Scalar>
719  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_residual_model,
720  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_solve_model)
721 {
724  pList, model, adjoint_residual_model, adjoint_solve_model));
725  return (integrator);
726 }
727 
729 template <class Scalar>
733  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_residual_model,
734  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>& adjoint_solve_model,
735  std::string stepperType)
736 {
739  model, adjoint_residual_model, adjoint_solve_model, stepperType));
740  return (integrator);
741 }
742 
744 template <class Scalar>
747 {
750  return (integrator);
751 }
752 
753 } // namespace Tempus
754 #endif // Tempus_IntegratorPseudoTransientAdjointSensitivity_impl_hpp
static Teuchos::RCP< const Teuchos::ParameterList > getValidParameters()
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl) override
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getY() const
Get the current adjoint solution, y.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get the current time derivative of the solution, xdot.
Teuchos::RCP< Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar > > integratorPseudoTransientAdjointSensitivity(Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model)
Nonmember constructor.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDot() const
Get the current time derivative of the adjoint solution, ydot.
Time integrator suitable for pseudotransient adjoint sensitivity analysis.
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getG() const
Return response function g.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
Status
Status for the Integrator, the Stepper and the SolutionState.
IntegratorObserver class for time integrators.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get the current second time derivative of the solution, xdotdot.
virtual void initializeSolutionHistory(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)
RCP< const MultiVectorBase< Scalar > > getMultiVector() const
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDotDot() const
Get the current second time derivative of the adjoint solution, ydotdot.
ParameterList & setParameters(const ParameterList &source)
RCP< ImplicitAdjointModelEvaluator< Scalar > > implicitAdjointModelEvaluator(const RCP< const ModelEvaluator< Scalar > > &model)
RCP< std::basic_ostream< char_type, traits_type > > getOStream()
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
ModelEvaluator for forming adjoint sensitivity equations.
ParameterList & sublist(const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
Teuchos::RCP< AdjointSensitivityModelEvaluator< Scalar > > createSensitivityModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_residual_model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_solve_model, const Teuchos::RCP< Teuchos::ParameterList > &inputPL)
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get the current solution, x.