It would be handy to also have bool has_method("foo");
Garth On 7 October 2011 14:20, Anders Logg <l...@simula.no> wrote: > I set out to fix this bug: > > https://bugs.launchpad.net/dolfin/+bug/868465 > > but things spread out and I ended up touching all the la files. > I won't push this to trunk until I've done some more testing, but > here's a summary of the changes: > > 1. Each solver defines a set of available methods and preconditioners > which can be accessed by > > FooLUSolver::list_methods() > > FooKrylovSolver::list_methods() > FooKrylovSolver::list_preconditioners() > > 2. New global functions that list available methods and Krylov solvers > for the currently chosen backend: > > list_lu_methods() > > list_krylov_methods() > list_preconditioners() > > list_solver_methods() = list_{lu + krylov}_methods > > 3. Changes in all factory classes to handle the above > > 4. Checks added to check whether a certain method is available and > that the preconditioner is set to "none" when using a Krylov method. > > The following output is printed when calling the above methods using > the PETSc backend: > > LU method | Description > ----------------------------------------------------------------------------- > default | default LU solver > umfpack | UMFPACK (Unsymmetric MultiFrontal sparse LU factorization) > mumps | MUMPS (MUltifrontal Massively Parallel Sparse direct Solver) > pastix | PaStiX (Parallel Sparse matriX package) > spooles | SPOOLES (SParse Object Oriented Linear Equations Solver) > superlu | SuperLU > superlu_dist | Parallel SuperLU > petsc | PETSc builtin LU solver > > Krylov method | Description > -------------------------------------------------------------- > default | default Krylov method > cg | Conjugate gradient method > gmres | Generalized minimal residual method > minres | Minimal residual method > tfqmr | Transpose-free quasi-minimal residual method > richardson | Richardson method > bicgstab | Biconjugate gradient stabilized method > > Preconditioner | Description > --------------------------------------------------------------- > default | default preconditioner > none | No preconditioner > ilu | Incomplete LU factorization > icc | Incomplete Cholesky factorization > jacobi | Jacobi iteration > bjacobi | Block Jacobi iteration > sor | Successive over-relaxation > additive_schwarz | Additive Schwarz > amg | Algebraic multigrid > hypre_amg | Hypre algebraic multigrid (BoomerAMG) > hypre_euclid | Hypre parallel incomplete LU factorization > hypre_parasails | Hypre parallel sparse approximate inverse > ml_amg | ML algebraic multigrid > > -- > Anders > > > ---------- Forwarded message ---------- > From: nore...@launchpad.net > To: Anders Logg <l...@simula.no> > Date: Fri, 07 Oct 2011 12:37:16 -0000 > Subject: [Branch ~dolfin-core/dolfin/logg] Rev 6336: Big cleanup of > setting/listing linear solver methods and preconditioners: > ------------------------------------------------------------ > revno: 6336 > committer: Anders Logg <l...@simula.no> > branch nick: work > timestamp: Fri 2011-10-07 14:24:30 +0200 > message: > Big cleanup of setting/listing linear solver methods and preconditioners: > - new global function list_lu_methods > - new global function list_krylov_methods > - new global function list_preconditioners > - extension of LinearAlgebraFactor interface above functions > - extension of all solvers and factories with above functions > modified: > ChangeLog > dolfin/la/CholmodCholeskySolver.cpp > dolfin/la/CholmodCholeskySolver.h > dolfin/la/DefaultFactory.cpp > dolfin/la/DefaultFactory.h > dolfin/la/EpetraFactory.cpp > dolfin/la/EpetraFactory.h > dolfin/la/EpetraKrylovSolver.cpp > dolfin/la/EpetraKrylovSolver.h > dolfin/la/EpetraLUSolver.cpp > dolfin/la/EpetraLUSolver.h > dolfin/la/ITLKrylovSolver.cpp > dolfin/la/ITLKrylovSolver.h > dolfin/la/KrylovSolver.cpp > dolfin/la/KrylovSolver.h > dolfin/la/LUSolver.cpp > dolfin/la/LUSolver.h > dolfin/la/LinearAlgebraFactory.h > dolfin/la/LinearSolver.cpp > dolfin/la/LinearSolver.h > dolfin/la/MTL4Factory.h > dolfin/la/PETScFactory.cpp > dolfin/la/PETScFactory.h > dolfin/la/PETScKrylovSolver.cpp > dolfin/la/PETScKrylovSolver.h > dolfin/la/PETScLUSolver.cpp > dolfin/la/PETScLUSolver.h > dolfin/la/PETScPreconditioner.cpp > dolfin/la/PETScPreconditioner.h > dolfin/la/STLFactory.h > dolfin/la/SingularSolver.cpp > dolfin/la/SingularSolver.h > dolfin/la/TrilinosPreconditioner.cpp > dolfin/la/TrilinosPreconditioner.h > dolfin/la/solve.cpp > dolfin/la/solve.h > dolfin/la/uBLASFactory.h > dolfin/la/uBLASKrylovSolver.cpp > dolfin/la/uBLASKrylovSolver.h > The size of the diff (2615 lines) is larger than your specified limit of 500 > lines > > -- > lp:~dolfin-core/dolfin/logg > https://code.launchpad.net/~dolfin-core/dolfin/logg > > Your team DOLFIN Core Team is subscribed to branch > lp:~dolfin-core/dolfin/logg. > To unsubscribe from this branch go to > https://code.launchpad.net/~dolfin-core/dolfin/logg/+edit-subscription > > _______________________________________________ > Mailing list: https://launchpad.net/~dolfin > Post to : dolfin@lists.launchpad.net > Unsubscribe : https://launchpad.net/~dolfin > More help : https://help.launchpad.net/ListHelp > > _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : dolfin@lists.launchpad.net Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp