50 #ifndef _ZOLTAN2_PROBLEM_HPP_
51 #define _ZOLTAN2_PROBLEM_HPP_
59 #include <Teuchos_StandardParameterEntryValidators.hpp>
60 #include <Teuchos_Tuple.hpp>
75 virtual RCP<const Comm<int> >
getComm() = 0;
79 virtual void solve(
bool updateInputData =
true) = 0;
86 template<
typename Adapter>
92 Problem(
const Adapter *input, ParameterList *params,
93 const RCP<
const Comm<int> > &comm):
106 comm_ = comm->duplicate();
107 setupProblemEnvironment(params);
138 #ifdef Z2_OMIT_ALL_ERROR_CHECKING
144 timer_->printAndResetToZero();
152 pl.set(
"compute_metrics",
false,
"Compute metrics after computing solution",
155 RCP<Teuchos::StringValidator> hypergraph_model_type_Validator =
156 Teuchos::rcp(
new Teuchos::StringValidator(
157 Teuchos::tuple<std::string>(
"traditional",
"ghosting" )));
158 pl.set(
"hypergraph_model_type",
"traditional",
"construction type when "
159 "creating a hypergraph model", hypergraph_model_type_Validator);
162 pl.set(
"subset_graph",
false,
"If \"true\", the graph input is to be "
163 "subsetted. If a vertex neighbor is not a valid vertex, it will be "
164 "omitted from the pList. Otherwise, an invalid neighbor identifier "
167 RCP<Teuchos::StringValidator> symmetrize_input_Validator = Teuchos::rcp(
168 new Teuchos::StringValidator(
169 Teuchos::tuple<std::string>(
"no",
"transpose",
"bipartite" )));
170 pl.set(
"symmetrize_input",
"no",
"Symmetrize input prior to pList. "
171 "If \"transpose\", symmetrize A by computing A plus ATranspose. "
172 "If \"bipartite\", A becomes [[0 A][ATranspose 0]].",
173 symmetrize_input_Validator);
176 pl.sublist(
"zoltan_parameters");
177 pl.sublist(
"parma_parameters");
233 void setupProblemEnvironment(ParameterList *pl);
237 template <
typename Adapter>
240 ParameterList &processedParameters = env_->getParametersNonConst();
241 params_ = rcp<ParameterList>(&processedParameters,
false);
243 #ifndef Z2_OMIT_ALL_PROFILING
244 ParameterList pl = *params_;
247 bool haveType=
false, haveStream=
false, haveFile=
false;
250 const Teuchos::ParameterEntry *pe = pl.getEntryPtr(
"timer_type");
253 choice = pe->getValue<
int>(&choice);
260 pe = pl.getEntryPtr(
"timer_output_file");
263 fname = pe->getValue<std::string>(&fname);
264 std::ofstream *dbgFile =
new std::ofstream;
265 if (comm_->getRank()==0){
268 dbgFile->open(fname.c_str(), std::ios::out|std::ios::trunc);
270 catch(std::exception &e){
271 throw std::runtime_error(e.what());
274 timer_ = rcp(
new TimerManager(comm_, dbgFile, tt));
278 pe = pl.getEntryPtr(
"timer_output_stream");
280 choice = pe->getValue<
int>(&choice);
286 if (haveStream || haveType){
288 timer_ = rcp(
new TimerManager(comm_, &std::cout, tt));
290 timer_ = rcp(
new TimerManager(comm_, &std::cerr, tt));
292 std::ofstream *of = NULL;
293 timer_ = rcp(
new TimerManager(comm_, of, tt));
298 if (haveType || haveStream || haveFile)
299 env_->setTimer(timer_);
305 template <
typename Adapter>
308 env_->resetParameters(*params);
309 setupProblemEnvironment(params);
314 if (!timer_.is_null())
315 env_->setTimer(timer_);
RCP< GraphModel< base_adapter_t > > graphModel_
Zoltan2::BaseAdapter< userTypes_t > base_adapter_t
Time an algorithm (or other entity) as a whole.
RCP< const base_adapter_t > baseInputAdapter_
Adapter::base_adapter_t base_adapter_t
static RCP< Teuchos::BoolParameterEntryValidator > getBoolValidator()
Exists to make setting up validators less cluttered.
virtual ~Problem()
Destructor.
TimerType
The type of timers which should be active.
RCP< Algorithm< Adapter > > algorithm_
/dev/null: do actions but don't output results
Problem(const Adapter *input, ParameterList *params, const RCP< const Comm< int > > &comm)
Constructor where Teuchos communicator is specified.
ProblemRoot allows ptr storage and safe dynamic_cast of all.
RCP< const Comm< int > > comm_
void resetParameters(ParameterList *params)
Reset the list of parameters.
virtual RCP< const Comm< int > > getComm()=0
virtual void solve(bool updateInputData=true)=0
Method that creates a solution.
RCP< IdentifierModel< base_adapter_t > > identifierModel_
Defines the IdentifierModel interface.
OSType
Output stream types.
static void getValidParameters(ParameterList &pl)
RCP< const Comm< int > > getComm()
Return the communicator used by the problem.
Problem base class from which other classes (PartitioningProblem, ColoringProblem, OrderingProblem, MatchingProblem, etc.) derive.
RCP< const Adapter > inputAdapter_
void printTimers() const
Return the communicator passed to the problem.
RCP< CoordinateModel< base_adapter_t > > coordinateModel_
The user parameters, debug, timing and memory profiling output objects, and error checking methods...
RCP< TimerManager > timer_
Define IntegerRangeList validator.
Defines the CoordinateModel classes.
Gathering definitions used in software development.
RCP< ParameterList > params_
Defines the GraphModel interface.
RCP< const Model< base_adapter_t > > baseModel_
const RCP< const Environment > & getEnvironment() const
Get the current Environment. Useful for testing.
RCP< const Environment > envConst_
Declarations for TimerManager.