On Sat, Apr 26, 2025 at 1:46 PM Barry Smith <bsm...@petsc.dev> wrote:

>
>   The guards are supposed to be universal, not one-offs that are put into
> specific locations. How come no errors with debug mode are detected in this
> situation?]
>

Hmm, VecSet() has

    PetscCall(VecSetErrorIfLocked(x, 1));

which should error. Is Derek not checking error codes?

  Thanks,

    Matt


>   Barry
>
>
> On Apr 26, 2025, at 1:09 PM, Matthew Knepley <knep...@gmail.com> wrote:
>
> 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!eatD9TtAKdE50XiRgd9HWccqIXKXbEXVFEYQ9n9arp3lVyayhSxYSBkK4l6sfp5_AbQiWZCILgZT0k32ZMuv$
>  
> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!aIL-dQ6HGo2zkrc1_qEB3XbGFGhwsiPuJRK68V4emqBz31A_jzsgI-sJS8ki4Sx6hcqI_Ya3tzpzdl8ciLTN$>
>
>
>

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

Reply via email to