ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
algorithm
TypeG
stabilizedlcl
ROL_ElasticLinearConstraint_Def.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_ELASTICLINEARCONSTRAINT_DEF_H
11
#define ROL_ELASTICLINEARCONSTRAINT_DEF_H
12
13
namespace
ROL
{
14
15
template
<
typename
Real>
16
ElasticLinearConstraint<Real>::ElasticLinearConstraint
(
const
Ptr<
const
Vector<Real>
> &x,
17
const
Ptr<
Constraint<Real>
> &con,
18
const
Ptr<
const
Vector<Real>
> &c)
19
:
con_
(con),
x_
(x->clone()),
c_
(c->clone()),
tmp_
(x->clone()) {
20
setAnchor
(x);
21
}
22
23
template
<
typename
Real>
24
void
ElasticLinearConstraint<Real>::update
(
const
Vector<Real>
&x,
UpdateType
type,
int
iter ) {}
25
26
template
<
typename
Real>
27
void
ElasticLinearConstraint<Real>::update
(
const
Vector<Real>
&x,
bool
flag,
int
iter ) {}
28
29
template
<
typename
Real>
30
void
ElasticLinearConstraint<Real>::value
(
Vector<Real>
&c,
const
Vector<Real>
&x, Real &tol) {
31
Ptr<const Vector<Real>> xs =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(0);
32
Ptr<const Vector<Real>> xu =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(1);
33
Ptr<const Vector<Real>> xv =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(2);
34
tmp_
->set(*xs);
tmp_
->axpy(
static_cast<
Real
>
(-1),*
x_
);
35
con_
->applyJacobian(c,*
tmp_
,*
x_
,tol);
36
c.
plus
(*
c_
);
37
c.
plus
(*xu);
38
c.
axpy
(
static_cast<
Real
>
(-1),*xv);
39
}
40
41
template
<
typename
Real>
42
void
ElasticLinearConstraint<Real>::applyJacobian
(
Vector<Real>
&jv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol) {
43
Ptr<const Vector<Real>> vs =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(v).get(0);
44
Ptr<const Vector<Real>> vu =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(v).get(1);
45
Ptr<const Vector<Real>> vv =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(v).get(2);
46
con_
->applyJacobian(jv,*vs,*
x_
,tol);
47
jv.
plus
(*vu);
48
jv.
axpy
(
static_cast<
Real
>
(-1),*vv);
49
}
50
51
template
<
typename
Real>
52
void
ElasticLinearConstraint<Real>::applyAdjointJacobian
(
Vector<Real>
&ajv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol) {
53
Ptr<Vector<Real>> as =
dynamic_cast<
PartitionedVector<Real>
&
>
(ajv).get(0);
54
Ptr<Vector<Real>> au =
dynamic_cast<
PartitionedVector<Real>
&
>
(ajv).get(1);
55
Ptr<Vector<Real>> av =
dynamic_cast<
PartitionedVector<Real>
&
>
(ajv).get(2);
56
con_
->applyAdjointJacobian(*as,v,*
x_
,tol);
57
au->set(v.
dual
());
58
av->set(v.
dual
()); av->scale(
static_cast<
Real
>
(-1));
59
}
60
61
template
<
typename
Real>
62
void
ElasticLinearConstraint<Real>::applyAdjointJacobian
(
Vector<Real>
&ajv,
const
Vector<Real>
&v,
const
Vector<Real>
&x,
const
Vector<Real>
&dualv, Real &tol) {
63
Ptr<Vector<Real>> as =
dynamic_cast<
PartitionedVector<Real>
&
>
(ajv).get(0);
64
Ptr<Vector<Real>> au =
dynamic_cast<
PartitionedVector<Real>
&
>
(ajv).get(1);
65
Ptr<Vector<Real>> av =
dynamic_cast<
PartitionedVector<Real>
&
>
(ajv).get(2);
66
con_
->applyAdjointJacobian(*as,v,*
x_
,tol);
67
au->set(dualv);
68
av->set(dualv); av->scale(
static_cast<
Real
>
(-1));
69
}
70
71
template
<
typename
Real>
72
void
ElasticLinearConstraint<Real>::applyAdjointHessian
(
Vector<Real>
&ahuv,
const
Vector<Real>
&u,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol) {
73
ahuv.
zero
();
74
}
75
76
template
<
typename
Real>
77
void
ElasticLinearConstraint<Real>::setAnchor
(
const
Ptr<
const
Vector<Real>
> &x) {
78
x_
->set(*x);
79
Real tol = std::sqrt(
ROL_EPSILON<Real>
());
80
con_
->value(*
c_
,*
x_
,tol);
81
}
82
83
}
// namespace ROL
84
85
#endif
ROL::ElasticLinearConstraint::applyAdjointJacobian
void applyAdjointJacobian(Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Definition
ROL_ElasticLinearConstraint_Def.hpp:52
ROL::ElasticLinearConstraint::ElasticLinearConstraint
ElasticLinearConstraint(const Ptr< const Vector< Real > > &x, const Ptr< Constraint< Real > > &con, const Ptr< const Vector< Real > > &c)
Definition
ROL_ElasticLinearConstraint_Def.hpp:16
ROL::ElasticLinearConstraint::con_
const Ptr< Constraint< Real > > con_
Definition
ROL_ElasticLinearConstraint.hpp:28
ROL::ElasticLinearConstraint::setAnchor
void setAnchor(const Ptr< const Vector< Real > > &x)
Definition
ROL_ElasticLinearConstraint_Def.hpp:77
ROL::ElasticLinearConstraint::applyAdjointHessian
void applyAdjointHessian(Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Definition
ROL_ElasticLinearConstraint_Def.hpp:72
ROL::ElasticLinearConstraint::value
void value(Vector< Real > &c, const Vector< Real > &x, Real &tol) override
Definition
ROL_ElasticLinearConstraint_Def.hpp:30
ROL::ElasticLinearConstraint::tmp_
const Ptr< Vector< Real > > tmp_
Definition
ROL_ElasticLinearConstraint.hpp:29
ROL::ElasticLinearConstraint::x_
const Ptr< Vector< Real > > x_
Definition
ROL_ElasticLinearConstraint.hpp:29
ROL::ElasticLinearConstraint::c_
const Ptr< Vector< Real > > c_
Definition
ROL_ElasticLinearConstraint.hpp:29
ROL::ElasticLinearConstraint::update
void update(const Vector< Real > &x, UpdateType type, int iter=-1) override
Definition
ROL_ElasticLinearConstraint_Def.hpp:24
ROL::ElasticLinearConstraint::applyJacobian
void applyJacobian(Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Definition
ROL_ElasticLinearConstraint_Def.hpp:42
ROL::PartitionedVector
Defines the linear algebra of vector space on a generic partitioned vector.
Definition
ROL_PartitionedVector.hpp:26
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::dual
virtual const Vector & dual() const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis,...
Definition
ROL_Vector.hpp:193
ROL::Vector::plus
virtual void plus(const Vector &x)=0
Compute , where .
ROL::Vector::zero
virtual void zero()
Set to zero vector.
Definition
ROL_Vector.hpp:134
ROL::Vector::axpy
virtual void axpy(const Real alpha, const Vector &x)
Compute where .
Definition
ROL_Vector.hpp:120
ROL
Definition
ROL_ElementwiseVector.hpp:27
ROL::ROL_EPSILON
Real ROL_EPSILON(void)
Platform-dependent machine epsilon.
Definition
ROL_Types.hpp:57
ROL::UpdateType
UpdateType
Definition
ROL_UpdateType.hpp:18
Generated by
1.17.0