dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #07855
Re: A note on the new solve() function
2008/5/8 Anders Logg <logg@xxxxxxxxx>:
> It's now possible to use all Krylov methods and preconditioners by
> just calling solve(). Here are some examples:
>
> solve(A, x, b);
> solve(A, x, b, lu);
> solve(A, x, b, gmres);
> solve(A, x, b, gmres, ilu);
> solve(A, x, b, bicgstab, sor);
> solve(A, x, b, cg, amg);
>
> Without any options, solve() will just use LU.
>
> Note that each time solve is called, a new solver object will be
> created and then destroyed. This means that if you want to solve
> repeatedly, it will be a little more efficient to create a solver
> object instead of calling solve() many times. But the good thing
> is that the overhead is small. In a simple test I made (which is
> in sandbox/la/solve), the overhead was only 5%:
>
> --- Calling solve repeatedly: 22.8 seconds
> --- Reusing solver: 21.64 seconds
>
> --- Calling solve repeatedly: 22.81 seconds
> --- Reusing solver: 21.75 seconds
>
> This is for solving a 263169 x 263169 system (Poisson) 10 times with
> GMRES (from PETSc) and AMG (from PETSc/Hypre).
>
> I don't know how to get this working in the Python interface, since
> the enum variables don't seem to get wrapped. Anyone knows how to
> fix this?
They do get wrapped, I use this code:
from dolfin.dolfin import <...>, gmres
...
solver = KrylovSolver(gmres)
--
Martin
Follow ups
References