61 const RCP<
const Thyra::ModelEvaluator<Scalar> > &responseFunc,
62 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &basePoint,
76 virtual RCP<IntegrationObserverBase<Scalar> >
81 const TimeRange<Scalar> &integrationTimeDomain
86 const StepperBase<Scalar> &stepper,
87 const StepControlInfo<Scalar> &stepCtrlInfo,
88 const int timeStepIter
95 ForwardResponseSensitivityComputer<Scalar> forwardResponseSensitivityComputer_;
96 Array<ResponseAndFwdSensPoint<Scalar> > responseAndFwdSensPoints_;
98 RCP<Thyra::VectorBase<Scalar> > g_hat_;
99 RCP<Thyra::MultiVectorBase<Scalar> > D_g_hat_D_p_;
125 const RCP<
const Thyra::ModelEvaluator<Scalar> > &responseFunc,
126 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &basePoint,
131 RCP<ForwardResponseSensitivityComputerObserver<Scalar> >
132 frsco = Rythmos::forwardResponseSensitivityComputerObserver<Scalar>();
133 frsco->initialize(responseFunc,basePoint,p_index,g_index);
153 const RCP<
const Thyra::ModelEvaluator<Scalar> > &responseFunc,
154 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &basePoint,
159 forwardResponseSensitivityComputer_.setResponseFunction(
160 responseFunc, basePoint, p_index, g_index );
161 g_hat_ = forwardResponseSensitivityComputer_.create_g_hat();
162 D_g_hat_D_p_ = forwardResponseSensitivityComputer_.create_D_g_hat_D_p();
197 const StepperBase<Scalar> &stepper,
198 const StepControlInfo<Scalar> &stepCtrlInfo,
199 const int timeStepIter
203 using Teuchos::OSTab;
204 using Teuchos::includesVerbLevel;
208 const RCP<FancyOStream> out = this->getOStream();
209 const Teuchos::EVerbosityLevel verbLevel = this->getVerbLevel();
212 ( !is_null(out) && includesVerbLevel(verbLevel,Teuchos::VERB_LOW) );
214 forwardResponseSensitivityComputer_.setOStream(out);
215 forwardResponseSensitivityComputer_.setVerbLevel(verbLevel);
220 *out <<
"\nEntering ForwardResponseSensitivityComputerObserver<Scalar>::observeCompletedTimeStep(...) ...\n";
224 const Scalar t = stepper.getStepStatus().time;
226 RCP<const Thyra::VectorBase<Scalar> > x_bar, x_bar_dot;
228 get_x_and_x_dot( stepper, t, &x_bar, &x_bar_dot );
230 RCP<const Thyra::VectorBase<Scalar> > x;
231 RCP<const Thyra::MultiVectorBase<Scalar> > S;
232 RCP<const Thyra::VectorBase<Scalar> > x_dot;
233 RCP<const Thyra::MultiVectorBase<Scalar> > S_dot;
235 extractStateAndSens( x_bar, x_bar_dot, &x, &S, &x_dot, &S_dot );
239 forwardResponseSensitivityComputer_.computeResponseAndSensitivity(
240 x_dot.get(), S_dot.get(), *x, *S, t, &*g_hat_, &*D_g_hat_D_p_
245 responseAndFwdSensPoints_.push_back(
246 ResponseAndFwdSensPoint<Scalar>(
247 t, g_hat_->clone_v(), D_g_hat_D_p_->clone_mv()
252 *out <<
"\nEntering ForwardResponseSensitivityComputerObserver<Scalar>::observeCompletedTimeStep(...) ...\n";