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

Reply via email to