[petsc-users] MatCreateShell, MatShellGetContext, MatShellSetContext in fortran

Samuel Lanthaler s.lanthaler at gmail.com
Tue Dec 12 03:52:14 CST 2017


Let me also add a minimal example (relying only on petsc), which leads 
to the same error message on my machine. Again, what I'm trying to do is 
very simple:

 1. MatCreateShell => Initialize Mat :: F
 2. MatShellSetContext => set the context of F to ctxF (looking at the
    petsc source code, this call actually seems to be superfluous, but
    nevermind)
 3. MatShellGetContext => get the pointer ctxF_pt to point to the matrix
    context

I'm getting an error message in the third step.

[0]PETSC ERROR: --------------------- Error Message 
--------------------------------------------------------------
[0]PETSC ERROR: Null argument, when expecting valid pointer
[0]PETSC ERROR: Null Pointer: Parameter # 2

Again, thanks for your help!

Cheers,
Samuel


On 12/11/2017 07:41 PM, Samuel Lanthaler wrote:
> Dear petsc-/slepc-users,
>
> I have been trying to understand matrix-free/shell matrices in PETSc 
> for eventual use in solving a non-linear eigenvalue problem using 
> SLEPC. But I seem to be having trouble with calls to 
> MatShellGetContext. As far as I understand, this function should 
> initialize a pointer (second argument) so that the subroutine output 
> will point to the context associated with my shell-matrix (let's say 
> of TYPE(MatCtx))? When calling that subroutine, I get the following 
> error message:
>
> [0]PETSC ERROR: --------------------- Error Message 
> --------------------------------------------------------------
> [0]PETSC ERROR: Null argument, when expecting valid pointer
> [0]PETSC ERROR: Null Pointer: Parameter # 2
>
> In my code, the second input argument to the routine is a null-pointer 
> of TYPE(MatCtx),POINTER :: arg2. Which the error message appears to be 
> unhappy with. I noticed that there is no error message if I instead 
> pass an object TYPE(MatCtx) :: arg2 to the routine... which doesn't 
> really make sense to me? Could someone maybe explain to me what is 
> going on, here?
>
> Just in case, let me also attach my concrete example code (it is 
> supposed to be a Fortran version of the slepc-example in 
> slepc-3.8.1/src/nep/examples/tutorials/ex21.c). I have added an extra 
> call to MatShellGetContext on line 138, after the function and 
> jacobian should supposedly have been set up.
>
> Thanks a lot for your help!
>
> Cheers,
>
> Samuel
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20171212/c38c3f87/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: matshell.f90
Type: text/x-fortran
Size: 2503 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20171212/c38c3f87/attachment.bin>


More information about the petsc-users mailing list