← Back to team overview

dolfin team mailing list archive

[noreply@xxxxxxxxxxxxx: [Branch ~dolfin-core/dolfin/logg] Rev 6336: Big cleanup of setting/listing linear solver methods and preconditioners:]

 

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
--- Begin Message ---
------------------------------------------------------------
revno: 6336
committer: Anders Logg <logg@xxxxxxxxx>
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

--- End Message ---

Follow ups