[petsc-users] Error when Using KSP with Matrix -free

Barry Smith bsmith at mcs.anl.gov
Mon Mar 21 12:58:51 CDT 2016


> On Mar 21, 2016, at 9:51 AM, s1humahd <s1humahd at stmail.uni-bayreuth.de> wrote:
> 
> Hello All,
> 
> I'm trying to run a very simple program to get familiar with solving linear system using matrix free structure before I use it in my implementation.
> 
> I already created a sparse matrix A and a vector b and set values to them.  then I created a free-matrix matrix using MatCreateShell()  and I set the function which provide the operation which currently it is merely multiply matrix A to the vector b, ( it is just an attemp to get familiar,similar to the example ex14f.F in KSP ).
> However I'm getting the flowing error when I call the KSPSolve() routine.  I will be grateful if you could help me to recognize the reason for this error. also the related parts of my code is  here.
> 
> MatCreate(PETSC_COMM_WORLD,&A);
> MatSetSizes(A,nlocal,nlocal,8,8);
> 
>             .
>             .
>             .
> 
> VecCreate(PETSC_COMM_WORLD,&b);
> VecSetSizes(x,PETSC_DECIDE,8);
> 
>             .
>             .
> MatCreateShell(PETSC_COMM_WORLD,nlocal,nlocal,8,8, (void *)&A,&j_free);
> MatShellSetOperation(j_free,MATOP_MULT, (void(*) (void)) (my_mult)(j_free,b,x) );

    (void(*) (void)) (my_mult)(j_free,b,x)  should be just (void(*) (void)) my_mult  as written you are actually calling the function my_mult here which returns a 0 (since it ran correctly) and so it is setting a 0 as the operation for MATOP_MULT


> 
>             .
>             .
>             .
> KSPCreate(PETSC_COMM_WORLD,&ksp);
> KSPSetOperators(ksp,j_free,A);
> KSPSetFromOptions(ksp);
> KSPSolve(ksp,x,sol);
>             .
>             .
>             .
> 
> PetscErrorCode my_mult(Mat j_free, Vec b, Vec x)
> {
>  void *ptr;
>  Mat *ptr2;
> 
>  MatShellGetContext(j_free, &ptr);  // the context is matrix A
>  ptr2 = (Mat*) ptr;
>  MatMult(*ptr2,b,x);
> 
>  return 0;
> 
> }
> 
> 
> 
> The error as follow:
> 
> [0]PETSC ERROR: No support for this operation for this object type
> [0]PETSC ERROR: This matrix type does not have a multiply defined
> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
> [0]PETSC ERROR: Petsc Release Version 3.6.3, unknown
> [0]PETSC ERROR: ./jac_free on a arch-linux2-c-debug named humam-VirtualBox by humam Mon Mar 21 23:37:14 2016
> [0]PETSC ERROR: Configure options --download-hdf5=1 --with-blas-lapack-dir=/usr/lib --with-mpi-dir=/usr
> [0]PETSC ERROR: #1 MatMult() line 2223 in /home/humam/petsc/src/mat/interface/matrix.c
> [0]PETSC ERROR: #2 PCApplyBAorAB() line 727 in /home/humam/petsc/src/ksp/pc/interface/precon.c
> [0]PETSC ERROR: #3 KSP_PCApplyBAorAB() line 272 in /home/humam/petsc/include/petsc/private/kspimpl.h
> [0]PETSC ERROR: #4 KSPGMRESCycle() line 155 in /home/humam/petsc/src/ksp/ksp/impls/gmres/gmres.c
> [0]PETSC ERROR: #5 KSPSolve_GMRES() line 236 in /home/humam/petsc/src/ksp/ksp/impls/gmres/gmres.c
> [0]PETSC ERROR: #6 KSPSolve() line 604 in /home/humam/petsc/src/ksp/ksp/interface/itfunc.c
> [0]PETSC ERROR: #7 main() line 293 in /home/humam/jac_free.c
> [0]PETSC ERROR: No PETSc Option Table entries
> [0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint at mcs.anl.gov----------
> application called MPI_Abort(MPI_COMM_WORLD, 56) - process 0
> 
> 
> Thanks,
> Humam



More information about the petsc-users mailing list