Yingjie Wu <yjw...@gmail.com> writes:

> Thank you very much for your answer.
> I tried to use the quasi-Newton method to solve some examples, except
> ex48(in src/snes/example/tutorial), the ex3 and the ex19 will produce the
> same error information. The error information is as follows. Is there
> anything I should pay attention to when using the quasi-Newton method?
> args: -snes_type qn -snes_qn_restart_type periodic -snes_qn_scale_type
> jacobian
>
> In ex3, it has a routine about Jacobian, while in ex19 without a Jacobian
> routine.
> Is the quasi-Newton method use the inverse of the initial Jacobian matrix
> by finite difference ?
>
> Error information in ex3:
> mpiexec -n 2 ./ex3 -snes_type qn -snes_qn_restart_type periodic
> -snes_qn_scale_type jacobian -snes_view
> atol=1e-50, rtol=1e-08, stol=1e-08, maxit=10000, maxf=30000
> iter = 0,SNES Function norm 5.41468
> iter = 1,SNES Function norm 0.806152
> iter = 2,SNES Function norm 0.459274
> iter = 3,SNES Function norm 0.0562937
> iter = 4,SNES Function norm 0.00756409
> iter = 5,SNES Function norm 0.00153315
> iter = 6,SNES Function norm 0.000108099
> iter = 7,SNES Function norm 2.77778e-06
> iter = 8,SNES Function norm 5.56429e-08
> iter = 9,SNES Function norm 5.56429e-08
> [0]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [0]PETSC ERROR: Floating point exception

-snes_qn_type broyden may help.  The default (BFGS) is for symmetric
problems and this formulation (with boundary conditions) is not
symmetric.

