ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
function
constraint
ROL_ChainRuleConstraint.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_CHAIN_RULE_CONSTRAINT_HPP
11
#define ROL_CHAIN_RULE_CONSTRAINT_HPP
12
13
#include "
ROL_Constraint.hpp
"
14
25
26
27
namespace
ROL
{
28
29
template
<
typename
Real>
30
class
ChainRuleConstraint
:
public
Constraint
<Real> {
31
public
:
32
33
ChainRuleConstraint
(
const
Ptr<
Constraint<Real>
>& outer_con,
34
const
Ptr<
Constraint<Real>
>& inner_con,
35
const
Vector<Real>
& x,
36
const
Vector<Real>
& lag_inner )
37
:
outer_con_
(outer_con),
inner_con_
(inner_con),
38
y_
(lag_inner.dual().clone()),
// Inner constraint space vector
39
Jiv_
(lag_inner.dual().clone()),
// Inner Jacobian applied to optimization space vector
40
aJol_
(lag_inner.dual().clone()),
// Outer adjoint Jacobian applied to outer dual constaint space vector
41
HiaJol_
(x.dual().clone()),
// Inner Hessian applied to dual optimization space vector
42
HolJiv_
(lag_inner.clone()),
// Outer Hessian applied to inner constaint space vector
43
tol_
(0) {
44
}
45
46
virtual
~ChainRuleConstraint
() =
default
;
47
48
virtual
void
update
(
const
Vector<Real>
& x,
49
UpdateType
type,
50
int
iter = -1 ) {
51
inner_con_
->update(x,type,iter);
52
inner_con_
->value(*
y_
,x,
tol_
);
53
outer_con_
->update(*
y_
,type,iter);
54
}
55
56
virtual
void
update
(
const
Vector<Real>
& x,
57
bool
flag,
58
int
iter = -1 ) {
59
inner_con_
->update(x,flag,iter);
60
inner_con_
->value(*
y_
,x,
tol_
);
61
outer_con_
->update(*
y_
,flag,iter);
62
}
63
64
virtual
void
value
(
Vector<Real>
& c,
65
const
Vector<Real>
& x,
66
Real& tol )
override
{
67
inner_con_
->value(*
y_
,x,tol);
68
outer_con_
->value(c,*
y_
,tol);
69
}
70
71
virtual
void
applyJacobian
(
Vector<Real>
& jv,
72
const
Vector<Real>
& v,
73
const
Vector<Real>
& x,
74
Real& tol )
override
{
75
inner_con_
->value(*
y_
,x,tol);
76
inner_con_
->applyJacobian(*
Jiv_
,v,x,tol);
77
outer_con_
->applyJacobian(jv,*
Jiv_
,*
y_
,tol);
78
}
79
80
virtual
void
applyAdjointJacobian
(
Vector<Real>
& ajl,
81
const
Vector<Real>
& l,
82
const
Vector<Real>
& x,
83
Real& tol )
override
{
84
inner_con_
->value(*
y_
,x,tol);
85
outer_con_
->applyAdjointJacobian(*
aJol_
,l,*
y_
,tol);
86
inner_con_
->applyAdjointJacobian(ajl,*
aJol_
,x,tol);
87
}
88
89
virtual
void
applyAdjointHessian
(
Vector<Real>
& ahlv,
90
const
Vector<Real>
& l,
91
const
Vector<Real>
& v,
92
const
Vector<Real>
& x,
93
Real& tol )
override
{
94
inner_con_
->value(*
y_
,x,tol);
95
inner_con_
->applyJacobian(*
Jiv_
,v,x,tol);
96
outer_con_
->applyAdjointJacobian(*
aJol_
,l,*
y_
,tol);
97
inner_con_
->applyAdjointHessian(*
HiaJol_
,*
aJol_
,v,x,tol);
98
outer_con_
->applyAdjointHessian(*
HolJiv_
,l,*
Jiv_
,*
y_
,tol);
99
inner_con_
->applyAdjointJacobian(ahlv,*
HolJiv_
,x,tol);
100
ahlv.
plus
(*
HiaJol_
);
101
}
102
103
private
:
104
105
const
Ptr<Constraint<Real>>
outer_con_
,
inner_con_
;
106
107
Ptr<Vector<Real>>
y_
;
// Inner constraint space vector
108
Ptr<Vector<Real>>
Jiv_
;
// Inner Jacobian applied to optimization space vector
109
Ptr<Vector<Real>>
aJol_
;
// Outer adjoint Jacobian applied to outer dual constaint space vector
110
Ptr<Vector<Real>>
HiaJol_
;
// Inner Hessian applied to dual optimization space vector
111
Ptr<Vector<Real>>
HolJiv_
;
// Outer Hessian applied to inner constaint space vector
112
Real
tol_
;
113
};
// class ChainRuleConstraint
114
115
}
// namespace ROL
116
117
#endif
// ROL_CHAIN_RULE_CONSTRAINT_HPP
ROL_Constraint.hpp
ROL::ChainRuleConstraint::ChainRuleConstraint
ChainRuleConstraint(const Ptr< Constraint< Real > > &outer_con, const Ptr< Constraint< Real > > &inner_con, const Vector< Real > &x, const Vector< Real > &lag_inner)
Definition
ROL_ChainRuleConstraint.hpp:33
ROL::ChainRuleConstraint::inner_con_
const Ptr< Constraint< Real > > inner_con_
Definition
ROL_ChainRuleConstraint.hpp:105
ROL::ChainRuleConstraint::value
virtual void value(Vector< Real > &c, const Vector< Real > &x, Real &tol) override
Definition
ROL_ChainRuleConstraint.hpp:64
ROL::ChainRuleConstraint::applyJacobian
virtual void applyJacobian(Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Definition
ROL_ChainRuleConstraint.hpp:71
ROL::ChainRuleConstraint::tol_
Real tol_
Definition
ROL_ChainRuleConstraint.hpp:112
ROL::ChainRuleConstraint::~ChainRuleConstraint
virtual ~ChainRuleConstraint()=default
ROL::ChainRuleConstraint::outer_con_
const Ptr< Constraint< Real > > outer_con_
Definition
ROL_ChainRuleConstraint.hpp:105
ROL::ChainRuleConstraint::HolJiv_
Ptr< Vector< Real > > HolJiv_
Definition
ROL_ChainRuleConstraint.hpp:111
ROL::ChainRuleConstraint::update
virtual void update(const Vector< Real > &x, UpdateType type, int iter=-1)
Definition
ROL_ChainRuleConstraint.hpp:48
ROL::ChainRuleConstraint::applyAdjointJacobian
virtual void applyAdjointJacobian(Vector< Real > &ajl, const Vector< Real > &l, const Vector< Real > &x, Real &tol) override
Definition
ROL_ChainRuleConstraint.hpp:80
ROL::ChainRuleConstraint::y_
Ptr< Vector< Real > > y_
Definition
ROL_ChainRuleConstraint.hpp:107
ROL::ChainRuleConstraint::update
virtual void update(const Vector< Real > &x, bool flag, int iter=-1)
Definition
ROL_ChainRuleConstraint.hpp:56
ROL::ChainRuleConstraint::aJol_
Ptr< Vector< Real > > aJol_
Definition
ROL_ChainRuleConstraint.hpp:109
ROL::ChainRuleConstraint::Jiv_
Ptr< Vector< Real > > Jiv_
Definition
ROL_ChainRuleConstraint.hpp:108
ROL::ChainRuleConstraint::applyAdjointHessian
virtual void applyAdjointHessian(Vector< Real > &ahlv, const Vector< Real > &l, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Definition
ROL_ChainRuleConstraint.hpp:89
ROL::ChainRuleConstraint::HiaJol_
Ptr< Vector< Real > > HiaJol_
Definition
ROL_ChainRuleConstraint.hpp:110
ROL::ROL::Constraint::Constraint
Constraint(void)
Definition
ROL_Constraint_SerialSimOpt.hpp:59
ROL::Vector
Defines the linear algebra or vector space interface.
Definition
ROL_Vector.hpp:51
ROL::Vector::plus
virtual void plus(const Vector &x)=0
Compute , where .
ROL
Definition
ROL_ElementwiseVector.hpp:27
ROL::UpdateType
UpdateType
Definition
ROL_UpdateType.hpp:18
Generated by
1.17.0