1 #ifndef ROL_XYCEVECTOR_H
2 #define ROL_XYCEVECTOR_H
5 #include "Xyce_config.h"
7 #include "N_ERH_ErrorMgr.h"
8 #include "N_LAS_MultiVector.h"
9 #include "N_LAS_Vector.h"
10 #include "N_PDS_Comm.h"
11 #include "N_PDS_ParMap.h"
12 #include "N_UTL_FeatureTest.h"
15 #include "Epetra_MultiVector.h"
16 #include "Epetra_Vector.h"
17 #include "Epetra_Map.h"
18 #include "Epetra_LocalMap.h"
19 #include "Epetra_IntVector.h"
20 #include "Epetra_Import.h"
21 #include "Epetra_Export.h"
22 #include "Epetra_Comm.h"
24 #include "ROL_Vector.hpp"
49 MultiVector & xmv =
const_cast<MultiVector &
>(xyce_multi_vec);
51 xyce_multi_vec_ = Teuchos::rcp(
new std::vector< Teuchos::RCP<Vector> >(size_));
52 for (
int i=0;i<
size_;i++){
53 (*xyce_multi_vec_)[i] = Teuchos::rcp(
new Vector( *xmv.pmap(), *xmv.omap() ));
58 ROL_XyceVector(
const Teuchos::RCP<std::vector<Teuchos::RCP<Vector> > > & xyce_multi_vec) : xyce_multi_vec_(xyce_multi_vec) {
59 size_ = xyce_multi_vec_->size();
64 size_ = xyce_multi_vec.size();
65 xyce_multi_vec_ = Teuchos::rcp(
new std::vector< Teuchos::RCP<Vector> >(size_));
67 for (
int i=0;i<
size_;i++){
68 (*xyce_multi_vec_)[i] = Teuchos::rcpFromRef(*xyce_multi_vec[i]);
73 Teuchos::RCP<const std::vector<Teuchos::RCP<Vector> > >
getVector()
const {
78 Teuchos::RCP<std::vector<Teuchos::RCP<Vector> > >
getVector() {
85 void plus( const ::ROL::Vector<Real> &x ) {
89 for (
int i=0;i<
size_;i++){
90 (*xyce_multi_vec_)[i]->addVec( (
double)1.0, *( (*ex.
getVector())[i] ) );
96 void scale(
const Real alpha ) {
97 for (
int i=0;i<
size_;i++){
98 (*xyce_multi_vec_)[i]->scale( (
double)alpha );
104 Real
dot( const ::ROL::Vector<Real> &x )
const {
108 for (
int i=0;i<
size_;i++){
109 val += (*xyce_multi_vec_)[i]->dotProduct( *(*ex.
getVector())[i] );
117 std::vector<double> vals(size_,0.0);
119 for (
int i=0;i<
size_;i++){
120 (*xyce_multi_vec_)[i]->lpNorm(2,&vals[i]);
121 res += vals[i]*vals[i];
123 return (Real) sqrt(res);
128 Teuchos::RCP< ::ROL::Vector<Real> >
clone()
const{
132 Teuchos::RCP< std::vector<Teuchos::RCP<Vector> > > x = Teuchos::rcp(
new std::vector<Teuchos::RCP<Vector> >(size_));
139 for (
int i=0;i<
size_;i++){
140 (*x)[i] = Teuchos::rcp(
new Vector( *((*xyce_multi_vec_)[i]->pmap()), *((*xyce_multi_vec_)[i]->omap()) ) );
151 for (
int i=0;i<
size_;i++){
152 (*xyce_multi_vec_)[i]->random();
156 void print(std::ostream & outStream=std::cout) {
157 for (
int i=0;i<
size_;i++){
158 (*xyce_multi_vec_)[i]->printPetraObject(outStream);
164 virtual void axpy(
const Real alpha, const ::ROL::Vector<Real> &x ) {
166 for (
int i=0;i<
size_;i++){
167 (*xyce_multi_vec_)[i]->addVec( (
double)alpha, *( (*ex.
getVector())[i] ) );
174 for (
int i=0;i<
size_;i++){
175 (*xyce_multi_vec_)[i]->putScalar( 0.0 );
180 for (
int i=0;i<
size_;i++){
181 (*xyce_multi_vec_)[i]->putScalar( (
double)alpha );
Teuchos::RCP< ::ROL::Vector< Real > > clone() const
Clone to make a new (uninitialized) vector.
virtual void zero()
Set to zero vector.
Real dot(const ::ROL::Vector< Real > &x) const
Returns where .
ROL_XyceVector(std::vector< Vector * > &xyce_multi_vec)
Pure virtual class to augment a linear system.
void scale(const Real alpha)
Compute where .
void print(std::ostream &outStream=std::cout)
virtual ~ROL_XyceVector()
ROL_XyceVector(const int size, const MultiVector &xyce_multi_vec)
Teuchos::RCP< std::vector< Teuchos::RCP< Vector > > > getVector()
Teuchos::RCP< std::vector< Teuchos::RCP< Vector > > > xyce_multi_vec_
void plus(const ::ROL::Vector< Real > &x)
Compute where .
Real norm() const
Returns where .
Teuchos::RCP< const std::vector< Teuchos::RCP< Vector > > > getVector() const
virtual void axpy(const Real alpha, const ::ROL::Vector< Real > &x)
Compute where .
ROL_XyceVector(const Teuchos::RCP< std::vector< Teuchos::RCP< Vector > > > &xyce_multi_vec)
virtual void putScalar(Real alpha)