Thank you very much Barry for the solution. I will give it a try. Pallab
-----Original Message----- From: [email protected] on behalf of Barry Smith Sent: Thu 5/14/2009 5:29 PM To: PETSc users list Subject: Re: Conjugate Gradient technique You just pass the shell matrix into KSPSetOperators() and KSPSolve() will do the rest. Note: you will need to use -pc_type none as the preconditioner since you are not providing a matrix from which to build the preconditioner. Barry On May 14, 2009, at 4:26 PM, Barai, Pallab wrote: > Hello Matt, > > Thank you very much for your reply. > > Here "S" is a symmetric matrix, so I have to use the CG. > > But I can not figure out how to use the Conjugate Gradient technique > to find the solution. In the "MatShell" I can wrap my "MatVec" > routine which calculates the "S*x" vector. > > But how will I be able to do the comparison between the known "b" > vector and the calculated "S*x" using a CG (and come up with a new > trial solution "x" for the next iteration). What is the function > that I should call for this purpose? > > Thanking you. > > Pallab > > > -----Original Message----- > From: petsc-users-bounces at mcs.anl.gov on behalf of Matthew Knepley > Sent: Thu 5/14/2009 5:03 PM > To: PETSc users list > Subject: Re: Conjugate Gradient technique > > On Thu, May 14, 2009 at 3:58 PM, Barai, Pallab <baraip at ornl.gov> > wrote: > >> Hello, >> >> I am using PETSc to solve a set of linear equations "Sx=b". >> >> Here "b" is known and "x" is the trial solution. >> >> The complete (assembled) form of S is not known. That is why I am >> not able >> to use something like "KSPSolve". >> >> But given a trial solution "x", I can calculate "S*x" using a >> "MatVec" >> routine. >> >> Is it possible to use the Conjugate Gradient (CG) technique to find a >> solution in this case? In place of "S", I can give "S*x" as the >> input. > > > You can use CG if S is symmetric. If not, try GMRES. > > >> >> It will be great if someone can show me some direction. If this >> thing has >> already been discussed before, the link to that thread will be >> sufficient. > > > You can wrap your function in a MatShell: > > http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatCreateShell.html > > Matt > > >> >> Thanking you. >> >> Pallab Barai >> > -- > 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 >
