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-exampleThanks 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>
ex6f.F90
Description: ex6f.F90
