void ColoringProblem<Adapter>::createColoringProblem() { HELLO; using Teuchos::ParameterList; // std::cout << __func__zoltan2__ << " input adapter type " // << this->inputAdapter_->inputAdapterType() << " " // << this->inputAdapter_->inputAdapterName() << std::endl; // Create a copy of the user's communicator. problemComm_ = this->comm_->duplicate(); problemCommConst_ = rcp_const_cast<const Comm<int> > (problemComm_); #ifdef HAVE_ZOLTAN2_MPI // TPLs may want an MPI communicator Comm<int> *c = problemComm_.getRawPtr(); Teuchos::MpiComm<int> *mc = dynamic_cast<Teuchos::MpiComm<int> *>(c); if (mc){ RCP<const mpiWrapper_t> wrappedComm = mc->getRawMpiComm(); mpiComm_ = (*wrappedComm.getRawPtr())(); } else{ mpiComm_ = MPI_COMM_SELF; // or would this be an error? } #endif // Only graph model supported. // TODO: Allow hypergraph later? ModelType modelType = GraphModelType; // Select Model based on parameters and InputAdapter type std::bitset<NUM_MODEL_FLAGS> graphFlags; std::bitset<NUM_MODEL_FLAGS> idFlags; switch (modelType) { case GraphModelType: graphFlags.set(SELF_EDGES_MUST_BE_REMOVED); graphFlags.set(IDS_MUST_BE_GLOBALLY_CONSECUTIVE); this->graphModel_ = rcp(new GraphModel<base_adapter_t>( this->baseInputAdapter_, this->envConst_, problemCommConst_, graphFlags)); this->baseModel_ = rcp_implicit_cast<const Model<base_adapter_t> >( this->graphModel_); break; case IdentifierModelType: case HypergraphModelType: case CoordinateModelType: std::cout << __func__zoltan2__ << " Model type " << modelType << " not yet supported." << std::endl; break; default: std::cout << __func__zoltan2__ << " Invalid model" << modelType << std::endl; break; } }
void OrderingProblem<Adapter>::createOrderingProblem() { HELLO; using Teuchos::ParameterList; // cout << __func__ << " input adapter type " // << this->inputAdapter_->inputAdapterType() << " " // << this->inputAdapter_->inputAdapterName() << endl; #ifdef HAVE_ZOLTAN2_OVIS ovis_enabled(this->comm_->getRank()); #endif // Create a copy of the user's communicator. problemComm_ = this->comm_->duplicate(); problemCommConst_ = rcp_const_cast<const Comm<int> > (problemComm_); #ifdef HAVE_ZOLTAN2_MPI // TPLs may want an MPI communicator Comm<int> *c = problemComm_.getRawPtr(); Teuchos::MpiComm<int> *mc = dynamic_cast<Teuchos::MpiComm<int> *>(c); if (mc){ RCP<const mpiWrapper_t> wrappedComm = mc->getRawMpiComm(); mpiComm_ = (*wrappedComm.getRawPtr())(); } else{ mpiComm_ = MPI_COMM_SELF; // or would this be an error? } #endif // Determine which parameters are relevant here. // For now, assume parameters similar to Zoltan: // MODEL = graph, hypergraph, geometric, ids // ALGORITHM = rcm, random, amd ModelType modelType = IdentifierModelType; //default, change later std::string method = this->params_->template get<std::string>("order_method", "rcm"); if ((method == std::string("rcm")) || (method == std::string("sorted_degree")) || (method == std::string("minimum_degree"))) { modelType = GraphModelType; } // Select Model based on parameters and InputAdapter type std::bitset<NUM_MODEL_FLAGS> graphFlags; std::bitset<NUM_MODEL_FLAGS> idFlags; switch (modelType) { case GraphModelType: graphFlags.set(SELF_EDGES_MUST_BE_REMOVED); this->graphModel_ = rcp(new GraphModel<base_adapter_t>( this->baseInputAdapter_, this->envConst_, problemCommConst_, graphFlags)); this->baseModel_ = rcp_implicit_cast<const Model<base_adapter_t> >( this->graphModel_); break; case IdentifierModelType: this->identifierModel_ = rcp(new IdentifierModel<base_adapter_t>( this->baseInputAdapter_, this->envConst_, problemCommConst_, idFlags)); this->baseModel_ = rcp_implicit_cast<const Model<base_adapter_t> >( this->identifierModel_); break; case HypergraphModelType: case CoordinateModelType: cout << __func__ << " Model type " << modelType << " not yet supported." << endl; break; default: cout << __func__ << " Invalid model" << modelType << endl; break; } }