44#ifndef ROL_PRIMALDUALSYSTEMSTEP_H
45#define ROL_PRIMALDUALSYSTEMSTEP_H
49#include "ROL_SchurComplememt.hpp"
72 typedef AlgorithmState<Real>
AS;
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)
ROL::Ptr< PV > repartition(V &x)
static const size_type UPPER
void update(V &x, V &res, const V &s, OBJ &obj, CON &con, BND &bnd, AS &algo_state)
static const size_type OPT
static const size_type BNDMULT
AlgorithmState< Real > AS
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_
PrimalDualInteriorPointBlock21 OP21
PartitionedVector< Real > PV
ROL::Ptr< Secant< Real > > secant_
static const size_type OPTMULT
PrimalDualInteriorPointBlock22 OP22
PrimalDualSystemStep(ROL::ParameterList &parlist, const ROL::Ptr< Krylov< Real > > &krylov, const ROL::Ptr< Secant< Real > > &secant, ROL::Ptr< V > &scratch1)
PrimalDualInteriorPointBlock12 OP12
int verbosity_
Verbosity level.
void compute(V &s, const V &x, const V &res, OBJ &obj, CON &con, BND &bnd, AS &algo_state)
SchurComplement< Real > SCHUR
PrimalDualInteriorPointBlock11 OP11
static const size_type LOWER
int iterKrylov_
Number of Krylov iterations (used for inexact Newton)
PrimalDualSystemStep(ROL::ParameterList &parlist, ROL::Ptr< V > &scratch1_)
BoundConstraint< Real > BND
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)