On Tue, Jan 10, 2012 at 2:27 AM, Fatcharm <span dir="ltr">&lt;<a href="mailto:wolfshow@gmail.com">wolfshow@gmail.com</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 all,<br>
<br>
First, I would like to re-describe my problem. I want to numerically<br>
solve a strongly nonlinear fourth-order equation, which is used to<br>
describe the dynamics of a liquid film.Please find the form of the<br>
equation below,<br>
<br>
u_t = -(1/3)*C*(u^3*u_xxx)_x + (A*(u_x/u))_x<br>
<br>
&quot;u&quot; is the thickness of the film to be solved, is a function of &quot;x&quot;<br>
and time &quot;t&quot; , &quot;C&quot; and &quot;A&quot; are constant parameters.<br>
u_xxx is the 3-th order derivative.<br>
<br>
I wrote a PETSc programs for this problem, using the central finite<br>
difference scheme in the space and CN method in time .<br>
<br>
I start my PETSc program from the /petsc-3.2-p5/src/ts/examples/tutorials/ex13.c<br>
<br>
I wrote in my &quot;RHSFunction&quot; function:<br>
        u       = uarray[i];<br>
        ux      = (uarray[i+1] - uarray[i-1]);<br>
        uxx     = (-2.0*u + uarray[i-1] + uarray[i+1]);<br>
        uxxx    = (uarray[i+2] - 2.0*uarray[i+1] + 2.0*uarray[i-1] -<br>
uarray[i-2]);<br>
        uxxxx   = (uarray[i+2] - 4.0*uarray[i+1] + 6.0*u -<br>
4.0*uarray[i-1] + uarray[i-2]);<br>
        ucx    = -(user-&gt;c/3.0)*sx*(0.75*sx*u*u*ux*uxxx + sx*u*u*u*uxxxx);<br>
        uax    = (user-&gt;a)*sx*(-0.25*ux*ux/(u*u+l_res) + uxx/(u+l_res));<br>
        f[i]   = ucx + uax;<br>
<br>
Also I provided the &quot;RHSJacobian&quot; to evaluate the changing Jacobian.<br>
<br>
Followed Jed&#39;s advice, I run the program with -snes_monitor<br>
-snes_converged_reason -ksp_converged_reason<br>
<br>
I found that &quot;Nonlinear solve did not converge due to<br>
DIVERGED_LINE_SEARCH&quot;, at the same time &quot;Linear solve converged due to<br>
CONVERGED_RTOL iterations 5&quot;.<br></blockquote><div><br></div><div>This sounds like an error in your Jacobian. Run a small problem with -snes_fd. This</div><div>is in the FAQ.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I tested to solve this problem with -ts_type beuler, I found:<br>
<br>
timestep 0: time 0, solution norm 0.00899198, max 0.057735, min 0.001<br>
    Linear solve converged due to CONVERGED_RTOL iterations 30<br>
  Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH<br>
timestep 1: time 0.001, solution norm 0.00899198, max 0.057735, min 0.001<br>
  Nonlinear solve converged due to CONVERGED_FNORM_ABS<br>
timestep 2: time 0.002, solution norm 0.00899198, max 0.057735, min 0.001<br>
    Linear solve converged due to CONVERGED_RTOL iterations 30<br>
  Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH<br>
timestep 3: time 0.003, solution norm 0.00899198, max 0.057735, min 0.001<br>
  Nonlinear solve converged due to CONVERGED_FNORM_ABS<br>
timestep 4: time 0.004, solution norm 0.00899198, max 0.057735, min 0.001<br>
    Linear solve converged due to CONVERGED_RTOL iterations 30<br>
  Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH<br>
timestep 5: time 0.005, solution norm 0.00899198, max 0.057735, min 0.001<br>
  Nonlinear solve converged due to CONVERGED_FNORM_ABS<br>
timestep 6: time 0.006, solution norm 0.00899198, max 0.057735, min 0.001<br>
    Linear solve converged due to CONVERGED_RTOL iterations 30<br>
  Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH<br>
