10#ifndef ROL_PRIMALDUALSYSTEMSTEP_H
11#define ROL_PRIMALDUALSYSTEMSTEP_H
15#include "ROL_SchurComplememt.hpp"
84 PV &x_pv =
dynamic_cast<PV&
>(x);
88 ROL::Ptr<V> temp[] = {xlambda,z};
90 return ROL::makePtr<
PV( std::vector<ROL::Ptr<V> >>(temp,temp+2) );
96 const PV &x_pv =
dynamic_cast<const PV&
>(x);
100 ROL::Ptr<const V> temp[] = {xlambda,z};
102 return ROL::makePtr<
PV( std::vector<ROL::Ptr<const V> >>(temp,temp+2) );
116 ROL::Ptr<V> &scratch1 ) :
Step<Real>(),
120 PL &iplist = parlist.sublist(
"Step").sublist(
"Primal Dual Interior Point");
121 PL &syslist = iplist.sublist(
"System Solver");
141 ROL::Ptr<OBJ> pObj = ROL::makePtrFromRef(obj);
142 ROL::Ptr<CON> pCon = ROL::makePtrFromRef(con);
143 ROL::Ptr<BND> pBnd = ROL::makePtrFromRef(bnd);
147 ROL::Ptr<V> xlambda = x_pv->get(
OPTMULT);
148 ROL::Ptr<V> z = x_pv->get(
BNDMULT);
150 A_ = ROL::makePtr<OP11>( pObj, pCon, *xlambda,
scratch1_ );
151 B_ = ROL::makePtr<OP12>( );
152 C_ = ROL::makePtr<OP21>( *z );
153 D_ = ROL::makePtr<OP22>( pBnd, *xlambda );
164 BND &bnd,
AS &algo_state ) {
178 ROL::Ptr<V> sxl = s_pv->get(
OPTMULT);
179 ROL::Ptr<V> sz = s_pv->get(
BNDMULT);
191 BND &bnd,
AS &algo_state ) {
typename PV< Real >::size_type size_type
Provides the interface to apply a 2x2 block operator to a partitioned vector.
Provides the interface to apply upper and lower bound constraints.
Defines the general constraint operator interface.
Provides definitions for Krylov solvers.
Provides the interface to evaluate objective functions.
Defines the linear algebra of vector space on a generic partitioned vector.
ROL::Ptr< const Vector< Real > > get(size_type i) const
Provides the interface to compute approximate solutions to 2x2 block systems arising from primal-dual...
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.
ROL::Ptr< PV > repartition(V &x)
static const size_type UPPER
BoundConstraint< Real > BND
PrimalDualInteriorPointBlock21 OP21
void update(V &x, V &res, const V &s, OBJ &obj, CON &con, BND &bnd, AS &algo_state)
Update step, if successful (equality constraints).
static const size_type OPT
static const size_type BNDMULT
PrimalDualInteriorPointBlock22 OP22
int flagKrylov_
Termination flag for Krylov method (used for inexact Newton)
ROL::Ptr< const PV > repartition(const V &x)
static const size_type EQUAL
ROL::Ptr< Krylov< Real > > krylov_
PrimalDualInteriorPointBlock11 OP11
PartitionedVector< Real > PV
ROL::Ptr< Secant< Real > > secant_
SchurComplement< Real > SCHUR
static const size_type OPTMULT
PrimalDualSystemStep(ROL::ParameterList &parlist, const ROL::Ptr< Krylov< Real > > &krylov, const ROL::Ptr< Secant< Real > > &secant, ROL::Ptr< V > &scratch1)
int verbosity_
Verbosity level.
void compute(V &s, const V &x, const V &res, OBJ &obj, CON &con, BND &bnd, AS &algo_state)
Compute step (equality constraints).
AlgorithmState< Real > AS
static const size_type LOWER
int iterKrylov_
Number of Krylov iterations (used for inexact Newton)
PrimalDualSystemStep(ROL::ParameterList &parlist, ROL::Ptr< V > &scratch1_)
PrimalDualInteriorPointBlock12 OP12
Given a 2x2 block operator, perform the Schur reduction and return the decoupled system components.
Provides interface for and implements limited-memory secant operators.
Provides the interface to compute optimization steps.
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.
ROL::Ptr< StepState< Real > > getState(void)
Defines the linear algebra or vector space interface.
ROL::Ptr< Vector< Real > > CreatePartitionedVector(const ROL::Ptr< Vector< Real > > &a)
State for algorithm class. Will be used for restarts.