[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