49 #ifndef XPETRA_MATRIXFACTORY_HPP
50 #define XPETRA_MATRIXFACTORY_HPP
69 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
70 class MatrixFactory2 {
71 #undef XPETRA_MATRIXFACTORY2_SHORT
77 if (oldOp == Teuchos::null)
85 "Not Epetra or Tpetra matrix");
87 #ifdef HAVE_XPETRA_EPETRA
94 #ifdef HAVE_XPETRA_TPETRA
99 if (oldTCrsOp != Teuchos::null) {
110 return Teuchos::null;
113 #define XPETRA_MATRIXFACTORY2_SHORT
123 #undef XPETRA_MATRIXFACTORY2_SHORT
128 if (oldOp == Teuchos::null)
133 #ifdef HAVE_XPETRA_EPETRA
134 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
136 if (oldECrsOp != Teuchos::null) {
146 #ifdef HAVE_XPETRA_TPETRA
149 if (oldTCrsOp != Teuchos::null) {
156 throw Exceptions::BadCast(
"Cast from Xpetra::Matrix to Xpetra::EpetraCrsMatrix or Xpetra::TpetraCrsMatrix failed");
163 #define XPETRA_MATRIXFACTORY2_SHORT
165 #ifdef HAVE_XPETRA_INT_LONG_LONG
169 class MatrixFactory2<double, int, long long, Node> {
170 typedef double Scalar;
171 typedef int LocalOrdinal;
172 typedef long long GlobalOrdinal;
174 #undef XPETRA_MATRIXFACTORY2_SHORT
178 RCP<const CrsMatrixWrap> oldOp = Teuchos::rcp_dynamic_cast<const CrsMatrixWrap>(A);
179 if (oldOp == Teuchos::null)
180 throw Exceptions::BadCast(
"Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
182 RCP<const CrsMatrix> oldCrsOp = oldOp->getCrsMatrix();
184 #ifdef HAVE_XPETRA_EPETRA
185 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
186 RCP<const EpetraCrsMatrixT<GlobalOrdinal,Node> > oldECrsOp = Teuchos::rcp_dynamic_cast<
const EpetraCrsMatrixT<GlobalOrdinal,Node> >(oldCrsOp);
187 if (oldECrsOp != Teuchos::null) {
189 RCP<CrsMatrix> newECrsOp(
new EpetraCrsMatrixT<GlobalOrdinal,Node>(*oldECrsOp));
190 RCP<CrsMatrixWrap> newOp (
new CrsMatrixWrap (newECrsOp));
197 #ifdef HAVE_XPETRA_TPETRA
199 RCP<const TpetraCrsMatrix> oldTCrsOp = Teuchos::rcp_dynamic_cast<const TpetraCrsMatrix>(oldCrsOp);
200 if (oldTCrsOp != Teuchos::null) {
201 RCP<CrsMatrix> newTCrsOp(
new TpetraCrsMatrix(*oldTCrsOp));
202 RCP<CrsMatrixWrap> newOp (
new CrsMatrixWrap(newTCrsOp));
207 throw Exceptions::BadCast(
"Cast from Xpetra::Matrix to Xpetra::EpetraCrsMatrix or Xpetra::TpetraCrsMatrix failed");
210 return Teuchos::null;
213 #endif // HAVE_XPETRA_INT_LONG_LONG
215 #define XPETRA_MATRIXFACTORY2_SHORT
218 template <class Scalar = Matrix<>::scalar_type,
220 class GlobalOrdinal =
224 class MatrixFactory {
225 #undef XPETRA_MATRIXFACTORY_SHORT
246 return rcp(
new CrsMatrixWrap(rowMap, colMap, NumEntriesPerRowToAlloc, pftype));
249 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
260 static RCP<Matrix>
Build (
268 return rcp(
new CrsMatrixWrap(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
285 LocalOrdinal NumMyElements = diagonal->getMap()->getNodeNumElements();
290 for (LocalOrdinal i = 0; i < NumMyElements; ++i) {
291 mtx->insertGlobalValues(MyGlobalElements[i],
292 Teuchos::tuple<GlobalOrdinal>(MyGlobalElements[i]),
293 Teuchos::tuple<Scalar>(vals[i]) );
302 if (crsOp == Teuchos::null)
307 if (newCrs->hasMatrix())
310 return Teuchos::null;
316 if (crsOp == Teuchos::null)
326 if (crsOp == Teuchos::null)
331 if (newCrs->hasMatrix())
334 return Teuchos::null;
340 if (crsOp == Teuchos::null)
345 if (newCrs->hasMatrix())
348 return Teuchos::null;
356 if(input == Teuchos::null)
366 for (
size_t r = 0; r < input->Rows(); ++r) {
367 for (
size_t c = 0; c < input->Cols(); ++c)
368 if(input->getMatrix(r,c) != Teuchos::null) {
373 bop->setMatrix(r,c,mat);
377 if(input->isFillComplete())
382 #define XPETRA_MATRIXFACTORY_SHORT
386 #define XPETRA_MATRIXFACTORY_SHORT
387 #define XPETRA_MATRIXFACTORY2_SHORT