Franck, if you get the local mat, you are free to do whatever you want with it. One possible case is that you create the MATIS object (i.e., basically a l2g map of dofs + local mat creation) and then do
MatISGetLocalMat(matis,&A); MatXAIJSetPreallocation(A,…..) MatSetValues(A,…) What do you need it for? Stefano > On May 19, 2017, at 4:57 PM, Franck Houssen <[email protected]> wrote: > > Thanks. > > My understanding (?) is that modifying the local mat (with MatMult for > instance) changes also the global mat (as the local mat is a part of the > global one). Jed, I let you decide if this behavior (which is logical but not > always the desired one) is worth to be emphasized in the doc... > > Franck > > ----- Mail original ----- >> De: "Jed Brown" <[email protected]> >> À: "Franck Houssen" <[email protected]>, [email protected] >> Envoyé: Vendredi 19 Mai 2017 16:20:14 >> Objet: Re: [petsc-dev] MatISGetLocalMat: need to MatDestroy the returned >> local matrice ? >> >> Thanks. I just pushed this. >> >> commit 96a6f12955a790d77f6eb7eb6b1dcf9dd5e1cf30 >> Author: Jed Brown <[email protected]> >> Date: Fri May 19 08:17:45 2017 -0600 >> >> MatISGetLocalMat: add note on reference counting >> >> Reported-by: Franck Houssen <[email protected]> >> >> diff --git a/src/mat/impls/is/matis.c b/src/mat/impls/is/matis.c >> index dc4a894aae..287c0aa554 100644 >> --- a/src/mat/impls/is/matis.c >> +++ b/src/mat/impls/is/matis.c >> @@ -837,6 +837,9 @@ PetscErrorCode MatISGetLocalMat_IS(Mat mat,Mat *local) >> matrix and want to provide it to the inner matrix object to improve the >> performance >> of the MatSetValues() operation. >> >> + This function does not increase the reference count for the local Mat. Do >> not destroy it and do not attempt to use >> + your reference after destroying the parent mat. >> + >> .seealso: MATIS >> @*/ >> PetscErrorCode MatISGetLocalMat(Mat mat,Mat *local) >> >> Franck Houssen <[email protected]> writes: >> >>> Hello, >>> >>> Do I need to MatDestroy the local matrix returned by MatISGetLocalMat ? >>> (the global matrix has been created with MatCreateIS) >>> >>> Tried to look in the source tree... But I'am not sure to get the answer: in >>> petsc-3.7.6/src/mat/impls/is/matis.c, MatISGetLocalMat seems to call >>> MatISGetLocalMat_C, but, I can't find MatISGetLocalMat_C in the source >>> tree !?... >>> >>> Franck >>
