Teuchos::RCP<MueLu::Aggregates_kokkos<LocalOrdinal, GlobalOrdinal, Node>> gimmeUncoupledAggregates(const Teuchos::RCP<Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>>& A, Teuchos::RCP<MueLu::AmalgamationInfo<LocalOrdinal, GlobalOrdinal, Node>>& amalgInfo, bool bPhase1 = true, bool bPhase2a = true, bool bPhase2b = true, bool bPhase3 = true) { # include "MueLu_UseShortNames.hpp" Level level; TestHelpers_kokkos::TestFactory<SC,LO,GO,NO>::createSingleLevelHierarchy(level); level.Set("A", A); RCP<AmalgamationFactory> amalgFact = rcp(new AmalgamationFactory()); RCP<CoalesceDropFactory_kokkos> dropFact = rcp(new CoalesceDropFactory_kokkos()); dropFact->SetFactory("UnAmalgamationInfo", amalgFact); using Teuchos::ParameterEntry; // Setup aggregation factory (use default factory for graph) RCP<UncoupledAggregationFactory_kokkos> aggFact = rcp(new UncoupledAggregationFactory_kokkos()); aggFact->SetFactory("Graph", dropFact); aggFact->SetParameter("aggregation: max agg size", ParameterEntry(3)); aggFact->SetParameter("aggregation: min agg size", ParameterEntry(3)); aggFact->SetParameter("aggregation: max selected neighbors", ParameterEntry(0)); aggFact->SetParameter("aggregation: ordering", ParameterEntry(std::string("natural"))); aggFact->SetParameter("aggregation: enable phase 1", ParameterEntry(bPhase1)); aggFact->SetParameter("aggregation: enable phase 2a", ParameterEntry(bPhase2a)); aggFact->SetParameter("aggregation: enable phase 2b", ParameterEntry(bPhase2b)); aggFact->SetParameter("aggregation: enable phase 3", ParameterEntry(bPhase3)); level.Request("Aggregates", aggFact.get()); level.Request("UnAmalgamationInfo", amalgFact.get()); level.Request(*aggFact); aggFact->Build(level); auto aggregates = level.Get<RCP<Aggregates_kokkos> >("Aggregates", aggFact.get()); amalgInfo = level.Get<RCP<AmalgamationInfo> >("UnAmalgamationInfo", amalgFact.get()); level.Release("UnAmalgamationInfo", amalgFact.get()); level.Release("Aggregates", aggFact.get()); return aggregates; }