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