dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #24688
Re: [noreply@xxxxxxxxxxxxx: [Branch ~dolfin-core/dolfin/logg] Rev 6336: Big cleanup of setting/listing linear solver methods and preconditioners:]
On Friday October 7 2011 08:56:04 Anders Logg wrote:
> On Fri, Oct 07, 2011 at 08:44:16AM -0700, Johan Hake wrote:
> > This is great!
> >
> > I have always thought we need to do something with this. However, I
> > wonder if list_foo is the best name?
> >
> > What bothers me is the "list". We have by purpose skipped most "get" from
> >
> > methods, as it is implicit for what you want. What with just:
> > lu_methods (also see below), preconditioners
> >
> > Also
> >
> > [list_]methods, [list_]lu_methods and [list_]krylov_methods
> >
> > might be amigous. What methods are we talking about? What with:
> > solver_methods, lu_solver_methods, krylov_solver_methods
>
> Sure, let's drop the list_ prefix for the class methods, but I think
> we should keep the "list_" prefix for the free functions, since they
> not only return the list of methods/preconditioners, but also print
> them to screen.
I think "list_" is not nessesary for the free methods, in particular I think
printing by default is not what I would expect. It is usefull to know what
solver methods are available in an api and there are other ways of using that
information than printing it to screen.
> And should it be
>
> KrylovSolver::krylov_solver_methods()
>
> or
>
> KrylovSolver::krylov_methods()
>
> or
>
> KrylovSolver::solver_methods()
I vote for KrylovSolver::solver_methods()
Johan
> or
>
> KrylovSolver::methods()
>
> ?
>
> --
> Anders
>
> > They are a bit lengthy but if we skip list they might work fine.
> >
> > Johan
> >
> > On Friday October 7 2011 06:20:46 Anders Logg 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
Follow ups
References