35 #include "ac/sys_sysinfo.h"
90 #ifdef USE_NAIVE_MULTITHREAD
103 #ifdef USE_SUPERLU_MT
114 {
"Umfpack",
"umfpack3",
119 #ifdef UMFPACK_DROPTOL
146 #if defined(USE_UMFPACK)
148 #elif defined(USE_KLU)
157 : currSolver(
LinSol::defaultSolver),
184 if ((::solver[t].s_flags & f) != f) {
240 silent_cerr(::solver[t].s_name <<
" unavailable" << std::endl);
283 if ((::solver[
currSolver].s_flags & f) == f) {
294 if ((::solver[
currSolver].s_flags & f) == f) {
305 if ((::solver[
currSolver].s_flags & f) == f) {
374 if (::solver[
currSolver].s_pivot_factor == -1.) {
386 if (::solver[
currSolver].s_drop_tolerance == -1.) {
478 typedef Y12SparseCCSolutionManager<DirCColMatrixHandler<1> > CCSM;
485 typedef Y12SparseCCSolutionManager<CColMatrixHandler<1> > CCSM;
493 Y12SparseSolutionManager,
494 Y12SparseSolutionManager(iNLD, iLWS,
500 silent_cerr(
"Configure with --with-y12 "
501 "to enable Y12 solver" << std::endl);
507 #ifdef USE_SUPERLU_MT
510 typedef ParSuperLUSparseCCSolutionManager<DirCColMatrixHandler<0> > CCSM;
517 typedef ParSuperLUSparseCCSolutionManager<CColMatrixHandler<0> > CCSM;
525 ParSuperLUSparseSolutionManager,
526 ParSuperLUSparseSolutionManager(
nThreads, iNLD,
533 silent_cerr(
"warning, using multithread SuperLU with only one thread; "
538 silent_cerr(
"multithread SuperLU solver support not compiled; "
544 typedef SuperLUSparseCCSolutionManager<DirCColMatrixHandler<0> > CCSM;
551 typedef SuperLUSparseCCSolutionManager<CColMatrixHandler<0> > CCSM;
559 SuperLUSparseSolutionManager,
560 SuperLUSparseSolutionManager(iNLD,
567 silent_cerr(
"Configure with --with-superlu "
568 "to enable superlu solver" << std::endl);
575 MeschachSparseSolutionManager,
576 MeschachSparseSolutionManager(iNLD, iLWS,
580 silent_cerr(
"Configure with --with-meschach "
581 "to enable Meschach solver" << std::endl);
588 LapackSolutionManager,
592 silent_cerr(
"Configure with --with-lapack "
593 "to enable Lapack dense solver" << std::endl);
601 typedef TaucsSparseCCSolutionManager<DirCColMatrixHandler<0> > CCSM;
607 typedef TaucsSparseCCSolutionManager<CColMatrixHandler<0> > CCSM;
614 TaucsSparseSolutionManager,
615 TaucsSparseSolutionManager(iNLD));
620 silent_cerr(
"Configure with --with-taucs "
621 "to enable Taucs sparse solver" << std::endl);
628 HarwellSparseSolutionManager,
629 HarwellSparseSolutionManager(iNLD, iLWS,
633 silent_cerr(
"Configure with --with-harwell "
634 "to enable Harwell solver" << std::endl);
643 typedef UmfpackSparseCCSolutionManager<DirCColMatrixHandler<0> > CCSM;
650 typedef UmfpackSparseCCSolutionManager<CColMatrixHandler<0> > CCSM;
658 UmfpackSparseSolutionManager,
659 UmfpackSparseSolutionManager(iNLD,
665 silent_cerr(
"Configure with --with-umfpack "
666 "to enable Umfpack solver" << std::endl);
675 typedef KLUSparseCCSolutionManager<DirCColMatrixHandler<0> > CCSM;
682 typedef KLUSparseCCSolutionManager<CColMatrixHandler<0> > CCSM;
690 KLUSparseSolutionManager,
691 KLUSparseSolutionManager(iNLD,
699 silent_cerr(
"Configure with --with-klu "
700 "to enable KLU solver" << std::endl);
711 #ifdef USE_NAIVE_MULTITHREAD
713 ParNaiveSparsePermSolutionManager,
716 silent_cerr(
"multithread naive solver support not compiled; "
717 "you can configure --enable-multithread-naive "
718 "on a linux ix86 to get it"
724 #ifdef HAVE_BOOST_GRAPH_CUTHILL_MCKEE_ORDERING_HPP
731 #ifdef USE_NAIVE_MULTITHREAD
734 ParNaiveSparsePermSolutionManager,
737 silent_cerr(
"multithread naive solver with"
738 "reverse Cuthill-McKee permutation not"
739 "available yet. Patches welcome"
743 silent_cerr(
"multithread naive solver support not compiled; "
744 "you can configure --enable-multithread-naive "
745 "on a linux ix86 to get it"
759 #ifdef USE_NAIVE_MULTITHREAD
762 ParNaiveSparsePermSolutionManager,
765 silent_cerr(
"multithread naive solver with"
766 "approximate minimum degree permutation not"
767 "available yet. Patches welcome"
771 silent_cerr(
"multithread naive solver support not compiled; "
772 "you can configure --enable-multithread-naive "
773 "on a linux ix86 to get it"
780 #ifdef HAVE_BOOST_GRAPH_KING_ORDERING_HPP
787 #ifdef USE_NAIVE_MULTITHREAD
790 ParNaiveSparsePermSolutionManager,
793 silent_cerr(
"multithread naive solver with"
794 "king permutation not"
795 "available yet. Patches welcome"
799 silent_cerr(
"multithread naive solver support not compiled; "
800 "you can configure --enable-multithread-naive "
801 "on a linux ix86 to get it"
808 #ifdef HAVE_BOOST_GRAPH_SLOAN_ORDERING_HPP
815 #ifdef USE_NAIVE_MULTITHREAD
818 ParNaiveSparsePermSolutionManager,
821 silent_cerr(
"multithread naive solver with"
822 "sloan permutation not"
823 "available yet. Patches welcome"
827 silent_cerr(
"multithread naive solver support not compiled; "
828 "you can configure --enable-multithread-naive "
829 "on a linux ix86 to get it"
836 #ifdef HAVE_BOOST_GRAPH_MINIMUM_DEGREE_ORDERING_HPP
843 #ifdef USE_NAIVE_MULTITHREAD
846 ParNaiveSparsePermSolutionManager,
849 silent_cerr(
"multithread naive solver with"
851 "available yet. Patches welcome"
855 silent_cerr(
"multithread naive solver support not compiled; "
856 "you can configure --enable-multithread-naive "
857 "on a linux ix86 to get it"
872 #ifdef USE_NAIVE_MULTITHREAD
875 ParNaiveSparsePermSolutionManager,
878 silent_cerr(
"multithread naive solver with"
879 "nested dissection permutation not"
880 "available yet. Patches welcome"
884 silent_cerr(
"multithread naive solver support not compiled; "
885 "you can configure --enable-multithread-naive "
886 "on a linux ix86 to get it"
892 silent_cerr(
"you should not get here("<< __FILE__ <<
":" <<
893 __LINE__ <<
")" << std::endl);
903 #ifdef USE_NAIVE_MULTITHREAD
905 ParNaiveSparseSolutionManager,
908 silent_cerr(
"multithread naive solver support not compiled; "
909 "you can configure --enable-multithread-naive "
910 "on a linux ix86 to get it"
bool SetScale(const SolutionManager::ScaleOpt &scale)
static SolverType defaultSolver
bool SetPivotFactor(const doublereal &d)
unsigned GetSolverFlags(void) const
bool MaskSolverFlags(unsigned f)
#define MBDYN_EXCEPT_ARGS
unsigned GetNumThreads(void) const
SolutionManager *const GetSolutionManager(integer iNLD, integer iLWS=0) const
bool SetNumThreads(unsigned nt)
const doublereal & dGetDropTolerance(void) const
bool SetSolver(SolverType t, unsigned f=SOLVER_FLAGS_NONE)
const LinSol::solver_t solver[]
integer GetMaxIterations(void) const
bool SetSolverFlags(unsigned f)
bool SetMaxIterations(integer iMaxIter)
bool SetWorkSpaceSize(integer)
bool AddSolverFlags(unsigned f)
const doublereal & dGetPivotFactor(void) const
SolutionManager::ScaleOpt scale
#define ASSERT(expression)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
bool SetBlockSize(unsigned bs)
SolverType GetSolver(void) const
doublereal dDropTolerance
integer iGetWorkSpaceSize(void) const
bool SetDropTolerance(const doublereal &d)
unsigned GetBlockSize(void) const
const char *const GetSolverName(void) const