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?

  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 
> <mailto: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 
>> <mailto: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 
>>> <mailto:junchao.zh...@gmail.com>> wrote:
>>>> On Sat, Apr 26, 2025 at 8:27 AM Derek Teaney via petsc-users 
>>>> <petsc-users@mcs.anl.gov <mailto: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 
>>>>> <mailto: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 
>>>>>>> <mailto: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 
>>>>>>> <mailto: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 <mailto: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 
>>>>>>>>> <mailto: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 <mailto: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 <mailto: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 <mailto: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!fE14MPtF_3o08eM3ty1elbmmVfVpJTt3JiSuxrBbKBXPwXIHLTC4l7wwrUT21_bE5_FN9mM0rKi3SAGYKstfsrg$
>   
> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!aIL-dQ6HGo2zkrc1_qEB3XbGFGhwsiPuJRK68V4emqBz31A_jzsgI-sJS8ki4Sx6hcqI_Ya3tzpzdl8ciLTN$>

Reply via email to