27                                 const int numvecs, 
const int stride)
 
   28    : Epetra_MultiVector(Epetra_DataAccess::Copy, Map_in, array, stride, numvecs) 
 
 
   34    : Epetra_MultiVector(Map_in, numvecs) 
 
 
   40                                 const Epetra_MultiVector& P_vec, 
 
   41                                 const std::vector<int>& index )
 
   42    : Epetra_MultiVector(CV, P_vec, &(const_cast<std::vector<int> &>(index))[0], index.size())
 
 
   48    : Epetra_MultiVector(P_vec) 
 
 
  105    int numvecs = index.size();
 
  106    if ( A.GetNumberVecs() != numvecs ) {
 
  107      std::vector<int> index2( numvecs );
 
  108      for(
int i=0; i<numvecs; i++)
 
  111      TEUCHOS_TEST_FOR_EXCEPTION( tmp_vec==NULL, std::invalid_argument, 
"Anasazi::EpetraMultiVec::SetBlocks() cast of MultiVec<double> to EpetraMultiVec failed.");
 
  113      temp_vec.
MvAddMv( 1.0, A_vec, 0.0, A_vec );
 
  116      temp_vec.
MvAddMv( 1.0, A, 0.0, A );
 
 
  127      const Teuchos::SerialDenseMatrix<int,double>& B, 
double beta ) 
 
  129    Epetra_LocalMap LocalMap(B.numRows(), 0, Map().Comm());
 
  130    Epetra_MultiVector B_Pvec(Epetra_DataAccess::View, LocalMap, B.values(), B.stride(), B.numCols());
 
  133    TEUCHOS_TEST_FOR_EXCEPTION( A_vec==NULL,  std::invalid_argument, 
"Anasazi::EpetraMultiVec::SetBlocks() cast of MultiVec<double> to EpetraMultiVec failed.");
 
  135    TEUCHOS_TEST_FOR_EXCEPTION( 
 
  136        Multiply( 
'N', 
'N', alpha, *A_vec, B_Pvec, beta ) != 0,
 
  137        EpetraMultiVecFailure, 
"Anasazi::EpetraMultiVec::MvTimesMatAddMv() call to Epetra_MultiVec::Multiply() returned a nonzero value.");
 
 
  150    TEUCHOS_TEST_FOR_EXCEPTION( A_vec==NULL,  std::invalid_argument, 
"Anasazi::EpetraMultiVec::MvAddMv() cast of MultiVec<double> to EpetraMultiVec failed.");
 
  152    TEUCHOS_TEST_FOR_EXCEPTION( B_vec==NULL,  std::invalid_argument, 
"Anasazi::EpetraMultiVec::MvAddMv() cast of MultiVec<double> to EpetraMultiVec failed.");
 
  154    TEUCHOS_TEST_FOR_EXCEPTION( 
 
  155        Update( alpha, *A_vec, beta, *B_vec, 0.0 ) != 0,
 
  156        EpetraMultiVecFailure, 
"Anasazi::EpetraMultiVec::MvAddMv() call to Epetra_MultiVec::Update() returned a nonzero value.");
 
 
  166                                   Teuchos::SerialDenseMatrix<int,double>& B
 
  167#ifdef HAVE_ANASAZI_EXPERIMENTAL
 
  175      Epetra_LocalMap LocalMap(B.numRows(), 0, Map().Comm());
 
  176      Epetra_MultiVector B_Pvec(Epetra_DataAccess::View, LocalMap, B.values(), B.stride(), B.numCols());
 
  178    TEUCHOS_TEST_FOR_EXCEPTION( 
 
  179        B_Pvec.Multiply( 
'T', 
'N', alpha, *A_vec, *
this, 0.0 ) != 0,
 
  180        EpetraMultiVecFailure, 
"Anasazi::EpetraMultiVec::MvTransMv() call to Epetra_MultiVec::Multiply() returned a nonzero value.");
 
 
  191#ifdef HAVE_ANASAZI_EXPERIMENTAL
 
  197    TEUCHOS_TEST_FOR_EXCEPTION( A_vec==NULL,  std::invalid_argument, 
"Anasazi::EpetraMultiVec::MvDot() cast of MultiVec<double> to EpetraMultiVec failed.");
 
  199    if (( (
int)b.size() >= A_vec->NumVectors() ) ) {
 
  200      TEUCHOS_TEST_FOR_EXCEPTION( 
 
  201          this->Dot( *A_vec, &b[0] ) != 0,
 
  202          EpetraMultiVecFailure, 
"Anasazi::EpetraMultiVec::MvDot() call to Epetra_MultiVec::Dot() returned a nonzero value.");
 
 
  214    int numvecs = this->NumVectors();
 
  215    TEUCHOS_TEST_FOR_EXCEPTION( (
int)alpha.size() != numvecs, std::invalid_argument, 
 
  216        "Anasazi::EpetraMultiVec::MvScale() alpha argument size was inconsistent with number of vectors in mv.");
 
  218    std::vector<int> tmp_index( 1, 0 );
 
  219    for (
int i=0; i<numvecs; i++) {
 
  220      Epetra_MultiVector temp_vec(Epetra_DataAccess::View, *
this, &tmp_index[0], 1);
 
  221      TEUCHOS_TEST_FOR_EXCEPTION( 
 
  222          temp_vec.Scale( alpha[i] ) != 0,
 
  223          EpetraMultiVecFailure, 
"Anasazi::EpetraMultiVec::MvScale() call to Epetra_MultiVec::Scale() returned a nonzero value.");
 
 
  258    TEUCHOS_TEST_FOR_EXCEPTION( vec_X==NULL, std::invalid_argument, 
"Anasazi::EpetraOp::Apply() cast of MultiVec<double> to Epetra_MultiVector failed.");
 
  259    TEUCHOS_TEST_FOR_EXCEPTION( vec_Y==NULL, std::invalid_argument, 
"Anasazi::EpetraOp::Apply() cast of MultiVec<double> to Epetra_MultiVector failed.");
 
  261    int info = Epetra_Op->Apply( *vec_X, *vec_Y );
 
  263                        "Anasazi::EpetraOp::Apply(): Error returned from Epetra_Operator::Apply()" );
 
 
  277                           const Teuchos::RCP<Epetra_Operator> &MOp,
 
  279    : isAInverse( isAInverse_ ), Epetra_AOp(AOp), Epetra_MOp(MOp) 
 
 
  298    Epetra_MultiVector temp_Y(*vec_Y); 
 
  300    TEUCHOS_TEST_FOR_EXCEPTION( vec_X==NULL, std::invalid_argument, 
"Anasazi::EpetraGenOp::Apply() cast of MultiVec<double> to Epetra_MultiVector failed.");
 
  301    TEUCHOS_TEST_FOR_EXCEPTION( vec_Y==NULL, std::invalid_argument, 
"Anasazi::EpetraGenOp::Apply() cast of MultiVec<double> to Epetra_MultiVector failed.");
 
  307    info = Epetra_MOp->Apply( *vec_X, temp_Y );
 
  309                        "Anasazi::EpetraGenOp::Apply(): Error returned from Epetra_Operator::Apply()" );
 
  312      info = Epetra_AOp->ApplyInverse( temp_Y, *vec_Y );
 
  315      info = Epetra_AOp->Apply( temp_Y, *vec_Y );
 
  318                        "Anasazi::EpetraGenOp::Apply(): Error returned from Epetra_Operator::Apply()" );
 
 
  330    info = Epetra_MOp->Apply( X, temp_Y );
 
  331    if (info!=0) 
