44 #ifndef ROL_REDUCEDDYNAMICOBJECTIVE_HPP
45 #define ROL_REDUCEDDYNAMICOBJECTIVE_HPP
47 #include "ROL_Ptr.hpp"
78 template<
typename Real>
83 const Ptr<DynamicObjective<Real>>
obj_;
84 const Ptr<DynamicConstraint<Real>>
con_;
85 const Ptr<Vector<Real>>
u0_;
136 ROL::ParameterList &pl)
141 Nt_ ( timeStamp.size() ),
156 useSymHess_ ( pl.get(
"Use Only Sketched Sensitivity", true) ) {
162 lhist_.push_back(cvec->dual().clone());
168 phist_.push_back(cvec->dual().clone());
174 lhist_.push_back(cvec->dual().clone());
177 phist_.push_back(cvec->dual().clone());
182 crhs_ = cvec->clone();
185 zdual_ = zvec->dual().clone();
205 val_ = static_cast<Real>(0);
517 Real err(0), cnorm(0);
520 err = static_cast<Real>(0);
526 err = (cnorm > err ? cnorm : err);
551 obj_->gradient_un(*
udual_, uold, unew, z, ts);
552 con_->applyInverseAdjointJacobian_un(l, *
udual_, uold, unew, z, ts);
559 obj_->gradient_uo(rhs, uold, unew, z, ts);
560 con_->applyAdjointJacobian_uo(*
udual_, l, uold, unew, z, ts);
567 obj_->gradient_un(*
udual_, uold, unew, z, ts);
569 con_->applyInverseAdjointJacobian_un(l, rhs, uold, unew, z, ts);
635 obj_->gradient_z(g, uold, unew, z, ts);
636 con_->applyAdjointJacobian_z(*
zdual_, l, uold, unew, z, ts);
648 con_->applyJacobian_z(*
crhs_, v, uold, unew, z, ts);
649 con_->applyJacobian_uo(*
cprimal_, wold, uold, unew, z, ts);
651 con_->applyInverseJacobian_un(wnew, *
crhs_, uold, unew, z, ts);
664 con_->applyAdjointHessian_z_un(*
rhs_, l, v, uold, unew, z, ts);
665 obj_->hessVec_un_z(*
udual_, v, uold, unew, z, ts);
668 con_->applyAdjointHessian_un_un(*
udual_, l, wnew, uold, unew, z, ts);
670 obj_->hessVec_un_un(*
udual_, wnew, uold, unew, z, ts);
672 con_->applyAdjointHessian_uo_un(*
udual_, l, wold, uold, unew, z, ts);
674 obj_->hessVec_un_uo(*
udual_, wold, uold, unew, z, ts);
677 con_->applyInverseAdjointJacobian_un(p, *
rhs_, uold, unew, z, ts);
684 const bool sumInto =
false) {
688 obj_->hessVec_un_uo(Hv, wold, uold, unew, z, ts);
691 obj_->hessVec_un_uo(*
udual_, wold, uold, unew, z, ts);
694 con_->applyAdjointHessian_uo_un(*
udual_, l, wold, uold, unew, z, ts);
697 obj_->hessVec_un_un(*
udual_, wnew, uold, unew, z, ts);
699 con_->applyAdjointHessian_un_un(*
udual_, l, wnew, uold, unew, z, ts);
707 const bool sumInto =
false) {
711 con_->applyAdjointHessian_z_un(Hv, l, v, uold, unew, z, ts);
714 con_->applyAdjointHessian_z_un(*
udual_, l, v, uold, unew, z, ts);
717 obj_->hessVec_un_z(*
udual_, v, uold, unew, z, ts);
724 const bool sumInto =
false) {
727 con_->applyAdjointJacobian_uo(Hv, p, uold, unew, z, ts);
731 con_->applyAdjointJacobian_uo(*
udual_, p, uold, unew, z, ts);
740 const bool sumInto =
false) {
744 obj_->hessVec_uo_un(Hv, wnew, uold, unew, z, ts);
747 obj_->hessVec_uo_un(*
udual_, wnew, uold, unew, z, ts);
750 con_->applyAdjointHessian_un_uo(*
udual_, l, wnew, uold, unew, z, ts);
753 obj_->hessVec_uo_uo(*
udual_, wold, uold, unew, z, ts);
755 con_->applyAdjointHessian_uo_uo(*
udual_, l, wold, uold, unew, z, ts);
763 const bool sumInto =
false) {
767 con_->applyAdjointHessian_z_uo(Hv, l, v, uold, unew, z, ts);
770 con_->applyAdjointHessian_z_uo(*
udual_, l, v, uold, unew, z, ts);
773 obj_->hessVec_uo_z(*
udual_, v, uold, unew, z, ts);
781 con_->applyInverseAdjointJacobian_un(p, rhs, uold, unew, z, ts);
793 obj_->hessVec_z_z(Hv, v, uold, unew, z, ts);
794 con_->applyAdjointHessian_z_z(*
zdual_, l, v, uold, unew, z, ts);
804 obj_->hessVec_z_uo(*
zdual_, wold, uold, unew, z, ts);
806 con_->applyAdjointHessian_uo_z(*
zdual_, l, wold, uold, unew, z, ts);
809 obj_->hessVec_z_un(*
zdual_, wnew, uold, unew, z, ts);
811 con_->applyAdjointHessian_un_z(*
zdual_, l, wnew, uold, unew, z, ts);
818 con_->applyAdjointJacobian_z(*
zdual_, p, uold, unew, z, ts);
825 #endif // ROL_REDUCEDDYNAMICOBJECTIVE_HPP