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$>