78 Real tol = std::sqrt(ROL_EPSILON<Real>());
79 const Real one(1),
zero(0), half(0.5), p2(0.2), p8(0.8), two(2);
84 Real sNnorm = primal_->norm();
85 Real tmp = -primal_->dot(s);
86 Real gsN = std::abs(tmp);
92 Real gBg = dual_->apply(s);
93 Real
gnorm = s.dual().norm();
95 Real alpha = del/
gnorm;
96 if ( gBg > ROL_EPSILON<Real>() ) {
97 alpha = std::min(gg/gBg, del/
gnorm);
102 pRed = alpha*(gg - half*alpha*gBg);
117 Real
gnorm = s.norm();
120 Real gBg = dual_->apply(s);
121 Real gamma1 =
gnorm/gBg;
122 Real gamma2 =
gnorm/gsN;
123 Real eta = p8*gamma1*gamma2 + p2;
124 if (eta*sNnorm <= del || gBg <=
zero) {
133 if (gnorm2*gamma1 >= del) {
141 s.scale(-gamma1*
gnorm);
144 primal_->scale(-one);
145 Real wNorm = primal_->dot(*primal_);
146 Real sigma = del*del-std::pow(gamma1*
gnorm,two);
147 Real phi = s.dot(*primal_);
148 Real theta = (-phi + std::sqrt(phi*phi+wNorm*sigma))/wNorm;
149 s.axpy(theta,*primal_);
152 beta = (one-theta)*(-gamma1*
gnorm);
156 pRed = -(alpha*(half*alpha-one)*gsN + half*beta*beta*gBg + beta*(one-alpha)*gnorm2);
void solve(Vector< Real > &s, Real &snorm, Real &pRed, int &iflag, int &iter, const Real del, TrustRegionModel_U< Real > &model)