ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
vector
ROL_ScaledVector.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
#pragma once
11
#ifndef ROL_SCALEDVECTOR_HPP
12
#define ROL_SCALEDVECTOR_HPP
13
20
27
28
#include "
ROL_WrappedVector.hpp
"
29
#include "
ROL_VectorWorkspace.hpp
"
30
31
namespace
ROL
{
32
33
// Forward declaration
34
template
<
typename
Real>
class
PrimalScaledVector;
35
template
<
typename
Real>
class
DualScaledVector;
36
37
template
<
typename
Real>
38
class
PrimalScaledVector :
public
WrappedVector
<Real> {
39
40
using
V
=
Vector<Real>
;
41
using
VPrim
=
PrimalScaledVector<Real>
;
42
using
VDual
=
DualScaledVector<Real>
;
43
44
private
:
45
46
mutable
Ptv<V>
scaling_vec_
;
47
mutable
VectorWorkspace<Real>
workspace_
;
48
49
Elementwise::Multiply<Real>
mult_
;
50
51
protected
:
52
53
VectorWorkspace<Real>
&
getWorkspace
()
const
{
return
workspace_
; }
54
55
// y <- y*x elementwise
56
void
multiply_scaling
(
const
Ptr<V>& y )
const
{
57
y->applyBinary(
mult_
, *
scaling_vec_
);
58
}
59
60
public
:
61
62
PrimalScaledVector
(
const
Ptr<V>& vec,
const
Ptr<V>& scaling_vec ) :
63
WrappedVector
<Real>(vec),
scaling_vec_
(scaling_vec) {}
64
65
virtual
~PrimalScaledVector
() {}
66
67
virtual
Real
dot
(
const
V
& x )
const override
{
68
auto
y =
workspace_
.copy(x);
69
multiply_scaling
( y );
70
return
this->
getVector
()->dot(*y);
71
}
72
73
virtual
Ptr<V>
clone
()
const override
{
74
return
makePtr<VPrim>( this->
getVector
()->
clone
(), scaling_vec_ );
75
}
76
77
virtual
Ptr<V>
basis
(
const
int
i )
const override
{
78
return
makePtr<VPrim>( this->
getVector
()->
basis
(i),
scaling_vec_
);
79
}
80
81
virtual
void
const
V
&
dual
()
const override
{
82
auto
dual_vec =
workspace_
.copy( this->
getVector
() );
83
multiply_scaling
( dual_vec );
84
return
*( makePtr<VDual>( dual_vec, scaling_vec ) );
85
}
86
87
const
Ptr<V>&
getScalingVector
() {
return
scaling_vec_
; }
88
const
Ptr<const V>&
getScalingVector
()
const
{
return
scaling_vec_
; }
89
90
void
setScalingVector
(
const
Ptr<const V&>& scaling_vec )
const
{
91
scaling_vec_
= scaling_vec;
92
}
93
94
};
// class PrimalScaledVector
95
96
97
98
template
<
typename
Real>
99
class
DualScaledVector
:
public
WrappedVector
<Real> {
100
101
using
V
=
Vector<Real>
;
102
using
VPrim
=
PrimalScaledVector<Real>
;
103
using
VDual
=
DualScaledVector<Real>
;
104
105
private
:
106
107
mutable
Ptv<V>
scaling_vec_
;
108
mutable
VectorWorkspace<Real>
workspace_
;
109
110
Elementwise::Divide<Real>
div_
;
111
112
protected
:
113
114
VectorWorkspace<Real>
&
getWorkspace
()
const
{
return
workspace_
; }
115
116
// y <- y/x elementwise
117
void
divide_scaling
( const <V>& y )
const
{
118
y->applyBinary(
div_
, *
scaling_vec_
);
119
}
120
121
public
:
122
123
DualScaledVector
(
const
Ptr<V>& vec,
const
Ptr<V>& scaling_vec ) :
124
WrappedVector
<Real>(vec),
scaling_vec_
(scaling_vec) {}
125
126
virtual
~DualScaledVector
() {}
127
128
virtual
Real
dot
(
const
V
& x )
const override
{
129
auto
y =
workspace_
.copy(x);
130
divide_scaling
( y );
131
return
this->getVector()->dot(*y);
132
}
133
134
virtual
Ptr<V>
clone
()
const override
{
135
return
makePtr<VDual>( this->getVector()->
clone
(),
scaling_vec_
);
136
}
137
138
virtual
Ptr<V>
basis
(
const
int
i )
const override
{
139
return
makePtr<VDual>( this->getVector()->
basis
(i),
scaling_vec_
);
140
}
141
142
virtual
void
const
V
&
dual
()
const override
{
143
auto
primal_vec =
workspace_
.copy( this->getVector() );
144
divide_scaling
( primal_vec );
145
return
*( makePtr<VPrim>( primal_vec, scaling_vec ) );
146
}
147
148
const
Ptr<V>&
getScalingVector
() {
return
scaling_vec_
; }
149
const
Ptr<const V>&
getScalingVector
()
const
{
return
scaling_vec_
; }
150
151
void
setScalingVector
(
const
Ptr<const V&>& scaling_vec )
const
{
152
scaling_vec_
= scaling_vec;
153
}
154
155
};
// class PrimalScaledVector
156
157
}
// namespace ROL
158
159
160
#endif
ROL_VectorWorkspace.hpp
ROL_WrappedVector.hpp
ROL::DualScaledVector
Provides the implementation of the ROL::Vector interface that handles scalings in the inner product....
Definition
ROL_ScaledVector.hpp:99
ROL::DualScaledVector::dot
virtual Real dot(const V &x) const override
Definition
ROL_ScaledVector.hpp:128
ROL::DualScaledVector::scaling_vec_
Ptv< V > scaling_vec_
Definition
ROL_ScaledVector.hpp:107
ROL::DualScaledVector::setScalingVector
void setScalingVector(const Ptr< const V & > &scaling_vec) const
Definition
ROL_ScaledVector.hpp:151
ROL::DualScaledVector::basis
virtual Ptr< V > basis(const int i) const override
Definition
ROL_ScaledVector.hpp:138
ROL::DualScaledVector::getScalingVector
const Ptr< const V > & getScalingVector() const
Definition
ROL_ScaledVector.hpp:149
ROL::DualScaledVector::~DualScaledVector
virtual ~DualScaledVector()
Definition
ROL_ScaledVector.hpp:126
ROL::DualScaledVector::divide_scaling
void divide_scaling(const < V > &y) const
Definition
ROL_ScaledVector.hpp:117
ROL::DualScaledVector::DualScaledVector
DualScaledVector(const Ptr< V > &vec, const Ptr< V > &scaling_vec)
Definition
ROL_ScaledVector.hpp:123
ROL::DualScaledVector::div_
Elementwise::Divide< Real > div_
Definition
ROL_ScaledVector.hpp:110
ROL::DualScaledVector::getWorkspace
VectorWorkspace< Real > & getWorkspace() const
Definition
ROL_ScaledVector.hpp:114
ROL::DualScaledVector::clone
virtual Ptr< V > clone() const override
Definition
ROL_ScaledVector.hpp:134
ROL::DualScaledVector::getScalingVector
const Ptr< V > & getScalingVector()
Definition
ROL_ScaledVector.hpp:148
ROL::DualScaledVector::VPrim
PrimalScaledVector< Real > VPrim
Definition
ROL_ScaledVector.hpp:102
ROL::DualScaledVector::dual
virtual void const V & dual() const override
Definition
ROL_ScaledVector.hpp:142
ROL::DualScaledVector::V
Vector< Real > V
Definition
ROL_ScaledVector.hpp:101
ROL::DualScaledVector::workspace_
VectorWorkspace< Real > workspace_
Definition
ROL_ScaledVector.hpp:108
ROL::DualScaledVector::VDual
DualScaledVector< Real > VDual
Definition
ROL_ScaledVector.hpp:103
ROL::PrimalScaledVector
Provides the implementation of the ROL::Vector interface that handles scalings in the inner product....
Definition
ROL_WrappedVector.hpp:32
ROL::PrimalScaledVector::scaling_vec_
Ptv< V > scaling_vec_
Definition
ROL_ScaledVector.hpp:46
ROL::PrimalScaledVector::dot
virtual Real dot(const V &x) const override
Definition
ROL_ScaledVector.hpp:67
ROL::PrimalScaledVector::VDual
DualScaledVector< Real > VDual
Definition
ROL_ScaledVector.hpp:42
ROL::PrimalScaledVector::workspace_
VectorWorkspace< Real > workspace_
Definition
ROL_ScaledVector.hpp:47
ROL::PrimalScaledVector::clone
virtual Ptr< V > clone() const override
Definition
ROL_ScaledVector.hpp:73
ROL::PrimalScaledVector::getVector
const Ptr< V > & getVector()
Definition
ROL_WrappedVector.hpp:97
ROL::PrimalScaledVector::getScalingVector
const Ptr< const V > & getScalingVector() const
Definition
ROL_ScaledVector.hpp:88
ROL::PrimalScaledVector::getWorkspace
VectorWorkspace< Real > & getWorkspace() const
Definition
ROL_ScaledVector.hpp:53
ROL::PrimalScaledVector::getScalingVector
const Ptr< V > & getScalingVector()
Definition
ROL_ScaledVector.hpp:87
ROL::PrimalScaledVector::V
Vector< Real > V
Definition
ROL_ScaledVector.hpp:40
ROL::PrimalScaledVector::multiply_scaling
void multiply_scaling(const Ptr< V > &y) const
Definition
ROL_ScaledVector.hpp:56
ROL::PrimalScaledVector::WrappedVector
WrappedVector(const Ptr< V > &vec)
Definition
ROL_WrappedVector.hpp:45
ROL::PrimalScaledVector::mult_
Elementwise::Multiply< Real > mult_
Definition
ROL_ScaledVector.hpp:49
ROL::PrimalScaledVector::dual
virtual void const V & dual() const override
Definition
ROL_ScaledVector.hpp:81
ROL::PrimalScaledVector::setScalingVector
void setScalingVector(const Ptr< const V & > &scaling_vec) const
Definition
ROL_ScaledVector.hpp:90
ROL::PrimalScaledVector::basis
virtual Ptr< V > basis(const int i) const override
Definition
ROL_ScaledVector.hpp:77
ROL::PrimalScaledVector::PrimalScaledVector
PrimalScaledVector(const Ptr< V > &vec, const Ptr< V > &scaling_vec)
Definition
ROL_ScaledVector.hpp:62
ROL::PrimalScaledVector::~PrimalScaledVector
virtual ~PrimalScaledVector()
Definition
ROL_ScaledVector.hpp:65
ROL::PrimalScaledVector::VPrim
PrimalScaledVector< Real > VPrim
Definition
ROL_ScaledVector.hpp:41
ROL::Vector
Defines the linear algebra or vector space interface.
Definition
ROL_Vector.hpp:51
WrappedVector
Provides an interface layer which encapulates a pointer to a ROL::Vector and has the default behavior...
ROL::details::VectorWorkspace
Definition
ROL_VectorWorkspace.hpp:64
ROL
Definition
ROL_ElementwiseVector.hpp:27
Generated by
1.17.0