return info;
 
  335      info = Epetra_AOp->ApplyInverse( temp_Y, Y );
 
  337      info = Epetra_AOp->Apply( temp_Y, Y );
 
 
  352      info = Epetra_AOp->Apply( X, temp_Y );
 
  354      info = Epetra_AOp->ApplyInverse( X, temp_Y );
 
  355    if (info!=0) 
return info;
 
  358    info = Epetra_MOp->ApplyInverse( temp_Y, Y );
 
 
  374    : Epetra_Op(Op), isTrans_(isTrans)
 
 
  391    Epetra_MultiVector* temp_vec = 
new Epetra_MultiVector( 
 
  392        (isTrans_) ? Epetra_Op->OperatorDomainMap() 
 
  393        : Epetra_Op->OperatorRangeMap(), 
 
  394        vec_X->NumVectors() );
 
  396    TEUCHOS_TEST_FOR_EXCEPTION( vec_X==NULL   , std::invalid_argument, 
"Anasazi::EpetraSymOp::Apply() cast of MultiVec<double> to Epetra_MultiVector failed.");
 
  397    TEUCHOS_TEST_FOR_EXCEPTION( vec_Y==NULL   , std::invalid_argument, 
"Anasazi::EpetraSymOp::Apply() cast of MultiVec<double> to Epetra_MultiVector failed.");
 
  398    TEUCHOS_TEST_FOR_EXCEPTION( temp_vec==NULL, std::invalid_argument, 
"Anasazi::EpetraSymOp::Apply() allocation Epetra_MultiVector failed.");
 
  405      info = Epetra_Op->SetUseTranspose( isTrans_ );
 
  409                            "Anasazi::EpetraSymOp::Apply(): Error returned from Epetra_Operator::Apply()" );
 
  415    info=Epetra_Op->Apply( *vec_X, *temp_vec );
 
  419                          "Anasazi::EpetraSymOp::Apply(): Error returned from Epetra_Operator::Apply()" );
 
  423    info=Epetra_Op->SetUseTranspose( !isTrans_ );
 
  427                          "Anasazi::EpetraSymOp::Apply(): Error returned from Epetra_Operator::Apply()" );
 
  431    info=Epetra_Op->Apply( *temp_vec, *vec_Y );
 
  435                          "Anasazi::EpetraSymOp::Apply(): Error returned from Epetra_Operator::Apply()" );
 
  439    info=Epetra_Op->SetUseTranspose( 
false );
 
  442                        "Anasazi::EpetraSymOp::Apply(): Error returned from Epetra_Operator::Apply()" );
 
 
  454      info=Epetra_Op->SetUseTranspose( isTrans_ );
 
  455      if (info!=0) { 
return info; }
 
  460    info=Epetra_Op->Apply( X, temp_vec );
 
  461    if (info!=0) { 
return info; }
 
  464    info=Epetra_Op->SetUseTranspose( !isTrans_ );
 
  465    if (info!=0) { 
return info; }
 
  468    info=Epetra_Op->Apply( temp_vec, Y );
 
  469    if (info!=0) { 
return info; }
 
  472    info=Epetra_Op->SetUseTranspose( 
false );
 
 
  485      info=Epetra_Op->SetUseTranspose( !isTrans_ );
 
  486      if (info!=0) { 
return info; }
 
  491    info=Epetra_Op->ApplyInverse( X, temp_vec );
 
  492    if (info!=0) { 
return info; }
 
  495    info=Epetra_Op->SetUseTranspose( isTrans_ );
 
  496    if (info!=0) { 
return info; }
 
  499    info=Epetra_Op->Apply( temp_vec, Y );
 
  500    if (info!=0) { 
return info; }
 
  503    info=Epetra_Op->SetUseTranspose( 
false );
 
 
  518    : Epetra_MV(MV), isTrans_(isTrans)
 
  521      MV_localmap = Teuchos::rcp( 
new Epetra_LocalMap( Epetra_MV->NumVectors(), 0, Epetra_MV->Map().Comm() ) );
 
  523      MV_blockmap = Teuchos::rcp( &Epetra_MV->Map(), 
false );
 
 
  538      Epetra_MultiVector temp_vec( *MV_localmap, temp_X.
GetNumberVecs() );
 
  541      info = temp_vec.Multiply( 
'T', 
'N', 1.0, *Epetra_MV, *vec_X, 0.0 );
 
  543                          "Anasazi::EpetraSymMVOp::Apply(): Error returned from Epetra_MultiVector::Multiply()" );
 
  546      info = vec_Y->Multiply( 
'N', 
'N', 1.0, *Epetra_MV, temp_vec, 0.0 );      
 
  548                          "Anasazi::EpetraSymMVOp::Apply(): Error returned from Epetra_MultiVector::Multiply()" );
 
  552      Epetra_MultiVector temp_vec( *MV_blockmap, temp_X.
GetNumberVecs() );
 
  555      info = temp_vec.Multiply( 
'N', 
'N', 1.0, *Epetra_MV, *vec_X, 0.0 );
 
  557                          "Anasazi::EpetraSymMVOp::Apply(): Error returned from Epetra_MultiVector::Multiply()" );
 
  560      info = vec_Y->Multiply( 
'T', 
'N', 1.0, *Epetra_MV, temp_vec, 0.0 );
 
  562                          "Anasazi::EpetraSymMVOp::Apply(): Error returned from Epetra_MultiVector::Multiply()" );
 
 
  576                                 const Teuchos::RCP<Epetra_Operator> &OP ) 
 
  577    : Epetra_MV(MV), Epetra_OP(OP)
 
  579      MV_blockmap = Teuchos::rcp( &Epetra_MV->Map(), 
false );
 
  580      Epetra_WMV = Teuchos::rcp( 
new Epetra_MultiVector( *MV_blockmap, Epetra_MV->NumVectors() ) ); 
 
  581      Epetra_OP->Apply( *Epetra_MV, *Epetra_WMV );
 
 
  594    Epetra_MultiVector temp_vec( *MV_blockmap, temp_X.
GetNumberVecs() );
 
  597    info = temp_vec.Multiply( 
'N', 
'N', 1.0, *Epetra_WMV, *vec_X, 0.0 );
 
  599                        "Anasazi::EpetraWSymMVOp::Apply(): Error returned from Epetra_MultiVector::Multiply()" );
 
  602    info = vec_Y->Multiply( 
'T', 
'N', 1.0, *Epetra_MV, temp_vec, 0.0 );
 
  604                        "Anasazi::EpetraWSymMVOp::Apply(): Error returned from Epetra_MultiVector::Multiply()" );
 
 
  617                                 const Teuchos::RCP<Epetra_Operator> &OP ) 
 
  618    : Epetra_MV(MV), Epetra_OP(OP)
 
  620      MV_blockmap = Teuchos::rcp( &Epetra_MV->Map(), 
false );
 
  621      Epetra_WMV = Teuchos::rcp( 
new Epetra_MultiVector( *MV_blockmap, Epetra_MV->NumVectors() ) ); 
 
  622      Epetra_OP->Apply( *Epetra_MV, *Epetra_WMV );
 
 
  635    Epetra_MultiVector temp_vec( *MV_blockmap, temp_X.
GetNumberVecs() );
 
  638    info = temp_vec.Multiply( 
'N', 
'N', 1.0, *Epetra_WMV, *vec_X, 0.0 );
 
  640                        "Anasazi::EpetraW2SymMVOp::Apply(): Error returned from Epetra_MultiVector::Multiply()" );
 
  643    info = vec_Y->Multiply( 
'T', 
'N', 1.0, *Epetra_WMV, temp_vec, 0.0 );
 
  645                        "Anasazi::EpetraW2SymMVOp::Apply(): Error returned from Epetra_MultiVector::Multiply()" );
 
 
