Hi, I modify the KSP ex1 to a matrix free version, everything works. Basically, I define a usermult function and pass it to MatShellSetOperation<http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/MatShellSetOperation.html#MatShellSetOperation>, as shown in http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/MatShellSetOperation.html
PetscErrorCode <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode> usermult(Mat <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/Mat.html#Mat>,Vec <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Vec/Vec.html#Vec>,Vec <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Vec/Vec.html#Vec>); ierr = MatCreateShell <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/MatCreateShell.html#MatCreateShell>(comm <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Sys/comm.html#comm>,m,n,M,N,ctx,&A); ierr = MatShellSetOperation <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/MatShellSetOperation.html#MatShellSetOperation>(A,MATOP_MULT,(void(*)(void))usermult); Now, I have a problem when I try to change the above to a c++ version(I want to use a class). Let's see I define the following class and it has a function usermult Class classA{ PetscErrorCode <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode> usermult(Mat <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/Mat.html#Mat>,Vec <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Vec/Vec.html#Vec>,Vec <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Vec/Vec.html#Vec>); .... }; PetscErrorCode <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode> classA::usermult(Mat <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/Mat.html#Mat>,Vec <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Vec/Vec.html#Vec>,Vec <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Vec/Vec.html#Vec>) { .... } If I want to use the matrix free method, in the main function, I tried several different ways to pass the function usermult to MatShellSetOperation, but they all fails. Does anyone know how to do this? int main(int argc, char ** argv) { classA ob; ... ierr = MatCreateShell <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/MatCreateShell.html#MatCreateShell>(comm <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Sys/comm.html#comm>,m,n,M,N,ctx,&A); ierr = MatShellSetOperation <http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-3.0.0/docs/manualpages/Mat/MatShellSetOperation.html#MatShellSetOperation>(A,MATOP_MULT,(void(*)(void))ob.usermult); ? } On Wed, Jun 8, 2011 at 5:38 AM, Matthew Knepley <knepley at gmail.com> wrote: > On Tue, Jun 7, 2011 at 10:20 PM, Xiang Hao <haoxiang at yahoo.cn> wrote: > >> Hi all, >> >> I need to solve a PDE ( basically a Poisson's equation with Neumann >> boundary condition ), and I solved it using a steepest descent method, which >> is very slow. Now I want to solve the PDE using GMRES. In addition, I do >> have the matrix A, but I have a function which computes Ax, so I also need >> to use the matrix free method. >> >> I am very new to PETSc, so I am looking for examples on solving linear >> systems using GMRES and/or matrix-free method. >> > > You can look at SNES ex5 for the Poisson equation (after setting lambda = > 0.0). SNES ex19 also shows how to use geometric Multigrid. > Its not hard to do this for Poisson. > > Thanks, > > Matt > > >> Thanks, >> Xiang >> >> >> > > > -- > 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 > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110615/fd2bfda7/attachment.htm>
