98 const Teuchos::ParameterList & pL = GetParameterList();
99 std::string mapName = pL.get<std::string> (
"Map name");
100 Teuchos::RCP<const FactoryBase> mapFactory = GetFactory (
"Map factory");
102 RCP<const Import> rebalanceImporter = Get<RCP<const Import> >(level,
"Importer");
104 if(rebalanceImporter != Teuchos::null) {
106 RCP<const Map> map = level.
Get< RCP<const Map> >(mapName,mapFactory.get());
110 RCP<Vector> v = VectorFactory::Build(map);
115 RCP<const Import> blowUpImporter = ImportFactory::Build(map, rebalanceImporter->getSourceMap());
116 RCP<Vector> pv = VectorFactory::Build(rebalanceImporter->getSourceMap());
117 pv->doImport(*v,*blowUpImporter,Xpetra::INSERT);
120 RCP<Vector> ptv = VectorFactory::Build(rebalanceImporter->getTargetMap());
121 ptv->doImport(*pv,*rebalanceImporter,Xpetra::INSERT);
123 if (pL.get<
bool>(
"repartition: use subcommunicators") ==
true)
124 ptv->replaceMap(ptv->getMap()->removeEmptyProcesses());
127 Teuchos::ArrayRCP< const Scalar > ptvData = ptv->getData(0);
128 std::vector<GlobalOrdinal> localGIDs;
130 for (
size_t k = 0; k < ptv->getLocalLength(); k++) {
131 if(ptvData[k] == 1.0) {
132 localGIDs.push_back(ptv->getMap()->getGlobalElement(k));
136 const Teuchos::ArrayView<const GlobalOrdinal> localGIDs_view(&localGIDs[0],localGIDs.size());
138 Teuchos::RCP<const Map> localGIDsMap = MapFactory::Build(
140 Teuchos::OrdinalTraits<int>::invalid(),
142 0, ptv->getMap()->getComm());
146 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)....