Declarations of Anasazi multi-vector and operator classes using Epetra_MultiVector and Epetra_Operato...
 
void Apply(const MultiVec< double > &X, MultiVec< double > &Y) const
Apply method [inherited from Anasazi::Operator class].
 
int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Apply inverse method [inherited from Epetra_Operator class].
 
EpetraGenOp(const Teuchos::RCP< Epetra_Operator > &AOp, const Teuchos::RCP< Epetra_Operator > &MOp, bool isAInverse=true)
Basic constructor for applying operator  [default] or .
 
const Epetra_Map & OperatorDomainMap() const
Returns the Epetra_Map object associated with the domain of this operator.
 
~EpetraGenOp()
Destructor.
 
EpetraMultiVecAccessor is an interfaceto allow any Anasazi::MultiVec implementation that is based on ...
 
EpetraMultiVecFailure is thrown when a return value from an Epetra call on an Epetra_MultiVector is n...
 
Basic adapter class for Anasazi::MultiVec that uses Epetra_MultiVector.
 
MultiVec< double > * Clone(const int numvecs) const
Creates a new empty EpetraMultiVec containing numvecs columns.
 
void MvScale(double alpha)
Scale each element of the vectors in *this with alpha.
 
void MvAddMv(double alpha, const MultiVec< double > &A, double beta, const MultiVec< double > &B)
Replace *this with .
 
