44 #ifndef ROL_ATOMVECTOR_H
45 #define ROL_ATOMVECTOR_H
57 class PrimalAtomVector;
72 const int numMySamples,
const int dimension)
76 ROL::Ptr<const std::vector<Real> >
getAtom(
const int i)
const {
77 ROL_TEST_FOR_EXCEPTION((i < 0 || i >
numMySamples_), std::invalid_argument,
78 ">>> ERROR (ROL::AtomVector): index out of bounds in getAtom!");
80 std::vector<Real> pt(dim,0);
82 for (
uint j = 0; j < dim; ++j) {
83 pt[j] = yval[I*dim + j];
85 return ROL::makePtr<std::vector<Real>>(pt);
88 void setAtom(
const int i,
const std::vector<Real> &pt) {
89 ROL_TEST_FOR_EXCEPTION((i < 0 || i >
numMySamples_), std::invalid_argument,
90 ">>> ERROR (ROL::AtomVector): index out of bounds in setAtom!");
93 for (
uint j = 0; j < dim; ++j) {
94 yval[I*dim + j] = pt[j];
111 const ROL::Ptr<std::vector<Real> >
scale_;
118 const int numMySamples,
const int dimension,
119 const ROL::Ptr<std::vector<Real> > &scale)
120 :
AtomVector<Real>(vec,bman,numMySamples,dimension),
124 const std::vector<Real> &xval = *(
dynamic_cast<const StdVector<Real>&
>(x).getVector());
126 uint ysize = yval.size();
127 ROL_TEST_FOR_EXCEPTION( xval.size() != ysize, std::invalid_argument,
128 "Error: Vectors must have the same dimension." );
132 Real val(0), sum_val(0);
133 for (
uint i = 0; i < numMySamples; i++) {
134 for (
uint j = 0; j < dimension; j++) {
135 index = i*dimension + j;
136 val += xval[index] * (*scale_)[index] * yval[index];
144 ROL::Ptr<Vector<Real> >
clone(
void)
const {
147 return ROL::makePtr<PrimalAtomVector>(
148 ROL::makePtr<std::vector<Real>>(numMySamples*dimension),
150 numMySamples,dimension,
scale_);
157 dual_vec_ = ROL::makePtr<DualAtomVector<Real>>(
158 ROL::makePtr<std::vector<Real>>(numMySamples*dimension),
160 numMySamples,dimension,
scale_);
164 for (
uint i = 0; i < numMySamples; i++) {
165 for (
uint j = 0; j < dimension; j++) {
166 index = i*dimension + j;
179 const ROL::Ptr<std::vector<Real> >
scale_;
186 const int numMySamples,
const int dimension,
187 const ROL::Ptr<std::vector<Real> > &scale)
188 :
AtomVector<Real>(vec,bman,numMySamples,dimension),
192 const std::vector<Real> &xval = *(
dynamic_cast<const StdVector<Real>&
>(x).getVector());
194 uint ysize = yval.size();
195 ROL_TEST_FOR_EXCEPTION( xval.size() != ysize, std::invalid_argument,
196 "Error: Vectors must have the same dimension." );
200 Real val(0), sum_val(0);
201 for (
uint i = 0; i < numMySamples; i++) {
202 for (
uint j = 0; j < dimension; j++) {
203 index = i*dimension + j;
204 val += xval[index] * yval[index] / (*scale_)[index];
212 ROL::Ptr<Vector<Real> >
clone(
void)
const {
215 return ROL::makePtr<DualAtomVector>(
216 ROL::makePtr<std::vector<Real>>(numMySamples*dimension),
218 numMySamples,dimension,
scale_);
225 primal_vec_ = ROL::makePtr<PrimalAtomVector<Real>>(
226 ROL::makePtr<std::vector<Real>>(numMySamples*dimension),
228 numMySamples,dimension,
scale_);
232 for (
uint i = 0; i < numMySamples; i++) {
233 for (
uint j = 0; j < dimension; j++) {
234 index = i*dimension + j;