ROL
ROL_NonlinearCG_U.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Rapid Optimization Library (ROL) Package
4//
5// Copyright 2014 NTESS and the ROL contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef ROL_NONLINEARCG_U_H
11#define ROL_NONLINEARCG_U_H
12
14#include "ROL_Types.hpp"
15#include "ROL_NonlinearCG.hpp"
16
22
24
25namespace ROL {
26
27template<typename Real>
28class NonlinearCG_U : public DescentDirection_U<Real> {
29private:
30
31 Ptr<NonlinearCG<Real>> nlcg_;
33 std::string ncgName_;
34
35public:
36
46 NonlinearCG_U( ParameterList &parlist,
47 const Ptr<NonlinearCG<Real>> &nlcg = nullPtr)
49 // Initialize secant object
50 ParameterList& Llist = parlist.sublist("Step").sublist("Line Search");
51 if ( nlcg == nullPtr ) {
52 ncgName_ = Llist.sublist("Descent Method").get("Nonlinear CG Type","Oren-Luenberger");
53 enlcg_
55 nlcg_ = ROL::makePtr<NonlinearCG<Real>>(enlcg_);
56 }
57 else {
58 ncgName_ = Llist.sublist("Descent Method").get("User Defined Nonlinear CG Name",
59 "Unspecified User Define Nonlinear CG Method");
60 }
61 }
62
63 void compute( Vector<Real> &s, Real &snorm, Real &sdotg, int &iter, int &flag,
64 const Vector<Real> &x, const Vector<Real> &g, Objective<Real> &obj) override {
65 nlcg_->run(s,g,x,obj);
66 //sdotg = -s.dot(g.dual());
67 sdotg = -s.apply(g);
68 if (sdotg >= static_cast<Real>(0)) {
69 s.set(g.dual());
70 //sdotg = -s.dot(g.dual());
71 sdotg = -s.apply(g);
72 }
73 s.scale(static_cast<Real>(-1));
74 snorm = s.norm();
75 iter = 0;
76 flag = 0;
77 }
78
79 std::string printName(void) const override {
80 std::stringstream name;
81 name << ncgName_ << " Nonlinear CG";
82 return name.str();
83 }
84}; // class ROL::NonlinearCG_U
85
86} // namespace ROL
87
88#endif
Contains definitions of custom data types in ROL.
Provides the interface to compute unconstrained optimization steps for line search.
NonlinearCG_U(ParameterList &parlist, const Ptr< NonlinearCG< Real > > &nlcg=nullPtr)
Constructor.
Ptr< NonlinearCG< Real > > nlcg_
NonlinearCG object (used for quasi-Newton).
void compute(Vector< Real > &s, Real &snorm, Real &sdotg, int &iter, int &flag, const Vector< Real > &x, const Vector< Real > &g, Objective< Real > &obj) override
std::string printName(void) const override
Provides the interface to evaluate objective functions.
Defines the linear algebra or vector space interface.
virtual Real apply(const Vector< Real > &x) const
Apply to a dual vector. This is equivalent to the call .
virtual Real norm() const =0
Returns where .
virtual void set(const Vector &x)
Set where .
virtual void scale(const Real alpha)=0
Compute where .
virtual const Vector & dual() const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis,...
ENonlinearCG
@ NONLINEARCG_USERDEFINED
ENonlinearCG StringToENonlinearCG(std::string s)