[petsc-users] Is there some function to do this vec operator

Jed Brown jed at 59A2.org
Tue Jun 8 03:44:51 CDT 2010


On Tue, 8 Jun 2010 16:04:00 +0800, "Gong Ding" <gdiso at ustc.edu> wrote:
> Dear all,
> I have a flux vector f and a vector t for local time step.
> Both of them are global vectors.
> 
> And I want to update the flow variable vector x in explicit way
> x^(n+1) = x^(n) - t*f
> 
> here t*f is each t's component multiply f's component.
> 
> I searched the manual of petsc and find no useful information.
> Can anyone tell me how should I do t*f efficiently?

The abstract way is to use VecPointwiseMult followed by VecAXPY, but
this makes two passes and needs a temporary.  The alternative is
VecGetLocalSize, VecGetArray, and then roll the for loop x[i] -=
t[i]*f[i].  If you do implicit solves, you will almost certainly find
that these updates take a trivial amount of the total time and memory,
so you may as well use whichever you find easier to read.

Jed


More information about the petsc-users mailing list