[petsc-users] customized MatMult

Marco Cisternino marco.cisternino at optimad.it
Mon Jan 19 10:09:20 CST 2015

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 Cisternino, PhD 
Software Developer 
OPTIMAD Engineering s.r.l. 
Via Giacinto Collegno 18 
10143 Torino - Italy 
marco.cisternino at optimad.it 
+39 011 19719782 

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

Da: "Matthew Knepley" <knepley at gmail.com> 
A: "Marco Cisternino" <marco.cisternino at optimad.it> 
Cc: petsc-users at mcs.anl.gov 
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 < marco.cisternino at optimad.it > 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, 



Thanks for you advices in advance. 





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 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150119/78f41723/attachment.html>

More information about the petsc-users mailing list