[petsc-users] Strongly nonlinear equation solved within the framework of PETSc
Fatcharm
wolfshow at gmail.com
Tue Jan 10 02:27:34 CST 2012
Dear all,
First, I would like to re-describe my problem. I want to numerically
solve a strongly nonlinear fourth-order equation, which is used to
describe the dynamics of a liquid film.Please find the form of the
equation below,
u_t = -(1/3)*C*(u^3*u_xxx)_x + (A*(u_x/u))_x
"u" is the thickness of the film to be solved, is a function of "x"
and time "t" , "C" and "A" are constant parameters.
u_xxx is the 3-th order derivative.
I wrote a PETSc programs for this problem, using the central finite
difference scheme in the space and CN method in time .
I start my PETSc program from the /petsc-3.2-p5/src/ts/examples/tutorials/ex13.c
I wrote in my "RHSFunction" function:
u = uarray[i];
ux = (uarray[i+1] - uarray[i-1]);
uxx = (-2.0*u + uarray[i-1] + uarray[i+1]);
uxxx = (uarray[i+2] - 2.0*uarray[i+1] + 2.0*uarray[i-1] -
uarray[i-2]);
uxxxx = (uarray[i+2] - 4.0*uarray[i+1] + 6.0*u -
4.0*uarray[i-1] + uarray[i-2]);
ucx = -(user->c/3.0)*sx*(0.75*sx*u*u*ux*uxxx + sx*u*u*u*uxxxx);
uax = (user->a)*sx*(-0.25*ux*ux/(u*u+l_res) + uxx/(u+l_res));
f[i] = ucx + uax;
Also I provided the "RHSJacobian" to evaluate the changing Jacobian.
Followed Jed's advice, I run the program with -snes_monitor
-snes_converged_reason -ksp_converged_reason
I found that "Nonlinear solve did not converge due to
DIVERGED_LINE_SEARCH", at the same time "Linear solve converged due to
CONVERGED_RTOL iterations 5".
I tested to solve this problem with -ts_type beuler, I found:
timestep 0: time 0, solution norm 0.00899198, max 0.057735, min 0.001
Linear solve converged due to CONVERGED_RTOL iterations 30
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH
timestep 1: time 0.001, solution norm 0.00899198, max 0.057735, min 0.001
Nonlinear solve converged due to CONVERGED_FNORM_ABS
timestep 2: time 0.002, solution norm 0.00899198, max 0.057735, min 0.001
Linear solve converged due to CONVERGED_RTOL iterations 30
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH
timestep 3: time 0.003, solution norm 0.00899198, max 0.057735, min 0.001
Nonlinear solve converged due to CONVERGED_FNORM_ABS
timestep 4: time 0.004, solution norm 0.00899198, max 0.057735, min 0.001
Linear solve converged due to CONVERGED_RTOL iterations 30
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH
timestep 5: time 0.005, solution norm 0.00899198, max 0.057735, min 0.001
Nonlinear solve converged due to CONVERGED_FNORM_ABS
timestep 6: time 0.006, solution norm 0.00899198, max 0.057735, min 0.001
Linear solve converged due to CONVERGED_RTOL iterations 30
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH
I read http://scicomp.stackexchange.com/questions/30/why-is-newtons-method-not-converging
I run with -pc_type lu, it was told that
[0]PETSC ERROR: --------------------- Error Message
------------------------------------
[0]PETSC ERROR: No support for this operation for this object type!
[0]PETSC ERROR: Matrix format mpiaij does not have a built-in PETSc LU!
[0]PETSC ERROR:
------------------------------------------------------------------------
I run with -viewJacobian, the Jacobian looks reasonable. Only the
value in the Jacobian is on the order of 10^7 or 10^8, Jed told me
that "That may cause ill-conditioning"?
If I run with -snes_type test -snes_test_display, I got
timestep 0: time 0, solution norm 0.00899198, max 0.057735, min 0.001
Testing hand-coded Jacobian, if the ratio is
O(1.e-8), the hand-coded Jacobian is probably correct.
Run with -snes_test_display to show difference
of hand-coded and finite difference Jacobian.
[0]PETSC ERROR: --------------------- Error Message
------------------------------------
[0]PETSC ERROR: Floating point exception!
[0]PETSC ERROR: Infinite or not-a-number generated in norm!
[0]PETSC ERROR:
------------------------------------------------------------------------
If I run with -snes_ls_monitor, I got
timestep 0: time 0, solution norm 0.02004, max 0.0299803, min 0.0100197
Line search: gnorm after quadratic fit 6.651216893041e+04
Line search: Quadratically determined step, lambda=4.8079877662732573e-01
Line search: gnorm after quadratic fit 5.508857435695e+07
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508989545851e+07 lambda=1.0000000000000002e-02
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508855229151e+07 lambda=1.0000000000000002e-03
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508989770948e+07 lambda=1.0000000000000003e-04
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508855206653e+07 lambda=1.0000000000000004e-05
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508989773203e+07 lambda=1.0000000000000004e-06
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508855206428e+07 lambda=1.0000000000000005e-07
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508989773226e+07 lambda=1.0000000000000005e-08
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508855206425e+07 lambda=1.0000000000000005e-09
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508989773226e+07 lambda=1.0000000000000006e-10
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508855206425e+07 lambda=1.0000000000000006e-11
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508989773226e+07 lambda=1.0000000000000006e-12
Line search: Cubic step no good, shrinking lambda, current gnorm
5.508855206425e+07 lambda=1.0000000000000007e-13
Line search: unable to find good step length! After 13 tries
Line search: fnorm=6.6512168930411834e+04,
gnorm=5.5088552064252406e+07, ynorm=2.0443556209235136e-01,
minlambda=6.8680778683552649e-13, lambda=1.0000000000000007e-13,
initial slope=-4.4238725909386473e+09
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH
timestep 1: time 0.001, solution norm 0.0192692, max 0.021293, min 0.0161292
Line search: gnorm after quadratic fit 5.509183229235e+07
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509262678284e+07 lambda=1.0000000000000002e-02
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509184917687e+07 lambda=1.0000000000000002e-03
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509262521680e+07 lambda=1.0000000000000003e-04
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509184934034e+07 lambda=1.0000000000000004e-05
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509262520119e+07 lambda=1.0000000000000004e-06
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509184934198e+07 lambda=1.0000000000000005e-07
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509262520104e+07 lambda=1.0000000000000005e-08
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509184934199e+07 lambda=1.0000000000000005e-09
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509262520104e+07 lambda=1.0000000000000006e-10
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509184934199e+07 lambda=1.0000000000000006e-11
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509262520104e+07 lambda=1.0000000000000006e-12
Line search: Cubic step no good, shrinking lambda, current gnorm
5.509184934199e+07 lambda=1.0000000000000007e-13
Line search: unable to find good step length! After 13 tries
Line search: fnorm=9.5088545581815284e+04,
gnorm=5.5091849341994494e+07, ynorm=1.4128453377933892e-01,
minlambda=8.9929091375150137e-13, lambda=1.0000000000000007e-13,
initial slope=-9.0419264362675228e+09
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH
timestep 2: time 0.002, solution norm 0.0192692, max 0.021293, min 0.0161292
It is weird that if I run with -snes_converged_reason, I got
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH
If I run with -snes_converged_reason and -info I found that
Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE
Could anyone please give me some suggestions?
Thank you very much.
Feng-Chao
>
> Message: 6
> Date: Thu, 29 Dec 2011 08:21:08 -0600
> From: Jed Brown <jedbrown at mcs.anl.gov>
> Subject: Re: [petsc-users] Strongly nonlinear equation solved within
> the framework of PETSc
> To: PETSc users list <petsc-users at mcs.anl.gov>
> Message-ID:
> <CAM9tzSkb1yrduqHqwtuRhN+bztCixxBjh_KcCV=JXWuNc1PNJA at mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> On Thu, Dec 29, 2011 at 08:10, Fatcharm <wolfshow at gmail.com> wrote:
>
>> We can see that the SNES Function norm is extremely large. I think it
>> is because that the initial value for the unknown function H(X,T) is
>> quite small and there is some terms like (1/H)(dH/dX) or
>> (1/H^2)(dH/dX) in my equations.
>>
>
> That may cause ill-conditioning, but you could still scale the equations so
> that the initial norm was of order 1. It shouldn't matter here though,
> because most methods are unaffected by scaling.
>
> Are you computing an analytic Jacobian or using finite differencing?
>
>
>>
>> For "Linear solve did not converge due to DIVERGED_DTOL iterations
>> 3270", does this mean I should change the ksp_type?
>>
>
> It's important to solve the linear systems before worrying about
> convergence rates for Newton methods. Try a direct solve on a small problem
> first, then read this
>
> http://scicomp.stackexchange.com/questions/513/why-is-my-iterative-linear-solver-not-converging
>
> If you fix the linear solve issues, but SNES is still not converging, read
>
> http://scicomp.stackexchange.com/questions/30/why-is-newtons-method-not-converging
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL:
> <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20111229/0e223952/attachment.htm>
>
> ------------------------------
>
> _______________________________________________
> petsc-users mailing list
> petsc-users at mcs.anl.gov
> https://lists.mcs.anl.gov/mailman/listinfo/petsc-users
>
>
> End of petsc-users Digest, Vol 36, Issue 84
> *******************************************
>
More information about the petsc-users
mailing list