I cannot answer the question about the context, don't understand how pointers 
work in Fortran. Maybe someone from PETSc can give you advice.

Have you seen SLEPc's ex20f90? It solves a NEP without needing shell matrices.
http://slepc.upv.es/documentation/current/src/nep/examples/tutorials/ex20f90.F90.html
Isn't it enough for your needs?

I am interested in knowing more details about your nonlinear eigenproblem. If 
you want, send a description to my personal email or to slepc-maint.

Thanks.
Jose


> El 12 dic 2017, a las 10:52, Samuel Lanthaler <[email protected]> 
> escribió:
> 
> 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>

Reply via email to