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

Jose E. Roman jroman at dsic.upv.es
Tue Dec 12 04:47:06 CST 2017


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 <s.lanthaler at gmail.com> 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>



More information about the petsc-users mailing list