44 #ifndef ROL_PRIMALDUALSYSTEMSTEP_H
45 #define ROL_PRIMALDUALSYSTEMSTEP_H
49 #include "ROL_SchurComplememt.hpp"
118 PV &x_pv =
dynamic_cast<PV&
>(x);
122 ROL::Ptr<V> temp[] = {xlambda,z};
124 return ROL::makePtr<PV( std::vector<ROL::Ptr<V> >>(temp,temp+2) );
130 const PV &x_pv =
dynamic_cast<const PV&
>(x);
134 ROL::Ptr<const V> temp[] = {xlambda,z};
136 return ROL::makePtr<PV( std::vector<ROL::Ptr<const V> >>(temp,temp+2) );
150 ROL::Ptr<V> &scratch1 ) :
Step<Real>(),
154 PL &iplist = parlist.sublist(
"Step").sublist(
"Primal Dual Interior Point");
155 PL &syslist = iplist.sublist(
"System Solver");
175 ROL::Ptr<OBJ> pObj = ROL::makePtrFromRef(obj);
176 ROL::Ptr<CON> pCon = ROL::makePtrFromRef(con);
177 ROL::Ptr<BND> pBnd = ROL::makePtrFromRef(bnd);
181 ROL::Ptr<V> xlambda = x_pv->get(
OPTMULT);
182 ROL::Ptr<V> z = x_pv->get(
BNDMULT);
184 A_ = ROL::makePtr<OP11>( pObj, pCon, *xlambda,
scratch1_ );
185 B_ = ROL::makePtr<OP12>( );
186 C_ = ROL::makePtr<OP21>( *z );
187 D_ = ROL::makePtr<OP22>( pBnd, *xlambda );
198 BND &bnd,
AS &algo_state ) {
212 ROL::Ptr<V> sxl = s_pv->get(
OPTMULT);
213 ROL::Ptr<V> sz = s_pv->get(
BNDMULT);
225 BND &bnd,
AS &algo_state ) {
237 #endif // ROL_PRIMALDUALSYSTEMSTEP_H
Provides the interface to evaluate objective functions.
PrimalDualInteriorPointBlock22 OP22
PrimalDualInteriorPointBlock21 OP21
ROL::Ptr< const PV > repartition(const V &x)
typename PV< Real >::size_type size_type
AlgorithmState< Real > AS
ROL::Ptr< const Vector< Real > > get(size_type i) const
ROL::Ptr< PV > repartition(V &x)
static const size_type OPTMULT
Provides the interface to compute optimization steps.
Defines the linear algebra of vector space on a generic partitioned vector.
ROL::Ptr< Vector< Real > > CreatePartitionedVector(const ROL::Ptr< Vector< Real >> &a)
PartitionedVector< Real > PV
void initialize(V &x, const V &g, V &res, const V &c, OBJ &obj, CON &con, BND &bnd, AS &algo_state)
Initialize step with equality constraint.
static const size_type UPPER
Provides the interface to compute approximate solutions to 2x2 block systems arising from primal-dual...
Defines the linear algebra or vector space interface.
static const size_type OPT
PrimalDualSystemStep(ROL::ParameterList &parlist, ROL::Ptr< V > &scratch1_)
static const size_type LOWER
State for algorithm class. Will be used for restarts.
int flagKrylov_
Termination flag for Krylov method (used for inexact Newton)
PrimalDualSystemStep(ROL::ParameterList &parlist, const ROL::Ptr< Krylov< Real > > &krylov, const ROL::Ptr< Secant< Real > > &secant, ROL::Ptr< V > &scratch1)
static const size_type BNDMULT
ROL::Ptr< StepState< Real > > getState(void)
Provides interface for and implements limited-memory secant operators.
void update(V &x, V &res, const V &s, OBJ &obj, CON &con, BND &bnd, AS &algo_state)
Update step, if successful (equality constraints).
int iterKrylov_
Number of Krylov iterations (used for inexact Newton)
Provides definitions for Krylov solvers.
static const size_type EQUAL
Provides the interface to apply upper and lower bound constraints.
ROL::Ptr< Krylov< Real > > krylov_
SchurComplement< Real > SCHUR
Provides the interface to apply a 2x2 block operator to a partitioned vector.
PrimalDualInteriorPointBlock12 OP12
ROL::Ptr< Secant< Real > > secant_
virtual void initialize(Vector< Real > &x, const Vector< Real > &g, Objective< Real > &obj, BoundConstraint< Real > &con, AlgorithmState< Real > &algo_state)
Initialize step with bound constraint.
BoundConstraint< Real > BND
PrimalDualInteriorPointBlock11 OP11
Given a 2x2 block operator, perform the Schur reduction and return the decoupled system components...
void compute(V &s, const V &x, const V &res, OBJ &obj, CON &con, BND &bnd, AS &algo_state)
Compute step (equality constraints).
Defines the general constraint operator interface.
int verbosity_
Verbosity level.