#include "Didasko_config.h"
#if defined(HAVE_DIDASKO_EPETRA) && defined(HAVE_DIDASKO_EPETRAEXT) && defined(HAVE_ZOLTAN)
#include "Epetra_ConfigDefs.h"
#ifdef HAVE_MPI
#include "mpi.h"
#include "Epetra_MpiComm.h"
#else
#include "Epetra_SerialComm.h"
#endif
#include "Trilinos_Util.h"
#include "Epetra_Comm.h"
#include "Epetra_Map.h"
#include "Epetra_Time.h"
#include "Epetra_BlockMap.h"
#include "Epetra_MultiVector.h"
#include "Epetra_Vector.h"
#include "Epetra_Export.h"
#include "Epetra_CrsMatrix.h"
#include "Epetra_VbrMatrix.h"
#include "Epetra_LinearProblem.h"
#include "Trilinos_Util_CrsMatrixGallery.h"
#include "EpetraExt_Zoltan_CrsGraph.h"
int main(int argc, char *argv[]) {
#ifdef HAVE_MPI
MPI_Init(&argc,&argv);
Epetra_MpiComm Comm (MPI_COMM_WORLD);
#else
Epetra_SerialComm Comm;
#endif
int MyPID = Comm.MyPID();
int n = 4;
Trilinos_Util::CrsMatrixGallery G("laplace_2d", Comm);
G.Set("problem_size", n*n);
G.Set("map_type", "linear");
Epetra_CrsMatrix A (*(G.GetMatrix()));
cout << "Matrix A: " << A << endl;
cout << "Calling Zoltan via EpetraExt to repartition the graph." << endl;
EpetraExt::Zoltan_CrsGraph ZoltanTrans;
Epetra_CrsGraph & BalGraph = ZoltanTrans(const_cast<Epetra_CrsGraph&>(A.Graph()));
Epetra_Export exporter(A.Graph().RowMap(), BalGraph.RowMap());
cout << "Old rowmap for A: " << A.Graph().RowMap() << endl;
cout << "New rowmap for A: " << BalGraph.RowMap() << endl;
cout << "Proc " << MyPID << ": NumSend = " << exporter.NumSend()
<< ", NumRecv = " << exporter.NumRecv() << endl;
Epetra_Time Timer(Comm);
Comm.Barrier();
double startTime = Timer.ElapsedTime();
Epetra_CrsMatrix BalA(Copy, BalGraph);
BalA.Export(A, exporter, Insert);
Comm.Barrier();
double matrixRedistributeTime = Timer.ElapsedTime() - startTime;
cout << "Rebalanced matrix: " << BalA << endl ;
if( MyPID==0 ) {
cout << "Matrix redistribute time (sec) = "
<< matrixRedistributeTime << endl;
}
#ifdef HAVE_MPI
MPI_Finalize() ;
#endif
return(0);
}
#else
#include <stdlib.h>
#include <stdio.h>
#ifdef HAVE_MPI
#include "mpi.h"
#endif
int main(int argc, char *argv[])
{
#ifdef HAVE_MPI
MPI_Init(&argc,&argv);
#endif
puts("Please configure Didasko with:\n"
"--enable-epetra\n"
"--enable-epetraext\n"
"--enable-epetraext-zoltan");
#ifdef HAVE_MPI
MPI_Finalize();
#endif
return 0;
}
#endif