[petsc-users] prefix (i.e. cumulative) sum

Barry Smith bsmith at mcs.anl.gov
Tue Feb 14 16:28:59 CST 2017


> On Feb 14, 2017, at 3:01 PM, Gideon Simpson <gideon.simpson at gmail.com> wrote:
> 
> I gather I’d use something like this?
> 
> VecGetArray(x, &xarray);
> VecGetArray(y, &yarray);
> 
> MPI_Scan(array, array, nglobal, MPIU_SCALAR, MPI_SUM, PETSC_COMM_WORLD);
> 
> VecRestoreArray(x, &xarray);
> VecRestoreArray(y, &yarray);

  This definitely won't work!  What do you want to do take a PETSc vector that lies across process and produce a new PETSc vector that lies across processes in the same way but each entry in the new vector contains the sum of the entries "to the left of that entry, plus the current entry" For example

[1 3 ]   [8 1]

becomes

[1 4] [12 13]?

Where [] represents the values on each process? and you have two processes in this example.

Barry



> 
> 
> -gideon
> 
>> On Feb 14, 2017, at 3:48 PM, Matthew Knepley <knepley at gmail.com> wrote:
>> 
>> On Tue, Feb 14, 2017 at 2:46 PM, Gideon Simpson <gideon.simpson at gmail.com> wrote:
>> Is there a clever way to handle a prefix (cumulative) sum in petsc?  I think I can see how to do with using some underlying MPI, but I was wondering if there were some built in routines that could be useful.
>> 
>> It is one MPI call (MPI_Scan), but you could do it by assigning sizes to a PetscLayout (which is how I have done it several places).
>> 
>>   Thanks,
>> 
>>     Matt
>>  
>> -gideon
>> 
>> 
>> 
>> 
>> -- 
>> 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
> 



More information about the petsc-users mailing list