59 const Teuchos::ParameterList &pL = GetParameterList();
60 std::string mapName = pL.get<std::string>(
"Map name");
61 Teuchos::RCP<const FactoryBase> mapFactory = GetFactory(
"Map factory");
63 RCP<const Import> rebalanceImporter = Get<RCP<const Import> >(level,
"Importer");
65 if (rebalanceImporter != Teuchos::null) {
67 RCP<const Map> map = level.
Get<RCP<const Map> >(mapName, mapFactory.get());
71 RCP<Vector> v = VectorFactory::Build(map);
76 RCP<const Import> blowUpImporter = ImportFactory::Build(map, rebalanceImporter->getSourceMap());
77 RCP<Vector> pv = VectorFactory::Build(rebalanceImporter->getSourceMap());
78 pv->doImport(*v, *blowUpImporter, Xpetra::INSERT);
81 RCP<Vector> ptv = VectorFactory::Build(rebalanceImporter->getTargetMap());
82 ptv->doImport(*pv, *rebalanceImporter, Xpetra::INSERT);
84 if (pL.get<
bool>(
"repartition: use subcommunicators") ==
true)
85 ptv->replaceMap(ptv->getMap()->removeEmptyProcesses());
88 Teuchos::ArrayRCP<const Scalar> ptvData = ptv->getData(0);
89 std::vector<GlobalOrdinal> localGIDs;
91 for (
size_t k = 0; k < ptv->getLocalLength(); k++) {
92 if (ptvData[k] == 1.0) {
93 localGIDs.push_back(ptv->getMap()->getGlobalElement(k));
97 const Teuchos::ArrayView<const GlobalOrdinal> localGIDs_view(&localGIDs[0], localGIDs.size());
99 Teuchos::RCP<const Map> localGIDsMap = MapFactory::Build(
101 Teuchos::OrdinalTraits<int>::invalid(),
103 0, ptv->getMap()->getComm());
107 level.
Set(mapName, localGIDsMap, mapFactory.get());
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput()
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access)....