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

Samuel Lanthaler s.lanthaler at gmail.com
Wed Dec 13 03:52:04 CST 2017


Ah, silly me... Of course, if the program can't actually see the 
interface then it makes sense that it won't work.
As always, thanks a lot for your help, Barry!

Samuel


On 12/13/2017 04:01 AM, Smith, Barry F. wrote:
>
>   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-example
>
>    Thanks for the question,
>
>    Barry
>
>
>
>
> > On Dec 12, 2017, at 3:52 AM, Samuel Lanthaler 
> <s.lanthaler at gmail.com> 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>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20171213/6b9ee9e7/attachment.html>


More information about the petsc-users mailing list