10#ifndef Tempus_IntegratorAdjointSensitivity_decl_hpp
11#define Tempus_IntegratorAdjointSensitivity_decl_hpp
16#include "Tempus_config.hpp"
17#include "Tempus_IntegratorBasic.hpp"
18#include "Tempus_AdjointAuxSensitivityModelEvaluator.hpp"
23#include "Tempus_StepperStaggeredForwardSensitivity.hpp"
106template <
class Scalar>
187 const int p_index,
const int g_index,
const bool g_depends_on_p,
188 const bool f_depends_on_p,
const bool ic_depends_on_p,
189 const bool mass_matrix_is_identity,
191 const std::vector<Scalar> &response_times = std::vector<Scalar>(),
194 const Teuchos::RCP<const Teuchos::ParameterList> &dae_jump_solver_pl =
210 virtual bool advanceTime(
const Scalar timeFinal)
override;
212 virtual Scalar
getTime()
const override;
214 virtual int getIndex()
const override;
220 virtual Teuchos::RCP<Stepper<Scalar>>
getStepper()
const override;
260 virtual Teuchos::RCP<IntegratorObserver<Scalar>>
getObserver();
268 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>>
getX()
const;
270 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>>
getXDot()
const;
272 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>>
getXDotDot()
const;
275 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>>
getY()
const;
277 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>>
getYDot()
const;
279 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>>
getYDotDot()
const;
282 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>>
getDgDp()
const;
298 void describe(Teuchos::FancyOStream &out,
299 const Teuchos::EVerbosityLevel verbLevel)
const override;
310 const Teuchos::RCP<Teuchos::ParameterList> &inputPL);
315 &adjoint_solution_history);
318 Teuchos::RCP<Thyra::LinearOpWithSolveBase<Scalar>>
320 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs)
const;
325 const Scalar tol)
const;
339 Teuchos::RCP<Thyra::ModelEvaluator<Scalar>>
model_;
356 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>>
dxdp_init_;
357 Teuchos::RCP<Thyra::MultiVectorBase<Scalar>>
dgdp_;
364 Teuchos::RCP<Thyra::LinearOpBase<Scalar>>
dfdp_op_;
365 Teuchos::RCP<Thyra::MultiVectorBase<Scalar>>
dfdp_mv_;
385template <
class Scalar>
386Teuchos::RCP<IntegratorAdjointSensitivity<Scalar>>
388 Teuchos::RCP<Teuchos::ParameterList> pList,
394template <
class Scalar>
395Teuchos::RCP<IntegratorAdjointSensitivity<Scalar>>
ModelEvaluator for forming adjoint sensitivity equations.
Structure of an index-1 differential-algebraic system.
Teuchos::RCP< const SolutionHistory< Scalar > > getSensSolutionHistory() const
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
AdjointResponseType response_type_
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDot() const
Get the current time derivative of the adjoint solution, ydot.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get the current second time derivative of the solution, xdotdot.
virtual Scalar getTime() const override
Get current time.
virtual int getIndex() const override
Get current index.
virtual Status getStatus() const override
Get Status.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
void appendAdjointSolutionHistory(const Scalar tol)
void buildSolutionHistory(const Teuchos::RCP< const SolutionHistory< Scalar > > &state_solution_history, const Teuchos::RCP< const SolutionHistory< Scalar > > &adjoint_solution_history)
Teuchos::RCP< TimeStepControl< Scalar > > getSensNonConstTimeStepControl()
bool mass_matrix_is_identity_
virtual void initialize()
Initializes the Integrator after set* function calls.
IntegratorAdjointSensitivity()
Constructor that requires a subsequent setParameterList, setStepper, and initialize calls.
Teuchos::RCP< Thyra::LinearOpWithSolveBase< Scalar > > createAdjointMassMatrixSolver(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs) const
Solver for df/dx_dot^T, computed with the adjoint model at inArgs.
std::string description() const override
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > dfdp_op_
df/dp work objects for the algebraic contributions of the jumps
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
std::vector< Scalar > response_times_
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > model_
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get the current solution, x.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDotDot() const
Get the current second time derivative of the adjoint solution, ydotdot.
Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > dxdp_init_
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > adjoint_model_
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get the current time derivative of the solution, xdot.
Teuchos::RCP< const AdjointDAEJumpSolver< Scalar > > dae_jump_solver_
Solver of the adjoint jumps of the index-1 DAE (null for an ODE).
virtual ~IntegratorAdjointSensitivity()
Destructor.
virtual void setStatus(const Status st) override
Set Status.
Teuchos::RCP< const SolutionState< Scalar > > findForwardState(const SolutionHistory< Scalar > &state_solution_history, const Scalar t, const Scalar tol) const
Forward state at time t, which must be the time of a stored time step.
Teuchos::RCP< const DAEStructure< Scalar > > getDAEStructure() const
Structure of the index-1 DAE (null for an ODE).
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
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 > > DxDp0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > DxdotDp0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > DxdotdotDp0=Teuchos::null)
Set the initial state from Thyra::VectorBase(s).
bool integrateAdjoint(const Scalar tau_begin, const Scalar tau_end, Thyra::VectorBase< Scalar > &adjoint_state, int &index)
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
IntegratorAdjointSensitivity(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< IntegratorBasic< Scalar > > &state_integrator, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_model, const Teuchos::RCP< AdjointAuxSensitivityModelEvaluator< Scalar > > &adjoint_aux_model, const Teuchos::RCP< IntegratorBasic< Scalar > > &adjoint_integrator, const Teuchos::RCP< SolutionHistory< Scalar > > &solution_history, const int p_index, const int g_index, const bool g_depends_on_p, const bool f_depends_on_p, const bool ic_depends_on_p, const bool mass_matrix_is_identity, const AdjointResponseType response_type=AdjointResponseType::FinalTime, const std::vector< Scalar > &response_times=std::vector< Scalar >(), const Teuchos::RCP< const DAEStructure< Scalar > > &dae_structure=Teuchos::null, const Teuchos::RCP< const Teuchos::ParameterList > &dae_jump_solver_pl=Teuchos::null)
Full Constructor with model, and will be fully initialized.
Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > dgdp_
SensitivityStepMode stepMode_
Teuchos::RCP< const SolutionHistory< Scalar > > getStateSolutionHistory() const
Teuchos::RCP< IntegratorBasic< Scalar > > adjoint_integrator_
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getY() const
Get the current adjoint solution, y.
Teuchos::RCP< SolutionHistory< Scalar > > adjoint_solution_history_
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > getAdjointModel() const
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory_
Teuchos::RCP< IntegratorBasic< Scalar > > state_integrator_
Teuchos::RCP< TimeStepControl< Scalar > > getStateNonConstTimeStepControl()
Teuchos::RCP< AdjointAuxSensitivityModelEvaluator< Scalar > > createAdjointModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_model, const Teuchos::RCP< Teuchos::ParameterList > &inputPL)
Teuchos::RCP< const DAEStructure< Scalar > > dae_structure_
Structure of the index-1 DAE (null for an ODE).
Teuchos::RCP< AdjointAuxSensitivityModelEvaluator< Scalar > > adjoint_aux_model_
Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > dfdp_mv_
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
IntegratorObserver class for time integrators.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Status
Status for the Integrator, the Stepper and the SolutionState.
AdjointResponseType
Type of response for transient adjoint sensitivities.
Teuchos::RCP< IntegratorAdjointSensitivity< Scalar > > createIntegratorAdjointSensitivity()
Nonmember constructor.