const MultiVec< double > * CloneView(const std::vector< int > &index) const
Creates a new EpetraMultiVec that shares the selected contents of *this.
 
void SetBlock(const MultiVec< double > &A, const std::vector< int > &index)
Copy the vectors in A to a set of vectors in *this.
 
EpetraMultiVec(const Epetra_BlockMap &Map_in, const int numvecs)
Basic EpetraMultiVec constructor.
 
void MvTransMv(double alpha, const MultiVec< double > &A, Teuchos::SerialDenseMatrix< int, double > &B) const
Compute a dense matrix B through the matrix-matrix multiply .
 
MultiVec< double > * CloneViewNonConst(const std::vector< int > &index)
Creates a new EpetraMultiVec that shares the selected contents of *this.
 
MultiVec< double > * CloneCopy() const
Creates a new EpetraMultiVec and copies contents of *this into the new vector (deep copy).
 
void MvTimesMatAddMv(double alpha, const MultiVec< double > &A, const Teuchos::SerialDenseMatrix< int, double > &B, double beta)
Update *this with .
 
void MvDot(const MultiVec< double > &A, std::vector< double > &b) const
Compute a vector b where the components are the individual dot-products, i.e.  where A[i] is the i-th...
 
void Apply(const MultiVec< double > &X, MultiVec< double > &Y) const
This method takes the Anasazi::MultiVec X and applies the operator to it resulting in the Anasazi::Mu...
 
