On Tuesday, 21 January 2014, Simone Pezzuto <junki....@gmail.com> wrote:

> 2014/1/21 Jan Blechta <blec...@karlin.mff.cuni.cz <javascript:_e({},
> 'cvml', 'blec...@karlin.mff.cuni.cz');>>
>
>> On Tue, 21 Jan 2014 17:18:54 +0000
>> "Garth N. Wells" <gn...@cam.ac.uk <javascript:_e({}, 'cvml',
>> '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 <javascript:_e({}, 'cvml',
>> '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 <javascript:_e({}, 'cvml',
>> 'fenics@fenicsproject.org');>
>> > > http://fenicsproject.org/mailman/listinfo/fenics
>> > _______________________________________________
>> > fenics mailing list
>> > fenics@fenicsproject.org <javascript:_e({}, 'cvml',
>> 'fenics@fenicsproject.org');>
>> > http://fenicsproject.org/mailman/listinfo/fenics
>>
>> _______________________________________________
>> fenics mailing list
>> fenics@fenicsproject.org <javascript:_e({}, 'cvml',
>> 'fenics@fenicsproject.org');>
>> http://fenicsproject.org/mailman/listinfo/fenics
>>
>
>
_______________________________________________
fenics mailing list
fenics@fenicsproject.org
http://fenicsproject.org/mailman/listinfo/fenics

Reply via email to