57 #include <Teuchos_GlobalMPISession.hpp> 58 #include <Teuchos_DefaultComm.hpp> 59 #include <Teuchos_RCP.hpp> 60 #include <Teuchos_Array.hpp> 61 #include <Teuchos_ArrayRCP.hpp> 62 #include <Teuchos_Comm.hpp> 63 #include <Teuchos_VerboseObject.hpp> 64 #include <Tpetra_CrsMatrix.hpp> 65 #include <Tpetra_Vector.hpp> 67 #include <Xpetra_EpetraUtils.hpp> 68 #ifdef HAVE_ZOLTAN2_MPI 69 #include <Epetra_MpiComm.h> 71 #include <Epetra_SerialComm.h> 77 using Teuchos::ArrayRCP;
78 using Teuchos::ArrayView;
84 const RCP<
const Xpetra::Map<zlno_t, zgno_t, znode_t> > &m)
86 const RCP<const Comm<int> > &comm = m->getComm();
87 int proc = comm->getRank();
88 int nprocs = comm->getSize();
89 zgno_t base = m->getMinAllGlobalIndex();
90 zgno_t max = m->getMaxAllGlobalIndex();
91 size_t globalrows = m->getGlobalNumElements();
92 if (globalrows !=
size_t(max - base + 1)){
94 string(
"Map is invalid for test - fix test"), 1);
96 RCP<Array<zgno_t> > mygids = rcp(
new Array<zgno_t>);
98 if (firstzgno_t < base){
101 firstzgno_t = base - n + proc;
105 for (
zgno_t gid=firstzgno_t; gid <= max; gid+=nprocs){
106 (*mygids).append(gid);
109 ArrayRCP<zgno_t> newIdArcp = Teuchos::arcp(mygids);
114 int main(
int argc,
char *argv[])
116 Teuchos::GlobalMPISession session(&argc, &argv);
117 RCP<const Comm<int> > comm = Teuchos::DefaultComm<int>::getComm();
118 int rank = comm->getRank();
120 Teuchos::RCP<Teuchos::FancyOStream> outStream =
121 Teuchos::VerboseObjectBase::getDefaultOStream();
122 Teuchos::EVerbosityLevel v=Teuchos::VERB_EXTREME;
124 typedef Tpetra::CrsMatrix<zscalar_t,zlno_t,zgno_t,znode_t>
tmatrix_t;
125 typedef Tpetra::CrsGraph<zlno_t,zgno_t,znode_t>
tgraph_t;
126 typedef Tpetra::Vector<zscalar_t,zlno_t,zgno_t,znode_t>
tvector_t;
127 typedef Tpetra::MultiVector<zscalar_t,zlno_t,zgno_t,znode_t> tmvector_t;
128 typedef Xpetra::CrsMatrix<zscalar_t,zlno_t,zgno_t,znode_t>
xmatrix_t;
129 typedef Xpetra::CrsGraph<zlno_t,zgno_t,znode_t>
xgraph_t;
130 typedef Xpetra::Vector<zscalar_t,zlno_t,zgno_t,znode_t>
xvector_t;
131 typedef Xpetra::MultiVector<zscalar_t,zlno_t,zgno_t,znode_t> xmvector_t;
132 typedef Xpetra::TpetraMap<zlno_t,zgno_t,znode_t> xtmap_t;
136 RCP<UserInputForTests> uinput;
142 catch(std::exception &e){
158 M = uinput->getUITpetraCrsMatrix();
160 catch(std::exception &e){
162 string(
"getTpetraCrsMatrix ")+e.what(), 1);
166 std::cout <<
"Original Tpetra matrix " << M->getGlobalNumRows()
167 <<
" x " << M->getGlobalNumCols() << std::endl;
169 M->describe(*outStream,v);
171 RCP<const xtmap_t> xmap(
new xtmap_t(M->getRowMap()));
175 zgno_t localNumRows = newRowIds.size();
177 RCP<const tmatrix_t> newM;
180 localNumRows, newRowIds.getRawPtr());
182 catch(std::exception &e){
184 string(
" Zoltan2::XpetraTraits<tmatrix_t>::doMigration ")+e.what(), 1);
188 std::cout <<
"Migrated Tpetra matrix" << std::endl;
190 newM->describe(*outStream,v);
198 G = uinput->getUITpetraCrsGraph();
200 catch(std::exception &e){
202 string(
"getTpetraCrsGraph ")+e.what(), 1);
206 std::cout <<
"Original Tpetra graph" << std::endl;
208 G->describe(*outStream,v);
210 RCP<const xtmap_t> xmap(
new xtmap_t(G->getRowMap()));
213 zgno_t localNumRows = newRowIds.size();
215 RCP<const tgraph_t> newG;
218 localNumRows, newRowIds.getRawPtr());
220 catch(std::exception &e){
222 string(
" Zoltan2::XpetraTraits<tgraph_t>::doMigration ")+e.what(), 1);
226 std::cout <<
"Migrated Tpetra graph" << std::endl;
228 newG->describe(*outStream,v);
236 V = rcp(
new tvector_t(uinput->getUITpetraCrsGraph()->getRowMap(), 1));
239 catch(std::exception &e){
241 string(
"getTpetraVector")+e.what(), 1);
245 std::cout <<
"Original Tpetra vector" << std::endl;
247 V->describe(*outStream,v);
249 RCP<const xtmap_t> xmap(
new xtmap_t(V->getMap()));
252 zgno_t localNumRows = newRowIds.size();
254 RCP<const tvector_t> newV;
257 localNumRows, newRowIds.getRawPtr());
259 catch(std::exception &e){
261 string(
" Zoltan2::XpetraTraits<tvector_t>::doMigration ")+e.what(), 1);
265 std::cout <<
"Migrated Tpetra vector" << std::endl;
267 newV->describe(*outStream,v);
275 MV = rcp(
new tmvector_t(uinput->getUITpetraCrsGraph()->getRowMap(), 3));
278 catch(std::exception &e){
280 string(
"getTpetraMultiVector")+e.what(), 1);
284 std::cout <<
"Original Tpetra multivector" << std::endl;
286 MV->describe(*outStream,v);
288 RCP<const xtmap_t> xmap(
new xtmap_t(MV->getMap()));
291 zgno_t localNumRows = newRowIds.size();
293 RCP<const tmvector_t> newMV;
296 localNumRows, newRowIds.getRawPtr());
298 catch(std::exception &e){
300 string(
" Zoltan2::XpetraTraits<tmvector_t>::doMigration ")+e.what(), 1);
304 std::cout <<
"Migrated Tpetra multivector" << std::endl;
306 newMV->describe(*outStream,v);
321 M = uinput->getUIXpetraCrsMatrix();
323 catch(std::exception &e){
325 string(
"getXpetraCrsMatrix ")+e.what(), 1);
329 std::cout <<
"Original Xpetra matrix" << std::endl;
331 M->describe(*outStream,v);
335 zgno_t localNumRows = newRowIds.size();
337 RCP<const xmatrix_t> newM;
340 localNumRows, newRowIds.getRawPtr());
342 catch(std::exception &e){
344 string(
" Zoltan2::XpetraTraits<xmatrix_t>::doMigration ")+e.what(), 1);
348 std::cout <<
"Migrated Xpetra matrix" << std::endl;
350 newM->describe(*outStream,v);
358 G = uinput->getUIXpetraCrsGraph();
360 catch(std::exception &e){
362 string(
"getXpetraCrsGraph ")+e.what(), 1);
366 std::cout <<
"Original Xpetra graph" << std::endl;
368 G->describe(*outStream,v);
372 zgno_t localNumRows = newRowIds.size();
374 RCP<const xgraph_t> newG;
377 localNumRows, newRowIds.getRawPtr());
379 catch(std::exception &e){
381 string(
" Zoltan2::XpetraTraits<xgraph_t>::doMigration ")+e.what(), 1);
385 std::cout <<
"Migrated Xpetra graph" << std::endl;
387 newG->describe(*outStream,v);
396 rcp(
new tvector_t(uinput->getUITpetraCrsGraph()->getRowMap(), 1));
400 catch(std::exception &e){
402 string(
"getXpetraVector")+e.what(), 1);
406 std::cout <<
"Original Xpetra vector" << std::endl;
408 V->describe(*outStream,v);
412 zgno_t localNumRows = newRowIds.size();
414 RCP<const xvector_t> newV;
417 localNumRows, newRowIds.getRawPtr());
419 catch(std::exception &e){
421 string(
" Zoltan2::XpetraTraits<xvector_t>::doMigration ")+e.what(), 1);
425 std::cout <<
"Migrated Xpetra vector" << std::endl;
427 newV->describe(*outStream,v);
435 RCP<tmvector_t> tMV =
436 rcp(
new tmvector_t(uinput->getUITpetraCrsGraph()->getRowMap(), 3));
440 catch(std::exception &e){
442 string(
"getXpetraMultiVector")+e.what(), 1);
446 std::cout <<
"Original Xpetra multivector" << std::endl;
448 MV->describe(*outStream,v);
452 zgno_t localNumRows = newRowIds.size();
454 RCP<const xmvector_t> newMV;
457 localNumRows, newRowIds.getRawPtr());
459 catch(std::exception &e){
461 string(
" Zoltan2::XpetraTraits<xmvector_t>::doMigration ")+e.what(), 1);
465 std::cout <<
"Migrated Xpetra multivector" << std::endl;
467 newMV->describe(*outStream,v);
470 #ifdef HAVE_EPETRA_DATA_TYPES 481 typedef Epetra_MultiVector emvector_t;
482 typedef Xpetra::EpetraMap xemap_t;
483 typedef Epetra_BlockMap emap_t;
487 RCP<UserInputForTests> euinput;
493 catch(std::exception &e){
502 M = euinput->getUIEpetraCrsMatrix();
504 catch(std::exception &e){
506 string(
"getEpetraCrsMatrix ")+e.what(), 1);
510 std::cout <<
"Original Epetra matrix" << std::endl;
514 RCP<const emap_t> emap = Teuchos::rcpFromRef(M->RowMap());
515 RCP<const xemap_t> xmap(
new xemap_t(emap));
519 zgno_t localNumRows = newRowIds.size();
521 RCP<const ematrix_t> newM;
524 localNumRows, newRowIds.getRawPtr());
526 catch(std::exception &e){
528 string(
" Zoltan2::XpetraTraits<ematrix_t>::doMigration ")+e.what(), 1);
532 std::cout <<
"Migrated Epetra matrix" << std::endl;
534 newM->Print(std::cout);
542 G = euinput->getUIEpetraCrsGraph();
544 catch(std::exception &e){
546 string(
"getEpetraCrsGraph ")+e.what(), 1);
550 std::cout <<
"Original Epetra graph" << std::endl;
554 RCP<const emap_t> emap = Teuchos::rcpFromRef(G->RowMap());
555 RCP<const xemap_t> xmap(
new xemap_t(emap));
558 zgno_t localNumRows = newRowIds.size();
560 RCP<const egraph_t> newG;
563 localNumRows, newRowIds.getRawPtr());
565 catch(std::exception &e){
567 string(
" Zoltan2::XpetraTraits<egraph_t>::doMigration ")+e.what(), 1);
571 std::cout <<
"Migrated Epetra graph" << std::endl;
573 newG->Print(std::cout);
581 V = rcp(
new Epetra_Vector(euinput->getUIEpetraCrsGraph()->RowMap()));
584 catch(std::exception &e){
586 string(
"getEpetraVector")+e.what(), 1);
590 std::cout <<
"Original Epetra vector" << std::endl;
594 RCP<const emap_t> emap = Teuchos::rcpFromRef(V->Map());
595 RCP<const xemap_t> xmap(
new xemap_t(emap));
598 zgno_t localNumRows = newRowIds.size();
600 RCP<const evector_t> newV;
603 localNumRows, newRowIds.getRawPtr());
605 catch(std::exception &e){
607 string(
" Zoltan2::XpetraTraits<evector_t>::doMigration ")+e.what(), 1);
611 std::cout <<
"Migrated Epetra vector" << std::endl;
613 newV->Print(std::cout);
622 rcp(
new Epetra_MultiVector(euinput->getUIEpetraCrsGraph()->RowMap(),3));
625 catch(std::exception &e){
627 string(
"getEpetraMultiVector")+e.what(), 1);
631 std::cout <<
"Original Epetra multivector" << std::endl;
633 MV->Print(std::cout);
635 RCP<const emap_t> emap = Teuchos::rcpFromRef(MV->Map());
636 RCP<const xemap_t> xmap(
new xemap_t(emap));
639 zgno_t localNumRows = newRowIds.size();
641 RCP<const emvector_t> newMV;
644 localNumRows, newRowIds.getRawPtr());
646 catch(std::exception &e){
648 string(
" Zoltan2::XpetraTraits<emvector_t>::doMigration ")+e.what(), 1);
652 std::cout <<
"Migrated Epetra multivector" << std::endl;
654 newMV->Print(std::cout);
656 #endif // have epetra data types (int, int, double) 663 std::cout <<
"PASS" << std::endl;
#define TEST_FAIL_AND_EXIT(comm, ok, s, code)
static RCP< User > doMigration(const User &from, size_t numLocalRows, const gno_t *myNewRows)
Migrate the object Given a user object and a new row distribution, create and return a new user objec...
Traits of Xpetra classes, including migration method.
common code used by tests
int main(int argc, char *argv[])
static RCP< User > convertToXpetra(const RCP< User > &a)
Convert the object to its Xpetra wrapped version.
ArrayRCP< zgno_t > roundRobinMap(const RCP< const Xpetra::Map< zlno_t, zgno_t, znode_t > > &m)
std::string testDataFilePath(".")