On 21 January 2014 19:32, Simone Pezzuto <junki....@gmail.com> wrote:
> Exactly, it was implicitly stated. Then CG should work since is spd on the > space orthogonal to the kernel. > > Or, fix a point, and then shift the solution with its average. > > Without the knowledge of the nullspace you can either use minres or symmlq > (or the new minres-qlp) on the neumann problem, > but I don't really know how to choose the preconditioner (maybe the same > problem with a fixed point?) > > On the augmented problem, I would use a direct solver :D > block preconditioning arguments (e.g. Wathen, Winther etc) suggest a preconditioner along the lines that Jan proposed. But the c*d*dx might need a scaling, I don't know. I have not tested. > > By the way, I really open to suggestions since I'm facing similar issues > on a nonlinear mechanical problem (and the nullspace is not available). > > > Simone > > > 2014/1/21 Kent-Andre Mardal <kent-...@simula.no> > >> >> >> On Tuesday, 21 January 2014, Simone Pezzuto <junki....@gmail.com> wrote: >> >>> 2014/1/21 Jan Blechta <blec...@karlin.mff.cuni.cz> >>> >>>> On Tue, 21 Jan 2014 17:18:54 +0000 >>>> "Garth N. Wells" <gn...@cam.ac.uk> wrote: >>>> >>>> > On 2014-01-21 17:01, Nikolaus Rath wrote: >>>> > > Hello, >>>> > > >>>> > > I noticed that the neumann-poisson demo >>>> > > ( >>>> http://fenicsproject.org/documentation/dolfin/1.3.0/python/demo/documented/neumann-poisson/python/documentation.html >>>> ) >>>> > > fails when using a different solver, e.g. when replacing >>>> > > >>>> > > solve(a == L, w) >>>> > > >>>> > > with >>>> > > >>>> > > solve(a == L, w, >>>> > > solver_parameters = {'linear_solver': 'cg', >>>> > > 'preconditioner': 'ilu'}) >>>> > > >>>> > >>>> > This problem needs very careful treatment when using iterative >>>> > solvers. Simple block-box preconditioners and solvers will very >>>> > likely fail. >>>> >>>> AMG preconditioning based on operator >>>> >>>> (inner(grad(u), grad(v)) + c*d)*dx >>>> >>>> could perform well. This operator does not have a dense row like the >>>> original one. This is a strategy similar to demo_stokes-iterative. >>>> >>>> >>> In this case the preconditioner is singular (pure neumann), no it cannot >>> be used. >>> >>> As Garth was mentioning, this problem is delicate for iterative solver, >>> not only because >>> its indefiniteness, but because the Lagrangian constraint you're >>> imposing yields >>> a column (the last one) of the full matrix that belongs to the kernel of >>> the top-left block. >>> >>> Since the nullspace is at hands, I would provide it to the solver and >>> then use CG+AMG, >>> with Jacobi relaxation at coarser scale instead Gauss elimination (at >>> least with petsc boomeramg). >>> >>> Simone >>> >> >> Providing the null space is perhaps the best alternative, but then you >> do not need the lagrange multiplier. Instead you can remove the constant >> from the lhs and rhs before sending it to cg. >> >> Kent >> >> >> >>> >>> >>>> Jan >>>> >>>> > >>>> > Garth >>>> > >>>> > > The error that I'm getting with FEniCS 1.3 is: >>>> > > >>>> > > $ python demo_neumann-poisson.py >>>> > > Solving linear variational problem. >>>> > > Solving linear system of size 4226 x 4226 (PETSc Krylov solver). >>>> > > Traceback (most recent call last): >>>> > > File "demo_neumann-poisson.py", line 68, in <module> >>>> > > 'preconditioner': 'ilu'}) >>>> > > File >>>> > > >>>> "/home/nikratio/.local/FEniCS/lib/python2.7/site-packages/dolfin/fem/solving.py", >>>> > > line 268, in solve >>>> > > _solve_varproblem(*args, **kwargs) >>>> > > File >>>> > > >>>> "/home/nikratio/.local/FEniCS/lib/python2.7/site-packages/dolfin/fem/solving.py", >>>> > > line 297, in _solve_varproblem >>>> > > solver.solve() >>>> > > RuntimeError: >>>> > > >>>> > > *** >>>> > > >>>> ------------------------------------------------------------------------- >>>> > > *** DOLFIN encountered an error. If you are not able to resolve >>>> > > this issue >>>> > > *** using the information listed below, you can ask for help at >>>> > > *** >>>> > > *** fenics@fenicsproject.org >>>> > > *** >>>> > > *** Remember to include the error message listed below and, if >>>> > > possible, >>>> > > *** include a *minimal* running example to reproduce the error. >>>> > > *** >>>> > > *** >>>> > > >>>> ------------------------------------------------------------------------- >>>> > > *** Error: Unable to solve linear system using PETSc Krylov >>>> > > solver. *** Reason: Solution failed to converge in 2 iterations >>>> > > (PETSc reason DIVERGED_INDEFINITE_PC, residual norm ||r|| = >>>> > > 1.541789e+19). *** Where: This error was encountered inside >>>> > > PETScKrylovSolver.cpp. *** Process: 0 >>>> > > *** >>>> > > *** DOLFIN version: 1.3.0 >>>> > > *** Git changeset: >>>> > > *** >>>> > > >>>> ------------------------------------------------------------------------- >>>> > > >>>> > > >>>> > > Bug or user error? >>>> > > >>>> > > >>>> > > Best, >>>> > > Nikolaus >>>> > > >>>> > > _______________________________________________ >>>> > > fenics mailing list >>>> > > fenics@fenicsproject.org >>>> > > http://fenicsproject.org/mailman/listinfo/fenics >>>> > _______________________________________________ >>>> > fenics mailing list >>>> > fenics@fenicsproject.org >>>> > http://fenicsproject.org/mailman/listinfo/fenics >>>> >>>> _______________________________________________ >>>> fenics mailing list >>>> fenics@fenicsproject.org >>>> http://fenicsproject.org/mailman/listinfo/fenics >>>> >>> >>> >
_______________________________________________ fenics mailing list fenics@fenicsproject.org http://fenicsproject.org/mailman/listinfo/fenics