> [0]PETSC ERROR: Vec entry at local location 0 is not-a-number or infinite
> at beginning of function: Parameter number 2
> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for
> trouble shooting.
> [0]PETSC ERROR: Petsc Release Version 3.10.1, Sep, 26, 2018
> [0]PETSC ERROR: ./ex3 on a arch-linux2-c-debug named yjwu-XPS-8910 by yjwu
> Fri Jan  4 09:11:00 2019
> [0]PETSC ERROR: Configure options --with-cc=gcc --with-cxx=g++
> --with-fc=gfortran --download-mpich --download-fblaslapack
> [0]PETSC ERROR: #1 VecValidValues() line 26 in
> /home/yjwu/petsc-3.10.1/src/vec/vec/interface/rvector.c
> [0]PETSC ERROR: #2 SNESComputeFunction() line 2234 in
> /home/yjwu/petsc-3.10.1/src/snes/interface/snes.c
> [1]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [1]PETSC ERROR: Floating point exception
> [1]PETSC ERROR: Vec entry at local location 0 is not-a-number or infinite
> at beginning of function: Parameter number 2
> [1]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for
> trouble shooting.
> [1]PETSC ERROR: Petsc Release Version 3.10.1, Sep, 26, 2018
> [1]PETSC ERROR: ./ex3 on a arch-linux2-c-debug named yjwu-XPS-8910 by yjwu
> Fri Jan  4 09:11:00 2019
> [1]PETSC ERROR: Configure options --with-cc=gcc --with-cxx=g++
> --with-fc=gfortran --download-mpich --download-fblaslapack
> [1]PETSC ERROR: #1 VecValidValues() line 26 in
> /home/yjwu/petsc-3.10.1/src/vec/vec/interface/rvector.c
> [1]PETSC ERROR: #2 SNESComputeFunction() line 2234 in
> /home/yjwu/petsc-3.10.1/src/snes/interface/snes.c
> [1]PETSC ERROR: #3 SNESLineSearchApply_CP() line 48 in
> /home/yjwu/petsc-3.10.1/src/snes/linesearch/impls/cp/linesearchcp.c
> [1]PETSC ERROR: #4 SNESLineSearchApply() line 648 in
> /home/yjwu/petsc-3.10.1/src/snes/linesearch/interface/linesearch.c
> [0]PETSC ERROR: #3 SNESLineSearchApply_CP() line 48 in
> /home/yjwu/petsc-3.10.1/src/snes/linesearch/impls/cp/linesearchcp.c
> [0]PETSC ERROR: #4 SNESLineSearchApply() line 648 in
> /home/yjwu/petsc-3.10.1/src/snes/linesearch/interface/linesearch.c
> [0]PETSC ERROR: #5 SNESSolve_QN() line 403 in
> /home/yjwu/petsc-3.10.1/src/snes/impls/qn/qn.c
> [0]PETSC ERROR: [1]PETSC ERROR: #5 SNESSolve_QN() line 403 in
> /home/yjwu/petsc-3.10.1/src/snes/impls/qn/qn.c
> [1]PETSC ERROR: #6 SNESSolve() line 4396 in
> /home/yjwu/petsc-3.10.1/src/snes/interface/snes.c
> #6 SNESSolve() line 4396 in
> /home/yjwu/petsc-3.10.1/src/snes/interface/snes.c
> [0]PETSC ERROR: [1]PETSC ERROR: #7 main() line 277 in
> /home/yjwu/petsc-3.10.1/src/snes/examples/tutorials/ex3.c
> #7 main() line 277 in
> /home/yjwu/petsc-3.10.1/src/snes/examples/tutorials/ex3.c
> [0]PETSC ERROR: PETSc Option Table entries:
> [1]PETSC ERROR: PETSc Option Table entries:
> [1]PETSC ERROR: [0]PETSC ERROR: -snes_qn_restart_type periodic
> [0]PETSC ERROR: -snes_qn_restart_type periodic
> [1]PETSC ERROR: -snes_qn_scale_type jacobian
> [1]PETSC ERROR: -snes_qn_scale_type jacobian
> [0]PETSC ERROR: -snes_type qn
> [0]PETSC ERROR: -snes_type qn
> [1]PETSC ERROR: -snes_view
> -snes_view
> [0]PETSC ERROR: ----------------End of Error Message -------send entire
> error message to petsc-ma...@mcs.anl.gov----------
> [1]PETSC ERROR: ----------------End of Error Message -------send entire
> error message to petsc-ma...@mcs.anl.gov----------
> application called MPI_Abort(MPI_COMM_WORLD, 72) - process 0
> application called MPI_Abort(MPI_COMM_WORLD, 72) - process 1
>
> Error information in ex19
> mpiexec -n 2 ./ex19 -snes_type qn -snes_qn_restart_type periodic
> -snes_qn_scale_type jacobian -snes_view
> lid velocity = 0.0625, prandtl # = 1., grashof # = 1.
> [0]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [0]PETSC ERROR: Floating point exception
> [0]PETSC ERROR: Vec entry at local location 0 is not-a-number or infinite
> at beginning of function: Parameter number 2
> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for
> trouble shooting.
> [0]PETSC ERROR: Petsc Release Version 3.10.1, Sep, 26, 2018
> [0]PETSC ERROR: ./ex19 on a arch-linux2-c-debug named yjwu-XPS-8910 by yjwu
> Fri Jan  4 09:05:10 2019
> [1]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [1]PETSC ERROR: Floating point exception
> [1]PETSC ERROR: Vec entry at local location 0 is not-a-number or infinite
> at beginning of function: Parameter number 2
> [1]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for
> trouble shooting.
> [1]PETSC ERROR: Petsc Release Version 3.10.1, Sep, 26, 2018
> [1]PETSC ERROR: ./ex19 on a arch-linux2-c-debug named yjwu-XPS-8910 by yjwu
> Fri Jan  4 09:05:10 2019
> [1]PETSC ERROR: Configure options --with-cc=gcc --with-cxx=g++
> --with-fc=gfortran --download-mpich --download-fblaslapack
> [1]PETSC ERROR: #1 VecValidValues() line 26 in
> /home/yjwu/petsc-3.10.1/src/vec/vec/interface/rvector.c
> [1]PETSC ERROR: [0]PETSC ERROR: Configure options --with-cc=gcc
> --with-cxx=g++ --with-fc=gfortran --download-mpich --download-fblaslapack
> [0]PETSC ERROR: #1 VecValidValues() line 26 in
> /home/yjwu/petsc-3.10.1/src/vec/vec/interface/rvector.c
> [0]PETSC ERROR: #2 SNESComputeFunction() line 2234 in
> /home/yjwu/petsc-3.10.1/src/snes/interface/snes.c
> [0]PETSC ERROR: #3 SNESLineSearchApply_CP() line 48 in
> /home/yjwu/petsc-3.10.1/src/snes/linesearch/impls/cp/linesearchcp.c
> [0]PETSC ERROR: #2 SNESComputeFunction() line 2234 in
> /home/yjwu/petsc-3.10.1/src/snes/interface/snes.c
> [1]PETSC ERROR: #3 SNESLineSearchApply_CP() line 48 in
> /home/yjwu/petsc-3.10.1/src/snes/linesearch/impls/cp/linesearchcp.c
> [1]PETSC ERROR: #4 SNESLineSearchApply() line 648 in
> /home/yjwu/petsc-3.10.1/src/snes/linesearch/interface/linesearch.c
> [1]PETSC ERROR: #4 SNESLineSearchApply() line 648 in
> /home/yjwu/petsc-3.10.1/src/snes/linesearch/interface/linesearch.c
> [0]PETSC ERROR: #5 SNESSolve_QN() line 403 in
> /home/yjwu/petsc-3.10.1/src/snes/impls/qn/qn.c
> [0]PETSC ERROR: #5 SNESSolve_QN() line 403 in
> /home/yjwu/petsc-3.10.1/src/snes/impls/qn/qn.c
> [1]PETSC ERROR: #6 SNESSolve() line 4396 in
> /home/yjwu/petsc-3.10.1/src/snes/interface/snes.c
> [1]PETSC ERROR: #7 main() line 161 in
> /home/yjwu/petsc-3.10.1/src/snes/examples/tutorials/ex19.c
> #6 SNESSolve() line 4396 in
> /home/yjwu/petsc-3.10.1/src/snes/interface/snes.c
> [0]PETSC ERROR: #7 main() line 161 in
> /home/yjwu/petsc-3.10.1/src/snes/examples/tutorials/ex19.c
> [0]PETSC ERROR: PETSc Option Table entries:
> [1]PETSC ERROR: PETSc Option Table entries:
> [1]PETSC ERROR: -snes_qn_restart_type periodic
> [0]PETSC ERROR: -snes_qn_restart_type periodic
> [0]PETSC ERROR: -snes_qn_scale_type jacobian
> [0]PETSC ERROR: -snes_type qn
> [1]PETSC ERROR: -snes_qn_scale_type jacobian
> [1]PETSC ERROR: -snes_type qn
> [0]PETSC ERROR: -snes_view
> [0]PETSC ERROR: ----------------End of Error Message -------send entire
> error message to petsc-ma...@mcs.anl.gov----------
> [1]PETSC ERROR: -snes_view
> [1]PETSC ERROR: ----------------End of Error Message -------send entire
> error message to petsc-ma...@mcs.anl.gov----------
> application called MPI_Abort(MPI_COMM_WORLD, 72) - process 0
> application called MPI_Abort(MPI_COMM_WORLD, 72) - process 1
>
> I am very interested in quasi-Newton method, which may not be well
> understood at the moment.
> I look forward to your reply.
>
> Thanks,
> Yingjie
>
>
> Matthew Knepley <knep...@gmail.com> 于2019年1月3日周四 上午8:36写道:
>
>> On Thu, Jan 3, 2019 at 7:36 AM Yingjie Wu via petsc-users <
>> petsc-users@mcs.anl.gov> wrote:
>>
>>> Thanks for your reply.
>>> I read the article you provided. This is my first contact with the
>>> quasi-Newton method.
>>> I have some problem:
>>> 1. From the point of view of algorithm, the quasi-Newton method does not
>>> need to be solved by linear equations, so why would KSP be used?
>>>
>>
>> It is solving the equations, but we know the analytical answer. KSP is our
>> abstraction for linear equation solver,
>> so we also use it in this case.
>>
>>
>>> 2. Where and how to  use preconditioner in quasi-Newton method?
>>>
>>
>> You do not need a PC here. Note that this is only going to work well if
>> you have a good initial
>> guess for the inverse of your Jacobian. The optimization people who
>> invented have that (it is
>> the identity). In Jed's paper, they use a V-cycle as the good initial
>> guess.
>>
>>   Thanks,
>>
>>     Matt
>>
>>
>>> Thanks,
>>> Yingjie
>>>
>>> Jed Brown <j...@jedbrown.org> 于2018年12月27日周四 上午10:11写道:
>>>
>>>> Yingjie Wu via petsc-users <petsc-users@mcs.anl.gov> writes:
>>>>
>>>> > I my opinion, the difficulty in constructing my Jacobian matrix is
>>>> complex
>>>> > coefficient.(eg, thermal conductivity* λ* , density )
>>>> > For example, in temperature equation(T):
>>>> >                 ∇(*λ*∇T) - ∇(ρ* Cp* u ) + Q =  0
>>>> > *λ* is thermal conductivity , ρ* is density  Cp* is specific heat , u
>>>> is
>>>> > velocity, Q is source.
>>>> > *λ = *1.9*(1.0e-3)*pow(T+273.0-150.0,1.29)            function of T
>>>> > ρ=
>>>> >
>>>> (0.4814*P/1.0e3/(T+273.15))/(1.0+0.446*(1.0e-2)*P/1.0e3/(pow(T+273.15,1.2)))
>>>> > function of T and P
>>>> >
>>>> > In theory, the coefficient contain variable. So it is complicated to
>>>> > calculate the element of Jacobian.
>>>> > In my snes_mf_operator method, I treat λ,ρ as constant. In every
>>>> nonlinear
>>>> > step, I use the solution update the λ,ρ  and thus update the
>>>> > preconditioning matrix. At each residual function call(in
>>>> > SNESFormFunction), I also update the coefficient to ensure the
>>>> correction
>>>> > of the residual function.
>>>>
>>>> If those Jacobian entries are really that hard to get right, you can try
>>>> using quasi-Newton as an alternative to -snes_mf_operator; similar to
>>>>
>>>>
>>>> https://jedbrown.org/files/BrownBrune-LowRankQuasiNewtonRobustJacobianLagging-2013.pdf
>>>>
>>>>
>>>> In general, I would start with an exact Jacobian (computed by coloring,
>>>> AD, or just in one specific material/configuration).  Test Newton using
>>>> direct solvers to see your "best case" convergence (globalization may be
>>>> needed).  Test fieldsplit using direct solvers on the blocks so you know
>>>> how much error is attributable to that approximation.  Only then look at
>>>> backing off on the approximation of the Jacobian and the preconditioner.
>>>>
>>>
>>
>> --
>> 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
>>
>> https://www.cse.buffalo.edu/~knepley/
>> <http://www.cse.buffalo.edu/~knepley/>
>>

Reply via email to