[petsc-users] pass a member function to MatShellSetOperation

Praveen C praveen at gmx.net
Thu Sep 30 05:10:57 CDT 2021


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 <michael.wick.1980 at gmail.com> 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

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


More information about the petsc-users mailing list