44 #ifndef ROL_ATOMVECTOR_H 45 #define ROL_ATOMVECTOR_H 65 typedef typename std::vector<Real>::size_type
uint;
72 const int numMySamples,
const int dimension)
73 :
StdVector<Real>(vec), numMySamples_(numMySamples), dimension_(dimension) {}
75 Teuchos::RCP<const std::vector<Real> >
getAtom(
const int i)
const {
76 std::vector<Real> pt(dimension_,0.);
77 if ( i >= 0 && i < (
int)numMySamples_ ) {
80 pt[j] = yval[i*dimension_ + j];
84 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::invalid_argument,
85 ">>> ERROR (ROL::AtomVector): index out of bounds in getAtom!");
87 return Teuchos::rcp(
new std::vector<Real>(pt));
90 void setAtom(
const int i,
const std::vector<Real> &pt) {
91 if ( i >= 0 && i < (
int)numMySamples_ ) {
94 yval[i*dimension_ + j] = pt[j];
98 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::invalid_argument,
99 ">>> ERROR (ROL::AtomVector): index out of bounds in setAtom!");
114 typedef typename std::vector<Real>::size_type
uint;
118 const Teuchos::RCP<std::vector<Real> >
scale_;
119 const Teuchos::RCP<BatchManager<Real> >
bman_;
125 const int numMySamples,
127 const Teuchos::RCP<std::vector<Real> > &
scale,
129 :
AtomVector<Real>(vec,numMySamples,dimension),
130 numMySamples_((uint)numMySamples), dimension_((uint)dimension),
131 scale_(
scale), bman_(bman) {}
135 const std::vector<Real> &xval = *(ex.
getVector());
141 index = i*dimension_ + j;
142 val += xval[index] * (*scale_)[index] * yval[index];
147 bman_->sumAll(&val,&sum_val,1);
151 Teuchos::RCP<Vector<Real> >
clone(
void)
const {
153 Teuchos::rcp(
new std::vector<Real>(numMySamples_*dimension_)),
154 numMySamples_,dimension_,scale_,bman_));
160 std::vector<Real> tmp(yval);
163 index = i*dimension_ + j;
164 tmp[index] *= (*scale_)[index];
168 Teuchos::rcp(
new std::vector<Real>(tmp)),
169 numMySamples_,dimension_,scale_,bman_));
176 bman_->sumAll(&dim,&sum,1);
180 Real
reduce(
const Elementwise::ReductionOp<Real> &r)
const {
183 Real result = r.initialValue();
186 index = i*dimension_ + j;
187 r.reduce(yval[index],result);
192 bman_->reduceAll(&result,&sum,r);
199 typedef typename std::vector<Real>::size_type
uint;
203 const Teuchos::RCP<std::vector<Real> >
scale_;
204 const Teuchos::RCP<BatchManager<Real> >
bman_;
206 mutable Teuchos::RCP<PrimalAtomVector<Real> >
dual_vec_;
210 const int numMySamples,
212 const Teuchos::RCP<std::vector<Real> > &
scale,
214 :
AtomVector<Real>(vec,numMySamples,dimension),
215 numMySamples_((uint)numMySamples), dimension_((uint)dimension),
216 scale_(
scale), bman_(bman) {}
220 const std::vector<Real> &xval = *(ex.
getVector());
226 index = i*dimension_ + j;
227 val += xval[index] * yval[index] / (*scale_)[index];
232 bman_->sumAll(&val,&sum_val,1);
236 Teuchos::RCP<Vector<Real> >
clone(
void)
const {
238 Teuchos::rcp(
new std::vector<Real>(numMySamples_*dimension_)),
239 numMySamples_,dimension_,scale_,bman_));
245 std::vector<Real> tmp(yval);
248 index = i*dimension_ + j;
249 tmp[index] /= (*scale_)[index];
253 Teuchos::rcp(
new std::vector<Real>(tmp)),
254 numMySamples_,dimension_,scale_,bman_));
261 bman_->sumAll(&dim,&sum,1);
265 Real
reduce(
const Elementwise::ReductionOp<Real> &r)
const {
268 Real result = r.initialValue();
271 index = i*dimension_ + j;
272 r.reduce(yval[index],result);
277 bman_->reduceAll(&result,&sum,r);
const Teuchos::RCP< BatchManager< Real > > bman_
Teuchos::RCP< Vector< Real > > clone(void) const
Clone to make a new (uninitialized) vector.
std::vector< Real >::size_type uint
void scale(const Real alpha)
Teuchos::RCP< const std::vector< Element > > getVector() const
Provides the std::vector implementation of the ROL::Vector interface.
int dimension(void) const
Return dimension of the vector space.
int getDimension(void) const
void setAtom(const int i, const std::vector< Real > &pt)
Real dot(const Vector< Real > &x) const
Compute where .
DualAtomVector(const Teuchos::RCP< std::vector< Real > > &vec, const int numMySamples, const int dimension, const Teuchos::RCP< std::vector< Real > > &scale, const Teuchos::RCP< BatchManager< Real > > &bman)
Real reduce(const Elementwise::ReductionOp< Real > &r) const
Defines the linear algebra or vector space interface.
int dimension(void) const
Return dimension of the vector space.
Teuchos::RCP< DualAtomVector< Real > > dual_vec_
Provides the std::vector implementation of the ROL::Vector interface.
const Vector< Real > & dual(void) const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis...
AtomVector(const Teuchos::RCP< std::vector< Real > > &vec, const int numMySamples, const int dimension)
const Teuchos::RCP< std::vector< Real > > scale_
Teuchos::RCP< const std::vector< Real > > getAtom(const int i) const
std::vector< Real >::size_type uint
const Vector< Real > & dual(void) const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis...
Real dot(const Vector< Real > &x) const
Compute where .
int getNumMyAtoms(void) const
Real reduce(const Elementwise::ReductionOp< Real > &r) const
PrimalAtomVector(const Teuchos::RCP< std::vector< Real > > &vec, const int numMySamples, const int dimension, const Teuchos::RCP< std::vector< Real > > &scale, const Teuchos::RCP< BatchManager< Real > > &bman)
const Teuchos::RCP< BatchManager< Real > > bman_
Teuchos::RCP< Vector< Real > > clone(void) const
Clone to make a new (uninitialized) vector.
std::vector< Real >::size_type uint
const Teuchos::RCP< std::vector< Real > > scale_
Teuchos::RCP< PrimalAtomVector< Real > > dual_vec_