[petsc-dev] Vec set a block of values

Junchao Zhang jczhang at mcs.anl.gov
Fri Apr 20 15:33:41 CDT 2018


On Fri, Apr 20, 2018 at 3:18 PM, Matthew Knepley <knepley at gmail.com> wrote:

> On Fri, Apr 20, 2018 at 4:10 PM, Junchao Zhang <jczhang at mcs.anl.gov>
> wrote:
>
>> To pad a vector, i.e., copy a vector to a new one, I have to call
>> VecSetValue(newb,1,&idx,...) for each element. But to be efficient, what I
>> really needs is to set a block of values in one call. It looks PETSc does
>> not have a routine for that(?). I looked at VecSetValuesBlocked, but it
>> looks it is not for that purpose.
>> Should we have something like VecSetValuesBlock(Vec
>> <http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/Vec.html#Vec>
>> v,PetscInt
>> <http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt>
>> i,PetscInt cnt,PetscScalar
>> <http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscScalar.html#PetscScalar> *value,
>> InsertMode
>> <http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/InsertMode.html#InsertMode>
>> mode) to set cnt values starting at index i?
>>
>
> Use VecGetArray().
>
Did you mean VecGetArray b and newb, do a memcpy from b to new and then
restore them? If yes, it does not work since some of the values I want to
set might be remote.
E.g, I have 4 processors. b's size is 181 and is distributed as 46,
45,45,45, newb is distributed as 48,45,45,45 to match a matrix of block
size 3.


>
>   Matt
>
>
>> --Junchao Zhang
>>
>
>
>
> --
> 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
>
> https://www.cse.buffalo.edu/~knepley/ <http://www.caam.rice.edu/~mk51/>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20180420/72b593ce/attachment.html>


More information about the petsc-dev mailing list