EpetraOp(const Teuchos::RCP< Epetra_Operator > &Op)
Basic constructor. Accepts reference-counted pointer to an Epetra_Operator.
 
void Apply(const MultiVec< double > &X, MultiVec< double > &Y) const
Apply method.
 
EpetraSymMVOp(const Teuchos::RCP< const Epetra_MultiVector > &MV, bool isTrans=false)
Basic constructor for applying operator  [default] or .
 
EpetraSymOp(const Teuchos::RCP< Epetra_Operator > &Op, bool isTrans=false)
Basic constructor for applying operator  [default] or .
 
const Epetra_Map & OperatorDomainMap() const
Returns the Epetra_Map object associated with the domain of this operator.
 
int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Apply inverse method [inherited from Epetra_Operator class].
 
~EpetraSymOp()
Destructor.
 
void Apply(const MultiVec< double > &X, MultiVec< double > &Y) const
Apply method [inherited from Anasazi::Operator class].
 
void Apply(const MultiVec< double > &X, MultiVec< double > &Y) const
Apply method.
 
EpetraW2SymMVOp(const Teuchos::RCP< const Epetra_MultiVector > &MV, const Teuchos::RCP< Epetra_Operator > &OP)
Basic constructor for applying operator .
 
EpetraWSymMVOp(const Teuchos::RCP< const Epetra_MultiVector > &MV, const Teuchos::RCP< Epetra_Operator > &OP)
Basic constructor for applying operator .
 
void Apply(const MultiVec< double > &X, MultiVec< double > &Y) const
Apply method.
 
Interface for multivectors used by Anasazi's linear solvers.
 
virtual int GetNumberVecs() const =0
The number of vectors (i.e., columns) in the multivector.
 
Exceptions thrown to signal error in operator application.
 
Namespace Anasazi contains the classes, structs, enums and utilities used by the Anasazi package.
 
ConjType
Enumerated types used to specify conjugation arguments.