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 ) {
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.