On Tue, 21 Jan 2014 11:01:50 -0800 Nikolaus Rath <nr...@trialphaenergy.com> wrote:
> On 01/21/2014 09:43 AM, Simone Pezzuto wrote: > > 2014/1/21 Jan Blechta <blec...@karlin.mff.cuni.cz > > <mailto:blec...@karlin.mff.cuni.cz>> > > > > On Tue, 21 Jan 2014 17:18:54 +0000 > > "Garth N. Wells" <gn...@cam.ac.uk <mailto: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 > > > > <https://urldefense.proofpoint.com/v1/url?u=http://fenicsproject.org/documentation/dolfin/1.3.0/python/demo/documented/neumann-poisson/python/documentation.html&k=Izx05CQZXsnLXkTIfmT7FQ%3D%3D%0A&r=1KW6QPJUrZMjRkn7m6Ouj0V90HWobEY8fXrhlFmuc%2Bc%3D%0A&m=v%2F3Ze6UBI9gR2l%2Fu82%2F4Y4fHujXMqW47hgHfmNXSjGw%3D%0A&s=e188e7efbe5d6d1deabbd7fb92be8e35f91642b13aacc34896849ef0c60c62e7>) > > > > 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). > > > Why is there a nullspace? Doesn't the \int u = 0 constraint remove the > remaining degree of freedom resulting from the pure Neumann boundary > conditions? It does not remove any DOF. It adds just one DOF - the Lagrange multiplier and an equation which makes the system regular. But this is evil as corresponding row and column in the assembled matrix is dense/full. Nullspace is an alternative (and probably better) approach. Jan > > > > Thanks, > 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