Re: [petsc-dev] [petsc-maint] Petsc KSP options that provide the most 'robust' solve possible
On Fri, Feb 3, 2017 at 11:44 AM, Matthew Knepley <[email protected]> wrote:
On Fri, Feb 3, 2017 at 11:41 AM, Barry Smith <[email protected]> wrote:
On Feb 3, 2017, at 12:59 AM, Mark McClure <[email protected]> wrote:
Hi, Jed and Matt.
To close the loop, it turns out that the condition number issue had a simple explanation. The BC equation that I had added to the system had very different units from the other equations. Multiplying that row by a constant (effectively, modifying the units of the equation) improved the condition number of the matrix by many orders of magnitude. Big picture, this did not have an apparent effect on any of the numerical performance - the linear solver still had nonconvergence in the same places (when I used a large number of processes) and when I use a smaller number of processors so that the linear solve always converges, the overall numerical scheme is unaffected by whether or not I scale the extra BC equation. I hadn't realized how important it is to make sure the equations are scaled consistently/nondimensionalized when using the convergence number to evaluate whether a system is singular. Interesting experience.
Thanks again for the help. I'll use the direct solver you suggested as a backup and send the user a warning if they try to use too many processors on a small problem.
An aside, at first, when I saw that my overall numerical scheme was failing, I didn't realize the problem was that the linear solver was not converging. I spent a fair amount time debugging until I found the issue and learned how to use KSPConvergedReason. Because if KSP doesn't converge, it merely returns incorrect numbers. Without knowing to run KSPConvergedReason, an inexperienced user (like me) many not know about the nonconvergence in the linear solve and could spend a lot of time checking for other issues. It might be worth changing the default behavior for nonconvergence to be that it returns an nan so that the user gets a clear signal that the values coming out of KSP cannot be used.
Because the linear solvers in PETSc are usually used by the nonlinear solvers and ODE integrators that have recovery methods for failure in a linear solve we moved away from the "crash and burn" on failed linear solver approach; since that makes the recovery more difficult.
We could consider the following; if the KSP is not created by a SNES or TS it defaults to "crash and burn" on failed linear solve this would help newbies who are only solving linear systems and expecting a "crash and burn" on failure.
I am for that.
I like this feature. Hong
Matt
What do people think?
Barry
Regards, Mark
On Thu, Feb 2, 2017 at 7:48 AM, Jed Brown <[email protected]> wrote: Mark McClure <[email protected]> writes:
I think you are right that I have an issue with how the BC is
implemented.
It is a pipe flow simulation that is solving mass and momentum balance simultaneously (corresponding unknowns are pressure and flow rate). I am applying a constant mass flow rate boundary condition. Upon further consideration, it may be that I am not properly providing a boundary condition for the momentum balance equation at the inlet. If I did, the inlet pressure could be readily calculated standalone,
Momentum inflow is common, but if you also have momentum outflow (i.e., all Dirichlet conditions for momentum) then there is a null space of constant pressure -- pressure is only determined up to a constant. See the user manual section on solving singular equations.
outside the system of equations, and the problematic equation would be removed.
-- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener
participants (1)
-
Hong