I have used something like this in similar situation
auto MatMult = [this](…args…)
{
this->MyMatMult(…args…);
};
Then pass MatMult to petsc.
this refers to the class Global_Assem and we are assuming you are inside this
class when doing the above.
best
praveen
> On 30-Sep-2021, at 3:25 PM, Michael Wick <[email protected]> wrote:
>
> Hi:
>
> I want to have the shell matrix-vector multiplication written as a class
> member function and pass it to the shell matrix via MatShellSetOperation.
>
> MatShellSetOperation(A, MATOP_MULT, (void
> (*)(void))(&Global_Assem::MyMatMult));
>
> Perhaps I have a wrong understanding of function pointers, and I am
> constantly getting warnings that say I cannot convert a member function to a
> void type. The warning indeed makes sense to me, as the function pointer
> passed in the above manner is independent of an instance. Perhaps there are
> other ways of passing a member function that I don't know of. If you know how
> to address this, I would appreciate it a lot!
>
> Thanks,
>
> Mike