#include "Teuchos_StandardCatchMacros.hpp"
#include "Epetra_Map.h"
#include "Epetra_CrsMatrix.h"
#ifdef EPETRA_MPI
#include "mpi.h"
#include "Epetra_MpiComm.h"
#endif
#ifndef __cplusplus
#define __cplusplus
#endif
#include "Epetra_Comm.h"
#include "Epetra_SerialComm.h"
 
 
int main(int argc, char *argv[])
{
#ifdef EPETRA_MPI
  
  MPI_Init(&argc,&argv);
  Teuchos::RCP<Epetra_MpiComm> Comm = Teuchos::rcp( new Epetra_MpiComm(MPI_COMM_WORLD) );
#else
  
  Teuchos::RCP<Epetra_SerialComm> Comm = Teuchos::rcp( new Epetra_SerialComm() );
#endif
 
  bool success = false;
  try {
    int i;
    int ierr;
 
    
    int dim = 100;
    int blockSize = 5;
 
    bool verbose = false;
    if (argc>1) {
      if (argv[1][0]=='-' && argv[1][1]=='v') {
        verbose = true;
      }
    }
 
    
    
    Teuchos::RCP<Epetra_Map> Map = Teuchos::rcp( new Epetra_Map(dim, 0, *Comm) );
 
    
    int NumMyElements = Map->NumMyElements();
    std::vector<int> MyGlobalElements(NumMyElements);
    Map->MyGlobalElements(&MyGlobalElements[0]);
 
    
    
    
    std::vector<int> NumNz(NumMyElements);
 
    
    
    for (i=0; i<NumMyElements; i++) {
      if (MyGlobalElements[i]==0 || MyGlobalElements[i] == dim-1) {
        NumNz[i] = 2;
      }
      else {
        NumNz[i] = 3;
      }
    }
 
    
    Teuchos::RCP<Epetra_CrsMatrix> A = Teuchos::rcp( new Epetra_CrsMatrix(Epetra_DataAccess::Copy, *Map, &NumNz[0]) );
 
    
    
    
    std::vector<double> Values(2);
    Values[0] = -1.0; Values[1] = -1.0;
    std::vector<int> Indices(2);
    double two = 2.0;
    int NumEntries;
    for (i=0; i<NumMyElements; i++) {
      if (MyGlobalElements[i]==0) {
        Indices[0] = 1;
        NumEntries = 1;
      }
      else if (MyGlobalElements[i] == dim-1) {
        Indices[0] = dim-2;
        NumEntries = 1;
      }
      else {
        Indices[0] = MyGlobalElements[i]-1;
        Indices[1] = MyGlobalElements[i]+1;
        NumEntries = 2;
      }
      ierr = A->InsertGlobalValues(MyGlobalElements[i],NumEntries,&Values[0],&Indices[0]);
      assert(ierr==0);
      
      ierr = A->InsertGlobalValues(MyGlobalElements[i],1,&two,&MyGlobalElements[i]);
      assert(ierr==0);
    }
 
    
    ierr = A->FillComplete();
    assert(ierr==0);
 
    
 
    
 
    
    
    ivec->Random();
 
    
    if (verbose) {
    }
 
    
    ierr = Anasazi::TestMultiVecTraits<double,EMV>(MyOM,ivec);
    success = (ierr == 0);
    if (ierr) {
    }
    else {
      MyOM->print(
Anasazi::Warnings,
"*** EpetraAdapter FAILED TestMultiVecTraits() ***\n\n");
 
    }
 
    
    ierr = Anasazi::TestOperatorTraits<double,EMV,EOP>(MyOM,ivec,op);
    success &= (ierr == 0);
    if (ierr) {
    }
    else {
      MyOM->print(
Anasazi::Warnings,
"*** EpetraAdapter FAILED TestOperatorTraits() ***\n\n");
 
    }
 
    if (success)
    else
  }
  TEUCHOS_STANDARD_CATCH_STATEMENTS(true, std::cerr, success);
 
#ifdef EPETRA_MPI
  MPI_Finalize();
#endif
 
  return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
}
Basic output manager for sending information of select verbosity levels to the appropriate output str...
 
Anasazi header file which uses auto-configuration information to include necessary C++ headers.
 
Declarations of Anasazi multi-vector and operator classes using Epetra_MultiVector and Epetra_Operato...
 
Test routines for MultiVecTraits and OperatorTraits conformity.
 
Anasazi's basic output manager for sending information of select verbosity levels to the appropriate ...
 
Basic adapter class for Anasazi::MultiVec that uses Epetra_MultiVector.
 
Adapter class for creating a symmetric operator from an Epetra_Operator.
 
Interface for multivectors used by Anasazi's linear solvers.
 
Anasazi's templated virtual class for constructing an operator that can interface with the OperatorTr...