51 #ifndef _ZOLTAN2_MATCHINGPROBLEM_HPP_ 52 #define _ZOLTAN2_MATCHINGPROBLEM_HPP_ 57 #include <Zoltan2_MatchingAlgorithms.hpp> 65 using Teuchos::rcp_dynamic_cast;
90 template<
typename Adapter>
91 class MatchingProblem :
public Problem<Adapter>
95 typedef typename Adapter::scalar_t scalar_t;
96 typedef typename Adapter::gno_t gno_t;
97 typedef typename Adapter::lno_t lno_t;
98 typedef typename Adapter::user_t user_t;
99 typedef typename Adapter::base_adapter_t base_adapter_t;
101 #ifdef HAVE_ZOLTAN2_MPI 102 typedef Teuchos::OpaqueWrapper<MPI_Comm> mpiWrapper_t;
107 virtual ~MatchingProblem() {};
110 #ifdef HAVE_ZOLTAN2_MPI 113 MatchingProblem(Adapter *A, ParameterList *p, MPI_Comm comm)
114 : Problem<Adapter>(A, p, comm)
117 createMatchingProblem();
123 MatchingProblem(Adapter *A, ParameterList *p) : Problem<Adapter>(A, p)
126 createMatchingProblem();
145 void solve(
bool updateInputData=
true);
151 MatchingSolution<Adapter> *getSolution() {
153 return solution_.getRawPtr();
157 void createMatchingProblem();
159 RCP<MatchingSolution<Adapter> > solution_;
161 RCP<Comm<int> > problemComm_;
162 RCP<const Comm<int> > problemCommConst_;
168 template <
typename Adapter>
169 void MatchingProblem<Adapter>::solve(
bool newData)
173 size_t nVtx = this->baseModel_->getLocalNumObjects();
177 this->solution_ = rcp(
new MatchingSolution<Adapter>(nVtx));
184 std::string method = this->params_->template get<std::string>(
"color_method",
"SerialGreedy");
189 if (method.compare(
"SerialGreedy") == 0)
191 AlgSerialGreedy<Adapter> alg(this->graphModel_, this->params_,
192 this->env_, problemComm_);
193 alg.color(this->solution_);
196 else if (method.compare(
"speculative") == 0)
198 AlgGM<base_adapter_t> alg(this->graphModel_, problemComm_);
199 alg.color(this->solution_, this->params_);
220 template <
typename Adapter>
221 void MatchingProblem<Adapter>::createMatchingProblem()
224 using Teuchos::ParameterList;
232 problemComm_ = this->comm_->duplicate();
233 problemCommConst_ = rcp_const_cast<
const Comm<int> > (problemComm_);
242 std::bitset<NUM_MODEL_FLAGS> graphFlags;
243 std::bitset<NUM_MODEL_FLAGS> idFlags;
250 this->graphModel_ = rcp(
new GraphModel<base_adapter_t>(
251 this->baseInputAdapter_, this->envConst_, problemCommConst_, graphFlags));
253 this->baseModel_ = rcp_implicit_cast<
const Model<base_adapter_t> >(
262 cout <<
__func__zoltan2__ <<
" Model type " << modelType <<
" not yet supported."
ModelType
An identifier for the general type of model.
#define Z2_FORWARD_EXCEPTIONS
Forward an exception back through call stack.
algorithm requires no self edges
Defines the Problem base class.
Gathering definitions used in software development.
Defines the GraphModel interface.
model represents graph within only one rank
#define __func__zoltan2__