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

Smith, Barry F. bsmith at mcs.anl.gov
Tue Dec 12 21:01:49 CST 2017


  Samuel,

    I have attached a fixed up version of your example that works correctly. Your basic problem was that you did not "use" the final module in the main program so it did know the interfaces for the routines.   I have included this example in PETSc for others to benefit from in the branch barry/add-f90-matshellgetcontext-example

   Thanks for the question,

   Barry




> On Dec 12, 2017, at 3:52 AM, Samuel Lanthaler <s.lanthaler at gmail.com> wrote:
>
> 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:
>        • MatCreateShell => Initialize Mat :: F
>        • MatShellSetContext => set the context of F to ctxF (looking at the petsc source code, this call actually seems to be superfluous, but nevermind)
>        • 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
>>
>
> <matshell.f90>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20171213/a1635c1a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ex6f.F90
Type: application/octet-stream
Size: 2805 bytes
Desc: ex6f.F90
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20171213/a1635c1a/attachment.obj>


More information about the petsc-users mailing list