Understood! Thanks, Marco
----- Messaggio originale ----- Da: "Barry Smith" <[email protected]> A: "Marco Cisternino" <[email protected]> Cc: "Matthew Knepley" <[email protected]>, [email protected] Inviato: Lunedì, 19 gennaio 2015 17:38:34 Oggetto: Re: [petsc-users] customized MatMult > On Jan 19, 2015, at 10:09 AM, Marco Cisternino <[email protected]> > wrote: > > Thank you Matthew, > If I have understood: > - I have to pass to myMatMult global vecs. And Vec created with > VecGhostCreate are global, right? > - In myMatMult I use VecGetArray, I store my result in the associated > c-array, I call VecRestoreArray and the global vec is done! Right? > - If I re-use VecGetArray/VecRestore array, ghosted locations in the c-array > are updated, right? VecGet/RestoreArray() does not trigger updating ghost points. You need to use VecGhostUpdateBegin/End() see the manual page to update the ghost points. barry > I'm sorry about confusion and thanks, again. > > Marco > > > > -- > ----------------------------------------------- > Marco Cisternino, PhD > Software Developer > OPTIMAD Engineering s.r.l. > Via Giacinto Collegno 18 > 10143 Torino - Italy > www.optimad.it > [email protected] > +39 011 19719782 > ----------------------------------------------- > > Da: "Matthew Knepley" <[email protected]> > A: "Marco Cisternino" <[email protected]> > Cc: [email protected] > Inviato: Lunedì, 19 gennaio 2015 16:40:28 > Oggetto: Re: [petsc-users] customized MatMult > > On Mon, Jan 19, 2015 at 9:28 AM, Marco Cisternino > <[email protected]> wrote: > Good morning, > I'm writing my MatMult function, but I don't know how to treat the ghost > elements of the result vec. Let's say myMatMult(A,x,y). > > First question is: if I use my MatMult in a KSP to solve a linear system, do > I have to update ghost elements in the result vec of MatMult?? Consider that > any time the code enters myMatMult the vec x is copied in my container and > the ghost of my container are updated. I made computation for matrix-vector > and I copied the results in vec y, without considering ghost elements of y. > > Second question: if I have to, how? > Let's say I state: > ierr = myMatMult(A,x,y); > and x has been built out of myMatMult with VecGhostCreate. > How do I update ghost elements of y in myMatMult? > VecGhostUpdateBegin/VecGhostUpdateEnd in myMatMult? > > Any hints would be appreciated. > > There is some confusion here about the spaces that Vecs represent. Vecs in > the solver are globally > assembled vectors, which come from the "global" space. Vecs used in > calculated integrals, differences, > etc. for assembly often have ghost entries. We will say that these come from > the "local" space. > > MatMult takes in a global Vec x and returns a global Vec y. > > Hopefully that is clear, > > Matt > > Thanks for you advices in advance. > > Bests, > > Marco > > > > -- > What most experimenters take for granted before they begin their experiments > is infinitely more interesting than any results to which their experiments > lead. > -- Norbert Wiener
