On Sat, Apr 26, 2025 at 8:27 AM Derek Teaney via petsc-users <
petsc-users@mcs.anl.gov> wrote:

> 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
>
The above two pieces of code are both wrong, in my view.

>
>
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
>
This is also wrong.
I think the rule here is: GetArray() puts the vector in an interim state.
One shall not call any vector routines (ex. LocalToGlobal/GlobalToLocal)
before RestoreArray().  You can only operate on the array instead.


>
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