45 #ifndef ROL_MERITFUNCTION_H
46 #define ROL_MERITFUNCTION_H
49 #include "ROL_InequalityConstraint.hpp"
64 namespace InteriorPoint {
73 typedef InequalityConstraint<Real>
INCON;
75 typedef ROL::ParameterList
PLIST;
119 static const Elementwise::Logarithm<Real>
LOG_;
120 static const Elementwise::Reciprocal<Real>
RECIP_;
121 static const Elementwise::ReductionSum<Real>
SUM_;
127 ROL::Ptr<EQCON> &eqcon,
128 ROL::Ptr<INCON> &incon,
135 const PV &xpv = dynamic_cast<const PV&>(x);
142 PLIST &iplist = parlist.sublist(
"Step").sublist(
"Primal-Dual Interior Point");
143 mu_ = iplist.get(
"Initial Slack Penalty");
144 nu_ = iplist.get(
"Initial Constraint Norm Penalty");
151 const PV &xpv = dynamic_cast<const PV&>(x);
161 val +=
mu_*logs_->reduce(
SUM_);
177 const PV &xpv = dynamic_cast<const PV&>(x);
181 const PV &dpv = dynamic_cast<const PV&>(d);
182 ROL::Ptr<V> dopt = dpv.
get(
OPT);
183 ROL::Ptr<V> dslack = dpv.
get(
SLACK);
188 ce_->applyJacobian(*
jced_,*dopt,*xopt,tol);
189 ci_->applyJacobian(*
jcid_,*dopt,*xopt,tol);
195 Real ddopt =
gopt_->dot(*dopt);
197 Real ddslack =
sfun_->dot(*dslack);
203 Real ddsn =
slack_->dot(*dslack)/slack->norm();
205 return ddopt -
mu_*ddslack +
nu_*(ddce + ddci + ddsn);
222 #endif // ROL_MERITFUNCTION_H