> 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

Reply via email to