ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
sol
sampler
SROM
ROL_SROMVector.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_SROMVECTOR_H
11
#define ROL_SROMVECTOR_H
12
13
#include <algorithm>
14
#include <cstdlib>
15
16
#include "
ROL_ProbabilityVector.hpp
"
17
#include "
ROL_AtomVector.hpp
"
18
22
23
24
namespace
ROL
{
25
26
template
<
class
Real>
27
class
SROMVector
:
public
Vector
<Real> {
28
typedef
typename
std::vector<Real>::size_type
uint
;
29
private
:
30
const
ROL::Ptr<ProbabilityVector<Real> >
pvec_
;
31
const
ROL::Ptr<AtomVector<Real> >
avec_
;
32
33
mutable
ROL::Ptr<Vector<Real> >
dual_pvec_
;
34
mutable
ROL::Ptr<Vector<Real> >
dual_avec_
;
35
mutable
ROL::Ptr<SROMVector<Real> >
dual_vec_
;
36
mutable
bool
isDualInitialized_
;
37
38
public
:
39
40
SROMVector
(
const
ROL::Ptr<
ProbabilityVector<Real>
> &pvec,
41
const
ROL::Ptr<
AtomVector<Real>
> &avec)
42
:
pvec_
(pvec),
avec_
(avec),
isDualInitialized_
(false) {
43
dual_pvec_
= (
pvec_
->dual()).
clone
();
44
dual_avec_
= (
avec_
->dual()).
clone
();
45
}
46
47
void
set
(
const
Vector<Real>
&x ) {
48
const
SROMVector
&ex =
dynamic_cast<
const
SROMVector
&
>
(x);
49
pvec_
->set(*(ex.
getProbabilityVector
()));
50
avec_
->set(*(ex.
getAtomVector
()));
51
}
52
53
void
plus
(
const
Vector<Real>
&x ) {
54
const
SROMVector
&ex =
dynamic_cast<
const
SROMVector
&
>
(x);
55
pvec_
->plus(*(ex.
getProbabilityVector
()));
56
avec_
->plus(*(ex.
getAtomVector
()));
57
}
58
59
void
scale
(
const
Real alpha ) {
60
pvec_
->scale(alpha);
61
avec_
->scale(alpha);
62
}
63
64
void
axpy
(
const
Real alpha,
const
Vector<Real>
&x ) {
65
const
SROMVector
&ex =
dynamic_cast<
const
SROMVector
&
>
(x);
66
pvec_
->axpy(alpha,*(ex.
getProbabilityVector
()));
67
avec_
->axpy(alpha,*(ex.
getAtomVector
()));
68
}
69
70
Real
dot
(
const
Vector<Real>
&x )
const
{
71
const
SROMVector
& ex =
dynamic_cast<
const
SROMVector
&
>
(x);
72
Real pval =
pvec_
->dot(*(ex.
getProbabilityVector
()));
73
Real aval =
avec_
->dot(*(ex.
getAtomVector
()));
74
return
pval + aval;
75
}
76
77
Real
norm
()
const
{
78
Real val = 0;
79
val = std::sqrt(
dot
(*
this
) );
80
return
val;
81
}
82
83
ROL::Ptr<Vector<Real> >
clone
(
void
)
const
{
84
return
ROL::makePtr<SROMVector>(
85
ROL::staticPtrCast<
ProbabilityVector<Real>
>(
pvec_
->clone()),
86
ROL::staticPtrCast<
AtomVector<Real>
>(
avec_
->clone()) );
87
}
88
89
const
Vector<Real>
&
dual
(
void
)
const
{
90
if
( !
isDualInitialized_
) {
91
dual_vec_
= ROL::makePtr<SROMVector>(
92
ROL::staticPtrCast<
ProbabilityVector<Real>
>(
dual_pvec_
),
93
ROL::staticPtrCast<
AtomVector<Real>
>(
dual_avec_
) );
94
isDualInitialized_
=
true
;
95
}
96
dual_pvec_
->set(
pvec_
->dual());
97
dual_avec_
->set(
avec_
->dual());
98
return
*
dual_vec_
;
99
}
100
101
int
dimension
(
void
)
const
{
102
return
avec_
->dimension() +
pvec_
->dimension();
103
}
104
105
void
applyUnary
(
const
Elementwise::UnaryFunction<Real> &f ) {
106
pvec_
->applyUnary(f);
107
avec_
->applyUnary(f);
108
}
109
110
void
applyBinary
(
const
Elementwise::BinaryFunction<Real> &f,
const
Vector<Real>
&x ) {
111
const
SROMVector
& ex =
dynamic_cast<
const
SROMVector
&
>
(x);
112
pvec_
->applyBinary(f,*(ex.
getProbabilityVector
()));
113
avec_
->applyBinary(f,*(ex.
getAtomVector
()));
114
}
115
116
Real
reduce
(
const
Elementwise::ReductionOp<Real> &r )
const
{
117
Real result = r.initialValue();
118
Real pval =
pvec_
->reduce(r);
119
Real aval =
avec_
->reduce(r);
120
r.reduce(pval,result);
121
r.reduce(aval,result);
122
return
result;
123
}
124
125
const
ROL::Ptr<const AtomVector<Real> >
getAtomVector
(
void
)
const
{
126
return
avec_
;
127
}
128
129
const
ROL::Ptr<const ProbabilityVector<Real> >
getProbabilityVector
(
void
)
const
{
130
return
pvec_
;
131
}
132
133
ROL::Ptr<AtomVector<Real> >
getAtomVector
(
void
) {
134
return
avec_
;
135
}
136
137
ROL::Ptr<ProbabilityVector<Real> >
getProbabilityVector
(
void
) {
138
return
pvec_
;
139
}
140
141
void
setAtomVector
(
const
AtomVector<Real>
&vec) {
142
avec_
->set(vec);
143
}
144
145
void
setProbabilityVector
(
const
ProbabilityVector<Real>
&vec) {
146
pvec_
->set(vec);
147
}
148
149
};
// class SROMVector
150
151
}
// namespace ROL
152
153
#endif
ROL_AtomVector.hpp
ROL_ProbabilityVector.hpp
ROL::AtomVector
Provides the std::vector implementation of the ROL::Vector interface.
Definition
ROL_AtomVector.hpp:29
ROL::ProbabilityVector
Provides the std::vector implementation of the ROL::Vector interface.
Definition
ROL_ProbabilityVector.hpp:29
ROL::SROMVector::axpy
void axpy(const Real alpha, const Vector< Real > &x)
Definition
ROL_SROMVector.hpp:64
ROL::SROMVector::pvec_
const ROL::Ptr< ProbabilityVector< Real > > pvec_
Definition
ROL_SROMVector.hpp:30
ROL::SROMVector::set
void set(const Vector< Real > &x)
Definition
ROL_SROMVector.hpp:47
ROL::SROMVector::dimension
int dimension(void) const
Return dimension of the vector space.
Definition
ROL_SROMVector.hpp:101
ROL::SROMVector::norm
Real norm() const
Returns where .
Definition
ROL_SROMVector.hpp:77
ROL::SROMVector::dot
Real dot(const Vector< Real > &x) const
Definition
ROL_SROMVector.hpp:70
ROL::SROMVector::dual_vec_
ROL::Ptr< SROMVector< Real > > dual_vec_
Definition
ROL_SROMVector.hpp:35
ROL::SROMVector::clone
ROL::Ptr< Vector< Real > > clone(void) const
Clone to make a new (uninitialized) vector.
Definition
ROL_SROMVector.hpp:83
ROL::SROMVector::getProbabilityVector
ROL::Ptr< ProbabilityVector< Real > > getProbabilityVector(void)
Definition
ROL_SROMVector.hpp:137
ROL::SROMVector::applyBinary
void applyBinary(const Elementwise::BinaryFunction< Real > &f, const Vector< Real > &x)
Definition
ROL_SROMVector.hpp:110
ROL::SROMVector::reduce
Real reduce(const Elementwise::ReductionOp< Real > &r) const
Definition
ROL_SROMVector.hpp:116
ROL::SROMVector::dual
const Vector< Real > & dual(void) const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis,...
Definition
ROL_SROMVector.hpp:89
ROL::SROMVector::plus
void plus(const Vector< Real > &x)
Definition
ROL_SROMVector.hpp:53
ROL::SROMVector::avec_
const ROL::Ptr< AtomVector< Real > > avec_
Definition
ROL_SROMVector.hpp:31
ROL::SROMVector::applyUnary
void applyUnary(const Elementwise::UnaryFunction< Real > &f)
Definition
ROL_SROMVector.hpp:105
ROL::SROMVector::uint
std::vector< Real >::size_type uint
Definition
ROL_SROMVector.hpp:28
ROL::SROMVector::dual_avec_
ROL::Ptr< Vector< Real > > dual_avec_
Definition
ROL_SROMVector.hpp:34
ROL::SROMVector::scale
void scale(const Real alpha)
Compute where .
Definition
ROL_SROMVector.hpp:59
ROL::SROMVector::setAtomVector
void setAtomVector(const AtomVector< Real > &vec)
Definition
ROL_SROMVector.hpp:141
ROL::SROMVector::getAtomVector
ROL::Ptr< AtomVector< Real > > getAtomVector(void)
Definition
ROL_SROMVector.hpp:133
ROL::SROMVector::getProbabilityVector
const ROL::Ptr< const ProbabilityVector< Real > > getProbabilityVector(void) const
Definition
ROL_SROMVector.hpp:129
ROL::SROMVector::getAtomVector
const ROL::Ptr< const AtomVector< Real > > getAtomVector(void) const
Definition
ROL_SROMVector.hpp:125
ROL::SROMVector::dual_pvec_
ROL::Ptr< Vector< Real > > dual_pvec_
Definition
ROL_SROMVector.hpp:33
ROL::SROMVector::setProbabilityVector
void setProbabilityVector(const ProbabilityVector< Real > &vec)
Definition
ROL_SROMVector.hpp:145
ROL::SROMVector::isDualInitialized_
bool isDualInitialized_
Definition
ROL_SROMVector.hpp:36
ROL::SROMVector::SROMVector
SROMVector(const ROL::Ptr< ProbabilityVector< Real > > &pvec, const ROL::Ptr< AtomVector< Real > > &avec)
Definition
ROL_SROMVector.hpp:40
ROL::Vector
Defines the linear algebra or vector space interface.
Definition
ROL_Vector.hpp:51
ROL
Definition
ROL_ElementwiseVector.hpp:27
Generated by
1.17.0