Junchao, should we put guards in VecSet() and LocalToGlobal() for the array
lock?

  Thanks,

     Matt

On Sat, Apr 26, 2025 at 11:50 AM Junchao Zhang <junchao.zh...@gmail.com>
wrote:

> Yes, that is correct.
>
> --Junchao Zhang
>
>
> On Sat, Apr 26, 2025 at 10:35 AM Derek Teaney <derek.tea...@stonybrook.edu>
> wrote:
>
>> Ok -- got it -- thanks so just do the RestoreArray before the final step,
>> e.g.
>>
>> Loop over cases
>>       VecSet(dn_local, 0.)
>>       GetArray(dn_local, &dn)  // RIGHT
>>       Fill up dn
>>       Restore Array
>>       LocalToGlobal
>>
>>
>> On Sat, Apr 26, 2025 at 9:50 AM Junchao Zhang <junchao.zh...@gmail.com>
>> wrote:
>>
>>> 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
>>>> ------------------------------------------------------------------------
>>>>
>>>>
>>
>> --
>> ------------------------------------------------------------------------
>> 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
>> ------------------------------------------------------------------------
>>
>>

-- 
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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!aIL-dQ6HGo2zkrc1_qEB3XbGFGhwsiPuJRK68V4emqBz31A_jzsgI-sJS8ki4Sx6hcqI_Ya3tzpzdlhh2o96$
  
<https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!aIL-dQ6HGo2zkrc1_qEB3XbGFGhwsiPuJRK68V4emqBz31A_jzsgI-sJS8ki4Sx6hcqI_Ya3tzpzdl8ciLTN$
 >

Reply via email to