Your formula (R(q+epsilon*v) - R(q-epsilon*v))/(2*epsilon). is not linear, it cannot be expressed as a constant matrix times a vector, A*v.
If you want to solve a nonlinear eigenvector problem A(x)*x=lambda*x then have a look at ex34.c https://slepc.upv.es/documentation/current/src/eps/tutorials/ex34.c.html Jose > El 25 ago 2022, a las 18:07, feng wang <snails...@hotmail.com> escribió: > > Hi Jose, > > Following my previous email, just some update, the epsilon actually does not > change in my shell matrix to compute the finite difference Jacobian. I don't > have an iterative procedure in the shell matrix. It simply computes the > non-linear residuals twice with perturbed flow variables. I have attached my > code. Any suggestions are welcome. > > Thanks, > Feng > From: Jose E. Roman <jro...@dsic.upv.es> > Sent: 25 August 2022 9:45 > To: feng wang <snails...@hotmail.com> > Cc: petsc-users <petsc-users@mcs.anl.gov> > Subject: Re: [petsc-users] Slepc Question, shell-matrix > > Probably the explanation is the following. Your shell matrix runs an > iterative procedure that computes the action of the matrix to a certain > accuracy. This is equivalent to multiplying by the exact matrix plus a > perturbation, A+E. But every time you apply the shell matrix, the > perturbation E is slightly different, so the eigensolver does not really see > a constant matrix, it changes at every iteration. > > This also happens in nested iterations, such as inexact shift-and-invert, > where e.g. GMRES is run within each iteration of the eigensolver. For this to > work, the GMRES tolerance should be smaller than the tolerance of the > eigensolver. Similarly, if your shell matrix runs an iterative procedure, you > have to use a tolerance that is more stringent than the one used in the > eigensolver. > > Hope this helps. > Jose > > > > El 25 ago 2022, a las 11:34, feng wang <snails...@hotmail.com> escribió: > > > > Hi Jose, > > > > Thanks for your reply. I have fixed one thing in my shell matrix. Now the > > conversion seems working. > > > > If I use the converted dense matrix and give it to EPSSetOperators, it > > actually converges! > > > > 50 EPS nconv=0 first unconverged value (error) 2.89521e-06+2.13473e-06i > > (7.73051721e-08) > > 51 EPS nconv=0 first unconverged value (error) 2.89521e-06+2.13473e-06i > > (5.42681175e-08) > > 52 EPS nconv=0 first unconverged value (error) 2.89521e-06+2.13473e-06i > > (2.48352708e-08) > > 53 EPS nconv=0 first unconverged value (error) 2.89521e-06+2.13473e-06i > > (1.76912430e-08) > > 54 EPS nconv=0 first unconverged value (error) 2.89521e-06+2.13473e-06i > > (2.07480734e-08) > > 55 EPS nconv=0 first unconverged value (error) 2.89521e-06+2.13473e-06i > > (1.13588981e-08) > > 56 EPS nconv=2 first unconverged value (error) 1.10143e-06+9.80005e-06i > > (8.32889697e-06) > > Solution method: krylovschur > > > > Number of requested eigenvalues: 1 > > Linear eigensolve converged (2 eigenpairs) due to CONVERGED_TOL; > > iterations 56 > > ---------------------- -------------------- > > k ||Ax-kx||/||kx|| > > ---------------------- -------------------- > > 0.000003+0.000002i 7.90447e-09 > > 0.000003-0.000002i 7.90447e-09 > > ---------------------- -------------------- > > > > If I use the shell matrix directly, the relative norm is still large. This > > really puzzles me...... > > > > Thanks, > > Feng > > > > From: Jose E. Roman <jro...@dsic.upv.es> > > Sent: 25 August 2022 7:21 > > To: feng wang <snails...@hotmail.com> > > Cc: petsc-users <petsc-users@mcs.anl.gov> > > Subject: Re: [petsc-users] Slepc Question, shell-matrix > > > > This works for simple examples such as ex9.c > > It may be an indication that there is a problem with your shell matrix. > > > > Jose > > > > > > > El 24 ago 2022, a las 19:35, feng wang <snails...@hotmail.com> escribió: > > > > > > Hi Jose, > > > > > > Thanks for your reply. > > > > > > I have tried > > > PetscCall(MatConvert(slepc_A_mf,MATDENSE,MAT_INITIAL_MATRIX,&Adense)); > > > and If I do MatView(Adense,viewer), All I see was NAN. Have I missed > > > anything here? > > > > > > Thanks, > > > Feng > > > > > > From: Jose E. Roman <jro...@dsic.upv.es> > > > Sent: 24 August 2022 16:23 > > > To: feng wang <snails...@hotmail.com> > > > Cc: petsc-users <petsc-users@mcs.anl.gov> > > > Subject: Re: [petsc-users] Slepc Question, shell-matrix > > > > > > > > > > > > > El 24 ago 2022, a las 17:03, feng wang <snails...@hotmail.com> escribió: > > > > > > > > Hi Jose, > > > > > > > > Thanks for your reply. > > > > > > > > I have tried -eps_view_mat0 binary:amatrix.bin to save my shell matrix. > > > > It seems not saving the shell matrix and just created an empty file. > > > > > > Oops, I thought the shell matrix would be converted automatically. Try > > > converting it yourself: > > > > > > PetscCall(MatConvert(slepc_A_mf,MATDENSE,MAT_INITIAL_MATRIX,&Adense)); > > > > > > Then use Adense in EPSSetOperators(). Or save it to disk and send it to > > > me so that I can give it a try. > > > > > > > > > > > Besides, I am trying to understand the output of slepc. I can set > > > > -eps_tol to a low value, but the final relative residual norm is still > > > > high , what does this tell me? > > > > > > I don't know. It should not happen. > > > Jose > > > > > > > > > > > Best regards, > > > > Feng > > > > > > > > From: Jose E. Roman <jro...@dsic.upv.es> > > > > Sent: 23 August 2022 11:06 > > > > To: feng wang <snails...@hotmail.com> > > > > Cc: petsc-users <petsc-users@mcs.anl.gov> > > > > Subject: Re: [petsc-users] Slepc Question, shell-matrix > > > > > > > > You can try the following. Save your shell matrix to disk with the > > > > option > > > > -eps_view_mat0 binary:amatrix.bin > > > > then repeat the computation with ex4.c loading this file. > > > > > > > > Note that this should be done for a small problem size, because the > > > > conversion from a shell matrix implies a matrix-vector product per each > > > > column. > > > > > > > > Jose > > > > > > > > > El 23 ago 2022, a las 12:57, feng wang <snails...@hotmail.com> > > > > > escribió: > > > > > > > > > > Hi Jose, > > > > > > > > > > Thanks for your reply. > > > > > > > > > > It represents a linear operator. In my shell matrix, I am computing > > > > > the non-linear residuals twice with perturbed flow variables. The > > > > > matrix-vector product is computed as: > > > > > > > > > > A*v = (R(q+eps*v) - R(q-eps*v))/(2*eps) > > > > > > > > > > R is the non-linear residual. q is my flow variable and it does not > > > > > change. eps is the perturbation. A is my Jacobian matrix. Besides, > > > > > for some background, I am computing a steady RANS flow with finite > > > > > volume method and trying to do a global stability analysis by looking > > > > > at the Jacobian matrix. > > > > > > > > > > Thanks, > > > > > Feng > > > > > > > > > > From: Jose E. Roman <jro...@dsic.upv.es> > > > > > Sent: 23 August 2022 10:32 > > > > > To: feng wang <snails...@hotmail.com> > > > > > Cc: petsc-users <petsc-users@mcs.anl.gov> > > > > > Subject: Re: [petsc-users] Slepc Question, shell-matrix > > > > > > > > > > The relative residual norms that are printed at the end are too > > > > > large. For NHEP problems, they should be below the tolerance. Don't > > > > > know what is happening. Does your shell matrix represent a linear > > > > > (constant) operator? Or does it change slightly depending on the > > > > > input vector? > > > > > > > > > > > El 23 ago 2022, a las 12:14, feng wang <snails...@hotmail.com> > > > > > > escribió: > > > > > > > > > > > > Hi Jose, > > > > > > > > > > > > I think the previous problem comes from my side. I have some > > > > > > uninitialized values in my part of code to compute the non-linear > > > > > > residuals. so, it produces a NAN when it tries to compute the > > > > > > matrix-vector product using finite difference. This might make the > > > > > > slepc/pestc do unexpected things. > > > > > > > > > > > > Now It seems I've got slepc running. eps_nev is set to 3 and I am > > > > > > trying to compute the ones with the largest amplitudes. Below is > > > > > > the slepc output. > > > > > > > > > > > > 14 EPS converged value (error) #0 -0.000164282 (5.36813206e-09) > > > > > > 16 EPS converged value (error) #1 -0.000160691+2.17113e-05i > > > > > > (3.37429620e-09) > > > > > > 16 EPS converged value (error) #2 -0.000160691-2.17113e-05i > > > > > > (3.37429620e-09) > > > > > > Solution method: krylovschur > > > > > > > > > > > > Number of requested eigenvalues: 2 > > > > > > Linear eigensolve converged (3 eigenpairs) due to CONVERGED_TOL; > > > > > > iterations 16 > > > > > > ---------------------- -------------------- > > > > > > k ||Ax-kx||/||kx|| > > > > > > ---------------------- -------------------- > > > > > > -0.000164 0.0613788 > > > > > > -0.000161+0.000022i 0.0773339 > > > > > > -0.000161-0.000022i 0.0774536 > > > > > > ---------------------- -------------------- > > > > > > > > > > > > The values in the brackets are the absolute error (I believe) and > > > > > > they seem very low. The relative error seems quite large. Could > > > > > > you please comment on this? > > > > > > > > > > > > > > > > > > Best regards, > > > > > > Feng > > > > > > > > > > > > From: Jose E. Roman <jro...@dsic.upv.es> > > > > > > Sent: 23 August 2022 5:24 > > > > > > To: feng wang <snails...@hotmail.com> > > > > > > Cc: petsc-users <petsc-users@mcs.anl.gov> > > > > > > Subject: Re: [petsc-users] Slepc Question, shell-matrix > > > > > > > > > > > > Please always respond to the list, otherwise the thread appears as > > > > > > unresolved in the archives of the mailing list. > > > > > > > > > > > > > > > > > > > El 22 ago 2022, a las 22:45, feng wang <snails...@hotmail.com> > > > > > > > escribió: > > > > > > > > > > > > > > Hi Jose, > > > > > > > > > > > > > > I think I might have solved my problem. I have some uninitialized > > > > > > > values in my part of code to compute the right hand side. so it > > > > > > > produces a NAN when it tries to compute the matrix-vector > > > > > > > product. > > > > > > > > > > > > > > Many thanks for your help! > > > > > > > > > > > > > > Best regards, > > > > > > > Feng > > > > > > > From: Jose E. Roman <jro...@dsic.upv.es> > > > > > > > Sent: 22 August 2022 19:32 > > > > > > > To: feng wang <snails...@hotmail.com> > > > > > > > Cc: petsc-users@mcs.anl.gov <petsc-users@mcs.anl.gov> > > > > > > > Subject: Re: [petsc-users] Slepc Question, shell-matrix > > > > > > > > > > > > > > This is very strange. This error appears when the solver employs > > > > > > > the B-inner product, but in your case you don't have a B matrix, > > > > > > > so you should never see that error. Try running under valgrind to > > > > > > > see if it gives more hints. > > > > > > > > > > > > > > Jose > > > > > > > > > > > > > > > > > > > > > > El 22 ago 2022, a las 20:45, feng wang <snails...@hotmail.com> > > > > > > > > escribió: > > > > > > > > > > > > > > > > Hello, > > > > > > > > > > > > > > > > I am new to Slepc and trying to work out the eigenvalues and > > > > > > > > eigenvectors of my Jacobian matrix. I am using a shell matrix > > > > > > > > to work out the matrix-vector product and I am using the > > > > > > > > default Krylov-schur method. > > > > > > > > > > > > > > > > My first attempt was not successful and I got the following > > > > > > > > errors: > > > > > > > > > > > > > > > > [0]PETSC ERROR: --------------------- Error Message > > > > > > > > -------------------------------------------------------------- > > > > > > > > [0]PETSC ERROR: Missing or incorrect user input > > > > > > > > [0]PETSC ERROR: The inner product is not well defined: > > > > > > > > indefinite matrix > > > > > > > > [0]PETSC ERROR: See https://petsc.org/release/faq/ for trouble > > > > > > > > shooting. > > > > > > > > [0]PETSC ERROR: Petsc Release Version 3.17.4, unknown > > > > > > > > [0]PETSC ERROR: cfdtest on a arch-debug named ming by feng Mon > > > > > > > > Aug 22 19:21:41 2022 > > > > > > > > [0]PETSC ERROR: Configure options --with-cc=mpicc > > > > > > > > --with-cxx=mpicxx --with-fc=0 PETSC_ARCH=arch-debug > > > > > > > > [0]PETSC ERROR: #1 BV_SafeSqrt() at > > > > > > > > /home/feng/cfd/slepc-3.17.1/include/slepc/private/bvimpl.h:130 > > > > > > > > [0]PETSC ERROR: #2 BV_SquareRoot_Default() at > > > > > > > > /home/feng/cfd/slepc-3.17.1/include/slepc/private/bvimpl.h:365 > > > > > > > > [0]PETSC ERROR: #3 BVOrthogonalizeCGS1() at > > > > > > > > /home/feng/cfd/slepc-3.17.1/src/sys/classes/bv/interface/bvorthog.c:101 > > > > > > > > [0]PETSC ERROR: #4 BVOrthogonalizeGS() at > > > > > > > > /home/feng/cfd/slepc-3.17.1/src/sys/classes/bv/interface/bvorthog.c:177 > > > > > > > > [0]PETSC ERROR: #5 BVOrthonormalizeColumn() at > > > > > > > > /home/feng/cfd/slepc-3.17.1/src/sys/classes/bv/interface/bvorthog.c:402 > > > > > > > > [0]PETSC ERROR: #6 BVMatArnoldi() at > > > > > > > > /home/feng/cfd/slepc-3.17.1/src/sys/classes/bv/interface/bvkrylov.c:91 > > > > > > > > [0]PETSC ERROR: #7 EPSSolve_KrylovSchur_Default() at > > > > > > > > /home/feng/cfd/slepc-3.17.1/src/eps/impls/krylov/krylovschur/krylovschur.c:261 > > > > > > > > [0]PETSC ERROR: #8 EPSSolve() at > > > > > > > > /home/feng/cfd/slepc-3.17.1/src/eps/interface/epssolve.c:147 > > > > > > > > [0]PETSC ERROR: #9 slepc_eigen_comp() at > > > > > > > > domain/cfd/slepc_eigen_solve.cpp:77 > > > > > > > > > > > > > > > > Could someone please shine some light on this? I have also > > > > > > > > attached my code. The code is part of my big library and I > > > > > > > > cannot attach the whole code, sorry about this. but I am happy > > > > > > > > to provide more information. The attached code has some > > > > > > > > arrangements for halo exchange, but for the moment, it assumes > > > > > > > > it is a serial run. > > > > > > > > > > > > > > > > Many thanks, > > > > > > > > Feng > > > > > > > > <slepc_eigen_solve.cpp> > > <slepc_eigen_solve.cpp>