49 #ifndef SHYLU_PARTITION_INTERFACE_DEF_HPP 50 #define SHYLU_PARTITION_INTERFACE_DEF_HPP 52 #include "ShyLUCore_config.h" 56 #include <Teuchos_XMLParameterListHelpers.hpp> 59 #ifdef HAVE_SHYLUCORE_ZOLTAN2 60 #include <Zoltan2_XpetraCrsMatrixAdapter.hpp> 61 #include <Zoltan2_XpetraMultiVectorAdapter.hpp> 62 #include <Zoltan2_PartitioningProblem.hpp> 65 #ifdef HAVE_SHYLUCORE_TPETRA 66 #include <Tpetra_CrsMatrix.hpp> 67 #include <Tpetra_MultiVector.hpp> 68 #include <Tpetra_Vector.hpp> 71 #include <Epetra_CrsMatrix.h> 72 #include <Epetra_MultiVector.h> 78 template <
class Matrix,
class Vector>
85 #ifdef HAVE_SHLY_ZOLTAN2 91 template <
class Matrix,
class Vector>
95 if(ipart!=NULL)
delete ipart;
96 if(ird!=NULL)
delete ird;
100 template <
class Matrix,
class Vector>
101 int PartitionInterface<Matrix, Vector>::partitionIsorropia()
103 cout <<
" Not Supported \n";
108 int PartitionInterface<Epetra_CrsMatrix, Epetra_MultiVector>::partitionIsorropia()
110 Teuchos::ParameterList subList = pList->sublist(
"Isorropia Input");
111 ipart =
new Isorropia::Epetra::Partitioner(A,subList,
false);
113 ird =
new Isorropia::Epetra::Redistributor(ipart);
118 #ifdef HAVE_SHYLUCORE_ZOLTAN2 119 template <
class Matrix,
class Vector>
120 int PartitionInterface<Matrix, Vector>::partitionZoltan2()
123 ParameterList subList = pList->sublist(
"Zoltan2 Input");
124 Teuchos::RCP<Matrix> rA(A,
false);
125 zadapter =
new Zoltan2::XpetraCrsMatrixAdapter<Matrix, Vector>(rA);
126 zproblem =
new Zoltan2::PartitioningProblem<Zoltan2::XpetraCrsMatrixAdapter <Matrix, Vector> >(zadapter, &subList);
133 template <
class Matrix,
class Vector>
134 int PartitionInterface<Matrix,Vector>::partition()
136 #ifdef HAVE_SHYLUCORE_ZOLTAN2 137 return partitionZoltan2();
143 int PartitionInterface<Epetra_CrsMatrix, Epetra_MultiVector>::partition()
145 string partitioningPackage = Teuchos::getParameter<string>(*pList,
"Partitioning Package");
146 if(partitioningPackage.compare(
"Isorropia") == 0)
148 return partitionIsorropia();
150 #ifdef HAVE_SHYLUCORE_ZOLTAN2 151 else if (partitioningPackage.compare(
"Zoltan2") == 0)
153 return partitionZoltan2();
158 cout <<
"**Error**: Paritioning package selected is not supported\n";
163 template <
class Matrix,
class Vector>
164 Matrix* PartitionInterface<Matrix,Vector>::reorderMatrix()
167 string partitioningPackage = Teuchos::getParameter<string>(*pList,
"Partitioning Package");
169 #if defined(HAVE_ZOLTAN2_PARMETIS) || defined(HAVE_ZOLTAN2_SCOTCH) 170 if(partitioningPackage.compare(
"Zoltan2") == 0)
172 zadapter->applyPartitioningSolution(*A, B, zproblem->getSolution());
181 Epetra_CrsMatrix* PartitionInterface<Epetra_CrsMatrix, Epetra_MultiVector>::reorderMatrix()
183 Epetra_CrsMatrix *B = NULL;
184 string partitioningPackage = Teuchos::getParameter<string>(*pList,
"Partitioning Package");
185 if(partitioningPackage.compare(
"Isorropia") == 0)
187 ird->redistribute(*A, B);
189 #if defined(HAVE_ZOLTAN2_PARMETIS) || defined(HAVE_ZOLTAN2_SCOTCH) 190 else if (partitioningPackage.compare(
"Zoltan2") == 0)
192 zadapter->applyPartitioningSolution(*A, B, zproblem->getSolution());
198 template <
class Matrix,
class Vector>
199 Vector* PartitionInterface<Matrix, Vector>::reorderVector(Vector* x)
202 string partitioningPackage = Teuchos::getParameter<string>(*pList,
"Partitioning Package");
203 #if defined(HAVE_ZOLTAN2_PARMETIS) || defined(HAVE_ZOLTAN2_SCOTCH) 204 Teuchos::RCP<Vector> rx(x,
false);
205 Zoltan2::XpetraMultiVectorAdapter<Vector> tempVecAdapter(rx);
206 tempVecAdapter.applyPartitioningSolution(*x, b, zproblem->getSolution());
211 Epetra_MultiVector* PartitionInterface<Epetra_CrsMatrix, Epetra_MultiVector>::reorderVector(Epetra_MultiVector* x )
213 Epetra_MultiVector *b = NULL;
214 string partitioningPackage = Teuchos::getParameter<string>(*pList,
"Partitioning Package");
215 if(partitioningPackage.compare(
"Isorropia") == 0)
217 ird->redistribute(*x, b);
219 #if defined(HAVE_ZOLTAN2_PARMETIS) || defined(HAVE_ZOLTAN2_SCOTCH) 220 else if (partitioningPackage.compare(
"Zoltan2") == 0)
222 Teuchos::RCP<Epetra_MultiVector> rx(x);
223 Zoltan2::XpetraMultiVectorAdapter<Epetra_MultiVector> tempVecAdapter(rx);
224 tempVecAdapter.applyPartitioningSolution(*x, b, zproblem->getSolution());
PartitionInterface class templated on Epetra/Tpetra Matrix and Vector.
Epetra/Tpetra templated interface for calls to Zoltan(Isorropia)/Zoltans.
PartitionInterface(Matrix *inA, Teuchos::ParameterList *pList)
Main constructor of class.