diff --git a/packages/muelu/src/Graph/MatrixTransformation/MueLu_CoalesceDropFactory_def.hpp b/packages/muelu/src/Graph/MatrixTransformation/MueLu_CoalesceDropFactory_def.hpp index 0431bf011541..1f9961289cb0 100644 --- a/packages/muelu/src/Graph/MatrixTransformation/MueLu_CoalesceDropFactory_def.hpp +++ b/packages/muelu/src/Graph/MatrixTransformation/MueLu_CoalesceDropFactory_def.hpp @@ -591,13 +591,27 @@ void CoalesceDropFactory::Build(Level //move from host to device auto ghostedDiagValsView = Kokkos::subview(ghostedDiag->getDeviceLocalView(Xpetra::Access::ReadOnly), Kokkos::ALL(), 0); - auto boundaryNodesDevice = Kokkos::create_mirror_view_and_copy(ExecSpace(), boundaryNodes); auto thresholdKokkos = static_cast(threshold); auto realThresholdKokkos = implATS::magnitude(thresholdKokkos); auto columnsDevice = Kokkos::create_mirror_view(ExecSpace(), columns); - auto At = Utilities::Op2TpetraCrs(A); - auto A_device = At->getLocalMatrixDevice(); + auto A_device = A->getLocalMatrixDevice(); + RCP graph = rcp(new LWGraph(A->getCrsGraph(), "graph of A")); + RCP importer = A->getCrsGraph()->getImporter(); + RCP boundaryNodesVector = Xpetra::VectorFactory::Build(graph->GetDomainMap()); + RCP boundaryColumnVector; + for(size_t i = 0; i < graph->GetNodeNumVertices(); i++) { + boundaryNodesVector->getDataNonConst(0)[i] = boundaryNodes[i]; + } + if(!importer.is_null()) { + boundaryColumnVector = Xpetra::VectorFactory::Build(graph->GetImportMap()); + boundaryColumnVector->doImport(*boundaryNodesVector, *importer, Xpetra::INSERT); + } + else { + boundaryColumnVector = boundaryNodesVector; + } + auto boundaryColumn = boundaryColumnVector->getDeviceLocalView(Xpetra::Access::ReadOnly); + auto boundary = Kokkos::subview(boundaryColumn, Kokkos::ALL(), 0); Kokkos::ViewrownnzView("rownnzView", A_device.numRows()); auto drop_views = Kokkos::View("drop_views", A_device.nnz()); @@ -608,30 +622,24 @@ void CoalesceDropFactory::Build(Level auto rowView = A_device.rowConst(row); size_t nnz = rowView.length; - size_t dropSize = 0; auto drop_view = Kokkos::subview(drop_views, Kokkos::make_pair(A_device.graph.row_map(row), A_device.graph.row_map(row+1))); auto index_view = Kokkos::subview(index_views, Kokkos::make_pair(A_device.graph.row_map(row), A_device.graph.row_map(row+1))); //find magnitudes - Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, (LO)nnz), [&](const LO colID, size_t &count) { + Kokkos::parallel_for(Kokkos::TeamThreadRange(teamMember, (LO)nnz), [&](const LO colID) { index_view(colID) = colID; LO col = rowView.colidx(colID); //ignore diagonals for now, they are checked again later - if(row == col) { - drop_view(colID) = true; - count++; - } //Don't aggregate boundaries - else if(boundaryNodesDevice(colID)) { + if(row == col || boundary(col)) { drop_view(colID) = true; } else { drop_view(colID) = false; - count++; } - }, dropSize); + }); - size_t dropStart = dropSize; + size_t dropStart = nnz; if (classicalAlgo == unscaled_cut) { //push diagonals and boundaries to the right, sort everything else by aij on the left Kokkos::Experimental::sort_team(teamMember, index_view, [=](size_t& x, size_t& y) -> bool { @@ -646,7 +654,7 @@ void CoalesceDropFactory::Build(Level }); //find index where dropping starts - Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, 1, dropSize), [=](size_t i, size_t& min) { + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, 1, nnz), [=](size_t i, size_t& min) { auto const& x = index_view(i - 1); auto const& y = index_view(i); typename implATS::magnitudeType x_aij = 0; @@ -658,7 +666,7 @@ void CoalesceDropFactory::Build(Level y_aij = implATS::magnitude(rowView.value(y) * rowView.value(y)); } - if(x_aij > realThresholdKokkos * y_aij) { + if(realThresholdKokkos * realThresholdKokkos * x_aij > y_aij) { if(i < min) { min = i; } @@ -673,30 +681,30 @@ void CoalesceDropFactory::Build(Level else { auto x_aij = implATS::magnitude(rowView.value(x) * rowView.value(x)); auto y_aij = implATS::magnitude(rowView.value(y) * rowView.value(y)); - auto x_aiiajj = implATS::magnitude(thresholdKokkos * thresholdKokkos * ghostedDiagValsView(rowView.colidx(x)) * ghostedDiagValsView(row)); - auto y_aiiajj = implATS::magnitude(thresholdKokkos * thresholdKokkos * ghostedDiagValsView(rowView.colidx(y)) * ghostedDiagValsView(row)); + auto x_aiiajj = implATS::magnitude(ghostedDiagValsView(rowView.colidx(x)) * ghostedDiagValsView(row)); + auto y_aiiajj = implATS::magnitude(ghostedDiagValsView(rowView.colidx(y)) * ghostedDiagValsView(row)); return (x_aij / x_aiiajj) > (y_aij / y_aiiajj); } }); //find index where dropping starts - Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, 1, dropSize), [=](size_t i, size_t& min) { + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, 1, nnz), [=](size_t i, size_t& min) { auto const& x = index_view(i - 1); auto const& y = index_view(i); typename implATS::magnitudeType x_val = 0; typename implATS::magnitudeType y_val = 0; if(!drop_view(x)) { typename implATS::magnitudeType x_aij = implATS::magnitude(rowView.value(x) * rowView.value(x)); - typename implATS::magnitudeType x_aiiajj = implATS::magnitude(thresholdKokkos * thresholdKokkos * ghostedDiagValsView(rowView.colidx(x)) * ghostedDiagValsView(row)); + typename implATS::magnitudeType x_aiiajj = implATS::magnitude(ghostedDiagValsView(rowView.colidx(x)) * ghostedDiagValsView(row)); x_val = x_aij / x_aiiajj; } if(!drop_view(y)) { typename implATS::magnitudeType y_aij = implATS::magnitude(rowView.value(y) * rowView.value(y)); - typename implATS::magnitudeType y_aiiajj = implATS::magnitude(thresholdKokkos * thresholdKokkos * ghostedDiagValsView(rowView.colidx(y)) * ghostedDiagValsView(row)); + typename implATS::magnitudeType y_aiiajj = implATS::magnitude(ghostedDiagValsView(rowView.colidx(y)) * ghostedDiagValsView(row)); y_val = y_aij / y_aiiajj; } - if(x_val > realThresholdKokkos * y_val) { + if(realThresholdKokkos * realThresholdKokkos * x_val > y_val) { if(i < min) { min = i; } @@ -705,15 +713,15 @@ void CoalesceDropFactory::Build(Level } //drop everything to the right of where values stop passing threshold - if(dropStart < dropSize) { - Kokkos::parallel_for(Kokkos::TeamThreadRange(teamMember, dropStart, dropSize), [=](size_t i) { + if(dropStart < nnz) { + Kokkos::parallel_for(Kokkos::TeamThreadRange(teamMember, dropStart, nnz), [=](size_t i) { drop_view(index_view(i)) = true; }); } LO rownnz = 0; GO rowDropped = 0; - Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, dropSize), [=](const size_t idxID, LO& keep, GO& drop) { + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, nnz), [=](const size_t idxID, LO& keep, GO& drop) { LO col = rowView.colidx(idxID); //don't drop diagonal if(row == col || !drop_view(idxID)) { @@ -1381,7 +1389,7 @@ void CoalesceDropFactory::Build(Level auto const& y = drop_vec[i]; auto a = x.val; auto b = y.val; - if (a > realThreshold * b) { + if (realThreshold * realThreshold * a > b) { drop = true; #ifdef HAVE_MUELU_DEBUG if (distanceLaplacianCutVerbose) { @@ -1404,7 +1412,7 @@ void CoalesceDropFactory::Build(Level auto const& y = drop_vec[i]; auto a = x.val / x.diag; auto b = y.val / y.diag; - if (a > realThreshold * b) { + if (realThreshold * realThreshold * a > b) { drop = true; #ifdef HAVE_MUELU_DEBUG if (distanceLaplacianCutVerbose) { diff --git a/packages/muelu/test/unit_tests/CoalesceDropFactory.cpp b/packages/muelu/test/unit_tests/CoalesceDropFactory.cpp index e8902b178708..c3b341850704 100644 --- a/packages/muelu/test/unit_tests/CoalesceDropFactory.cpp +++ b/packages/muelu/test/unit_tests/CoalesceDropFactory.cpp @@ -1223,7 +1223,7 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, DistanceLaplacianScaledCu // L_ij = -36 // L_ii = 72 // criterion for dropping is |L_ij|^2 <= tol^2 * |L_ii*L_jj| - coalesceDropFact.SetParameter("aggregation: drop tol", Teuchos::ParameterEntry(8.0)); + coalesceDropFact.SetParameter("aggregation: drop tol", Teuchos::ParameterEntry(0.125)); coalesceDropFact.SetParameter("aggregation: drop scheme", Teuchos::ParameterEntry(std::string("distance laplacian"))); coalesceDropFact.SetParameter("aggregation: distance laplacian algo", Teuchos::ParameterEntry(std::string("scaled cut"))); fineLevel.Request("Graph", &coalesceDropFact); @@ -1289,7 +1289,7 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, DistanceLaplacianUnscaled // L_ij = -36 // L_ii = 72 // criterion for dropping is |L_ij|^2 <= tol^2 * |L_ii*L_jj| - coalesceDropFact.SetParameter("aggregation: drop tol", Teuchos::ParameterEntry(8.0)); + coalesceDropFact.SetParameter("aggregation: drop tol", Teuchos::ParameterEntry(0.125)); coalesceDropFact.SetParameter("aggregation: drop scheme", Teuchos::ParameterEntry(std::string("distance laplacian"))); coalesceDropFact.SetParameter("aggregation: distance laplacian algo", Teuchos::ParameterEntry(std::string("unscaled cut"))); fineLevel.Request("Graph", &coalesceDropFact); @@ -1355,7 +1355,7 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, DistanceLaplacianCutSym, // L_ij = -36 // L_ii = 72 // criterion for dropping is |L_ij|^2 <= tol^2 * |L_ii*L_jj| - coalesceDropFact.SetParameter("aggregation: drop tol", Teuchos::ParameterEntry(8.0)); + coalesceDropFact.SetParameter("aggregation: drop tol", Teuchos::ParameterEntry(0.125)); coalesceDropFact.SetParameter("aggregation: drop scheme", Teuchos::ParameterEntry(std::string("distance laplacian"))); coalesceDropFact.SetParameter("aggregation: distance laplacian algo", Teuchos::ParameterEntry(std::string("scaled cut symmetric"))); fineLevel.Request("Graph", &coalesceDropFact); @@ -1389,6 +1389,8 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, ClassicalScaledCut, Scala typedef Teuchos::ScalarTraits STS; typedef typename STS::magnitudeType real_type; typedef Xpetra::MultiVector RealValuedMultiVector; + typedef Tpetra::Map map_type; + typedef Tpetra::CrsMatrix crs_matrix_type; MUELU_TESTING_SET_OSTREAM; MUELU_TESTING_LIMIT_SCOPE(Scalar, GlobalOrdinal, Node); @@ -1399,11 +1401,41 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, ClassicalScaledCut, Scala Level fineLevel; TestHelpers::TestFactory::createSingleLevelHierarchy(fineLevel); - RCP A = TestHelpers::TestFactory::Build1DPoisson(36); + const global_size_t globalIndices = 12; + const GO indexBase = 0; + RCP map = rcp(new map_type(globalIndices, indexBase, comm)); + RCP A_t(new crs_matrix_type(map, 5)); + const SC two = static_cast(2.0); + const SC one = static_cast(1.0); + const SC negOne = static_cast(-1.0); + for(LO lclRow = 0; lclRow < static_cast (map->getLocalNumElements()); lclRow++) { + const GO gblRow = map->getGlobalElement(lclRow); + if(gblRow == 0) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow, gblRow + 1), Teuchos::tuple(two, negOne)); + } + else if(static_cast(gblRow) == globalIndices - 1) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow - 1, gblRow), Teuchos::tuple(negOne, two)); + } + else if(gblRow == 2 || gblRow == 9) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow), Teuchos::tuple(one)); + } + else if(gblRow == 5) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow-2, gblRow-1, gblRow, gblRow+1, gblRow+2), Teuchos::tuple(negOne, negOne, two, negOne, negOne)); + } + else if(gblRow == 6) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow-2, gblRow-1, gblRow, gblRow+1, gblRow+2), Teuchos::tuple(negOne, two, two, two, negOne)); + } + else { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow - 1, gblRow, gblRow + 1), Teuchos::tuple(negOne, two, negOne)); + } + } + A_t->fillComplete(); + RCP A_x = rcp(new TpetraCrsMatrix(A_t)); + RCP A = rcp(new CrsMatrixWrap(A_x)); fineLevel.Set("A", A); Teuchos::ParameterList galeriList; - galeriList.set("nx", Teuchos::as(36)); + galeriList.set("nx", Teuchos::as(globalIndices)); RCP coordinates = Galeri::Xpetra::Utils::CreateCartesianCoordinates("1D", A->getRowMap(), galeriList); fineLevel.Set("Coordinates", coordinates); @@ -1429,25 +1461,59 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, ClassicalScaledCut, Scala const RCP myImportMap = graph->GetImportMap(); // < note that the ImportMap is built from the column map of the matrix A WITHOUT dropping! const RCP myDomainMap = graph->GetDomainMap(); - TEST_EQUALITY(myImportMap->getMaxAllGlobalIndex(), 35); + TEST_EQUALITY(myImportMap->getMaxAllGlobalIndex(), globalIndices-1); TEST_EQUALITY(myImportMap->getMinAllGlobalIndex(), 0); TEST_EQUALITY(myImportMap->getMinLocalIndex(), 0); - TEST_EQUALITY(myImportMap->getGlobalNumElements(), Teuchos::as(36 + (comm->getSize() - 1) * 2)); + TEST_EQUALITY(myImportMap->getGlobalNumElements(), Teuchos::as(globalIndices + (comm->getSize() - 1) * 2)); - TEST_EQUALITY(myDomainMap->getMaxAllGlobalIndex(), 35); + TEST_EQUALITY(myDomainMap->getMaxAllGlobalIndex(), globalIndices-1); TEST_EQUALITY(myDomainMap->getMinAllGlobalIndex(), 0); TEST_EQUALITY(myDomainMap->getMinLocalIndex(), 0); - TEST_EQUALITY(myDomainMap->getGlobalNumElements(), 36); - - TEST_EQUALITY(graph->GetGlobalNumEdges(), 72); - -} // SignaledClassical + TEST_EQUALITY(myDomainMap->getGlobalNumElements(), globalIndices); + + TEST_EQUALITY(graph->GetGlobalNumEdges(), 28); + + int rows[13] = {0, 2, 4, 5, 7, 10, 15, 18, 21, 23, 24, 26, 28}; + int columns[28] = {0, 1, + 0, 1, + 2, + 3, 4, + 3, 4, 5, + 3, 4, 5, 6, 7, + 5, 6, 7, + 6, 7, 8, + 7, 8, + 9, + 10, 11, + 10, 11}; + auto rowPtrs = graph->getRowPtrs(); + auto entries = graph->getEntries(); + size_t rowID = 0; + TEST_EQUALITY(rowPtrs(0), rowID); + for(size_t i = 0; i < rowPtrs.size()-1; i++) { + auto gblID = myDomainMap->getGlobalElement(i); + int rownnz = rows[gblID+1]-rows[gblID]; + rowID += rownnz; + TEST_EQUALITY(rowPtrs(i+1), rowID); + + std::vector colID; + for(int j = 0; j < rownnz; j++) { + colID.push_back(myImportMap->getGlobalElement(entries(rowPtrs(i)+j))); + } + std::sort(std::begin(colID), std::end(colID)); + for(int j = 0; j < rownnz; j++) { + TEST_EQUALITY(colID[j], columns[rows[gblID]+j]); + } + } +} // ClassicalScaledCut TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, ClassicalUnScaledCut, Scalar, LocalOrdinal, GlobalOrdinal, Node) { #include typedef Teuchos::ScalarTraits STS; typedef typename STS::magnitudeType real_type; typedef Xpetra::MultiVector RealValuedMultiVector; + typedef Tpetra::Map map_type; + typedef Tpetra::CrsMatrix crs_matrix_type; MUELU_TESTING_SET_OSTREAM; MUELU_TESTING_LIMIT_SCOPE(Scalar, GlobalOrdinal, Node); @@ -1458,11 +1524,41 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, ClassicalUnScaledCut, Sca Level fineLevel; TestHelpers::TestFactory::createSingleLevelHierarchy(fineLevel); - RCP A = TestHelpers::TestFactory::Build1DPoisson(36); + const global_size_t globalIndices = 12; + const GO indexBase = 0; + RCP map = rcp(new map_type(globalIndices, indexBase, comm)); + RCP A_t(new crs_matrix_type(map, 5)); + const SC two = static_cast(2.0); + const SC one = static_cast(1.0); + const SC negOne = static_cast(-1.0); + for(LO lclRow = 0; lclRow < static_cast (map->getLocalNumElements()); lclRow++) { + const GO gblRow = map->getGlobalElement(lclRow); + if(gblRow == 0) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow, gblRow + 1), Teuchos::tuple(two, negOne)); + } + else if(static_cast(gblRow) == globalIndices - 1) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow - 1, gblRow), Teuchos::tuple(negOne, two)); + } + else if(gblRow == 2 || gblRow == 9) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow), Teuchos::tuple(one)); + } + else if(gblRow == 5) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow-2, gblRow-1, gblRow, gblRow+1, gblRow+2), Teuchos::tuple(negOne, negOne, two, negOne, negOne)); + } + else if(gblRow == 6) { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow-2, gblRow-1, gblRow, gblRow+1, gblRow+2), Teuchos::tuple(negOne, two, two, two, negOne)); + } + else { + A_t->insertGlobalValues(gblRow, Teuchos::tuple(gblRow - 1, gblRow, gblRow + 1), Teuchos::tuple(negOne, two, negOne)); + } + } + A_t->fillComplete(); + RCP A_x = rcp(new TpetraCrsMatrix(A_t)); + RCP A = rcp(new CrsMatrixWrap(A_x)); fineLevel.Set("A", A); Teuchos::ParameterList galeriList; - galeriList.set("nx", Teuchos::as(36)); + galeriList.set("nx", Teuchos::as(globalIndices)); RCP coordinates = Galeri::Xpetra::Utils::CreateCartesianCoordinates("1D", A->getRowMap(), galeriList); fineLevel.Set("Coordinates", coordinates); @@ -1488,19 +1584,51 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, ClassicalUnScaledCut, Sca const RCP myImportMap = graph->GetImportMap(); // < note that the ImportMap is built from the column map of the matrix A WITHOUT dropping! const RCP myDomainMap = graph->GetDomainMap(); - TEST_EQUALITY(myImportMap->getMaxAllGlobalIndex(), 35); + TEST_EQUALITY(myImportMap->getMaxAllGlobalIndex(), globalIndices-1); TEST_EQUALITY(myImportMap->getMinAllGlobalIndex(), 0); TEST_EQUALITY(myImportMap->getMinLocalIndex(), 0); - TEST_EQUALITY(myImportMap->getGlobalNumElements(), Teuchos::as(36 + (comm->getSize() - 1) * 2)); + TEST_EQUALITY(myImportMap->getGlobalNumElements(), Teuchos::as(globalIndices + (comm->getSize() - 1) * 2)); - TEST_EQUALITY(myDomainMap->getMaxAllGlobalIndex(), 35); + TEST_EQUALITY(myDomainMap->getMaxAllGlobalIndex(), globalIndices-1); TEST_EQUALITY(myDomainMap->getMinAllGlobalIndex(), 0); TEST_EQUALITY(myDomainMap->getMinLocalIndex(), 0); - TEST_EQUALITY(myDomainMap->getGlobalNumElements(), 36); - - TEST_EQUALITY(graph->GetGlobalNumEdges(), 72); - -} // SignaledClassical + TEST_EQUALITY(myDomainMap->getGlobalNumElements(), globalIndices); + + TEST_EQUALITY(graph->GetGlobalNumEdges(), 28); + + int rows[13] = {0, 2, 4, 5, 7, 10, 15, 18, 21, 23, 24, 26, 28}; + int columns[28] = {0, 1, + 0, 1, + 2, + 3, 4, + 3, 4, 5, + 3, 4, 5, 6, 7, + 5, 6, 7, + 6, 7, 8, + 7, 8, + 9, + 10, 11, + 10, 11}; + auto rowPtrs = graph->getRowPtrs(); + auto entries = graph->getEntries(); + size_t rowID = 0; + TEST_EQUALITY(rowPtrs(0), rowID); + for(size_t i = 0; i < rowPtrs.size()-1; i++) { + auto gblID = myDomainMap->getGlobalElement(i); + int rownnz = rows[gblID+1]-rows[gblID]; + rowID += rownnz; + TEST_EQUALITY(rowPtrs(i+1), rowID); + + std::vector colID; + for(int j = 0; j < rownnz; j++) { + colID.push_back(myImportMap->getGlobalElement(entries(rowPtrs(i)+j))); + } + std::sort(std::begin(colID), std::end(colID)); + for(int j = 0; j < rownnz; j++) { + TEST_EQUALITY(colID[j], columns[rows[gblID]+j]); + } + } +} // ClassicalUnScaledCut TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, SignaledClassical, Scalar, LocalOrdinal, GlobalOrdinal, Node) { #include @@ -1902,7 +2030,6 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, BlockDiagonal, Scalar, Lo coalesceDropFact.SetDefaultVerbLevel(MueLu::Extreme); coalesceDropFact.SetFactory("UnAmalgamationInfo", amalgFact); coalesceDropFact.SetFactory("BlockNumber", ibFact); - coalesceDropFact.SetParameter("aggregation: drop tol", Teuchos::ParameterEntry(8.0)); coalesceDropFact.SetParameter("aggregation: drop scheme", Teuchos::ParameterEntry(std::string("block diagonal"))); coalesceDropFact.SetParameter("aggregation: block diagonal: interleaved blocksize", Teuchos::ParameterEntry(3)); coalesceDropFact.SetDefaultVerbLevel(MueLu::Extreme); @@ -1949,7 +2076,6 @@ TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(CoalesceDropFactory, BlockDiagonalClassical, S coalesceDropFact.SetDefaultVerbLevel(MueLu::Extreme); coalesceDropFact.SetFactory("UnAmalgamationInfo", amalgFact); coalesceDropFact.SetFactory("BlockNumber", ibFact); - coalesceDropFact.SetParameter("aggregation: drop tol", Teuchos::ParameterEntry(8.0)); coalesceDropFact.SetParameter("aggregation: drop scheme", Teuchos::ParameterEntry(std::string("block diagonal classical"))); coalesceDropFact.SetParameter("aggregation: block diagonal: interleaved blocksize", Teuchos::ParameterEntry(3)); fineLevel.Request("Graph", &coalesceDropFact);