Ah, silly me... Of course, if the program can't actually see the
interface then it makes sense that it won't work.
As always, thanks a lot for your help, Barry!
Samuel
On 12/13/2017 04:01 AM, Smith, Barry F. wrote:
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
<[email protected]> 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>