On Mon, 25 Jul 2016, [email protected] wrote: > -- -- > | -laplace grad | > | div 0 | > -- -- > > I use bjacobi+ilu as the preconditioner for GMRES in PETSc to solve > the system. Sometimes it works, but most of time it does not > converges. My code is just like the example: > /systems_of_equations_ex2. > > I wonder if I try the way in example: /systems_of_equations_ex3, > would it be better?
That's an ideal way to get rid of the null space (assuming you have one - it depends on your boundary conditions). In my experience you do want to get rid of the null space *somehow* to make things easier on your solver, but simply pinning the pressure at a point has always worked for me. > Or should I use other solver/perconditioner ? Assuming you're using PETSc then I would try different preconditioner options first, simply because they make it so easy to do. In decreasing order of usefulness: I usually tell ILU to do a handful (4 is pretty robust) of levels of fill. The extra cost setting up a more expensive preconditioner usually pays for itself in fewer Krylov steps, even aside from robustness concerns. I've used as many as 10 levels on some problems. "-sub_pc_factor_shift_type nonzero" is sometimes necessary with new PETSc versions. ASM with a little overlap works better for me than block Jacobi: not always enough to bother, but I've hit lots of problems where just one level of overlap increased overall performance, and I've hit some problems where 10 levels of overlap kept solves robust on a wide range of processor counts and partitionings. Futzing with "-sub_pc_factor_mat_ordering_type 1wd" and other ordering options sometimes makes ILU-based preconditioners much more robust for me, but other times much less. libMesh does expose enough information to PETSc to allow you to do a variable-based block decomposition. In my experience I've always managed to get the fastest solves out of hand-tweaked ASM+ILU, but if you can't then Schur complement might be worth trying next. --- Roy ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports.http://sdm.link/zohodev2dev _______________________________________________ Libmesh-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users
