[petsc-users] setting a vector with VecSetValue versus VecSetValues

Alfredo Jaramillo ajaramillopalma at gmail.com
Thu Jan 5 11:41:26 CST 2023


omg... for some reason I was thinking it takes local indices. Yes..
modifying that line the code works well.

thank you!
Alfredo

On Thu, Jan 5, 2023 at 10:38 AM Junchao Zhang <junchao.zhang at gmail.com>
wrote:

> VecSetValue() also needs global indices, so you need PetscInt gl_row = (
> PetscInt)(i)+rstart;
>
> --Junchao Zhang
>
>
> On Thu, Jan 5, 2023 at 11:25 AM Alfredo Jaramillo <
> ajaramillopalma at gmail.com> wrote:
>
>> dear PETSc developers,
>>
>> I have a code where I copy an array to a distributed petsc vector with
>> the next lines:
>>
>> 1 for (int i = 0; i < ndof_local; i++) {
>> 2 PetscInt gl_row = (PetscInt)(i)+rstart;
>> 3 PetscScalar val = (PetscScalar)u[i];
>> 4 VecSetValues(x,1,&gl_row,&val,INSERT_VALUES);
>> 5 }
>>
>> // for (int i = 0; i < ndof_local; i++) {
>> // PetscInt gl_row = (PetscInt)(i);
>> // PetscScalar val = (PetscScalar)u[i];
>> // VecSetValue(x,gl_row,val,INSERT_VALUES);
>> // }
>>
>> VecAssemblyBegin(x);
>> VecAssemblyEnd(x);
>>
>> This works as expected. If, instead of using lines 1-5, I use the lines
>> where VecSetValue is used with local indices, then the vector is null on
>> all the processes but rank 0, and the piece of information at rank zero is
>> incorrect.
>>
>> What could I be doing wrong?
>>
>> bests regards
>> Alfredo
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20230105/c7472f62/attachment-0001.html>


More information about the petsc-users mailing list