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);
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);
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);
175 if (
iter == maxit_) {
void solve(Vector< Real > &s, Real &snorm, Real &pRed, int &iflag, int &iter, const Real del, TrustRegionModel_U< Real > &model)