Thanks Barry -- this solved the issue.

"probably will be fine" was fine with 3.17 and maybe 3.19,  but definitely
not fine with 3.20.

For others the faulty logic is:

GetArray(dn_local, &dn)   //WRONG
Loop over cases
     VecSet(dn_local, 0.)
      Fill up dn
      LocalToGlobal
RestoreArray

Where as one should do:

Loop over cases
      VecSet(dn_local, 0.)
      GetArray(dn_local, &dn)  // RIGHT
      Fill up dn
      LocalToGlobal
      RestoreArray

So, while nothing is copied, if I think of dn as a copy (and not a view)
the logic will always be correct.

Now I have a related question about  "Technically you should not be calling
VecSet() with any outstanding arrays but it will probably be fine."
What about  GlobalToLocal?  should I always GetArray for the local array
after the GlobalToLocal

So,  is this  also bad logic:

GetArray(n_local, &n)
Loop over cases:
     GlobalToLocal(n_global, &n_local)
     do stuff with n
     LocalToGlobal(n_local, n_global)
 RestoreArray

as opposed to

Loop over cases:
     GlobalToLocal(n_global, &n_local)
     GetArray(n_local, &n)
     do stuff with n
     LocalToGlobal(n_local, n_global)
     RestoreArray

Thanks again for all your help,

Derek



On Fri, Apr 25, 2025 at 5:30 PM Barry Smith <bsm...@petsc.dev> wrote:

>
>    Technically you should not be calling VecSet() with any outstanding
> arrays but it will probably be fine.
>
>     Even though GetArray() does not copy the array values; both
> GetArray/RestoreArray and Set track the current "state" of the vector and
> that count might get confused if they are used improperly.
>
>
>
> On Apr 25, 2025, at 4:42 PM, Derek Teaney <derek.tea...@stonybrook.edu>
> wrote:
>
> Thanks,   I am working on providing a standalone code. A related question
> is -  if I did have a view of a local vector provided by:
>
> data_node ***dn_array;
> DMDAVecGetArray(domain, dn_local, &dn_array);
>
> Can I assume through multiple calls to VecSet that the view  dn_array is
> valid, or should this be restored, between calls.
>
> Thanks,
>
> Derek
>
> On Fri, Apr 25, 2025 at 1:26 PM Barry Smith <bsm...@petsc.dev> wrote:
>
>>
>>    You absolutely should not need to do an assembly after a VecSet.
>> Please post a full reproducer that demonstrates the problem.
>>
>>   Barry
>>
>>
>> On Apr 25, 2025, at 1:23 PM, Derek Teaney via petsc-users <
>> petsc-users@mcs.anl.gov> wrote:
>>
>> Hi,
>>
>> I was under the (mistaken) impression that one does not need to due a
>> VecAssemblyBegin etc following a VecSet, e.g.
>>
>>       VecSet(dn_local, 0.);
>>       VecAssemblyBegin(dn_local) ;
>>       VecAssemblyEnd(dn_local) ;
>>
>> Seems to give different results without the Assembly.
>>
>> Thanks for clarifying,
>>
>> Derek
>>
>> --
>> ------------------------------------------------------------------------
>> Derek Teaney
>> Professor and Graduate Program Director
>> Dept. of Physics & Astronomy
>> Stony Brook University
>> Stony Brook, NY 11794-3800
>> Tel: (631) 632-4489
>> Fax: (631) 632-9718
>> e-mail: derek.tea...@stonybrook.edu
>> ------------------------------------------------------------------------
>>
>>
>>
>
> --
> ------------------------------------------------------------------------
> Derek Teaney
> Professor and Graduate Program Director
> Dept. of Physics & Astronomy
> Stony Brook University
> Stony Brook, NY 11794-3800
> Tel: (631) 632-4489
> Fax: (631) 632-9718
> e-mail: derek.tea...@stonybrook.edu
> ------------------------------------------------------------------------
>
>
>

-- 
------------------------------------------------------------------------
Derek Teaney
Professor and Graduate Program Director
Dept. of Physics & Astronomy
Stony Brook University
Stony Brook, NY 11794-3800
Tel: (631) 632-4489
Fax: (631) 632-9718
e-mail: derek.tea...@stonybrook.edu
------------------------------------------------------------------------

Reply via email to