<br>
I read <a href="http://scicomp.stackexchange.com/questions/30/why-is-newtons-method-not-converging" target="_blank">http://scicomp.stackexchange.com/questions/30/why-is-newtons-method-not-converging</a><br>
<br>
I run with -pc_type lu, it was told that<br>
[0]PETSC ERROR: --------------------- Error Message<br>
------------------------------------<br>
[0]PETSC ERROR: No support for this operation for this object type!<br>
[0]PETSC ERROR: Matrix format mpiaij does not have a built-in PETSc LU!<br>
[0]PETSC ERROR:<br>
------------------------------------------------------------------------<br></blockquote><div><br></div><div>Always run o n1 process first, and never never never never set the type explicitly to</div><div>MPIAIJ. Use AIJ, which falls back to SEQAIJ on 1 processes.</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">
I run with -viewJacobian, the Jacobian looks reasonable. Only the<br>
value in the Jacobian is on the order of 10^7 or 10^8, Jed told me<br>
that &quot;That may cause ill-conditioning&quot;?<br>
<br>
If I run with -snes_type test -snes_test_display, I got<br>
<br>
timestep 0: time 0, solution norm 0.00899198, max 0.057735, min 0.001<br>
Testing hand-coded Jacobian, if the ratio is<br>
O(1.e-8), the hand-coded Jacobian is probably correct.<br>
Run with -snes_test_display to show difference<br>
of hand-coded and finite difference Jacobian.<br>
[0]PETSC ERROR: --------------------- Error Message<br>
------------------------------------<br>
[0]PETSC ERROR: Floating point exception!<br>
[0]PETSC ERROR: Infinite or not-a-number generated in norm!<br>
[0]PETSC ERROR:<br>
------------------------------------------------------------------------<br>
<br>
If I run with -snes_ls_monitor, I got<br>
<br>
timestep 0: time 0, solution norm 0.02004, max 0.0299803, min 0.0100197<br>
      Line search: gnorm after quadratic fit 6.651216893041e+04<br>
      Line search: Quadratically determined step, lambda=4.8079877662732573e-01<br>
      Line search: gnorm after quadratic fit 5.508857435695e+07<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508989545851e+07 lambda=1.0000000000000002e-02<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508855229151e+07 lambda=1.0000000000000002e-03<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508989770948e+07 lambda=1.0000000000000003e-04<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508855206653e+07 lambda=1.0000000000000004e-05<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508989773203e+07 lambda=1.0000000000000004e-06<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508855206428e+07 lambda=1.0000000000000005e-07<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508989773226e+07 lambda=1.0000000000000005e-08<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508855206425e+07 lambda=1.0000000000000005e-09<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508989773226e+07 lambda=1.0000000000000006e-10<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508855206425e+07 lambda=1.0000000000000006e-11<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508989773226e+07 lambda=1.0000000000000006e-12<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.508855206425e+07 lambda=1.0000000000000007e-13<br>
      Line search: unable to find good step length! After 13 tries<br>
      Line search: fnorm=6.6512168930411834e+04,<br>
gnorm=5.5088552064252406e+07, ynorm=2.0443556209235136e-01,<br>
minlambda=6.8680778683552649e-13, lambda=1.0000000000000007e-13,<br>
initial slope=-4.4238725909386473e+09<br>
  Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH<br>
timestep 1: time 0.001, solution norm 0.0192692, max 0.021293, min 0.0161292<br>
      Line search: gnorm after quadratic fit 5.509183229235e+07<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509262678284e+07 lambda=1.0000000000000002e-02<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509184917687e+07 lambda=1.0000000000000002e-03<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509262521680e+07 lambda=1.0000000000000003e-04<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509184934034e+07 lambda=1.0000000000000004e-05<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509262520119e+07 lambda=1.0000000000000004e-06<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509184934198e+07 lambda=1.0000000000000005e-07<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509262520104e+07 lambda=1.0000000000000005e-08<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509184934199e+07 lambda=1.0000000000000005e-09<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509262520104e+07 lambda=1.0000000000000006e-10<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509184934199e+07 lambda=1.0000000000000006e-11<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509262520104e+07 lambda=1.0000000000000006e-12<br>
    Line search: Cubic step no good, shrinking lambda, current gnorm<br>
5.509184934199e+07 lambda=1.0000000000000007e-13<br>
      Line search: unable to find good step length! After 13 tries<br>
      Line search: fnorm=9.5088545581815284e+04,<br>
