44 #ifndef ROL_ATOMVECTOR_H 45 #define ROL_ATOMVECTOR_H 64 typedef typename std::vector<Real>::size_type
uint;
72 const int numMySamples,
const int dimension)
74 numMySamples_(numMySamples), dimension_(dimension) {}
76 Teuchos::RCP<const std::vector<Real> >
getAtom(
const int i)
const {
77 TEUCHOS_TEST_FOR_EXCEPTION((i < 0 || i > numMySamples_), std::invalid_argument,
78 ">>> ERROR (ROL::AtomVector): index out of bounds in getAtom!");
79 uint dim =
static_cast<uint
>(
dimension_), I = static_cast<uint>(i);
80 std::vector<Real> pt(dim,0);
82 for (uint j = 0; j < dim; ++j) {
83 pt[j] = yval[I*dim + j];
85 return Teuchos::rcp(
new std::vector<Real>(pt));
88 void setAtom(
const int i,
const std::vector<Real> &pt) {
89 TEUCHOS_TEST_FOR_EXCEPTION((i < 0 || i > numMySamples_), std::invalid_argument,
90 ">>> ERROR (ROL::AtomVector): index out of bounds in setAtom!");
91 uint dim =
static_cast<uint
>(
dimension_), I = static_cast<uint>(i);
93 for (uint j = 0; j < dim; ++j) {
94 yval[I*dim + j] = pt[j];
109 typedef typename std::vector<Real>::size_type
uint;
111 const Teuchos::RCP<std::vector<Real> >
scale_;
118 const int numMySamples,
const int dimension,
119 const Teuchos::RCP<std::vector<Real> > &
scale)
120 :
AtomVector<Real>(vec,bman,numMySamples,dimension),
121 scale_(
scale), isDualInitialized_(false) {}
126 uint ysize = yval.size();
127 TEUCHOS_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++) {
135 index = i*dimension + j;
136 val += xval[index] * (*scale_)[index] * yval[index];
144 Teuchos::RCP<Vector<Real> >
clone(
void)
const {
148 Teuchos::rcp(
new std::vector<Real>(numMySamples*dimension)),
150 numMySamples,dimension,scale_));
156 if ( !isDualInitialized_ ) {
158 Teuchos::rcp(
new std::vector<Real>(numMySamples*dimension)),
160 numMySamples,dimension,scale_));
161 isDualInitialized_ =
true;
164 for (uint i = 0; i < numMySamples; i++) {
166 index = i*dimension + j;
167 (*(dual_vec_->getVector()))[index]
177 typedef typename std::vector<Real>::size_type
uint;
179 const Teuchos::RCP<std::vector<Real> >
scale_;
186 const int numMySamples,
const int dimension,
187 const Teuchos::RCP<std::vector<Real> > &
scale)
188 :
AtomVector<Real>(vec,bman,numMySamples,dimension),
189 scale_(
scale), isDualInitialized_(false) {}
194 uint ysize = yval.size();
195 TEUCHOS_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++) {
203 index = i*dimension + j;
204 val += xval[index] * yval[index] / (*scale_)[index];
212 Teuchos::RCP<Vector<Real> >
clone(
void)
const {
216 Teuchos::rcp(
new std::vector<Real>(numMySamples*dimension)),
218 numMySamples,dimension,scale_));
224 if ( !isDualInitialized_ ) {
226 Teuchos::rcp(
new std::vector<Real>(numMySamples*dimension)),
228 numMySamples,dimension,scale_));
229 isDualInitialized_ =
true;
232 for (uint i = 0; i < numMySamples; i++) {
234 index = i*dimension + j;
235 (*(primal_vec_->getVector()))[index]
std::vector< Real >::size_type uint
void scale(const Real alpha)
int getNumMyAtoms(void) const
const Vector< Real > & dual(void) const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis...
Provides the std::vector implementation of the ROL::Vector interface.
int dimension(void) const
Return dimension of the vector space.
Provides the std::vector implementation of the ROL::Vector interface.
void setAtom(const int i, const std::vector< Real > &pt)
const Vector< Real > & dual(void) const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis...
PrimalAtomVector(const Teuchos::RCP< std::vector< Real > > &vec, const Teuchos::RCP< BatchManager< Real > > &bman, const int numMySamples, const int dimension, const Teuchos::RCP< std::vector< Real > > &scale)
Defines the linear algebra or vector space interface.
Teuchos::RCP< PrimalAtomVector< Real > > primal_vec_
Real dot(const Vector< Real > &x) const
Compute where .
Teuchos::RCP< DualAtomVector< Real > > dual_vec_
const Teuchos::RCP< std::vector< Real > > scale_
DualAtomVector(const Teuchos::RCP< std::vector< Real > > &vec, const Teuchos::RCP< BatchManager< Real > > &bman, const int numMySamples, const int dimension, const Teuchos::RCP< std::vector< Real > > &scale)
std::vector< Real >::size_type uint
Teuchos::RCP< const std::vector< Element > > getVector() const
Teuchos::RCP< const std::vector< Real > > getAtom(const int i) const
Teuchos::RCP< Vector< Real > > clone(void) const
Clone to make a new (uninitialized) vector.
Teuchos::RCP< Vector< Real > > clone(void) const
Clone to make a new (uninitialized) vector.
int getDimension(void) const
Real dot(const Vector< Real > &x) const
Compute where .
AtomVector(const Teuchos::RCP< std::vector< Real > > &vec, const Teuchos::RCP< BatchManager< Real > > &bman, const int numMySamples, const int dimension)
const Teuchos::RCP< BatchManager< Real > > getBatchManager(void) const
std::vector< Real >::size_type uint
const Teuchos::RCP< std::vector< Real > > scale_