[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