USE_METIS
Definition at line 39 of file readlinsol.cc.
References LinSol::AddSolverFlags(), SolutionManager::ScaleOpt::algorithm, DEBUGLCOUT, SolutionManager::ScaleOpt::dTol, EMPTY, LinSol::EMPTY_SOLVER, get_nprocs(), HighParser::GetInt(), HighParser::GetLineData(), HighParser::GetReal(), LinSol::GetSolver(), LinSol::GetSolverFlags(), LinSol::GetSolverName(), HighParser::GetWord(), HighParser::GetYesNoOrBool(), LinSol::HARWELL_SOLVER, SolutionManager::ScaleOpt::iMaxIter, HighParser::IsKeyWord(), LinSol::KLU_SOLVER, LinSol::LAPACK_SOLVER, LASTKEYWORD, LinSol::MaskSolverFlags(), MBDYN_EXCEPT_ARGS, LinSol::MESCHACH_SOLVER, MYDEBUG_INPUT, LinSol::NAIVE_SOLVER, LinSol::solver_t::s_alias, LinSol::solver_t::s_default_flags, LinSol::solver_t::s_drop_tolerance, LinSol::solver_t::s_flags, LinSol::solver_t::s_name, LinSol::solver_t::s_pivot_factor, SolutionManager::SCALEA_COL_MAX, SolutionManager::SCALEA_COL_SUM, SolutionManager::SCALEA_ITERATIVE, SolutionManager::SCALEA_LAPACK, SolutionManager::SCALEA_NONE, SolutionManager::SCALEA_ROW_MAX, SolutionManager::SCALEA_ROW_MAX_COL_MAX, SolutionManager::SCALEA_ROW_SUM, SolutionManager::SCALEA_UNDEF, SolutionManager::SCALEF_COND_NUM_1, SolutionManager::SCALEF_COND_NUM_INF, SolutionManager::SCALEF_VERBOSE, SolutionManager::SCALEF_WARN, SolutionManager::SCALEW_ALWAYS, SolutionManager::SCALEW_NEVER, SolutionManager::SCALEW_ONCE, LinSol::SetBlockSize(), LinSol::SetDropTolerance(), LinSol::SetMaxIterations(), LinSol::SetNumThreads(), LinSol::SetPivotFactor(), LinSol::SetScale(), LinSol::SetSolver(), LinSol::SetSolverFlags(), LinSol::SetWorkSpaceSize(), solver, LinSol::SOLVER_FLAGS_ALLOWS_CC, LinSol::SOLVER_FLAGS_ALLOWS_COLAMD, LinSol::SOLVER_FLAGS_ALLOWS_DIR, LinSol::SOLVER_FLAGS_ALLOWS_KING, LinSol::SOLVER_FLAGS_ALLOWS_MAP, LinSol::SOLVER_FLAGS_ALLOWS_MDAPLUSAT, LinSol::SOLVER_FLAGS_ALLOWS_MMDATA, LinSol::SOLVER_FLAGS_ALLOWS_MT_FCT, LinSol::SOLVER_FLAGS_ALLOWS_NESTED_DISSECTION, LinSol::SOLVER_FLAGS_ALLOWS_REVERSE_CUTHILL_MC_KEE, LinSol::SOLVER_FLAGS_TYPE_MASK, LinSol::SUPERLU_SOLVER, LinSol::TAUCS_SOLVER, SolutionManager::ScaleOpt::uFlags, LinSol::UMFPACK_SOLVER, SolutionManager::ScaleOpt::when, and LinSol::Y12_SOLVER.
Referenced by DataManager::ReadControl(), InverseSolver::ReadData(), and Solver::ReadData().
42 const char* sKeyWords[] = {
80 silent_cerr(
"empty solver not allowed at line "
87 "No LU solver" << std::endl);
94 "Using harwell sparse LU solver" << std::endl);
103 "Using Lapack dense LU solver" << std::endl);
112 "Using meschach sparse LU solver"
130 "Using SuperLU sparse LU solver" << std::endl);
142 "Using Taucs sparse solver" << std::endl);
149 pedantic_cerr(
"\"umfpack3\" is deprecated; "
150 "use \"umfpack\" instead" << std::endl);
157 "Using umfpack sparse LU solver" << std::endl);
169 "Using KLU sparse LU solver" << std::endl);
181 "Using y12 sparse LU solver" << std::endl);
188 silent_cerr(
"unknown solver" << std::endl);
195 silent_cerr(currSolver.
s_name <<
" solver "
196 "not available; requested at line " << HP.
GetLineData()
208 pedantic_cout(
"using map matrix handling for "
210 <<
" solver" << std::endl);
212 pedantic_cerr(
"map is meaningless for "
214 <<
" solver" << std::endl);
222 pedantic_cout(
"using column compressed matrix handling for "
224 <<
" solver" << std::endl);
227 pedantic_cerr(
"column compressed is meaningless for "
229 <<
" solver" << std::endl);
237 pedantic_cout(
"using direct access matrix handling for "
239 <<
" solver" << std::endl);
241 pedantic_cerr(
"direct is meaningless for "
243 <<
" solver" << std::endl);
251 pedantic_cout(
"using colamd symmetric preordering for "
253 <<
" solver" << std::endl);
255 pedantic_cerr(
"colamd preordering is meaningless for "
257 <<
" solver" << std::endl);
261 silent_cerr(
"approximate minimum degree solver support is still TODO"
262 "task: detect (or import) the MD library;"
263 "uncomment the relevant bits in naivewrap;"
264 "remove this check (readlinsol.cc)."
270 pedantic_cout(
"using mmd symmetric preordering for "
272 <<
" solver" << std::endl);
274 pedantic_cerr(
"mmdata preordering is meaningless for "
276 <<
" solver" << std::endl);
279 }
else if (HP.
IsKeyWord(
"minimum" "degree")) {
282 pedantic_cout(
"using minimum degree symmetric preordering of A+A^T for "
284 <<
" solver" << std::endl);
286 pedantic_cerr(
"md preordering is meaningless for "
288 <<
" solver" << std::endl);
294 pedantic_cout(
"using rcmk symmetric preordering for "
296 <<
" solver" << std::endl);
299 pedantic_cerr(
"rcmk preordering is meaningless for "
301 <<
" solver" << std::endl);
307 pedantic_cout(
"using king symmetric preordering for "
309 <<
" solver" << std::endl);
312 pedantic_cerr(
"king preordering is meaningless for "
314 <<
" solver" << std::endl);
320 pedantic_cout(
"using sloan symmetric preordering for "
322 <<
" solver" << std::endl);
325 pedantic_cerr(
"sloan preordering is meaningless for "
327 <<
" solver" << std::endl);
330 }
else if (HP.
IsKeyWord(
"nested" "dissection")) {
334 pedantic_cout(
"using nested dissection symmetric preordering for "
336 <<
" solver" << std::endl);
339 pedantic_cerr(
"nested dissection preordering is meaningless for "
341 <<
" solver" << std::endl);
344 silent_cerr("nested dissection permutation not built in;"
345 "please configure --with-metis to get it"
353 int nThreads = HP.
GetInt();
358 silent_cerr(
"illegal thread number, using 1" << std::endl);
363 }
else if (nThreads != 1) {
364 pedantic_cerr(
"multithread is meaningless for "
366 <<
" solver" << std::endl);
375 silent_cout(
"no multithread requested "
377 "of " << nThreads <<
" CPUs"
387 if (iWorkSpaceSize < 0) {
397 pedantic_cerr(
"workspace size is meaningless for "
399 <<
" solver" << std::endl);
408 pedantic_cerr(
"pivot factor is meaningless for "
410 <<
" solver" << std::endl);
413 if (dPivotFactor <= 0. || dPivotFactor > 1.) {
414 silent_cerr(
"pivot factor " << dPivotFactor
415 <<
" is out of bounds; "
434 pedantic_cerr(
"\"drop tolerance\" is meaningless for "
436 <<
" solver" << std::endl);
439 if (dDropTolerance < 0.) {
440 silent_cerr(
"drop tolerance " << dDropTolerance
441 <<
" is out of bounds; "
459 silent_cerr(
"illegal negative block size; "
460 "using default" << std::endl);
470 pedantic_cerr(
"block size is meaningless for "
472 <<
" solver" << std::endl);
492 }
else if (HP.
IsKeyWord(
"column" "max")) {
494 }
else if (HP.
IsKeyWord(
"column" "sum")) {
500 }
else if (HP.
IsKeyWord(
"row" "max" "column" "max") || HP.
IsKeyWord(
"sinkhorn" "knopp")) {
508 if (HP.
IsKeyWord(
"scale" "iterations")) {
522 switch (scale.
when) {
549 unsigned uCondFlag = 0;
551 if (HP.
IsKeyWord(
"print" "condition" "number")) {
559 silent_cerr(
"Only one norm or infinity norm are supported for condition numbers at line " << HP.
GetLineData() << std::endl);
571 scale.
uFlags |= uCondFlag;
575 silent_cerr(
"Warning: Scale options are not available for "
584 pedantic_cerr(
"scale is meaningless for "
586 <<
" solver" << std::endl);
593 silent_cerr(
"Warning: iterative refinement is not supported by " << cs.
GetSolverName() <<
" at line " << HP.
GetLineData() << std::endl);
600 silent_cout(
"warning: \"naive\" solver should be used with \"colamd\"" << std::endl);
bool SetScale(const SolutionManager::ScaleOpt &scale)
bool SetPivotFactor(const doublereal &d)
unsigned GetSolverFlags(void) const
bool MaskSolverFlags(unsigned f)
#define MBDYN_EXCEPT_ARGS
virtual integer GetInt(integer iDefval=0)
virtual HighParser::ErrOut GetLineData(void) const
bool SetNumThreads(unsigned nt)
virtual bool GetYesNoOrBool(bool bDefval=false)
bool SetSolver(SolverType t, unsigned f=SOLVER_FLAGS_NONE)
const LinSol::solver_t solver[]
bool SetSolverFlags(unsigned f)
bool SetMaxIterations(integer iMaxIter)
bool SetWorkSpaceSize(integer)
bool AddSolverFlags(unsigned f)
virtual bool IsKeyWord(const char *sKeyWord)
doublereal s_drop_tolerance
doublereal s_pivot_factor
const char *const s_alias
bool SetBlockSize(unsigned bs)
SolverType GetSolver(void) const
virtual int GetWord(void)
bool SetDropTolerance(const doublereal &d)
const char *const GetSolverName(void) const
#define DEBUGLCOUT(level, msg)
virtual doublereal GetReal(const doublereal &dDefval=0.0)