diff --git a/packages/muelu/src/Graph/PairwiseAggregation/MueLu_NotayAggregationFactory_def.hpp b/packages/muelu/src/Graph/PairwiseAggregation/MueLu_NotayAggregationFactory_def.hpp index f6310dfb3136..7cd4acad536f 100644 --- a/packages/muelu/src/Graph/PairwiseAggregation/MueLu_NotayAggregationFactory_def.hpp +++ b/packages/muelu/src/Graph/PairwiseAggregation/MueLu_NotayAggregationFactory_def.hpp @@ -161,7 +161,7 @@ namespace MueLu { RCP graph = Get< RCP >(currentLevel, "Graph"); RCP A = Get< RCP >(currentLevel, "A"); - local_matrix_type localA = A->getLocalMatrixHost(); + local_matrix_type localA = A->getLocalMatrixDevice(); // Setup aggregates & aggStat objects RCP aggregates = rcp(new Aggregates(*graph)); @@ -232,7 +232,7 @@ namespace MueLu { // columns corresponding to local rows. LO numLocalDirichletNodes = numDirichletNodes; Array localVertex2AggId(aggregates->GetVertex2AggId()->getData(0).view(0, numRows)); - BuildOnRankLocalMatrix(A->getLocalMatrixHost(), coarseLocalA); + BuildOnRankLocalMatrix(A->getLocalMatrixDevice(), coarseLocalA); for(LO aggregationIter = 1; aggregationIter < maxNumIter; ++aggregationIter) { // Compute the intermediate prolongator BuildIntermediateProlongator(coarseLocalA.numRows(), numLocalDirichletNodes, numLocalAggregates, diff --git a/packages/muelu/src/Utils/MueLu_Utilities_def.hpp b/packages/muelu/src/Utils/MueLu_Utilities_def.hpp index 23e606d6e6d2..344d3a90dd59 100644 --- a/packages/muelu/src/Utils/MueLu_Utilities_def.hpp +++ b/packages/muelu/src/Utils/MueLu_Utilities_def.hpp @@ -400,49 +400,44 @@ namespace MueLu { if (maxRowSize == Teuchos::as(-1)) // hasn't been determined yet maxRowSize = 20; - std::vector scaledVals(maxRowSize); + if (tpOp.isFillComplete()) tpOp.resumeFill(); if (Op.isLocallyIndexed() == true) { - Teuchos::ArrayView cols; - Teuchos::ArrayView vals; + typename Tpetra::CrsMatrix::local_inds_host_view_type cols; + typename Tpetra::CrsMatrix::values_host_view_type vals; for (size_t i = 0; i < rowMap->getNodeNumElements(); ++i) { tpOp.getLocalRowView(i, cols, vals); + size_t nnz = tpOp.getNumEntriesInLocalRow(i); - if (nnz > maxRowSize) { - maxRowSize = nnz; - scaledVals.resize(maxRowSize); - } + typename Tpetra::CrsMatrix::nonconst_values_host_view_type scaledVals("ScaledVals",nnz); + for (size_t j = 0; j < nnz; ++j) scaledVals[j] = vals[j]*scalingVector[i]; if (nnz > 0) { - Teuchos::ArrayView valview(&scaledVals[0], nnz); - tpOp.replaceLocalValues(i, cols, valview); + tpOp.replaceLocalValues(i, cols, scaledVals); } } //for (size_t i=0; ... } else { - Teuchos::ArrayView cols; - Teuchos::ArrayView vals; + typename Tpetra::CrsMatrix::global_inds_host_view_type cols; + typename Tpetra::CrsMatrix::values_host_view_type vals; for (size_t i = 0; i < rowMap->getNodeNumElements(); ++i) { GlobalOrdinal gid = rowMap->getGlobalElement(i); tpOp.getGlobalRowView(gid, cols, vals); size_t nnz = tpOp.getNumEntriesInGlobalRow(gid); - if (nnz > maxRowSize) { - maxRowSize = nnz; - scaledVals.resize(maxRowSize); - } + typename Tpetra::CrsMatrix::nonconst_values_host_view_type scaledVals("ScaledVals",nnz); + // FIXME FIXME FIXME FIXME FIXME FIXME for (size_t j = 0; j < nnz; ++j) scaledVals[j] = vals[j]*scalingVector[i]; //FIXME i or gid? if (nnz > 0) { - Teuchos::ArrayView valview(&scaledVals[0], nnz); - tpOp.replaceGlobalValues(gid, cols, valview); + tpOp.replaceGlobalValues(gid, cols, scaledVals); } } //for (size_t i=0; ... } diff --git a/packages/muelu/src/Utils/MueLu_Utilities_kokkos_def.hpp b/packages/muelu/src/Utils/MueLu_Utilities_kokkos_def.hpp index edea9becfbb0..be7ac3b195db 100644 --- a/packages/muelu/src/Utils/MueLu_Utilities_kokkos_def.hpp +++ b/packages/muelu/src/Utils/MueLu_Utilities_kokkos_def.hpp @@ -164,8 +164,8 @@ namespace MueLu { RCP diag = VectorFactory::Build(rowMap,false); // Now generate local objects - local_matrix_type localMatrix = A.getLocalMatrix(); - auto diagVals = diag->getDeviceLocalView(); + local_matrix_type localMatrix = A.getLocalMatrixDevice(); + auto diagVals = diag->getDeviceLocalView(Xpetra::Access::ReadWrite); ordinal_type numRows = localMatrix.graph.numRows(); @@ -302,49 +302,41 @@ namespace MueLu { if (maxRowSize == Teuchos::as(-1)) // hasn't been determined yet maxRowSize = 20; - std::vector scaledVals(maxRowSize); if (tpOp.isFillComplete()) tpOp.resumeFill(); if (Op.isLocallyIndexed() == true) { - Teuchos::ArrayView cols; - Teuchos::ArrayView vals; + typename Tpetra::CrsMatrix::local_inds_host_view_type cols; + typename Tpetra::CrsMatrix::values_host_view_type vals; for (size_t i = 0; i < rowMap->getNodeNumElements(); ++i) { tpOp.getLocalRowView(i, cols, vals); size_t nnz = tpOp.getNumEntriesInLocalRow(i); - if (nnz > maxRowSize) { - maxRowSize = nnz; - scaledVals.resize(maxRowSize); - } + typename Tpetra::CrsMatrix::nonconst_values_host_view_type scaledVals("scaledVals", nnz); for (size_t j = 0; j < nnz; ++j) scaledVals[j] = vals[j]*scalingVector[i]; if (nnz > 0) { - Teuchos::ArrayView valview(&scaledVals[0], nnz); - tpOp.replaceLocalValues(i, cols, valview); + tpOp.replaceLocalValues(i, cols, scaledVals); } } //for (size_t i=0; ... } else { - Teuchos::ArrayView cols; - Teuchos::ArrayView vals; + typename Tpetra::CrsMatrix::global_inds_host_view_type cols; + typename Tpetra::CrsMatrix::values_host_view_type vals; for (size_t i = 0; i < rowMap->getNodeNumElements(); ++i) { GO gid = rowMap->getGlobalElement(i); tpOp.getGlobalRowView(gid, cols, vals); size_t nnz = tpOp.getNumEntriesInGlobalRow(gid); - if (nnz > maxRowSize) { - maxRowSize = nnz; - scaledVals.resize(maxRowSize); - } + typename Tpetra::CrsMatrix::nonconst_values_host_view_type scaledVals("scaledVals", nnz); + // FIXME FIXME FIXME FIXME FIXME FIXME for (size_t j = 0; j < nnz; ++j) scaledVals[j] = vals[j]*scalingVector[i]; //FIXME i or gid? if (nnz > 0) { - Teuchos::ArrayView valview(&scaledVals[0], nnz); - tpOp.replaceGlobalValues(gid, cols, valview); + tpOp.replaceGlobalValues(gid, cols, scaledVals); } } //for (size_t i=0; ... }