44 #ifndef ROL_EPETRAMULTIVECTOR_H
45 #define ROL_EPETRAMULTIVECTOR_H
47 #include "Epetra_MultiVector.h"
48 #include "Epetra_Map.h"
49 #include "Epetra_LocalMap.h"
50 #include "Epetra_IntVector.h"
51 #include "Epetra_Import.h"
75 Teuchos::RCP<const Epetra_MultiVector> xvalptr = ex.
getVector();
81 void scale(
const Real alpha ) {
90 Teuchos::RCP<const Epetra_MultiVector> xvalptr = ex.
getVector();
100 return (Real)sqrt(val[0]);
105 Teuchos::RCP<Vector<Real> >
clone()
const{
114 Teuchos::RCP<const Epetra_MultiVector> xvalptr = ex.
getVector();
128 Teuchos::RCP<const Epetra_MultiVector> xvalptr = ex.
getVector();
132 Teuchos::RCP<const Epetra_MultiVector>
getVector()
const {
136 Teuchos::RCP<Vector<Real> >
basis(
const int i )
const {
138 const Epetra_BlockMap & domainMap = const_cast <Epetra_BlockMap &> (const_cast <Epetra_MultiVector &> ((*e->getVector())).Map());
141 const Epetra_Comm & comm = domainMap.Comm();
142 int numMyElements = domainMap.NumMyElements();
143 Epetra_BlockMap allGidsMap(-1, numMyElements, 1, 0, comm);
144 Epetra_IntVector allGids(allGidsMap);
145 for (
int j=0; j<numMyElements; j++) {allGids[j] = domainMap.GID(j);}
148 int numGlobalElements = domainMap.NumGlobalElements();
149 Epetra_LocalMap allGidsOnRootMap(numGlobalElements, 0, comm);
150 Epetra_Import importer(allGidsOnRootMap, allGidsMap);
151 Epetra_IntVector allGidsOnRoot(allGidsOnRootMap);
152 allGidsOnRoot.Import(allGids, importer, Insert);
153 Epetra_Map rootDomainMap(-1, allGidsOnRoot.MyLength(), allGidsOnRoot.Values(), domainMap.IndexBase(), comm);
155 for (
int j = 0; j < this->
dimension(); j++) {
157 int curGlobalCol = rootDomainMap.GID(i);
158 if (domainMap.MyGID(curGlobalCol)){
159 int curCol = domainMap.LID(curGlobalCol);
160 (const_cast <Epetra_MultiVector &> (*e->getVector()))[0][curCol]= 1.0;
virtual void axpy(const Real alpha, const Vector< Real > &x)
Compute where .
Defines the linear algebra or vector space interface.
Real dot(const Vector< Real > &x) const
Returns where .
Teuchos::RCP< Epetra_MultiVector > epetra_vec_
Teuchos::RCP< Vector< Real > > clone() const
Clone to make a new (uninitialized) vector.
virtual void set(const Vector< Real > &x)
Set where .
void scale(const Real alpha)
Compute where .
Real norm() const
Returns where .
Teuchos::RCP< Vector< Real > > basis(const int i) const
Return i-th basis vector.
Implements the ROL::Vector interface for an Epetra_MultiVector.
void plus(const Vector< Real > &x)
Compute where .
Teuchos::RCP< const Epetra_MultiVector > getVector() const
int dimension() const
Return dimension of the vector space.
virtual ~EpetraMultiVector()
virtual void zero()
Set to zero vector.
EpetraMultiVector(const Teuchos::RCP< Epetra_MultiVector > &epetra_vec)