Hi Stefano, I'am trying to use MatIS for testing (both results and performance with PETSc to be compared with other implementations) a domain decomposition method.
For now, I do: MatCreateIS(...) MatISSetPreallocation(...) MatSetValues(...) MatAssemblyBegin/End And I tried to get domains back with MatISGetLocalMat. This is not the order you mention !... :D Franck ----- Mail original ----- > De: "Stefano Zampini" <[email protected]> > À: "Franck Houssen" <[email protected]> > Cc: "Jed Brown" <[email protected]>, [email protected] > Envoyé: Vendredi 19 Mai 2017 17:02:12 > Objet: Re: [petsc-dev] MatISGetLocalMat: need to MatDestroy the returned > local matrice ? > > 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 > >> > >
