44#ifndef ROL_TRUNCATEDCG_U_H
45#define ROL_TRUNCATEDCG_U_H
70 Real em4(1e-4), em2(1e-2);
71 maxit_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Iteration Limit",20);
72 tol1_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Absolute Tolerance",em4);
73 tol2_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Relative Tolerance",em2);
91 Real tol = std::sqrt(ROL_EPSILON<Real>());
92 const Real
zero(0), one(1), two(2), half(0.5);
96 Real snorm2(0), s1norm2(0);
99 Real gnorm =
g_->norm(), normg = gnorm;
100 const Real gtol = std::min(
tol1_,
tol2_*gnorm);
104 p_->set(*
v_);
p_->scale(-one);
106 Real pnorm2 =
v_->apply(*
g_);
107 if ( pnorm2 <=
zero ) {
114 Real kappa(0), beta(0), sigma(0), alpha(0), tmp(0), sMp(0);
118 for (iter = 0; iter <
maxit_; iter++) {
123 kappa =
p_->apply(*
Hp_);
125 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
135 s1norm2 = snorm2 + two*alpha*sMp + alpha*alpha*pnorm2;
137 if (s1norm2 >= del*del) {
138 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
145 pRed += half*alpha*gv;
150 g_->axpy(alpha,*
Hp_);
164 sMp = beta*(sMp+alpha*pnorm2);
165 pnorm2 = gv + beta*beta*pnorm2;
169 pRed += sigma*(gv-half*sigma*kappa);
172 snorm = std::sqrt(snorm2);
Objective_SerialSimOpt(const Ptr< Obj > &obj, const V &ui) z0 zero)()
Contains definitions of custom data types in ROL.
Provides interface for truncated CG trust-region subproblem solver.
Ptr< Vector< Real > > Hp_
TruncatedCG_U(ParameterList &parlist)
void initialize(const Vector< Real > &x, const Vector< Real > &g)
void solve(Vector< Real > &s, Real &snorm, Real &pRed, int &iflag, int &iter, const Real del, TrustRegionModel_U< Real > &model)
Provides the interface to evaluate trust-region model functions.
virtual void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &s, Real &tol) override
Apply Hessian approximation to vector.
virtual void precond(Vector< Real > &Pv, const Vector< Real > &v, const Vector< Real > &s, Real &tol) override
Apply preconditioner to vector.
virtual const Ptr< const Vector< Real > > getGradient(void) const
Provides interface for and implements trust-region subproblem solvers.
Defines the linear algebra or vector space interface.
virtual void set(const Vector &x)
Set where .
virtual void zero()
Set to zero vector.
virtual ROL::Ptr< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
virtual void axpy(const Real alpha, const Vector &x)
Compute where .