On Wed, Mar 20, 2019 at 1:18 PM Smith, Barry F. via petsc-users < [email protected]> wrote:
> > > > On Mar 20, 2019, at 5:52 AM, Yingjie Wu via petsc-users < > [email protected]> wrote: > > > > Dear PETSc developers: > > Hi, > > Recently, I used PETSc to solve a non-linear PDEs for thermodynamic > problems. In the process of solving, I found the following two phenomena, > hoping to get some help and suggestions. > > > > 1. Because my problem involves a lot of physical parameters, it needs to > call a series of functions, and can not analytically construct Jacobian > matrix, so I use - snes_mf_operator to solve it, and give an approximate > Jacobian matrix as a preconditioner. Because of the large dimension of the > problem and the magnitude difference of the physical variables involved, it > is found that the linear step residuals will increase at each restart > (default 30th linear step) . This problem can be solved by setting a large > number of restart steps. I would like to ask the reasons for this > phenomenon? What knowledge or articles should I learn if I want to find out > this problem? > > I've seen this behavior. I think in your case it is likely the > -snes_mf_operator is not really producing an "accurate enough" > Jacobian-Vector product (and the "solution" being generated by GMRES may be > garbage). Run with -ksp_monitor_true_residual > I have found that GMRES is very sensitive. I tried optimizing a smoother by sending single precision data in MPI and this tanked GMRES. CG was fine with this. > > If your residual function has if () statements in it or other very > sharp changes (discontinuities) then it may not even have a true Jacobian > at the locations it is being evaluated at. In the sense that the > "Jacobian" you are applying via finite differences is not a linear operator > and hence GMRES will fail on it. > > What are you using for a preconditioner? And roughly how many KSP > iterations are being used. > > Barry > > > > > > > 2. In my problem model, there are many physical fields (variables are > realized by finite difference method), and the magnitude of variables > varies greatly. Is there any Scaling interface or function in Petsc? > > > > Thanks, > > Yingjie > >
