On Wed, Aug 10, 2011 at 12:39 PM, Graf, Peter <span dir="ltr">&lt;<a href="mailto:Peter.Graf@nrel.gov">Peter.Graf@nrel.gov</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Dear Petsc-Users,<br>
I am implementing a 1D solution of the (drift/diffusion) semiconductor equations.  The case of Dirichlet boundaries works fine.  The case of Neumann boundaries (i.e. current boundary conditions such as occur at semiconductor/metal contacts) does not.   In sorting this out, I have modified one of your examples to recreate the problem:<br>

<br>
The (modified) example seeks to solve<br>
u`` + u^{2} = f<br>
on [0,1] with<br>
u&#39;(0) = U0<br>
u(1) = 1<br>
<br>
With U0 = 0, the SNES solver converges.  With U0=-2 (for example) it does not:<br></blockquote><div><br></div><div>Just to be clear, both of these are Neumann conditions.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

 11 SNES Function norm 5.018284941187e+00<br>
Nonlinear solve did not converge due to DIVERGED_LS_FAILURE<br></blockquote><div><br></div><div>When asking about convergence, please send the entire output of -snes_view -snes_monitor -ksp_monitor -snes_converged_reason</div>
<div><br></div><div>Since the Jacobian becomes more ill-conditioned, its possible the linear solver is not converging. When testing, its best to always use</div><div>-ksp_type preonly -pc_type lu so that the solves are exact to start out.</div>
<div><br></div><div>  Thanks,</div><div><br></div><div>      Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
(interestingly, it still comes up with roughly good solutions, e.g. at least visually, which suggests to me my discretization is not _total_ garbage)<br>
<br>
Along the way (with -info) I get messages of the form:<br>
SNESLSCheckResidual_Private(): ||J^T(F-Ax)||/||F-AX|| 208.031 near zero implies inconsistent rhs<br>
<br>
At the end, I get:<br>
[0] SNESLSCheckLocalMin_Private(): || J^T F|| 80.3 near zero implies found a local minimum<br>
<br>
I have used -snes_type test to verify that my Jacobian is accurate.<br>
I have also dumped the Jacobians to a file and examined their condition numbers.  The nonconverged cases have condition numbers around 10^7, whereas the converged cases have condition numbers around 10^3.  This seems like a clue, but I&#39;m not sure what to do about it.<br>

<br>
All this is completely analogous to the real case of interest (in that case, my condition numbers go to 10^13 or more, and there is similar visual evidence that the solver is &quot;trying&quot; to do the right thing).<br>

I would love to have help getting this to work.  Specifically, what does the message about the &quot;inconsistent rhs&quot; tell me I&#39;m doing wrong?  What is the evidence of the condition number telling me?  Do I have an error somewhere, or do I have a legitimately ill-conditioned Jacobian (in which case, what should I do about that?)?<br>

<br>
Thank you very much for any advice,<br>
<font color="#888888"><br>
Peter Graf<br>
NREL Scientific Computing Center<br>
Golden, CO<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener<br>