> 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.

   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.
> 

Reply via email to