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 location s in the c-array 
are updated, right? 
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 
----------------------------------------------- 

----- Messaggio originale -----

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 

<blockquote>


Thanks for you advices in advance. 

Bests, 

Marco 

</blockquote>




-- 

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