gnorm=5.5091849341994494e+07, ynorm=1.4128453377933892e-01,<br>
minlambda=8.9929091375150137e-13, lambda=1.0000000000000007e-13,<br>
initial slope=-9.0419264362675228e+09<br>
  Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH<br>
timestep 2: time 0.002, solution norm 0.0192692, max 0.021293, min 0.0161292<br>
<br>
<br>
<br>
<br>
It is weird that if I run with -snes_converged_reason, I got<br>
<br>
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH<br>
<br>
If I run with  -snes_converged_reason and -info I found that<br>
<br>
Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE<br>
<br>
<br>
Could anyone please give me some suggestions?<br>
<br>
Thank you very much.<br>
<br>
Feng-Chao<br>
<br>
<br>
<br>
<br>
&gt;<br>
&gt; Message: 6<br>
&gt; Date: Thu, 29 Dec 2011 08:21:08 -0600<br>
&gt; From: Jed Brown &lt;<a href="mailto:jedbrown@mcs.anl.gov">jedbrown@mcs.anl.gov</a>&gt;<br>
&gt; Subject: Re: [petsc-users] Strongly nonlinear equation solved within<br>
&gt;       the framework of PETSc<br>
&gt; To: PETSc users list &lt;<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>&gt;<br>
&gt; Message-ID:<br>
&gt;       &lt;CAM9tzSkb1yrduqHqwtuRhN+bztCixxBjh_KcCV=<a href="mailto:JXWuNc1PNJA@mail.gmail.com">JXWuNc1PNJA@mail.gmail.com</a>&gt;<br>
&gt; Content-Type: text/plain; charset=&quot;utf-8&quot;<br>
&gt;<br>
&gt; On Thu, Dec 29, 2011 at 08:10, Fatcharm &lt;<a href="mailto:wolfshow@gmail.com">wolfshow@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; We can see that the SNES Function norm is extremely large. I think it<br>
&gt;&gt; is because that the initial value for the unknown function H(X,T) is<br>
&gt;&gt; quite small and there is  some terms like (1/H)(dH/dX) or<br>
&gt;&gt; (1/H^2)(dH/dX) in my equations.<br>
&gt;&gt;<br>
&gt;<br>
&gt; That may cause ill-conditioning, but you could still scale the equations so<br>
&gt; that the initial norm was of order 1. It shouldn&#39;t matter here though,<br>
&gt; because most methods are unaffected by scaling.<br>
&gt;<br>
&gt; Are you computing an analytic Jacobian or using finite differencing?<br>
&gt;<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; For &quot;Linear solve did not converge due to DIVERGED_DTOL iterations<br>
&gt;&gt; 3270&quot;, does this mean I should change the ksp_type?<br>
&gt;&gt;<br>
&gt;<br>
&gt; It&#39;s important to solve the linear systems before worrying about<br>
&gt; convergence rates for Newton methods. Try a direct solve on a small problem<br>
&gt; first, then read this<br>
&gt;<br>
&gt; <a href="http://scicomp.stackexchange.com/questions/513/why-is-my-iterative-linear-solver-not-converging" target="_blank">http://scicomp.stackexchange.com/questions/513/why-is-my-iterative-linear-solver-not-converging</a><br>

&gt;<br>
&gt; If you fix the linear solve issues, but SNES is still not converging, read<br>
&gt;<br>
&gt; <a href="http://scicomp.stackexchange.com/questions/30/why-is-newtons-method-not-converging" target="_blank">http://scicomp.stackexchange.com/questions/30/why-is-newtons-method-not-converging</a><br>
&gt; -------------- next part --------------<br>
&gt; An HTML attachment was scrubbed...<br>
&gt; URL:<br>
&gt; &lt;<a href="http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20111229/0e223952/attachment.htm" target="_blank">http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20111229/0e223952/attachment.htm</a>&gt;<br>

&gt;<br>
&gt; ------------------------------<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; petsc-users mailing list<br>
&gt; <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
&gt; <a href="https://lists.mcs.anl.gov/mailman/listinfo/petsc-users" target="_blank">https://lists.mcs.anl.gov/mailman/listinfo/petsc-users</a><br>
&gt;<br>
&gt;<br>
&gt; End of petsc-users Digest, Vol 36, Issue 84<br>
&gt; *******************************************<br>
&gt;<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <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>