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_);
Defines the CoordinateModel classes.
Defines the GraphModel interface.
Defines the IdentifierModel interface.
Define IntegerRangeList validator.
Gathering definitions used in software development.
Declarations for TimerManager.
The user parameters, debug, timing and memory profiling output objects, and error checking methods.
static RCP< Teuchos::BoolParameterEntryValidator > getBoolValidator()
Exists to make setting up validators less cluttered.
ProblemRoot allows ptr storage and safe dynamic_cast of all.
virtual RCP< const Comm< int > > getComm()=0
virtual void solve(bool updateInputData=true)=0
Method that creates a solution.
Problem base class from which other classes (PartitioningProblem, ColoringProblem,...
const RCP< const Environment > & getEnvironment() const
Get the current Environment. Useful for testing.
RCP< const Environment > envConst_
RCP< IdentifierModel< base_adapter_t > > identifierModel_
void resetParameters(ParameterList *params)
Reset the list of parameters.
RCP< const Adapter > inputAdapter_
Adapter::base_adapter_t base_adapter_t
virtual ~Problem()
Destructor.
RCP< TimerManager > timer_
RCP< const base_adapter_t > baseInputAdapter_
Problem(const Adapter *input, ParameterList *params, const RCP< const Comm< int > > &comm)
Constructor where Teuchos communicator is specified.
RCP< const Model< base_adapter_t > > baseModel_
void printTimers() const
Return the communicator passed to the problem.
RCP< ParameterList > params_
static void getValidParameters(ParameterList &pl)
RCP< GraphModel< base_adapter_t > > graphModel_
RCP< const Comm< int > > comm_
RCP< CoordinateModel< base_adapter_t > > coordinateModel_
RCP< Algorithm< Adapter > > algorithm_
RCP< const Comm< int > > getComm()
Return the communicator used by the problem.
Zoltan2::BaseAdapter< userTypes_t > base_adapter_t
TimerType
The type of timers which should be active.
@ MACRO_TIMERS
Time an algorithm (or other entity) as a whole.
OSType
Output stream types.
@ NULL_STREAM
/dev/null: do actions but don't output results