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>
